Commit 0436f74
Changed files (285)
ahk
alta3
moved
ssh-copy-id-from-github
traefik-experiments
ansible-flask
ansible-md-pis
ansible-seedbox
group_vars
roles
build
tasks
common
config
blog-pelican-source
pelican
content
bryfry.github.com
blog
2011
06
01
eff-tor-challenge-amazon-ec2-free-usage-tier
10
moving-window-buttons-ubuntu
11
26
namecoind-on-ubuntu-11-10-x64
12
07
on-hacking-larssons-folly
2012
04
29
move-minecraft-spawn-with-python
archives
categories
10-04
10-10
11-04
11-10
12-04
ami
anonymization
bitcoin
books
cloud
ec2
eff
ethics
gnome
hacking
journalism
larsson
linix
minecraft
namecoin
python
stieg
ubuntu
font
images
social
javascripts
stylesheets
constanceanderik.io.git
home_2024
mc_admin
minecraft.trustme.click
misc-ansible
asusy-net
dev-strap
papercuts
scrapem
scripts
py
srs
vagrantfiles
ahk/sanity.ahk
@@ -0,0 +1,16 @@
+#SingleInstance Force
+
+; caps lock to control
+CapsLock::Ctrl
+
+; caffiene
+Loop {
+ Send "{ScrollLock down}{ScrollLock up}"
+ Send "{ScrollLock down}{ScrollLock up}"
+ Sleep 5 * 60000
+}
+
+; lock
+^!l::{
+ DllCall("user32.dll\LockWorkStation")
+}
alta3/a3web/a3web/amp.yml
@@ -0,0 +1,58 @@
+ # may be saved as tasks/apache.yml
+ - name: ensure lamp packages are at the latest version
+ apt: pkg={{item}} state=latest update_cache=yes
+ with_items:
+ - apache2
+ - apache2-mpm-prefork
+ - apache2-utils
+ - apache2.2-common
+ - libapache2-mod-php5
+ - libapr1
+ - libaprutil1
+ - libdbd-mysql-perl
+ - libdbi-perl
+ - libnet-daemon-perl
+ - libplrpc-perl
+ - libpq5
+ - mysql-client-5.5
+ - mysql-common
+ - mysql-server
+ - mysql-server-5.5
+ - php5-common
+ - php5-mysql
+ - python-dev
+ - python-pip
+ - build-essential
+
+ - name: pip
+ easy_install: name=distribute
+
+ - name: ensure pip requirements satisfied
+ pip: name=MySQL-python
+
+ - name: ensure Apache is running
+ service: name=apache2 state=started
+
+ - name: ensure MySQL is running
+ service: name=mysql state=started
+
+ - name: update mysql root password for all root accounts
+ mysql_user: name=root host={{item}} password=$mysql_root_password
+ with_items:
+ - $ansible_hostname
+ - 127.0.0.1
+ - ::1
+ - localhost
+
+ - name: copy .my.cnf file with root password credentials
+ template: src=templates/root/my.cnf.j3 dest=/root/.my.cnf owner=root mode=0600
+
+ - name: delete anonymous MySQL server user for $server_hostname
+ action: mysql_user user="" host="$server_hostname" state="absent"
+
+ - name: delete anonymous MySQL server user for localhost
+ action: mysql_user user="" state="absent"
+
+ - name: remove the MySQL test database
+ action: mysql_db db=test state=absent
+
alta3/a3web/a3web/cli-std.yml
@@ -0,0 +1,7 @@
+- name: ensure standard command line tools installed
+ apt: pkg={{ item }} state=latest update_cache=yes
+ with_items:
+ - htop
+ - vim
+ - tmux
+ - git
alta3/a3web/a3web/handlers.yml
@@ -0,0 +1,3 @@
+# may be saved as handlers/handlers.yml:w
+ - name: restart apache
+ service: name=apache2 state=restarted
alta3/a3web/a3web/lamp-wp.yml
@@ -0,0 +1,11 @@
+---
+- hosts: webserver
+ vars:
+ http_port: 80
+ max_clients: 200
+ user: vagrant
+ tasks:
+ - include: cli-std.yml
+ - include: amp.yml
+ handlers:
+ - include: handlers.yml
alta3/a3web/a3web/vagrant-inventory
@@ -0,0 +1,5 @@
+[webserver]
+192.168.133.101
+
+[hosting:children]
+webserver
alta3/a3web/a3web/Vagrantfile
@@ -0,0 +1,31 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") do |config|
+ # Every Vagrant virtual environment requires a box to build off of.
+ config.vm.box = "precise64"
+
+ # The url from where the 'config.vm.box' box will be fetched if it
+ # doesn't already exist on the user's system.
+ # config.vm.box_url = "http://domain.com/path/to/above.box"
+
+ # Create a forwarded port mapping which allows access to a specific port
+ # within the machine from a port on the host machine. In the example below,
+ # accessing "localhost:8080" will access port 80 on the guest machine.
+ # config.vm.network :forwarded_port, guest: 80, host: 8080
+
+ # Create a private network, which allows host-only access to the machine
+ # using a specific IP.
+ config.vm.network :private_network, ip: "192.168.133.101"
+
+ # Create a public network, which generally matched to bridged network.
+ # Bridged networks make the machine appear as another physical device on
+ # your network.
+ # config.vm.network :public_network
+
+ config.vm.provision :ansible do |ansible|
+ ansible.sudo = true
+ ansible.playbook = "lamp-wp.yml"
+ ansible.inventory_file = "vagrant-inventory"
+ end
+end
alta3/moved/artifacts/alta3.com_redir.caddyfile
@@ -0,0 +1,1043 @@
+redir /blog/ansible-eos-banner-tutorial https://blog.alta3.com/topics/ansible/ansible-switch-configuration/ 301
+redir /blog/installing-ansible https://blog.alta3.com/topics/ansible/how-to-install-ansible/index.htmlhttps:// 301
+redir /blog/ansible-and-infoblox https://blog.alta3.com/topics/ansible/ansible-and-infoblox/ 301
+redir /blog/install-virtualbox https://blog.alta3.com/topics/linux/installing-virtualbox/ 301
+redir /blog/installing+virtualbox https://blog.alta3.com/topics/linux/installing-virtualbox/ 301
+redir /blog/installing-virtualbox https://blog.alta3.com/topics/linux/installing-virtualbox/ 301
+redir /blog/ansible-switch-configuration-archive-tutorial https://blog.alta3.com/topics/ansible/ansible-switch-config-archive/ 301
+redir /blog/passing-the-ckad https://blog.alta3.com/topics/kubernetes/crushckad/ 301
+redir /blog/python-versions-python2-vs-python3 https://blog.alta3.com/topics/programming/python-versions-python2-vs-python3/ 301
+redir /blog/restore-backed-up-files-using-ansible https://blog.alta3.com/topics/ansible/restore-backed-up-files-using-ansible/ 301
+redir /blog/8-steps-to-k8s-cluster https://blog.alta3.com/topics/kubernetes/8-steps-to-k8s-cluster/ 301
+redir /blog/introduction-to-kubernetes https://blog.alta3.com/blogs/kubernetes/8-steps-to-k8s-cluster/ 301
+redir /blog/adding-spell-checking-as-a-github-action https://blog.alta3.com/topics/scm-and-pipelines/adding-spell-checking-as-a-github-action/ 301
+redir /blog/ansible+switch+config+archive https://blog.alta3.com/topics/ansible/ansible-and-infoblox/ 301
+redir /blog/ansible-basics-tutorial https://blog.alta3.com/topics/ansible/ansible-basics-tutorial/ 301
+redir /blog/ansible-is-for-everyone https://blog.alta3.com/topics/ansible/ansible-is-for-everyone/ 301
+redir /blog/ansible-template-tutorial https://blog.alta3.com/topics/ansible/ansible-template-tutorial/ 301
+redir /blog/ansible-templates https://blog.alta3.com/topics/ansible/ansible-templates/ 301
+redir /blog/ansible-vault-hello-world https://blog.alta3.com/topics/ansible/ansible-vault-hello-world/ 301
+redir /blog/api-requests-with-python https://blog.alta3.com/topics/api/api-requests-with-python/ 301
+redir /blog/back-up-your-organizations-github https://blog.alta3.com/topics/scm-and-pipelines/back-up-your-organizations-github/ 301
+redir /blog/converting-html-to-markdown https://blog.alta3.com/topics/programming/converting-html-to-markdown/ 301
+redir /blog/create-pipeline https://blog.alta3.com/topics/scm-and-pipelines/create-pipeline/ 301
+redir /blog/creating-flask-server https://blog.alta3.com/topics/programming/creating-flask-server/ 301
+redir /blog/crushckad https://blog.alta3.com/topics/kubernetes/crushckad/ 301
+redir /blog/diagnosing-a-slow-network https://blog.alta3.com/topics/networking/diagnosing-a-slow-network/ 301
+redir /blog/error-invalid-value-apiall-on-kube-apiserver https://blog.alta3.com/topics/kubernetes/error-invalid-value-apiall-on-kube-apiserver/ 301
+redir /blog/fastapi https://blog.alta3.com/topics/api/fastapi/ 301
+redir /blog/getting-keyed-up https://blog.alta3.com/topics/networking/getting-keyed-up/ 301
+redir /blog/go-programming-print https://blog.alta3.com/topics/programming/go-programming-print/ 301
+redir /blog/gos-approach-to-arrays-and-slices https://blog.alta3.com/topics/programming/gos-approach-to-arrays-and-slices/ 301
+redir /blog/how-to-create-a-virtual-machine https://blog.alta3.com/topics/linux/how-to-create-a-virtual-machine/ 301
+redir /blog/how-to-install-terraform-infrastructure-as-code-tool https://blog.alta3.com/topics/linux/how-to-install-terraform-infrastructure-as-code-tool/ 301
+redir /blog/install-python-and-ansible https://blog.alta3.com/topics/ansible/install-python-and-ansible/ 301
+redir /blog/install-windows-terminal https://blog.alta3.com/topics/linux/install-windows-terminal/ 301
+redir /blog/installing-windows-subsystem-for-linux-2-wsl2 https://alta3.com/blog/installing-windows-subsystem-for-linux-2-wsl2 301
+redir /blog/jinja-templates https://blog.alta3.com/topics/programming/jinja-templates/ 301
+redir /blog/launch-cloud-init-configured-vms https://blog.alta3.com/topics/networking/launch-cloud-init-configured-vms/ 301
+redir /blog/magic-the-gathering-api https://blog.alta3.com/topics/api/magic-the-gathering-api/ 301
+redir /blog/managing-github-issue-labels-across-organizations-and-repositories https://blog.alta3.com/topics/scm-and-pipelines/managing-github-issue-labels-across-organizations-and-repositories/ 301
+redir /blog/minus-28-bytes-later https://blog.alta3.com/topics/networking/minus-28-bytes-later/ 301
+redir /blog/-28-bytes-later https://blog.alta3.com/topics/networking/minus-28-bytes-later/ 301
+redir /blog/moving-active-k8s-cluster-on-qemu-vm https://blog.alta3.com/topics/kubernetes/moving-active-k8s-cluster-on-qemu-vm/ 301
+redir /blog/python-and-apis-nasas-open-apis https://blog.alta3.com/topics/api/python-and-apis-nasas-open-apis/ 301
+redir /blog/python-and-the-magic-wormhole-project https://blog.alta3.com/topics/programming/python-and-the-magic-wormhole-project/ 301
+redir /blog/python-apis-part2 https://blog.alta3.com/topics/api/python-apis-part2/ 301
+redir /blog/python-tutorial-using-python-to-interact-with-excel https://blog.alta3.com/topics/programming/python-versions-python2-vs-python3/ 301
+redir /blog/pythonapi-part1 https://blog.alta3.com/topics/api/pythonapi-part1/ 301
+redir /blog/securingdnsmasq https://blog.alta3.com/topics/networking/securingdnsmasq/ 301
+redir /blog/singlevmk8s https://blog.alta3.com/topics/kubernetes/singlevmk8s/ 301
+redir /blog/throttling-ansibles-localaction-module https://blog.alta3.com/topics/ansible/throttling-ansibles-localaction-module/ 301
+redir /blog/tune-your-dot-files https://blog.alta3.com/topics/linux/tune-your-dot-files/ 301
+redir /blog/ubuntu-1804-preseed-installation https://blog.alta3.com/topics/linux/ubuntu-1804-preseed-installation/ 301
+redir /blog/unlocking-your-vim-screen https://blog.alta3.com/topics/linux/unlocking-your-vim-screen/ 301
+redir /blog/vim-introduction-getting-started-with-vim https://blog.alta3.com/topics/linux/vim-introduction-getting-started-with-vim/ 301
+redir /blog/vimcolorscheme https://blog.alta3.com/topics/linux/vimcolorscheme/ 301
+redir /blog/tag/kubernetes https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/curl https://blog.alta3.com/tags/curl 301
+redir /blog/tag/kubernetes+cluster https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/ansible+hosts https://blog.alta3.com/tags/ansible_hosts 301
+redir /blog/tag/Restful+API https://blog.alta3.com/tags/restful_api 301
+redir /blog/tag/networking https://blog.alta3.com/tags/networking 301
+redir /blog/tag/python+tutorial https://blog.alta3.com/tags/python 301
+redir /blog/tag/kubernetes+training https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/icmp https://blog.alta3.com/tags/icmp 301
+redir /blog/tag/back-up https://blog.alta3.com/tags/back_up 301
+redir /blog/tag/kubernetes+tutorial https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/online+ansible+training https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/Ansible+Tutorial https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/Init https://blog.alta3.com/tags/init 301
+redir /blog/tag/automation https://blog.alta3.com/tags/automation 301
+redir /blog/tag/dev https://blog.alta3.com/tags/dev 301
+redir /blog/tag/vm%27s https://blog.alta3.com/tags/vms 301
+redir /blog/tag/wsl2 https://blog.alta3.com/tags/wsl2 301
+redir /blog/tag/powershell https://blog.alta3.com/tags/powershell 301
+redir /blog/tag/github+keys https://blog.alta3.com/tags/github_keys 301
+redir /blog/tag/html https://blog.alta3.com/tags/html 301
+redir /blog/tag/api https://blog.alta3.com/tags/api 301
+redir /blog/tag/vim https://blog.alta3.com/tags/vim 301
+redir /blog/tag/ansible+certification https://blog.alta3.com/tags/ansible_certification 301
+redir /blog/tag/Ansible+Training https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/programming https://blog.alta3.com/tags/programming 301
+redir /blog/tag/webinar https://blog.alta3.com/tags/webinar 301
+redir /blog/tag/python https://blog.alta3.com/tags/python 301
+redir /blog/tag/github https://blog.alta3.com/tags/github 301
+redir /blog/tag/linux+tutorial https://blog.alta3.com/tags/linux 301
+redir /blog/tag/ubuntu https://blog.alta3.com/tags/ubuntu 301
+redir /blog/tag/ckad https://blog.alta3.com/tags/ckad 301
+redir /blog/tag/python+training https://blog.alta3.com/tags/python 301
+redir /blog/tag/iperf https://blog.alta3.com/tags/iperf 301
+redir /blog/tag/private+key https://blog.alta3.com/tags/private_key 301
+redir /blog/tag/mtu https://blog.alta3.com/tags/mtu 301
+redir /blog/tag/jinja2 https://blog.alta3.com/tags/jinja2 301
+redir /blog/tag/id_rsa.pub https://blog.alta3.com/tags/id_rsa 301
+redir /blog/tag/ansible+tutorial https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/virtual+machine https://blog.alta3.com/tags/vm 301
+redir /blog/tag/versions https://blog.alta3.com/tags/versions 301
+redir /blog/tag/vm https://blog.alta3.com/tags/vm 301
+redir /blog/tag/virtual+machines https://blog.alta3.com/tags/vm 301
+redir /blog/tag/Ansible https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/http https://blog.alta3.com/tags/http 301
+redir /blog/tag/youtube https://blog.alta3.com/tags/youtube 301
+redir /blog/tag/ansible+training https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/key+gen https://blog.alta3.com/tags/key_gen 301
+redir /blog/tag/id_rsa https://blog.alta3.com/tags/id_rsa 301
+redir /blog/tag/roles https://blog.alta3.com/tags/roles 301
+redir /blog/tag/%23python https://blog.alta3.com/tags/python 301
+redir /blog/tag/show https://blog.alta3.com/tags/show 301
+redir /blog/tag/ansible+template https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible+switch+config+archive https://blog.alta3.com/tags/ansible_switch_config_archive 301
+redir /blog/tag/playbooks https://blog.alta3.com/tags/ansible_playbooks 301
+redir /blog/tag/requests https://blog.alta3.com/tags/requests 301
+redir /blog/tag/InfoBlox https://blog.alta3.com/tags/InfoBlox 301
+redir /blog/tag/ansible https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/keygen https://blog.alta3.com/tags/keygen 301
+redir /blog/tag/ansible+inventory https://blog.alta3.com/tags/ansible_inventory 301
+redir /blog/tag/online+python+training https://blog.alta3.com/tags/python 301
+redir /blog/tag/playlist https://blog.alta3.com/tags/playlist 301
+redir /blog/tag/mtu+testing https://blog.alta3.com/tags/mtu_testing 301
+redir /blog/tag/api+design https://blog.alta3.com/tags/api 301
+redir /blog/tag/virtualbox https://blog.alta3.com/tags/virtualbox 301
+redir /blog/tag/Ansible+Playbook https://blog.alta3.com/tags/ansible_playbook 301
+redir /blog/tag/Network+Objects https://blog.alta3.com/tags/network_objects 301
+redir /blog/tag/installing+virtualbox https://blog.alta3.com/tags/installing_virtualbox 301
+redir /blog/tag/linux https://blog.alta3.com/tags/linux 301
+redir /blog/tag/markdown https://blog.alta3.com/tags/markdown 301
+redir /blog/tag/tutorial https://blog.alta3.com/tags/tutorial 301
+redir /blog/tag/dsnmasq https://blog.alta3.com/tags/dsnmasq 301
+redir /blog/tag/python+programming https://blog.alta3.com/tags/python 301
+redir /blog/tag/installing+kubernetes https://blog.alta3.com/tags/installing_kubernetes 301
+redir /blog/tag/api+design+with+python https://blog.alta3.com/tags/api 301
+redir /blog/tag/k8s https://blog.alta3.com/tags/k9s 301
+redir /blog/tag/vcs https://blog.alta3.com/tags/vcs 301
+redir /blog/tag/Writing+API%27s+with+Python https://blog.alta3.com/tags/python 301
+redir /blog/tag/windows https://blog.alta3.com/tags/windows 301
+redir /blog/tag/ansible+template+module https://blog.alta3.com/tags/ansible_template_module 301
+redir /blog/tag/practices https://blog.alta3.com/tags/programming 301
+redir /blog/tag/nasa https://blog.alta3.com/tags/nasa 301
+redir /blog/tag/%23programmng https://blog.alta3.com/tags/programmng 301
+redir /blog/tag/ansible+eos+banner https://blog.alta3.com/tags/eos_banner 301
+redir /blog/tag/virtual+box https://blog.alta3.com/tags/virtualbox 301
+redir /blog/tag/windows+subsystem https://blog.alta3.com/tags/wsl2 301
+redir /blog/tag/ansible+switch+configuration https://blog.alta3.com/tags/ansible_switch_configuration 301
+redir /blog/tag/windows%20subsystem https://blog.alta3.com/tags/wsl2 301
+redir /blog/tag/virtual%20machines https://blog.alta3.com/tags/vm 301
+redir /blog/tag/virtual%20machine https://blog.alta3.com/tags/vm 301
+redir /blog/tag/virtual%20box https://blog.alta3.com/tags/vm 301
+redir /blog/tag/Restful%20API https://blog.alta3.com/tags/rest 301
+redir /blog/tag/python%20training https://blog.alta3.com/tags/python 301
+redir /blog/tag/python%20programming https://blog.alta3.com/tags/python 301
+redir /blog/tag/#python https://blog.alta3.com/tags/python 301
+redir /blog/tag/#programmng https://blog.alta3.com/tags/programming 301
+redir /blog/tag/private%20key https://blog.alta3.com/tags/id_rsa 301
+redir /blog/tag/online%20ansible%20training https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/Network%20Objects https://blog.alta3.com/tags/network 301
+redir /blog/tag/linux%20tutorial https://blog.alta3.com/tags/linux 301
+redir /blog/tag/kubernetes%20tutorial https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/kubernetes%20training https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/kubernetes%20cluster https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/key%20gen https://blog.alta3.com/tags/id_rsa 301
+redir /blog/tag/installing%20kubernetes https://blog.alta3.com/tags/kubernetes 301
+redir /blog/tag/github%20keys https://blog.alta3.com/tags/github 301
+redir /blog/tag/api%20design https://blog.alta3.com/tags/api 301
+redir /blog/tag/Ansible%20Tutorial https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20tutorial https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20training https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20template%20module https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20template https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20inventory https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20hosts https://blog.alta3.com/tags/ansible 301
+redir /blog/tag/ansible%20eos%20banner https://blog.alta3.com/tags/eos 301
+redir /blog/tag/ansible%20certification https://blog.alta3.com/tags/ansible 301
+redir /blog/category/youtube https://blog.alta3.com/tags/youtube 301
+redir /blog/category/how-to https://blog.alta3.com/tags/how_to 301
+redir /blog/category/videos https://blog.alta3.com/tags/video 302
+redir /blog/category/blog https://blog.alta3.com/ 301
+redir /zach /instructors/9c932d8e-177a-44af-9edf-0fe0b0fa30fd 301
+redir /tim /instructors/85f3b9ca-e529-4377-8701-4cf5d54b7024 301
+redir /tim-1 /instructors/85f3b9ca-e529-4377-8701-4cf5d54b7024 301
+redir /chad /instructors/09dda129-d46e-4cb1-a22c-440e045885b0 301
+redir /stu /instructors/fd8397ea-bb40-41ad-974f-9b415d19bf64 301
+redir /hutch /instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301 301
+redir /hutch-copy /instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301 301
+redir /hutch-1 /instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301 301
+redir /jason /instructors/e0388f28-2f33-44a3-91b5-1d36ac3476d7 301
+redir /paul /instructors/7a26aba0-5747-47f8-bc30-e3e6dc90004b 301
+redir /rob /instructors/adadf1ca-bbce-4a1e-bf4c-c3a14f64e290 301
+redir /sean /instructors/7eef3cff-369a-4a11-a081-0ac8f8bcb387 301
+redir /talia /instructors 301
+redir /3-7-python-basics /courses/pyb 301
+redir /8-2-to-8-13-py-for-sde /courses/tlg-sde-python 301
+redir /Avaya_SIP_Training.html /courses/sip 301
+redir /DEVOPS /courses/devops-bootcamp 301
+redir /ansible-training-1 /courses/ansible-101 301
+redir /certification-5g /courses/5g 301
+redir /certification-pyb /courses/pyb 301
+redir /certification-pyb-1 /courses/pyb 301
+redir /certification-pyna-202 /courses/pyna 301
+redir /certification-pyna-202-1 /courses/pyna 301
+redir /certification-python-201 /courses/pyna 301
+redir /certification-python-201-1 /courses/pyna 301
+redir /courses/avaya /courses?category=Telecom 301
+redir /courses/ceph /courses?category=Infrastructure 301
+redir /courses/ims /courses?category=Telecom 301
+redir /courses/ipsec /courses?category=Infrastructure 301
+redir /courses/k8s /courses/kubernetes 301
+redir /courses/networks /courses/napya 301
+redir /courses/python1 /courses/pyb 301
+redir /courses/python2 /courses/napya 301
+redir /courses/python3 /courses/api 301
+redir /courses/rhcsa /courses/linux-4-dev 301
+redir /courses/sdn /courses/sd-wan 301
+redir /courses/virtual-sip-training/ /courses/sip 301
+redir /devops. /courses/devops-bootcamp 301
+redir /labs/sdn/ /course/sdn 301
+redir /march-suse-rancher-webinar-1 /courses/rancher 301
+redir /napya /courses/napya 301
+redir /new-page /courses 301
+redir /overview-5G /courses/5g 301
+redir /overview-5g /courses/5g 301
+redir /overview-5g-courses /courses/5g 301
+redir /overview-5g-overview /courses/5g 301
+redir /overview-5g-overview/ /courses/5g 301
+redir /overview-aa /courses/avaya 301
+redir /overview-ai-chat-bard /courses/ai-app-dev 301
+redir /overview-ans /courses/ansible-101 301
+redir /overview-ansible /courses/ansible-101 301
+redir /overview-ansible-1 /courses/ansible-101 301
+redir /overview-ansible-101 /courses/ansible-101 301
+redir /overview-ansible-102 /courses/ansible-101 301
+redir /overview-ansible-2 /courses?category=Ansible 301
+redir /overview-ansible-202 /courses/ansible-202-server 301
+redir /overview-ansible-202-1 /courses/ansible-202-server 301
+redir /overview-ansible-202-server /courses/ansible-202-server 301
+redir /overview-ansible-203 /courses/ansible-203-windows 301
+redir /overview-ansible-203-windows /courses/ansible-203-windows 301
+redir /overview-ansible-302 /courses/awx 301
+redir /overview-ansible-302-1 /courses?category=Ansible 301
+redir /overview-ansible-ai /courses/ansible-101 301
+redir /overview-ansible-ai-1 /courses?category=Ansible 301
+redir /overview-ansible-training-dell /courses?category=Ansible 301
+redir /overview-ansidell /courses/ansidell 301
+redir /overview-api-python-training /courses/api 301
+redir /overview-automation-python-ansible-training /courses/pyna 301
+redir /overview-automation-python-ansible-training-1 /courses?category=Ansible 301
+redir /overview-avaya-training /courses/avaya 301
+redir /overview-avaya-trainingThis%20video /courses/avaya 301
+redir /overview-awx /courses/awx 301
+redir /overview-c98wf6 /courses/software-dev 301
+redir /overview-casp /courses/casp 301
+redir /overview-casp/ /courses/casp 301
+redir /overview-ceh /courses/ceh 301
+redir /overview-ceph /courses/ceph 301
+redir /overview-ci/cd-pipelines /courses/jenkins 301
+redir /overview-circleci-training /courses/ci-cd 301
+redir /overview-cissp /courses/cissp 301
+redir /overview-cka /courses/cka 301
+redir /overview-cka-training%C2%A0-%C2%A0virtual%20live%20training%20-%205-9%20June%202023 /courses/cka 301
+redir /overview-cka-training /courses/cka 301
+redir /overview-cka-training-1 /courses/cka 301
+redir /overview-cks /courses/cks 301
+redir /overview-comptia-network /courses/comptia-network 301
+redir /overview-comptia-network/ /courses/comptia-network 301
+redir /overview-comptia-security /courses/comptia-security 301
+redir /overview-crush-the-ckad /courses/kubernets 301
+redir /overview-crush-the-ckad-exam /courses/ckad 301
+redir /overview-dcucai /courses/data-center 301
+redir /overview-deploying5g /courses/5g-deploy 301
+redir /overview-deploying5g-1 /courses/5g-deploy 301
+redir /overview-devops-foundations-training /courses/devops-bootcamp 301
+redir /overview-devsecops /courses/devops-bootcamp 301
+redir /overview-django /courses/django 301
+redir /overview-docker /courses/docker-101 301
+redir /overview-docker-1 /courses/docker 301
+redir /overview-docker101 /courses/docker 301
+redir /overview-docker101-1 /courses/docker-101 301
+redir /overview-github /courses/github 301
+redir /overview-github-training /courses/github 301
+redir /overview-gitlab /courses/gitlab 301
+redir /overview-gitlab-training /courses/gitlab 301
+redir /overview-gitlab-training-1 /courses/gitlab 301
+redir /overview-golang-ai /courses/golang 301
+redir /overview-golang-ai-1 /courses/golang 301
+redir /overview-golang-training /courses/golang 301
+redir /overview-golang-training-1 /courses/golang 301
+redir /overview-idswots /courses 301
+redir /overview-intucsx /courses/intro-to-computing 301
+redir /overview-ipsec-training /courses/tcp-ip 301
+redir /overview-java-ai /courses/java 301
+redir /overview-java-ai-1 /courses/java-ai 301
+redir /overview-jenkins-training /courses/jenkins 301
+redir /overview-k8s /courses/kubernetes 301
+redir /overview-kubernetes-cka /courses/cka 301
+redir /overview-kubernetes-ckad /courses/kubernetes 301
+redir /overview-kubernetes-ckad-1 /courses/kubernetes 301
+redir /overview-linux-4-dev /courses/linux-4-dev 301
+redir /overview-linux-training /courses/linux-4-dev 301
+redir /overview-mans /courses/mans 301
+redir /overview-mastering-ansible-training /courses/ansible-101 301
+redir /overview-mastering-ansible-training-1 /courses/ansible-101 301
+redir /overview-microservices-training /courses/microservices 301
+redir /overview-nab /courses/nab 301
+redir /overview-napya /courses/napya 301
+redir /overview-natural-language-ai /courses/natural-lang-apis 301
+redir /overview-natural-language-ai-1 /courses/natural-lang-apis 301
+redir /overview-natural-language-ai-delete /courses/natural-lang-apis 301
+redir /overview-natural-language-ai/ /courses/natural-lang-apis 301
+redir /overview-network-automation /courses/napya 301
+redir /overview-opensource-ai /courses/ai-app-dev 301
+redir /overview-opensource-ai-1 /courses/ai-app-dev 301
+redir /overview-opensource-ai-dell /courses/ai-app-dev 301
+redir /overview-packer /courses/packer 301
+redir /overview-prompt-engineering /courses/ai-gpu 301
+redir /overview-py-datasci /courses/py-datasci 301
+redir /overview-pyb /courses/pyb 301
+redir /overview-pyna /courses/pyna 301
+redir /overview-python-ai /courses/ai-app-dev 301
+redir /overview-python-ai-1 /courses/ai-app-dev 301
+redir /overview-python-basics-training /courses/pyb 301
+redir /overview-python-network-automation /courses/pyna 301
+redir /overview-rancher-training /courses/rancher 301
+redir /overview-sd-wan /courses/sd-wan 301
+redir /overview-sdn /courses/sd-wan 301
+redir /overview-sdn-training /courses/sd-wan 301
+redir /overview-sdn-trainingnopvc /courses/sd-wan 301
+redir /overview-sip /courses/sip 301
+redir /overview-sk8s /courses/sk8s 301
+redir /overview-sles-training /courses/linux-4-dev 301
+redir /overview-suse-k8s /courses/sk8s 301
+redir /overview-suse-k8s-1 /courses/sk8s 301
+redir /overview-suse-neuvector /courses/suse-neuvector 301
+redir /overview-suse-neuvector/ /courses/suse-neuvector 301
+redir /overview-tcp-ip /courses/tcp-ip 301
+redir /overview-terraform /courses/terraform 301
+redir /overview-terraform-102 /courses/terraform 301
+redir /overview-terraform-103-paloalto /courses/terraform 301
+redir /overview-terraform-104-fortinet /courses/auto-fortinet-terraform 301
+redir /overview-terraform-special /courses/terraform 301
+redir /overview-training-data-sciences /courses/py-datasci 301
+redir /overview-volte /courses/volte 301
+redir /overview-zerocode-ai /courses/ai-zero-code 301
+redir /overview-zerocodeai /courses/ai-zero-code 301
+redir /overview-zerocodechatbots /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-1 /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-bard /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-chatgpt /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-chatgpt-1 /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-watson /courses/ai-zero-code 301
+redir /overview-zerocodechatbots-watson-1 /courses/ai-zero-code 301
+redir /overviewansible-for-dbas /courses/ansible-101 301
+redir /overviewjenkins /courses/jenkins 301
+redir /overviewpython-training-data-sciences /courses/py-datasci 301
+redir /overviewsdwantraining /courses/sd-wan 301
+redir /programming-training-1 /courses/programming 301
+redir /pure-storage-terraform /courses/terraform 301
+redir /rancher-training /courses/rancher 301
+redir /s/Mastering-Ansible-873z.pdf /courses/ansible-101 301
+redir /sle201v15-training /courses/sle201 301
+redir /store-2/p/country-feast-set-3nybt-kkkbr /courses/country-feast 301
+redir /store-5g /courses/5g 301
+redir /store-ai-bard /courses/ai-zero-code 301
+redir /store-ansible-training /courses/ansible-101 301
+redir /store-ansible-training-dell /courses/ansible-101 301
+redir /store-api-python-training /courses/api 301
+redir /store-ceh /courses/ceh 301
+redir /store-certified-kubernetes-training /courses/kubernetes 301
+redir /store-certified-kubernetes-training-1 /courses/cka 301
+redir /store-cks /courses/cks 301
+redir /store-comptia-network /courses/comptia-network 301
+redir /store-django /courses/django 301
+redir /store-gitlab-training /courses/gitlab 301
+redir /store-ipsec-training /courses/tcp-ip 301
+redir /store-jenkins-training /courses/jenkins 301
+redir /store-kubernetes-ckad /courses/kubernetes 301
+redir /store-labs /courses/devops-bootcamp 301
+redir /store-linux-training /courses/linux-4-dev 301
+redir /store-mans /courses/mans 301
+redir /store-microservices-training /courses/microservices 301
+redir /store-network-automation-training /courses/network-automation 301
+redir /store-network-automation-training-1 /courses/network-automation 301
+redir /store-neuvector /courses 301
+redir /store-nlp-ai /courses/natural-lang-apis 301
+redir /store-nlp-ai-1 /courses/natural-lang-apis 301
+redir /store-os-generative-ai /courses/ai-gpu 301
+redir /store-prompt-engineering /courses/ai-gpu 301
+redir /store-python-automation-training /courses/pyna 301
+redir /store-python-basics-training /courses/pyb 301
+redir /store-python-data-sciences-training /courses/py-datasci 301
+redir /store-python-data-sciences-training-1 /courses/py-datasci 301
+redir /store-rancher-training /courses/rancher 301
+redir /store-rancher-training-1 /courses/rancher 301
+redir /store-sdn-training /courses/sd-wan 301
+redir /store-sip /courses/sip 301
+redir /store-slesv201v15-training /courses/suse-sle201v15-linux-sept2021 301
+redir /store-suse-k8s-training /courses/suse-k8s-april2024 301
+redir /store-terraform /courses/terraform 301
+redir /store-volte /courses/volte 301
+redir /store/5g-essentials-online-live-class-august27-28 /courses/5g 301
+redir /store/5g-essentials-online-live-class-nov2020 /courses/5g 301
+redir /store/5g-essentials-self-paced-course /courses/5g 301
+redir /store/ansible-essentials-self-paced /courses/ansible-101 301
+redir /store/apis-and-api-design-with-python-june-1-5-jmz9w /courses/api 301
+redir /store/apis-and-api-design-with-python-nov2020 /courses/api 301
+redir /store/architecting-on-aws-online-live-class-oct2020 /courses/aws 301
+redir /store/avaya-aura-self-paced-course /courses/avaya 301
+redir /store/aws-technical-essentials-online-live-class-aug17 /courses/aws 301
+redir /store/big-data-on-aws-online-live-class-dec8 /courses/aws 301
+redir /store/big-data-on-aws-online-live-class-oct13 /courses/aws 301
+redir /store/ipsec-self-paced-course /courses/tcp-ip 301
+redir /store/kubernetes-bootcamp-online-live-class-august31 /courses/kubernetes 301
+redir /store/kubernetes-bootcamp-online-live-class-dec2020 /courses/kubernetes 301
+redir /store/kubernetes-bootcamp-online-live-class-oct2020 /courses/kubernetes 301
+redir /store/kubernetes-bootcamp-self-paced /courses/kubernetes 301
+redir /store/network-automation-with-python-and-ansible-online-live-class-oct2020 /courses/napya 301
+redir /store/p/2z334d2ojyyeh9u04uhj2oa1wsfmg5 /courses 301
+redir /store/p/5g-essentials-online-live-class-apr2022 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-april2021 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-aug2023 /courses/5g-deploy 301
+redir /store/p/5g-essentials-online-live-class-august27-28 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-dec2021 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-feb2021 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-feb2023 /courses/5g-deploy 301
+redir /store/p/5g-essentials-online-live-class-jan2021 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-jan2022 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-june2021-k5rbs /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-may2023 /courses/5g-deploy 301
+redir /store/p/5g-essentials-online-live-class-nov2020 /courses/5g 301
+redir /store/p/5g-essentials-online-live-class-nov2023 /courses/5g-deploy 301
+redir /store/p/5g-essentials-online-live-class-sept2021 /courses/5g 301
+redir /store/p/5g-essentials-self-paced-course /courses/5g 301
+redir /store/p/aXBzZWMtc2 /courses/tcp-ip 301
+redir /store/p/agile-8-2021-w9dhj-a8sad /courses/devops-bootcamp 301
+redir /store/p/agile10-2021-w9dhj /courses/devops-bootcamp 301
+redir /store/p/ansible-essentials-online-aug2023 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-feb2023 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-feb2024 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-feb2024-r3ptk /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-june2023-f8wt8 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-may2022 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-may2023 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-may2024 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-nov2022 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-nov2023 /courses/ansible-101 301
+redir /store/p/ansible-essentials-online-sept2023-ynbsl /courses/ansible-101 301
+redir /store/p/ansible-essentials-self-paced /courses/ansible-101 301
+redir /store/p/ansible-essentials-self-paced-ans2021 /courses/ansible-101 301
+redir /store/p/ansible-essentials-self-paced-nov2020 /courses/ansible-101 301
+redir /store/p/ansible-manual /courses/ansible-101 301
+redir /store/p/ansible-palo-alto-aug2024 /courses/auto-paloalto-pa 301
+redir /store/p/ansible-practice-labs /courses/ansible-101 301
+redir /store/p/api-design-with-python-april2023 /courses/api 301
+redir /store/p/api-design-with-python-aug2023 /courses/api 301
+redir /store/p/api-design-with-python-dec2022 /courses/api 301
+redir /store/p/api-design-with-python-dec2023 /courses/api 301
+redir /store/p/api-design-with-python-feb-2021 /courses/api 301
+redir /store/p/api-design-with-python-feb2023 /courses/api 301
+redir /store/p/api-design-with-python-jan2022 /courses/api 301
+redir /store/p/api-design-with-python-jan2024 /courses/api 301
+redir /store/p/api-design-with-python-jan2024-59pay /courses/api 301
+redir /store/p/api-design-with-python-july2024 /courses/api 301
+redir /store/p/api-design-with-python-june2023 /courses/api 301
+redir /store/p/api-design-with-python-march2024 /courses/api 301
+redir /store/p/api-design-with-python-may2024 /courses/api 301
+redir /store/p/api-design-with-python-nov2021 /courses/api 301
+redir /store/p/api-design-with-python-nov2021-f5ebn /courses/api 301
+redir /store/p/api-design-with-python-oct2023 /courses/api 301
+redir /store/p/api-design-with-python-oct2023-t7Xr8 /courses/api 301
+redir /store/p/api-design-with-python-sept2021 /courses/api 301
+redir /store/p/api-design-with-python-sept2024 /courses/api 301
+redir /store/p/api-practice-labs /courses/api 301
+redir /store/p/apis-and-api-design-with-python-april2021 /courses/api 301
+redir /store/p/apis-and-api-design-with-python-june-1-5-jmz9w /courses/api 301
+redir /store/p/apis-and-api-design-with-python-june2021 /courses/api 301
+redir /store/p/apis-and-api-design-with-python-nov2020 /courses/api 301
+redir /store/p/appdev-august2024 /courses/ai-app-dev 301
+redir /store/p/appdev-june2024 /courses/ai-app-dev 301
+redir /store/p/appdev-oct2024 /courses/ai-app-dev 301
+redir /store/p/avaya-aura-self-paced-course /courses/avaya 301
+redir /store/p/c98wf6-april2024 /courses 301
+redir /store/p/c98wf6-june2024 /courses 301
+redir /store/p/c98wf6-may2024 /courses 301
+redir /store/p/certified-ethical-hacker-may2021 /courses 301
+redir /store/p/certified-ethical-hacker-v10 /courses 301
+redir /store/p/certified-kubernetes-administrator-labs /courses/cka 301
+redir /store/p/ci/cd/july-2024 /courses/jenkins 301
+redir /store/p/ci/cd/oct2024 /courses/jenkins 301
+redir /store/p/cissp-boot-camp-online-live-dec2021 /courses/devops-bootcamp 301
+redir /store/p/cissp-boot-camp-online-live-nov2020-737ye /courses/devops-bootcamp 301
+redir /store/p/cka-online-live-class-12-2022 /courses/cka 301
+redir /store/p/cka-online-live-class-april2022 /courses/cka 301
+redir /store/p/cka-online-live-class-april2023 /courses/cka 301
+redir /store/p/cka-online-live-class-april2024 /courses/cka 301
+redir /store/p/cka-online-live-class-aug2023 /courses/cka 301
+redir /store/p/cka-online-live-class-aug2024 /courses/cka 301
+redir /store/p/cka-online-live-class-dec2023 /courses/cka 301
+redir /store/p/cka-online-live-class-feb-2023 /courses/cka 301
+redir /store/p/cka-online-live-class-feb2021-bgrm8 /courses/cka 301
+redir /store/p/cka-online-live-class-feb2024 /courses/cka 301
+redir /store/p/cka-online-live-class-june2023 /courses/cka 301
+redir /store/p/cka-online-live-class-june2024 /courses/cka 301
+redir /store/p/cka-online-live-class-nov2021 /courses/cka 301
+redir /store/p/cka-online-live-class-oct2023-6r888 /courses/cka 301
+redir /store/p/cka-online-live-class-oct2024 /courses/cka 301
+redir /store/p/cka-online-live-class-sep2021-w7p82 /courses/cka 301
+redir /store/p/cka-practice-labs /courses/cka 301
+redir /store/p/cka-self-paced-5fj6w /courses/cka 301
+redir /store/p/cka-selfpaced /courses/cka 301
+redir /store/p/cks /courses/cks 301
+redir /store/p/cks-4-2023 /courses/cks 301
+redir /store/p/cks-5-2023 /courses/cks 301
+redir /store/p/cks-april2024 /courses/cks 301
+redir /store/p/cks-aug2023 /courses/cks 301
+redir /store/p/cks-aug2023-k2uEG /courses/cks 301
+redir /store/p/cks-august2023 /courses/cks 301
+redir /store/p/cks-december2023 /courses/cks 301
+redir /store/p/cks-feb2024 /courses/cks 301
+redir /store/p/cks-jully2024 /courses/cks 301
+redir /store/p/cks-june /courses/cks 301
+redir /store/p/cks-nov2023 /courses/cks 301
+redir /store/p/cks-sept2024 /courses/cks 301
+redir /store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn /courses/devops-bootcamp 301
+redir /store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn-m25px /courses/devops-bootcamp 301
+redir /store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn/ /courses/devops-bootcamp 301
+redir /store/p/comptia-casp-april2022 /courses/devops-bootcamp 301
+redir /store/p/comptia-casp-sept21 /courses/devops-bootcamp 301
+redir /store/p/comptia-network-online-live-nightclassaugust /courses/tcp-ip 301
+redir /store/p/comptia-network-online-live-nightclassaugust-5lgcw /courses/tcp-ip 301
+redir /store/p/comptia-network-online-live-sept-28-oct-2-800-am-to-400-pm-est /courses/tcp-ip 301
+redir /store/p/comptia-security-boot-camp-apr2022 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-april-2021 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-aug2021 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-dec2021-g29rp /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-june2021 /courses/comptia-security 301
+redir /store/p/comptia-security-boot-camp-march-2021 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-march-may-2021 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-nov2020 /courses/devops-bootcamp 301
+redir /store/p/comptia-security-boot-camp-nov2021 /courses/devops-bootcamp 301
+redir /store/p/crush-the-ckad /courses/kubernetes 301
+redir /store/p/dcucai-april2024 /courses/ai-gpu 301
+redir /store/p/dcucai-may2024 /courses/ai-gpu 301
+redir /store/p/deploying5g-online-live-class-12-21 /courses/5g-deploy 301
+redir /store/p/deploying5g-online-live-class-april2022 /courses/5g-deploy 301
+redir /store/p/deploying5g-online-live-class-jan2022 /courses/5g-deploy 301
+redir /store/p/devops-8-2021-w9dhj /courses/devops-bootcamp 301
+redir /store/p/devops-9-28-21 /courses/devops-bootcamp 301
+redir /store/p/devops-foundations-10-212021-jd5t2-cjlzd /courses/devops-bootcamp 301
+redir /store/p/devops-foundations-9-212021-jd5t2 /courses/devops-bootcamp 301
+redir /store/p/devops-foundations-9-7-2021 /courses/devops-bootcamp 301
+redir /store/p/django /courses/django 301
+redir /store/p/django-8-2023 /courses/django 301
+redir /store/p/django-aug2023 /courses/django 301
+redir /store/p/django-nov2023 /courses/django 301
+redir /store/p/django-sept2023 /courses/django 301
+redir /store/p/django-training-may2024 /courses/django 301
+redir /store/p/gitlab-training-jan2022 /courses/gitlab 301
+redir /store/p/gitlab-training-march2022 /courses/gitlab 301
+redir /store/p/gitlab-training-oct2021 /courses/gitlab 301
+redir /store/p/gitlab-training-oct2021-9hkpn-Bhi6h /courses/gitlab 301
+redir /store/p/go-practice-labs-3678w /courses/golang 301
+redir /store/p/golang-aug2024 /courses/golang 301
+redir /store/p/golang-august2023 /courses/golang 301
+redir /store/p/golang-june-2023 /courses/golang 301
+redir /store/p/golang-june2024 /courses/golang 301
+redir /store/p/golang-june23 /courses/golang 301
+redir /store/p/golang-march2023 /courses/golang 301
+redir /store/p/golang-march2024 /courses/golang 301
+redir /store/p/golang-may2023 /courses/golang 301
+redir /store/p/golang-nov2021 /courses/golang 301
+redir /store/p/golang-nov2023 /courses/golang 301
+redir /store/p/golang-oct2023 /courses/golang 301
+redir /store/p/golang-oct2023-qNrJL /courses/golang 301
+redir /store/p/golang-training-aug2022 /courses/golang 301
+redir /store/p/intucxs-april2024 /courses/api 301
+redir /store/p/intucxs-june2024 /courses/api 301
+redir /store/p/intucxs-march2024 /courses/api 301
+redir /store/p/ipsec-self-paced-course /courses/tcp-ip 301
+redir /store/p/jenkins-aug2021 /courses/jenkins 301
+redir /store/p/jenkins-dec2023 /courses/jenkins 301
+redir /store/p/jenkins-feb2022 /courses/jenkins 301
+redir /store/p/jenkins-jan-2021 /courses/jenkins 301
+redir /store/p/jenkins-jan2022 /courses/jenkins 301
+redir /store/p/jenkins-june2024 /courses/jenkins 301
+redir /store/p/jenkins-june23 /courses/jenkins 301
+redir /store/p/jenkins-march2020 /courses/jenkins 301
+redir /store/p/jenkins-march2024 /courses/jenkins 301
+redir /store/p/jenkins-oct2021 /courses/jenkins 301
+redir /store/p/jenkins-practice-labs /courses/jenkins 301
+redir /store/p/jenkins-sept2023 /courses/jenkins 301
+redir /store/p/jenkins-sept2024 /courses/jenkins 301
+redir /store/p/jenkins-training-dec2023 /courses/jenkins 301
+redir /store/p/jenkins-training-june2023 /courses/jenkins 301
+redir /store/p/jenkins-training-mar2023 /courses/jenkins 301
+redir /store/p/jenkins-training-sept2023 /courses/jenkins 301
+redir /store/p/jenkinsmay2021 /courses/jenkins 301
+redir /store/p/jenkinsnov2020 /courses/jenkins 301
+redir /store/p/k8s-ckad-practice-labs /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-aug2021 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-august31 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-dec2020 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-jan2021 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-nov2021 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-oct2020 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-online-live-class-spet2023 /courses/kubernetes 301
+redir /store/p/kubernetes-bootcamp-self-paced /courses/kubernetes 301
+redir /store/p/kubernetes-ckad-online-class-dec2023 /courses/kubernetes 301
+redir /store/p/kubernetes-ckad-online-class-sept2023 /courses/kubernetes 301
+redir /store/p/kubernetes-ckad-online-live-class-dec2023 /courses/kubernetes 301
+redir /store/p/kubernetes-ckad-online-live-class-sept2023 /courses/kubernetes 301
+redir /store/p/kubernetes-ckad-online-live-class-sept2023-TSsSF /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-april2023 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-april2024 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-aug2024 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-dec2022 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-jan-2023 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-jan2024 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-july-2024 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-july2023 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-july2023-dg8bl /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-june2024 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-nov2022 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-oct-2021 /courses/kubernetes 301
+redir /store/p/kubernetes-online-live-class-oct2023 /courses/kubernetes 301
+redir /store/p/kubernetesonlineliveclassapril2022 /courses/kubernetes 301
+redir /store/p/microservices-online-live-class-1-27-2021 /courses/microservices 301
+redir /store/p/microservices-online-live-class-aug2021 /courses/microservices 301
+redir /store/p/microservices-online-live-class-jan2022 /courses/microservices 301
+redir /store/p/microservices-online-live-class-june2021 /courses/microservices 301
+redir /store/p/microservices-online-live-class-mar2023 /courses/microservices 301
+redir /store/p/microservices-online-live-class-march2021 /courses/microservices 301
+redir /store/p/microservices-online-live-class-march2022 /courses/microservices 301
+redir /store/p/microservices-online-live-class-oct2021 /courses/microservices 301
+redir /store/p/microservices-online-live-dec2023 /courses/microservices 301
+redir /store/p/microservices-online-live-june2023 /courses/microservices 301
+redir /store/p/microservices-online-live-sept2023 /courses/microservices 301
+redir /store/p/microservices-practice-labs /courses/microservices 301
+redir /store/p/napya-aug /courses/napya 301
+redir /store/p/napya-dec2023 /courses/napya 301
+redir /store/p/napya-jan2024 /courses/napya 301
+redir /store/p/napya-july2024 /courses/napya 301
+redir /store/p/napya-june2023 /courses/napya 301
+redir /store/p/napya-may2024 /courses/napya 301
+redir /store/p/napya-may2024-zlah6 /courses/napya 301
+redir /store/p/napya-oct2023 /courses/napya 301
+redir /store/p/napya-onlinelive /courses/napya 301
+redir /store/p/network-automation-online-live-class-aug2022 /courses/network-automation 301
+redir /store/p/network-automation-online-live-class-nov2022 /courses/network-automation 301
+redir /store/p/network-automation-python-ansible-practice-labs /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-april2021 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-aug2021 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-dec2021 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-feb2021 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-june-2021 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-oct2020 /courses/pyna 301
+redir /store/p/network-automation-with-python-and-ansible-online-live-class-oct2021 /courses/pyna 301
+redir /store/p/neuvector-training-623 /courses/suse-neuvector 301
+redir /store/p/nlp-ai /courses/natural-lang-apis 301
+redir /store/p/nlp-ai-10-5-23 /courses/natural-lang-apis 301
+redir /store/p/os-generative-ai-11-6-23 /courses/ai-app-dev 301
+redir /store/p/os-generative-ai-9-19-23 /courses/ai-app-dev 301
+redir /store/p/os-generative-ai-9-23 /courses/ai-app-dev 301
+redir /store/p/os-generative-ai-aug2024 /courses/ai-gpu 301
+redir /store/p/os-generative-ai-feb2024 /courses/ai-app-dev 301
+redir /store/p/os-generative-ai-july2024 /courses/ai-gpu 301
+redir /store/p/os-generative-ai-may2024 /courses/ai-gpu 301
+redir /store/p/packer-training /courses/packer 301
+redir /store/p/pe-ai-10-12-23 /courses/ai-gpu 301
+redir /store/p/pe-ai-11-20-23 /courses/ai-gpu 301
+redir /store/p/pe-ai-8-24-23 /courses/ai-gpu 301
+redir /store/p/pe-ai-april24 /courses/ai-gpu 301
+redir /store/p/pe-ai-aug2024 /courses/ai-gpu 301
+redir /store/p/pe-ai-jan2024 /courses/ai-gpu 301
+redir /store/p/pe-ai-nov-23 /courses/ai-gpu 301
+redir /store/p/pe-ai-oct2024 /courses/ai-gpu 301
+redir /store/p/pe-june-2024 /courses/ai-gpu 301
+redir /store/p/pyai-april2024 /courses/ai-gpu 301
+redir /store/p/pyai-aug2024 /courses/ai-gpu 301
+redir /store/p/pyai-jan2024 /courses/ai-gpu 301
+redir /store/p/pyai-july2024 /courses/ai-gpu 301
+redir /store/p/python-basics-online-live-class-april2022 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-april2023 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-aug2021-jjl47 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-dec2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-jan-2023 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-jan2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-jul2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-march2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-may2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-nov2020 /courses/pyb 301
+redir /store/p/python-basics-online-live-class-nov2021-swamm /courses/pyb 301
+redir /store/p/python-basics-online-live-class-oct2021 /courses/pyb 301
+redir /store/p/python-basics-online-live-dec2023-yp2xk /courses/pyb 301
+redir /store/p/python-basics-online-live-july2023 /courses/pyb 301
+redir /store/p/python-basics-online-live-july2023-tpzh2 /courses/pyb 301
+redir /store/p/python-basics-online-live-july2024 /courses/pyb 301
+redir /store/p/python-basics-online-live-june2024 /courses/pyb 301
+redir /store/p/python-basics-online-live-march2024 /courses/pyb 301
+redir /store/p/python-basics-online-live-nov2024 /courses/pyb 301
+redir /store/p/python-basics-online-live-oct2023 /courses/pyb 301
+redir /store/p/python-basics-online-live-sept2024 /courses/pyb 301
+redir /store/p/python-basics-self-paced /courses/pyb 301
+redir /store/p/python-network-automation-self-paced /courses/pyna 301
+redir /store/p/python-networking-aug2023 /courses/pyna 301
+redir /store/p/python-networking-dec2023-8j2rs /courses/pyna 301
+redir /store/p/python-networking-june2023-ccftf /courses/pyna 301
+redir /store/p/python-networking-march2023 /courses/pyna 301
+redir /store/p/python-networking-oct-2023 /courses/pyna 301
+redir /store/p/python-practice-labs /courses/pyna 301
+redir /store/p/python-practice-labs-9t8mr /courses/pyna 301
+redir /store/p/python203-ds /courses/py-datasci 301
+redir /store/p/python203-ds-7-2023 /courses/py-datasci 301
+redir /store/p/python203-ds-oct2023 /courses/py-datasci 301
+redir /store/p/pythonds-july2023 /courses/py-datasci 301
+redir /store/p/pythonds-oct2023 /courses/py-datasci 301
+redir /store/p/pythonnetworautomation-aug2021 /courses/pyna 301
+redir /store/p/pythonnetworautomation-aug2022 /courses/pyna 301
+redir /store/p/pythonnetworautomation-aug2024 /courses/pyna 301
+redir /store/p/pythonnetworautomation-july2023 /courses/pyna 301
+redir /store/p/pythonnetworautomation-june2024 /courses/pyna 301
+redir /store/p/pythonnetworautomation-mar2023 /courses/pyna 301
+redir /store/p/pythonnetworautomation-march2023 /courses/pyna 301
+redir /store/p/pythonnetworautomation-march2024 /courses/pyna 301
+redir /store/p/pythonnetworautomation-may2022 /courses/pyna 301
+redir /store/p/pythonnetworautomation-may2022-b2r29 /courses/pyna 301
+redir /store/p/pythonnetworautomation-may2023 /courses/pyna 301
+redir /store/p/pythonnetworautomation-nov2023 /courses/pyna 301
+redir /store/p/pythonnetworautomation-sept2022 /courses/pyna 301
+redir /store/p/red-hat-system-administrator-online-live-jan2021 /courses/linux-4-dev 301
+redir /store/p/red-hat-system-administrator-online-live-july2021 /courses/linux-4-dev 301
+redir /store/p/red-hat-system-administrator-self-paced /courses/linux-4-dev 301
+redir /store/p/rhcsa-oct2021 /courses/linux-4-dev 301
+redir /store/p/rhel-practice-labs /courses/linux-4-dev 301
+redir /store/p/sd-wan-online-live-class-oct-2021 /courses/sd-wan 301
+redir /store/p/sdn-practice-labs /courses/sd-wan 301
+redir /store/p/sdnnfv-online-live-class-oct2020 /courses/sd-wan 301
+redir /store/p/sdnnfv-self-paced /courses/sd-wan 301
+redir /store/p/sdwots-april /courses/sd-wan 301
+redir /store/p/sdwots-june2024 /courses/sd-wan 301
+redir /store/p/self-paced-terraform-iac-course /courses/terraform 301
+redir /store/p/sip-essentials-online-live-class-april2021 /courses/sip 301
+redir /store/p/sip-essentials-online-live-class-dec2020 /courses/sip 301
+redir /store/p/sip-essentials-online-live-july2021 /courses/sip 301
+redir /store/p/sip-essentials-online-live-oct2021 /courses/sip 301
+redir /store/p/sip-online-live-apr2024 /courses/sip 301
+redir /store/p/sip-online-live-dec-2021 /courses/sip 301
+redir /store/p/sip-online-live-dec2024 /courses/sip 301
+redir /store/p/sip-online-live-feb-2023 /courses/sip 301
+redir /store/p/sip-online-live-feb2024 /courses/sip 301
+redir /store/p/sip-online-live-july2023 /courses/sip 301
+redir /store/p/sip-online-live-june2024 /courses/sip 301
+redir /store/p/sip-online-live-may2023 /courses/sip 301
+redir /store/p/sip-online-live-oct2023 /courses/sip 301
+redir /store/p/sip-online-live-sept2024 /courses/sip 301
+redir /store/p/sip-self-paced /courses/sip 301
+redir /store/p/sp-ansible-201 /courses/ansible-201 301
+redir /store/p/suse-k8s-april2024 /courses/sk8s 301
+redir /store/p/suse-k8s-aug2021 /courses/sk8s 301
+redir /store/p/suse-k8s-aug2023 /courses/sk8s 301
+redir /store/p/suse-k8s-dec2021 /courses/sk8s 301
+redir /store/p/suse-k8s-dec2021/ /courses/sk8s 301
+redir /store/p/suse-k8s-dec2022 /courses/sk8s 301
+redir /store/p/suse-k8s-jan2022 /courses/sk8s 301
+redir /store/p/suse-k8s-jan2024 /courses/sk8s 301
+redir /store/p/suse-k8s-july2024 /courses/sk8s 301
+redir /store/p/suse-k8s-mar2023 /courses/sk8s 301
+redir /store/p/suse-k8s-may2022 /courses/sk8s 301
+redir /store/p/suse-k8s-may2023 /courses/sk8s 301
+redir /store/p/suse-k8s-nov2023 /courses/sk8s 301
+redir /store/p/suse-k8s-oct2021 /courses/sk8s 301
+redir /store/p/suse-k8s-oct2022 /courses/sk8s 301
+redir /store/p/suse-k8s-october2024 /courses/suse-k8s-october2024 301
+redir /store/p/suse-k8s-sept2022 /courses/sk8s 301
+redir /store/p/suse-rancher-apr2024 /courses/rancher 301
+redir /store/p/suse-rancher-aug2021 /courses/rancher 301
+redir /store/p/suse-rancher-aug2022 /courses/rancher 301
+redir /store/p/suse-rancher-aug2023 /courses/rancher 301
+redir /store/p/suse-rancher-dec2021 /courses/rancher 301
+redir /store/p/suse-rancher-jan2024 /courses/rancher 301
+redir /store/p/suse-rancher-july2024 /courses/rancher 301
+redir /store/p/suse-rancher-mar2023 /courses/rancher 301
+redir /store/p/suse-rancher-may2022 /courses/rancher 301
+redir /store/p/suse-rancher-may2023 /courses/rancher 301
+redir /store/p/suse-rancher-may2023-dpk8d /courses/rancher 301
+redir /store/p/suse-rancher-nov2023 /courses/rancher 301
+redir /store/p/suse-rancher-oct2021 /courses/rancher 301
+redir /store/p/suse-rancher-october2024 /courses/rancher 301
+redir /store/p/suse-sle201v15-linux-sept2021 /courses 301
+redir /store/p/suse-sles-linux-apr2022 /courses 301
+redir /store/p/suse-sles-linux-june2022 /courses 301
+redir /store/p/suse-sles-linux-nov2021 /courses 301
+redir /store/p/terraform/april2024 /schedule?search=terraform 301
+redir /store/p/terraform/aug-2023 /courses/terraform 301
+redir /store/p/terraform/aug2024 /schedule?search=terraform 301
+redir /store/p/terraform/jan2023 /courses/terraform 301
+redir /store/p/terraform/jan2024 /courses/terraform 301
+redir /store/p/terraform/june2023 /courses/terraform 301
+redir /store/p/terraform/june2024 /schedule?search=terraform 301
+redir /store/p/terraform/mar2024 /courses/terraform 301
+redir /store/p/terraform/march2023 /courses/terraform 301
+redir /store/p/terraform/may-2023 /courses/terraform 301
+redir /store/p/terraform/may2024 /schedule?search=terraform 301
+redir /store/p/terraform/nov2023 /courses/terraform 301
+redir /store/p/terraform/oct-2023 /courses/terraform 301
+redir /store/p/terraform/oct2024 /schedule?search=terraform 301
+redir /store/p/terraform/sept2023 /courses/terraform 301
+redir /store/p/terraform102/august2024 /schedule?search=terraform 301
+redir /store/p/terraform102/june2024 /schedule?search=terraform 301
+redir /store/p/tf-selfpaced /courses/terraform 301
+redir /store/p/volte-and-the-ims-online-training-livesept-584p6mar2022 /courses/volte 301
+redir /store/p/volte-and-the-ims-onlinelivesept /courses/volte 301
+redir /store/p/volte-and-the-ims-self-paced-course /courses/volte 301
+redir /store/p/volte-online-training-june2021 /courses/volte 301
+redir /store/p/zerocode-10-2024 /courses/ai-zero-code 301
+redir /store/p/zerocode-4-2024 /courses/ai-zero-code 301
+redir /store/p/zerocode-6-2024 /courses/ai-zero-code 301
+redir /store/p/zerocode-8-2024 /courses/ai-zero-code 301
+redir /store/p/zerocode-ai-googlebard /courses/ai-app-dev 301
+redir /store/python-basics-online-live-class-nov2020 /courses/pyb 301
+redir /store/python-basics-self-paced /courses/pyb 301
+redir /store/red-hat-system-administrator-self-paced /courses/linux-4-dev 301
+redir /store/sdnnfv-self-paced /courses/sdn 301
+redir /store/sip-essentials-online-live-class-dec2020 /courses/sip 301
+redir /store/sip-self-paced /courses/sip 301
+redir /store/volte-and-the-ims-onlinelivesept /courses/volte 301
+redir /store/volte-and-the-ims-self-paced-course /courses/volte 301
+redir /storecirclecitraining /courses/ci-cd 301
+redir /storecissp /courses/cissp 301
+redir /storedeploying5g /courses/5g-deploy 301
+redir /storegolangtraining /courses/golang 301
+redir /suse-linux-rancher-k8s /courses/rancher 301
+redir /training/sip-interoperability-training/ /courses/sip 301
+redir /training/sip-training/ /courses/sip 301
+redir /training/virtual-sip-training /courses/sip 301
+redir /training/virtual-sip-training/ /courses/sip 301
+redir /courses/openstack /courses?category=Infrastructure 301
+redir /labs/openstack /courses?category=Infrastructure 301
+redir /labs/openstack/ /courses?category=Infrastructure 301
+redir /labs/openstack/10/ /courses?category=Infrastructure 301
+redir /labs/openstack/39 /courses?category=Infrastructure 301
+redir /overview-openstack-training /courses?category=Infrastructure 301
+redir /overview-os /courses?category=Infrastructure 301
+redir /store-openstack-training /courses?category=Infrastructure 301
+redir /ai-training /courses?category=AI 301
+redir /ansible-training /courses?category=Ansible 301
+redir /cisco-training /courses?category=Networking 301
+redir /cloud-training /courses?category=Infrastructure 301
+redir /devops /courses?category=DevOps 301
+redir /docker-training /courses?category=DevOps 301
+redir /kubernetes /courses?category=Kubernetes 301
+redir /programming-training /courses?category=Programming 301
+redir /telecom-courses /courses?category=Telecom 301
+redir /posters/ansible.pdf https://static.alta3.com/posters/ansible.pdf 301
+redir /posters/git.pdf https://static.alta3.com/posters/git.pdf 301
+redir /posters/k8s.pdf https://static.alta3.com/posters/k8s.pdf 301
+redir /posters/python3.pdf https://static.alta3.com/posters/python3.pdf 301
+redir /posters/regex.pdf https://static.alta3.com/posters/regex.pdf 301
+redir /posters/sip.pdf https://static.alta3.com/posters/sip.pdf 301
+redir /posters/terraform.pdf https://static.alta3.com/posters/terraform.pdf 301
+redir /posters/tmux https://static.alta3.com/posters/tmux.pdf 301
+redir /posters/tmux.pdf https://static.alta3.com/posters/tmux.pdf 301
+redir /posters/vim.pdf https://static.alta3.com/posters/vim.pdf 301
+redir /posters/yaml https://static.alta3.com/posters/yaml.pdf 301
+redir /posters/yaml.pdf https://static.alta3.com/posters/yaml.pdf 301
+redir /static/posters/ https://blog.alta3.com/posters 301
+redir /static/posters/ansible.pdf https://static.alta3.com/posters/ansible.pdf 301
+redir /static/posters/git.pdf https://static.alta3.com/posters/git.pdf 301
+redir /static/posters/k8s.pdf https://static.alta3.com/posters/k8s.pdf 301
+redir /static/posters/python3.pdf https://static.alta3.com/posters/python3.pdf 301
+redir /static/posters/regex.pdf https://static.alta3.com/posters/regex.pdf 301
+redir /static/posters/sip.pdf https://static.alta3.com/posters/sip.pdf 301
+redir /static/posters/terraform.pdf https://static.alta3.com/posters/terraform.pdf 301
+redir /static/posters/tmux.pdf https://static.alta3.com/posters/tmux.pdf 301
+redir /static/posters/vim.pdf https://static.alta3.com/posters/vim.pdf 301
+redir /static/posters/yaml.pdf https://static.alta3.com/posters/yaml.pdf 301
+redir /poster https://blog.alta3.com/posters 301
+redir /poster/ https://blog.alta3.com/posters 301
+redir /poster/* https://blog.alta3.com/posters 301
+redir /posters/ https://blog.alta3.com/posters 301
+redir /posters/* https://blog.alta3.com/posters 301
+redir /blog https://blog.alta3.com/ 301
+redir /blog/ https://blog.alta3.com/ 301
+redir /blog/* https://blog.alta3.com/ 301
+redir /blogs https://blog.alta3.com/ 301
+redir /blogs/ https://blog.alta3.com/ 301
+redir /blogs/* https://blog.alta3.com/ 301
+redir /cloud-devops-tutorials https://blog.alta3.com/ 301
+redir /downloads https://blog.alta3.com/posters 301
+redir /downloads/ https://blog.alta3.com/posters 301
+redir /labs https://live.alta3.com 301
+redir /lms https://live.alta3.com 301
+redir /login https://sso.alta3.com 301
+redir /posters https://blog.alta3.com/posters 301
+redir /DEMO /contact-us 301
+redir /alta3-practice-lab-environments /contact-us 301
+redir /author/hfryer/ /contact-us 301
+redir /contact /contact-us 301
+redir /contact/ /contact-us 301
+redir /demo /contact-us 301
+redir /free-course-trials /contact-us 301
+redir /free-course-trials-thank-you /contact-us 301
+redir /sales /contact-us 301
+redir /visit /contact-us 301
+redir /about-us /about 301
+redir /aboutj /about 301
+redir /api/what-is-live /about 301
+redir /cart / 301
+redir /certificates / 301
+redir /dashboard / 301
+redir /extra / 301
+redir /home / 301
+redir /home-1 / 301
+redir /home-1-2 / 301
+redir /home-2 / 301
+redir /home-copy / 301
+redir /home-old / 301
+redir /research /about 301
+redir /testimonials / 301
+redir /users / 301
+redir /wiki / 301
+redir /alta3-research-course-portfolio /courses 301
+redir /alta3-research-course-portfolio-1 /courses 301
+redir /alta3-research-course-training /courses 301
+redir /cloud /coureses 301
+redir /cloud-training- /coureses 301
+redir /cloud-training-2 /courses 301
+redir /courses-accordian /courses 301
+redir /on-demand-courses-1 /courses 301
+redir /portfolio-1 /courses 301
+redir /portfolio-1/project-one-f5w4d-wcrse /courses 301
+redir /portfolio-2 /courses 301
+redir /search /courses 301
+redir /store /courses 301
+redir /store-2 /courses 301
+redir /store/labs /courses 301
+redir /training /courses 301
+redir /training-1 /courses 301
+redir /training-courses /courses 301
+redir /training-courses-1 /courses 301
+redir /training-courses-2 /courses 301
+redir /training-courses-2021 /courses 301
+redir /training-courses-old /courses 301
+redir /instructor-application /careers 301
+redir /instructor-application-1 /careers 301
+redir /sales-application /careers 301
+redir /sales-applicatiom /careers 301
+redir /events-1 /schedule 301
+redir /events-list /schedule 301
+redir /events-online-training /schedule 301
+redir /july-sles-webinar /schedule 301
+redir /kubernetes-5g-webinar /schedule 301
+redir /kubernetes-in-the-5g-network-webinar /schedule 301
+redir /march-suse-rancher-webinar /schedule 301
+redir /may-ansible-awx-webinar /schedule 301
+redir /classroom-live /offering-types 302
+redir /events-list?category=Webinar /schedule 301
+redir /on-demand-courses /offering-types 302
+redir /store/manual /offering-types 302
+redir /store/online-live /offering-types 302
+redir /store/p/subscription-mnthly /offering-types 302
+redir /store/p/subscription-yearly /offering-types 302
+redir /store/self-paced /offering-types 302
+redir /store/virtual /offering-types 302
+redir /store/webinar /offering-types 302
+redir /subscription-services /offering-types 302
+redir /aws-training /courses 302
+redir /overview-aws-tech /courses 302
+redir /overview-awsarchitect /courses 302
+redir /overview-awsdevops /courses 302
+redir /overview-awssyops /courses 302
+redir /overviewawsdeveloping /courses 302
+redir /store-awsarchitect /courses 302
+redir /store-awsdeveloping /courses 302
+redir /store-awsdevops /courses 302
+redir /store-awssysops /courses 302
+redir /store-awstech /courses 302
+redir /store/p/architecting-on-aws-online-live-423 /courses 302
+redir /store/p/architecting-on-aws-online-live-aug-2021 /courses 302
+redir /store/p/architecting-on-aws-online-live-aug31 /courses 302
+redir /store/p/architecting-on-aws-online-live-aug32021 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-4-26-22 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-4-5-22 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-42023 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-5-17-22 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-6-28-22 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-apr2021 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-aug18 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-aug2022 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-jan10 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-jan10-ny84t /courses 302
+redir /store/p/architecting-on-aws-online-live-class-jan2021 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-oct2020 /courses 302
+redir /store/p/architecting-on-aws-online-live-class-sept28 /courses 302
+redir /store/p/architecting-on-aws-online-live-july20 /courses 302
+redir /store/p/architecting-on-aws-online-live-nov-21 /courses 302
+redir /store/p/architecting-on-aws-online-live-oct-2021 /courses 302
+redir /store/p/architecting-on-aws-online-live-sept2021 /courses 302
+redir /store/p/aws-techessentials-april2023 /courses 302
+redir /store/p/aws-techessentials-feb20 /courses 302
+redir /store/p/aws-techessentials-jan30 /courses 302
+redir /store/p/aws-techessentials-jan9 /courses 302
+redir /store/p/aws-technical-essentials-05-16-22 /courses 302
+redir /store/p/aws-technical-essentials-6-27 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-8-22 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-apr2021 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-aug17 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-jan2021 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-july2021 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-june2021 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-may2021 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-nov2022 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-oct19 /courses 302
+redir /store/p/aws-technical-essentials-online-live-class-oct2023 /courses 302
+redir /store/p/aws-technical-essentials-sept-2021 /courses 302
+redir /store/p/aws-technical-essentialsoct2021 /courses 302
+redir /store/p/aws-technical-essentialsoct2021-ny3rx /courses 302
+redir /store/p/big-data-on-aws-online-live-class-apr2021 /courses 302
+redir /store/p/big-data-on-aws-online-live-class-dec8 /courses 302
+redir /store/p/big-data-on-aws-online-live-class-oct13 /courses 302
+redir /store/p/developing-on-aws-online-live-class-4-26-22 /courses 302
+redir /store/p/developing-on-aws-online-live-class-apr2021 /courses 302
+redir /store/p/developing-on-aws-online-live-class-aug-2021 /courses 302
+redir /store/p/developing-on-aws-online-live-class-aug10 /courses 302
+redir /store/p/developing-on-aws-online-live-class-aug2022 /courses 302
+redir /store/p/developing-on-aws-online-live-class-feb28 /courses 302
+redir /store/p/developing-on-aws-online-live-class-jan31 /courses 302
+redir /store/p/developing-on-aws-online-live-class-july-2021 /courses 302
+redir /store/p/developing-on-aws-online-live-class-june2021 /courses 302
+redir /store/p/developing-on-aws-online-live-class-june22 /courses 302
+redir /store/p/developing-on-aws-online-live-class-may2021 /courses 302
+redir /store/p/developing-on-aws-online-live-class-oct-2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-0ct2022 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-apr2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-aug-2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-feb7 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-jan2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-july2022 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-june2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-mar2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-may2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-may2022 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-nov2020 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-nov2022 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-oct-2021 /courses 302
+redir /store/p/system-operations-on-aws-online-live-class-sept2021 /courses 302
alta3/moved/no_redirect/ga.txt
@@ -0,0 +1,121 @@
+/
+/about
+/careers
+/terms-and-conditions
+/checkout
+/blog/00fg5lqocxkpikimilx872gnbtt2yc
+/alta3-logo
+/blog-1-1/test-course-idea
+/about/
+/course-not-available
+/postersfor
+/user
+/Y2xvdWQtZG
+/blog/null
+/overview-INSERT_URL_HERE
+/checkout/order-confirmed
+/%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B
+/admin
+/b3ZlcnZpZX
+/blog-1-1
+/blog/5aihoup7u1rnxvlb9m8t8g4dt58pk2
+/blog/b2ejoa840ofyizom2xfuzo6xiiq3pe
+/blog/singlevmK8s
+/blog/xgzvy5ylhdinwachialvwav5ggeh7n
+/test.yaml
+/beachhead
+/blog-1-1/Blog Post Title One-6sea4
+/blog-1-1/jm3qremu8kkqc52uhj7kre1amp7b1y
+/commerce/orders/YmM5OWYyOT
+/courses/
+/https/alta3.com/store/p/crush-the-ckad
+/overview-opensource-aihttps://alta3.com/overview-natural-language-aihttps://alta3.com/overview-python-aihttps://alta3.com/overview-golang-aihttps://alta3.com/overview-ansible-aihttps://alta3.com/overview-java-aihttps://alta3.com/overview-zerocodechatbotshttps://alta3.com/overview-zerocode-aihttps://alta3.com/overview-ai-chat-bardhttps://alta3.com/overview-zerocodechatbots-watsonhttps://alta3.com/overview-zerocodechatbots-chatgpt
+/%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B
+/404
+/;
+/beachhead/
+/blog/2017-02-09-public-vs-private-openstack
+/blog/5pc907711blfw1nludoq9zzh7bjjbc
+/blog/670bzkwx4a4ui8sxf0x96qsq7eh51h
+/blog/asgv4x928z07bkyoe0420szb38mezk
+/blog/en77h6ek2rjfwfuwobm65ocmkj67po
+/blog/km1mvf4k45gwvsbd5af80357c3slex
+/blog/ma999nl77n8yjq3cgxn3uyh0gn0va8
+/blog/mk2zfhf8l0h9rj4x4xi9xffbi89p6t
+/blog/r77bthbptec44rdupzglhzwrr7te0i
+/blog/w2r9f6mt8i7qj78wi9pr54yfte6ev7
+/category/uncategorized/
+/certification/cf1f998c-92e7-437f-a1dd-80fb1e70ee87.pdf
+/commerce/orders/024998a6-b1d5-464c-a045-5eab76d986fc
+/commerce/orders/07521208-793e-4ab4-9555-85be28a13082
+/commerce/orders/085d2533-1de9-400c-b892-fef40613ffed
+/commerce/orders/093900dc-6bc6-49f7-82b6-64457ac03c26
+/commerce/orders/0dbe173c-c44e-4ef9-adbd-bdbe3b706d21
+/commerce/orders/124cc4fa-734e-4ddb-b348-a95b55bdd6f0
+/commerce/orders/1db58db7-b161-4188-88ab-adbf9ca99db8
+/commerce/orders/22614371-1862-43f7-b9c3-94afe994850f
+/commerce/orders/25eca9be-4e70-4d40-b51e-d2ff82588c2d
+/commerce/orders/29419664-b125-4be9-a7b7-f3df36b3feae
+/commerce/orders/2bd11f25-6549-4090-859e-83f630570a91
+/commerce/orders/2d965dc2-0939-4de8-937a-e51deb0e33f2
+/commerce/orders/30337d48-57af-42cf-9770-a59f78ee378d
+/commerce/orders/345199bd-0a0a-4046-a16e-945a9a26c0f2
+/commerce/orders/34c982c1-6ab9-4dd0-b756-1f33f21ec80d
+/commerce/orders/34d4652e-1d30-4b74-ba94-f29f47cffd45
+/commerce/orders/3bdc79fd-6c3a-410d-b9bb-52a26bc79e5b
+/commerce/orders/3bfa5f15-797d-461d-8851-ca0134be6765
+/commerce/orders/3c750317-b014-41d0-a75f-d0e3ad3a9876
+/commerce/orders/43fe3441-eb01-419c-be7f-0a814eb8fba9
+/commerce/orders/4846f0c4-8c69-4971-b7b3-e49484247842
+/commerce/orders/4877b9bc-8435-4afd-94eb-e4e410bbdfb0
+/commerce/orders/48b6c7a9-119d-48e7-b7f1-a055b13f3f4b
+/commerce/orders/522d8309-46b1-46f8-bb3a-cf8af75dfeb6
+/commerce/orders/59e75593-f5b7-4b3d-85a0-56b4340c7790
+/commerce/orders/67dbbeec-0c81-4163-830b-daa421fc1578
+/commerce/orders/6864850d-7dc6-400d-964e-d808d0b24b86
+/commerce/orders/72e9abf0-c4a5-4180-857c-a779e8e48bca
+/commerce/orders/795041ee-f64b-48dd-ada6-2696bcdaf8c2
+/commerce/orders/7ff88cd3-2f3b-42a6-9aaa-8ce39f9fa81e
+/commerce/orders/85041af8-93db-490e-8b86-b10164b7a6b3
+/commerce/orders/8967fde7-b830-420f-9fe8-e59a5e3cd510
+/commerce/orders/89d2b8a3-cbd1-41c4-a9e7-b635f99679c7
+/commerce/orders/8f71ad57-662f-4294-a494-cb5e0ddb2ae1
+/commerce/orders/911383df-1351-4e3f-a31c-08020ce753e3
+/commerce/orders/999bd3ad-8680-48f2-adde-f359a2f22cb0
+/commerce/orders/99cec71d-8800-4244-b4ab-602fdb699e0f
+/commerce/orders/a081384e-3a6e-4dc7-8638-493f38c679db
+/commerce/orders/a0d318e4-2a37-4fee-a499-236a87203f2c
+/commerce/orders/b38e4080-882b-4893-aa61-7d1aa165a47b
+/commerce/orders/c1ef172f-728c-466a-8d60-c46240c98840
+/commerce/orders/cdac9ddb-8857-49c9-a33d-1485fc7ac6b7
+/commerce/orders/d4705bab-dfd7-4e8d-9303-bd7cb1d8c6c4
+/commerce/orders/d7521bad-7574-4c28-905d-7c0801040cf6
+/commerce/orders/db400617-4d97-471c-8407-33b611d9c85c
+/commerce/orders/dd8a018e-7830-46db-9dc1-43e83adea640
+/commerce/orders/ddf1a9ea-3d14-4580-a214-5278cf8f6757
+/commerce/orders/e346b617-96c4-4ae4-82ce-c4384c56b35d
+/commerce/orders/ec4a9510-b249-4eee-917e-cea82857d582
+/commerce/orders/eea534af-4057-4dcc-8fb8-a2e5f2015b1b
+/commerce/orders/f649f859-ef4b-482f-b0a1-1764fae73003
+/commerce/orders/f985595c-fe20-4dde-8072-0d0ec3b852de
+/commerce/orders/fa42e40a-5de8-45c6-8e8a-548b1aece045
+/commerce/orders/ffdd4279-b51c-481c-b9cc-eec32dd80bb3
+/commerce/redirect
+/draftpagedonotlink
+/favicon.co
+/groups/macho-dingos-flopped/your-content
+/groups/nimble-orangutans-raced/dashboard
+/groups/nimble-turtles-spurted
+/groups/nimble-turtles-spurted/your-content
+/https:/alta3.com/store/p/tf-selfpaced
+/pdf/
+/posters/linux.pdf
+/postersopen%20aiopen%20ai
+/postest
+/site-map.yaml
+/site-map.yml
+/store-certified-kubernetes-training%20Certified%20Kubernetes%20Administrator%20-%20Instructor%20led%20course
+/store/p/NWctZXNzZW
+/termsandconditions
+/รขโฌโนรขโฌโนรขโฌโนรขโฌโนรขโฌโน
+/commerce/orders/fd737a4a-145a-422e-85f7-0c835a15af97
alta3/moved/no_redirect/google_search.txt
@@ -0,0 +1,34 @@
+/s/yaml-yft4.pdf
+/s/VoLTE-IMS-Course-Outline.pdf
+/s/vim-t4xp.pdf
+/store?offset=238
+/s/tmux-pskn.pdf
+/s/tmux-27lb.pdf
+/s/SLE201v15.pdf
+/s/sip-ng25.pdf
+/s/SIP-Essentials-Training.pdf
+/s/regex-7dg3.pdf
+/s/Python-for-Data-Sciences.pdf
+/s/Python-3-Poster.pdf
+/s/python3pkgs-zn97.pdf
+/s/linux-poster.pdf
+/s/Linux.pdf
+/s/git-y46g.pdf
+/s/Ceph-Storage-Administration.pdf
+/s/Avaya-Aura-Course-Outline.pdf
+/s/ASW-Developing-Course-Outline.pdf
+/s/Ansible-Poster.pdf
+/s/5G-Essentials.pdf
+/s/5G-Acronyms-LS.pdf
+/posters/python3pkgs.pdf
+/overview-kubernetes-ckad?trk=products_details_guest_secondary_call_to_action
+/draftpagedonotlink
+/courses/volte
+/courses/sip
+/courses/5g
+/course-not-available
+/certification/cf1f998c-92e7-437f-a1dd-80fb1e70ee87.pdf
+/blog/adding-spell-checking-as-a-github-action/1000
+/blog/2017-04-10-reset-a-forgotten-openstack-password
+/blog/2017-03-24-physically-wiring-an-openstack-node
+/404
alta3/moved/no_redirect/squarespace.txt
@@ -0,0 +1,7 @@
+/course-not-available
+/404
+/draftpagedonotlink
+/careers
+/about
+/alta3-logo
+/terms-and-conditions
alta3/moved/source/ga.csv
@@ -0,0 +1,784 @@
+Page path and screen class,Views,Users,Views per user,Average engagement time,Event count,Conversions,Total revenue
+/,19551,3386,5.7740696987595985,80.7968103957472,31353,0,0
+/blog/vimcolorscheme,3985,3459,1.1520670714079213,11.04278693263949,15859,0,0
+/training-courses,2538,1093,2.3220494053064957,35.757548032936874,6060,0,0
+/posters,2493,1462,1.7051983584131327,18.52530779753762,10980,0,0
+/blog/singlevmk8s,2124,1489,1.4264607118871726,46.50503693754197,7874,0,0
+/blog/install-python-and-ansible,1123,975,1.1517948717948718,18.382564102564103,4483,0,0
+/about,889,614,1.4478827361563518,15.941368078175897,2560,0,0
+/overview-sip,771,398,1.9371859296482412,31.20854271356784,2224,0,0
+/overview-5g,692,365,1.895890410958904,27.07123287671233,1895,0,0
+/blog/ubuntu-1804-preseed-installation,675,454,1.486784140969163,31.1784140969163,2458,0,0
+/store/online-live,624,1,624,133,787,0,0
+/kubernetes,586,298,1.9664429530201342,15.312080536912752,1330,0,0
+/cloud-devops-tutorials,573,440,1.3022727272727272,12.670454545454545,1882,0,0
+/telecom-courses,541,308,1.7564935064935066,16.75,1313,0,0
+/overview-kubernetes-ckad,533,289,1.8442906574394464,23.80622837370242,1375,0,0
+/programming-training,526,254,2.0708661417322833,16.476377952755904,1171,0,0
+/events-online-training,468,186,2.5161290322580645,26.376344086021504,956,0,0
+/overview-terraform,460,237,1.9409282700421941,24.50210970464135,1144,0,0
+/blog/diagnosing-a-slow-network,440,362,1.2154696132596685,31.209944751381215,1746,0,0
+/overview-cka-training,431,230,1.873913043478261,23.104347826086958,1033,0,0
+/cloud-training,379,209,1.813397129186603,15.344497607655502,881,0,0
+/ansible-training,367,151,2.4304635761589406,19.105960264900663,802,0,0
+/ai-training,358,141,2.5390070921985815,23.581560283687942,795,0,0
+/on-demand-courses,346,166,2.0843373493975905,52.403614457831324,883,0,0
+/contact,331,281,1.1779359430604983,10.587188612099645,1081,149,0
+/blog,329,117,2.8119658119658117,61.35897435897436,736,0,0
+/overview-ansible,324,182,1.7802197802197801,21.642857142857142,853,0,0
+/overview-volte,299,200,1.495,23.915,1020,0,0
+/blog/passing-the-ckad,289,205,1.4097560975609755,34.57560975609756,1113,0,0
+/overview-python-basics-training,282,180,1.5666666666666667,18.227777777777778,706,0,0
+/overview-opensource-ai,277,103,2.6893203883495147,48.29126213592233,666,0,0
+/store,276,15,18.4,27.466666666666665,344,0,0
+/blog/ansible-eos-banner-tutorial,247,198,1.2474747474747474,29.146464646464647,993,0,0
+/suse-linux-rancher-k8s,236,117,2.017094017094017,18.726495726495727,573,0,0
+/overview-deploying5g,231,137,1.686131386861314,22.868613138686133,639,0,0
+/blog/unlocking-your-vim-screen,213,192,1.109375,5.5,851,0,0
+/overview-automation-python-ansible-training,204,107,1.9065420560747663,20.037383177570092,475,0,0
+/careers,199,146,1.3630136986301369,19.54794520547945,541,0,0
+/overview-cks,198,82,2.4146341463414633,26.98780487804878,464,0,0
+/blog/restore-backed-up-files-using-ansible,178,162,1.0987654320987654,26.493827160493826,717,0,0
+/store/p/sip-self-paced,168,101,1.6633663366336633,21.712871287128714,453,0,0
+/overview-api-python-training,167,103,1.6213592233009708,13.281553398058252,422,0,0
+/blog/installing-windows-subsystem-for-linux-2-wsl2,165,130,1.2692307692307692,22.784615384615385,637,0,0
+/overview-python-network-automation,164,105,1.561904761904762,14.295238095238096,415,0,0
+/store/p/ipsec-self-paced-course,162,111,1.4594594594594594,6.171171171171171,519,0,0
+/store/p/5g-essentials-self-paced-course,154,85,1.811764705882353,23.611764705882354,436,0,0
+/overviewsdwantraining,151,100,1.51,27.7,429,0,0
+/overview-golang-training,146,94,1.553191489361702,23.585106382978722,408,0,0
+/blog/ansible-and-infoblox,140,105,1.3333333333333333,26.00952380952381,546,0,0
+/blog/8-steps-to-k8s-cluster,128,73,1.7534246575342465,36.19178082191781,408,0,0
+/blog/throttling-ansibles-localaction-module,128,111,1.1531531531531531,17.243243243243242,501,0,0
+/cart,127,105,1.2095238095238094,5.076190476190476,402,0,0
+/blog/securingdnsmasq,121,103,1.174757281553398,17.58252427184466,457,0,0
+/devops,119,52,2.2884615384615383,23.346153846153847,288,0,0
+/blog/launch-cloud-init-configured-vms,116,98,1.183673469387755,24.43877551020408,446,0,0
+/blog/error-invalid-value-apiall-on-kube-apiserver,101,80,1.2625,17.6,388,0,0
+/overview-rancher-training,98,60,1.6333333333333333,31.883333333333333,244,0,0
+/store/p/go-practice-labs-3678w,98,66,1.4848484848484849,5.090909090909091,323,0,0
+/testimonials,98,51,1.9215686274509804,55.05882352941177,287,0,0
+/free-course-trials,94,67,1.4029850746268657,31.104477611940297,232,0,0
+/overview-suse-k8s,92,58,1.5862068965517242,11.39655172413793,226,0,0
+/overview-jenkins-training,91,54,1.6851851851851851,14.74074074074074,196,0,0
+/overview-sdn-training,90,62,1.4516129032258065,26.048387096774192,290,0,0
+/overview-microservices-training,88,64,1.375,17.453125,215,0,0
+/overviewpython-training-data-sciences,82,40,2.05,35.875,195,0,0
+/store/p/suse-rancher-aug2023,78,24,3.25,16.833333333333332,176,0,0
+/overview-django,77,22,3.5,53.54545454545455,131,0,0
+/blog/adding-spell-checking-as-a-github-action,75,49,1.530612244897959,25.73469387755102,261,0,0
+/overview-gitlab-training,74,53,1.3962264150943395,12.018867924528301,169,0,0
+/overview-suse-neuvector,73,39,1.8717948717948718,46.61538461538461,212,0,0
+/overview-ipsec-training,70,59,1.1864406779661016,15.610169491525424,245,0,0
+/instructor-application,69,48,1.4375,66.54166666666667,190,0,0
+/overview-natural-language-ai,69,22,3.1363636363636362,48.63636363636363,144,0,0
+/blog/-28-bytes-later,67,58,1.1551724137931034,11.448275862068966,259,0,0
+/blog/creating-flask-server,66,19,3.473684210526316,46.78947368421053,146,0,0
+/stu,66,54,1.2222222222222223,29.074074074074073,184,0,0
+/blog/converting-html-to-markdown,61,55,1.1090909090909091,11.745454545454546,238,0,0
+/sales-application,61,29,2.103448275862069,186.6206896551724,239,0,0
+/store/p/kubernetes-bootcamp-self-paced,61,41,1.4878048780487805,9.073170731707316,162,0,0
+/overview-python-ai,60,37,1.6216216216216217,22.89189189189189,139,0,0
+/store/p/api-design-with-python-dec2023,60,6,10,81,81,0,0
+/overview-linux-training,59,43,1.372093023255814,12.651162790697674,143,0,0
+/home,58,3,19.333333333333332,112.33333333333333,84,0,0
+/home-copy,58,2,29,1582.5,115,0,0
+/overview-crush-the-ckad,58,27,2.1481481481481484,39.074074074074076,125,0,0
+/zach,57,48,1.1875,11.145833333333334,177,0,0
+/blog/ansible-vault-hello-world,56,50,1.12,21.92,222,0,0
+/overviewansible-for-dbas,56,28,2,13.785714285714286,124,0,0
+/store/p/kubernetes-online-live-class-oct2023,56,4,14,4,80,0,0
+/store/p/kubernetes-online-live-class-july2023,55,12,4.583333333333333,3.4166666666666665,91,0,0
+/store/p/os-generative-ai-9-23,55,13,4.230769230769231,10.846153846153847,102,0,0
+/store/p/ansible-essentials-self-paced,54,38,1.4210526315789473,8.473684210526315,155,0,0
+/store/p/cka-online-live-class-dec2023,54,8,6.75,22.625,76,0,0
+/store/p/os-generative-ai-feb2024,54,4,13.5,21.25,59,0,0
+/overview-ansible-202,53,22,2.409090909090909,13.681818181818182,113,0,0
+/overview-openstack-training,52,41,1.2682926829268293,30.073170731707318,177,0,0
+/store/p/cka-online-live-class-june2023,51,7,7.285714285714286,8.571428571428571,66,0,0
+/store/p/volte-and-the-ims-self-paced-course,51,31,1.6451612903225807,13.387096774193548,140,0,0
+/overview-ansible-203,50,20,2.5,28.85,100,0,0
+/overview-mastering-ansible-training,50,36,1.3888888888888888,22.333333333333332,113,0,0
+/overview-tcp-ip,50,26,1.9230769230769231,44.65384615384615,102,0,0
+/store/p/suse-k8s-aug2023,50,24,2.0833333333333335,6.166666666666667,129,0,0
+/blog/managing-github-issue-labels-across-organizations-and-repositories,49,40,1.225,22.35,195,0,0
+/overview-ansible-302,48,18,2.6666666666666665,34.94444444444444,103,0,0
+/store/p/avaya-aura-self-paced-course,48,33,1.4545454545454546,8.181818181818182,180,0,0
+/store/p/cks-aug2023,48,15,3.2,2.6666666666666665,104,0,0
+/store/p/golang-oct2023,48,2,24,2.5,53,0,0
+/tim,47,27,1.7407407407407407,27.22222222222222,134,0,0
+/blog/introduction-to-kubernetes,46,34,1.3529411764705883,7.4411764705882355,112,0,0
+/blog/python-and-the-magic-wormhole-project,46,41,1.1219512195121952,11.634146341463415,174,0,0
+/store/p/api-design-with-python-aug2023,45,8,5.625,5.375,81,0,0
+/store/p/api-practice-labs,45,37,1.2162162162162162,3.6486486486486487,147,0,0
+/store/p/kubernetes-ckad-online-live-class-sept2023,45,3,15,26.333333333333332,67,0,0
+/store/p/napya-aug,45,5,9,3.2,69,0,0
+/store/p/python-basics-self-paced,45,28,1.6071428571428572,5.785714285714286,121,0,0
+/overview-ansible-102,44,27,1.6296296296296295,13.74074074074074,101,0,0
+/overview-k8s,44,42,1.0476190476190477,2.0714285714285716,180,0,0
+/overview-prompt-engineering,44,22,2,47.72727272727273,86,0,0
+/store/p/suse-k8s-may2023,44,19,2.3157894736842106,15.842105263157896,101,0,0
+/store/self-paced,44,8,5.5,45.25,72,0,0
+/store-sip,43,38,1.131578947368421,6.394736842105263,140,0,0
+/store/p/suse-k8s-nov2023,43,18,2.388888888888889,7.722222222222222,94,0,0
+/store/p/terraform/mar2024,43,2,21.5,0.5,44,0,0
+/training-courses-2,41,4,10.25,475.75,80,0,0
+/store/p/sdnnfv-self-paced,40,26,1.5384615384615385,14.384615384615385,108,0,0
+/blog/fastapi,39,24,1.625,35.458333333333336,105,0,0
+/overview-5g-overview,39,15,2.6,37.4,99,0,0
+/store/p/python-basics-online-live-july2023,39,15,2.6,3.8,82,0,0
+/store/p/sip-online-live-july2023,39,10,3.9,6.9,71,0,0
+/store/p/suse-k8s-mar2023,39,16,2.4375,25.5625,82,0,0
+/blog/ansible-templates,38,36,1.0555555555555556,10.416666666666666,134,0,0
+/store/p/5g-essentials-online-live-class-sept2021,38,29,1.3103448275862069,6.827586206896552,137,0,0
+/store/p/cka-online-live-class-april2023,38,7,5.428571428571429,14.571428571428571,64,0,0
+/store/p/terraform/jan2024,38,3,12.666666666666666,6,44,0,0
+/courses-accordian,37,3,12.333333333333334,227.66666666666666,68,0,0
+/store-python-basics-training,37,11,3.3636363636363638,85.36363636363636,67,0,0
+/store/p/cka-online-live-class-oct2023-6r888,37,9,4.111111111111111,2.5555555555555554,64,0,0
+/store/p/suse-rancher-may2023,37,19,1.9473684210526316,8.368421052631579,83,0,0
+/store-certified-kubernetes-training,36,22,1.6363636363636365,20.181818181818183,79,0,0
+/store/p/suse-rancher-nov2023,36,15,2.4,10.2,90,0,0
+/store/p/crush-the-ckad,35,21,1.6666666666666667,16.142857142857142,75,0,0
+/classroom-live,33,28,1.1785714285714286,22.714285714285715,90,0,0
+/rob,33,30,1.1,14,109,0,0
+/store/p/os-generative-ai-may2024,33,2,16.5,0.5,35,0,0
+/store/p/python-basics-online-live-dec2023-yp2xk,32,4,8,5.75,41,0,0
+/overview-zerocodechatbots-chatgpt,31,19,1.631578947368421,29.842105263157894,61,0,0
+/store/p/golang-august2023,31,1,31,0,36,0,0
+/store/p/terraform/sept2023,31,6,5.166666666666667,9.5,49,0,0
+/store/p/api-design-with-python-oct2023,30,3,10,4.333333333333333,40,0,0
+/store/p/cka-online-live-class-aug2023,30,14,2.142857142857143,3.142857142857143,57,0,0
+/store/p/jenkins-training-dec2023,30,1,30,0,33,0,0
+/store/p/napya-dec2023,30,5,6,3.4,38,0,0
+/store/p/network-automation-python-ansible-practice-labs,30,29,1.0344827586206897,3.586206896551724,130,0,0
+/store/p/pythonnetworautomation-may2023,30,3,10,7,41,0,0
+/store/p/sip-online-live-oct2023,30,8,3.75,15.875,52,0,0
+/blog/back-up-your-organizations-github,29,22,1.3181818181818181,15.363636363636363,108,0,0
+/hutch,29,13,2.230769230769231,37.15384615384615,60,0,0
+/overview-zerocode-ai,29,17,1.7058823529411764,51.294117647058826,65,0,0
+/store/p/cka-online-live-class-feb2024,29,1,29,5,36,0,0
+/store/p/golang-march2024,29,2,14.5,0,31,0,0
+/store/p/napya-jan2024,29,1,29,0,29,0,0
+/overview-docker101,28,17,1.6470588235294117,22.941176470588236,63,0,0
+/overview-zerocodechatbots,28,15,1.8666666666666667,7.133333333333334,55,0,0
+/blog/python-apis-part2,27,27,1,23.77777777777778,112,0,0
+/store/p/ansible-essentials-online-feb2024,27,1,27,0,27,0,0
+/store/p/ansible-essentials-online-may2023,27,4,6.75,2,34,0,0
+/store/p/ansible-essentials-online-nov2023,27,5,5.4,0.8,38,0,0
+/store/p/tf-selfpaced,27,12,2.25,9.083333333333334,62,0,0
+/aws-training,26,19,1.368421052631579,6.578947368421052,59,0,0
+/blog/installing-ansible,26,13,2,24.76923076923077,65,0,0
+/overview-packer,26,19,1.368421052631579,14.105263157894736,55,0,0
+/store/p/cka-online-live-class-feb-2023,26,6,4.333333333333333,14.333333333333334,42,0,0
+/store/p/os-generative-ai-11-6-23,26,8,3.25,18.5,35,0,0
+/store/p/pe-ai-10-12-23,26,1,26,2,30,0,0
+/store/p/python-networking-aug2023,26,3,8.666666666666666,0.3333333333333333,31,0,0
+/terms-and-conditions,26,8,3.25,100.75,82,0,0
+/overview-awsdevops,25,7,3.5714285714285716,3.5714285714285716,34,0,0
+/store-cks,25,5,5,53.4,45,0,0
+/store/p/api-design-with-python-feb2023,25,2,12.5,3,28,0,0
+/store/p/napya-oct2023,25,7,3.5714285714285716,2.857142857142857,49,0,0
+/blog/ansible-is-for-everyone,24,13,1.8461538461538463,17.23076923076923,62,0,0
+/chad,24,20,1.2,7.35,65,0,0
+/overview-opensource-ai-dell,24,11,2.1818181818181817,26,58,0,0
+/store/p/ansible-essentials-online-sept2023-ynbsl,24,5,4.8,5.8,36,0,0
+/store/p/cks-august2023,24,1,24,0,29,0,0
+/store/p/golang-march2023,24,2,12,0.5,30,0,0
+/store/p/golang-nov2023,24,1,24,2,32,0,0
+/store/p/jenkins-sept2023,24,3,8,2.3333333333333335,29,0,0
+/store/p/k8s-ckad-practice-labs,24,22,1.0909090909090908,4.454545454545454,98,0,0
+/store/p/terraform/june2023,24,11,2.1818181818181817,5.909090909090909,57,0,0
+/store/p/terraform/march2023,24,4,6,6.75,33,0,0
+/blog/pythonapi-part1,23,22,1.0454545454545454,18.09090909090909,87,0,0
+/overview-ansible-ai,23,17,1.3529411764705883,22.235294117647058,50,0,0
+/store/p/api-design-with-python-april2023,23,3,7.666666666666667,4.666666666666667,31,0,0
+/store/p/cks-feb2024,23,1,23,0,23,0,0
+/store/p/jenkins-practice-labs,23,23,1,3,93,0,0
+/store/p/kubernetes-online-live-class-april2023,23,4,5.75,3.75,31,0,0
+/store/p/sip-online-live-feb2024,23,5,4.6,11.2,28,0,0
+/store/p/suse-rancher-mar2023,23,13,1.7692307692307692,6.384615384615385,52,0,0
+/overview-sles-training,22,20,1.1,7.5,84,0,0
+/store-5g,22,16,1.375,14.5625,47,0,0
+/store/p/5g-essentials-online-live-class-nov2023,22,8,2.75,3.375,33,0,0
+/store/p/python-basics-online-live-class-jan-2023,22,2,11,1.5,34,0,0
+/blog/go-programming-print,21,13,1.6153846153846154,22.692307692307693,56,0,0
+/overview-avaya-training,21,17,1.2352941176470589,3.6470588235294117,91,0,0
+/store-network-automation-training,21,12,1.75,10.25,56,0,0
+/store/p/5g-essentials-online-live-class-aug2023,21,5,4.2,6.8,33,0,0
+/store/p/pe-ai-8-24-23,21,1,21,0,25,0,0
+/store/p/python-basics-online-live-class-april2023,21,4,5.25,3.25,30,0,0
+/store/p/terraform/aug-2023,21,7,3,5.571428571428571,41,0,0
+/blog/ansible-switch-configuration-archive-tutorial,20,17,1.1764705882352942,32.64705882352941,53,0,0
+/blog/jinja-templates,20,13,1.5384615384615385,10.615384615384615,61,0,0
+/overview-os,20,18,1.1111111111111112,4.666666666666667,85,0,0
+/store/p/pe-ai-jan2024,20,1,20,0,20,0,0
+/store/p/pyai-jan2024,20,1,20,6,21,0,0
+/store/p/pythonnetworautomation-mar2023,20,2,10,0.5,25,0,0
+/store/p/pythonnetworautomation-nov2023,20,3,6.666666666666667,3.3333333333333335,28,0,0
+/store/p/terraform/may-2023,20,5,4,2.2,33,0,0
+/blog/api-requests-with-python,19,6,3.1666666666666665,12.666666666666666,33,0,0
+/overview-circleci-training,19,18,1.0555555555555556,16.88888888888889,55,0,0
+/overview-github-training,19,15,1.2666666666666666,25.133333333333333,34,0,0
+/overview-zerocodechatbots-bard,19,4,4.75,66.75,44,0,0
+/store/p/ansible-essentials-online-june2023-f8wt8,19,2,9.5,1,23,0,0
+/store/p/kubernetes-online-live-class-april2024,19,1,19,0,19,0,0
+/store/p/python-basics-online-live-june2024,19,3,6.333333333333333,1.6666666666666667,20,0,0
+/store/p/python-practice-labs,19,18,1.0555555555555556,2.6666666666666665,65,0,0
+/store/p/self-paced-terraform-iac-course,19,9,2.111111111111111,28.77777777777778,47,0,0
+/store/p/suse-k8s-jan2024,19,2,9.5,0.5,20,0,0
+/alta3-research-course-portfolio,18,3,6,190,34,0,0
+/overview-ai-chat-bard,18,8,2.25,69,33,0,0
+/posters/,18,11,1.6363636363636365,16.181818181818183,75,0,0
+/store-django,18,2,9,61,25,0,0
+/store/p/ansible-essentials-online-feb2023,18,3,6,17.666666666666668,21,0,0
+/store/p/cks-december2023,18,1,18,0,21,0,0
+/store/p/cks-june,18,4,4.5,2.5,22,0,0
+/store/p/golang-june23,18,1,18,0,20,0,0
+/store/p/jenkins-training-mar2023,18,2,9,0.5,21,0,0
+/store/p/kubernetes-online-live-class-jan2024,18,1,18,2,19,0,0
+/store/p/pyai-april2024,18,1,18,7,19,0,0
+/store/p/python-network-automation-self-paced,18,8,2.25,14.375,36,0,0
+/store/p/pythonnetworautomation-june2024,18,1,18,0,18,0,0
+/blog/moving-active-k8s-cluster-on-qemu-vm,17,16,1.0625,16.8125,60,0,0
+/blog/vim-introduction-getting-started-with-vim,17,10,1.7,4.4,51,0,0
+/checkout,17,16,1.0625,65.875,53,0,0
+/store/p/api-design-with-python-june2023,17,2,8.5,1,24,0,0
+/store/p/api-design-with-python-march2024,17,2,8.5,0.5,19,0,0
+/store/p/microservices-online-live-class-mar2023,17,5,3.4,3.6,23,0,0
+/store/p/microservices-online-live-sept2023,17,1,17,0,24,0,0
+/store/p/python-networking-march2023,17,3,5.666666666666667,0.3333333333333333,22,0,0
+/store/p/sip-online-live-may2023,17,5,3.4,5.6,28,0,0
+/blog/ansible-basics-tutorial,16,11,1.4545454545454546,18.545454545454547,60,0,0
+/blog/gos-approach-to-arrays-and-slices,16,5,3.2,11,33,0,0
+/overview-ansible-training-dell,16,1,16,371,21,0,0
+/store/p/golang-june-2023,16,2,8,0.5,21,0,0
+/store/p/jenkins-june2024,16,1,16,0,16,0,0
+/store/p/microservices-online-live-dec2023,16,4,4,15.5,27,0,0
+/store/p/pythonnetworautomation-july2023,16,5,3.2,7.6,25,0,0
+/store/p/terraform/june2024,16,1,16,0,16,0,0
+/overview-awsarchitect,15,7,2.142857142857143,9.571428571428571,29,0,0
+/overview-java-ai,15,8,1.875,43.75,32,0,0
+/store-api-python-training,15,6,2.5,2.6666666666666665,27,0,0
+/store/p/ansible-essentials-online-aug2023,15,1,15,0,19,0,0
+/store/p/cka-selfpaced,15,9,1.6666666666666667,7,35,0,0
+/store/p/kubernetes-ckad-online-class-dec2023,15,1,15,0,18,0,0
+/store/p/pyai-july2024,15,1,15,0,15,0,0
+/store/p/python-basics-online-live-oct2023,15,3,5,3,22,0,0
+/blog/crushckad,14,13,1.0769230769230769,3.4615384615384617,48,0,0
+/overview-docker-1,14,7,2,67.71428571428571,24,0,0
+/store-microservices-training,14,5,2.8,14.2,28,0,0
+/store/p/kubernetes-online-live-class-jan-2023,14,2,7,10,18,0,0
+/store/p/os-generative-ai-9-19-23,14,2,7,11,22,0,0
+/store/p/python203-ds,14,1,14,0,14,0,0
+/overview-zerocodechatbots-watson,13,7,1.8571428571428572,25.857142857142858,24,0,0
+/search,13,4,3.25,30.25,44,0,0
+/store/p/cks-nov2023,13,1,13,0,14,0,0
+/store/p/jenkins-dec2023,13,2,6.5,8.5,16,0,0
+/store/p/jenkins-june23,13,1,13,0,13,0,0
+/store/p/nlp-ai,13,2,6.5,5.5,16,0,0
+/store/p/python-basics-online-live-march2024,13,1,13,0,14,0,0
+/store/p/zerocode-ai-googlebard,13,1,13,0,18,0,0
+/docker-training,12,6,2,12.833333333333334,24,0,0
+/overview-ceph,12,10,1.2,10.7,49,0,0
+/overview-comptia-network,12,10,1.2,4.1,26,0,0
+/overview-terraform-special,12,8,1.5,4.5,28,0,0
+/store-kubernetes-ckad,12,12,1,7.75,32,0,0
+/store-terraform,12,3,4,12.333333333333334,19,0,0
+/store/p/django,12,1,12,0,15,0,0
+/store/p/django-8-2023,12,1,12,0,14,0,0
+/store/p/jenkins-march2024,12,1,12,0,12,0,0
+/store/p/python203-ds-7-2023,12,2,6,0,15,0,0
+/store/p/python203-ds-oct2023,12,1,12,0,16,0,0
+/blog/00fg5lqocxkpikimilx872gnbtt2yc,11,10,1.1,3.4,39,0,0
+/blog/how-to-install-terraform-infrastructure-as-code-tool,11,4,2.75,21,20,0,0
+/blog/python-tutorial-using-python-to-interact-with-excel,11,8,1.375,3.375,30,0,0
+/jason,11,10,1.1,9.5,26,0,0
+/overview-ansible-1,11,1,11,1041,20,0,0
+/overview-golang-ai,11,7,1.5714285714285714,34.714285714285715,19,0,0
+/paul,11,7,1.5714285714285714,29.428571428571427,27,0,0
+/pure-storage-terraform,11,8,1.375,5.25,38,0,0
+/store-neuvector,11,5,2.2,7.4,19,0,0
+/store-python-automation-training,11,6,1.8333333333333333,4.5,25,0,0
+/store-python-data-sciences-training,11,2,5.5,22.5,21,0,0
+/store/p/ansible-practice-labs,11,11,1,3,41,0,0
+/store/p/pe-ai-april24,11,1,11,0,11,0,0
+/store/p/suse-k8s-april2024,11,3,3.6666666666666665,2.3333333333333335,16,0,0
+/store/p/suse-rancher-jan2024,11,2,5.5,0.5,12,0,0
+/store/p/terraform/nov2023,11,2,5.5,3,14,0,0
+/certification-pyna-202,10,2,5,27,12,0,0
+/home-1,10,1,10,44,16,0,0
+/overview-linux-4-dev,10,2,5,5.5,32,0,0
+/store-2,10,1,10,13,13,0,0
+/store-ansible-training,10,5,2,5.8,19,0,0
+/store/p/cks,10,2,5,59,15,0,0
+/store/p/cks-4-2023,10,2,5,0.5,11,0,0
+/store/p/napya-may2024,10,1,10,0,10,0,0
+/store/p/pythonds-oct2023,10,2,5,0.5,15,0,0
+/store/p/pythonnetworautomation-sept2022,10,2,5,1,17,0,0
+/alta3-logo,9,5,1.8,13,22,0,0
+/blog/getting-keyed-up,9,6,1.5,22.666666666666668,25,0,0
+/blog/magic-the-gathering-api,9,7,1.2857142857142858,4.857142857142857,21,0,0
+/certification-5g,9,1,9,104,13,0,0
+/store/p/api-design-with-python-may2024,9,1,9,0,9,0,0
+/store/p/cka-practice-labs,9,7,1.2857142857142858,1.8571428571428572,31,0,0
+/store/p/developing-on-aws-online-live-class-feb28,9,2,4.5,0.5,13,0,0
+/store/p/django-sept2023,9,1,9,0,11,0,0
+/store/p/kubernetes-bootcamp-online-live-class-nov2021,9,9,1,2.3333333333333335,36,0,0
+/store/p/napya-june2023,9,1,9,0,10,0,0
+/store/p/pythonds-july2023,9,3,3,3,16,0,0
+/store/p/pythonnetworautomation-march2024,9,1,9,0,9,0,0
+/store/p/terraform/april2024,9,1,9,0,9,0,0
+/DEVOPS,8,1,8,24,23,0,0
+/blog/ansible-template-tutorial,8,7,1.1428571428571428,14.857142857142858,20,0,0
+/blog/python-and-apis-nasas-open-apis,8,8,1,2.75,36,0,0
+/certification-python-201,8,3,2.6666666666666665,44,15,0,0
+/overview-5g-courses,8,6,1.3333333333333333,6.666666666666667,24,0,0
+/overview-devsecops,8,2,4,311.5,16,0,0
+/sean,8,8,1,5.5,23,0,0
+/store-nlp-ai,8,3,2.6666666666666665,12.333333333333334,11,0,0
+/store/p/api-design-with-python-dec2022,8,1,8,0,13,0,0
+/store/p/cka-online-live-class-april2024,8,1,8,0,8,0,0
+/store/p/cks-aug2023-k2uEG,8,1,8,0,8,0,0
+/store/p/pe-ai-11-20-23,8,2,4,0.5,9,0,0
+/store/p/sip-online-live-apr2024,8,3,2.6666666666666665,30.333333333333332,12,0,0
+/blog-1-1/test-course-idea,7,1,7,0,15,0,0
+/blog/install-virtualbox,7,6,1.1666666666666667,9.333333333333334,19,0,0
+/certification-pyb,7,2,3.5,57,10,0,0
+/store-jenkins-training,7,5,1.4,4,14,0,0
+/store/p/api-design-with-python-jan2024,7,1,7,0,7,0,0
+/store/p/apis-and-api-design-with-python-june-1-5-jmz9w,7,5,1.4,1,23,0,0
+/store/p/architecting-on-aws-online-live-class-aug18,7,1,7,0,14,0,0
+/store/p/cka-online-live-class-june2024,7,1,7,0,7,0,0
+/store/p/django-nov2023,7,1,7,0,7,0,0
+/store/p/kubernetes-bootcamp-online-live-class-aug2021,7,3,2.3333333333333335,6,15,0,0
+/store/p/nlp-ai-10-5-23,7,2,3.5,6.5,10,0,0
+/store/p/python-networking-june2023-ccftf,7,1,7,0,11,0,0
+/store/p/sip-online-live-dec-2021,7,7,1,10.142857142857142,30,0,0
+/store/p/sip-online-live-feb-2023,7,3,2.3333333333333335,16,14,0,0
+/store/p/suse-rancher-apr2024,7,2,3.5,0,7,0,0
+/store/webinar,7,1,7,0,14,0,0
+/training/sip-training/,7,7,1,2.7142857142857144,25,0,0
+/about/,6,5,1.2,4.2,20,0,0
+/blog/how-to-create-a-virtual-machine,6,5,1.2,6,16,0,0
+/blog/python-versions-python2-vs-python3,6,5,1.2,26.4,12,0,0
+/course-not-available,6,6,1,5.166666666666667,16,0,0
+/courses/sdn,6,5,1.2,9.6,22,0,0
+/dashboard,6,3,2,1,19,0,0
+/instructor-application-1,6,1,6,0,11,0,0
+/postersfor,6,5,1.2,4.8,26,0,0
+/store-ai-bard,6,1,6,301,8,0,0
+/store-nlp-ai-1,6,1,6,0,7,0,0
+/store-prompt-engineering,6,1,6,20,9,0,0
+/store-python-data-sciences-training-1,6,1,6,154,8,0,0
+/store/labs,6,3,2,3.6666666666666665,14,0,0
+/store/p/aws-technical-essentials-online-live-class-oct2023,6,1,6,0,12,0,0
+/store/p/cks-april2024,6,1,6,0,6,0,0
+/store/p/django-aug2023,6,1,6,0,6,0,0
+/store/p/golang-june2024,6,1,6,0,6,0,0
+/store/p/kubernetes-online-live-class-june2024,6,1,6,0,6,0,0
+/store/p/python-networking-dec2023-8j2rs,6,1,6,0,10,0,0
+/store/p/suse-k8s-dec2021,6,6,1,2.5,17,0,0
+/store/p/terraform/oct-2023,6,1,6,0,8,0,0
+/training/virtual-sip-training/,6,6,1,6.5,21,0,0
+/user,6,3,2,7.333333333333333,19,0,0
+/Y2xvdWQtZG,5,5,1,2.6,22,0,0
+/alta3-research-course-training,5,3,1.6666666666666667,123.66666666666667,12,0,0
+/blog/null,5,3,1.6666666666666667,0,5,0,0
+/home-old,5,1,5,0,8,0,0
+/overview-INSERT_URL_HERE,5,2,2.5,2.5,12,0,0
+/overview-automation-python-ansible-training-1,5,1,5,719,10,0,0
+/overview-aws-tech,5,5,1,14.8,12,0,0
+/overview-devops-foundations-training,5,2,2.5,2.5,10,0,0
+/overview-nab,5,1,5,4,14,0,0
+/store-ansible-training-dell,5,1,5,10,8,0,0
+/store-ipsec-training,5,5,1,7,16,0,0
+/store-rancher-training,5,2,2.5,7.5,8,0,0
+/store-sdn-training,5,2,2.5,0,10,0,0
+/store/p/5g-essentials-online-live-class-feb2023,5,2,2.5,2.5,8,0,0
+/store/p/5g-essentials-online-live-class-may2023,5,3,1.6666666666666667,6,10,0,0
+/store/p/ansible-essentials-online-may2024,5,1,5,0,5,0,0
+/store/p/api-design-with-python-jan2024-59pay,5,1,5,0,6,0,0
+/store/p/api-design-with-python-sept2021,5,5,1,3,21,0,0
+/store/p/architecting-on-aws-online-live-class-42023,5,1,5,0,6,0,0
+/store/p/aws-techessentials-jan30,5,4,1.25,4.75,8,0,0
+/store/p/developing-on-aws-online-live-class-june22,5,1,5,0,9,0,0
+/store/p/gitlab-training-oct2021,5,5,1,10.2,20,0,0
+/store/p/jenkins-training-sept2023,5,1,5,0,7,0,0
+/store/p/microservices-practice-labs,5,3,1.6666666666666667,1.6666666666666667,14,0,0
+/store/p/network-automation-online-live-class-aug2022,5,1,5,0,8,0,0
+/store/p/network-automation-with-python-and-ansible-online-live-class-oct2020,5,5,1,2,18,0,0
+/store/p/packer-training,5,1,5,0,7,0,0
+/store/p/python-basics-online-live-july2023-tpzh2,5,1,5,0,6,0,0
+/store/p/sdn-practice-labs,5,5,1,9,22,0,0
+/store/p/subscription-mnthly,5,2,2.5,14,11,0,0
+/store/p/suse-k8s-jan2022,5,4,1.25,3.25,16,0,0
+/store/p/terraform/jan2023,5,1,5,0,8,0,0
+/store/virtual,5,3,1.6666666666666667,7,10,0,0
+/aboutj,4,1,4,95,13,0,0
+/blog/,4,2,2,25,9,0,0
+/blog/install-windows-terminal,4,4,1,11.75,13,0,0
+/checkout/order-confirmed,4,4,1,88.5,23,4,0
+/home-2,4,1,4,0,7,0,0
+/kubernetes-5g-webinar,4,1,4,2,6,0,0
+/march-suse-rancher-webinar,4,2,2,0.5,6,0,0
+/overview-docker,4,1,4,298,7,0,0
+/overview-napya,4,4,1,1.5,14,0,0
+/store-os-generative-ai,4,1,4,74,6,0,0
+/store-suse-k8s-training,4,3,1.3333333333333333,2.3333333333333335,8,0,0
+/store/p/5g-essentials-online-live-class-nov2020,4,3,1.3333333333333333,5.666666666666667,13,0,0
+/store/p/apis-and-api-design-with-python-nov2020,4,4,1,2.25,17,0,0
+/store/p/architecting-on-aws-online-live-class-jan10,4,1,4,0,5,0,0
+/store/p/cks-5-2023,4,1,4,1,7,0,0
+/store/p/golang-may2023,4,1,4,0,5,0,0
+/store/p/jenkins-training-june2023,4,1,4,0,6,0,0
+/store/p/kubernetes-ckad-online-class-sept2023,4,1,4,0,6,0,0
+/store/p/napya-onlinelive,4,1,4,0,4,0,0
+/store/p/sp-ansible-201,4,3,1.3333333333333333,3,9,0,0
+/store/p/suse-sles-linux-june2022,4,4,1,3.75,18,0,0
+/store/p/suse-sles-linux-nov2021,4,4,1,3.75,17,0,0
+/talia,4,3,1.3333333333333333,4.666666666666667,10,0,0
+/visit,4,4,1,0,15,0,0
+/%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B%C3%A2%C2%80%C2%8B,3,2,1.5,2,12,0,0
+/8-2-to-8-13-py-for-sde,3,2,1.5,6,4,0,0
+/admin,3,3,1,3,13,0,0
+/b3ZlcnZpZX,3,1,3,1,7,0,0
+/blog-1-1,3,1,3,43,7,0,0
+/blog/5aihoup7u1rnxvlb9m8t8g4dt58pk2,3,1,3,70,6,0,0
+/blog/b2ejoa840ofyizom2xfuzo6xiiq3pe,3,1,3,0,4,0,0
+/blog/singlevmK8s,3,1,3,67,11,0,0
+/blog/tag/ansible,3,1,3,39,6,0,0
+/blog/tune-your-dot-files,3,3,1,11.333333333333334,6,0,0
+/blog/xgzvy5ylhdinwachialvwav5ggeh7n,3,1,3,0,6,0,0
+/on-demand-courses-1,3,1,3,103,5,0,0
+/overview-network-automation,3,2,1.5,6.5,12,0,0
+/overview-pyb,3,2,1.5,3,9,0,0
+/overview-zerocodechatbots-1,3,1,3,0,3,0,0
+/poster/,3,1,3,3,10,0,0
+/s/Mastering-Ansible-873z.pdf,3,1,3,10,9,0,0
+/store-comptia-network,3,2,1.5,1,5,0,0
+/store/p/ansible-essentials-online-nov2022,3,3,1,4.333333333333333,11,0,0
+/store/p/api-design-with-python-feb-2021,3,3,1,2,14,0,0
+/store/p/api-design-with-python-oct2023-t7Xr8,3,1,3,0,3,0,0
+/store/p/architecting-on-aws-online-live-class-4-26-22,3,2,1.5,1.5,4,0,0
+/store/p/architecting-on-aws-online-live-class-apr2021,3,1,3,0,3,0,0
+/store/p/aws-techessentials-feb20,3,2,1.5,0,7,0,0
+/store/p/deploying5g-online-live-class-12-21,3,3,1,0.3333333333333333,11,0,0
+/store/p/golang-training-aug2022,3,1,3,0,4,0,0
+/store/p/jenkins-jan2022,3,2,1.5,1,8,0,0
+/store/p/jenkinsnov2020,3,3,1,14,13,0,0
+/store/p/kubernetes-bootcamp-online-live-class-dec2020,3,2,1.5,6.5,10,0,0
+/store/p/kubernetes-bootcamp-online-live-class-oct2020,3,3,1,37.333333333333336,12,0,0
+/store/p/kubernetes-online-live-class-oct-2021,3,3,1,30,12,0,0
+/store/p/microservices-online-live-class-1-27-2021,3,2,1.5,7.5,12,0,0
+/store/p/neuvector-training-623,3,2,1.5,0.5,6,0,0
+/store/p/python-basics-online-live-class-jan2021,3,2,1.5,1.5,7,0,0
+/store/p/sip-essentials-online-live-oct2021,3,3,1,12,9,0,0
+/store/p/system-operations-on-aws-online-live-class-nov2020,3,1,3,0,6,0,0
+/store/p/system-operations-on-aws-online-live-class-nov2022,3,1,3,0,5,0,0
+/test.yaml,3,2,1.5,2.5,9,0,0
+/training-courses-old,3,1,3,5,4,0,0
+/ansible-training-1,2,1,2,0,2,0,0
+/beachhead,2,2,1,0,10,0,0
+/blog-1-1/Blog Post Title One-6sea4,2,1,2,59,5,0,0
+/blog-1-1/jm3qremu8kkqc52uhj7kre1amp7b1y,2,1,2,0,4,0,0
+/blog/category/blog,2,1,2,2,5,0,0
+/blog/tag/ansible+switch+configuration,2,2,1,2.5,10,0,0
+/blog/tag/ckad,2,2,1,4.5,6,0,0
+/blog/tag/programming,2,2,1,2.5,9,0,0
+/cloud-training-2,2,1,2,0,2,0,0
+/commerce/orders/YmM5OWYyOT,2,2,1,0,8,0,0
+/contact/,2,2,1,0,2,0,0
+/courses/,2,2,1,8,10,0,0
+/devops.,2,1,2,1,6,0,0
+/extra,2,1,2,5,7,0,0
+/home-1-2,2,1,2,0,4,0,0
+/https/alta3.com/store/p/crush-the-ckad,2,1,2,0,4,0,0
+/hutch-copy,2,1,2,0,3,0,0
+/kubernetes-in-the-5g-network-webinar,2,1,2,0,2,0,0
+/labs/openstack,2,1,2,1,5,0,0
+/labs/openstack/39,2,2,1,1,5,0,0
+/login,2,2,1,4.5,9,0,0
+/may-ansible-awx-webinar,2,1,2,0,2,0,0
+/overview-5G,2,1,2,2,6,0,0
+/overview-ans,2,2,1,0.5,7,0,0
+/overview-ansible-202-1,2,1,2,0,2,0,0
+/overview-awssyops,2,2,1,2.5,6,0,0
+/overview-github,2,1,2,3,6,0,0
+/overview-gitlab,2,2,1,2.5,6,0,0
+/overview-gitlab-training-1,2,1,2,0,2,0,0
+/overview-natural-language-ai-1,2,1,2,0,2,0,0
+/overview-opensource-ai-1,2,1,2,0,2,0,0
+/overview-opensource-aihttps://alta3.com/overview-natural-language-aihttps://alta3.com/overview-python-aihttps://alta3.com/overview-golang-aihttps://alta3.com/overview-ansible-aihttps://alta3.com/overview-java-aihttps://alta3.com/overview-zerocodechatbotshttps://alta3.com/overview-zerocode-aihttps://alta3.com/overview-ai-chat-bardhttps://alta3.com/overview-zerocodechatbots-watsonhttps://alta3.com/overview-zerocodechatbots-chatgpt,2,2,1,0,7,0,0
+/overview-py-datasci,2,1,2,2,6,0,0
+/overview-pyna,2,2,1,3.5,6,0,0
+/overview-zerocodeai,2,1,2,389,4,0,0
+/portfolio-1/project-one-f5w4d-wcrse,2,1,2,0,4,0,0
+/posters/tmux.pdf,2,2,1,2,8,0,0
+/store-network-automation-training-1,2,1,2,0,3,0,0
+/store-slesv201v15-training,2,2,1,1,3,0,0
+/store-volte,2,2,1,3,3,0,0
+/store/manual,2,1,2,0,2,0,0
+/store/p/5g-essentials-online-live-class-august27-28,2,1,2,9,6,0,0
+/store/p/5g-essentials-online-live-class-jan2022,2,2,1,5,6,0,0
+/store/p/aXBzZWMtc2,2,2,1,0,8,0,0
+/store/p/ansible-essentials-self-paced-nov2020,2,2,1,3.5,8,0,0
+/store/p/apis-and-api-design-with-python-june2021,2,2,1,1,7,0,0
+/store/p/architecting-on-aws-online-live-class-5-17-22,2,1,2,8,5,0,0
+/store/p/architecting-on-aws-online-live-class-6-28-22,2,1,2,0,4,0,0
+/store/p/architecting-on-aws-online-live-class-oct2020,2,1,2,0,2,0,0
+/store/p/architecting-on-aws-online-live-class-sept28,2,1,2,0,2,0,0
+/store/p/architecting-on-aws-online-live-sept2021,2,1,2,0,3,0,0
+/store/p/aws-techessentials-april2023,2,1,2,0,2,0,0
+/store/p/cka-online-live-class-12-2022,2,2,1,0,3,0,0
+/store/p/comptia-security-boot-camp-aug2021,2,1,2,1,6,0,0
+/store/p/developing-on-aws-online-live-class-aug2022,2,1,2,0,2,0,0
+/store/p/gitlab-training-march2022,2,1,2,0,5,0,0
+/store/p/golang-nov2021,2,1,2,0,3,0,0
+/store/p/kubernetes-bootcamp-online-live-class-august31,2,2,1,0,4,0,0
+/store/p/kubernetes-online-live-class-dec2022,2,2,1,1,5,0,0
+/store/p/kubernetes-online-live-class-july2023-dg8bl,2,1,2,0,3,0,0
+/store/p/kubernetes-online-live-class-nov2022,2,1,2,3,7,0,0
+/store/p/microservices-online-live-class-aug2021,2,2,1,1.5,8,0,0
+/store/p/microservices-online-live-june2023,2,1,2,4,4,0,0
+/store/p/network-automation-online-live-class-nov2022,2,1,2,0,3,0,0
+/store/p/pythonnetworautomation-aug2022,2,1,2,0,3,0,0
+/store/p/pythonnetworautomation-may2022,2,1,2,0,3,0,0
+/store/p/sdnnfv-online-live-class-oct2020,2,1,2,2,7,0,0
+/store/p/sip-essentials-online-live-class-april2021,2,2,1,5.5,8,0,0
+/store/p/subscription-yearly,2,1,2,0,3,0,0
+/store/p/suse-k8s-dec2022,2,2,1,1,6,0,0
+/store/p/suse-rancher-dec2021,2,2,1,4.5,9,0,0
+/store/p/suse-sle201v15-linux-sept2021,2,2,1,1,9,0,0
+/store/p/volte-and-the-ims-online-training-livesept-584p6mar2022,2,1,2,8,7,0,0
+/subscription-services,2,2,1,0,3,0,0
+/training-courses-2021,2,1,2,0,2,0,0
+/training/sip-interoperability-training/,2,2,1,0,4,0,0
+/training/virtual-sip-training,2,2,1,0,6,0,0
+/%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B%E2%80%8B,1,1,1,0,3,0,0
+/3-7-python-basics,1,1,1,1,5,0,0
+/404,1,1,1,0,3,0,0
+/;,1,1,1,1,2,0,0
+/Avaya_SIP_Training.html,1,1,1,0,3,0,0
+/DEMO,1,1,1,0,4,0,0
+/alta3-practice-lab-environments,1,1,1,0,3,0,0
+/alta3-research-course-portfolio-1,1,1,1,0,1,0,0
+/api/what-is-live,1,1,1,1,5,0,0
+/author/hfryer/,1,1,1,12,3,0,0
+/beachhead/,1,1,1,3,5,0,0
+/blog/2017-02-09-public-vs-private-openstack,1,1,1,0,4,0,0
+/blog/5pc907711blfw1nludoq9zzh7bjjbc,1,1,1,21,3,0,0
+/blog/670bzkwx4a4ui8sxf0x96qsq7eh51h,1,1,1,23,3,0,0
+/blog/asgv4x928z07bkyoe0420szb38mezk,1,1,1,47,3,0,0
+/blog/en77h6ek2rjfwfuwobm65ocmkj67po,1,1,1,20,3,0,0
+/blog/km1mvf4k45gwvsbd5af80357c3slex,1,1,1,94,3,0,0
+/blog/ma999nl77n8yjq3cgxn3uyh0gn0va8,1,1,1,35,3,0,0
+/blog/mk2zfhf8l0h9rj4x4xi9xffbi89p6t,1,1,1,101,3,0,0
+/blog/r77bthbptec44rdupzglhzwrr7te0i,1,1,1,21,3,0,0
+/blog/tag/ansible+eos+banner,1,1,1,0,4,0,0
+/blog/tag/curl,1,1,1,7,3,0,0
+/blog/tag/kubernetes,1,1,1,7,2,0,0
+/blog/tag/linux,1,1,1,7,3,0,0
+/blog/tag/python,1,1,1,7,3,0,0
+/blog/tag/vim,1,1,1,2,3,0,0
+/blog/w2r9f6mt8i7qj78wi9pr54yfte6ev7,1,1,1,86,3,0,0
+/blogs,1,1,1,2,4,0,0
+/category/uncategorized/,1,1,1,13,5,0,0
+/certification-pyb-1,1,1,1,0,1,0,0
+/certification-pyna-202-1,1,1,1,0,1,0,0
+/certification-python-201-1,1,1,1,0,1,0,0
+/certification/cf1f998c-92e7-437f-a1dd-80fb1e70ee87.pdf,1,1,1,2,5,0,0
+/commerce/orders/024998a6-b1d5-464c-a045-5eab76d986fc,1,1,1,78,4,1,0
+/commerce/orders/07521208-793e-4ab4-9555-85be28a13082,1,1,1,23,4,1,0
+/commerce/orders/085d2533-1de9-400c-b892-fef40613ffed,1,1,1,5,4,1,0
+/commerce/orders/093900dc-6bc6-49f7-82b6-64457ac03c26,1,1,1,5,4,1,0
+/commerce/orders/0dbe173c-c44e-4ef9-adbd-bdbe3b706d21,1,1,1,0,5,1,0
+/commerce/orders/124cc4fa-734e-4ddb-b348-a95b55bdd6f0,1,1,1,49,4,1,0
+/commerce/orders/1db58db7-b161-4188-88ab-adbf9ca99db8,1,1,1,0,5,1,0
+/commerce/orders/22614371-1862-43f7-b9c3-94afe994850f,1,1,1,2,4,1,0
+/commerce/orders/25eca9be-4e70-4d40-b51e-d2ff82588c2d,1,1,1,420,4,1,0
+/commerce/orders/29419664-b125-4be9-a7b7-f3df36b3feae,1,1,1,90,4,1,0
+/commerce/orders/2bd11f25-6549-4090-859e-83f630570a91,1,1,1,8,4,1,0
+/commerce/orders/2d965dc2-0939-4de8-937a-e51deb0e33f2,1,1,1,167,4,1,0
+/commerce/orders/30337d48-57af-42cf-9770-a59f78ee378d,1,1,1,5,4,1,0
+/commerce/orders/345199bd-0a0a-4046-a16e-945a9a26c0f2,1,1,1,1271,4,1,0
+/commerce/orders/34c982c1-6ab9-4dd0-b756-1f33f21ec80d,1,1,1,0,5,1,0
+/commerce/orders/34d4652e-1d30-4b74-ba94-f29f47cffd45,1,1,1,3,4,1,0
+/commerce/orders/3bdc79fd-6c3a-410d-b9bb-52a26bc79e5b,1,1,1,0,5,1,0
+/commerce/orders/3bfa5f15-797d-461d-8851-ca0134be6765,1,1,1,10,4,1,0
+/commerce/orders/3c750317-b014-41d0-a75f-d0e3ad3a9876,1,1,1,8,4,1,0
+/commerce/orders/43fe3441-eb01-419c-be7f-0a814eb8fba9,1,1,1,0,3,1,0
+/commerce/orders/4846f0c4-8c69-4971-b7b3-e49484247842,1,1,1,0,4,1,0
+/commerce/orders/4877b9bc-8435-4afd-94eb-e4e410bbdfb0,1,1,1,29,4,1,0
+/commerce/orders/48b6c7a9-119d-48e7-b7f1-a055b13f3f4b,1,1,1,666,4,1,0
+/commerce/orders/522d8309-46b1-46f8-bb3a-cf8af75dfeb6,1,1,1,5,4,1,0
+/commerce/orders/59e75593-f5b7-4b3d-85a0-56b4340c7790,1,1,1,22,4,1,0
+/commerce/orders/67dbbeec-0c81-4163-830b-daa421fc1578,1,1,1,14,4,1,0
+/commerce/orders/6864850d-7dc6-400d-964e-d808d0b24b86,1,1,1,120,4,1,0
+/commerce/orders/72e9abf0-c4a5-4180-857c-a779e8e48bca,1,1,1,6,4,1,0
+/commerce/orders/795041ee-f64b-48dd-ada6-2696bcdaf8c2,1,1,1,0,3,1,0
+/commerce/orders/7ff88cd3-2f3b-42a6-9aaa-8ce39f9fa81e,1,1,1,0,5,1,0
+/commerce/orders/85041af8-93db-490e-8b86-b10164b7a6b3,1,1,1,13,4,1,0
+/commerce/orders/8967fde7-b830-420f-9fe8-e59a5e3cd510,1,1,1,0,3,1,0
+/commerce/orders/89d2b8a3-cbd1-41c4-a9e7-b635f99679c7,1,1,1,22,4,1,0
+/commerce/orders/8f71ad57-662f-4294-a494-cb5e0ddb2ae1,1,1,1,11,3,1,0
+/commerce/orders/911383df-1351-4e3f-a31c-08020ce753e3,1,1,1,1,4,1,0
+/commerce/orders/999bd3ad-8680-48f2-adde-f359a2f22cb0,1,1,1,13,4,1,0
+/commerce/orders/99cec71d-8800-4244-b4ab-602fdb699e0f,1,1,1,0,5,1,0
+/commerce/orders/a081384e-3a6e-4dc7-8638-493f38c679db,1,1,1,53,4,1,0
+/commerce/orders/a0d318e4-2a37-4fee-a499-236a87203f2c,1,1,1,0,5,1,0
+/commerce/orders/b38e4080-882b-4893-aa61-7d1aa165a47b,1,1,1,6,4,0,0
+/commerce/orders/c1ef172f-728c-466a-8d60-c46240c98840,1,1,1,2,3,1,0
+/commerce/orders/cdac9ddb-8857-49c9-a33d-1485fc7ac6b7,1,1,1,13,4,1,0
+/commerce/orders/d4705bab-dfd7-4e8d-9303-bd7cb1d8c6c4,1,1,1,15,4,1,0
+/commerce/orders/d7521bad-7574-4c28-905d-7c0801040cf6,1,1,1,48,4,1,0
+/commerce/orders/db400617-4d97-471c-8407-33b611d9c85c,1,1,1,8,4,1,0
+/commerce/orders/dd8a018e-7830-46db-9dc1-43e83adea640,1,1,1,24,4,1,0
+/commerce/orders/ddf1a9ea-3d14-4580-a214-5278cf8f6757,1,1,1,30,4,1,0
+/commerce/orders/e346b617-96c4-4ae4-82ce-c4384c56b35d,1,1,1,11,4,1,0
+/commerce/orders/ec4a9510-b249-4eee-917e-cea82857d582,1,1,1,22,4,1,0
+/commerce/orders/eea534af-4057-4dcc-8fb8-a2e5f2015b1b,1,1,1,9,4,1,0
+/commerce/orders/f649f859-ef4b-482f-b0a1-1764fae73003,1,1,1,12,4,1,0
+/commerce/orders/f985595c-fe20-4dde-8072-0d0ec3b852de,1,1,1,0,6,1,0
+/commerce/orders/fa42e40a-5de8-45c6-8e8a-548b1aece045,1,1,1,1,4,1,0
+/commerce/orders/ffdd4279-b51c-481c-b9cc-eec32dd80bb3,1,1,1,0,5,1,0
+/commerce/redirect,1,1,1,0,4,0,0
+/courses/virtual-sip-training/,1,1,1,0,4,0,0
+/draftpagedonotlink,1,1,1,0,2,0,0
+/favicon.co,1,1,1,1,3,0,0
+/free-course-trials-thank-you,1,1,1,0,1,0,0
+/groups/macho-dingos-flopped/your-content,1,1,1,1,5,0,0
+/groups/nimble-orangutans-raced/dashboard,1,1,1,3,5,0,0
+/groups/nimble-turtles-spurted,1,1,1,2,5,0,0
+/groups/nimble-turtles-spurted/your-content,1,1,1,1,3,0,0
+/https:/alta3.com/store/p/tf-selfpaced,1,1,1,0,2,0,0
+/hutch-1,1,1,1,0,1,0,0
+/july-sles-webinar,1,1,1,0,1,0,0
+/labs,1,1,1,10,5,0,0
+/labs/openstack/,1,1,1,2,3,0,0
+/labs/openstack/10/,1,1,1,2,5,0,0
+/labs/sdn/,1,1,1,0,6,0,0
+/march-suse-rancher-webinar-1,1,1,1,0,1,0,0
+/napya,1,1,1,4,4,0,0
+/new-page,1,1,1,0,3,0,0
+/overview-5g-overview/,1,1,1,0,4,0,0
+/overview-aa,1,1,1,0,3,0,0
+/overview-ansible-101,1,1,1,4,3,0,0
+/overview-ansible-2,1,1,1,0,1,0,0
+/overview-ansible-202-server,1,1,1,0,2,0,0
+/overview-ansible-203-windows,1,1,1,0,2,0,0
+/overview-ansible-302-1,1,1,1,0,1,0,0
+/overview-ansible-ai-1,1,1,1,0,1,0,0
+/overview-ansidell,1,1,1,0,2,0,0
+/overview-avaya-trainingThis%20video,1,1,1,11,5,0,0
+/overview-awx,1,1,1,0,2,0,0
+/overview-casp/,1,1,1,1,5,0,0
+/overview-cka,1,1,1,1,3,0,0
+/overview-cka-training%C2%A0-%C2%A0virtual%20live%20training%20-%205-9%20June%202023,1,1,1,9,3,0,0
+/overview-cka-training-1,1,1,1,0,1,0,0
+/overview-comptia-network/,1,0,0,0,3,0,0
+/overview-crush-the-ckad-exam,1,1,1,1,3,0,0
+/overview-deploying5g-1,1,1,1,0,1,0,0
+/overview-docker101-1,1,1,1,0,2,0,0
+/overview-golang-ai-1,1,1,1,0,1,0,0
+/overview-golang-training-1,1,1,1,0,1,0,0
+/overview-java-ai-1,1,1,1,0,1,0,0
+/overview-kubernetes-cka,1,1,1,0,2,0,0
+/overview-kubernetes-ckad-1,1,1,1,0,1,0,0
+/overview-mans,1,1,1,0,2,0,0
+/overview-mastering-ansible-training-1,1,1,1,0,2,0,0
+/overview-natural-language-ai-delete,1,1,1,0,1,0,0
+/overview-natural-language-ai/,1,1,1,2,4,0,0
+/overview-python-ai-1,1,1,1,0,1,0,0
+/overview-sd-wan,1,1,1,2,3,0,0
+/overview-sdn,1,1,1,2,3,0,0
+/overview-sk8s,1,1,1,0,2,0,0
+/overview-suse-k8s-1,1,1,1,0,1,0,0
+/overview-suse-neuvector/,1,1,1,0,3,0,0
+/overview-training-data-sciences,1,1,1,7,3,0,0
+/overview-zerocodechatbots-chatgpt-1,1,1,1,0,1,0,0
+/overview-zerocodechatbots-watson-1,1,1,1,0,1,0,0
+/overviewawsdeveloping,1,1,1,1,4,0,0
+/overviewjenkins,1,1,1,6,4,0,0
+/pdf/,1,1,1,3,3,0,0
+/portfolio-1,1,1,1,0,1,0,0
+/portfolio-2,1,1,1,0,1,0,0
+/posters/ansible.pdf,1,1,1,0,2,0,0
+/posters/linux.pdf,1,1,1,1,3,0,0
+/postersopen%20aiopen%20ai,1,1,1,1,3,0,0
+/postest,1,1,1,0,4,0,0
+/programming-training-1,1,1,1,0,1,0,0
+/rancher-training,1,1,1,0,1,0,0
+/research,1,1,1,3,3,0,0
+/sales,1,1,1,4,3,0,0
+/sales-applicatiom,1,1,1,0,3,0,0
+/site-map.yaml,1,1,1,1,3,0,0
+/site-map.yml,1,1,1,1,3,0,0
+/sle201v15-training,1,1,1,0,1,0,0
+/store-2/p/country-feast-set-3nybt-kkkbr,1,1,1,0,1,0,0
+/store-awsarchitect,1,1,1,0,1,0,0
+/store-awsdeveloping,1,1,1,0,1,0,0
+/store-awsdevops,1,1,1,0,1,0,0
+/store-awssysops,1,1,1,0,1,0,0
+/store-awstech,1,1,1,0,1,0,0
+/store-ceh,1,1,1,0,1,0,0
+/store-certified-kubernetes-training%20Certified%20Kubernetes%20Administrator%20-%20Instructor%20led%20course,1,1,1,2,3,0,0
+/store-certified-kubernetes-training-1,1,1,1,0,1,0,0
+/store-mans,1,1,1,0,2,0,0
+/store-openstack-training,1,1,1,0,1,0,0
+/store-rancher-training-1,1,1,1,0,1,0,0
+/store/p/5g-essentials-online-live-class-april2021,1,1,1,1,4,0,0
+/store/p/NWctZXNzZW,1,1,1,0,4,0,0
+/store/p/ansible-manual,1,1,1,0,3,0,0
+/store/p/api-design-with-python-nov2021,1,1,1,2,4,0,0
+/store/p/apis-and-api-design-with-python-april2021,1,1,1,33,2,0,0
+/store/p/architecting-on-aws-online-live-class-aug2022,1,1,1,0,1,0,0
+/store/p/architecting-on-aws-online-live-class-jan10-ny84t,1,1,1,0,1,0,0
+/store/p/architecting-on-aws-online-live-class-jan2021,1,1,1,0,1,0,0
+/store/p/architecting-on-aws-online-live-nov-21,1,1,1,1,4,0,0
+/store/p/aws-technical-essentials-online-live-class-nov2022,1,1,1,0,1,0,0
+/store/p/certified-kubernetes-administrator-labs,1,1,1,2,5,0,0
+/store/p/cissp-boot-camp-online-live-nov2020-737ye,1,1,1,5,3,0,0
+/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn/,1,1,1,0,3,0,0
+/store/p/comptia-network-online-live-nightclassaugust,1,1,1,1,4,0,0
+/store/p/comptia-security-boot-camp-dec2021-g29rp,1,1,1,0,4,0,0
+/store/p/developing-on-aws-online-live-class-jan31,1,1,1,0,1,0,0
+/store/p/developing-on-aws-online-live-class-oct-2021,1,1,1,0,1,0,0
+/store/p/gitlab-training-oct2021-9hkpn-Bhi6h,1,1,1,2,5,0,0
+/store/p/golang-oct2023-qNrJL,1,1,1,0,1,0,0
+/store/p/kubernetes-ckad-online-live-class-sept2023-TSsSF,1,1,1,0,1,0,0
+/store/p/microservices-online-live-class-june2021,1,1,1,0,3,0,0
+/store/p/microservices-online-live-class-oct2021,1,1,1,3,4,0,0
+/store/p/network-automation-with-python-and-ansible-online-live-class-april2021,1,1,1,14,5,0,0
+/store/p/network-automation-with-python-and-ansible-online-live-class-aug2021,1,1,1,0,4,0,0
+/store/p/network-automation-with-python-and-ansible-online-live-class-dec2021,1,1,1,0,1,0,0
+/store/p/pe-ai-nov-23,1,1,1,0,1,0,0
+/store/p/python-basics-online-live-class-nov2020,1,1,1,4,4,0,0
+/store/p/python-networking-oct-2023,1,1,1,0,2,0,0
+/store/p/pythonnetworautomation-march2023,1,1,1,0,1,0,0
+/store/p/red-hat-system-administrator-online-live-jan2021,1,1,1,0,3,0,0
+/store/p/red-hat-system-administrator-online-live-july2021,1,1,1,0,4,0,0
+/store/p/red-hat-system-administrator-self-paced,1,1,1,2,5,0,0
+/store/p/sip-essentials-online-live-class-dec2020,1,1,1,35,2,0,0
+/store/p/suse-k8s-aug2021,1,1,1,0,1,0,0
+/store/p/suse-k8s-dec2021/,1,1,1,0,3,0,0
+/store/p/suse-k8s-may2022,1,1,1,0,1,0,0
+/store/p/suse-k8s-oct2021,1,1,1,0,4,0,0
+/store/p/suse-k8s-oct2022,1,1,1,0,1,0,0
+/store/p/suse-k8s-sept2022,1,1,1,0,1,0,0
+/store/p/suse-rancher-aug2021,1,1,1,3,4,0,0
+/store/p/suse-rancher-may2023-dpk8d,1,1,1,0,1,0,0
+/store/p/system-operations-on-aws-online-live-class-0ct2022,1,1,1,0,2,0,0
+/store/p/system-operations-on-aws-online-live-class-feb7,1,1,1,0,1,0,0
+/store/p/volte-and-the-ims-onlinelivesept,1,1,1,2,4,0,0
+/store/p/volte-online-training-june2021,1,1,1,0,4,0,0
+/storecissp,1,1,1,6,3,0,0
+/storedeploying5g,1,1,1,0,2,0,0
+/termsandconditions,1,1,1,4,4,0,0
+/tim-1,1,1,1,0,1,0,0
+/training,1,1,1,0,2,0,0
+/training-courses-1,1,1,1,0,2,0,0
+/users,1,1,1,20,3,0,0
+/wiki,1,1,1,3,5,0,0
+/รขโฌโนรขโฌโนรขโฌโนรขโฌโนรขโฌโน,1,1,1,0,4,0,0
+/commerce/orders/fd737a4a-145a-422e-85f7-0c835a15af97,0,1,0,72,2,0,0
alta3/moved/source/google_search.txt
@@ -0,0 +1,340 @@
+/training/sip-training/
+/training-courses-2
+/training-1
+/s/yaml-yft4.pdf
+/s/VoLTE-IMS-Course-Outline.pdf
+/s/vim-t4xp.pdf
+/subscription-services
+/store/volte-and-the-ims-self-paced-course
+/store/volte-and-the-ims-onlinelivesept
+/store/virtual
+/store-terraform
+/store-suse-k8s-training
+/store-slesv201v15-training
+/store/sip-self-paced
+/store/sip-essentials-online-live-class-dec2020
+/store/sdnnfv-self-paced
+/store/red-hat-system-administrator-self-paced
+/store/p/zerocode-8-2024
+/store/p/zerocode-6-2024
+/store/p/zerocode-4-2024
+/store/p/zerocode-10-2024
+/store-python-basics-training
+/store/python-basics-self-paced
+/store/python-basics-online-live-class-nov2020
+/store/p/tf-selfpaced
+/store/p/terraform/oct2024
+/store/p/terraform/oct-2023
+/store/p/terraform/may2024
+/store/p/terraform/june2024
+/store/p/terraform/aug2024
+/store/p/terraform/april2024
+/store/p/system-operations-on-aws-online-live-class-oct-2021
+/store/p/system-operations-on-aws-online-live-class-may2022
+/store/p/system-operations-on-aws-online-live-class-july2022
+/store/p/suse-sles-linux-apr2022
+/store/p/suse-rancher-may2022
+/store/p/suse-rancher-apr2024
+/store/p/suse-k8s-oct2022
+/store/p/suse-k8s-july2024
+/store/p/suse-k8s-dec2022
+/store/p/suse-k8s-aug2021
+/store/p/suse-k8s-april2024
+/store/p/subscription-mnthly
+/store/p/sp-ansible-201
+/store/p/sip-online-live-apr2024
+/store/p/sdwots-june2024
+/store/p/sdwots-april
+/store-prompt-engineering
+/store/p/rhel-practice-labs
+/store/p/python-network-automation-self-paced
+/store/p/pythonnetworautomation-may2022-b2r29
+/store/p/pythonnetworautomation-aug2024
+/store/p/python-basics-online-live-june2024
+/store/p/python-basics-online-live-class-jul2021
+/store/p/python-basics-online-live-class-april2022
+/store/p/pyai-aug2024
+/store/p/pyai-april2024
+/store/p/pe-ai-oct2024
+/store/p/pe-ai-aug2024
+/store/p/pe-ai-april24
+/store/p/os-generative-ai-may2024
+/store/p/os-generative-ai-july2024
+/store/p/os-generative-ai-aug2024
+/store/p/neuvector-training-623
+/store/p/napya-may2024-zlah6
+/store/p/napya-july2024
+/store/p/microservices-online-live-class-march2022
+/store/p/microservices-online-live-class-jan2022
+/store/p/kubernetes-online-live-class-june2024
+/store/p/kubernetes-online-live-class-july-2024
+/store/p/kubernetes-online-live-class-aug2024
+/store/p/kubernetes-online-live-class-april2024
+/store/p/kubernetesonlineliveclassapril2022
+/store/p/kubernetes-ckad-online-live-class-dec2023
+/store/p/kubernetes-bootcamp-online-live-class-spet2023
+/store/p/jenkins-training-june2023
+/store/p/jenkins-sept2024
+/store/p/jenkins-oct2021
+/store/p/jenkins-march2020
+/store/p/jenkins-june2024
+/store/p/jenkins-feb2022
+/store/p/golang-june2024
+/store/p/golang-aug2024
+/store/p/gitlab-training-jan2022
+/store/p/devops-foundations-9-7-2021
+/store/p/devops-foundations-9-212021-jd5t2
+/store/p/devops-foundations-10-212021-jd5t2-cjlzd
+/store/p/devops-9-28-21
+/store/p/devops-8-2021-w9dhj
+/store/p/developing-on-aws-online-live-class-may2021
+/store/p/developing-on-aws-online-live-class-4-26-22
+/store/p/deploying5g-online-live-class-jan2022
+/store/p/crush-the-ckad
+/store/p/comptia-security-boot-camp-nov2021
+/store/p/comptia-security-boot-camp-june2021
+/store/p/comptia-security-boot-camp-apr2022
+/store/p/cks-sept2024
+/store/p/cks-jully2024
+/store/p/cks-april2024
+/store/p/cka-selfpaced
+/store/p/cka-online-live-class-sep2021-w7p82
+/store/p/cka-online-live-class-oct2024
+/store/p/cka-online-live-class-june2024
+/store/p/cka-online-live-class-april2024
+/store/p/cka-online-live-class-april2022
+/store/p/ci/cd/oct2024
+/store/p/ci/cd/july-2024
+/store/p/c98wf6-may2024
+/store/p/c98wf6-june2024
+/store/p/c98wf6-april2024
+/store/p/aws-technical-essentials-online-live-class-jan2021
+/store/p/aws-technical-essentials-online-live-class-8-22
+/store/p/aws-technical-essentials-6-27
+/store/p/aws-technical-essentials-05-16-22
+/store/p/aws-techessentials-jan9
+/store/p/avaya-aura-self-paced-course
+/store/p/architecting-on-aws-online-live-sept2021
+/store/p/architecting-on-aws-online-live-oct-2021
+/store/p/architecting-on-aws-online-live-class-sept28
+/store/p/architecting-on-aws-online-live-class-jan2021
+/store/p/architecting-on-aws-online-live-class-4-5-22
+/store/p/architecting-on-aws-online-live-aug31
+/store/p/architecting-on-aws-online-live-423
+/store/p/appdev-oct2024
+/store/p/appdev-june2024
+/store/p/api-design-with-python-sept2024
+/store/p/api-design-with-python-nov2021-f5ebn
+/store/p/api-design-with-python-may2024
+/store/p/api-design-with-python-jan2022
+/store/p/ansible-essentials-online-nov2022
+/store/p/ansible-essentials-online-may2024
+/store/p/ansible-essentials-online-may2022
+/store/p/ansible-essentials-online-feb2024-r3ptk
+/store/p/agile-8-2021-w9dhj-a8sad
+/store/p/agile10-2021-w9dhj
+/store/p/5g-essentials-online-live-class-june2021-k5rbs
+/store/p/5g-essentials-online-live-class-dec2021
+/store/p/5g-essentials-online-live-class-apr2022
+/store-os-generative-ai
+/store-openstack-training
+/store/online-live
+/store?offset=238
+/store-nlp-ai
+/store/network-automation-with-python-and-ansible-online-live-class-oct2020
+/store-microservices-training
+/store/manual
+/store-linux-training
+/store/labs
+/store/kubernetes-bootcamp-self-paced
+/store/kubernetes-bootcamp-online-live-class-oct2020
+/store/kubernetes-bootcamp-online-live-class-dec2020
+/store/kubernetes-bootcamp-online-live-class-august31
+/store-jenkins-training
+/store/ipsec-self-paced-course
+/store-django
+/store-cks
+/storecissp
+/storecirclecitraining
+/store/big-data-on-aws-online-live-class-oct13
+/store/big-data-on-aws-online-live-class-dec8
+/store/aws-technical-essentials-online-live-class-aug17
+/store-awstech
+/store/avaya-aura-self-paced-course
+/store/architecting-on-aws-online-live-class-oct2020
+/store/apis-and-api-design-with-python-nov2020
+/store/apis-and-api-design-with-python-june-1-5-jmz9w
+/store/ansible-essentials-self-paced
+/store-ai-bard
+/store/5g-essentials-self-paced-course
+/store/5g-essentials-online-live-class-nov2020
+/store/5g-essentials-online-live-class-august27-28
+/store-5g
+/s/tmux-pskn.pdf
+/s/tmux-27lb.pdf
+/s/SLE201v15.pdf
+/s/sip-ng25.pdf
+/s/SIP-Essentials-Training.pdf
+/s/regex-7dg3.pdf
+/s/Python-for-Data-Sciences.pdf
+/s/Python-3-Poster.pdf
+/s/python3pkgs-zn97.pdf
+/s/linux-poster.pdf
+/s/Linux.pdf
+/s/git-y46g.pdf
+/s/Ceph-Storage-Administration.pdf
+/s/Avaya-Aura-Course-Outline.pdf
+/s/ASW-Developing-Course-Outline.pdf
+/s/Ansible-Poster.pdf
+/s/5G-Essentials.pdf
+/s/5G-Acronyms-LS.pdf
+/posters/yaml.pdf
+/posters/yaml
+/posters/vim.pdf
+/posters/tmux.pdf
+/posters/tmux
+/posters/sip.pdf
+/posters/regex.pdf
+/posters/python3pkgs.pdf
+/posters/k8s.pdf
+/posters/ansible.pdf
+/posters/
+/paul
+/overview-zerocodechatbots-watson
+/overview-zerocodechatbots-chatgpt
+/overview-terraform-special
+/overview-tcp-ip
+/overview-python-ai
+/overview-prompt-engineering
+/overview-packer
+/overview-opensource-ai-dell
+/overview-natural-language-ai
+/overview-kubernetes-ckad?trk=products_details_guest_secondary_call_to_action
+/overview-java-ai
+/overview-intucsx
+/overview-golang-ai
+/overview-docker101
+/overview-docker-1
+/overview-django
+/overview-devsecops
+/overview-comptia-security
+/overview-cks
+/overview-cissp
+/overview-ci/cd-pipelines
+/overview-ceh
+/overview-casp
+/overview-awsdevops
+/overview-avaya-training
+/overviewansible-for-dbas
+/overview-ansible-ai
+/overview-ansible-203
+/overview-ansible-202
+/overview-ansible-1
+/overview-ai-chat-bard
+/overview-5g-overview
+/overview-5g-courses
+/may-ansible-awx-webinar
+/march-suse-rancher-webinar
+/kubernetes-in-the-5g-network-webinar
+/kubernetes-5g-webinar
+/july-sles-webinar
+/jason
+/instructor-application-1
+/hutch
+/home
+/free-course-trials-thank-you
+/events-list?category=Webinar
+/events-1
+/draftpagedonotlink
+/downloads/
+/downloads
+/demo
+/courses/volte
+/courses/sip
+/courses/ims
+/courses-accordian
+/courses/5g
+/course-not-available
+/contact/
+/cloud-training-
+/cloud
+/cisco-training
+/certification-python-201
+/certification-pyna-202
+/certification-pyb
+/certification/cf1f998c-92e7-437f-a1dd-80fb1e70ee87.pdf
+/certificates
+/blog/tag/youtube
+/blog/tag/windows%20subsystem
+/blog/tag/windows
+/blog/tag/webinar
+/blog/tag/vm
+/blog/tag/virtual%20machines
+/blog/tag/virtual%20machine
+/blog/tag/virtualbox
+/blog/tag/virtual%20box
+/blog/tag/vim
+/blog/tag/versions
+/blog/tag/vcs
+/blog/tag/ubuntu
+/blog/tag/tutorial
+/blog/tag/show
+/blog/tag/roles
+/blog/tag/Restful%20API
+/blog/tag/requests
+/blog/tag/python%20training
+/blog/tag/python%20programming
+/blog/tag/python
+/blog/tag/#python
+/blog/tag/#programmng
+/blog/tag/private%20key
+/blog/tag/powershell
+/blog/tag/playlist
+/blog/tag/playbooks
+/blog/tag/online%20ansible%20training
+/blog/tag/Network%20Objects
+/blog/tag/nasa
+/blog/tag/linux%20tutorial
+/blog/tag/kubernetes%20tutorial
+/blog/tag/kubernetes%20training
+/blog/tag/kubernetes%20cluster
+/blog/tag/keygen
+/blog/tag/key%20gen
+/blog/tag/k8s
+/blog/tag/jinja2
+/blog/tag/installing%20kubernetes
+/blog/tag/Init
+/blog/tag/InfoBlox
+/blog/tag/id_rsa.pub
+/blog/tag/id_rsa
+/blog/tag/icmp
+/blog/tag/http
+/blog/tag/html
+/blog/tag/github%20keys
+/blog/tag/dsnmasq
+/blog/tag/curl
+/blog/tag/back-up
+/blog/tag/automation
+/blog/tag/api%20design
+/blog/tag/api
+/blog/tag/Ansible%20Tutorial
+/blog/tag/ansible%20tutorial
+/blog/tag/ansible%20training
+/blog/tag/ansible%20template%20module
+/blog/tag/ansible%20template
+/blog/tag/ansible%20inventory
+/blog/tag/ansible%20hosts
+/blog/tag/ansible%20eos%20banner
+/blog/tag/ansible%20certification
+/blog/diagnosing-a-slow-network
+/blog/category/youtube
+/blog/category/videos
+/blog/ansible-template-tutorial
+/blog/adding-spell-checking-as-a-github-action/1000
+/blog/2017-04-10-reset-a-forgotten-openstack-password
+/blog/2017-03-24-physically-wiring-an-openstack-node
+/blog/
+/alta3-research-course-training
+/alta3-research-course-portfolio
+/about-us
+/404
alta3/moved/source/redirects.yaml
@@ -0,0 +1,105 @@
+redirects:
+ - old: "https://alta3.com/blog/8-steps-to-k8s-cluster"
+ new: "8-steps-to-k8s-cluster"
+ - old: "https://alta3.com/blog/README"
+ new: "README"
+ - old: "https://alta3.com/blog/adding-spell-checking-as-a-github-action"
+ new: "adding-spell-checking-as-a-github-action"
+ - old: "https://alta3.com/blog/ansible+switch+config+archive"
+ new: "ansible+switch+config+archive"
+ - old: "https://alta3.com/blog/ansible+switch+configuration"
+ new: "ansible+switch+configuration"
+ - old: "https://alta3.com/blog/ansible-and-infoblox"
+ new: "ansible-and-infoblox"
+ - old: "https://alta3.com/blog/ansible-basics-tutorial"
+ new: "ansible-basics-tutorial"
+ - old: "https://alta3.com/blog/ansible-is-for-everyone"
+ new: "ansible-is-for-everyone"
+ - old: "https://alta3.com/blog/ansible-template-tutorial"
+ new: "ansible-template-tutorial"
+ - old: "https://alta3.com/blog/ansible-templates"
+ new: "ansible-templates"
+ - old: "https://alta3.com/blog/ansible-vault-hello-world"
+ new: "ansible-vault-hello-world"
+ - old: "https://alta3.com/blog/api-requests-with-python"
+ new: "api-requests-with-python"
+ - old: "https://alta3.com/blog/back-up-your-organizations-github"
+ new: "back-up-your-organizations-github"
+ - old: "https://alta3.com/blog/converting-html-to-markdown"
+ new: "converting-html-to-markdown"
+ - old: "https://alta3.com/blog/create-pipeline"
+ new: "create-pipeline"
+ - old: "https://alta3.com/blog/creating-flask-server"
+ new: "creating-flask-server"
+ - old: "https://alta3.com/blog/crushckad"
+ new: "crushckad"
+ - old: "https://alta3.com/blog/diagnosing-a-slow-network"
+ new: "diagnosing-a-slow-network"
+ - old: "https://alta3.com/blog/error-invalid-value-apiall-on-kube-apiserver"
+ new: "error-invalid-value-apiall-on-kube-apiserver"
+ - old: "https://alta3.com/blog/fastapi"
+ new: "fastapi"
+ - old: "https://alta3.com/blog/getting-keyed-up"
+ new: "getting-keyed-up"
+ - old: "https://alta3.com/blog/go-programming-print"
+ new: "go-programming-print"
+ - old: "https://alta3.com/blog/gos-approach-to-arrays-and-slices"
+ new: "gos-approach-to-arrays-and-slices"
+ - old: "https://alta3.com/blog/how-to-create-a-virtual-machine"
+ new: "how-to-create-a-virtual-machine"
+ - old: "https://alta3.com/blog/how-to-install-terraform-infrastructure-as-code-tool"
+ new: "how-to-install-terraform-infrastructure-as-code-tool"
+ - old: "https://alta3.com/blog/install-python-and-ansible"
+ new: "install-python-and-ansible"
+ - old: "https://alta3.com/blog/install-windows-terminal"
+ new: "install-windows-terminal"
+ - old: "https://alta3.com/blog/installing+virtualbox"
+ new: "installing+virtualbox"
+ - old: "https://alta3.com/blog/installing-windows-subsystem-for-linux-2-wsl2"
+ new: "installing-windows-subsystem-for-linux-2-wsl2"
+ - old: "https://alta3.com/blog/introduction-to-kubernetes"
+ new: "introduction-to-kubernetes"
+ - old: "https://alta3.com/blog/jinja-templates"
+ new: "jinja-templates"
+ - old: "https://alta3.com/blog/launch-cloud-init-configured-vms"
+ new: "launch-cloud-init-configured-vms"
+ - old: "https://alta3.com/blog/magic-the-gathering-api"
+ new: "magic-the-gathering-api"
+ - old: "https://alta3.com/blog/managing-github-issue-labels-across-organizations-and-repositories"
+ new: "managing-github-issue-labels-across-organizations-and-repositories"
+ - old: "https://alta3.com/blog/minus-28-bytes-later"
+ new: "minus-28-bytes-later"
+ - old: "https://alta3.com/blog/moving-active-k8s-cluster-on-qemu-vm"
+ new: "moving-active-k8s-cluster-on-qemu-vm"
+ - old: "https://alta3.com/blog/python-and-apis-nasas-open-apis"
+ new: "python-and-apis-nasas-open-apis"
+ - old: "https://alta3.com/blog/python-and-the-magic-wormhole-project"
+ new: "python-and-the-magic-wormhole-project"
+ - old: "https://alta3.com/blog/python-apis-part2"
+ new: "python-apis-part2"
+ - old: "https://alta3.com/blog/python-tutorial-using-python-to-interact-with-excel"
+ new: "python-tutorial-using-python-to-interact-with-excel"
+ - old: "https://alta3.com/blog/python-versions-python2-vs-python3"
+ new: "python-versions-python2-vs-python3"
+ - old: "https://alta3.com/blog/pythonapi-part1"
+ new: "pythonapi-part1"
+ - old: "https://alta3.com/blog/redirect.sh"
+ new: "redirect.sh"
+ - old: "https://alta3.com/blog/restore-backed-up-files-using-ansible"
+ new: "restore-backed-up-files-using-ansible"
+ - old: "https://alta3.com/blog/securingdnsmasq"
+ new: "securingdnsmasq"
+ - old: "https://alta3.com/blog/singlevmk8s"
+ new: "singlevmk8s"
+ - old: "https://alta3.com/blog/throttling-ansibles-localaction-module"
+ new: "throttling-ansibles-localaction-module"
+ - old: "https://alta3.com/blog/tune-your-dot-files"
+ new: "tune-your-dot-files"
+ - old: "https://alta3.com/blog/ubuntu-1804-preseed-installation"
+ new: "ubuntu-1804-preseed-installation"
+ - old: "https://alta3.com/blog/unlocking-your-vim-screen"
+ new: "unlocking-your-vim-screen"
+ - old: "https://alta3.com/blog/vim-introduction-getting-started-with-vim"
+ new: "vim-introduction-getting-started-with-vim"
+ - old: "https://alta3.com/blog/vimcolorscheme"
+ new: "vimcolorscheme"
alta3/moved/source/sitemap.xml
@@ -0,0 +1,5508 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9" xmlns:image="http://www.google.com/schemas/sitemap-image/1.1" xmlns:xhtml="http://www.w3.org/1999/xhtml">
+ <url>
+ <loc>https://alta3.com/blog</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-21</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/singlevmk8s</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/introduction-to-kubernetes</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/python-tutorial-using-python-to-interact-with-excel</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/python-versions-python2-vs-python3</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/python-and-apis-nasas-open-apis</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/error-invalid-value-apiall-on-kube-apiserver</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/converting-html-to-markdown</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/-28-bytes-later</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/unlocking-your-vim-screen</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/diagnosing-a-slow-network</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ubuntu-1804-preseed-installation</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-29</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/throttling-ansibles-localaction-module</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/managing-github-issue-labels-across-organizations-and-repositories</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/back-up-your-organizations-github</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/passing-the-ckad</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-16</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/how-to-create-a-virtual-machine</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/restore-backed-up-files-using-ansible</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-vault-hello-world</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/moving-active-k8s-cluster-on-qemu-vm</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/crushckad</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/vimcolorscheme</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/securingdnsmasq</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/python-and-the-magic-wormhole-project</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-basics-tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-template-tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-eos-banner-tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-switch-configuration-archive-tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/pythonapi-part1</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-02-09</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/python-apis-part2</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/8-steps-to-k8s-cluster</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-and-infoblox</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/install-python-and-ansible</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/installing-windows-subsystem-for-linux-2-wsl2</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-templates</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/install-windows-terminal</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-08</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/install-virtualbox</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/launch-cloud-init-configured-vms</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/getting-keyed-up</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tune-your-dot-files</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-16</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/vim-introduction-getting-started-with-vim</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/creating-flask-server</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-05</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/adding-spell-checking-as-a-github-action</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-11</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/ansible-is-for-everyone</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-21</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/installing-ansible</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-09</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/api-requests-with-python</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/jinja-templates</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-23</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/fastapi</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-17</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/go-programming-print</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-16</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/gos-approach-to-arrays-and-slices</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-06-14</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/how-to-install-terraform-infrastructure-as-code-tool</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-08-03</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/magic-the-gathering-api</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-21</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/category/youtube</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/category/how-to</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/category/videos</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/category/blog</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/kubernetes</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/curl</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/kubernetes+cluster</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+hosts</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Restful+API</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/networking</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/python+tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/kubernetes+training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/icmp</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/back-up</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/kubernetes+tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/online+ansible+training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Ansible+Tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Init</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/automation</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/dev</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/vm%27s</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/wsl2</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/powershell</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/github+keys</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/html</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/api</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/vim</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+certification</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Ansible+Training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/programming</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/webinar</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/python</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/github</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/linux+tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ubuntu</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ckad</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/python+training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/iperf</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/private+key</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/mtu</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/jinja2</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/id_rsa.pub</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/virtual+machine</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/versions</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/vm</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/virtual+machines</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Ansible</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/http</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/youtube</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/key+gen</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/id_rsa</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/roles</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/%23python</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/show</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+template</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+switch+config+archive</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/playbooks</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/requests</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/InfoBlox</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/keygen</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+inventory</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/online+python+training</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/playlist</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/mtu+testing</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/api+design</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/virtualbox</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Ansible+Playbook</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Network+Objects</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/installing+virtualbox</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/linux</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/markdown</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/tutorial</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/dsnmasq</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/python+programming</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/installing+kubernetes</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/api+design+with+python</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/k8s</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/vcs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/Writing+API%27s+with+Python</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/windows</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+template+module</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/practices</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/nasa</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/%23programmng</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+eos+banner</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/virtual+box</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/windows+subsystem</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/blog/tag/ansible+switch+configuration</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ </url>
+ <url>
+ <loc>https://alta3.com/contact</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-08-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/events-online-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-5g</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-03-08</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/classroom-live</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-01-24</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/zach</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-09-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579919375275-FFP3M7VINPTKTYQEQXR0/zach.jpg</image:loc>
+ <image:title>Zach</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/chad</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-09-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579920415907-7VOFXF7GIOU4UQIS3UPD/chad.jpg</image:loc>
+ <image:title>Chad</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/stu</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-08-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579920770939-SGC3LNA5MTN8KDOAA349/stu.jpg</image:loc>
+ <image:title>Stu</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-kubernetes-ckad</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview Kubernetes CKAD</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Kubernetes CKAD</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Kubernetes CKAD</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-kubernetes-ckad</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-15</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-sip</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-01-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview SIP</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview SIP</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview SIP</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview SIP - โStu was wonderful. One of the best trainer I have experienced for a while. Stu Definitely knows Sip than anyone I dealt with before. Definitely recommend this course to anyone!โ</image:title>
+ <image:caption>โ Student, 2/2021 SIP Class</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-sip</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-15</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-volte</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview VoLTE</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview VoLTE</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-volte</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-03-29</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/course-not-available</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-01-26</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-openstack-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615901609393-5DVW83EL6ZD54LQL7BBV/image2.png</image:loc>
+ <image:title>Overview Openstack Training - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Openstack Training - โThis OpenStack Course surpassed any other training I have attended.โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (Jan. 2020)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-openstack-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-04-25</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-03-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Ansible-101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Ansible-101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview Ansible-101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Ansible-101 - โZach did an amazing job going through the course. It was easy to follow and the lab work was nicely organized. He also took additional effort to add adhoc labs which related closely to our work. This really helped us to better understand the material and how to use the technology. And the Nasa example for cool!!!โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (3/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-ansible-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-01-31</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-mastering-ansible-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ipsec-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-12-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview IPSec Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview IPSec Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview IPSec Training - โThe instructor's depth of knowledge and willingness to make sure that all students grasped the material was excellent.โ</image:title>
+ <image:caption>โ Student (2019)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-ipsec-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-04-25</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-sdn-trainingnopvc</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-07-20</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-sdn-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-04-25</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-automation-python-ansible-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1682362016432-DN8SQEIAR7U3M17G2TS1/unsplash-image-4-EeTnaC1S4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Network Automation with Python/Ansible - โI served in the USMC for over 7 years and all I can say about Chad Feeser, is WOW! His ability to solve problems quickly and explain problems or topics thoroughly was simply amazing!โ</image:title>
+ <image:caption>โ Student, April 2020</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-network-automation-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-python-basics-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Python 101</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 101 - โInstructor was amazing and the interactive labs were great. It's quite a talent to be able to make learning a programming language so interesting, and more importantly, I think I'll be able to apply the knowledge to solve work problems using Python..โ</image:title>
+ <image:caption>โ Gobal 50 Student (3/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-python-basics-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-api-python-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Python 201 - API</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 201 - API</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 201 - API - โFantastic course!! Great instructor, very knowledgeable, great communication skills, very clear explanations, enthusiastic, and very good course material. This was by far the best python course out of 2 others which I have taken.โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-api-python-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-python-network-automation</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 202 PYNA</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Python 202 PYNA</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1650547255004-EI7A5NEZMZ1UHRACZEZ9/unsplash-image-4-EeTnaC1S4.jpg</image:loc>
+ <image:title>Overview Python 202 PYNA - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>Overview Python 202 PYNA - โCompared to past classes for network automation, this one was superior by far.โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2020)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-python-automation-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/posters</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/52eb6dd6-383a-4cfe-b653-0939cbff58ee/Alta3-Research_Ansible-Poster1.png</image:loc>
+ <image:title>Posters and Cheat Sheets - Avaya Aura</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/04955c91-bb2b-4aab-a550-1bae0bf0ff26/Alta3-Research_TMUX-Poster2.png</image:loc>
+ <image:title>Posters and Cheat Sheets</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/36eb072c-a876-4f48-9ed8-52faa65aacaa/Alta3-Research_Kubernetes-Poster.png</image:loc>
+ <image:title>Posters and Cheat Sheets - SIP</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/ff8e325e-c8eb-4e6c-a6bd-a7ffa9b0109f/Alta3-Research_Git-Cheat-Sheet2.png</image:loc>
+ <image:title>Posters and Cheat Sheets - VoLTE</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/cb212499-e244-407f-8d6f-09bfd78fbfe9/Alta3-Research_Terraform-Cheat-Sheet3.png</image:loc>
+ <image:title>Posters and Cheat Sheets</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/0063b3d2-19b6-4ee0-910c-baddf44789f1/linux+poster.png</image:loc>
+ <image:title>Posters and Cheat Sheets - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580400853352-3BIP9BH7VX3FO1QGXGON/yaml.jpg</image:loc>
+ <image:title>Posters and Cheat Sheets - Ansible</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580401565633-1UL1XTIK478EPSCDES1W/regex.jpg</image:loc>
+ <image:title>Posters and Cheat Sheets</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580401910890-9K1P64CDMSIOXJ8KJ2B9/python3-pkg.jpg</image:loc>
+ <image:title>Posters and Cheat Sheets - OpenStack</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579112128809-F6NKLQR1EWCBZIB4ZAOV/python3.png</image:loc>
+ <image:title>Posters and Cheat Sheets - Kubernetes</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579112313415-D860DZ8ZBEMSJ7B98MFQ/sip.png</image:loc>
+ <image:title>Posters and Cheat Sheets</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1594211047104-WN05GUESCYYX9WYS6O6E/5G+Acronyms.png</image:loc>
+ <image:title>Posters and Cheat Sheets</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/e121ad8b-d239-486f-8f25-9a43395dbcdd/Alta3-Research_VIM-Poster2.png</image:loc>
+ <image:title>Posters and Cheat Sheets - RHEL</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/certificates</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-02-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1581118225011-4GDAOX097SY3FYP03Q4K/istockphoto-866525434-612x612.jpg</image:loc>
+ <image:title>Certificates</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/404</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-02-19</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/sean</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-03-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1584468461528-1M4LLQERZA5S2K9NMUEC/Sean%27s+Pic.jpg</image:loc>
+ <image:title>Sean</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/draftpagedonotlink</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2020-04-21</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-cka-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1658345790650-0BB50X4230REE26LH9N9/unsplash-image-4-EeTnaC1S4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-certified-kubernetes-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-jenkins-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-08-30</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>overview-jenkins-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-jenkins-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-jenkins-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-jenkins-training - โZach is one of the best instructors I've had in over 25+ years as a tech professional. This is my second class with him and he did not disappoint!!</image:title>
+ <image:caption>โ Student (4/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-jenkins-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-15</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-microservices-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview - microservices - training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview - microservices - training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>overview - microservices - training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-microservices-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-02-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-102</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1675202725538-39RR26FIG6WRJ4X83FOX/unsplash-image-gMsnXqILjp4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overviewpython-training-data-sciences</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-python-data-sciences-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-5g</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-12-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1658341750929-1GBP5ZVV4FJHNZ5Q7LVF/unsplash-image-4-EeTnaC1S4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/cloud-devops-tutorials</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-05-24</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overviewansible-for-dbas</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615407313053-WCWS0CPHUYQYG0LBSQBR/unsplash-image-gMsnXqILjp4.jpg</image:loc>
+ <image:title>overview-Python 205 - DBA</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-Python 205 - DBA - โIt was good experience learning Python & Ansible with trainer who has complete knowledge about the subject and it was interactive throughout the sessions!โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/on-demand-courses</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/17c2940a-6b84-4e04-af72-f4fe4e08daf5/Network+Automation+with+Python+And+Ansible.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/da1876eb-83d4-43db-841a-7ea0e7cc5a5a/SIP+SP+Thumbnail.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619225440072-GS5DZUV4SEY9MKPOKFEP/Python+Basics+Course+Thumbnail.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1605042011549-JZI8GUOZR2P4RM6PBC6M/ckad-tutorial-crush_sq.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/8c518792-61c0-4bfa-9bc0-eab54b0263a9/SDN_NFV+SP+Thumbnail.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/6bef66db-e6c7-443e-9fe0-52859bc1e5aa/PYNA+OD.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619228937295-F81ZSXZYSUBBSGHCY9IG/Ansible+Essentials+SP+Thumbnail.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1c05fcc7-bde5-4c35-8ec2-4d32299dc097/API+SP.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/93c8375c-1ecc-44a1-ab47-788c17a99fe2/IP-SEC+SP.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/7a1ab51f-e403-4937-afbf-f7437f3adc99/Self-Paced+Terraform+Training.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/37449bce-6d26-48ff-ba74-49ea5fd1acef/Certified+Kubernetes+Administrator+-+CKA.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615560135251-JEFI9VXCC38R9SKCVTTL/5G+Essentials+On-Demand+Thumbnail.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c6ae2452-d721-4c4a-8852-1d62dffa8bc6/Kubernetes+Bootcamp.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/94f8eea4-f6ce-421e-8b13-ad1372189566/VoLTE+SP+Thumbnail.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/careers</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-01-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615903052970-QZ882PV7TT1W44PUBW7M/cropped.jpeg</image:loc>
+ <image:title>Careers</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615901609393-5DVW83EL6ZD54LQL7BBV/image2.png</image:loc>
+ <image:title>Careers</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615902165138-BSCKM05RPS89VYOEA5LV/dsc_3787.jpg</image:loc>
+ <image:title>Careers</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/about</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f27513e3-e323-4ec6-ad6c-bb32ff199c83/Rob+copy+-+cropped.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/42788ac5-46ec-430a-ade1-8963254d4584/Joe.png</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1578402528876-I64M7FL9XTBK5UKXPO8H/Zach%27s+Pic.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/75ee3936-f082-4818-8cd1-c7a90ea77139/Jason+%282%29.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/2f4c8aa2-d1a3-42a9-b6d2-02ca8f1b59f3/Tim-warmer.jpg</image:loc>
+ <image:title>About - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1578402515976-3GKPCQ4GFTOC8KBQTQ1P/Chad%27s+Pic.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1584468461528-1M4LLQERZA5S2K9NMUEC/Sean%27s+Pic.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579920606902-BW3ASTSZQ3QWMT6XKVE1/dsc_3587-2.jpg</image:loc>
+ <image:title>About - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1bda8a8f-984f-4cdb-8383-592a36506115/Paul-scaled.jpg</image:loc>
+ <image:title>About</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/instructor-application</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-11-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/subscription-services</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-04-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/d7cf0d60-a33d-4440-9291-f6bcacb9e1fa/COA+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619275310693-5QI5IUOAMX33A6Y01JB8/Red+Hat+System+Administrator.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619228937295-F81ZSXZYSUBBSGHCY9IG/Ansible+Essentials+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/94f8eea4-f6ce-421e-8b13-ad1372189566/VoLTE+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615560135251-JEFI9VXCC38R9SKCVTTL/5G+Essentials+On-Demand+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/8c518792-61c0-4bfa-9bc0-eab54b0263a9/SDN_NFV+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/68c5218e-9573-496f-9bfc-dd080db5ba2f/Kubernetes+Bootcamp+SP+.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619225440072-GS5DZUV4SEY9MKPOKFEP/Python+Basics+Course+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/da1876eb-83d4-43db-841a-7ea0e7cc5a5a/SIP+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/93c8375c-1ecc-44a1-ab47-788c17a99fe2/IP-SEC+SP.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619229578041-599P5Q1RC2JWGNVZHKV1/5G+Essentials+On-Demand+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ <image:caption>5G Essentials</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619225440072-GS5DZUV4SEY9MKPOKFEP/Python+Basics+Course+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ <image:caption />
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/68c5218e-9573-496f-9bfc-dd080db5ba2f/Kubernetes+Bootcamp+SP+.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619228937295-F81ZSXZYSUBBSGHCY9IG/Ansible+Essentials+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/45bce388-d625-46dd-b903-bc1e119818e9/Red+Hat+System+Administrator.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/8c518792-61c0-4bfa-9bc0-eab54b0263a9/SDN_NFV+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/da1876eb-83d4-43db-841a-7ea0e7cc5a5a/SIP+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/94f8eea4-f6ce-421e-8b13-ad1372189566/VoLTE+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/d7cf0d60-a33d-4440-9291-f6bcacb9e1fa/COA+SP+Thumbnail.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/93c8375c-1ecc-44a1-ab47-788c17a99fe2/IP-SEC+SP.png</image:loc>
+ <image:title>Subscription Services</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/suse-linux-rancher-k8s</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-10</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/e3811e5e-2657-47b4-99c7-e650ba182572/Emerald+Train.jpg</image:loc>
+ <image:title>SUSE Rancher, K8s - SUSE Rancher, NeuVector & Kubernetes Courses</image:title>
+ <image:caption>Our January Classes are 24% off - Use Discount Code SUSE2024 at Checkout!</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-rancher-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/67209812-7316-4e8b-aa86-09f25ac0ee28/Emerald+Train.png</image:loc>
+ <image:title>overview-rancher-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-rancher-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-rancher-training</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-sdn-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-09-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>overview-sdn-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-sdn-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-sdn-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-sdn-training - โReally enjoyed the lab environment and how the content and lab consoles were on the same web browser screen. Made it much easier to perform the lab.โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (1/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/july-sles-webinar</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-06-23</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624478803986-MPQMMQDHD5ZTRHLM9FWL/SUSE_Logo-hor_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>July SLES Webinar - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-slesv201v15-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624843235893-THMH6PCOYS9UNC2QT2O0/SUSE_Logo-vert_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>Store SLES201v15 Training - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-sles-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-06-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624479920040-VMYD50WHLRRP352PRDPS/ProgramMarks_Gold+TRAIN_Partner+%282%29.png</image:loc>
+ <image:title>overview-SLES-Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-SLES-Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-SLES-Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-SLES-Training - โStuart Feeser is an outstanding teacher, and the class was set up great. The lab work was nicely organized..โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-suse-k8s</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/67209812-7316-4e8b-aa86-09f25ac0ee28/Emerald+Train.png</image:loc>
+ <image:title>overview-SUSE-k8s</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-SUSE-k8s</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-SUSE-k8s</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-SUSE-k8s - โStuart Feeser is an outstanding teacher, and the class was set up great. The lab work was nicely organized..โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-rancher-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624843235893-THMH6PCOYS9UNC2QT2O0/SUSE_Logo-vert_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>store-rancher-training - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-suse-k8s-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624843235893-THMH6PCOYS9UNC2QT2O0/SUSE_Logo-vert_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>store-SUSE-k8s-training - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/kubernetes-in-the-5g-network-webinar</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f9969e63-2200-4ae3-879b-2a9a5abf9c36/Picture2.jpg</image:loc>
+ <image:title>Kubernetes in the 5G Network - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/cloud-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579126361200-RFPT0FBSL2ZARZONM3AX/k8s.PNG</image:loc>
+ <image:title>Cloud/Devops-training</image:title>
+ <image:caption>Kubernetes Cheat Sheet</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580401454802-373DSPEBGWPBIR04JQIM/ansible.jpg</image:loc>
+ <image:title>Cloud/Devops-training</image:title>
+ <image:caption>Ansible Cheat Sheet</image:caption>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Cloud/Devops-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Cloud/Devops-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Cloud/Devops-training</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/programming-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-03</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579126743548-78KJOA1NEPLG0G3ZYWUB/python3-pkg.PNG</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Programming</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/telecom-courses</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-11-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579112313415-D860DZ8ZBEMSJ7B98MFQ/sip.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Telecom/Networking</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-golang-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938869270-95JFU0YPSRRE8XU4TFGM/golang+icon.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/storegolangtraining</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-07-29</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overviewsdwantraining</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-12-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-sd-wan-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-sd-wan-training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-sd-wan-training - โReally enjoyed the lab environment and how the content and lab consoles were on the same web browser screen. Made it much easier to perform the lab.โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (1/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-deploying5g</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-deploying5G - โStuart Feeser is an outstanding teacher, and the class was set up great. The lab work was nicely organized..โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (2/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-gitlab-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-02</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-gitlab-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-10-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-circleci-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-02</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/storecirclecitraining</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-10-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/kubernetes-5g-webinar</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f9969e63-2200-4ae3-879b-2a9a5abf9c36/Picture2.jpg</image:loc>
+ <image:title>5G Webinar Access - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/rob</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-07-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f27513e3-e323-4ec6-ad6c-bb32ff199c83/Rob+copy+-+cropped.jpg</image:loc>
+ <image:title>Rob</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/jason</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/75ee3936-f082-4818-8cd1-c7a90ea77139/Jason+%282%29.jpg</image:loc>
+ <image:title>Jason</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-linux-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-Linux-Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-Linux-Training</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-Linux-Training - โThe lectures and labs are great and easy to understand!โ</image:title>
+ <image:caption>โ Linux Student 1/2022</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-linux-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-02-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/march-suse-rancher-webinar</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-02-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624478803986-MPQMMQDHD5ZTRHLM9FWL/SUSE_Logo-hor_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>March SUSE Rancher Webinar - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/sales-application</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-11-20</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-terraform</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>overview - Terraform</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview - Terraform</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview - Terraform</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/may-ansible-awx-webinar</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-05-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1617991294401-5GADUHR4356TRMMW2LVR/alta3-desktop2.png</image:loc>
+ <image:title>An Exploration of Ansible AWX - Webinar - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/free-course-trials</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-08-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f39f5a3f-2faa-47bb-93da-6123ecb298f1/image-asset.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/free-course-trials-thank-you</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-08-02</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/tim</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f83f3934-e405-4bd5-8483-134d733931d0/Tim-warmer.jpg</image:loc>
+ <image:title>Tim</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-terraform-special</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-09-21</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520929392-2Z7W3S2Y2VHVO38ME3E4/terraform.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/alta3-logo</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2022-09-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/64c57dda-5107-49f5-9a08-62c4cc6461b8/white+logo+with+drop+shadow.png</image:loc>
+ <image:title>Alta3 Logo</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/865fd659-acab-4046-97b8-76f4d83abb00/alta3-research-logo.jpg</image:loc>
+ <image:title>Alta3 Logo</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-packer</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/testimonials</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-05-05</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/terms-and-conditions</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-05-23</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/hutch</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/fb9f4755-7ff2-4b48-8aec-1b61a04a6fee/Joe.png</image:loc>
+ <image:title>Hutch</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/paul</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1bda8a8f-984f-4cdb-8383-592a36506115/Paul-scaled.jpg</image:loc>
+ <image:title>Paul</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/ansible-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580401454802-373DSPEBGWPBIR04JQIM/ansible.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Ansible Series</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-202</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>Overview Ansible 202</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>Overview Ansible 202</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>Overview Ansible 202</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-203</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1675204792819-YOK709TT3O9NK4GS3DWY/unsplash-image-gMsnXqILjp4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-302</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-django</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/384d0981-b2aa-4269-993f-911d9ed248b1/django+.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-django</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/kubernetes</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579126361200-RFPT0FBSL2ZARZONM3AX/k8s.PNG</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Kubernetes Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Kubernetes Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Kubernetes Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Kubernetes Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Kubernetes Courses</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-cks</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627410733464-GQGN06SR3QZO4CS6U1RU/kubernetes+training+log.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1658345790650-0BB50X4230REE26LH9N9/unsplash-image-4-EeTnaC1S4.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-cks</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-01</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-suse-neuvector</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-23</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/67209812-7316-4e8b-aa86-09f25ac0ee28/Emerald+Train.png</image:loc>
+ <image:title>overview-SUSE-NeuVector</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-SUSE-NeuVector</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-SUSE-NeuVector</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-neuvector</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-02-20</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624843235893-THMH6PCOYS9UNC2QT2O0/SUSE_Logo-vert_L_Green-pos_sRGB.jpg</image:loc>
+ <image:title>store-neuvector-training - Make it stand out</image:title>
+ <image:caption>Whatever it is, the way you tell your story online can make all the difference.</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/alta3-research-course-portfolio</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/0860d8fa-a5be-41e3-9618-7a9e9dbbe249/Battlecard.png</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/a7804160-b63e-4f36-a534-32250f9afe3b/DevOps-AI+Training.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/certification-pyb</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/certification-pyna-202</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/certification-python-201</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-04-17</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-crush-the-ckad</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-05-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627410733464-GQGN06SR3QZO4CS6U1RU/kubernetes+training+log.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-github-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-02</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/ai-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>AI Courses</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-opensource-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1689274748752-MLNRNMYBVLOPB9YEVDIA/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1689274830981-WP4VVJMDTOK7ANLAWZFT/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-zerocodechatbots</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-zerocode-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-14</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-python-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-golang-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-java-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-zerocodechatbots-chatgpt</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-zerocodechatbots-watson</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-06-12</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/training-courses</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1686681589868-0G7FIYEXA6ZFIUZAR413/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/home</loc>
+ <changefreq>daily</changefreq>
+ <priority>1.0</priority>
+ <lastmod>2024-02-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520929392-2Z7W3S2Y2VHVO38ME3E4/terraform.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492974305-XNQ3647CPUGG5PVT8VMM/Python+Basics+Training+Logo.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628016628205-JIP6QTACI8468EOR2XUC/microservices+training+logo.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615561542101-R8GO9I76G7W86REJ92R5/5G+Training+Logo.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627410733464-GQGN06SR3QZO4CS6U1RU/kubernetes+training+log.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622670181-NJNMKWX40KKX2YZFLDWO/sip-logo.png</image:loc>
+ <image:title>Home</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-natural-language-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-nlp-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/devops</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1689006169837-92D6TLB66GIE0FLLCZNJ/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1689018323120-0UWXH46II5I2AIA93OTZ/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-ai-bard</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-10</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ai-chat-bard</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-10</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/training-courses-2</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1686681589868-0G7FIYEXA6ZFIUZAR413/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-os-generative-ai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-13</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ansible-1</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ <image:title>overview-ansible-101 (Copy)</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ <image:title>overview-ansible-101 (Copy)</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231093773-9PO941T8C270NUXPXXB7/image-asset.jpeg</image:loc>
+ <image:title>overview-ansible-101 (Copy)</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ <image:title>overview-ansible-101 (Copy) - โZach did an amazing job going through the course. It was easy to follow and the lab work was nicely organized. He also took additional effort to add adhoc labs which related closely to our work. This really helped us to better understand the material and how to use the technology. And the Nasa example for cool!!!โ</image:title>
+ <image:caption>โ โGlobal 50โ Student (3/2021)</image:caption>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-opensource-ai-dell</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-18</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-devsecops</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-07-26</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-terraform</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-08-14</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-tcp-ip</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-prompt-engineering</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579231180890-A460ZAIAU2700P6M1L5U/image-asset.jpeg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579230687296-NM0NHYHBCJ5SYJM3DA82/20140301_Trade-151_0124-copy.jpg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store-prompt-engineering</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-08-24</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/alta3-research-course-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-09-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/f6eeca57-9836-49ad-a84b-8fb7b5932568/Page+2.jpg</image:loc>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/7c0f30a9-f0fc-4efc-807a-0b2f63f5a57e/DevOps-AI+Training.png</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-docker101</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-docker-1</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1579228798748-5NUEC2G786OK5X6I9Q09/image-asset.jpeg</image:loc>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/docker-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-10-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Docker</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/instructor-application-1</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2023-11-15</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-python-ai-1</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-14</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/cisco-training</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694583486-2PQT0LQ193RL7MCB6DX4/20140228_Trade+151_0046.jpg</image:loc>
+ <image:title>Cisco</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Cisco</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1607694644871-IC85FNH781UNZSZEGHDR/Aro+Ha_0428.jpg</image:loc>
+ <image:title>Cisco</image:title>
+ </image:image>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5ec321c2af33de48734cc929/1618497259178-6XJGK9GR6YAVBQL5L519/20140301_Trade-151_012-2.jpg</image:loc>
+ <image:title>Cisco</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-c98wf6</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-19</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-dcucai</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-19</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-intucsx</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-19</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-idswots</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-01-19</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-ci/cd-pipelines</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-02-14</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-terraform-102</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-terraform-103-paloalto</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/overview-terraform-104-fortinet</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2024-04-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store</loc>
+ <changefreq>daily</changefreq>
+ <priority>0.75</priority>
+ <lastmod>2021-03-03</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/virtual</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/manual</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-03</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-11</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/online-live</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-self-paced-nov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-09</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible Essentials Online Live Class - Nov. 30 - Dec. 4th, 10:00 AM - 6:00 PM EST *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ipsec-self-paced-course</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580625634480-S10VERE5EPBNX9OSL1OV/ipsec-logo.png</image:loc>
+ <image:title>Store - IPSec Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626537386-BPQW66FPERK5QS7OR1BW/pyb-logo.png</image:loc>
+ <image:title>Store - Python 101 Basics Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/rhcsa-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580624701686-46Q2FJ2AU0T5OJFLXEAP/rhsa-logo.png</image:loc>
+ <image:title>Store - Red Hat System Administrator - Online Live - October 18 - 22, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/2z334d2ojyyeh9u04uhj2oa1wsfmg5</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1605124518098-IHVVLJ80AQFLN8R704MP/Ansible+Training+Logo.png</image:loc>
+ <image:title>Store - Ansible Essentials Self Paced</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622128133-SZTOC2J9323LPW761GBQ/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Application Developer - CKAD Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623021263-YXRGXGS76H3YQR9K3OQI/ans-logo.png</image:loc>
+ <image:title>Store - Ansible Essentials Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/red-hat-system-administrator-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580624724193-ZL6U99EQ959E32RXZ4VZ/rhsa-logo.png</image:loc>
+ <image:title>Store - Red Hat System Administrator Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622670181-NJNMKWX40KKX2YZFLDWO/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/volte-and-the-ims-self-paced-course</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623964222-3ULBETGVMDQJQCB7R73R/volte-logo.png</image:loc>
+ <image:title>Store - VoLTE and the IMS Self Paced</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-self-paced-course</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-12</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1615561542101-R8GO9I76G7W86REJ92R5/5G+Training+Logo.png</image:loc>
+ <image:title>Store - 5G Essentials Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-august27-28</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-09-02</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - August 27 - 28, *GTR, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-aug17</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-08-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live Class Aug. 17th, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sdnnfv-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580627564424-M102NWSCY00X657SWK2A/sdn-logo.png</image:loc>
+ <image:title>Store - SDN/NFV Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/big-data-on-aws-online-live-class-apr2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Big Data on AWS - Online Live - Apr 13-15, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/apis-and-api-design-with-python-june-1-5-jmz9w</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-08-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - APIs and API Design with Python Online Live- Monday - Friday, August 17 -21, *GTR, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-4-26-22</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - April 26-28, ***GTR***, 9:30 AM EST - 5:30 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-essentials-online-live-class-april2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials - Online Live -April 19-23, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-oct2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live Class - Oct. 12 - 16, * GTR 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/apis-and-api-design-with-python-nov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-30</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - APIs and API Design with Python - Nov. 16 - 20, 10:00 - 6:00 PM EST, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-dec2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-30</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Nov. 30 - Dec. 4, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-nov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - Python Basics Nov. 9 - 13, 10:00 AM - 6:00 PM EST, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sd-wan-online-live-class-oct-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628005745594-WJTMGUX65K7W8UOJABCR/sd-wan.png</image:loc>
+ <image:title>Store - SDN-NFV- SD-WAN, Online Live - Sept. 27- Oct. 1, 10:00 AM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-august31</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-09-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Aug. 31 - Sept. 4 *GTR, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-nov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - Nov. 5 -6, 10:00 AM - 6:00 PM EST, GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-essentials-online-live-class-dec2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials - Online Live - Dec. 7 - 11, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/volte-and-the-ims-onlinelivesept</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-09-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623964222-3ULBETGVMDQJQCB7R73R/volte-logo.png</image:loc>
+ <image:title>Store - VoLTE and the IMS - Online LIVE Class - Sept. 28 - Oct 2nd, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-manual</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-07-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1592505859096-YODI5LTQCJ8XHKAUI5YQ/ans-logo.png</image:loc>
+ <image:title>Store - Ansible Essentials - Book and Lab Manual - 2 book set</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-oct2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - October 12 - 16th, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/big-data-on-aws-online-live-class-dec8</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Big Data on AWS - Online Live - December 8 -10, 9:30 AM - 5:30 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-casp-april2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597697085591-0SFQXDRK99TAIOI6Y6R5/CASP%2B.png</image:loc>
+ <image:title>Store - CompTIA Advanced Security Practitioner+ (CASP+) - Online LIVE 4/25 - 4/29, 2022</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/big-data-on-aws-online-live-class-oct13</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Big Data on AWS - Online Live - Oct. 13 - 15, 9:30 AM - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-oct19</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live Class Oct. 19th, *GTR,9:30 AM - 5:30 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/certified-ethical-hacker-v10</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597870104640-6G7HQ4D7WG8CFP9ZSWOJ/CEH.png</image:loc>
+ <image:title>Store - Certified Ethical Hacker v11, Online Live, Nov. 30 - Dec. 4th, 8:00 AM - 4:00 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-apr2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-04-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, April 18 - 22, 8:00 AM - 4:00 PM CST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-casp-sept21</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597697085591-0SFQXDRK99TAIOI6Y6R5/CASP%2B.png</image:loc>
+ <image:title>Store - CompTIA Advanced Security Practitioner+ (CASP+) - Online LIVE -September 13-17, 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-network-online-live-nightclassaugust</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948807280-4LDW5S5GEQCHOIX2NGEK/Net%2B.png</image:loc>
+ <image:title>Store - CompTIA Network+, Online Live, Evening Class: Week 1: 8/31 -9/3, Week 2 9/7 - 9/10, 6:00 PM - 9:30 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-network-online-live-sept-28-oct-2-800-am-to-400-pm-est</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-10-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948916696-LJOWORFGDLE01JQOYXM7/Net%2B.png</image:loc>
+ <image:title>Store - CompTIA Network+, Online Live, Sept. 28 - Oct. 2, 8:00 AM to 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sdnnfv-online-live-class-oct2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-10-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580627564424-M102NWSCY00X657SWK2A/sdn-logo.png</image:loc>
+ <image:title>Store - SDN/NFV - Online Live - October 19 - 23, 10:00 AM to 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-nov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-11-30</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, Nov. 16-20, 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cissp-boot-camp-online-live-dec2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597872019842-5RIYY1MG8BOOVWGM80DF/CISSP.png</image:loc>
+ <image:title>Store - CISSP Boot Camp - Online Live - 12/13 - 12/17, 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-feb2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live Class - Feb. 8- 12, 10:00 AM EST - 6:00 PM, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-self-paced-5fj6w</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-09-23</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622128133-SZTOC2J9323LPW761GBQ/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkinsnov2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2020-12-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class - Nov. 23-24, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-march-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, March 1-5 , 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/volte-online-training-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604336137931-NMS8CAE76X57X1SZ60QT/volte-logo.png</image:loc>
+ <image:title>Store - VoLTE and the IMS - Online Live - June 28 - July 2, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-1-27-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live Class - Jan. 25-27, 2021, 10:00 AM to 6:00 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - Jan. 18-22, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn-m25px</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597697085591-0SFQXDRK99TAIOI6Y6R5/CASP%2B.png</image:loc>
+ <image:title>Store - CompTIA Advanced Security Practitioner+ (CASP+) - Online LIVE, May 17-21, 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Jan. 18-22, 10:00 AM - 6:00 PM EST, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-network-online-live-nightclassaugust-5lgcw</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948807280-4LDW5S5GEQCHOIX2NGEK/Net%2B.png</image:loc>
+ <image:title>Store - CompTIA Network+, Online Live, Evening Class: Week 1: Jan. 4-8, Week 2: Jan, 11-15 6:00 PM - 9:30 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-02-01</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597697085591-0SFQXDRK99TAIOI6Y6R5/CASP%2B.png</image:loc>
+ <image:title>Store - CompTIA Advanced Security Practitioner+ (CASP+) - Online LIVE, Jan. 25-29, 8:00 AM - 4:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live Class, Jan. 11th, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-feb-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-02-10</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - API Design with Python - Online Live- Feb. 1-5, 10:00 AM - 6:00 PM EST, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Jan. 12-14 9:30 AM - 5:30 PM, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-jan-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class - Jan. 28-29, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cissp-boot-camp-online-live-nov2020-737ye</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597872019842-5RIYY1MG8BOOVWGM80DF/CISSP.png</image:loc>
+ <image:title>Store - CISSP Boot Camp - Online Live -Evenings - starts 6:00 PM EST - 9:30 PM, Begins Jan. 18</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/red-hat-system-administrator-online-live-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580624701686-46Q2FJ2AU0T5OJFLXEAP/rhsa-logo.png</image:loc>
+ <image:title>Store - Red Hat System Administrator - Online Live - Jan. 25-29, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-feb2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - Feb. 22 - 24, 10:00 - 6:00 PM EST *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-jan2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-01-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - Jan. 11-13, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-march2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live - March 22-24, 10:00 AM to 6:00 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkinsmay2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class - June 3-4, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-feb2021-bgrm8</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-05-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator- Online Live -May 3-7, 10:00 AM EST - 6:00 PM EST, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-march2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - March 8-12, 10:00 AM - 6:00 PM EST *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-april2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-05-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - April 26-28, 10:00 AM - 6:00 PM EST ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live -June 2 -4, 10:00 AM to 6:00 PM ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-self-paced-ans2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible Essentials Online Live Class - June 14-18, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-may2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - May 10-14, 10:00 AM - 6:00 PM EST, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/apis-and-api-design-with-python-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - APIs and API Design with Python Online Live- June 28-July 2, 10:00 AM - 6:00 PM EST ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - 8/23 - 27, 10:00 AM - 6:00 PM, EST, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/apis-and-api-design-with-python-april2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - APIs and API Design with Python Online Live- April 5-9, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-march-may-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, 5/24 - 5/28, 8:00 AM - 4:00 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-mar2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Mar 30 - Apr 01, *GTR, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-essentials-online-live-july2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-21</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials - Online Live -July 26-30, 10:00 - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - Oct. 4 - 8, 2021, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-nov2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - API Design with Python - Online Live- Nov. 29 - Dec. 3, 2021, 10:00 - 6:00 PM EST - Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class - 8/19-20, 10:00 - 6:00 PM EST, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pythonnetworautomation-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1606752292110-8IHWGLCU61VJI43C42Y2/py-na.png</image:loc>
+ <image:title>Store - Python for Network Automation, Aug. 30 - Sept. 3, 2021, 10:00 - 6:00 PM EST, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-sept2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - Sept. 29 - Oct. 1, 2021, 10:00 - 6:00 PM EST, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-sept2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - API Design with Python - Online Live- Sept. 13-17, 2021, 10:00 - 6:00 PM EST, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-nov2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator- Online Live -November 1 - 5, 2021, 10:00 AM - 6:00 PM, EST Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-april-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online, 4/19 - 4/23, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live - August 16 - 18, 2021, 10:00 - 6:00 PM EST **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-apr2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-05-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Apr 27-29, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-apr2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - Apr 6 -8, *GTR, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-may2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-05-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - May 4-6, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-jul2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-07-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - July 19-23, 2021, 9:00 AM - 5:00 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - June 1 - 3, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, June 7th, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live - Oct. 25 - 29, 2021, 10:00 - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-essentials-online-live-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials - Online Live - Oct. 18-22, 2021, 10:00 - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-online-may2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible Essentials Online Live Class - May 9 - 13, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-dec2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - Dec. 13 - 17, 2021, 10:00 AM - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-may2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, May 17th, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-june2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - June 22-24, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/red-hat-system-administrator-online-live-july2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-05-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580624701686-46Q2FJ2AU0T5OJFLXEAP/rhsa-logo.png</image:loc>
+ <image:title>Store - Red Hat System Administrator - Online Live - July 12-16, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-apr2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, April 5th , *GTR, 9:30 - 5:30 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-may2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - May 25-27, 9:30 - 5:30 EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-07-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live - August 9-13, 10:00 - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-nov2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Nov. 15 - 19, 2021, 10:00 AM - 6:00 PM, EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/certified-kubernetes-administrator-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-03-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1614793080235-77NDP5NCTCYXUP9KVDKX/kubernetes+training+log.png</image:loc>
+ <image:title>Store - Self-Paced CKA Labs - Purchase</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-june-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live -June 14-18, 10:00 - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-april2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-04-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live - April 12 -16, 10:00 - 6:00 PM EST *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/certified-ethical-hacker-may2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597870104640-6G7HQ4D7WG8CFP9ZSWOJ/CEH.png</image:loc>
+ <image:title>Store - Certified Ethical Hacker v11, Online Live, May 24-28, 10:00 AM - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/subscription-mnthly</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-10</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1619316881180-0OT47GEO9K36MFZCV3FP/html-convert-to-markdown-md_sq.png</image:loc>
+ <image:title>Store - On Demand Monthly Subscription</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-june2021-k5rbs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-06-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - June 21 -23, 10:00 AM - 6:00 PM EST ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, 8/30 - 9/3, 8:00 AM - 4:00 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-8-22</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-08-03</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, August 8 ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-aug32021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-09</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - Aug. 3-5, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-aug2021-jjl47</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - August 23 - 27, 2021, 10:00 AM - 6:00 PM, EST, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-july-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-07-30</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - July 27-29 ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-july20</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-07-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - July 20 - 22, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-online-live-class-july2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-07-26</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, July 19 ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-aug-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - Aug 10 - 12, 9:30 - 5:30 EST, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-dec2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.2 Kubernetes Administration, Online Live, Dec 6-7, 2021, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825356493-KEEFVCOU4U9OQC6RE7LY/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.2 Kubernetes Administration, Online Live, August 23-24, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826078555-0U8X4A6Z8146IN3A1NLL/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.2 Kubernetes Administration, Online Live, October, 4-5, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-aug2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825375526-WWF84EQS5M0J2GT6FGXX/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.5 Rancher Administration, Online Live, August 25 - 26, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-aug10</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - Aug. 10-12, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826103198-UDBTTI2RTFLRPOKRFCWV/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.5 Rancher Administration, Online Live, October 7-8, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-sle201v15-linux-sept2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825414783-0PWECSVLKIH36Q27XCEV/SUSE.png</image:loc>
+ <image:title>Store - SLE201v15 - SUSE Linux Enterprise Server 15 Administration, Online Live, Sept. 27 - 30, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-dec2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.5 Rancher Administration, Online Live, Dec. 8-9, 2021, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-sles-linux-nov2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825251613-OG2YGE50HV9LDF0147MQ/SUSE.png</image:loc>
+ <image:title>Store - SLE201v15 - SUSE Linux Enterprise Server 15 Administration, Online Live, Nov. 15 - 18, 2021</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-aug-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Aug. 17-19, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/devops-foundations-10-212021-jd5t2-cjlzd</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/agile-8-2021-w9dhj-a8sad</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-31</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/devops-foundations-9-7-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-13</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/devops-foundations-9-212021-jd5t2</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/devops-9-28-21</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/agile10-2021-w9dhj</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/devops-8-2021-w9dhj</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-13</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-aug31</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - Aug. 31 - Sept. 2, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/k8s-ckad-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627410733464-GQGN06SR3QZO4CS6U1RU/kubernetes+training+log.png</image:loc>
+ <image:title>Store - Kubernetes Lab Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-sept-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, Sept. 20th ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sdn-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628009304562-1DGDQVWCV0HS8B0MLCWY/sd-wan.png</image:loc>
+ <image:title>Store - SDN-NFV-SD-WAN Lab Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-423</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-03-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS | Online Live | April 25-27 | Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentialsoct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, Oct. 11th ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492974305-XNQ3647CPUGG5PVT8VMM/Python+Basics+Training+Logo.png</image:loc>
+ <image:title>Store - Python Basics - Additional Lab Time</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-sept2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Sept. 21 -23 ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-aug-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-09-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live -Aug. 31 - Sept. 2nd ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627410733464-GQGN06SR3QZO4CS6U1RU/kubernetes+training+log.png</image:loc>
+ <image:title>Store - CKA - Kubernetes Lab Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-online-live-class-oct-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Oct. 4-8, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live - Oct. 13-15th, 2021, 10:00 - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-03</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628017124129-O0UP87POUGS85UW2EVHT/jenkins+training+logo.png</image:loc>
+ <image:title>Store - Jenkins Automation Server Essentials- Lab Manual and Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/gitlab-training-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938838961-41K2WSY54JR1WNRO87LE/gitlab.png</image:loc>
+ <image:title>Store - GitLab Essentials - Online Live, Oct. 14-15, 10 AM - 6 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-online-live-dec-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials - Online Live - Dec. 13-17, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492780814-6HGII3GJUVOGYE2W1KDA/Ansible+Training+Logo.png</image:loc>
+ <image:title>Store - Ansible Essentials - Additonal Lab Time</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-oct2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class - Oct. 12-13th, 10:00 - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-08-03</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628016628205-JIP6QTACI8468EOR2XUC/microservices+training+logo.png</image:loc>
+ <image:title>Store - Developing Microservices - Lab Manual and Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-python-ansible-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628010047429-CCGG7CFS4Z6XB29QVV6U/Network+Automation+Training.png</image:loc>
+ <image:title>Store - Network Automation with Python & Ansible - Additional Lab Time</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-practice-labs</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628015119369-OY4TV3XJJ53ECO0W2OLQ/Python+API+Training+Logo.png</image:loc>
+ <image:title>Store - Python 201 - APIs and API Design with Python</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-network-automation-self-paced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628016422244-XS830M9WUB1Y5C56P6FZ/py-na.png</image:loc>
+ <image:title>Store - Python 202 - Network Automation Self Paced Course</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentialsoct2021-ny3rx</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, Nov. 1 ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/developing-on-aws-online-live-class-oct-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626867283-BSUEJDO4F3VARU29009X/aws-logo.png</image:loc>
+ <image:title>Store - Developing on AWS - Online Live - Oct 26-28, 9:30 AM - 5:30 PM EST, *GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-oct-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - Oct. 19 - 21, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-nov-21</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - Nov. 2 - 4, **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-sep2021-w7p82</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator- Online Live -Sept. 27 - Oct. 1, 2021, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-oct-2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - Oct 19-21, ***GTR***</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-dec2021-g29rp</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, 12/13 - 12/17, 8:00 AM - 4:00 PM, CST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/comptia-security-boot-camp-nov2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-16</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1597948860150-F69EV117S7CC14Z6XUFY/Sec%2B.png</image:loc>
+ <image:title>Store - CompTIA Security+ Boot Camp, Online LIVE, 11/1 - 11/5, 8:00 AM - 4:00 PM, CST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/network-automation-with-python-and-ansible-online-live-class-dec2021</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1587472600846-0GUATIW40JONZHFRF66J/napya-logo.png</image:loc>
+ <image:title>Store - Network Automation with Python and Ansible Online Live - Dec. 12 -13, 2021, 10:00 - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/deploying5g-online-live-class-12-21</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-28</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - Deploying 5G - Online Live - Dec. 9-10 2021, 10;00 - 6:00 PM EST,</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-nov2021-swamm</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live -November 15 - 19, 10:00 AM EST Start</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live - Jan 18 - 20</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class -January 10-11</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-march2020</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class -March 28 - 29</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-feb2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1601467145458-B5EU2OI6R7PYZ3ZXV2IG/jenkins.png</image:loc>
+ <image:title>Store - Jenkins Essentials - Online Live Class -Feb 21 - 22, 2022, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/gitlab-training-march2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938838961-41K2WSY54JR1WNRO87LE/gitlab.png</image:loc>
+ <image:title>Store - GitLab Essentials - Online Live, March 30-31</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/gitlab-training-oct2021-9hkpn-Bhi6h</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-10-13</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938838961-41K2WSY54JR1WNRO87LE/gitlab.png</image:loc>
+ <image:title>Store - GitLab Essentials - Online Live, Oct. 14-15, 10 AM - 6 PM, EST (Copy)</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/gitlab-training-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-01-21</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938838961-41K2WSY54JR1WNRO87LE/gitlab.png</image:loc>
+ <image:title>Store - GitLab Essentials - Online Live, Jan 12 -13</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-11-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - API Design with Python - Online Live January 3 -7</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/deploying5g-online-live-class-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - Deploying 5G - Online Live - Jan 27 - 28</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.2 Kubernetes Administration, Online Live, Jan 17 - 18</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-may2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.2 Kubernetes Administration, Online Live, May 2 - 3</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-nov2021-f5ebn</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-23</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - API Design with Python - Online Live- Feb. 14- 18, *Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/microservices-online-live-class-march2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1604957518317-G65Z9K7HL2HCMCO94BD8/microservices+training+logo.png</image:loc>
+ <image:title>Store - Microservices Online Live - March 28 - 30</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/volte-and-the-ims-online-training-livesept-584p6mar2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-03-22</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623964222-3ULBETGVMDQJQCB7R73R/volte-logo.png</image:loc>
+ <image:title>Store - VoLTE and the IMS - Online LIVE Class - March 21 - 25</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-may2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.6 Rancher Operations, Online Live, May 4 - 6</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-sles-linux-apr2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825251613-OG2YGE50HV9LDF0147MQ/SUSE.png</image:loc>
+ <image:title>Store - SLE201v15 - SUSE Linux Enterprise Server 15 Administration, Online Live, April 12-15, 2022</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-jan2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2021-12-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - Jan 24 - 26</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-sles-linux-june2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-02-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624825251613-OG2YGE50HV9LDF0147MQ/SUSE.png</image:loc>
+ <image:title>Store - SLE201v15 - SUSE Linux Enterprise Server 15 Administration, Online Live, May 31 - June 3</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/5g-essentials-online-live-class-apr2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - 5G Essentials - Online Live - April 25 - 27, 10;00 - 6:00 PM EST, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/architecting-on-aws-online-live-class-4-5-22</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-04-12</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626767352-CM47KRZPA0P9WBPSTRA2/aws-logo.png</image:loc>
+ <image:title>Store - Architecting on AWS - Online Live - 4/5 - 4/7, Guaranteed to Run</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/go-practice-labs-3678w</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-04-24</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938869270-95JFU0YPSRRE8XU4TFGM/golang+icon.png</image:loc>
+ <image:title>Store - Go Programming Essentials - Lab Manual and Lab Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-april2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-04-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator- Online Live - April 18- 22, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pythonnetworautomation-march2023</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-01-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1606752292110-8IHWGLCU61VJI43C42Y2/py-na.png</image:loc>
+ <image:title>Store - Python for Network Automation, March 6-10, 10:00 - 6:00 PM EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-aug2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-07-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.6 Rancher Operations, Online Live, Aug 3 - 5</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-class-april2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-04-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python Basics - Online Live - April 18 - 22, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetesonlineliveclassapril2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-04-25</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live -April 25 - 29</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/deploying5g-online-live-class-april2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580620752296-KH4RJ0TCIWRZPQQ7LZVP/5g-logo.png</image:loc>
+ <image:title>Store - Deploying 5G - Online Live - April 28 - 29, 2022</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-may2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - May 10-12, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-05-16-22</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, May 16th, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/system-operations-on-aws-online-live-class-july2022</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-07-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626877088-IM0A3PT06C1Y9198CLM1/aws-logo.png</image:loc>
+ <image:title>Store - System Operations on AWS - Online Live - 7/5 - 7/7, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-technical-essentials-6-27</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-07-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live Class, June 27, Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-practice-labs-9t8mr</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2022-05-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627492974305-XNQ3647CPUGG5PVT8VMM/Python+Basics+Training+Logo.png</image:loc>
+ <image:title>Store - API Design with Python - Additional Lab Time</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-selfpaced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-01-18</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622128133-SZTOC2J9323LPW761GBQ/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator - Self-Paced</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/aws-techessentials-jan9</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-01-11</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626840963-XVMPTHBPA25Q6DUP5RN2/aws-logo.png</image:loc>
+ <image:title>Store - AWS Technical Essentials - Online Live, Jan. 9th **GTR**</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sp-ansible-201</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-09-14</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628010047429-CCGG7CFS4Z6XB29QVV6U/Network+Automation+Training.png</image:loc>
+ <image:title>Store - Ansible 201 - Network Automation with Python and Ansible Self-Paced</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/crush-the-ckad</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-03</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622128133-SZTOC2J9323LPW761GBQ/k8s-logo.png</image:loc>
+ <image:title>Store - Crush the CKAD - Tutorial and Practice Lab Environment</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/tf-selfpaced</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-05-17</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683834995503-BVBB4N3HUUKSAB147ZDT/terraform.png</image:loc>
+ <image:title>Store - Terraform IAC - Self-Paced</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-bootcamp-online-live-class-spet2023</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-06-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Sept 11 - 15, 10:00 AM - 6:00 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-ckad-online-live-class-dec2023</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-06-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Kubernetes Bootcamp - Online Live - Dec 4 - 8, 10:00 AM - 6:00 PM, EST</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pe-ai-april24</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Prompt Engineering and NLP| April 24 - 26 | 10:00 AM to 6:00 PM EDT| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/os-generative-ai-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-09-27</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Open Source Generative AI | May 7 - 10 | 10:00 AM to 6:00 PM EDT</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-online-live-class-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Application Developer CKAD Online Live Training | April 1- 5 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-online-live-class-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Application Developer CKAD Online Live Training | June 10 - 14 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator Online Live Training | April 15- 19 | 10:00 AM to 6:00 PM ET| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator Online Live Training |June 24 - 28 | 10:00 AM to 6:00 PM ET| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cks-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825012918-G275ACE053X6OSG043PC/kubernetes+training+log.png</image:loc>
+ <image:title>Store - Securing Kubernetes CKS Online Live Training | April 29 - May 3 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - Python 201 - API Design with Python Training Online Live | May 20 - 24 | 10:00 AM to 6:00 PM ET| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/napya-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825922169-LU2WUM1RJBGTES8V684T/Network+Automation+Training.png</image:loc>
+ <image:title>Store - Ansible 201 - Network Automation with Python and Ansible | May 6 - 10 | 10:00 AM to 6:00 PM ET| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.26 Kubernetes Administration Online Live Training | April 8- 9| 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/golang-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938869270-95JFU0YPSRRE8XU4TFGM/golang+icon.png</image:loc>
+ <image:title>Store - Golang Essentials Online Live Training| June 10 - 14 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-apr2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.7 Rancher Manager for Rancher Prime Online Live Training |April 10-12| 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-online-live-apr2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-29</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials Online Live Training | April 29 - May 3| 10:00 AM to 6:00 PM ET *Guaranteed to Run!*</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-online-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible 101 Essentials Training Online Live |May 13 - 17 | 10:00 AM to 6:00 PM</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform/april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Terraform Training Online Live | April 22 - 24 | 10:00 AM to 6:00 PM ET GTR</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform/june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Terraform Training Online Live | June 26 - 28 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628017124129-O0UP87POUGS85UW2EVHT/jenkins+training+logo.png</image:loc>
+ <image:title>Store - Jenkins Automation Essentials| Training Online LIVE | June 17 - 17 |10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pythonnetworautomation-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1606752292110-8IHWGLCU61VJI43C42Y2/py-na.png</image:loc>
+ <image:title>Store - Python 202 - Python for Network Automation Online LIVE Training | June 10 - 14 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2023-10-05</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python 101 Basics Online Live Training |June 3 - 7 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/appdev-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-01-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Application Development with AI | Online Live |June 12 -14 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/zerocode-4-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-01-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Zero Code AI Solutions Training| Online Live | April 8 -9 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/zerocode-6-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-01-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Zero Code AI Solutions Training| Online Live | June 24-25 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pe-june-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-01-15</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Prompt Engineering and NLP| June 19 - 21 | 10:00 AM to 6:00 PM EDT</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pyai-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - AI for Python Application Development Training | Online Live | April 2-5 | 10:00 AM - 6:00 PM ET| Guaranteed to Run!</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sdwots-april</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - SDWOTS SD-WAN Operations Troubleshooting and Best Practices 20.x | Online Live | April 22 - 26 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sdwots-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - SDWOTS SD-WAN Operations Troubleshooting and Best Practices 20.x | Online Live | June 3- 7 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/c98wf6-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - C98WF6-Configuring Cisco Catalyst 9800 and Intro to Wi-Fi 6 | Online Live | April 8- 10 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/c98wf6-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - C98WF6-Configuring Cisco Catalyst 9800 and Intro to Wi-Fi 6 | Online Live | May 6-8 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/c98wf6-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - C98WF6-Configuring Cisco Catalyst 9800 and Intro to Wi-Fi 6 | Online Live | June 3- 5 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/dcucai-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - DCUCAI Administering Cisco Data Center Unified Computing System with Intersight | Online Live April 22-25| 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/dcucai-may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - DCUCAI Administering Cisco Data Center Unified Computing System with Intersight | Online Live May 13-16| 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/intucxs-march2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - INTUCSX Administering Cisco UCS X-Series Solutions with Intersight| Online Live | March 11-15 | 10:00 AM | Guaranteed to Run</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/intucxs-april2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - INTUCSX Administering Cisco UCS X-Series Solutions with Intersight| Online Live | April 22-26 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/intucxs-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1706661031359-EN66X47KAO1AUONM3S1J/cisco-systems-logo.jpg</image:loc>
+ <image:title>Store - INTUCSX Administering Cisco UCS X-Series Solutions with Intersight| Online Live | June 17-21 | 10:00 AM |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/napya-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825922169-LU2WUM1RJBGTES8V684T/Network+Automation+Training.png</image:loc>
+ <image:title>Store - Ansible 201 - Network Automation with Python and Ansible | July 8 - 12 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/os-generative-ai-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Open Source Generative AI | July 9 - 12 | 10:00 AM to 6:00 PM EDT|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cks-jully2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825012918-G275ACE053X6OSG043PC/kubernetes+training+log.png</image:loc>
+ <image:title>Store - Securing Kubernetes CKS Online Live Training | July 15 - 19 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ci/cd/july-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-online-live-class-july-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Application Developer CKAD Online Live Training | July 22- 26 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-06</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - Python 201 - API Design with Python Training Online Live | July 22 - 28 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-essentials-online-feb2024-r3ptk</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible 101 Essentials Training Online Live |July 29 - Aug 2 | 10:00 AM to 6:00 PM|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/appdev-august2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Application Development with AI | Online Live | Aug 5 - 7 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ansible-palo-alto-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580623039075-0M6NI5VIVPINJH43ES2B/ans-logo.png</image:loc>
+ <image:title>Store - Ansible 204- Network Automation with Palo Alto Training Online Live |Aug 5 - 9| 10:00 AM to 6:00 PM|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/zerocode-8-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Zero Code AI Solutions Training| Online Live | Aug 12 - 13 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform/aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Terraform Training Online Live | Aug 12 - 14| 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pythonnetworautomation-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1606752292110-8IHWGLCU61VJI43C42Y2/py-na.png</image:loc>
+ <image:title>Store - Python 202 - Python for Network Automation Online LIVE Training | Aug 12 - 16 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pe-ai-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Prompt Engineering and NLP| Aug 14 - 16 | 10:00 AM to 6:00 PM EDT</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/os-generative-ai-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Open Source Generative AI | Aug 20 - 23 | 10:00 AM to 6:00 PM EDT|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator - CKA Online Live Training | Aug 26 - 30 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pyai-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - AI for Python Application Development Training | Online Live | Sept 9 -12 | 10:00 AM - 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/kubernetes-online-live-class-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Application Developer CKAD Online Live Training | Sept 9 - 13 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-online-live-sept2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials Online Live Training |Sept 9 - 13| 10:00 AM to 6:00 PM ET |</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/jenkins-sept2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1628017124129-O0UP87POUGS85UW2EVHT/jenkins+training+logo.png</image:loc>
+ <image:title>Store - Jenkins Automation Essentials| Training Online LIVE |Sept 16 - 17 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/golang-aug2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1627938869270-95JFU0YPSRRE8XU4TFGM/golang+icon.png</image:loc>
+ <image:title>Store - Golang Essentials Online Live Training| Sept 16 - 20 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cks-sept2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825012918-G275ACE053X6OSG043PC/kubernetes+training+log.png</image:loc>
+ <image:title>Store - Securing Kubernetes CKS Online Live Training | Sept 23 - 27 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/api-design-with-python-sept2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626510144-Y6C73XYMHKFRTCY1TW74/apipy-logo.png</image:loc>
+ <image:title>Store - Python 201 - API Design with Python Training Online Live | Sept 23 - 27| 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/napya-may2024-zlah6</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-07</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1683825922169-LU2WUM1RJBGTES8V684T/Network+Automation+Training.png</image:loc>
+ <image:title>Store - Ansible 201 - Network Automation with Python and Ansible | Sept 30 - Oct 4 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/appdev-oct2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Application Development with AI | Online Live | Oct 2 - 4 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/pe-ai-oct2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Prompt Engineering and NLP| Oct 9 - 11 | 10:00 AM to 6:00 PM EDT</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/ci/cd/oct2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-08</lastmod>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform/oct2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Terraform Training Online Live | Oct 16 - 18 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/zerocode-10-2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/c71d4fbd-8f5a-4995-98e8-23733bc7ebbe/ai-chip.png</image:loc>
+ <image:title>Store - Zero Code AI Solutions Training| Online Live | Oct 17 - 18 | 10:00 AM - 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/cka-online-live-class-oct2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622034437-0QH0RJ2UWNMA5XAPIO2L/k8s-logo.png</image:loc>
+ <image:title>Store - Certified Kubernetes Administrator Online Live Training | Oct 21 - 25 | 10:00 AM to 6:00 PM ET|</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.26 Kubernetes Administration Online Live Training | July 8 - 9 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-k8s-october2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826138038-XDTIRBTG7H4O8SB5R3FN/SUSE.png</image:loc>
+ <image:title>Store - KUB201v1.26 Kubernetes Administration Online Live Training | Oct 7 - 8 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.7 Rancher Manager for Rancher Prime Online Live Training |July 10 - 12 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/suse-rancher-october2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-02-19</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1624826154189-ULCE7559WKE1XJRMSVEA/SUSE.png</image:loc>
+ <image:title>Store - RAN201v2.7 Rancher Manager for Rancher Prime Online Live Training |Oct 9 - 11 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-july2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python 101 Basics Online Live Training |July 29 - Aug 2 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-sept2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python 101 Basics Online Live Training |Sept 16 - 20 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/python-basics-online-live-nov2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580626464295-M2LYBUYBNNHQMUX7M50Y/pyb-logo.png</image:loc>
+ <image:title>Store - Python 101 Basics Online Live Training |Nov 18 - 22 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-online-live-june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials Online Live Training | June 24 - 28| 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/sip-online-live-dec2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-03-08</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1580622596102-J3IO4NHIDRYXBVYLXCNX/sip-logo.png</image:loc>
+ <image:title>Store - SIP Essentials Online Live Training | Dec 2 - 6| 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform/may2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Managing Azure with Terraform Training Online Live | May 8 -10| 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform102/june2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Managing Azure with Terraform Training Online Live | June 12 - 14 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+ <url>
+ <loc>https://alta3.com/store/p/terraform102/august2024</loc>
+ <changefreq>monthly</changefreq>
+ <priority>0.5</priority>
+ <lastmod>2024-04-04</lastmod>
+ <image:image>
+ <image:loc>https://images.squarespace-cdn.com/content/v1/5df3d8c5d2be5962e4f87890/1654520880675-FN8VWWY75W05JYW6VWAW/terraform.png</image:loc>
+ <image:title>Store - Managing Azure with Terraform Training Online Live | Aug 7 - 9 | 10:00 AM to 6:00 PM ET</image:title>
+ </image:image>
+ </url>
+</urlset>
+
alta3/moved/source/squarespace_redirects.txt
@@ -0,0 +1,41 @@
+/courses/sip -> /overview-sip 301
+/courses/python1 -> /overview-pyb 301
+/courses/python2 -> /overview-napya 301
+/courses/python3 -> /overview-apipy 301
+/courses/openstack -> /overview-os 301
+/courses/rhcsa -> /overview-rhel 301
+/courses/avaya -> /overview-aa 301
+/courses/k8s -> /overview-k8s 301
+/courses/ansible -> /overview-ans 301
+/courses/5g -> /overview-5g 301
+/courses/avaya -> /overview-aa 301
+/courses/ceph -> /overview-ceph 301
+/courses/ipsec -> /overview-ipsec 301
+/courses/napya -> /overview-napya 301
+/courses/networks -> /overview-napya 301
+/courses/ims -> /overview-volte 301
+/courses/volte -> /overview-volte 301
+/demo -> /contact 301
+/downloads -> /posters 301
+/lms -> https://lms.alta3.com 301
+/labs -> https://lms.alta3.com 301
+/posters/yaml.pdf -> /posters 301
+/posters/tmux.pdf -> /posters 301
+/posters/k8s.pdf -> /posters 301
+/posters/git.pdf -> /posters 301
+/posters/ansible.pdf -> /posters 301
+/posters/python3.pdf -> /posters 301
+/posters/vim.pdf -> /posters 301
+/posters/sip.pdf -> /posters 301
+/posters/regex.pdf -> /posters 301
+/posters/python3pkgs.pdf -> /posters 301
+/posters/[name] -> /posters 301
+/static/posters -> /posters 301
+/static/posters/[name] -> /posters 301
+/blog/2017-04-10-reset-a-forgotten-openstack-password -> /blog 302
+/blog/2017-03-24-physically-wiring-an-openstack-node -> /blog 302
+/static/[name] -> https://static.alta3.com/static/[name] 302
+/static -> https://static.alta3.com/static 301
+/store/[product-item] -> /store/p/[product-item] 301
+/store/p/rhel-practice-labs -> /training-courses 301
+
alta3/moved/test/blog.txt
@@ -0,0 +1,116 @@
+404 https://blog.alta3.com/tags/eos/
+404 https://blog.alta3.com/tags/network/
+200 https://blog.alta3.com/tags/github_keys/
+200 https://blog.alta3.com/tags/ansible_switch_configuration/
+200 https://blog.alta3.com/tags/ansible_template_module/
+200 https://blog.alta3.com/tags/automation/
+200 https://blog.alta3.com/tags/keygen/
+200 https://blog.alta3.com/tags/video/
+200 https://blog.alta3.com/tags/http/
+404 https://blog.alta3.com/tags/curl/
+200 https://blog.alta3.com/tags/ansible_switch_config_archive/
+200 https://blog.alta3.com/topics/linux/ubuntu-1804-preseed-installation/
+200 https://blog.alta3.com/tags/ansible_inventory/
+200 https://blog.alta3.com/topics/ansible/throttling-ansibles-localaction-module/
+200 https://blog.alta3.com/tags/k8s/
+200 https://blog.alta3.com/tags/ansible/
+404 https://blog.alta3.com/tags/restful_api/
+200 https://blog.alta3.com/tags/eos-banner/
+404 https://blog.alta3.com/tags/back_up/
+200 https://blog.alta3.com/tags/kubernetes/
+200 https://blog.alta3.com/tags/nasa/
+404 https://blog.alta3.com/tags/installing_kubernetes/
+404 https://blog.alta3.com/tags/powershell/
+200 https://blog.alta3.com/tags/network_objects/
+404 https://blog.alta3.com/tags/virtualbox/
+200 https://blog.alta3.com/tags/networking/
+404 https://blog.alta3.com/tags/key_gen/
+200 https://blog.alta3.com/tags/dnsmasq/
+200 https://blog.alta3.com/tags/ansible_hosts/
+404 https://blog.alta3.com/tags/InfoBlox/
+404 https://blog.alta3.com/tags/linux/
+200 https://blog.alta3.com/tags/python/
+200 https://blog.alta3.com/posters/
+404 https://blog.alta3.com/tags/init/
+404 https://blog.alta3.com/tags/installing_virtualbox/
+404 https://blog.alta3.com/tags/ubuntu/
+200 https://blog.alta3.com/tags/github/
+200 https://blog.alta3.com/topics/kubernetes/moving-active-k8s-cluster-on-qemu-vm/
+200 https://blog.alta3.com/topics/ansible/ansible-is-for-everyone/
+200 https://blog.alta3.com/tags/html/
+404 https://blog.alta3.com/tags/playlist/
+200 https://blog.alta3.com/tags/vim/
+200 https://blog.alta3.com/tags/api/
+200 https://blog.alta3.com/tags/iperf/
+200 https://blog.alta3.com/topics/api/python-and-apis-nasas-open-apis/
+200 https://blog.alta3.com/tags/mtu/
+404 https://blog.alta3.com/tags/versions/
+200 https://blog.alta3.com/tags/webinar/
+200 https://blog.alta3.com/topics/ansible/restore-backed-up-files-using-ansible/
+200 https://blog.alta3.com/tags/icmp/
+200 https://blog.alta3.com/tags/wsl2/
+200 https://blog.alta3.com/topics/ansible/ansible-switch-configuration/
+404 https://blog.alta3.com/tags/vms/
+200 https://blog.alta3.com/tags/jinja2/
+200 https://blog.alta3.com/topics/programming/gos-approach-to-arrays-and-slices/
+200 https://blog.alta3.com/topics/programming/creating-flask-server/
+200 https://blog.alta3.com/topics/ansible/ansible-switch-config-archive/
+200 https://blog.alta3.com/topics/api/pythonapi-part1/
+200 https://blog.alta3.com/topics/api/python-apis-part2/
+200 https://blog.alta3.com/tags/private_key/
+200 https://blog.alta3.com/topics/kubernetes/singlevmk8s/
+200 https://blog.alta3.com/tags/roles/
+404 https://blog.alta3.com/tags/tutorial/
+404 https://blog.alta3.com/tags/dev/
+404 https://blog.alta3.com/tags/show/
+200 https://blog.alta3.com/tags/how_to/
+200 https://blog.alta3.com/topics/linux/install-windows-terminal/
+200 https://blog.alta3.com/topics/linux/how-to-create-a-virtual-machine/
+200 https://blog.alta3.com/topics/linux/tune-your-dot-files/
+200 https://blog.alta3.com/tags/rest/
+200 https://blog.alta3.com/tags/ansible_certification/
+200 https://blog.alta3.com/topics/networking/launch-cloud-init-configured-vms/
+200 https://blog.alta3.com/tags/ckad/
+200 https://blog.alta3.com/topics/linux/how-to-install-terraform-infrastructure-as-code-tool/
+200 https://blog.alta3.com/topics/linux/vimcolorscheme/
+200 https://blog.alta3.com/topics/ansible/ansible-and-infoblox/
+200 https://blog.alta3.com/topics/scm-and-pipelines/managing-github-issue-labels-across-organizations-and-repositories/
+200 https://blog.alta3.com/topics/networking/diagnosing-a-slow-network/
+200 https://blog.alta3.com/topics/api/magic-the-gathering-api/
+200 https://blog.alta3.com/topics/networking/minus-28-bytes-later/
+200 https://blog.alta3.com/tags/youtube/
+200 https://blog.alta3.com/topics/programming/go-programming-print/
+200 https://blog.alta3.com/tags/ansible_playbook/
+404 https://blog.alta3.com/tags/vm/
+200 https://blog.alta3.com/topics/kubernetes/crushckad/
+200 https://blog.alta3.com/tags/id_rsa/
+200 https://blog.alta3.com/tags/mtu_testing/
+200 https://blog.alta3.com/tags/markdown/
+200 https://blog.alta3.com/tags/requests/
+404 https://blog.alta3.com/tags/programmng/
+200 https://blog.alta3.com/topics/ansible/ansible-templates/
+200 https://blog.alta3.com/topics/ansible/install-python-and-ansible/
+200 https://blog.alta3.com/topics/networking/securingdnsmasq/
+200 https://blog.alta3.com/topics/api/api-requests-with-python/
+200 https://blog.alta3.com/topics/ansible/ansible-basics-tutorial/
+200 https://blog.alta3.com/topics/linux/installing-virtualbox/
+200 https://blog.alta3.com/topics/api/fastapi/
+200 https://blog.alta3.com/topics/ansible/ansible-template-tutorial/
+200 https://blog.alta3.com/topics/kubernetes/error-invalid-value-apiall-on-kube-apiserver/
+200 https://blog.alta3.com/topics/scm-and-pipelines/create-pipeline/
+200 https://blog.alta3.com/topics/ansible/how-to-install-ansible/
+200 https://blog.alta3.com/
+200 https://blog.alta3.com/topics/linux/unlocking-your-vim-screen/
+200 https://blog.alta3.com/tags/windows/
+200 https://blog.alta3.com/tags/programming/
+200 https://blog.alta3.com/topics/linux/vim-introduction-getting-started-with-vim/
+200 https://blog.alta3.com/topics/programming/converting-html-to-markdown/
+200 https://blog.alta3.com/topics/programming/python-and-the-magic-wormhole-project/
+200 https://blog.alta3.com/topics/programming/jinja-templates/
+200 https://blog.alta3.com/topics/networking/getting-keyed-up/
+000 https://blog.alta3.com/topics/kubernetes/8-steps-to-k8s-cluster/
+200 https://blog.alta3.com/topics/scm-and-pipelines/adding-spell-checking-as-a-github-action/
+200 https://blog.alta3.com/topics/programming/python-versions-python2-vs-python3/
+200 https://blog.alta3.com/topics/ansible/ansible-vault-hello-world/
+200 https://blog.alta3.com/topics/scm-and-pipelines/back-up-your-organizations-github/
+404 https://blog.alta3.com/tags/vcs/
alta3/moved/test/domains.txt
@@ -0,0 +1,21 @@
+502 https://sso.alta3.com
+200 https://static.alta3.com/outlines/pyb/pyb.pdf
+200 https://live.alta3.com
+200 https://static.alta3.com/courses/5g/info/5G-Acronyms.pdf
+200 https://static.alta3.com/posters/tmux.pdf
+200 https://static.alta3.com/posters/yaml.pdf
+200 https://static.alta3.com/outlines/sip/sip.pdf
+200 https://static.alta3.com/outlines/volte/volte.pdf
+200 https://static.alta3.com/posters/python3.pdf
+200 https://static.alta3.com/courses/5g/info/linux.pdf
+200 https://static.alta3.com/outlines/py-datasci/py-datasci.pdf
+200 https://static.alta3.com/outlines/5g/5g.pdf
+200 https://static.alta3.com/posters/k8s.pdf
+200 https://static.alta3.com/posters/python3pkgs.pdf
+200 https://static.alta3.com/posters/regex.pdf
+200 https://static.alta3.com/posters/vim.pdf
+200 https://static.alta3.com/posters/ansible.pdf
+200 https://static.alta3.com/posters/git.pdf
+200 https://static.alta3.com/posters/sip.pdf
+200 https://alta3.com/blog/installing-windows-subsystem-for-linux-2-wsl2
+200 https://static.alta3.com/posters/terraform.pdf
alta3/moved/test/relative.txt
@@ -0,0 +1,69 @@
+200 https://wwww.alpha.alta3.com/
+200 https://wwww.alpha.alta3.com/about
+200 https://wwww.alpha.alta3.com/careers
+200 https://wwww.alpha.alta3.com/contact-us
+200 https://wwww.alpha.alta3.com/courses
+200 https://wwww.alpha.alta3.com/courses/5g
+200 https://wwww.alpha.alta3.com/courses/5g-deploy
+200 https://wwww.alpha.alta3.com/courses/ai-app-dev
+200 https://wwww.alpha.alta3.com/courses/ai-gpu
+200 https://wwww.alpha.alta3.com/courses/ai-zero-code
+200 https://wwww.alpha.alta3.com/courses/ansible-101
+200 https://wwww.alpha.alta3.com/courses/ansible-202-server
+200 https://wwww.alpha.alta3.com/courses/ansible-203-windows
+200 https://wwww.alpha.alta3.com/courses/ansidell
+200 https://wwww.alpha.alta3.com/courses/api
+200 https://wwww.alpha.alta3.com/courses/auto-fortinet-terraform
+200 https://wwww.alpha.alta3.com/courses/auto-paloalto-pa
+200 https://wwww.alpha.alta3.com/courses/awx
+200 https://wwww.alpha.alta3.com/courses?category=AI
+200 https://wwww.alpha.alta3.com/courses?category=Ansible
+200 https://wwww.alpha.alta3.com/courses?category=DevOps
+200 https://wwww.alpha.alta3.com/courses?category=Infrastructure
+200 https://wwww.alpha.alta3.com/courses?category=Kubernetes
+200 https://wwww.alpha.alta3.com/courses?category=Networking
+200 https://wwww.alpha.alta3.com/courses?category=Programming
+200 https://wwww.alpha.alta3.com/courses?category=Security
+200 https://wwww.alpha.alta3.com/courses?category=Telecom
+200 https://wwww.alpha.alta3.com/courses/ceph
+200 https://wwww.alpha.alta3.com/courses/cka
+200 https://wwww.alpha.alta3.com/courses/cks
+200 https://wwww.alpha.alta3.com/courses/devops-bootcamp
+200 https://wwww.alpha.alta3.com/courses/django
+200 https://wwww.alpha.alta3.com/courses/github
+200 https://wwww.alpha.alta3.com/courses/gitlab
+200 https://wwww.alpha.alta3.com/courses/golang
+200 https://wwww.alpha.alta3.com/courses/jenkins
+200 https://wwww.alpha.alta3.com/courses/kubernetes
+200 https://wwww.alpha.alta3.com/courses/linux-4-dev
+200 https://wwww.alpha.alta3.com/courses/mans
+200 https://wwww.alpha.alta3.com/courses/microservices
+200 https://wwww.alpha.alta3.com/courses/nab
+200 https://wwww.alpha.alta3.com/courses/napya
+200 https://wwww.alpha.alta3.com/courses/natural-lang-apis
+200 https://wwww.alpha.alta3.com/courses/packer
+200 https://wwww.alpha.alta3.com/courses/pyb
+200 https://wwww.alpha.alta3.com/courses/py-datasci
+200 https://wwww.alpha.alta3.com/courses/pyna
+200 https://wwww.alpha.alta3.com/courses/rancher
+200 https://wwww.alpha.alta3.com/courses/sdn
+200 https://wwww.alpha.alta3.com/courses/sd-wan
+200 https://wwww.alpha.alta3.com/courses/sip
+200 https://wwww.alpha.alta3.com/courses/sk8s
+200 https://wwww.alpha.alta3.com/courses/tcp-ip
+200 https://wwww.alpha.alta3.com/courses/terraform
+200 https://wwww.alpha.alta3.com/courses/tlg-sde-python
+200 https://wwww.alpha.alta3.com/courses/volte
+200 https://wwww.alpha.alta3.com/instructors
+200 https://wwww.alpha.alta3.com/instructors/09dda129-d46e-4cb1-a22c-440e045885b0
+200 https://wwww.alpha.alta3.com/instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301
+200 https://wwww.alpha.alta3.com/instructors/7a26aba0-5747-47f8-bc30-e3e6dc90004b
+200 https://wwww.alpha.alta3.com/instructors/7eef3cff-369a-4a11-a081-0ac8f8bcb387
+200 https://wwww.alpha.alta3.com/instructors/85f3b9ca-e529-4377-8701-4cf5d54b7024
+200 https://wwww.alpha.alta3.com/instructors/9c932d8e-177a-44af-9edf-0fe0b0fa30fd
+200 https://wwww.alpha.alta3.com/instructors/adadf1ca-bbce-4a1e-bf4c-c3a14f64e290
+200 https://wwww.alpha.alta3.com/instructors/e0388f28-2f33-44a3-91b5-1d36ac3476d7
+200 https://wwww.alpha.alta3.com/instructors/fd8397ea-bb40-41ad-974f-9b415d19bf64
+200 https://wwww.alpha.alta3.com/offering-types
+200 https://wwww.alpha.alta3.com/schedule
+200 https://wwww.alpha.alta3.com/schedule?search=terraform
alta3/moved/.gitignore
@@ -0,0 +1,1 @@
+*.db
alta3/moved/data.sql
@@ -0,0 +1,1114 @@
+PRAGMA foreign_keys=OFF;
+BEGIN TRANSACTION;
+
+CREATE TABLE IF NOT EXISTS redir (
+ src TEXT NOT NULL PRIMARY KEY, -- source url path
+ dst TEXT, -- destination url path
+ type TEXT, -- category of redir
+ status INTEGER DEFAULT 301 NOT NULL -- http status code
+);
+
+-- blogs
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-eos-banner-tutorial','https://blog.alta3.com/topics/ansible/ansible-switch-configuration/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/installing-ansible','https://blog.alta3.com/topics/ansible/how-to-install-ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-and-infoblox','https://blog.alta3.com/topics/ansible/ansible-and-infoblox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/install-virtualbox','https://blog.alta3.com/topics/linux/installing-virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/installing+virtualbox','https://blog.alta3.com/topics/linux/installing-virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/installing-virtualbox','https://blog.alta3.com/topics/linux/installing-virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-switch-configuration-archive-tutorial','https://blog.alta3.com/topics/ansible/ansible-switch-config-archive/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/passing-the-ckad','https://blog.alta3.com/topics/kubernetes/crushckad/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/python-versions-python2-vs-python3','https://blog.alta3.com/topics/programming/python-versions-python2-vs-python3/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/restore-backed-up-files-using-ansible','https://blog.alta3.com/topics/ansible/restore-backed-up-files-using-ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/8-steps-to-k8s-cluster','https://blog.alta3.com/topics/kubernetes/8-steps-to-k8s-cluster/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/introduction-to-kubernetes','https://blog.alta3.com/topics/kubernetes/8-steps-to-k8s-cluster/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/adding-spell-checking-as-a-github-action','https://blog.alta3.com/topics/scm-and-pipelines/adding-spell-checking-as-a-github-action/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible+switch+config+archive','https://blog.alta3.com/topics/ansible/ansible-and-infoblox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-basics-tutorial','https://blog.alta3.com/topics/ansible/ansible-basics-tutorial/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-is-for-everyone','https://blog.alta3.com/topics/ansible/ansible-is-for-everyone/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-template-tutorial','https://blog.alta3.com/topics/ansible/ansible-template-tutorial/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-templates','https://blog.alta3.com/topics/ansible/ansible-templates/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ansible-vault-hello-world','https://blog.alta3.com/topics/ansible/ansible-vault-hello-world/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/api-requests-with-python','https://blog.alta3.com/topics/api/api-requests-with-python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/back-up-your-organizations-github','https://blog.alta3.com/topics/scm-and-pipelines/back-up-your-organizations-github/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/converting-html-to-markdown','https://blog.alta3.com/topics/programming/converting-html-to-markdown/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/create-pipeline','https://blog.alta3.com/topics/scm-and-pipelines/create-pipeline/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/creating-flask-server','https://blog.alta3.com/topics/programming/creating-flask-server/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/crushckad','https://blog.alta3.com/topics/kubernetes/crushckad/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/diagnosing-a-slow-network','https://blog.alta3.com/topics/networking/diagnosing-a-slow-network/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/error-invalid-value-apiall-on-kube-apiserver','https://blog.alta3.com/topics/kubernetes/error-invalid-value-apiall-on-kube-apiserver/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/fastapi','https://blog.alta3.com/topics/api/fastapi/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/getting-keyed-up','https://blog.alta3.com/topics/networking/getting-keyed-up/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/go-programming-print','https://blog.alta3.com/topics/programming/go-programming-print/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/gos-approach-to-arrays-and-slices','https://blog.alta3.com/topics/programming/gos-approach-to-arrays-and-slices/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/how-to-create-a-virtual-machine','https://blog.alta3.com/topics/linux/how-to-create-a-virtual-machine/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/how-to-install-terraform-infrastructure-as-code-tool','https://blog.alta3.com/topics/linux/how-to-install-terraform-infrastructure-as-code-tool/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/install-python-and-ansible','https://blog.alta3.com/topics/ansible/install-python-and-ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/install-windows-terminal','https://blog.alta3.com/topics/linux/install-windows-terminal/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/installing-windows-subsystem-for-linux-2-wsl2','https://alta3.com/blog/installing-windows-subsystem-for-linux-2-wsl2',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/jinja-templates','https://blog.alta3.com/topics/programming/jinja-templates/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/launch-cloud-init-configured-vms','https://blog.alta3.com/topics/networking/launch-cloud-init-configured-vms/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/magic-the-gathering-api','https://blog.alta3.com/topics/api/magic-the-gathering-api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/managing-github-issue-labels-across-organizations-and-repositories','https://blog.alta3.com/topics/scm-and-pipelines/managing-github-issue-labels-across-organizations-and-repositories/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/minus-28-bytes-later','https://blog.alta3.com/topics/networking/minus-28-bytes-later/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/-28-bytes-later','https://blog.alta3.com/topics/networking/minus-28-bytes-later/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/moving-active-k8s-cluster-on-qemu-vm','https://blog.alta3.com/topics/kubernetes/moving-active-k8s-cluster-on-qemu-vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/python-and-apis-nasas-open-apis','https://blog.alta3.com/topics/api/python-and-apis-nasas-open-apis/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/python-and-the-magic-wormhole-project','https://blog.alta3.com/topics/programming/python-and-the-magic-wormhole-project/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/python-apis-part2','https://blog.alta3.com/topics/api/python-apis-part2/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/python-tutorial-using-python-to-interact-with-excel','https://blog.alta3.com/topics/programming/python-versions-python2-vs-python3/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/pythonapi-part1','https://blog.alta3.com/topics/api/pythonapi-part1/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/securingdnsmasq','https://blog.alta3.com/topics/networking/securingdnsmasq/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/singlevmk8s','https://blog.alta3.com/topics/kubernetes/singlevmk8s/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/throttling-ansibles-localaction-module','https://blog.alta3.com/topics/ansible/throttling-ansibles-localaction-module/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/tune-your-dot-files','https://blog.alta3.com/topics/linux/tune-your-dot-files/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/ubuntu-1804-preseed-installation','https://blog.alta3.com/topics/linux/ubuntu-1804-preseed-installation/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/unlocking-your-vim-screen','https://blog.alta3.com/topics/linux/unlocking-your-vim-screen/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/vim-introduction-getting-started-with-vim','https://blog.alta3.com/topics/linux/vim-introduction-getting-started-with-vim/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/vimcolorscheme','https://blog.alta3.com/topics/linux/vimcolorscheme/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-post','/blog/adding-spell-checking-as-a-github-action/1000','https://blog.alta3.com/topics/scm-and-pipelines/adding-spell-checking-as-a-github-action/',301);
+
+-- blog tags
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/curl','https://blog.alta3.com/tags/curl/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes+cluster','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+hosts','https://blog.alta3.com/tags/ansible_hosts/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Restful+API','https://blog.alta3.com/tags/restful_api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/networking','https://blog.alta3.com/tags/networking/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python+tutorial','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes+training','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/icmp','https://blog.alta3.com/tags/icmp/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/back-up','https://blog.alta3.com/tags/back_up/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes+tutorial','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/online+ansible+training','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Ansible+Tutorial','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Init','https://blog.alta3.com/tags/init/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/automation','https://blog.alta3.com/tags/automation/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/dev','https://blog.alta3.com/tags/dev/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/vm%27s','https://blog.alta3.com/tags/vms/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/wsl2','https://blog.alta3.com/tags/wsl2/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/powershell','https://blog.alta3.com/tags/powershell/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/github+keys','https://blog.alta3.com/tags/github_keys/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/html','https://blog.alta3.com/tags/html/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/api','https://blog.alta3.com/tags/api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/vim','https://blog.alta3.com/tags/vim/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+certification','https://blog.alta3.com/tags/ansible_certification/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Ansible+Training','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/programming','https://blog.alta3.com/tags/programming/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/webinar','https://blog.alta3.com/tags/webinar/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/github','https://blog.alta3.com/tags/github/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/linux+tutorial','https://blog.alta3.com/tags/linux/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ubuntu','https://blog.alta3.com/tags/ubuntu/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ckad','https://blog.alta3.com/tags/ckad/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python+training','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/iperf','https://blog.alta3.com/tags/iperf/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/private+key','https://blog.alta3.com/tags/private_key/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/mtu','https://blog.alta3.com/tags/mtu/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/jinja2','https://blog.alta3.com/tags/jinja2/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/id_rsa.pub','https://blog.alta3.com/tags/id_rsa/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+tutorial','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual+machine','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/versions','https://blog.alta3.com/tags/versions/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/vm','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual+machines','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Ansible','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/http','https://blog.alta3.com/tags/http/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/youtube','https://blog.alta3.com/tags/youtube/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+training','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/key+gen','https://blog.alta3.com/tags/key_gen/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/id_rsa','https://blog.alta3.com/tags/id_rsa/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/roles','https://blog.alta3.com/tags/roles/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/%23python','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/show','https://blog.alta3.com/tags/show/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+template','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+switch+config+archive','https://blog.alta3.com/tags/ansible_switch_config_archive/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/playbooks','https://blog.alta3.com/tags/ansible_playbook/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/requests','https://blog.alta3.com/tags/requests/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/InfoBlox','https://blog.alta3.com/tags/InfoBlox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/keygen','https://blog.alta3.com/tags/keygen/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+inventory','https://blog.alta3.com/tags/ansible_inventory/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/online+python+training','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/playlist','https://blog.alta3.com/tags/playlist/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/mtu+testing','https://blog.alta3.com/tags/mtu_testing/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/api+design','https://blog.alta3.com/tags/api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtualbox','https://blog.alta3.com/tags/virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Ansible+Playbook','https://blog.alta3.com/tags/ansible_playbook/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Network+Objects','https://blog.alta3.com/tags/network_objects/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/installing+virtualbox','https://blog.alta3.com/tags/installing_virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/linux','https://blog.alta3.com/tags/linux/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/markdown','https://blog.alta3.com/tags/markdown/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/tutorial','https://blog.alta3.com/tags/tutorial/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/dsnmasq','https://blog.alta3.com/tags/dnsmasq/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python+programming','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/installing+kubernetes','https://blog.alta3.com/tags/installing_kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/api+design+with+python','https://blog.alta3.com/tags/api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/k8s','https://blog.alta3.com/tags/k8s/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/vcs','https://blog.alta3.com/tags/vcs/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Writing+API%27s+with+Python','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/windows','https://blog.alta3.com/tags/windows/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+template+module','https://blog.alta3.com/tags/ansible_template_module/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/practices','https://blog.alta3.com/tags/programming/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/nasa','https://blog.alta3.com/tags/nasa/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/%23programmng','https://blog.alta3.com/tags/programmng/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+eos+banner','https://blog.alta3.com/tags/eos-banner/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual+box','https://blog.alta3.com/tags/virtualbox/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/windows+subsystem','https://blog.alta3.com/tags/wsl2/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible+switch+configuration','https://blog.alta3.com/tags/ansible_switch_configuration/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/windows%20subsystem','https://blog.alta3.com/tags/wsl2/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual%20machines','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual%20machine','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/virtual%20box','https://blog.alta3.com/tags/vm/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Restful%20API','https://blog.alta3.com/tags/rest/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python%20training','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/python%20programming','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/#python','https://blog.alta3.com/tags/python/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/#programmng','https://blog.alta3.com/tags/programming/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/private%20key','https://blog.alta3.com/tags/id_rsa/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/online%20ansible%20training','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Network%20Objects','https://blog.alta3.com/tags/network/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/linux%20tutorial','https://blog.alta3.com/tags/linux/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes%20tutorial','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes%20training','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/kubernetes%20cluster','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/key%20gen','https://blog.alta3.com/tags/id_rsa/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/installing%20kubernetes','https://blog.alta3.com/tags/kubernetes/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/github%20keys','https://blog.alta3.com/tags/github/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/api%20design','https://blog.alta3.com/tags/api/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/Ansible%20Tutorial','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20tutorial','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20training','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20template%20module','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20template','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20inventory','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20hosts','https://blog.alta3.com/tags/ansible/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20eos%20banner','https://blog.alta3.com/tags/eos/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/tag/ansible%20certification','https://blog.alta3.com/tags/ansible/',301);
+
+-- blog category
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/category/youtube','https://blog.alta3.com/tags/youtube/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/category/how-to','https://blog.alta3.com/tags/how_to/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/category/videos','https://blog.alta3.com/tags/video/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('blog-tag','/blog/category/blog','https://blog.alta3.com/',301);
+
+-- instructors
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/zach','/instructors/9c932d8e-177a-44af-9edf-0fe0b0fa30fd',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/tim', '/instructors/85f3b9ca-e529-4377-8701-4cf5d54b7024',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/tim-1', '/instructors/85f3b9ca-e529-4377-8701-4cf5d54b7024',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/chad','/instructors/09dda129-d46e-4cb1-a22c-440e045885b0',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/stu', '/instructors/fd8397ea-bb40-41ad-974f-9b415d19bf64',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/hutch','/instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/hutch-copy','/instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/hutch-1','/instructors/17eb0fd5-2f7e-42f3-9351-37a17170e301',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/jason','/instructors/e0388f28-2f33-44a3-91b5-1d36ac3476d7',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/paul','/instructors/7a26aba0-5747-47f8-bc30-e3e6dc90004b',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/rob', '/instructors/adadf1ca-bbce-4a1e-bf4c-c3a14f64e290',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/sean','/instructors/7eef3cff-369a-4a11-a081-0ac8f8bcb387',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('instructor','/talia','/instructors',301);
+
+-- courses
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/3-7-python-basics','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/8-2-to-8-13-py-for-sde','/courses/tlg-sde-python',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/Avaya_SIP_Training.html','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/DEVOPS','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/ansible-training-1','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-5g','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-pyb','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-pyb-1','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-pyna-202','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-pyna-202-1','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-python-201','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/certification-python-201-1','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/virtual-sip-training/','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/devops.','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/labs/sdn/','/courses/sdn',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/march-suse-rancher-webinar-1','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/napya','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/new-page','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/on-demand-courses-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-5G','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-5g','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-5g-courses','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-5g-overview','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-5g-overview/','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-aa','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ai-chat-bard','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ans','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-1','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-101','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-102','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-2','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-202','/courses/ansible-202-server',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-202-1','/courses/ansible-202-server',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-202-server','/courses/ansible-202-server',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-203','/courses/ansible-203-windows',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-203-windows','/courses/ansible-203-windows',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-302','/courses/awx',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-302-1','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-ai','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-ai-1','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansible-training-dell','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ansidell','/courses/ansidell',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-api-python-training','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-automation-python-ansible-training','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-automation-python-ansible-training-1','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-avaya-training','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-avaya-trainingThis%20video','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-awx','/courses/awx',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ceph','/courses/ceph',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ci/cd-pipelines','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cka','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cka-training%C2%A0-%C2%A0virtual%20live%20training%20-%205-9%20June%202023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cka-training','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cka-training-1','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cks','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-crush-the-ckad','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-crush-the-ckad-exam','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-deploying5g','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-deploying5g-1','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-devops-foundations-training','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-devsecops','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-django','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-github','/courses/github',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-github-training','/courses/github',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-gitlab','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-gitlab-training','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-gitlab-training-1','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-golang-ai','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-golang-ai-1','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-golang-training','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-golang-training-1','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-idswots','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ipsec-training','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-jenkins-training','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-k8s','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-kubernetes-cka','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-kubernetes-ckad','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-kubernetes-ckad-1','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-linux-4-dev','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-linux-training','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-mans','/courses/mans',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-mastering-ansible-training','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-mastering-ansible-training-1','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-microservices-training','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-nab','/courses/nab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-napya','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-natural-language-ai','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-natural-language-ai-1','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-natural-language-ai-delete','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-natural-language-ai/','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-network-automation','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-opensource-ai','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-opensource-ai-1','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-opensource-ai-dell','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-packer','/courses/packer',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-prompt-engineering','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-py-datasci','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-pyb','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-pyna','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-python-ai','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-python-ai-1','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-python-basics-training','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-python-network-automation','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-rancher-training','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sd-wan','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sdn','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sdn-training','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sdn-trainingnopvc','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sip','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sk8s','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-suse-k8s','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-suse-k8s-1','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-tcp-ip','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-terraform','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-terraform-102','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-terraform-103-paloalto','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-terraform-104-fortinet','/courses/auto-fortinet-terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-terraform-special','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-training-data-sciences','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-volte','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocode-ai','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodeai','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-1','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-bard','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-chatgpt','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-chatgpt-1','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-watson','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-zerocodechatbots-watson-1','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overviewansible-for-dbas','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overviewjenkins','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overviewpython-training-data-sciences','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overviewsdwantraining','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/pure-storage-terraform','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/rancher-training','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/s/Mastering-Ansible-873z.pdf','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-5g','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-ai-bard','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-ansible-training','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-ansible-training-dell','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-api-python-training','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-certified-kubernetes-training','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-certified-kubernetes-training-1','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-cks','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-django','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-gitlab-training','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-ipsec-training','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-jenkins-training','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-kubernetes-ckad','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-labs','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-linux-training','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-mans','/courses/mans',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-microservices-training','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-network-automation-training','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-network-automation-training-1','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-nlp-ai','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-nlp-ai-1','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-os-generative-ai','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-prompt-engineering','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-python-automation-training','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-python-basics-training','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-python-data-sciences-training','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-python-data-sciences-training-1','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-rancher-training','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-rancher-training-1','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-sdn-training','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-sip','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-suse-k8s-training','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-terraform','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-volte','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/5g-essentials-online-live-class-august27-28','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/5g-essentials-online-live-class-nov2020','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/5g-essentials-self-paced-course','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/ansible-essentials-self-paced','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/apis-and-api-design-with-python-june-1-5-jmz9w','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/apis-and-api-design-with-python-nov2020','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/avaya-aura-self-paced-course','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/ipsec-self-paced-course','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/kubernetes-bootcamp-online-live-class-august31','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/kubernetes-bootcamp-online-live-class-dec2020','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/kubernetes-bootcamp-online-live-class-oct2020','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/kubernetes-bootcamp-self-paced','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/network-automation-with-python-and-ansible-online-live-class-oct2020','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/2z334d2ojyyeh9u04uhj2oa1wsfmg5','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-apr2022','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-april2021','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-aug2023','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-august27-28','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-dec2021','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-feb2021','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-feb2023','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-jan2021','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-jan2022','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-june2021-k5rbs','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-may2023','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-nov2020','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-nov2023','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-online-live-class-sept2021','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/5g-essentials-self-paced-course','/courses/5g',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aXBzZWMtc2','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/agile-8-2021-w9dhj-a8sad','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/agile10-2021-w9dhj','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-aug2023','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-feb2023','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-feb2024','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-feb2024-r3ptk','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-june2023-f8wt8','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-may2022','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-may2023','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-may2024','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-nov2022','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-nov2023','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-online-sept2023-ynbsl','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-self-paced','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-self-paced-ans2021','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-essentials-self-paced-nov2020','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-manual','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-palo-alto-aug2024','/courses/auto-paloalto-pa',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ansible-practice-labs','/courses/ansible-101',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-april2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-aug2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-dec2022','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-dec2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-feb-2021','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-feb2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-jan2022','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-jan2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-jan2024-59pay','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-july2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-june2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-march2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-may2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-nov2021','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-nov2021-f5ebn','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-oct2023','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-oct2023-t7Xr8','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-sept2021','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-design-with-python-sept2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/api-practice-labs','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/apis-and-api-design-with-python-april2021','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/apis-and-api-design-with-python-june-1-5-jmz9w','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/apis-and-api-design-with-python-june2021','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/apis-and-api-design-with-python-nov2020','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/appdev-august2024','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/appdev-june2024','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/appdev-oct2024','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/avaya-aura-self-paced-course','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/c98wf6-april2024','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/c98wf6-june2024','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/c98wf6-may2024','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/certified-ethical-hacker-may2021','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/certified-ethical-hacker-v10','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/certified-kubernetes-administrator-labs','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ci/cd/july-2024','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ci/cd/oct2024','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-12-2022','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-april2022','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-april2023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-april2024','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-aug2023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-aug2024','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-dec2023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-feb-2023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-feb2021-bgrm8','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-feb2024','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-june2023','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-june2024','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-nov2021','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-oct2023-6r888','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-oct2024','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-online-live-class-sep2021-w7p82','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-practice-labs','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-self-paced-5fj6w','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cka-selfpaced','/courses/cka',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-4-2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-5-2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-april2024','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-aug2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-aug2023-k2uEG','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-august2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-december2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-feb2024','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-jully2024','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-june','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-nov2023','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cks-sept2024','/courses/cks',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/crush-the-ckad','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/dcucai-april2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/dcucai-may2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/deploying5g-online-live-class-12-21','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/deploying5g-online-live-class-april2022','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/deploying5g-online-live-class-jan2022','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/devops-8-2021-w9dhj','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/devops-9-28-21','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/devops-foundations-10-212021-jd5t2-cjlzd','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/devops-foundations-9-212021-jd5t2','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/devops-foundations-9-7-2021','/courses/devops-bootcamp',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django-8-2023','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django-aug2023','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django-nov2023','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django-sept2023','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/django-training-may2024','/courses/django',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/gitlab-training-jan2022','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/gitlab-training-march2022','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/gitlab-training-oct2021','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/gitlab-training-oct2021-9hkpn-Bhi6h','/courses/gitlab',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/go-practice-labs-3678w','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-aug2024','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-august2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-june-2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-june2024','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-june23','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-march2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-march2024','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-may2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-nov2021','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-nov2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-oct2023','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-oct2023-qNrJL','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/golang-training-aug2022','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/intucxs-april2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/intucxs-june2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/intucxs-march2024','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/ipsec-self-paced-course','/courses/tcp-ip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-aug2021','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-dec2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-feb2022','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-jan-2021','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-jan2022','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-june2024','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-june23','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-march2020','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-march2024','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-oct2021','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-practice-labs','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-sept2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-sept2024','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-training-dec2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-training-june2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-training-mar2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkins-training-sept2023','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkinsmay2021','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/jenkinsnov2020','/courses/jenkins',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/k8s-ckad-practice-labs','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-aug2021','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-august31','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-dec2020','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-jan2021','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-nov2021','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-oct2020','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-online-live-class-spet2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-bootcamp-self-paced','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-ckad-online-class-dec2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-ckad-online-class-sept2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-ckad-online-live-class-dec2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-ckad-online-live-class-sept2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-ckad-online-live-class-sept2023-TSsSF','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-april2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-april2024','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-aug2024','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-dec2022','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-jan-2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-jan2024','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-july-2024','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-july2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-july2023-dg8bl','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-june2024','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-nov2022','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-oct-2021','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetes-online-live-class-oct2023','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/kubernetesonlineliveclassapril2022','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-1-27-2021','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-aug2021','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-jan2022','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-june2021','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-mar2023','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-march2021','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-march2022','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-class-oct2021','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-dec2023','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-june2023','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-online-live-sept2023','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/microservices-practice-labs','/courses/microservices',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-aug','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-dec2023','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-jan2024','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-july2024','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-june2023','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-may2024','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-may2024-zlah6','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-oct2023','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/napya-onlinelive','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-online-live-class-aug2022','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-online-live-class-nov2022','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-python-ansible-practice-labs','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-april2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-aug2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-dec2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-feb2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-june-2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-oct2020','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/network-automation-with-python-and-ansible-online-live-class-oct2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/nlp-ai','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/nlp-ai-10-5-23','/courses/natural-lang-apis',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-11-6-23','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-9-19-23','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-9-23','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-aug2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-feb2024','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-july2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/os-generative-ai-may2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/packer-training','/courses/packer',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-10-12-23','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-11-20-23','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-8-24-23','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-april24','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-aug2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-jan2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-nov-23','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-ai-oct2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pe-june-2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pyai-april2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pyai-aug2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pyai-jan2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pyai-july2024','/courses/ai-gpu',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-april2022','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-april2023','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-aug2021-jjl47','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-dec2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-jan-2023','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-jan2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-jul2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-march2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-may2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-nov2020','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-nov2021-swamm','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-class-oct2021','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-dec2023-yp2xk','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-july2023','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-july2023-tpzh2','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-july2024','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-june2024','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-march2024','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-nov2024','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-oct2023','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-online-live-sept2024','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-basics-self-paced','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-network-automation-self-paced','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-networking-aug2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-networking-dec2023-8j2rs','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-networking-june2023-ccftf','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-networking-march2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-networking-oct-2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-practice-labs','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python-practice-labs-9t8mr','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python203-ds','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python203-ds-7-2023','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/python203-ds-oct2023','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonds-july2023','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonds-oct2023','/courses/py-datasci',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-aug2021','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-aug2022','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-aug2024','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-july2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-june2024','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-mar2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-march2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-march2024','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-may2022','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-may2022-b2r29','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-may2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-nov2023','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/pythonnetworautomation-sept2022','/courses/pyna',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/red-hat-system-administrator-online-live-jan2021','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/red-hat-system-administrator-online-live-july2021','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/red-hat-system-administrator-self-paced','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/rhcsa-oct2021','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/rhel-practice-labs','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sd-wan-online-live-class-oct-2021','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sdn-practice-labs','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sdnnfv-online-live-class-oct2020','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sdnnfv-self-paced','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sdwots-april','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sdwots-june2024','/courses/sd-wan',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/self-paced-terraform-iac-course','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-essentials-online-live-class-april2021','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-essentials-online-live-class-dec2020','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-essentials-online-live-july2021','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-essentials-online-live-oct2021','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-apr2024','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-dec-2021','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-dec2024','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-feb-2023','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-feb2024','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-july2023','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-june2024','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-may2023','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-oct2023','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-online-live-sept2024','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sip-self-paced','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/sp-ansible-201','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-april2024','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-aug2021','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-aug2023','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-dec2021','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-dec2021/','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-dec2022','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-jan2022','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-jan2024','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-july2024','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-mar2023','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-may2022','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-may2023','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-nov2023','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-oct2021','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-oct2022','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-october2024','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-k8s-sept2022','/courses/sk8s',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-apr2024','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-aug2021','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-aug2022','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-aug2023','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-dec2021','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-jan2024','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-july2024','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-mar2023','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-may2022','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-may2023','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-may2023-dpk8d','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-nov2023','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-oct2021','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-rancher-october2024','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/april2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/aug-2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/aug2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/jan2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/jan2024','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/june2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/june2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/mar2024','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/march2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/may-2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/may2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/nov2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/oct-2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/oct2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform/sept2023','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform102/august2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/terraform102/june2024','/schedule?search=terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/tf-selfpaced','/courses/terraform',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/volte-and-the-ims-online-training-livesept-584p6mar2022','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/volte-and-the-ims-onlinelivesept','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/volte-and-the-ims-self-paced-course','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/volte-online-training-june2021','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/zerocode-10-2024','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/zerocode-4-2024','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/zerocode-6-2024','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/zerocode-8-2024','/courses/ai-zero-code',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/zerocode-ai-googlebard','/courses/ai-app-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/python-basics-online-live-class-nov2020','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/python-basics-self-paced','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/red-hat-system-administrator-self-paced','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/sdnnfv-self-paced','/courses/sdn',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/sip-essentials-online-live-class-dec2020','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/sip-self-paced','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/volte-and-the-ims-onlinelivesept','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/volte-and-the-ims-self-paced-course','/courses/volte',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/storedeploying5g','/courses/5g-deploy',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/storegolangtraining','/courses/golang',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/suse-linux-rancher-k8s','/courses/rancher',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/training/sip-interoperability-training/','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/training/sip-training/','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/training/virtual-sip-training','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/training/virtual-sip-training/','/courses/sip',301);
+
+-- openstack - defunct course - remove (404) in 2025
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/openstack','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/labs/openstack','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/labs/openstack/','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/labs/openstack/10/','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/labs/openstack/39','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-openstack-training','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-os','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-openstack-training','/courses?category=Infrastructure',301);
+
+-- course categories
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/ai-training','/courses?category=AI',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/ansible-training','/courses?category=Ansible',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/cisco-training','/courses?category=Networking',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/cloud-training','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/devops','/courses?category=DevOps',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/docker-training','/courses?category=DevOps',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/kubernetes','/courses?category=Kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/programming-training','/courses?category=Programming',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('categories','/telecom-courses','/courses?category=Telecom',301);
+
+-- posters
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/ansible.pdf','https://static.alta3.com/posters/ansible.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/git.pdf','https://static.alta3.com/posters/git.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/k8s.pdf','https://static.alta3.com/posters/k8s.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/python3.pdf','https://static.alta3.com/posters/python3.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/regex.pdf','https://static.alta3.com/posters/regex.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/sip.pdf','https://static.alta3.com/posters/sip.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/terraform.pdf','https://static.alta3.com/posters/terraform.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/tmux','https://static.alta3.com/posters/tmux.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/tmux.pdf','https://static.alta3.com/posters/tmux.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/vim.pdf','https://static.alta3.com/posters/vim.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/yaml','https://static.alta3.com/posters/yaml.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/yaml.pdf','https://static.alta3.com/posters/yaml.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/ansible.pdf','https://static.alta3.com/posters/ansible.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/git.pdf','https://static.alta3.com/posters/git.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/k8s.pdf','https://static.alta3.com/posters/k8s.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/python3.pdf','https://static.alta3.com/posters/python3.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/regex.pdf','https://static.alta3.com/posters/regex.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/sip.pdf','https://static.alta3.com/posters/sip.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/terraform.pdf','https://static.alta3.com/posters/terraform.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/tmux.pdf','https://static.alta3.com/posters/tmux.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/vim.pdf','https://static.alta3.com/posters/vim.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/static/posters/yaml.pdf','https://static.alta3.com/posters/yaml.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/SIP-Essentials-Training.pdf','https://static.alta3.com/outlines/sip/sip.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/regex-7dg3.pdf','https://static.alta3.com/outlines/pyb/pyb.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/Python-for-Data-Sciences.pdf','https://static.alta3.com/outlines/py-datasci/py-datasci.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/Python-3-Poster.pdf','https://static.alta3.com/posters/python3.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/python3pkgs-zn97.pdf','https://static.alta3.com/posters/python3pkgs.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/linux-poster.pdf','https://static.alta3.com/courses/5g/info/linux.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/Linux.pdf','https://static.alta3.com/courses/5g/info/linux.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/git-y46g.pdf','https://static.alta3.com/posters/git.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/Ansible-Poster.pdf','https://static.alta3.com/posters/ansible.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/5G-Essentials.pdf','https://static.alta3.com/outlines/5g/5g.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/5G-Acronyms-LS.pdf','https://static.alta3.com/courses/5g/info/5G-Acronyms.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/python3pkgs.pdf','https://static.alta3.com/posters/python3pkgs.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/yaml-yft4.pdf','https://static.alta3.com/posters/yaml.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/VoLTE-IMS-Course-Outline.pdf','https://static.alta3.com/outlines/volte/volte.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/s/vim-t4xp.pdf','https://static.alta3.com/posters/vim.pdf',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/poster','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/poster/','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/poster/*','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('poster','/posters/*','https://blog.alta3.com/posters/',301);
+
+-- to other domains
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blog','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blog/','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blog/*','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blogs','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blogs/','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/blogs/*','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/cloud-devops-tutorials','https://blog.alta3.com/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/downloads','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/downloads/','https://blog.alta3.com/posters/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/labs','https://live.alta3.com',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/lms','https://live.alta3.com',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/login','https://sso.alta3.com',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('different-domain','/posters','https://blog.alta3.com/posters/',301);
+
+-- contact
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/DEMO','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/alta3-practice-lab-environments','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/author/hfryer/','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/contact','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/contact/','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/demo','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/free-course-trials','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/free-course-trials-thank-you','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/sales','/contact-us',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('contact','/visit','/contact-us',301);
+
+-- about
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('about','/about-us','/about',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('about','/aboutj','/about',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('about','/api/what-is-live','/about',301);
+
+-- home
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/cart','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/certificates','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/dashboard','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/extra','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home-1','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home-1-2','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home-2','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home-copy','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/home-old','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/research','/about',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/testimonials','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/users','/',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('primary','/wiki','/',301);
+
+-- courses
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/alta3-research-course-portfolio','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/alta3-research-course-portfolio-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/alta3-research-course-training','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/cloud','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/cloud-training-','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/cloud-training-2','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/courses-accordian','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/on-demand-courses-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/portfolio-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/portfolio-1/project-one-f5w4d-wcrse','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/portfolio-2','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/search','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/store','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/store-2','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/store/labs','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-courses','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-courses-1','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-courses-2','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-courses-2021','/courses',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('courses','/training-courses-old','/courses',301);
+
+-- careers
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('careers','/instructor-application','/careers',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('careers','/instructor-application-1','/careers',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('careers','/sales-application','/careers',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('careers','/sales-applicatiom','/careers',301);
+
+-- events
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/events-1','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/events-list','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/events-online-training','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/july-sles-webinar','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/kubernetes-5g-webinar','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/kubernetes-in-the-5g-network-webinar','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/march-suse-rancher-webinar','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('events','/may-ansible-awx-webinar','/schedule',301);
+
+-- offereing types type
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/classroom-live','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/events-list?category=Webinar','/schedule',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/on-demand-courses','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/manual','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/online-live','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/p/subscription-mnthly','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/p/subscription-yearly','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/self-paced','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/virtual','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/store/webinar','/offering-types',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('offerings','/subscription-services','/offering-types',302);
+
+-- NOTE: risky, could collide with future course codes
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/avaya','/courses/sip',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/ceph','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/ims','/courses?category=Telecom',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/ipsec','/courses?category=Infrastructure',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/k8s','/courses/kubernetes',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/networks','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/python1','/courses/pyb',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/python2','/courses/napya',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/python3','/courses/api',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/rhcsa','/courses/linux-4-dev',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/courses/sdn','/courses/sd-wan',301);
+
+-- aws
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/aws-training','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-aws-tech','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-awsarchitect','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-awsdevops','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-awssyops','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overviewawsdeveloping','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-awsarchitect','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-awsdeveloping','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-awsdevops','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-awssysops','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-awstech','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-423','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-aug-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-aug31','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-aug32021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-4-26-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-4-5-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-42023','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-5-17-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-6-28-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-apr2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-aug18','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-aug2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-jan10','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-jan10-ny84t','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-jan2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-oct2020','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-class-sept28','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-july20','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-nov-21','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-oct-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/architecting-on-aws-online-live-sept2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-techessentials-april2023','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-techessentials-feb20','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-techessentials-jan30','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-techessentials-jan9','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-05-16-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-6-27','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-8-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-apr2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-aug17','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-jan2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-july2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-june2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-may2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-nov2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-oct19','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-online-live-class-oct2023','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentials-sept-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentialsoct2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/aws-technical-essentialsoct2021-ny3rx','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/big-data-on-aws-online-live-class-apr2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/big-data-on-aws-online-live-class-dec8','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/big-data-on-aws-online-live-class-oct13','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-4-26-22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-apr2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-aug-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-aug10','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-aug2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-feb28','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-jan31','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-july-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-june2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-june22','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-may2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/developing-on-aws-online-live-class-oct-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-0ct2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-apr2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-aug-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-feb7','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-jan2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-july2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-june2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-mar2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-may2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-may2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-nov2020','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-nov2022','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-oct-2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/system-operations-on-aws-online-live-class-sept2021','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/architecting-on-aws-online-live-class-oct2020','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/aws-technical-essentials-online-live-class-aug17','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/big-data-on-aws-online-live-class-dec8','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/big-data-on-aws-online-live-class-oct13','/courses',302);
+
+-- neuvector 302
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-suse-neuvector','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-suse-neuvector/','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-neuvector','/courses',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/neuvector-training-623','/courses',302);
+
+-- sle 302
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/sle201v15-training','/courses/linux-4-dev',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/suse-sle201v15-linux-sept2021','/courses/linux-4-dev',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-sles-training','/courses/linux-4-dev',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-slesv201v15-training','/courses/linux-4-dev',302);
+
+-- security 302
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-casp','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-casp/','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-ceh','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-cissp','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-comptia-security','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-ceh','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cissp-boot-camp-online-live-dec2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/cissp-boot-camp-online-live-nov2020-737ye','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn-m25px','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-advanced-security-practitioner-casp-dec-gpcyn/','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-casp-april2022','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-casp-sept21','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-apr2022','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-april-2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-aug2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-dec2021-g29rp','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-june2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-march-2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-march-may-2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-nov2020','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-security-boot-camp-nov2021','/courses?category=Security',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/storecissp','/courses?category=Security',302);
+
+-- docker 302
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-docker','/courses?category=DevOps',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-docker-1','/courses?category=DevOps',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-docker101','/courses?category=DevOps',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-docker101-1','/courses?category=DevOps',302);
+
+-- category 302s
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/programming-training-1','/courses?category=Programming',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-intucsx','/courses?category=Programming',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-java-ai','/courses?category=Programming',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-java-ai-1','/courses?category=Programming',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-c98wf6','/courses?category=Networking',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-dcucai','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-comptia-network','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-comptia-network/','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store-comptia-network','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-network-online-live-nightclassaugust','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-network-online-live-nightclassaugust-5lgcw','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/store/p/comptia-network-online-live-sept-28-oct-2-800-am-to-400-pm-est','/courses?category=Networking',302);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/overview-circleci-training','/courses?category=DevOps',301);
+INSERT OR REPLACE INTO redir (type, src, dst, status) VALUES ('course','/storecirclecitraining','/courses?category=DevOps',301);
+
+COMMIT;
alta3/moved/README.md
@@ -0,0 +1,141 @@
+
+## TODO
+
+- Import sources from:
+ - [x] squarespace sitemap
+ - [x] squarespace redirects
+ - [x] google analytics
+ - [x] blog moved files (redirect.yaml)
+ - [x] google search console
+- [x] blog.alta3.com needs tags or catigories
+ - currently using 302 for:
+ - /blog/tag/* -> blog.alta3.com
+ - /blog/category/* -> blog.alta3.com
+- [x] posters need migrated to blog.alta3.com/posters
+- [ ] aws paths need real target paths
+- [ ] routes with query parameters
+ - /store?tags={search} -> /courses?search={search}
+ - /store?category={search} ->
+
+## References
+
+- https://developers.google.com/search/docs/crawling-indexing/301-redirects
+- https://caddyserver.com/docs/caddyfile/directives/redir
+- https://caddyserver.com/docs/caddyfile/directives/import
+
+## Use
+
+#### Backup
+
+```bash
+mkdir -p backup
+sqlite3 moved.db '.dump redir' > backup/data.sql
+```
+
+#### Test repeatable import
+
+```bash
+sqlite3 moved.db < data.sql
+```
+
+#### caddy fmt output
+
+```bash
+sqlite3 moved.db \
+ '.mode json' \
+ 'select * FROM redir' \
+ | jq -j -r '
+ .[]
+ | "redir ", .src, " ", .dst, " ", .status, "\n"' \
+ > artifacts/alta3.com_redir.caddyfile
+```
+
+#### squarespace sitemap
+
+```bash
+grep "<loc>" source/sitemap.xml \
+ | cut -b 27- \
+ | cut -d "<" -f1 \
+ | xargs -I {} sqlite3 moved.db \
+ 'INSERT INTO redir(src)
+ SELECT x FROM (SELECT "{}" AS x)
+ WHERE NOT EXISTS(SELECT src FROM redir WHERE src = "{}");'
+```
+
+Get null values back out:
+
+```bash
+sqlite3 moved.db 'select src from redir where dst is NULL' > no_redirect/squarespace.txt
+```
+
+#### google analytics
+
+```bash
+cut -d ',' -f 1 source/ga.csv \
+ | tail --lines=+2 \
+ | xargs -I {} sqlite3 moved.db \
+ 'INSERT INTO redir(src)
+ SELECT x FROM (SELECT "{}" AS x)
+ WHERE NOT EXISTS(SELECT src FROM redir WHERE src = "{}");'
+```
+
+Get null values back out:
+
+```bash
+sqlite3 moved.db 'select src from redir where dst is NULL' > no_redirect/ga.txt
+```
+
+#### google search
+
+```bash
+xargs -a source/google_search.txt -I {} \
+ sqlite3 moved.db \
+ 'INSERT INTO redir(src)
+ SELECT x FROM (SELECT "{}" AS x)
+ WHERE NOT EXISTS(SELECT src FROM redir WHERE src = "{}");'
+```
+
+Get null values back out:
+
+```bash
+sqlite3 moved.db 'select src from redir where dst is NULL' > no_redirect/google_search.txt
+```
+
+#### blog sources
+
+```bash
+# find the new path inside the blogs dir
+yq -r -j '.redirects[] | .old, " ", .new, "\n"' < source/redirects.yaml \
+ | xargs -n2 bash -c 'echo -n "$0 "; find . -type f -name $1.md' > blogs.txt
+```
+
+## Testing
+
+#### test all blog dst links
+
+```bash
+sqlite3 moved.db 'select dst from redir where dst like "%blog.alta3.com%";' \
+ | sort -u \
+ | xargs -P0 -I {} curl {} -s -o /dev/null -w "%{http_code} %{url} %{redirect_url}\n" \
+ > test/blog.txt
+```
+
+#### test all non-blog
+
+```bash
+sqlite3 moved.db 'select dst from redir where dst like "%https://%";' \
+ | sort -u \
+ | grep -v "blog.alta3.com" \
+ | xargs -P0 -I {} curl {} -s -o /dev/null -w "%{http_code} %{url} %{redirect_url}\n" \
+ > test/domains.txt
+```
+
+#### test all relative paths
+
+```bash
+sqlite3 moved.db 'select dst from redir;' \
+ | sort -u \
+ | grep -v "https://" \
+ | xargs -I {} curl https://wwww.alpha.alta3.com{} -s -o /dev/null -w "%{http_code} %{url} %{redirect_url}\n" \
+ > test/relative.txt
+```
alta3/notam/.env
@@ -0,0 +1,1 @@
+export GITHUB_TOKEN=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
alta3/notam/main.go
@@ -0,0 +1,45 @@
+package main
+
+import (
+ "fmt"
+ "io/ioutil"
+ "net/http"
+ "os"
+ "time"
+)
+
+// curl -H "Authorization: token ${GITHUB_TOKEN}" -H "Accept: application/vnd.github.v3+json" "https://api.github.com/search/issues?q=" | jq .items[].title | sort
+
+func main() {
+
+ token := os.Getenv("GITHUB_TOKEN")
+ url := "https://api.github.com/search/issues"
+ accept := "application/vnd.github.v3+json"
+ auth := fmt.Sprintf("token %s", token)
+ search := "repo:alta3/labs+state:open"
+
+ c := http.Client{Timeout: time.Duration(1) * time.Second}
+ req, err := http.NewRequest("GET", url, nil)
+ if err != nil {
+ fmt.Printf("Error %s", err)
+ return
+ }
+ req.Header.Set("Authorization", auth)
+ req.Header.Set("Accept", accept)
+
+ q := req.URL.Query()
+ q.Add("q", search)
+ q.Add("page", "1")
+ q.Add("per_page", "100")
+ req.URL.RawQuery = q.Encode()
+ fmt.Println(req.URL)
+
+ resp, err := c.Do(req)
+ if err != nil {
+ fmt.Printf("Error %s", err)
+ return
+ }
+ defer resp.Body.Close()
+ body, err := ioutil.ReadAll(resp.Body)
+ fmt.Printf("Body : %s", body)
+}
alta3/notam/README.md
@@ -0,0 +1,3 @@
+# NOTAM
+
+Notice to Alta3 Missions
alta3/ssh-copy-id-from-github/lib/client.py
@@ -0,0 +1,81 @@
+import sys
+
+import asyncio
+from asyncio.exceptions import TimeoutError
+
+import aiohttp
+from aiohttp.client_exceptions import ClientConnectorError
+
+import logging
+
+from typing import List, Optional
+
+
+class BaseClient:
+ def __init__(
+ self,
+ *,
+ host,
+ path,
+ port="",
+ is_ssl=True,
+ timeout=5,
+ retries=6,
+ retry_wait=1,
+ max_timeout=300,
+ max_retry_wait=300,
+ ):
+ self.is_ssl = is_ssl
+ self.host = host
+ self.port = port
+ self.path = path
+ self.timeout = timeout
+ self.retries = retries
+ self.retry_wait = retry_wait
+ self.scheme = "https" if self.is_ssl else "http"
+ self.url = f"{self.scheme}://{self.host}:{self.port}{self.path}"
+ self.logger = logging.getLogger("aiohttp.internal")
+ self.max_timeout = max_timeout
+ self.max_retry_wait = max_retry_wait
+
+ async def retry_after_wait(self, err, func):
+ if self.retries > 0:
+
+ msg = f"Sleeping {self.retry_wait}s. {self.retries} retries remaining"
+ self.logger.warning(msg)
+ await asyncio.sleep(self.retry_wait)
+
+ self.retries = self.retries - 1
+ self.retry_wait = min(self.retry_wait * 2, self.max_retry_wait)
+ return await func()
+ else:
+ msg = f"Retries exhausted"
+ self.logger.error(msg)
+ return (err, None)
+
+ async def get_data(self):
+
+ msg = f"Fetching data from {self.url}"
+ self.logger.info(msg)
+ ct = aiohttp.ClientTimeout(total=self.timeout)
+ async with aiohttp.ClientSession(timeout=ct) as session:
+
+ try:
+ async with session.get(self.url) as resp:
+ data = await resp.json()
+ return (None, data)
+
+ except ClientConnectorError as err:
+ self.logger.error(err)
+ return await self.retry_after_wait(err, self.get_data)
+
+ except TimeoutError as err:
+ self.timeout = self.timeout * 2
+ self.logger.error(
+ f"Request timed out. Retrying with {self.timeout}s timeout"
+ )
+ return await self.retry_after_wait(err, self.get_data)
+
+ except Exception as err:
+ self.logger.error(err)
+ return (err, None)
alta3/ssh-copy-id-from-github/.gitignore
@@ -0,0 +1,3 @@
+__pycache__
+venv
+*.swp
alta3/ssh-copy-id-from-github/README.md
@@ -0,0 +1,36 @@
+# `ssh-copy-id-from-github.py`
+
+```
+(venv) $ python3 ssh-copy-id-from-github.py -h
+usage: ssh-copy-id-from-github.py [-h] [-a] [-O | -f FILE] [-u USER] username [username ...]
+
+positional arguments:
+ username Public key source Github usernames
+
+optional arguments:
+ -h, --help show this help message and exit
+ -a, --annotate store public key source details in key annotation
+ -O, --to-stdout write results to standard output
+ -f FILE, --file FILE store output in FILE
+ -u USER, --user USER store output for USER
+```
+
+### TODO
+
+- [ ] Add more docstrings
+- [ ] Cleanup functions, refactor if defaults are never exposed
+- [ ] Add logging of all actions completed or failed (stderr)
+- [ ] Add last updated date to the serilization header comment
+- [ ] Document how-to: Install in a venv
+- [ ] Document how-to: Do a non-destructive test run (example usage)
+- [ ] Document how-to: Deployment via systemd periodic task
+- [ ] Document how-to: Deployment via cron job
+- [ ] Document how-to: Install via ansible role
+- [ ] Document how-to: Install via pip
+
+### Possible future features
+
+These didn't meet my imediate design goals but would not be difficult to add:
+
+- Preserve current content of authorized_keys file
+- Target remote systems (emulate `ssh-copy-id` functionality or wrap it)
alta3/ssh-copy-id-from-github/requirements.txt
@@ -0,0 +1,2 @@
+aiohttp
+dataclasses_jsonschema
alta3/ssh-copy-id-from-github/ssh-copy-id-from-github.py
@@ -0,0 +1,58 @@
+import argparse
+import asyncio
+from lib.authorized_key import GithubAuthorizedKeyFile
+
+
+def parse_args():
+ parser = argparse.ArgumentParser()
+ parser.add_argument(
+ "users",
+ metavar="username",
+ type=str,
+ nargs="+",
+ help="Public key source Github usernames",
+ )
+ parser.add_argument(
+ "-a",
+ "--annotate",
+ dest="annotate",
+ action="store_true",
+ help="store public key source details in key annotation",
+ )
+ output_group = parser.add_mutually_exclusive_group()
+ output_group.add_argument(
+ "-O",
+ "--to-stdout",
+ dest="stdout",
+ action="store_true",
+ help="write results to standard output",
+ )
+ output_group.add_argument(
+ "-f", "--file", type=str, default=None, help="store output in FILE"
+ )
+ parser.add_argument(
+ "-u",
+ "--user",
+ type=str,
+ default=None,
+ help="store output for USER",
+ )
+ parser.set_defaults(stdout=False, annotate=False)
+ return parser.parse_args()
+
+
+if __name__ == "__main__":
+ args = parse_args()
+ loop = asyncio.get_event_loop()
+ ak = GithubAuthorizedKeyFile(
+ github_users=args.users,
+ annotate=args.annotate,
+ user=args.user,
+ filename=args.file,
+ )
+ loop.run_until_complete(ak.collect_keys())
+
+ if args.stdout:
+ print(ak.serialize())
+ else:
+ ak.writefile()
alta3/traefik-experiments/.gitignore
@@ -0,0 +1,1 @@
+venv
alta3/traefik-experiments/etcd-example-puts.sh
@@ -0,0 +1,6 @@
+export ETCDCTL_API=3
+etcdctl put traefik/http/routers/local-proxy/rule "Host(\`proxy.trustme.click\`)"
+etcdctl put traefik/http/routers/local-proxy/service "local-proxy"
+etcdctl put traefik/http/routers/local-proxy/entrypoints/0 "websecure"
+etcdctl put traefik/http/routers/local-proxy/tls/certResolver "tmc-acme-http"
+etcdctl put traefik/http/services/local-proxy/loadBalancer/servers/0/url "http://127.0.0.1:8080"
alta3/traefik-experiments/fwdAuth.py
@@ -0,0 +1,26 @@
+from aiohttp import web
+
+
+async def default(request):
+ print("DEFAULT")
+ print(request)
+ print(request.headers)
+ return web.HTTPOk(
+ body="HELLO WORLD"
+ )
+
+async def authenticate_request(request):
+ print("AUTH")
+ print(request)
+ print(request.headers)
+ return web.HTTPOk()
+
+# exercised with:
+# - traefik fwdauth pointing at /auth
+# - httpie with a cookie header
+
+if __name__ == "__main__":
+ app = web.Application()
+ app.add_routes([web.get("/", default)])
+ app.add_routes([web.get("/auth", authenticate_request)])
+ web.run_app(app)
alta3/traefik-experiments/srs.py
@@ -0,0 +1,108 @@
+import asyncio
+import socket
+import etcd3
+from aiohttp import web
+
+def find_free_port():
+ s = socket.socket()
+ s.bind(("", 0))
+ port = s.getsockname()[1]
+ s.close()
+ return port
+
+class ClosingHandler:
+ def __init__(self, exit_event):
+ self.exit_event = exit_event
+
+ def next_port():
+ return self.next_port
+
+ async def default(self, request):
+ self.exit_event.set()
+ self.next_port = find_free_port()
+ return web.HTTPOk(
+ body=f"HELLO, GOODBYE {self.next_port}\n"
+ )
+
+#TODO traefik class
+def setup_traefik_srs(etcd):
+ etcd.delete_prefix("traefik/http/routers/srs/")
+ etcd.delete_prefix("traefik/http/services/srs/")
+ etcd.put("traefik/http/middlewares/retry502/buffering/retryExpression", "ResponseCode() == 502")
+ etcd.put("traefik/http/routers/srs/rule","Host(`srs.trustme.click`)")
+ etcd.put("traefik/http/routers/srs/service","srs")
+ etcd.put("traefik/http/routers/srs/entrypoints/0","websecure")
+ etcd.put("traefik/http/routers/srs/tls/certResolver","tmc-acme-http")
+ etcd.put("traefik/http/routers/srs/middlewares/0","retry502")
+ print("etcd srs service setup complete")
+
+def add_traefik_srs_url(etcd, address, port):
+ url_key = f"traefik/http/services/srs/loadBalancer/servers/{port}/url"
+ url_value = f"http://{address}:{port}"
+ etcd.put(url_key, url_value)
+
+def del_traefik_srs_url(etcd, port):
+ url_key = f"traefik/http/services/srs/loadBalancer/servers/{port}/url"
+ etcd.transaction(
+ compare=[
+ etcd.transactions.value("__invalid__") == "__invalid__"
+ ],
+ success=[],
+ failure=[
+ etcd.transactions.delete(url_key)
+ ], )
+ print(etcd.get(url_key))
+
+
+closers = []
+
+# single request server
+async def srs(etcd, port=None):
+
+ # create app handler and closing event
+ closing_time = asyncio.Event()
+ closing_task = asyncio.create_task(closing_time.wait())
+ closers.append(closing_time)
+ handler = ClosingHandler(closing_time)
+
+ # add handler to new application runner
+ app = web.Application()
+ app.add_routes([web.get("/", handler.default)])
+ runner = web.AppRunner(app)
+ await runner.setup()
+
+ # start app on a specific tcp port
+ if port == None:
+ port = find_free_port()
+ site = web.TCPSite(runner, "localhost", port)
+ print(f"{site.name} starting")
+ await site.start()
+
+ # setup traefik access
+ add_traefik_srs_url(etcd, "localhost", port)
+
+ # wait for closing event
+ await closing_task
+ print(f"{site.name} closing")
+ del_traefik_srs_url(etcd, port)
+ await runner.cleanup()
+
+ await srs(etcd, handler.next_port)
+
+
+if __name__ == "__main__":
+ loop = asyncio.get_event_loop()
+ etcd = etcd3.client()
+ setup_traefik_srs(etcd)
+
+ for i in range(100):
+ loop.create_task(srs(etcd))
+
+ try:
+ loop.run_forever()
+ except:
+ print("\nexiting...")
+ finally:
+ for c in closers:
+ c.set() # useful event to also call runner.cleanup
+ etcd.close()
ansible-flask/files/app/__init__.py
@@ -0,0 +1,4 @@
+from flask import Flask
+
+app = Flask(__name__)
+from app import views
ansible-flask/files/app/views.py
@@ -0,0 +1,6 @@
+from app import app
+
+@app.route('/')
+@app.route('/index')
+def index():
+ return "Hello, World!"
ansible-flask/files/run.py
@@ -0,0 +1,3 @@
+#!flask/bin/python
+from app import app
+app.run(host='0.0.0.0', debug = True)
ansible-flask/.gitignore
@@ -0,0 +1,5 @@
+flask
+registry
+ansible
+.vagrant
+Vagrantfile
ansible-flask/flask-ansible.yml
@@ -0,0 +1,58 @@
+---
+- hosts: local
+ vars:
+ root_dir: /vagrant/registry
+ tasks:
+
+ - name: ensure apt dependencies
+ apt: pkg={{ item }} state=latest update_cache=yes cache_valid_time=3600
+ sudo: yes
+ with_items:
+ - git
+ - htop
+ - vim
+ - python-virtualenv
+ tags: install
+
+ - name: make flask app directories
+ file: path={{ item }} state=directory
+ with_items:
+ - registry
+ - registry/app
+ - registry/tmp
+ tags: install
+
+ - name: create virualenv
+ command: virtualenv flask chdir={{ root_dir }}
+ tags: install
+
+ - name: ensure pip dependencies
+ pip: name={{ item.name }} version={{ item.ver }} virtualenv=flask chdir={{ root_dir }}
+ with_items:
+ - { name: flask, ver: 0.9 }
+ - { name: flask-mail, ver: 0.7.6 }
+ - { name: sqlalchemy, ver: 0.7.9 }
+ - { name: flask-sqlalchemy, ver: 0.16 }
+ - { name: flask-whooshalchemy, ver: 0.54a }
+ - { name: flask-wtf, ver: 0.8.4 }
+ - { name: pytz, ver: 2013b }
+ - { name: flask-babel, ver: 0.8 }
+ tags: install
+ - name: ensure pip dependencies
+ pip: name={{ item.name }} virtualenv=/vagrant/flask
+ with_items:
+ - { name: sqlalchemy-migrate, ver: }
+ - { name: flask-login, ver: }
+ - { name: flask-openid, ver: }
+ - { name: flup, ver: }
+ tags: install
+
+ - name: deploy flask app
+ #local_action: command rsync -a files/app/ {{ inventory_hostname }}:{{ root_dir }}/app
+ local_action: command rsync -a files/app/ {{ root_dir }}/app
+ tags: deploy
+ - name: deply flask run.py
+ copy: src=files/run.py dest={{ root_dir }}/run.py mode=0755
+ tags: deploy
+
+ handlers:
ansible-flask/inventory
@@ -0,0 +1,2 @@
+[local]
+localhost ansible_connection=local
ansible-md-pis/ansible.cfg
@@ -0,0 +1,3 @@
+[defaults]
+stdout_callback = dense
+callback_whitelist = timer, profile_tasks
ansible-md-pis/base.yml
@@ -0,0 +1,31 @@
+---
+ - hosts: pis
+
+ tasks:
+ - name: set authorized ssh keys
+ authorized_key:
+ user: ubuntu
+ state: present
+ key: "{{ lookup('file', '/home/sid/.ssh/pis_rsa.pub') }}"
+
+ - name: apt install aptitude
+ apt:
+ name: aptitude
+ become: True
+
+ - name: apt update repo (valid for 1hr)
+ apt:
+ update_cache: True
+ cache_valid_time: 3600
+ become: True
+
+ - name: apt upgrade
+ apt:
+ upgrade: yes
+ become: True
+
+ - name: apt autoremove
+ apt:
+ autoclean: True
+ autoremove: True
+ become: True
ansible-md-pis/hosts
@@ -0,0 +1,18 @@
+
+
+[pis]
+pi01
+pi02
+pi03
+pi04
+pi05
+pi06
+pi07
+pi08
+pi09
+pi00
+
+[pis:vars]
+ansible_ssh_user=ubuntu
+ansible_ssh_private_key_file=~/.ssh/pis_rsa
+ansible_python_interpreter=/usr/bin/python3
ansible-seedbox/group_vars/all.yml
@@ -0,0 +1,46 @@
+---
+# file group_vars/all.yml
+
+# Directory locations
+home: /home/vagrant
+contrib: /home/vagrant/contrib
+
+# contrib sources and extracted dir names
+svn_xmlrpc_c: http://svn.code.sf.net/p/xmlrpc-c/code/stable/
+dir_xmlrpc: xmlrpc-c
+
+src_libtorrent: http://libtorrent.rakshasa.no/downloads/
+ver_libtorrent: libtorrent-0.13.2
+
+src_rtorrent: http://libtorrent.rakshasa.no/downloads/
+ver_rtorrent: rtorrent-0.9.2
+
+src_rutorrent: https://rutorrent.googlecode.com/files/
+ver_rutorrent: rutorrent-3.5
+dir_rutorrent: rutorrent
+
+src_ruplugins: https://rutorrent.googlecode.com/files/
+ver_ruplugins: plugins-3.5
+dir_ruplugins: plugins
+
+# rtorrent config settings
+apache_user: www-data
+port_range: 6666-9999
+scgi_addr: localhost:5000
+
+# rutorrent / apache config settings
+ru_passwd_file: /etc/apache2/rupasswd
+ru_dir: /var/www/rutorrent
+ru_email: webmaster@localhost
+ru_login_prompt: rutorrent login
+
+# ssl config settings
+ssl_dir: /etc/apache2/ssl
+ssl_key: apache.key
+ssl_cert: apache.crt
+ssl_country: AU # default
+ssl_state: .
+ssl_locality: .
+ssl_org: .
+ssl_org_unit: .
+ssl_common_name: rutorrent
ansible-seedbox/roles/build/tasks/main.yml
@@ -0,0 +1,112 @@
+# Get required build dependencies
+- apt: name={{ item }} state=installed update_cache=yes cache_valid_time=3600
+ with_items:
+ - subversion
+ - build-essential
+ - automake
+ - libtool
+ - libcppunit-dev
+ - libsigc++-2.0-dev
+ - libssl-dev
+ - libcurl4-openssl-dev
+ - unzip
+ - unrar-free
+ - curl
+ - libncurses5-dev
+ - apache2
+ - php5
+ - php5-cli
+ - php5-curl
+ - libapache2-mod-scgi
+ - python-passlib
+ # Optional
+ - ffmpeg
+ - mediainfo
+ - screen
+ - vim
+ sudo: yes
+ tags: depends
+
+# Create contribution directory
+- file: path={{ contrib }} state=directory
+
+# Get source
+- subversion: dest={{ contrib }}/{{ dir_xmlrpc }} repo={{ svn_xmlrpc_c }}
+ tags: source
+- get_url: dest={{ contrib}} url={{ item }}.tar.gz
+ with_items:
+ - "{{ src_libtorrent }}{{ ver_libtorrent }}"
+ - "{{ src_rtorrent }}{{ ver_rtorrent }}"
+ - "{{ src_rutorrent }}{{ ver_rutorrent }}"
+ - "{{ src_ruplugins }}{{ ver_ruplugins }}"
+ tags: source
+
+# Extract source
+- command: tar xvf {{ ver_libtorrent }}.tar.gz chdir={{contrib}} creates={{ ver_libtorrent }}
+ tags: source
+- command: tar xvf {{ ver_rtorrent }}.tar.gz chdir={{contrib}} creates={{ ver_rtorrent }}
+ tags: source
+- command: tar xvf {{ ver_rutorrent }}.tar.gz chdir={{contrib}} creates={{ dir_rutorrent }}
+ tags: web
+- command: tar xvf {{ ver_ruplugins }}.tar.gz chdir={{contrib}} creates={{ dir_ruplugins }}
+ tags: web
+
+# Build and install binaries and libs
+- name: Build and Install libtorrent
+ command: chdir={{ contrib }}/{{ ver_libtorrent }} {{ item }} #creates=/usr/bin/libtool
+ sudo: yes
+ with_items:
+ - ./autogen.sh
+ - ./configure
+ - make
+ - make install
+ tags: source
+
+- name: Build and Install xmlrpc
+ command: chdir={{ contrib }}/{{ dir_xmlrpc }} {{ item }} #creates=/usr/local/bin/xmlrpc-c-config
+ sudo: yes
+ with_items:
+ - ./configure --disable-cplusplus
+ - make
+ - make install
+ tags: source
+
+- name: Build and Install rtorrent
+ command: chdir={{ contrib }}/{{ ver_rtorrent }} {{ item }} #creates=/usr/local/bin/rtorrent
+ sudo: yes
+ with_items:
+ - ./autogen.sh
+ - ./configure --with-xmlrpc-c
+ - make
+ - make install
+ - ldconfig
+ tags: source
+
+# Deploy rtorrent and rutorrent to /var/www
+- name: Create rtorrent directories
+ file: path={{ item }} state=directory
+ with_items:
+ - "{{ home }}/rtorrent"
+ - "{{ home }}/rtorrent/session"
+ - "{{ home }}/rtorrent/watch"
+ - "{{ home }}/rtorrent/download"
+ tags: web
+
+- name: Deploy rutorrent
+ command: rsync -a {{ contrib }}/{{ dir_rutorrent }}/ /var/www/rutorrent/
+ sudo: yes
+ tags: web
+
+- name: Deploy rutorrent plugins
+ command: rsync -a {{ contrib }}/{{ dir_ruplugins }}/ /var/www/rutorrent/plugins/
+ sudo: yes
+ tags: web
+
+- file: path=/var/www/rutorrent/
+ state=directory
+ recurse=yes
+ owner={{ apache_user }}
+ group={{ apache_user }}
+ sudo: yes
+ tags: web
+
ansible-seedbox/roles/common/handlers/main.yml
@@ -0,0 +1,5 @@
+---
+# file: roles/common/handlers/main.yml
+- name: restart apache
+ service: name=apache2 state=restarted
+ sudo: yes
ansible-seedbox/roles/common/tasks/main.yml
@@ -0,0 +1,4 @@
+---
+- name: Create readme.md
+ local_action: template src=readme.md.j2 dest=./readme.md
+ tags: documentation
ansible-seedbox/roles/common/templates/readme.md.j2
@@ -0,0 +1,17 @@
+# ansible seedbox
+
+WIP ansible plabook for setting up rtorrent and rutorrent
+
+## Built with:
+| Package | Version | Location |
+| ------- | :-----: | -------- |
+| ansible | 1.3 | http://www.ansibleworks.com |
+| xmlrpc-c | stable | {{ svn_xmlrpc_c }} |
+| libtorrent | {{ ver_libtorrent }} | {{ src_libtorrent }}{{ ver_libtorrent }}.tar.gz |
+| rtorrent | {{ ver_rtorrent }} | {{ src_libtorrent }}{{ ver_rtorrent }}.tar.gz |
+| rutorrent | {{ ver_rutorrent }} | {{ src_rutorrent }}{{ ver_rutorrent }}.tar.gz |
+| ru plugins | {{ ver_ruplugins }} | {{ src_ruplugins }}{{ ver_ruplugins }}.tar.gz |
+
+#### Nice to have TODO
+ * client based ssl certitificat authentication
+ * rsync role for syncing local and remote directories
ansible-seedbox/roles/config/tasks/main.yml
@@ -0,0 +1,115 @@
+---
+# file: roles/config/tasks/main.ym;
+
+## tags: apache
+
+- name: Remove default sites-enabled
+ command: a2dissite default
+ sudo: yes
+ tags: apache
+ notify:
+ - restart apache
+
+- name: Enable apache ssl
+ command: a2enmod ssl
+ sudo: yes
+ tags: apache
+ notify:
+ - restart apache
+
+## tags: ssl, newkey
+
+- name: Create key and cert dir
+ file:
+ path=/etc/apache2/ssl
+ state=directory
+ owner=root
+ group=root
+ sudo: yes
+ tags: ssl
+
+- name: Create openssl conf file
+ template:
+ src=openssl.conf.j2
+ dest={{ ssl_dir }}/openssl.conf
+ owner=root
+ group=root
+ mode=0640
+ sudo: yes
+ tags: ssl
+
+- name: Delete current certs (tag newkey)
+ file: path={{ ssl_dir }}/{{ item }} state=absent
+ with_items:
+ - "{{ ssl_key }}"
+ - "{{ ssl_cert }}"
+ sudo: yes
+ tags: newkey
+
+- name: Create key and cert file
+ command:
+ openssl req -x509 -nodes -days 365 -newkey rsa:2048 -config {{ ssl_dir }}/openssl.conf -keyout {{ ssl_dir }}/{{ ssl_key }} -out {{ ssl_dir }}/{{ ssl_cert}}
+ creates={{ ssl_dir }}/{{ ssl_key }}
+ creates={{ ssl_dir }}/{{ ssl_cert }}
+ sudo: yes
+ tags: ssl
+ notify:
+ - restart apache
+
+## tags: rutorrent
+
+- name: Deploy default rtorrent config
+ template:
+ src=rtorrent.rc.j2
+ dest={{ home }}/.rtorrent.rc
+ tags: ruconfig
+
+- name: Enable scgi for ru/r connectivity
+ file:
+ src=/etc/apache2/mods-available/scgi.load
+ dest=/etc/apache2/mods-enabled/scgi.load
+ state=link
+ sudo: yes
+ tags:
+ - ruconfig
+ - apache
+ notify:
+ - restart apache
+
+- name: Remove old rupassed file
+ file:
+ path={{ ru_passwd_file }}
+ state=absent
+ sudo: yes
+ tags: ruconfig
+
+- name: Create rupasswd file
+ htpasswd:
+ path={{ ru_passwd_file }}
+ name={{ ru_user }}
+ password={{ ru_password }}
+ create=yes
+ state=present
+ owner=root
+ group=www-data
+ mode=0640
+ sudo: yes
+ tags: ruconfig
+
+- name: Create rutorrent virtual directory
+ template:
+ src=rutorrent.j2
+ dest=/etc/apache2/sites-available/rutorrent
+ owner=root
+ group=root
+ sudo: yes
+ tags:
+ - rutorrent
+ - apache
+
+- name: Enable rutorrent site
+ command: a2ensite rutorrent
+ sudo: yes
+ notify:
+ - restart apache
+ tags: rutorrent
ansible-seedbox/roles/config/templates/openssl.conf.j2
@@ -0,0 +1,12 @@
+[ req ]
+prompt = no
+distinguished_name = req_distinguished_name
+
+[ req_distinguished_name ]
+C = {{ ssl_country }}
+ST = {{ ssl_state }}
+L = {{ ssl_locality }}
+O = {{ ssl_org }}
+OU = {{ ssl_org_unit }}
+CN = {{ ssl_common_name }}
+emailAddress = {{ ru_email }}
ansible-seedbox/roles/config/templates/rtorrent.rc.j2
@@ -0,0 +1,6 @@
+directory = {{ home }}/rtorrent/download
+session = {{ home }}/rtorrent/session
+schedule = watch_directory,5,5,load_start={{ home }}/rtorrent/watch/*.torrent
+bind = 127.0.0.1
+port_range = {{ port_range }}
+scgi_port = {{ scgi_addr }}
ansible-seedbox/roles/config/templates/rutorrent.j2
@@ -0,0 +1,25 @@
+<IfModule mod_ssl.c>
+<VirtualHost _default_:443>
+ ServerAdmin {{ ru_email }}
+
+ DocumentRoot {{ ru_dir }}
+ <Directory {{ ru_dir }}>
+ Options Indexes FollowSymLinks MultiViews
+ AuthType Basic
+ AuthName '{{ ru_login_prompt }}'
+ AuthUserFile '{{ ru_passwd_file }}'
+ Require valid-user
+ #Require {{ ru_user }}
+ AllowOverride None
+ Order allow,deny
+ allow from all
+ </Directory>
+
+ ErrorLog ${APACHE_LOG_DIR}/error.log
+ LogLevel warn
+ CustomLog ${APACHE_LOG_DIR}/access.log combined
+ SSLEngine on
+ SSLCertificateFile {{ ssl_dir }}/{{ ssl_cert }}
+ SSLCertificateKeyFile {{ ssl_dir }}/{{ ssl_key }}
+
+</VirtualHost>
ansible-seedbox/roles/config/vars.yml
@@ -0,0 +1,3 @@
+---
+# file: roles/config/vars.yml
+
ansible-seedbox/.gitignore
@@ -0,0 +1,2 @@
+my_hosts
+.swp
ansible-seedbox/build.yml
@@ -0,0 +1,5 @@
+---
+- hosts: seedbox
+ roles:
+ - common
+ - build
ansible-seedbox/config.yml
@@ -0,0 +1,14 @@
+---
+- hosts: seedbox
+ roles:
+ - config
+ - common
+ vars_prompt:
+ - name: ru_user
+ prompt: "rutorrent user"
+ private: no
+ - name: ru_password
+ prompt: "rutorrent password"
+ private: yes
+ confirm: yes
+
ansible-seedbox/readme.md
@@ -0,0 +1,17 @@
+# ansible seedbox
+
+WIP ansible plabook for setting up rtorrent and rutorrent
+
+## Built with:
+| Package | Version | Location |
+|---|:-:|---|
+| ansible | 1.3 | http://www.ansibleworks.com |
+| xmlrpc-c | stable | http://svn.code.sf.net/p/xmlrpc-c/code/stable/ |
+| libtorrent | libtorrent-0.13.2 | http://libtorrent.rakshasa.no/downloads/libtorrent-0.13.2.tar.gz |
+| rtorrent | rtorrent-0.9.2 | http://libtorrent.rakshasa.no/downloads/rtorrent-0.9.2.tar.gz |
+| rutorrent | rutorrent-3.5 | https://rutorrent.googlecode.com/files/rutorrent-3.5.tar.gz |
+| rutorrent plugins | plugins-3.5 | https://rutorrent.googlecode.com/files/plugins-3.5.tar.gz |
+
+#### Nice to have TODO
+ * client based ssl certitificat authentication
+ * rsync role for syncing local and remote directories
ansible-seedbox/site.yml
@@ -0,0 +1,3 @@
+---
+- include: build.yml
+- include: config.yml
ansible-seedbox/Vagrantfile
@@ -0,0 +1,14 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+Vagrant.configure("2") do |config|
+ config.vm.box = "precise64"
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
+ config.vm.network :private_network, ip: "192.168.111.222"
+ # config.vm.network :public_network
+ #config.vm.provision :ansible do |ansible|
+ # ansible.verbose = true
+ # ansible.playbook = "site.yml"
+ # ansible.inventory_file = "vagrant_hosts"
+ #end
+end
ansible-seedbox/Vagranthost
@@ -0,0 +1,2 @@
+[seedbox]
+192.168.111.222
blog-pelican-source/pelican/content/images/lltq-classes.jpg
Binary file
blog-pelican-source/pelican/content/images/lltq-mood.jpg
Binary file
blog-pelican-source/pelican/content/images/lltq-skills.jpg
Binary file
blog-pelican-source/pelican/content/2011-06-01-eff-tor-challenge-amazon-ec2-free-usage-tier.md
@@ -0,0 +1,70 @@
+Title: EFF Tor Challenge + Amazon EC2 Free Usage Tier
+Date: 2011-06-01 00:00
+Category: Cloud
+Tags: Anonymization, EC2, EFF, Ubuntu, Tor
+Slug: tor-challange-ec2
+Author: bryfry
+Summary: Setup Tor exit node on Amazon EC2 free tier
+
+Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.
+
+What you'll need:
+
+* Amazon AWS Account
+* Some basic Linux know-how
+
+First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.
+
+AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)
+
+* Use the default Instance Properties
+* Create a new Key Pair
+* Create new Security Group (name it something recognizable, like tor)
+* Add SSH + 9001 ports to the security group.
+
+Now that the VPS is up and running login to it, run some updates, install and configure Tor.
+
+ :::bash
+ # replace with your new key name and ec2 address.
+ ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+ sudo apt-get update
+ sudo apt-get upgrade
+
+ # add the tor project repository
+ sudo apt-add-repository \
+ 'deb http://deb.torproject.org/torproject.org maverick main'
+ sudo apt-get update
+
+ # install tor
+ sudo apt-get install tor tor-geoipdb
+
+ # make a backup of the standard config file
+ sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+
+Edit /etc/tor/torrc or create a new config from scratch and make it look like this
+
+ SocksPort 0 # we are not going to make local connections, aka a simple relay
+ ORPort 9001 # what port to advertise for incoming Tor connections
+ Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+ BandwidthRate 300 KB
+ BandwidthBurst 350 KB
+ AccountingStart month 1 00:00
+ AccountingMax 3 GB
+
+The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.
+
+ :::bash
+ screen -S tor
+ /usr/sbin/tor
+
+Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.
+
+When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!
+
+Resources Used:
+
+ * <a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a>
+ * <a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a>
+ * <a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a>
+ * <a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a>
+ * <a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a>
blog-pelican-source/pelican/content/2011-11-26-namecoind-on-ubuntu-11-10-x64.md
@@ -0,0 +1,83 @@
+---
+Title: Namecoin on Ubuntu
+Date: 2011-11-26 00:00
+Category: Tools
+Tags: anonymization, bitcoin, cloud, namecoin, ubuntu
+Slug: namecoint-on-ubuntu
+Author: bryfry
+Summary: Setup Namecoint on Ubuntu
+---
+
+{% img right http://i.imgur.com/RJTsK.jpg 150 150 dot-bit %}
+
+So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.
+
+ * Setup: namecoin version 0.3.24.64-beta
+ * Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop
+
+ :::bash
+ sudo apt-get install git build-essential libssl-dev \
+ libdb4.7++-dev libboost-dev libboost-system-dev \
+ libboost-filesystem-dev libboost-program-options-dev \
+ libboost-thread-dev libglibmm-2.4-dev
+ git clone git://github.com/vinced/namecoin.git
+ cd namecoin/src
+ make -f makefile.unix USE_UPNP=
+
+I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.
+
+If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a>
+
+If you have compilation errors you can read more after the jump.
+
+<!--more-->
+
+Compilation error - libssl
+
+ In file included from auxpow.cpp:4:0:
+ headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+ compilation terminated.
+
+Solution - libssl
+
+ :::bash
+ sudo apt-get install libssl-dev
+
+Compilation error - libdb
+
+ In file included from auxpow.cpp:4:0:
+ headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+ compilation terminated.
+
+Solution - libdb
+
+ :::bash
+ sudo apt-get install libdb4.7++-dev
+
+If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.
+
+ :::bash
+ wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+ sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+
+Compilation error - libboost
+
+ /usr/bin/ld: cannot find -lboost_system
+ /usr/bin/ld: cannot find -lboost_filesystem
+ /usr/bin/ld: cannot find -lboost_program_options
+ /usr/bin/ld: cannot find -lboost_thread
+ /usr/bin/ld: cannot find -lgthread-2.0
+
+Solution - libbost
+
+ :::bash
+ sudo apt-get install libboost-system-dev
+ sudo apt-get install libboost-filesystem-dev
+ sudo apt-get install libboost-program-options-dev
+ sudo apt-get install libboost-thread-dev
+ sudo apt-get install libglibmm-2.4-dev
+
+Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a>
blog-pelican-source/pelican/content/2011-12-07-on-hacking-larssons-folly.md
@@ -0,0 +1,20 @@
+---
+layout: post
+title: "On Hacking: Larsson's Folly"
+categories: Books Ethics Hacking Journalism Stieg Larsson
+published: true
+---
+{% img right http://i.imgur.com/a7jUo.jpg %}
+
+This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).
+
+At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."
+
+The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+{% blockquote %}
+The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.
+{% endblockquote %}
+
+Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.
+
+If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.
blog-pelican-source/pelican/content/2012-04-29-move-minecraft-spawn-with-python.md
@@ -0,0 +1,35 @@
+---
+layout: post
+title: "Move Minecraft Spawn with Python"
+date: 2012-04-29 21:54
+categories: Python Minecraft
+keywords: "Python, Minecraft, NBT, Spawn"
+comments: true
+---
+
+{% img right http://i.imgur.com/uubl0.png 150 150 Minecraft %}
+
+The setup for this post is that in a vanilla Minecraft server there
+isn't a way to set the protection size to `0` (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.
+
+To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a>
+
+``` python spawn-move.py
+from nbt import *
+level = nbt.NBTFile('/<insert.path.here>/world/level.dat','rb')
+level["Data"]["SpawnX"].value = newx
+level["Data"]["SpawnY"].value = newy
+level["Data"]["SpawnZ"].value = newz
+print(level.pretty_tree()) # show changes
+level.write_file('/<insert.path.here>/world/level.dat')
+exit()
+```
blog-pelican-source/pelican/content/2013-03-14-yubikey-ssh.md
@@ -0,0 +1,35 @@
+---
+layout: post
+title: "Yubikey and SSH"
+date: 2012-04-29 21:54
+categories: Yubikey SSH
+keywords: "Yubikey, SSH, authentication"
+comments: true
+published: false
+---
+
+{% img http://www.yubico.com/wp-content/uploads/2012/09/YubiKey_body-602x412.png?119b56 640 412 YubiKEYAuth %}
+
+Target OS: Ubuntu 12.04 LTS
+
+##Install dependencies
+
+ sudo apt-get install libpam-yubico
+ sudo apt-get install libyklient-dev
+
+##Create yubikeyID authorized keys file
+
+ yubikeyid-gen <yubikey OTP> > /etc/yubikeyid
+
+where yuikeyid-gen is these simple bash lines
+
+``` bash yubikeyid-gen
+#!/usr/bin/env bash
+echo -n `whoami`
+echo -n ":"
+echo -n $1 | cut -c 1-12
+```
+
+Your file should look like this
+
+ <user>:<YubiKEY ID>
\ No newline at end of file
blog-pelican-source/pelican/content/2013-11-11-long-live-the-queen-review.md
@@ -0,0 +1,65 @@
+Title: Review - Long Live The Queen
+Date: 2011-11-11 00:00
+Category: Reviews
+Tags: steam, games, os x
+Slug: review-long-live-the-queen
+Author: bryfry
+Summary: Review of Hanako Games' Long Live The Queen
+
+[Long Live The Queen](http://store.steampowered.com/app/251990/?snr=1_702_topsellers_)
+had a sarcastic enough trailer to interest me.
+After spending a few hours playing it I have some positive and negative thoughts to share.
+
+LLTQ is a choose your own adventure style stat management RPG game that follows the 40 weeks prior to Princess Elodie's coronation.
+The game mechanics consist of:
+
+* Examining current skills/mood/outfit
+* Scheduling weekly classes (stat improvement),
+* Choosing weekend activities (mood altering),
+* Interaction sequences (choices).
+
+Read the [wiki](http://en.wikipedia.org/wiki/Long_Live_the_Queen_(video_game)) for more info.
+
+The story is interesting and enough plot elements occur to look past the feminine interfaces.
+I actually couldn't tell if the interfaces were tongue in cheek,
+or if they were actually trying to target a female demographic.
+Either way, it was a fun and playable game that kept my interest for a number of deaths (you die a lot).
+
+My real criticism takes issue with the mechanics that end up being most of the user experience
+Every week you engage in the above mentioned four actions to effect your character's story:
+each interface has issues, but overall they could have been combined into a single view.
+
+The first interface shows the current skills:
+
+
+
+The biggest thing missing in this view
+is which mood is causing the buffs/nurfs shown next to the Class Categories.
+I mostly just fumbled around in the dark,
+manipulating the moods in order to target specific Class Categories,
+but it was far from intuitive.
+
+The next most-frequented interface shows the possible classes to be taken each morning and evening.
+
+
+
+All of these are identical Class Categories and Classes as seen in the skills view,
+but for some reason the interface has been changed.
+I assume this is to make it easier to click and choose,
+however, it ended up being very difficult to remember which course I wanted to take.
+A normal week you need to look at your buff's in order to determine which classes are the best to take (highest multiples).
+I ended up switching back and forth many times, as I couldn't remember the 2nd class I wanted to take after I had found the first.
+There are lots of ways to fix this but at the very least, keeping a similar visual mapping (horizontal / vertical) can really help.
+
+Finally the mood interface is just too big.
+
+
+
+Four sliding scales do not need their own view.
+Which brings these critiques back to the original one:
+All of these choices and views really could be shown in one view.
+Real keyboard shortcuts would help too.
+
+Overall, aside from the frustrations with the interface, the game was fun and playable.
+It was technical and skill optimization focused enough for me to find it interesting,
+but I could also see it being entertaining for others purely for the storytelling aspects.
blog-pelican-source/pelican/develop_server.sh
@@ -0,0 +1,103 @@
+#!/usr/bin/env bash
+##
+# This section should match your Makefile
+##
+PY=python
+PELICAN=pelican
+PELICANOPTS=
+
+BASEDIR=$(pwd)
+INPUTDIR=$BASEDIR/content
+OUTPUTDIR=$BASEDIR/output
+CONFFILE=$BASEDIR/pelicanconf.py
+
+###
+# Don't change stuff below here unless you are sure
+###
+
+SRV_PID=$BASEDIR/srv.pid
+PELICAN_PID=$BASEDIR/pelican.pid
+
+function usage(){
+ echo "usage: $0 (stop) (start) (restart) [port]"
+ echo "This starts pelican in debug and reload mode and then launches"
+ echo "A pelican.server to help site development. It doesn't read"
+ echo "your pelican options so you edit any paths in your Makefile"
+ echo "you will need to edit it as well"
+ exit 3
+}
+
+function alive() {
+ kill -0 $1 >/dev/null 2>&1
+}
+
+function shut_down(){
+ PID=$(cat $SRV_PID)
+ if [[ $? -eq 0 ]]; then
+ if alive $PID; then
+ echo "Killing pelican.server"
+ kill $PID
+ else
+ echo "Stale PID, deleting"
+ fi
+ rm $SRV_PID
+ else
+ echo "pelican.server PIDFile not found"
+ fi
+
+ PID=$(cat $PELICAN_PID)
+ if [[ $? -eq 0 ]]; then
+ if alive $PID; then
+ echo "Killing Pelican"
+ kill $PID
+ else
+ echo "Stale PID, deleting"
+ fi
+ rm $PELICAN_PID
+ else
+ echo "Pelican PIDFile not found"
+ fi
+}
+
+function start_up(){
+ local port=$1
+ echo "Starting up Pelican and pelican.server"
+ shift
+ $PELICAN --debug --autoreload -r $INPUTDIR -o $OUTPUTDIR -s $CONFFILE $PELICANOPTS &
+ pelican_pid=$!
+ echo $pelican_pid > $PELICAN_PID
+ cd $OUTPUTDIR
+ $PY -m pelican.server $port &
+ srv_pid=$!
+ echo $srv_pid > $SRV_PID
+ cd $BASEDIR
+ sleep 1
+ if ! alive $pelican_pid ; then
+ echo "Pelican didn't start. Is the pelican package installed?"
+ return 1
+ elif ! alive $srv_pid ; then
+ echo "pelican.server didn't start. Is there something else which uses port 8000?"
+ return 1
+ fi
+ echo 'Pelican and pelican.server processes now running in background.'
+}
+
+###
+# MAIN
+###
+[[ ($# -eq 0) || ($# -gt 2) ]] && usage
+port=''
+[[ $# -eq 2 ]] && port=$2
+
+if [[ $1 == "stop" ]]; then
+ shut_down
+elif [[ $1 == "restart" ]]; then
+ shut_down
+ start_up $port
+elif [[ $1 == "start" ]]; then
+ if ! start_up $port; then
+ shut_down
+ fi
+else
+ usage
+fi
blog-pelican-source/pelican/fabfile.py
@@ -0,0 +1,60 @@
+from fabric.api import *
+import fabric.contrib.project as project
+import os
+
+# Local path configuration (can be absolute or relative to fabfile)
+env.deploy_path = 'output'
+DEPLOY_PATH = env.deploy_path
+
+# Remote server configuration
+production = 'root@localhost:22'
+dest_path = '/var/www'
+
+# Rackspace Cloud Files configuration settings
+env.cloudfiles_username = 'my_rackspace_username'
+env.cloudfiles_api_key = 'my_rackspace_api_key'
+env.cloudfiles_container = 'my_cloudfiles_container'
+
+
+def clean():
+ if os.path.isdir(DEPLOY_PATH):
+ local('rm -rf {deploy_path}'.format(**env))
+ local('mkdir {deploy_path}'.format(**env))
+
+def build():
+ local('pelican -s pelicanconf.py')
+
+def rebuild():
+ clean()
+ build()
+
+def regenerate():
+ local('pelican -r -s pelicanconf.py')
+
+def serve():
+ local('cd {deploy_path} && python -m SimpleHTTPServer'.format(**env))
+
+def reserve():
+ build()
+ serve()
+
+def preview():
+ local('pelican -s publishconf.py')
+
+def cf_upload():
+ rebuild()
+ local('cd {deploy_path} && '
+ 'swift -v -A https://auth.api.rackspacecloud.com/v1.0 '
+ '-U {cloudfiles_username} '
+ '-K {cloudfiles_api_key} '
+ 'upload -c {cloudfiles_container} .'.format(**env))
+
+@hosts(production)
+def publish():
+ local('pelican -s publishconf.py')
+ project.rsync_project(
+ remote_dir=dest_path,
+ exclude=".DS_Store",
+ local_dir=DEPLOY_PATH.rstrip('/') + '/',
+ delete=True
+ )
blog-pelican-source/pelican/Makefile
@@ -0,0 +1,108 @@
+PY=python
+PELICAN=pelican
+PELICANOPTS=
+
+BASEDIR=$(CURDIR)
+INPUTDIR=$(BASEDIR)/content
+OUTPUTDIR=$(BASEDIR)/output
+CONFFILE=$(BASEDIR)/pelicanconf.py
+PUBLISHCONF=$(BASEDIR)/publishconf.py
+
+FTP_HOST=localhost
+FTP_USER=anonymous
+FTP_TARGET_DIR=/
+
+SSH_HOST=localhost
+SSH_PORT=22
+SSH_USER=vagrant
+SSH_TARGET_DIR=/var/www
+
+S3_BUCKET=my_s3_bucket
+
+CLOUDFILES_USERNAME=my_rackspace_username
+CLOUDFILES_API_KEY=my_rackspace_api_key
+CLOUDFILES_CONTAINER=my_cloudfiles_container
+
+DROPBOX_DIR=~/Dropbox/Public/
+
+DEBUG ?= 0
+ifeq ($(DEBUG), 1)
+ PELICANOPTS += -D
+endif
+
+help:
+ @echo 'Makefile for a pelican Web site '
+ @echo ' '
+ @echo 'Usage: '
+ @echo ' make html (re)generate the web site '
+ @echo ' make clean remove the generated files '
+ @echo ' make regenerate regenerate files upon modification '
+ @echo ' make publish generate using production settings '
+ @echo ' make serve [PORT=8000] serve site at http://localhost:8000'
+ @echo ' make devserver [PORT=8000] start/restart develop_server.sh '
+ @echo ' make stopserver stop local server '
+ @echo ' make ssh_upload upload the web site via SSH '
+ @echo ' make rsync_upload upload the web site via rsync+ssh '
+ @echo ' make dropbox_upload upload the web site via Dropbox '
+ @echo ' make ftp_upload upload the web site via FTP '
+ @echo ' make s3_upload upload the web site via S3 '
+ @echo ' make cf_upload upload the web site via Cloud Files'
+ @echo ' make github upload the web site via gh-pages '
+ @echo ' '
+ @echo 'Set the DEBUG variable to 1 to enable debugging, e.g. make DEBUG=1 html'
+ @echo ' '
+
+html:
+ $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+clean:
+ [ ! -d $(OUTPUTDIR) ] || rm -rf $(OUTPUTDIR)
+
+regenerate:
+ $(PELICAN) -r $(INPUTDIR) -o $(OUTPUTDIR) -s $(CONFFILE) $(PELICANOPTS)
+
+serve:
+ifdef PORT
+ cd $(OUTPUTDIR) && $(PY) -m pelican.server $(PORT)
+else
+ cd $(OUTPUTDIR) && $(PY) -m pelican.server
+endif
+
+devserver:
+ifdef PORT
+ $(BASEDIR)/develop_server.sh restart $(PORT)
+else
+ $(BASEDIR)/develop_server.sh restart
+endif
+
+stopserver:
+ kill -9 `cat pelican.pid`
+ kill -9 `cat srv.pid`
+ @echo 'Stopped Pelican and SimpleHTTPServer processes running in background.'
+
+publish:
+ $(PELICAN) $(INPUTDIR) -o $(OUTPUTDIR) -s $(PUBLISHCONF) $(PELICANOPTS)
+
+ssh_upload: publish
+ scp -P $(SSH_PORT) -r $(OUTPUTDIR)/* $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR)
+
+rsync_upload: publish
+ rsync -e "ssh -p $(SSH_PORT)" -P -rvz --delete $(OUTPUTDIR)/ $(SSH_USER)@$(SSH_HOST):$(SSH_TARGET_DIR) --cvs-exclude
+
+dropbox_upload: publish
+ cp -r $(OUTPUTDIR)/* $(DROPBOX_DIR)
+
+ftp_upload: publish
+ lftp ftp://$(FTP_USER)@$(FTP_HOST) -e "mirror -R $(OUTPUTDIR) $(FTP_TARGET_DIR) ; quit"
+
+s3_upload: publish
+ s3cmd sync $(OUTPUTDIR)/ s3://$(S3_BUCKET) --acl-public --delete-removed
+
+cf_upload: publish
+ cd $(OUTPUTDIR) && swift -v -A https://auth.api.rackspacecloud.com/v1.0 -U $(CLOUDFILES_USERNAME) -K $(CLOUDFILES_API_KEY) upload -c $(CLOUDFILES_CONTAINER) .
+
+github: publish
+ ghp-import $(OUTPUTDIR)
+ git push origin gh-pages
+
+.PHONY: html help clean regenerate serve devserver publish ssh_upload rsync_upload dropbox_upload ftp_upload s3_upload cf_upload github
blog-pelican-source/pelican/pelicanconf.py
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- #
+from __future__ import unicode_literals
+
+AUTHOR = u'bryfry'
+SITENAME = u'bryfry.com'
+SITEURL = ''
+
+TIMEZONE = 'Europe/Paris'
+
+DEFAULT_LANG = u'en'
+
+# Feed generation is usually not desired when developing
+FEED_ALL_ATOM = None
+CATEGORY_FEED_ATOM = None
+TRANSLATION_FEED_ATOM = None
+
+# Blogroll
+LINKS = (('Pelican', 'http://getpelican.com/'),
+ ('Python.org', 'http://python.org/'),
+ ('Jinja2', 'http://jinja.pocoo.org/'),
+ ('You can modify those links in your config file', '#'),)
+
+# Social widget
+SOCIAL = (('You can add links in your config file', '#'),
+ ('Another social link', '#'),)
+
+DEFAULT_PAGINATION = 10
+
+# Uncomment following line if you want document-relative URLs when developing
+#RELATIVE_URLS = True
blog-pelican-source/pelican/pelicanconf.pyc
Binary file
blog-pelican-source/pelican/publishconf.py
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*- #
+from __future__ import unicode_literals
+
+# This file is only used if you use `make publish` or
+# explicitly specify it as your config file.
+
+import os
+import sys
+sys.path.append(os.curdir)
+from pelicanconf import *
+
+SITEURL = ''
+RELATIVE_URLS = False
+
+FEED_ALL_ATOM = 'feeds/all.atom.xml'
+CATEGORY_FEED_ATOM = 'feeds/%s.atom.xml'
+
+DELETE_OUTPUT_DIRECTORY = True
+
+# Following items are often useful when publishing
+
+#DISQUS_SITENAME = ""
+#GOOGLE_ANALYTICS = ""
blog-pelican-source/.gitignore
@@ -0,0 +1,2 @@
+env/
+pelican/output/
blog-pelican-source/pelican.yml
@@ -0,0 +1,34 @@
+---
+- hosts: vagrant
+ user: vagrant
+ vars:
+ pelican_dir: /vagrant/pelican/
+ tasks:
+
+ - name: upgrade
+ apt: upgrade=dist update_cache=yes cache_valid_time=3600
+ sudo: yes
+
+ - name: specific packages (apt)
+ apt: pkg={{item}} state=latest update_cache=yes cache_valid_time=3600
+ sudo: yes
+ with_items:
+ - python-pip
+ - vim
+ - make
+
+ - name: virtualenv via pip
+ pip: name={{item}}
+ sudo: yes
+ with_items:
+ - virtualenv
+
+ - file: path={{pelican_dir}} state=directory
+ - command: virtualenv env chdir={{pelican_dir}}
+
+ - name: specific packages (pip)
+ pip: name={{item}} virtualenv={{pelican_dir}}/env
+ with_items:
+ - pelican
+ - markdown
+
bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/index.html
@@ -0,0 +1,270 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>EFF Tor Challenge + Amazon EC2 Free Usage Tier - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Goal: Setup a Tor Node (Exit) on a Free Usage Tier Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced TOR Challenge …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <article class="post">
+ <h2 class="title">EFF Tor Challenge + Amazon EC2 Free Usage Tier</h2>
+ <div class="meta">
+ <div class="date">Published on:
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2011-06-01T00:00:00-04:00" pubdate data-updated="true">Jun 1<span>st</span>, 2011</time></div>
+ <div class="tags">Tags:
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</div>
+ </div>
+ <div class="entry-content"><p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you’ll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+<span class='line-number'>9</span>
+<span class='line-number'>10</span>
+<span class='line-number'>11</span>
+<span class='line-number'>12</span>
+<span class='line-number'>13</span>
+<span class='line-number'>14</span>
+<span class='line-number'>15</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># replace with your new key name and ec2 address.</span>
+</span><span class='line'>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>sudo apt-get upgrade
+</span><span class='line'>
+</span><span class='line'><span class="c"># add the tor project repository</span>
+</span><span class='line'>sudo apt-add-repository <span class="se">\</span>
+</span><span class='line'> <span class="s1">'deb http://deb.torproject.org/torproject.org maverick main'</span>
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>
+</span><span class='line'><span class="c"># install tor</span>
+</span><span class='line'>sudo apt-get install tor tor-geoipdb
+</span><span class='line'>
+</span><span class='line'><span class="c"># make a backup of the standard config file</span>
+</span><span class='line'>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<figure class='code'><figcaption><span>/etc/tor/torrc</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>SocksPort 0 # we are not going to make local connections, aka a simple relay
+</span><span class='line'>ORPort 9001 # what port to advertise for incoming Tor connections
+</span><span class='line'>Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+</span><span class='line'>BandwidthRate 300 KB
+</span><span class='line'>BandwidthBurst 350 KB
+</span><span class='line'>AccountingStart month 1 00:00
+</span><span class='line'>AccountingMax 3 GB
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>screen -S tor
+</span><span class='line'>/usr/sbin/tor
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node’s nickname.</p>
+
+<p>When your done don’t forget to submit your new node’s nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF’s Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+</div>
+
+<div class="meta">
+
+</div>
+</article>
+
+ <div class="share">
+ <div class="addthis_toolbox addthis_default_style ">
+
+
+ <a class="addthis_button_tweet"></a>
+
+
+ <a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
+
+ <a class="addthis_counter addthis_pill_style"></a>
+ </div>
+ <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid="></script>
+</div>
+
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/index.html
@@ -0,0 +1,286 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Namecoin on Ubuntu 11.10 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="So I setout to try a setup of Namecoin, the sibling to Bitcoin that is used for name/value storage and is the foundation for the dot-bit project. …">
+ <meta name="keywords" content="linix 11.10 Anonymization Bitcoin Cloud Namecoin Ubuntu">
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <article class="post">
+ <h2 class="title">Namecoin on Ubuntu 11.10</h2>
+ <div class="meta">
+ <div class="date">Published on:
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2011-11-26T00:00:00-05:00" pubdate data-updated="true">Nov 26<span>th</span>, 2011</time></div>
+ <div class="tags">Tags:
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</div>
+ </div>
+ <div class="entry-content"><p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install git build-essential libssl-dev <span class="se">\</span>
+</span><span class='line'>libdb4.7++-dev libboost-dev libboost-system-dev <span class="se">\</span>
+</span><span class='line'>libboost-filesystem-dev libboost-program-options-dev <span class="se">\</span>
+</span><span class='line'>libboost-thread-dev libglibmm-2.4-dev
+</span><span class='line'>git clone git://github.com/vinced/namecoin.git
+</span><span class='line'><span class="nb">cd </span>namecoin/src
+</span><span class='line'>make -f makefile.unix <span class="nv">USE_UPNP</span><span class="o">=</span>
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libssl</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>In file included from auxpow.cpp:4:0:
+</span><span class='line'>headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+</span><span class='line'>compilation terminated.
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libssl</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libssl-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libdb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>In file included from auxpow.cpp:4:0:
+</span><span class='line'>headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+</span><span class='line'>compilation terminated.
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libdb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libdb4.7++-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>If that fails …
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn’t have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+</span><span class='line'>sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libboost</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>/usr/bin/ld: cannot find -lboost_system
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_filesystem
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_program_options
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_thread
+</span><span class='line'>/usr/bin/ld: cannot find -lgthread-2.0
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libbost</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libboost-system-dev
+</span><span class='line'>sudo apt-get install libboost-filesystem-dev
+</span><span class='line'>sudo apt-get install libboost-program-options-dev
+</span><span class='line'>sudo apt-get install libboost-thread-dev
+</span><span class='line'>sudo apt-get install libglibmm-2.4-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+</div>
+
+<div class="meta">
+
+</div>
+</article>
+
+ <div class="share">
+ <div class="addthis_toolbox addthis_default_style ">
+
+
+ <a class="addthis_button_tweet"></a>
+
+
+ <a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
+
+ <a class="addthis_counter addthis_pill_style"></a>
+ </div>
+ <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid="></script>
+</div>
+
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/index.html
@@ -0,0 +1,185 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>On Hacking: Larsson's Folly - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="This post is a tangent that I was thinking about this past week when I was listening to NPR’s On The Media. The specific segment, The Chiquita …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <article class="post">
+ <h2 class="title">On Hacking: Larsson's Folly</h2>
+ <div class="meta">
+ <div class="date">Published on:
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2011-12-07T00:00:00-05:00" pubdate data-updated="true">Dec 7<span>th</span>, 2011</time></div>
+ <div class="tags">Tags:
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</div>
+ </div>
+ <div class="entry-content"><p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR’s</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone ‘hacking’ case and illegal and unethical journalistic practices in the light of the historic “Chiquita Phone Hacking Scandal”. The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had ‘hacked’ Chiquita’s phone systems and this fact was revealed after the publication. The result, “The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories.”</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:</p>
+
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote>
+
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets’ Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their ‘informant’ was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+</div>
+
+<div class="meta">
+
+</div>
+</article>
+
+ <div class="share">
+ <div class="addthis_toolbox addthis_default_style ">
+
+
+ <a class="addthis_button_tweet"></a>
+
+
+ <a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
+
+ <a class="addthis_counter addthis_pill_style"></a>
+ </div>
+ <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid="></script>
+</div>
+
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/index.html
@@ -0,0 +1,215 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Move Minecraft Spawn with Python - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="The setup for this post is that in a vanilla Minecraft server there
+isn’t a way to set the protection size to 0 (yes, I know bukkit can do …">
+ <meta name="keywords" content="Python, Minecraft, NBT, Spawn">
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <article class="post">
+ <h2 class="title">Move Minecraft Spawn with Python</h2>
+ <div class="meta">
+ <div class="date">Published on:
+
+
+
+
+
+
+
+
+
+
+
+<time datetime="2012-04-29T21:54:00-04:00" pubdate data-updated="true">Apr 29<span>th</span>, 2012</time></div>
+ <div class="tags">Tags:
+
+
+ <a class='category' href='/blog/categories/minecraft/'>Minecraft</a>, <a class='category' href='/blog/categories/python/'>Python</a>
+
+
+</div>
+ </div>
+ <div class="entry-content"><p><img class="right" src="http://i.imgur.com/uubl0.png" width="150" height="150" title="Minecraft" ></p>
+
+<p>The setup for this post is that in a vanilla Minecraft server there
+isn’t a way to set the protection size to <code>0</code> (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.</p>
+
+<p>To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a></p>
+
+<figure class='code'><figcaption><span>spawn-move.py</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">from</span> <span class="nn">nbt</span> <span class="kn">import</span> <span class="o">*</span>
+</span><span class='line'><span class="n">level</span> <span class="o">=</span> <span class="n">nbt</span><span class="o">.</span><span class="n">NBTFile</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">,</span><span class="s">'rb'</span><span class="p">)</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnX"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newx</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnY"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newy</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnZ"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newz</span>
+</span><span class='line'><span class="k">print</span><span class="p">(</span><span class="n">level</span><span class="o">.</span><span class="n">pretty_tree</span><span class="p">())</span> <span class="c"># show changes</span>
+</span><span class='line'><span class="n">level</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">)</span>
+</span><span class='line'><span class="nb">exit</span><span class="p">()</span>
+</span></code></pre></td></tr></table></div></figure>
+
+</div>
+
+<div class="meta">
+
+</div>
+</article>
+
+ <div class="share">
+ <div class="addthis_toolbox addthis_default_style ">
+
+
+ <a class="addthis_button_tweet"></a>
+
+
+ <a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
+
+ <a class="addthis_counter addthis_pill_style"></a>
+ </div>
+ <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid="></script>
+</div>
+
+
+
+<section id="comment">
+ <h2 class="title">Comments</h2>
+ <div id="disqus_thread" aria-live="polite"><noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>
+</div>
+</section>
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ // var disqus_developer = 1;
+ var disqus_identifier = 'http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/';
+ var disqus_url = 'http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/';
+ var disqus_script = 'embed.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/archives/index.html
@@ -0,0 +1,225 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Blog Archives - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="2012 Move Minecraft Spawn with Python Apr 29 Minecraft, Python 2011 On Hacking: Larsson’s Folly Dec 7 Books, Ethics, Hacking, Journalism, …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2012</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2012/04/29/move-minecraft-spawn-with-python/">Move Minecraft Spawn with Python</a></h2>
+ <div class="meta">
+ <span class="date">Apr 29</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/minecraft/'>Minecraft</a>, <a class='category' href='/blog/categories/python/'>Python</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+
+
+ </section>
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson’s Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/10-04/atom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: 10.04 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/10-04/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/10-04/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: 10.04 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: 10.04">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/10-10/atom.xml
@@ -0,0 +1,125 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: 10.10 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/10-10/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/10-10/index.html
@@ -0,0 +1,166 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: 10.10 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: 10.10">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/11-04/atom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: 11.04 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/11-04/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/11-04/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: 11.04 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: 11.04">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/11-10/atom.xml
@@ -0,0 +1,118 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: 11.10 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/11-10/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/11-10/index.html
@@ -0,0 +1,166 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: 11.10 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: 11.10">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/12-04/atom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: 12.04 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/12-04/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/12-04/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: 12.04 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: 12.04">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/ami/atom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: AMI | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/ami/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/ami/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: AMI - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: AMI">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/anonymization/atom.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Anonymization | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/anonymization/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/anonymization/index.html
@@ -0,0 +1,166 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Anonymization - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Anonymization">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/bitcoin/atom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Bitcoin | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/bitcoin/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/bitcoin/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Bitcoin - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Bitcoin">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/books/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Books | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/books/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/books/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Books - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Books">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/cloud/atom.xml
@@ -0,0 +1,191 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Cloud | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/cloud/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/cloud/index.html
@@ -0,0 +1,166 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Cloud - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Cloud">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/ec2/atom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: EC2 | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/ec2/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/ec2/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: EC2 - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: EC2">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/eff/atom.xml
@@ -0,0 +1,107 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: EFF | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/eff/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/eff/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: EFF - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: EFF">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/ethics/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Ethics | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/ethics/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/ethics/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Ethics - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Ethics">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/gnome/atom.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Gnome | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/gnome/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/gnome/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Gnome - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Gnome">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/hacking/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Hacking | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/hacking/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/hacking/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Hacking - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Hacking">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/journalism/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Journalism | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/journalism/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/journalism/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Journalism - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Journalism">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/larsson/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Larsson | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/larsson/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/larsson/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Larsson - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Larsson">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/linix/atom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: linix | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/linix/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/linix/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: linix - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: linix">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/minecraft/atom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Minecraft | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/minecraft/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Move Minecraft Spawn with Python]]></title>
+ <link href="http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/"/>
+ <updated>2012-04-29T21:54:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/uubl0.png" width="150" height="150" title="Minecraft" ></p>
+
+<p>The setup for this post is that in a vanilla Minecraft server there
+isn't a way to set the protection size to <code>0</code> (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.</p>
+
+<p>To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a></p>
+
+<p><code>python spawn-move.py
+from nbt import *
+level = nbt.NBTFile('/<insert.path.here>/world/level.dat','rb')
+level["Data"]["SpawnX"].value = newx
+level["Data"]["SpawnY"].value = newy
+level["Data"]["SpawnZ"].value = newz
+print(level.pretty_tree()) # show changes
+level.write_file('/<insert.path.here>/world/level.dat')
+exit()
+</code></p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/minecraft/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Minecraft - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Minecraft">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2012</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2012/04/29/move-minecraft-spawn-with-python/">Move Minecraft Spawn with Python</a></h2>
+ <div class="meta">
+ <span class="date">Apr 29</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/minecraft/'>Minecraft</a>, <a class='category' href='/blog/categories/python/'>Python</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/namecoin/atom.xml
@@ -0,0 +1,100 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Namecoin | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/namecoin/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/namecoin/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Namecoin - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Namecoin">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/python/atom.xml
@@ -0,0 +1,50 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Python | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/python/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Move Minecraft Spawn with Python]]></title>
+ <link href="http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/"/>
+ <updated>2012-04-29T21:54:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/uubl0.png" width="150" height="150" title="Minecraft" ></p>
+
+<p>The setup for this post is that in a vanilla Minecraft server there
+isn't a way to set the protection size to <code>0</code> (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.</p>
+
+<p>To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a></p>
+
+<p><code>python spawn-move.py
+from nbt import *
+level = nbt.NBTFile('/<insert.path.here>/world/level.dat','rb')
+level["Data"]["SpawnX"].value = newx
+level["Data"]["SpawnY"].value = newy
+level["Data"]["SpawnZ"].value = newz
+print(level.pretty_tree()) # show changes
+level.write_file('/<insert.path.here>/world/level.dat')
+exit()
+</code></p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/python/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Python - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Python">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2012</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2012/04/29/move-minecraft-spawn-with-python/">Move Minecraft Spawn with Python</a></h2>
+ <div class="meta">
+ <span class="date">Apr 29</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/minecraft/'>Minecraft</a>, <a class='category' href='/blog/categories/python/'>Python</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/stieg/atom.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Stieg | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/stieg/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR's</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone 'hacking' case and illegal and unethical journalistic practices in the light of the historic "Chiquita Phone Hacking Scandal". The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had 'hacked' Chiquita's phone systems and this fact was revealed after the publication. The result, "The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories."</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote></p>
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets' Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their 'informant' was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/stieg/index.html
@@ -0,0 +1,148 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Stieg - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Stieg">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/12/07/on-hacking-larssons-folly/">On Hacking: Larsson's Folly</a></h2>
+ <div class="meta">
+ <span class="date">Dec 7</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/books/'>Books</a>, <a class='category' href='/blog/categories/ethics/'>Ethics</a>, <a class='category' href='/blog/categories/hacking/'>Hacking</a>, <a class='category' href='/blog/categories/journalism/'>Journalism</a>, <a class='category' href='/blog/categories/larsson/'>Larsson</a>, <a class='category' href='/blog/categories/stieg/'>Stieg</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/blog/categories/ubuntu/atom.xml
@@ -0,0 +1,209 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[Category: Ubuntu | BryFry]]></title>
+ <link href="http://bryfry.github.com/blog/categories/ubuntu/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<p><code>bash
+sudo apt-get install git build-essential libssl-dev \
+libdb4.7++-dev libboost-dev libboost-system-dev \
+libboost-filesystem-dev libboost-program-options-dev \
+libboost-thread-dev libglibmm-2.4-dev
+git clone git://github.com/vinced/namecoin.git
+cd namecoin/src
+make -f makefile.unix USE_UPNP=
+</code></p>
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+<p><code>text Compilation error - libssl
+In file included from auxpow.cpp:4:0:
+headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libssl
+sudo apt-get install libssl-dev
+</code></p>
+
+<p><code>text Compilation error - libdb
+In file included from auxpow.cpp:4:0:
+headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+compilation terminated.
+</code></p>
+
+<p><code>bash Solution - libdb
+sudo apt-get install libdb4.7++-dev
+</code></p>
+
+<p>If that fails ...
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn't have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<p><code>bash
+wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</code></p>
+
+<p><code>text Compilation error - libboost
+/usr/bin/ld: cannot find -lboost_system
+/usr/bin/ld: cannot find -lboost_filesystem
+/usr/bin/ld: cannot find -lboost_program_options
+/usr/bin/ld: cannot find -lboost_thread
+/usr/bin/ld: cannot find -lgthread-2.0
+</code></p>
+
+<p><code>bash Solution - libbost
+sudo apt-get install libboost-system-dev
+sudo apt-get install libboost-filesystem-dev
+sudo apt-get install libboost-program-options-dev
+sudo apt-get install libboost-thread-dev
+sudo apt-get install libglibmm-2.4-dev
+</code></p>
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<p>``` bash</p>
+
+<h1>move windows back to the right side in Ubuntu 10.04+</h1>
+
+<p>$ gconftool-2 --set /apps/metacity/general/button_layout type string menu:minimize,maximize,close
+```</p>
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you'll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<p>``` bash</p>
+
+<h1>replace with your new key name and ec2 address.</h1>
+
+<p>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+sudo apt-get update
+sudo apt-get upgrade</p>
+
+<h1>add the tor project repository</h1>
+
+<p>sudo apt-add-repository \</p>
+
+<pre><code> 'deb http://deb.torproject.org/torproject.org maverick main'
+</code></pre>
+
+<p>sudo apt-get update</p>
+
+<h1>install tor</h1>
+
+<p>sudo apt-get install tor tor-geoipdb</p>
+
+<h1>make a backup of the standard config file</h1>
+
+<p>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+```</p>
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<p><code>text /etc/tor/torrc
+SocksPort 0 # we are not going to make local connections, aka a simple relay
+ORPort 9001 # what port to advertise for incoming Tor connections
+Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+BandwidthRate 300 KB
+BandwidthBurst 350 KB
+AccountingStart month 1 00:00
+AccountingMax 3 GB
+</code></p>
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<p><code>bash
+screen -S tor
+/usr/sbin/tor
+</code></p>
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node's nickname.</p>
+
+<p>When your done don't forget to submit your new node's nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF's Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/blog/categories/ubuntu/index.html
@@ -0,0 +1,184 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>Category: Ubuntu - BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Category: Ubuntu">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+
+
+
+ <section class="archives"><h1 class="year">2011</h1>
+
+<article>
+ <h2 class="title"><a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">Namecoin on Ubuntu 11.10</a></h2>
+ <div class="meta">
+ <span class="date">Nov 26</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/bitcoin/'>Bitcoin</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/namecoin/'>Namecoin</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>, <a class='category' href='/blog/categories/linix/'>linix</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">Moving Window Buttons back to the right in Ubuntu 10.04+</a></h2>
+ <div class="meta">
+ <span class="date">Jun 10</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-04/'>10.04</a>, <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/11-04/'>11.04</a>, <a class='category' href='/blog/categories/11-10/'>11.10</a>, <a class='category' href='/blog/categories/12-04/'>12.04</a>, <a class='category' href='/blog/categories/gnome/'>Gnome</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+
+
+<article>
+ <h2 class="title"><a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">EFF Tor Challenge + Amazon EC2 Free Usage Tier</a></h2>
+ <div class="meta">
+ <span class="date">Jun 1</span>
+ <span class="tags">
+
+
+ <a class='category' href='/blog/categories/10-10/'>10.10</a>, <a class='category' href='/blog/categories/ami/'>AMI</a>, <a class='category' href='/blog/categories/anonymization/'>Anonymization</a>, <a class='category' href='/blog/categories/cloud/'>Cloud</a>, <a class='category' href='/blog/categories/ec2/'>EC2</a>, <a class='category' href='/blog/categories/eff/'>EFF</a>, <a class='category' href='/blog/categories/ubuntu/'>Ubuntu</a>
+
+
+</span>
+
+ </div>
+</article>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/font/Fjalla-one.woff
Binary file
bryfry.github.com/font/fontawesome-webfont.eot
Binary file
bryfry.github.com/font/fontawesome-webfont.svg
@@ -0,0 +1,175 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Designer : Dave Gandy
+Foundry : Fort Awesome
+</metadata>
+<defs>
+<font id="FontAwesomeRegular" horiz-adv-x="900" >
+<font-face units-per-em="1000" ascent="750" descent="-250" />
+<missing-glyph horiz-adv-x="250" />
+<glyph unicode="
" horiz-adv-x="250" />
+<glyph horiz-adv-x="0" />
+<glyph horiz-adv-x="0" />
+<glyph unicode=" " horiz-adv-x="250" />
+<glyph unicode="	" horiz-adv-x="250" />
+<glyph unicode=" " horiz-adv-x="250" />
+<glyph unicode=" " horiz-adv-x="375" />
+<glyph unicode=" " horiz-adv-x="751" />
+<glyph unicode=" " horiz-adv-x="375" />
+<glyph unicode=" " horiz-adv-x="751" />
+<glyph unicode=" " horiz-adv-x="250" />
+<glyph unicode=" " horiz-adv-x="187" />
+<glyph unicode=" " horiz-adv-x="125" />
+<glyph unicode=" " horiz-adv-x="125" />
+<glyph unicode=" " horiz-adv-x="93" />
+<glyph unicode=" " horiz-adv-x="150" />
+<glyph unicode=" " horiz-adv-x="41" />
+<glyph unicode=" " horiz-adv-x="150" />
+<glyph unicode=" " horiz-adv-x="187" />
+<glyph unicode="" horiz-adv-x="500" d="M0 0v0v0v0v0z" />
+<glyph unicode="" horiz-adv-x="750" d="M3 727q10 23 34 23h675q25 0 35 -23t-8 -41l-298 -298v-313h121q16 0 27 -11t11 -26q0 -16 -11 -27t-27 -11h-375q-15 0 -26 11t-11 27q0 15 11 26t26 11h122v313l-298 298q-18 18 -8 41z" />
+<glyph unicode="" horiz-adv-x="688" d="M0 112q0 24 11 44.5t30 35.5t45 24t55 9q13 0 24.5 -2t22.5 -5v388l500 144v-525q0 -23 -11 -43.5t-30 -36t-45 -24.5t-55 -9t-54.5 9t-44.5 24.5t-30 36t-11 43.5t11 43.5t30 35.5t44.5 24t54.5 9q24 0 47 -6v248l-312 -90v-377q0 -23 -11 -43.5t-30 -35.5t-45 -24 t-55 -9t-55 9t-45 24t-30 35.5t-11 43.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 437q0 65 24.5 122t67 99.5t99.5 67t122 24.5q64 0 121 -24.5t99.5 -67t67 -99.5t24.5 -122q0 -48 -13.5 -91t-38.5 -81l168 -167q9 -10 9 -23t-9 -22l-44 -44q-9 -9 -22 -9t-22 9l-168 168q-38 -25 -81 -38.5t-91 -13.5q-65 0 -122 24.5t-99.5 67t-67 99t-24.5 121.5z M125 437q0 -39 14.5 -73t40 -59.5t60 -40t73.5 -14.5t73 14.5t59.5 40t40 59.5t14.5 73t-14.5 73t-40 59.5t-59.5 40.5t-73 15t-73.5 -15t-60 -40.5t-40 -59.5t-14.5 -73zM194 437q0 25 9.5 46.5t25.5 37.5t37.5 25.5t46.5 9.5q10 0 16.5 -7t6.5 -17t-6.5 -16.5t-16.5 -6.5 q-30 0 -51 -21t-21 -51q0 -10 -6.5 -16.5t-16.5 -6.5t-17 6.5t-7 16.5z" />
+<glyph unicode="" d="M0 56v587v32v19q0 23 16.5 39.5t39.5 16.5h19h750h19q23 0 39.5 -16.5t16.5 -39.5v-19v-30v-589q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM75 75h750v416q-15 -15 -28 -24q-29 -21 -61 -46t-64 -49q-19 -14 -36.5 -28t-32.5 -25q-3 -2 -6 -4.5 t-7 -5.5q-14 -11 -29.5 -22.5t-33.5 -22t-37.5 -17t-40.5 -6.5q-20 0 -39.5 6.5t-37 17t-33.5 22t-29 22.5q-4 3 -7 5.5t-6 4.5q-15 11 -32.5 25t-36.5 28q-32 24 -64 49t-61 46q-13 9 -28 24v-416zM75 643q0 -14 6 -30t16.5 -32t23 -30t26.5 -24q23 -17 49 -37l52 -38 q26 -20 50 -39t44 -34l22 -17q14 -11 28.5 -21t29 -17.5t27.5 -7.5h1h1q13 0 27.5 7.5t29 17.5t28.5 21l22 17q20 15 44 34t50 39l52 38q26 20 49 37q13 10 26 24t23.5 30t16.5 32t6 30v32h-750v-32z" />
+<glyph unicode="" horiz-adv-x="846" d="M0 519q0 64 20 108t52.5 71.5t73.5 39.5t83 12q30 0 59 -10t54 -25t45.5 -32.5t35.5 -32.5q15 15 35.5 32.5t45.5 32.5t54 25t59 10q42 0 83 -12t73.5 -39.5t52.5 -71.5t20 -108q0 -44 -16.5 -83.5t-36 -69.5t-37 -48t-18.5 -19l-289 -288q-11 -11 -26 -11t-26 11 l-290 288q-1 1 -18 19t-36.5 48t-36 69.5t-16.5 83.5z" />
+<glyph unicode="" horiz-adv-x="787" d="M0.5 465q4.5 13 25.5 16l238 35l106 215q10 20 23.5 20t22.5 -20l107 -215l237 -35q22 -3 26 -16t-11 -28l-172 -168l40 -236q4 -22 -7 -30t-30 3l-213 111l-212 -111q-20 -11 -31 -3t-7 30l41 236l-172 168q-16 15 -11.5 28z" />
+<glyph unicode="" horiz-adv-x="787" d="M0.5 465q4.5 13 25.5 16l238 34l106 216q9 19 23 19t23 -19l107 -216l237 -34q22 -3 26 -16t-11 -28l-172 -168l40 -236q3 -16 -2 -24.5t-16 -8.5q-7 0 -19 5l-213 112l-212 -112q-12 -5 -19 -5q-11 0 -16 8.5t-3 24.5l41 236l-172 168q-16 15 -11.5 28zM136 421l100 -98 l29 -27l-7 -39l-24 -139l124 66l35 18l35 -18l124 -66l-23 139l-7 39l28 27l101 98l-139 20l-39 6l-18 35l-62 126l-62 -126l-17 -35l-39 -6z" />
+<glyph unicode="" d="M0 34v7q11 19 19.5 40t17.5 42t19.5 40t25.5 34q7 7 15.5 13.5t19.5 10.5t23.5 5t25.5 3q37 6 77.5 12.5t78.5 12.5q4 17 7 34.5t8 33.5q-8 11 -16 21.5t-15.5 23t-13.5 28.5t-9 37q-2 11 -5 32.5t-6 44t-5.5 41t-2.5 22.5q0 25 10.5 56t33 58t58 45.5t84.5 18.5 t84.5 -18.5t58 -45.5t33 -58t10.5 -56q0 -4 -2.5 -22.5t-5.5 -41t-6 -44t-5 -32.5q-3 -21 -9 -37t-13.5 -28.5t-16 -23t-15.5 -21.5q5 -16 8 -33.5t7 -34.5q38 -6 78.5 -12.5t77.5 -12.5q13 -2 25.5 -3t23.5 -5t19.5 -10.5t15.5 -13.5q15 -15 25.5 -34t19.5 -40t17.5 -42 t19.5 -40v-7q-14 -8 -26.5 -18.5t-30.5 -15.5h-786q-18 5 -30.5 15.5t-26.5 18.5z" />
+<glyph unicode="" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h788q23 0 39.5 -16.5t16.5 -39.5v-638q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM56 75q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5 v-75zM56 250q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM56 425q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM56 600 q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM225 75q0 -8 5.5 -13.5t13.5 -5.5h412q8 0 13.5 5.5t5.5 13.5v250q0 8 -5.5 13.5t-13.5 5.5h-412q-8 0 -13.5 -5.5t-5.5 -13.5v-250zM225 425 q0 -8 5.5 -13.5t13.5 -5.5h412q8 0 13.5 5.5t5.5 13.5v250q0 8 -5.5 13.5t-13.5 5.5h-412q-8 0 -13.5 -5.5t-5.5 -13.5v-250zM731 75q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM731 250 q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM731 425q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75zM731 600 q0 -8 5.5 -13.5t13.5 -5.5h75q8 0 13.5 5.5t5.5 13.5v75q0 8 -5.5 13.5t-13.5 5.5h-75q-8 0 -13.5 -5.5t-5.5 -13.5v-75z" />
+<glyph unicode="" d="M0 38v262q0 16 11 27t27 11h337q16 0 27 -11t11 -27v-262q0 -16 -11 -27t-27 -11h-337q-16 0 -27 11t-11 27zM0 450v263q0 15 11 26t27 11h337q16 0 27 -11t11 -26v-263q0 -16 -11 -26.5t-27 -10.5h-337q-16 0 -27 10.5t-11 26.5zM488 38v262q0 16 10.5 27t26.5 11h338 q15 0 26 -11t11 -27v-262q0 -16 -11 -27t-26 -11h-338q-16 0 -26.5 11t-10.5 27zM488 450v263q0 15 10.5 26t26.5 11h338q15 0 26 -11t11 -26v-263q0 -16 -11 -26.5t-26 -10.5h-338q-16 0 -26.5 10.5t-10.5 26.5z" />
+<glyph unicode="" d="M0 38v132q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-132q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM0 320v110q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-110q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM0 580v133q0 15 11 26t27 11 h175q15 0 26 -11t11 -26v-133q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM325 38v132q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-132q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM325 320v110q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-110 q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM325 580v133q0 15 11 26t27 11h175q15 0 26 -11t11 -26v-133q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM650 38v132q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-132q0 -16 -11 -27t-26 -11h-175 q-16 0 -27 11t-11 27zM650 320v110q0 16 11 26.5t27 10.5h175q15 0 26 -10.5t11 -26.5v-110q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27zM650 580v133q0 15 11 26t27 11h175q15 0 26 -11t11 -26v-133q0 -16 -11 -27t-26 -11h-175q-16 0 -27 11t-11 27z" />
+<glyph unicode="" d="M0 38v132q0 16 11 26.5t27 10.5h145q15 0 26 -10.5t11 -26.5v-132q0 -16 -11 -27t-26 -11h-145q-16 0 -27 11t-11 27zM0 320v110q0 16 11 26.5t27 10.5h145q15 0 26 -10.5t11 -26.5v-110q0 -16 -11 -27t-26 -11h-145q-16 0 -27 11t-11 27zM0 580v133q0 15 11 26t27 11 h145q15 0 26 -11t11 -26v-133q0 -16 -11 -27t-26 -11h-145q-16 0 -27 11t-11 27zM295 38v132q0 16 11 26.5t27 10.5h530q15 0 26 -10.5t11 -26.5v-132q0 -16 -11 -27t-26 -11h-530q-16 0 -27 11t-11 27zM295 320v110q0 16 11 26.5t27 10.5h530q15 0 26 -10.5t11 -26.5v-110 q0 -16 -11 -27t-26 -11h-530q-16 0 -27 11t-11 27zM295 580v133q0 15 11 26t27 11h530q15 0 26 -11t11 -26v-133q0 -16 -11 -27t-26 -11h-530q-16 0 -27 11t-11 27z" />
+<glyph unicode="" d="M0 312.5q0 16.5 11 27.5l85 85q11 11 27.5 11t27.5 -11l178 -178q11 -11 27.5 -11t27.5 11l364 364q11 11 27.5 11t27.5 -11l85 -85q11 -11 11 -27.5t-11 -27.5l-444 -444q-11 -11 -30.5 -19t-35.5 -8h-43q-17 0 -36.5 8t-30.5 19l-257 258q-11 11 -11 27.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 94q0 19 14 33l248 249l-248 244q-14 14 -14 33t14 33l49 49q14 14 33 14t33 -14l246 -246l246 246q14 14 33 14t33 -14l49 -49q14 -14 14 -33t-14 -33l-248 -249l248 -244q14 -14 14 -32.5t-14 -32.5l-49 -50q-14 -14 -33 -14t-33 14l-246 247l-247 -247 q-14 -14 -32.5 -14t-32.5 14l-49 49q-14 14 -14 33z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 437q0 65 24.5 122t67 99.5t99.5 67t122 24.5q64 0 121 -24.5t99.5 -67t67 -99.5t24.5 -122q0 -48 -13.5 -91t-38.5 -81l168 -167q9 -10 9 -23t-9 -22l-44 -44q-9 -9 -22 -9t-22 9l-168 168q-38 -25 -81 -38.5t-91 -13.5q-65 0 -122 24.5t-99.5 67t-67 99t-24.5 121.5z M125 437q0 -39 14.5 -73t40 -59.5t60 -40t73.5 -14.5t73 14.5t59.5 40t40 59.5t14.5 73t-14.5 73t-40 59.5t-59.5 40.5t-73 15t-73.5 -15t-60 -40.5t-40 -59.5t-14.5 -73zM188 422v31q0 7 4.5 11.5t10.5 4.5h78v78q0 6 4.5 10.5t11.5 4.5h31q7 0 11.5 -4.5t4.5 -10.5v-78h78 q16 0 16 -16v-31q0 -16 -16 -16h-78v-78q0 -16 -16 -16h-31q-16 0 -16 16v78h-78q-6 0 -10.5 4.5t-4.5 11.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 437q0 65 24.5 122t67 99.5t99.5 67t122 24.5q64 0 121 -24.5t99.5 -67t67 -99.5t24.5 -122q0 -48 -13.5 -91t-38.5 -81l168 -167q9 -10 9 -23t-9 -22l-44 -44q-9 -9 -22 -9t-22 9l-168 168q-38 -25 -81 -38.5t-91 -13.5q-65 0 -122 24.5t-99.5 67t-67 99t-24.5 121.5z M125 437q0 -39 14.5 -73t40 -59.5t60 -40t73.5 -14.5t73 14.5t59.5 40t40 59.5t14.5 73t-14.5 73t-40 59.5t-59.5 40.5t-73 15t-73.5 -15t-60 -40.5t-40 -59.5t-14.5 -73zM188 422v31q0 7 4.5 11.5t10.5 4.5h219q16 0 16 -16v-31q0 -16 -16 -16h-219q-6 0 -10.5 4.5 t-4.5 11.5z" />
+<glyph unicode="" horiz-adv-x="713" d="M0 356q0 89 41 166.5t115 128.5q6 3 14 3q7 -1 12 -8l42 -62q10 -16 -5 -26q-51 -35 -78.5 -88t-27.5 -114q0 -50 19 -94.5t52 -77.5t77.5 -52t94.5 -19q51 0 95.5 19t77.5 52t52 77.5t19 94.5q0 61 -28 114t-79 88q-6 3 -8 12q-1 6 3 14l43 62q5 6 12 7.5t14 -2.5 q73 -51 114.5 -128.5t41.5 -166.5q0 -74 -28 -138.5t-76.5 -113t-113.5 -76.5t-139 -28t-138.5 28t-113 76.5t-76.5 113t-28 138.5zM300 394v337q0 19 19 19h75q8 0 13.5 -5.5t5.5 -13.5v-337q0 -8 -5.5 -13.5t-13.5 -5.5h-75q-19 0 -19 19z" />
+<glyph unicode="" d="M0 19v127q0 8 5.5 13.5t13.5 5.5h94q8 0 13 -5.5t5 -13.5v-127q0 -8 -5 -13.5t-13 -5.5h-94q-19 0 -19 19zM192 19v212q0 8 5.5 13.5t13.5 5.5h94q8 0 13 -5.5t5 -13.5v-212q0 -8 -5 -13.5t-13 -5.5h-94q-8 0 -13.5 5.5t-5.5 13.5zM384 19v330q0 8 5.5 13.5t13.5 5.5h94 q8 0 13.5 -5.5t5.5 -13.5v-330q0 -8 -5.5 -13.5t-13.5 -5.5h-94q-8 0 -13.5 5.5t-5.5 13.5zM577 19v486q0 8 5 13.5t13 5.5h94q8 0 13.5 -5.5t5.5 -13.5v-486q0 -8 -5.5 -13.5t-13.5 -5.5h-94q-8 0 -13 5.5t-5 13.5zM769 19v712q0 19 19 19h93q19 0 19 -19v-712 q0 -19 -19 -19h-93q-19 0 -19 19z" />
+<glyph unicode="" horiz-adv-x="748" d="M0 320v111q0 7 7 9q19 5 39.5 8t40.5 5q4 0 8 0.5t9 1.5q5 14 10.5 27.5t12.5 27.5q-12 17 -26.5 36.5t-30.5 37.5q-5 5 0 12q19 23 40 44t44 40q5 5 12 0q11 -11 22.5 -20t23.5 -17q7 -5 14 -10.5t14 -10.5q26 14 55 23q3 28 6 51.5t8 45.5q2 8 9 8h111q9 0 9 -8 q4 -19 6.5 -38t5.5 -39l3 -20q14 -5 27.5 -10t26.5 -13q7 5 13 9.5t12 9.5q13 10 26 19t25 20q6 6 12 -1l11 -11q5 -5 11 -10q15 -14 30 -29.5t29 -32.5q4 -6 0 -12q-13 -15 -26 -32.5t-30 -40.5q15 -29 24 -58q12 -3 24.5 -4.5t25.5 -3.5q11 -2 23.5 -3.5t23.5 -3.5 q7 -2 7 -9v-111q0 -7 -7 -9q-18 -5 -38 -7.5t-40 -4.5q-5 -1 -9.5 -1.5t-9.5 -1.5q-5 -14 -10.5 -27.5t-12.5 -27.5q12 -17 26.5 -36.5t30.5 -37.5q5 -5 0 -12q-38 -47 -84 -84q-5 -5 -12 0q-11 11 -22.5 20t-23.5 17q-7 5 -14 10.5t-14 10.5q-26 -14 -55 -23 q-2 -23 -5.5 -48t-9.5 -49q-2 -8 -9 -8h-111q-7 0 -9 8q-3 19 -5.5 38t-5.5 39l-3 20q-14 5 -27.5 10t-26.5 13q-6 -5 -12.5 -9.5t-12.5 -9.5q-26 -18 -51 -39q-6 -6 -12 1q-5 5 -11 10.5t-11 10.5q-15 14 -30 29.5t-29 32.5q-5 6 0 12q15 18 29 37t27 36q-15 29 -24 58 q-12 3 -24.5 4.5t-24.5 3.5t-24.5 3.5t-23.5 3.5q-7 2 -7 9zM261 375q0 -24 9 -44.5t24.5 -35.5t36 -24t43.5 -9t43.5 9t35.5 24t24 35.5t9 44.5q0 23 -9 43.5t-24 35.5t-35.5 24t-43.5 9t-43.5 -9t-36 -24t-24.5 -35.5t-9 -43.5z" />
+<glyph unicode="" horiz-adv-x="648" d="M0 582q0 8 0.5 16t0.5 17q11 6 32.5 10t47 7t52.5 5t49 3q-2 16 -1 32t7 33q1 4 6 11.5t18.5 15t40 13t71.5 5.5t71.5 -5.5t40 -13t18 -15.5t6.5 -12q6 -17 7 -32.5t-1 -31.5q22 -1 49 -3t53 -5t47 -7t32 -10q1 -9 1 -17v-16v-16q0 -8 -1 -17q-10 -6 -30.5 -10t-45.5 -7 t-51 -5t-48 -3t-37 -1.5t-16 -0.5l-95 -1h-13h-28q-19 0 -54 1q-2 0 -16.5 0.5t-36.5 1.5t-48 3t-51 5t-45.5 7t-30.5 10q0 9 -0.5 17t-0.5 16zM67 484q41 -5 84.5 -7.5t75.5 -3.5q9 -1 23 -1h74h73q14 0 23 1q33 1 76.5 3.5t84.5 7.5q-5 -76 -8 -154.5t-7 -154.5 q-1 -19 -1.5 -42.5t-2 -45.5t-6 -40.5t-14.5 -28.5q-12 -11 -42 -14.5t-58 -3.5h-236q-29 0 -58.5 3.5t-41.5 14.5q-10 10 -14.5 28.5t-6 40.5t-2 45.5t-1.5 42.5q-4 76 -7.5 154.5t-7.5 154.5zM147 383q1 -15 1 -28t1 -22q0 -11 1 -19q2 -34 3.5 -68t3.5 -67q1 -8 1 -17 v-20v-12q0 -6 0.5 -14t1.5 -19q1 -8 9.5 -14t13.5 -6q5 -1 10 -1t8 -1h11q5 0 5 19v286q0 8 -5.5 13.5t-13.5 5.5l-33 2q-8 0 -13 -5t-5 -13zM255.5 657q0.5 -6 1.5 -15q9 1 20 1h47l67 -1q1 9 1.5 15t-0.5 11q-11 3 -29.5 4.5t-38.5 1.5t-38.5 -1.5t-29.5 -4.5 q-1 -5 -0.5 -11zM292 94q0 -8 5 -13.5t13 -5.5h28q8 0 13.5 5.5t5.5 13.5v285q0 8 -11 13t-14 5h-15q-3 0 -14 -5t-11 -13v-285zM432 94q0 -19 4 -19h11q3 1 13 1.5t15 0.5q5 1 8.5 6.5t4.5 13.5q0 11 0.5 19t0.5 14q0 7 1 12v20q0 9 1 17q2 33 3 66.5t3 67.5q0 9 1 20 q1 9 1.5 22t1.5 28q0 8 -5 13t-13 5l-33 -2q-8 0 -13 -5.5t-5 -13.5v-286z" />
+<glyph unicode="" d="M1 384.5q3 11.5 13 19.5l412 338q11 8 24 8t24 -8l126 -104v58q0 19 19 19h112q19 0 19 -19v-180l136 -112q10 -8 13 -19.5t-1 -22.5q-10 -24 -36 -24h-75v-300q0 -16 -10.5 -27t-26.5 -11h-206v225h-188v-225h-206q-16 0 -27 11t-11 27v300h-75q-25 0 -35 24 q-4 11 -1 22.5z" />
+<glyph unicode="" horiz-adv-x="600" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h219v-269q0 -23 16.5 -39.5t39.5 -16.5h269v-369q0 -23 -16.5 -39.5t-39.5 -16.5h-488q-23 0 -39.5 16.5t-16.5 39.5zM331 481v266h3l263 -263v-3h-266z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 84t-84 56.5t-102 20.5t-102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102zM319 375v150q0 23 16.5 39.5t39.5 16.5t39.5 -16.5t16.5 -39.5v-127l90 -89q17 -17 17 -40t-17 -40q-8 -8 -18.5 -12t-21.5 -4t-21.5 4t-18.5 12l-106 106q-1 1 -1 2t-1 2 q-7 7 -10 14q-4 9 -4 22z" />
+<glyph unicode="" d="M1 17l290 716q3 7 10.5 12t15.5 5h95l-4 -83h84l-4 83h95q8 0 15.5 -5t10.5 -12l290 -716q3 -7 -0.5 -12t-11.5 -5h-361l-13 250h-126l-13 -250h-361q-8 0 -11.5 5t-0.5 12zM394 389h112l-10 202h-92z" />
+<glyph unicode="" d="M0 19v300q0 8 5.5 13.5t13.5 5.5h112q8 0 13.5 -5.5t5.5 -13.5v-169h600v169q0 8 5.5 13.5t13.5 5.5h112q8 0 13.5 -5.5t5.5 -13.5v-300q0 -19 -19 -19h-862q-19 0 -19 19zM169 461q3 8 19 8h150v244q0 15 10.5 26t26.5 11h150q16 0 27 -11t11 -26v-244h150q15 0 18 -8 t-8 -19l-246 -247q-11 -11 -27 -11t-27 11l-246 247q-11 11 -8 19z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 83.5t-84 56t-102 20.5t-102 -20.5t-83.5 -56t-56 -83.5t-20.5 -102zM206 349q4 10 24 10h79v185q0 8 5.5 13.5t13.5 5.5h94q8 0 13.5 -5.5t5.5 -13.5v-185h79q20 0 24 -10t-10 -24l-136 -136q-9 -9 -23 -9q-13 0 -23 9l-136 136q-14 14 -10 24z " />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 83.5t-84 56t-102 20.5t-102 -20.5t-83.5 -56t-56 -83.5t-20.5 -102zM206 401q-4 10 10 24l136 136q10 9 23 9q12 0 23 -9l136 -136q14 -14 10 -24t-24 -10h-79v-185q0 -8 -5.5 -13.5t-13.5 -5.5h-94q-8 0 -13.5 5.5t-5.5 13.5v185h-79 q-20 0 -24 10z" />
+<glyph unicode="" d="M0 38v282q0 16 4.5 37t10.5 35l139 324q6 14 21.5 24t30.5 10h488q15 0 30.5 -10t21.5 -24l139 -324q6 -14 10.5 -35t4.5 -37v-282q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM116 339h189l56 -113h187l57 113h179q-1 2 -1 4.5t-1 4.5l-125 290h-414l-125 -291 q-1 -1 -1 -3.5t-1 -4.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 84t-84 56.5t-102 20.5t-102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102zM258 220v310q0 9 8 14q8 4 15 0l269 -156q8 -3 8 -13t-8 -13l-269 -156q-4 -2 -8 -2q-3 0 -7 2q-8 5 -8 14z" />
+<glyph unicode="" horiz-adv-x="747" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5q66 0 127.5 -23t112.5 -65l76 76q16 16 27 11.5t11 -27.5v-217q0 -15 -11 -26q-10 -10 -25 -10l-217 -1q-23 0 -27.5 11.5t11.5 27.5l75 75q-35 26 -75.5 41t-84.5 15q-54 0 -102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102 t20.5 -102t56 -83.5t83.5 -56t102 -20.5q49 0 93.5 17t79.5 47.5t58 72t29 90.5q1 6 7 12q7 5 14 4l75 -10q8 -1 12.5 -7t3.5 -14q-9 -69 -42 -128.5t-83 -103t-113.5 -68.5t-133.5 -25q-78 0 -146 29.5t-119 80.5t-80.5 119t-29.5 146z" />
+<glyph unicode="" d="M3 160l70 206q4 13 18 20q15 6 28 2l206 -70q21 -7 21.5 -19t-19.5 -22l-95 -47q24 -36 57.5 -63t75.5 -41q51 -18 103 -13.5t97.5 26.5t80.5 61t53 90q2 8 8.5 11t14.5 1l71 -24q17 -7 12 -24q-25 -74 -75 -129t-114.5 -86.5t-139 -37.5t-147.5 19q-63 21 -113.5 62 t-84.5 98l-97 -47q-20 -11 -29.5 -2.5t-1.5 29.5zM95 495q25 73 75 128.5t114.5 87.5t138.5 38t148 -19q63 -22 113 -63t85 -98l97 48q20 10 29.5 1.5t1.5 -29.5l-70 -205q-4 -14 -18 -21q-15 -6 -28 -2l-206 70q-21 7 -21.5 19t19.5 22l95 47q-24 36 -58 63t-76 41 q-51 18 -103 13.5t-97 -26.5t-80 -61t-53 -90q-2 -8 -9 -11t-14 -1l-71 25q-8 2 -11 9t-1 14z" />
+<glyph unicode="" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h788q23 0 39.5 -16.5t16.5 -39.5v-638q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM75 75h750v525h-750v-525zM150 169v37q0 19 19 19h75q8 0 13.5 -5.5t5.5 -13.5v-37q0 -8 -5.5 -13.5t-13.5 -5.5h-75 q-19 0 -19 19zM150 319v37q0 19 19 19h75q8 0 13.5 -5.5t5.5 -13.5v-37q0 -8 -5.5 -13.5t-13.5 -5.5h-75q-19 0 -19 19zM150 469v37q0 19 19 19h75q8 0 13.5 -5.5t5.5 -13.5v-37q0 -8 -5.5 -13.5t-13.5 -5.5h-75q-19 0 -19 19zM338 169v37q0 8 5 13.5t13 5.5h375 q19 0 19 -19v-37q0 -19 -19 -19h-375q-8 0 -13 5.5t-5 13.5zM338 319v37q0 8 5 13.5t13 5.5h375q19 0 19 -19v-37q0 -19 -19 -19h-375q-8 0 -13 5.5t-5 13.5zM338 469v37q0 8 5 13.5t13 5.5h375q19 0 19 -19v-37q0 -19 -19 -19h-375q-8 0 -13 5.5t-5 13.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 56v300q0 23 16.5 40t39.5 17h57v85q0 52 20.5 98t56 80t83.5 54t102 20t102 -20t84 -54t56.5 -80t20.5 -98v-85h56q23 0 39.5 -17t16.5 -40v-300q0 -23 -16.5 -39.5t-39.5 -16.5h-638q-23 0 -39.5 16.5t-16.5 39.5zM225 413h300v85q0 29 -12 54.5t-32 44.5t-47.5 30 t-58.5 11t-58.5 -11t-47.5 -30t-32 -44.5t-12 -54.5v-85z" />
+<glyph unicode="" d="M0 675q0 31 22 53t53 22t53 -22t22 -53q0 -20 -10 -36.5t-27 -27.5v-592q0 -8 -5.5 -13.5t-13.5 -5.5h-38q-8 0 -13 5.5t-5 13.5v592q-17 11 -27.5 27.5t-10.5 36.5zM150 203v364q0 16 9.5 32t23.5 24q51 27 92 42t70 22q34 8 61 9q33 0 60.5 -5.5t52.5 -14.5t48.5 -21 t48.5 -25q31 -14 71 -16q34 -2 80 7.5t101 42.5q14 8 23 3t9 -21v-365q0 -15 -9 -31.5t-23 -24.5q-55 -33 -101 -42.5t-80 -7.5q-40 2 -71 16q-25 13 -48.5 25t-48.5 21t-52.5 14.5t-60.5 5.5q-27 -1 -61 -9q-29 -7 -70 -22t-92 -43q-14 -8 -23.5 -2t-9.5 22z" />
+<glyph unicode="" d="M0 356q0 54 18.5 104.5t50 94t75 79.5t93.5 62t104.5 40t108.5 14t108.5 -14t104.5 -40t93.5 -62t75 -79.5t50 -94t18.5 -104.5q0 -87 -36 -165l-13 -28l-81 -12q-13 -49 -52.5 -81t-92.5 -32v-19q0 -8 -5.5 -13.5t-13.5 -5.5h-38q-8 0 -13 5.5t-5 13.5v337q0 8 5 13.5 t13 5.5h38q8 0 13.5 -5.5t5.5 -13.5v-18q42 0 75.5 -21t53.5 -54l19 2q15 43 15 91q0 58 -31 109.5t-80 89.5t-109 60.5t-118 22.5t-118 -22.5t-108.5 -60.5t-79.5 -89.5t-31 -109.5q0 -46 14 -91l19 -2q20 33 53.5 54t75.5 21v18q0 8 5.5 13.5t13.5 5.5h38q8 0 13 -5.5 t5 -13.5v-337q0 -8 -5 -13.5t-13 -5.5h-38q-8 0 -13.5 5.5t-5.5 13.5v19q-53 0 -92.5 32t-52.5 81l-81 12l-13 28q-36 78 -36 165z" />
+<glyph unicode="" horiz-adv-x="425" d="M0 286v178q0 8 5.5 13.5t13.5 5.5h196l153 153q23 23 39.5 16t16.5 -39v-476q0 -32 -16.5 -39t-39.5 16l-153 153h-196q-8 0 -13.5 5.5t-5.5 13.5z" />
+<glyph unicode="" horiz-adv-x="600" d="M0 286v178q0 8 5.5 13.5t13.5 5.5h196l153 153q23 23 39.5 16t16.5 -39v-476q0 -32 -16.5 -39t-39.5 16l-153 153h-196q-8 0 -13.5 5.5t-5.5 13.5zM482 205q-4 15 4 29q39 67 39 141q0 73 -39 141q-8 14 -4 29t18 23t28.5 4t22.5 -18q49 -87 49 -179t-49 -179 q-11 -19 -33 -19q-8 0 -18 5q-14 8 -18 23z" />
+<glyph unicode="" d="M0 286v178q0 8 5.5 13.5t13.5 5.5h196l153 153q23 23 39.5 16t16.5 -39v-476q0 -32 -16.5 -39t-39.5 16l-153 153h-196q-8 0 -13.5 5.5t-5.5 13.5zM482 205q-4 15 4 29q39 67 39 141q0 73 -39 141q-8 14 -4 29t18 23t28.5 4t22.5 -18q49 -87 49 -179t-49 -179 q-11 -19 -33 -19q-8 0 -18 5q-14 8 -18 23zM603 117q-3 15 5 29q67 105 67 229t-67 229q-8 14 -5 29t17 23t29 5t23 -17q38 -61 58 -129t20 -140t-20 -140t-58 -129q-5 -9 -14 -13.5t-18 -4.5q-11 0 -20 6q-14 8 -17 23zM723.5 30q-2.5 15 5.5 28q48 72 72 152t24 165 t-24 165t-72 152q-8 13 -5.5 28t16.5 24q13 8 28 5t24 -16q54 -81 81 -171.5t27 -186.5t-27 -186.5t-81 -171.5q-12 -17 -32 -17q-11 0 -20 6q-14 9 -16.5 24z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 0v341h341v-341h-341zM0 409v341h341v-341h-341zM68 68h205v205h-205v-205zM68 477h205v205h-205v-205zM136 136v69h69v-69h-69zM136 545v68h69v-68h-69zM409 0v341h204v-68h69v68h68v-205h-205v68h-68v-204h-68zM409 409v341h341v-341h-341zM477 477h205v205h-205 v-205zM545 0v68h68v-68h-68zM545 545v68h68v-68h-68zM682 0v68h68v-68h-68z" />
+<glyph unicode="" d="M0 0v750h75v-750h-75zM111 0v750h18v-750h-18zM174 0v750h57v-750h-57zM266 0v750h38v-750h-38zM349 0v750h37v-750h-37zM441 0v750h18v-750h-18zM495 0v750h75v-750h-75zM596 0v750h38v-750h-38zM688 0v750h19v-750h-19zM771 0v750h18v-750h-18zM825 0v750h75v-750h-75z " />
+<glyph unicode="" horiz-adv-x="750" d="M0 474v218q0 24 17 41t41 17h218q24 0 53 -12t46 -29l358 -358q17 -17 17 -41t-17 -41l-252 -252q-17 -17 -41 -17t-41 17l-358 358q-17 17 -29 46t-12 53zM94 600q0 -23 16.5 -39.5t39.5 -16.5t39.5 16.5t16.5 39.5t-16.5 39.5t-39.5 16.5t-39.5 -16.5t-16.5 -39.5z" />
+<glyph unicode="" horiz-adv-x="898" d="M0 475v217q0 24 17 41t41 17h217q24 0 53.5 -11.5t45.5 -29.5l321 -358q16 -17 16.5 -41t-16.5 -41l-252 -251q-17 -17 -41 -17.5t-41 17.5l-320 358q-16 18 -28.5 46.5t-12.5 52.5zM94 600q0 -23 16.5 -39.5t39.5 -16.5t39.5 16.5t16.5 39.5t-16.5 39.5t-39.5 16.5 t-39.5 -16.5t-16.5 -39.5zM379 749h83q24 0 53.5 -12t45.5 -29l321 -358q16 -18 16.5 -41.5t-16.5 -40.5l-252 -251q-17 -17 -41 -17.5t-41 17.5l-6 7l246 245q17 17 16.5 41t-16.5 41l-320 358q-15 16 -40.5 27t-48.5 13z" />
+<glyph unicode="" horiz-adv-x="835" d="M5 152q1 8 2 15.5t2 16.5q0 5 -2 10t-1 10q1 8 7.5 15.5t12.5 17.5q11 18 22 44t16 45q2 8 -0.5 15t-0.5 13q2 8 8 13.5t10 11.5q5 9 10.5 20.5t10.5 24t8 24.5t4 20t-1 16t0 14q3 8 10 13t12 12q5 6 10.5 17t11 24t9.5 25.5t5 22.5q1 6 -2 12t-1 13t9 14.5t13 15.5 q8 12 14 28.5t14.5 30t22.5 21t38 0.5l-1 -2q15 5 26 5h381q38 0 58 -28q20 -26 9 -63l-138 -442q-9 -31 -38 -52.5t-62 -21.5h-436q-5 0 -10 -1t-9 -6q-6 -10 0 -27q8 -21 29.5 -37t42.5 -16h462q14 0 28 10.5t18 23.5l151 482q2 8 2.5 14.5t-0.5 13.5q20 -7 30 -21 q20 -26 9 -63l-138 -442q-9 -32 -38 -53t-62 -21h-462q-20 0 -39 7t-36 19t-30 28.5t-20 35.5q-12 33 -1 62zM244 469q-5 -19 13 -19h300q8 0 15 5.5t9 13.5l12 37q2 8 -1.5 13.5t-11.5 5.5h-300q-8 0 -15.5 -5.5t-9.5 -13.5zM278 581q-2 -8 1.5 -13t11.5 -5h300q8 0 15 5 t10 13l11 38q2 8 -1.5 13.5t-11.5 5.5h-300q-8 0 -15 -5.5t-10 -13.5z" />
+<glyph unicode="" horiz-adv-x="600" d="M0 54v641q0 17 9 30.5t25 20.5q5 2 10 3t11 1h490q5 0 10.5 -1t10.5 -3q16 -7 25 -20.5t9 -30.5v-641q0 -17 -9 -30.5t-25 -19.5q-15 -7 -31.5 -3.5t-27.5 15.5l-207 207l-207 -207q-11 -12 -27.5 -15.5t-31.5 3.5q-16 7 -25 20t-9 30z" />
+<glyph unicode="" d="M0 19v169q0 23 9 43.5t24.5 35.5t36 24t43.5 9h675q23 0 43.5 -9t35.5 -24t24 -35.5t9 -43.5v-169q0 -19 -19 -19h-862q-19 0 -19 19zM131 94q0 -8 5.5 -13t13.5 -5h600q8 0 13.5 5t5.5 13v19q0 8 -5.5 13.5t-13.5 5.5h-600q-8 0 -13.5 -5.5t-5.5 -13.5v-19zM150 356v357 q0 15 11 26t27 11h318v-187q0 -24 16.5 -40.5t39.5 -16.5h188v-150h-600zM562 563v187l188 -187h-188z" />
+<glyph unicode="" d="M0 56v525q0 23 16.5 40t39.5 17h179l28 61q9 21 32.5 36t46.5 15h216q23 0 46.5 -15t32.5 -36l28 -61h179q23 0 39.5 -17t16.5 -40v-525q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM216 319q0 -49 18.5 -91.5t50 -74.5t74.5 -50.5t91 -18.5 t91 18.5t74.5 50.5t50 74.5t18.5 91.5q0 48 -18.5 91t-50 74.5t-74.5 50t-91 18.5t-91 -18.5t-74.5 -50t-50 -74.5t-18.5 -91zM291 319q0 33 12.5 62t34 50.5t50.5 34t62 12.5t62 -12.5t50.5 -34t34 -50.5t12.5 -62t-12.5 -62t-34 -51t-50.5 -34.5t-62 -12.5t-62 12.5 t-50.5 34.5t-34 51t-12.5 62z" />
+<glyph unicode="" horiz-adv-x="803" d="M0 0l1 39q5 2 14.5 4t23.5 4q45 9 53 16q8 5 24 33l114 300l135 354h36h26l5 -10l99 -235q16 -38 31 -74t29 -71t25.5 -63.5t20.5 -50.5q6 -14 14 -34t18 -46q11 -32 31 -73q12 -24 17 -28q10 -9 33 -12q12 -1 24 -4.5t26 -8.5q3 -18 3 -27v-5q0 -3 -1 -8q-21 0 -44 1 t-48 3q-26 2 -48.5 3t-42.5 1h-39q-16 0 -26 -1l-97 -5l-28 -1q0 10 0.5 19.5t1.5 18.5l63 13q28 7 33 12q6 4 6 13q0 7 -3 15l-23 56l-44 111l-218 1q-6 -14 -18 -47t-32 -87q-11 -31 -11 -41q0 -13 8 -21q7 -5 19.5 -8.5t30.5 -6.5q7 -2 41 -6v-29q0 -8 -1 -13 q-17 0 -59 2.5t-109 7.5l-24 -4q-21 -4 -40.5 -5.5t-39.5 -1.5h-10zM268 320q66 -1 105.5 -2t51.5 0l14 1q-9 25 -20 54.5t-25 63.5t-25 59.5t-19 42.5z" />
+<glyph unicode="" horiz-adv-x="693" d="M0 0l1 46q13 3 33 6q19 3 34 6.5t27 8.5q4 7 6.5 13t3.5 12q3 16 4 39.5t1 54.5l-1 243q-1 19 -1.5 68t-2.5 130q-2 43 -6 53q-2 4 -6 5q-10 7 -34 8q-11 0 -56 6l-2 41l128 3l187 6h22q4 1 8 1h6q3 0 10.5 -0.5t19.5 -0.5h37q45 0 94 -13q9 -2 21 -6.5t26 -12.5 q31 -15 51 -37q22 -23 32 -51q5 -14 7.5 -28.5t2.5 -30.5q0 -35 -16 -63q-15 -28 -46 -51q-8 -6 -26.5 -15t-47.5 -23q87 -20 131 -71q45 -51 45 -115q0 -35 -14 -79q-11 -32 -35 -57q-32 -35 -69 -53q-38 -17 -100 -29q-34 -6 -97 -5l-97 2q-31 1 -67.5 -1t-79.5 -5 q-12 -1 -45.5 -2t-88.5 -3zM262 693q0 -6 0.5 -15.5t1.5 -21.5q1 -25 2 -58.5t0 -77.5v-48v-38q12 -2 25.5 -3t28.5 -1q86 0 130 32t44 110q0 55 -42 91q-41 37 -126 37q-26 0 -64 -7zM266 223l2 -132q0 -8 5 -21q36 -16 69 -16q64 0 107 20q40 19 60 55q9 18 14 40t5 49 q0 55 -21 88q-29 46 -69 61q-39 16 -122 16q-18 0 -30 -1.5t-20 -3.5v-70v-85z" />
+<glyph unicode="" horiz-adv-x="515" d="M0 0l9 41q6 2 15.5 4.5t22.5 5.5q20 5 34.5 9.5t24.5 9.5q14 19 20 50l14 67l28 131l6 31q11 58 20 87t9 31l15 76l8 31l11 66l4 24v19q-22 11 -72 14q-7 0 -11.5 0.5t-8.5 0.5l10 51l159 -7q15 -1 24 -1h13q17 0 43.5 1t64.5 3q20 2 33.5 3t18.5 1q-1 -5 -1.5 -9.5 t-1.5 -9.5q-2 -5 -4 -11l-3 -14q-24 -8 -54 -15q-32 -8 -51 -15q-6 -16 -12 -43q-3 -12 -4.5 -22t-2.5 -18q-11 -49 -19.5 -86t-13.5 -63l-31 -152l-19 -77l-21 -115l-7 -22v-5q0 -3 1 -8q17 -4 31.5 -6.5t28.5 -4.5q2 0 10.5 -1t22.5 -3q-1 -9 -1.5 -16t-1.5 -13 q-1 -3 -2 -8t-3 -11q-4 0 -7 -0.5t-5 -0.5q-9 -1 -14 -1h-7h-5q-4 0 -9 2q-4 0 -22 2t-51 6l-99 1q-30 0 -88 -6q-19 -2 -31 -3t-18 -1z" />
+<glyph unicode="" d="M0 562q7 18 17 54t22 90q4 16 6.5 26.5t4.5 15.5h28q2 -3 3 -5l2 -4q14 -28 20 -35q8 -2 63 -2q17 0 32.5 0.5t29.5 0.5l10 1l55 1l104 -1h141l27 5q5 4 13 26l2 6q1 3 3 8l21 1h5q3 0 8 -1q1 -19 0.5 -47.5t0.5 -67.5v-49v-28q0 -7 -0.5 -13.5t-1.5 -11.5 q-10 -4 -18 -5.5t-15 -3.5q-13 25 -26 63q-14 40 -18 45q-6 7 -13 10q-5 2 -30 2h-67h-15q-8 0 -17 -2q-3 -21 -3 -35l1 -74v-163l1 -175v-72q0 -35 5 -57q4 -2 10.5 -4t16.5 -4q2 0 10.5 -2t24.5 -6q13 -5 24 -9q2 -10 2 -16v-9v-5q0 -4 -1 -9h-17q-23 0 -43 1t-37 3 t-46.5 3t-72.5 1q-8 0 -28 -2t-53 -5q-14 -1 -22 -1.5t-12 -0.5q0 5 -0.5 8t-0.5 5l-1 12v5q9 15 39 24q46 13 66 24q2 5 3 12.5t2 15.5q2 33 3 86t0 125l-2 209q-1 44 -1 69.5t-2 35.5q0 4 -3 7q-2 3 -6 3q-8 2 -31 2h-62q-44 0 -58 -10q-20 -14 -59 -75q-11 -17 -17 -17 q-11 6 -17.5 11.5t-9.5 9.5zM675.5 112.5q2.5 6.5 15.5 6.5h59v512h-59q-13 0 -15.5 6.5t6.5 16.5l90 90q7 6 16 6q7 0 15 -6l90 -90q9 -10 6.5 -16.5t-16.5 -6.5h-58v-512h58q14 0 16.5 -6.5t-6.5 -15.5l-90 -91q-8 -6 -16 -6t-15 6l-90 91q-9 9 -6.5 15.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 114q0 9 6 15l91 90q9 10 15.5 7t6.5 -16v-59h512v59q0 13 6.5 16t16.5 -7l90 -90q6 -6 6 -15t-6 -15l-90 -91q-10 -9 -16.5 -6.5t-6.5 16.5v58h-512v-58q0 -14 -6.5 -16.5t-15.5 6.5l-91 91q-6 6 -6 15zM0 602q7 14 16.5 42.5t21.5 71.5q3 13 5.5 21t4.5 13h27 q4 -6 5 -7q13 -23 18 -28q1 0 17.5 -0.5t38.5 -0.5h44h36h60l9 1h53h99h203l26 3q6 5 12 22q1 2 2 4.5t3 6.5h19h14v-92v-39v-22q0 -6 -0.5 -10.5t-1.5 -9.5q-16 -5 -31 -7q-12 18 -25 50q-13 29 -17 36q-6 5 -13 7q-3 1 -20.5 1.5t-41.5 0.5h-50h-48h-14q-8 0 -17 -1 q-1 -9 -1.5 -16t-0.5 -12l2 -217l-1 -58q0 -30 6 -45q6 -3 26 -6q2 0 10 -2t22 -5q7 -2 13 -3.5t11 -3.5q1 -8 1.5 -12.5t0.5 -6.5t-0.5 -5t-0.5 -7h-16q-46 0 -77 3q-32 3 -115 3q-7 0 -26 -1.5t-51 -3.5q-13 -1 -21 -1.5t-12 -0.5q0 8 -1 10v10v4q10 13 36 19q44 10 64 20 q2 4 3 9.5t2 12.5q0 9 0.5 34.5t0.5 58.5t-0.5 69.5t-1 68t-1 52.5t-0.5 23q0 4 -3 6q-1 1 -6 3q-7 1 -29 1h-60q-10 0 -30.5 -0.5t-41.5 -1t-38 -2t-20 -3.5q-20 -12 -57 -60q-10 -14 -16 -14q-11 5 -17 9.5t-9 7.5z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t27 11h825q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM0 244v56q0 16 11 27t27 11h525q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-525q-16 0 -27 11t-11 27zM0 450v56q0 16 11 27t27 11h750q15 0 26 -11t11 -27 v-56q0 -16 -11 -26.5t-26 -10.5h-750q-16 0 -27 10.5t-11 26.5zM0 656v57q0 15 11 26t27 11h450q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-450q-16 0 -27 11t-11 26z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t27 11h825q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM38 450v56q0 16 10.5 27t26.5 11h750q16 0 27 -11t11 -27v-56q0 -16 -11 -26.5t-27 -10.5h-750q-16 0 -26.5 10.5t-10.5 26.5zM150 244v56q0 16 11 27t27 11h525 q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-525q-16 0 -27 11t-11 27zM188 656v57q0 15 10.5 26t26.5 11h450q16 0 27 -11t11 -26v-57q0 -15 -11 -26t-27 -11h-450q-16 0 -26.5 11t-10.5 26z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t27 11h825q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM75 450v56q0 16 11 27t27 11h750q15 0 26 -11t11 -27v-56q0 -16 -11 -26.5t-26 -10.5h-750q-16 0 -27 10.5t-11 26.5zM300 244v56q0 16 11 27t27 11h525 q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-525q-16 0 -27 11t-11 27zM375 656v57q0 15 11 26t27 11h450q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-450q-16 0 -27 11t-11 26z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t27 11h825q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM0 244v56q0 16 11 27t27 11h825q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-825q-16 0 -27 11t-11 27zM0 450v56q0 16 11 27t27 11h825q15 0 26 -11t11 -27 v-56q0 -16 -11 -26.5t-26 -10.5h-825q-16 0 -27 10.5t-11 26.5zM0 656v57q0 15 11 26t27 11h825q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-825q-16 0 -27 11t-11 26z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t27 11h75q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-75q-16 0 -27 11t-11 27zM0 244v56q0 16 11 27t27 11h75q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-75q-16 0 -27 11t-11 27zM0 450v56q0 16 11 27t27 11h75q15 0 26 -11t11 -27v-56 q0 -16 -11 -26.5t-26 -10.5h-75q-16 0 -27 10.5t-11 26.5zM0 656v57q0 15 11 26t27 11h75q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-75q-16 0 -27 11t-11 26zM225 38v56q0 15 11 26t27 11h600q15 0 26 -11t11 -26v-56q0 -16 -11 -27t-26 -11h-600q-16 0 -27 11 t-11 27zM225 244v56q0 16 11 27t27 11h600q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-600q-16 0 -27 11t-11 27zM225 450v56q0 16 11 27t27 11h600q15 0 26 -11t11 -27v-56q0 -16 -11 -26.5t-26 -10.5h-600q-16 0 -27 10.5t-11 26.5zM225 656v57q0 15 11 26t27 11h600 q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-600q-16 0 -27 11t-11 26z" />
+<glyph unicode="" d="M0 369v37q0 19 19 19h104v75q0 15 8 18t19 -8l105 -105q8 -8 8 -18q0 -9 -8 -17l-105 -105q-11 -11 -19 -8t-8 19v74h-104q-19 0 -19 19zM300 19v712q0 19 19 19h37q19 0 19 -19v-712q0 -19 -19 -19h-37q-19 0 -19 19zM450 38v56q0 15 11 26t27 11h375q15 0 26 -11 t11 -26v-56q0 -16 -11 -27t-26 -11h-375q-16 0 -27 11t-11 27zM450 244v56q0 16 11 27t27 11h300q15 0 26 -11t11 -27v-56q0 -16 -11 -27t-26 -11h-300q-16 0 -27 11t-11 27zM450 450v56q0 16 11 27t27 11h337q16 0 27 -11t11 -27v-56q0 -16 -11 -26.5t-27 -10.5h-337 q-16 0 -27 10.5t-11 26.5zM450 656v57q0 15 11 26t27 11h262q16 0 27 -11t11 -26v-57q0 -15 -11 -26t-27 -11h-262q-16 0 -27 11t-11 26z" />
+<glyph unicode="" d="M0 38v56q0 15 11 26t26 11h375q16 0 27 -11t11 -26v-56q0 -16 -11 -27t-27 -11h-375q-15 0 -26 11t-11 27zM0 244v56q0 16 11 27t26 11h300q16 0 27 -11t11 -27v-56q0 -16 -11 -27t-27 -11h-300q-15 0 -26 11t-11 27zM0 450v56q0 16 11 27t26 11h338q15 0 26 -11t11 -27 v-56q0 -16 -11 -26.5t-26 -10.5h-338q-15 0 -26 10.5t-11 26.5zM0 656v57q0 15 11 26t26 11h263q15 0 26 -11t11 -26v-57q0 -15 -11 -26t-26 -11h-263q-15 0 -26 11t-11 26zM525 19v712q0 19 19 19h37q8 0 13.5 -5.5t5.5 -13.5v-712q0 -8 -5.5 -13.5t-13.5 -5.5h-37 q-19 0 -19 19zM637 363q0 8 7 17l106 105q11 11 18.5 8t7.5 -19v-74h105q8 0 13.5 -5.5t5.5 -13.5v-37q0 -8 -5.5 -13.5t-13.5 -5.5h-105v-75q0 -15 -7.5 -18.5t-18.5 7.5l-106 106q-7 9 -7 18z" />
+<glyph unicode="" d="M-2 113v525q0 23 9 43.5t24.5 35.5t36 24t43.5 9h375q23 0 43.5 -9t36 -24t24.5 -35.5t9 -43.5v-169l251 272q9 9 20 9q5 0 11 -2q18 -8 18 -28v-690q0 -20 -18 -28q-17 -7 -31 7l-251 272v-168q0 -23 -9 -43.5t-24.5 -36t-36 -24.5t-43.5 -9h-375q-23 0 -43.5 9 t-36 24.5t-24.5 36t-9 43.5z" />
+<glyph unicode="" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h788q23 0 39.5 -16.5t16.5 -39.5v-638q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM75 75h750v600h-750v-600zM150 150v51l135 176l92 -76l173 262l200 -207v-206h-600zM150 524q0 32 22 54t54 22q31 0 53 -22 t22 -54q0 -31 -22 -53t-53 -22q-32 0 -54 22t-22 53z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 0l67 204l423 423l137 -137l-423 -423zM140 199q0 -6 5 -11q4 -4 11 -4q6 0 10 4l337 337q10 10 0 21q-5 5 -11 5t-10 -5l-337 -336q-5 -5 -5 -11zM538 675l58 58q17 17 41 17t41 -17l28 -27l27 -28q17 -17 17 -41t-17 -41l-58 -58z" />
+<glyph unicode="" horiz-adv-x="530" d="M0 485q0 55 21 103t57 84t84 57t103 21t103 -21t84 -57t57 -84t21 -103q0 -40 -12 -75t-30 -67l-179 -311q-18 -32 -44 -32t-44 32l-179 311q-18 32 -30 67.5t-12 74.5zM134 485q0 -27 10 -51t28 -42t42 -28t51 -10t51 10t41.5 28t28 42t10.5 51t-10.5 51t-28 41.5 t-41.5 28t-51 10.5t-51 -10.5t-42 -28t-28 -41.5t-10 -51z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5v525q-54 0 -102 -20.5 t-83.5 -56.5t-56 -84t-20.5 -102z" />
+<glyph unicode="" horiz-adv-x="531" d="M0 266q0 39 11 75t31 67q10 16 33 47t50.5 72.5t53.5 90.5t42 102q5 17 17.5 24.5t26.5 5.5q15 2 27.5 -5.5t17.5 -24.5q16 -53 42 -102t53.5 -90.5t50.5 -72.5t33 -47q20 -31 31 -67t11 -75q0 -55 -21 -103.5t-57 -84.5t-84.5 -57t-103.5 -21t-103 21t-84 57t-57 84.5 t-21 103.5zM116 207q0 -28 19.5 -47t47.5 -19q27 0 46.5 19t19.5 47q0 18 -10 36q-3 4 -9 11.5t-12.5 18t-13 23t-10.5 25.5q-4 9 -11 7q-9 2 -11 -7q-4 -13 -11 -25.5t-13.5 -23t-12.5 -18t-8 -11.5q-11 -17 -11 -36z" />
+<glyph unicode="" d="M0 150v450q0 31 12 58.5t32 47.5t47.5 32t58.5 12h525q2 0 5 -0.5t5 -0.5l-93 -93h-442q-23 0 -39.5 -16.5t-16.5 -39.5v-450q0 -23 16.5 -39.5t39.5 -16.5h525q23 0 39.5 16.5t16.5 39.5v217l94 94v-311q0 -31 -12 -58t-32.5 -47.5t-47.5 -32.5t-58 -12h-525 q-31 0 -58.5 12t-47.5 32.5t-32 47.5t-12 58zM308 158l53 161l318 318l108 -108l-318 -318zM423 307q3 -4 8 -4t8 4l250 249q9 9 0 17t-17 0l-249 -249q-9 -9 0 -17zM733 691l45 46q14 14 33 14t32 -14l22 -22l22 -22q13 -14 13.5 -32.5t-13.5 -32.5l-46 -45z" />
+<glyph unicode="" d="M0 150v450q0 31 12 58.5t32 47.5t47.5 32t58.5 12h408q-3 -15 -3 -31v-25q-80 -10 -151 -38h-254q-23 0 -39.5 -16.5t-16.5 -39.5v-450q0 -23 16.5 -39.5t39.5 -16.5h525q23 0 39.5 16.5t16.5 39.5v54q8 5 15.5 10.5t15.5 13.5l63 62v-140q0 -31 -12 -58t-32.5 -47.5 t-47.5 -32.5t-58 -12h-525q-31 0 -58.5 12t-47.5 32.5t-32 47.5t-12 58zM188 190v18q0 81 27.5 152.5t84.5 125t143.5 84.5t204.5 32v113q0 28 14 34t34 -14l191 -191q13 -12 13 -32q0 -19 -13 -31l-191 -191q-20 -20 -34 -14t-14 34v127q-101 0 -178 -21t-130 -57t-83 -85 t-38 -105q-2 -13 -15 -13q-12 0 -14 13q-2 11 -2 21z" />
+<glyph unicode="" d="M0 150v450q0 31 12 58.5t32 47.5t47.5 32t58.5 12h525q13 0 25 -3l-91 -91h-459q-23 0 -39.5 -16.5t-16.5 -39.5v-450q0 -23 16.5 -39.5t39.5 -16.5h525q23 0 39.5 16.5t16.5 39.5v159l94 94v-253q0 -31 -12 -58t-32.5 -47.5t-47.5 -32.5t-58 -12h-525q-31 0 -58.5 12 t-47.5 32.5t-32 47.5t-12 58zM188 472q0 16 11 27l48 48q11 11 27 11t27 -11l166 -166l319 320q11 11 27.5 11t27.5 -11l48 -48q11 -11 11 -27t-11 -27l-347 -347l-48 -48q-11 -11 -27 -11t-27 11l-49 48l-192 193q-11 11 -11 27z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 12 8 20l121 120q12 13 21 9t9 -21v-80h169v168h-81q-17 0 -21 9t9 21l120 121q8 8 20 8t20 -8l121 -121q12 -12 8.5 -21t-21.5 -9h-81v-168h169v80q0 17 9 21t21 -9l121 -120q8 -8 8 -20t-8 -20l-121 -120q-12 -13 -21 -9.5t-9 21.5v83h-169v-171h81 q18 0 21.5 -9t-8.5 -21l-121 -121q-8 -8 -20 -8t-20 8l-120 121q-13 12 -9 21t21 9h81v171h-169v-83q0 -17 -9 -21t-21 9l-121 120q-8 8 -8 20z" />
+<glyph unicode="" horiz-adv-x="525" d="M0 37q0 -15 11 -26t26 -11h75q16 0 27 11t11 26v675q0 16 -11 27t-27 11h-75q-15 0 -26 -11t-11 -27v-675zM150 375q0 13 8 21l319 345q7 9 20 9q3 0 11 -2q17 -9 17 -29v-689q0 -20 -17 -28q-19 -7 -31 7l-319 344q-8 9 -8 22z" />
+<glyph unicode="" d="M0 37q0 -15 11 -26t26 -11h75q16 0 27 11t11 26v675q0 16 -11 27t-27 11h-75q-15 0 -26 -11t-11 -27v-675zM150 375q0 13 8 21l319 345q7 9 20 9q3 0 11 -2q17 -9 17 -29v-689q0 -20 -17 -28q-19 -7 -31 7l-319 344q-8 9 -8 22zM525 375q0 13 8 21l319 345q7 9 20 9 q3 0 11 -2q17 -9 17 -29v-689q0 -20 -17 -28q-19 -7 -31 7l-319 344q-8 9 -8 22z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 374.5q0 12.5 8 21.5l319 345q7 9 20 9q5 0 11 -3q17 -7 17 -28v-689q0 -20 -17 -28q-18 -8 -31 7l-319 344q-8 9 -8 21.5zM375 374.5q0 12.5 8 21.5l319 345q7 9 20 9q5 0 11 -3q17 -7 17 -28v-689q0 -20 -17 -28q-18 -8 -31 7l-319 344q-8 9 -8 21.5z" />
+<glyph unicode="" horiz-adv-x="659" d="M0 34v682q0 19 17 29q18 11 34 0l591 -340q17 -12 17 -30t-17 -30l-591 -340q-8 -5 -17 -5t-17 5q-17 10 -17 29z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 34v682q0 14 10 24t24 10h239q14 0 24 -10t10 -24v-682q0 -14 -10 -24t-24 -10h-239q-14 0 -24 10t-10 24zM443 34v682q0 14 10 24t24 10h239q14 0 24 -10t10 -24v-682q0 -14 -10 -24t-24 -10h-239q-14 0 -24 10t-10 24z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 34v682q0 14 10 24t24 10h682q14 0 24 -10t10 -24v-682q0 -14 -10 -24t-24 -10h-682q-14 0 -24 10t-10 24z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 30v690q0 19 17 28q19 7 31 -7l319 -344q8 -9 8 -22t-8 -22l-319 -344q-8 -9 -20 -9q-3 0 -11 2q-17 8 -17 28zM375 30v690q0 19 17 28q19 7 31 -7l319 -344q8 -9 8 -22t-8 -22l-319 -344q-8 -9 -20 -9q-3 0 -11 2q-17 8 -17 28z" />
+<glyph unicode="" d="M0 30v690q0 19 17 28q19 7 31 -7l319 -344q8 -9 8 -22t-8 -22l-319 -344q-8 -9 -20 -9q-3 0 -11 2q-17 8 -17 28zM375 30v690q0 19 17 28q19 7 31 -7l319 -344q8 -9 8 -22t-8 -22l-319 -344q-8 -9 -20 -9q-3 0 -11 2q-17 8 -17 28zM750 37q0 -15 11 -26t26 -11h75 q16 0 27 11t11 26v675q0 16 -11 27t-27 11h-75q-15 0 -26 -11t-11 -27v-675z" />
+<glyph unicode="" horiz-adv-x="525" d="M0 30v690q0 19 17 28q19 7 31 -7l319 -344q8 -9 8 -22t-8 -22l-319 -344q-8 -9 -20 -9q-3 0 -11 2q-17 8 -17 28zM375 37q0 -15 11 -26t26 -11h75q16 0 27 11t11 26v675q0 16 -11 27t-27 11h-75q-15 0 -26 -11t-11 -27v-675z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 34v97q0 14 10 24t24 10h682q14 0 24 -10t10 -24v-97q0 -14 -10 -24t-24 -10h-682q-14 0 -24 10t-10 24zM3 290q-9 21 7 37l341 341q10 10 24 10t24 -10l341 -341q16 -16 7 -37q-8 -21 -31 -21h-682q-23 0 -31 21z" />
+<glyph unicode="" horiz-adv-x="471" d="M0 373.5q0 18.5 14 32.5l328 329q14 14 33 14t33 -14l49 -49q14 -14 14 -33t-14 -33l-248 -249l248 -244q14 -14 14 -32.5t-14 -32.5l-49 -50q-14 -14 -33 -14t-33 14l-328 329q-14 14 -14 32.5z" />
+<glyph unicode="" horiz-adv-x="471" d="M0 95q0 19 14 33l248 248l-248 245q-14 14 -14 32.5t14 32.5l49 50q14 14 33 14t33 -14l328 -329q14 -14 14 -33t-14 -33l-328 -328q-14 -14 -33 -14t-33 14l-49 49q-14 14 -14 33z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM159 338q0 -7 4.5 -11.5t10.5 -4.5h147v-161q0 -7 4.5 -11.5t10.5 -4.5h78 q6 0 10.5 4.5t4.5 11.5v161h147q6 0 10.5 4.5t4.5 11.5v74q0 6 -4.5 10.5t-10.5 4.5h-147v162q0 7 -4.5 11.5t-10.5 4.5h-78q-6 0 -10.5 -4.5t-4.5 -11.5v-162h-147q-6 0 -10.5 -4.5t-4.5 -10.5v-74z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM159 338q0 -7 4.5 -11.5t10.5 -4.5h402q6 0 10.5 4.5t4.5 11.5v74q0 6 -4.5 10.5 t-10.5 4.5h-402q-6 0 -10.5 -4.5t-4.5 -10.5v-74z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 376q0 72 27.5 141t82.5 124t124 82t141 27t141 -27t124 -82t82.5 -124t27.5 -141t-27.5 -141t-82.5 -124t-124 -82.5t-141 -27.5t-141 27.5t-124 82.5t-82.5 124t-27.5 141zM185 240l55 -54q5 -5 11 -5t11 5l114 114l103 -104q5 -5 11 -5t11 5l53 53q11 11 0 22 l-104 103l115 115q11 11 0 22l-55 55q-11 11 -22 0l-114 -115l-104 104q-11 11 -22 0l-52 -53q-5 -5 -5 -11t5 -11l103 -103l-114 -115q-10 -10 0 -22z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM112 351.5q0 -9.5 7 -16.5l150 -150q7 -6 18 -11t21 -5h25q10 0 21 5t18 11l259 259 q7 7 7 16.5t-7 15.5l-50 50q-6 7 -15.5 7t-16.5 -7l-212 -213q-7 -7 -16.5 -7t-15.5 7l-104 104q-7 7 -16.5 7t-15.5 -7l-50 -49q-7 -7 -7 -16.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM250 531l44 -55q6 -4 10 -5q6 0 10 4q8 6 18 11q8 4 18.5 7.5t21.5 3.5 q20 0 33 -10.5t13 -26.5q0 -17 -11.5 -30.5t-28.5 -28.5q-11 -9 -22 -19.5t-20 -24t-15 -30t-6 -37.5v-30q0 -5 4.5 -9.5t9.5 -4.5h77q6 0 10 4.5t4 9.5v25q0 18 12 31t29 28q12 10 24 21.5t21.5 26.5t16 33t6.5 42q0 32 -13 57t-34.5 41.5t-48.5 25t-54 8.5 q-30 0 -53.5 -7.5t-40 -16.5t-25 -17t-9.5 -9q-9 -9 -1 -18zM315 132q0 -5 4.5 -9.5t9.5 -4.5h77q6 0 10 4.5t4 9.5v74q0 14 -14 14h-77q-5 0 -9.5 -4t-4.5 -10v-74z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM269 418q0 -14 14 -14h40v-192h-37q-5 0 -9.5 -4.5t-4.5 -9.5v-66q0 -5 4.5 -9.5 t9.5 -4.5h189q5 0 9.5 4.5t4.5 9.5v66q0 5 -4.5 9.5t-9.5 4.5h-36v271q0 6 -4.5 10t-9.5 4h-142q-14 0 -14 -14v-65zM322 555q0 -6 4.5 -10.5t10.5 -4.5h88q5 0 9.5 4.5t4.5 10.5v77q0 6 -4.5 10t-9.5 4h-88q-6 0 -10.5 -4t-4.5 -10v-77z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 338v75q0 8 5.5 13t13.5 5h80q9 41 29 77.5t48.5 65t65 48.5t77.5 29v80q0 19 19 19h75q8 0 13 -5.5t5 -13.5v-80q41 -9 77.5 -29t65 -48.5t48.5 -65t29 -77.5h80q8 0 13.5 -5t5.5 -13v-75q0 -19 -19 -19h-80q-9 -41 -29 -77.5t-48.5 -65t-65 -48.5t-77.5 -29v-80 q0 -8 -5 -13.5t-13 -5.5h-75q-19 0 -19 19v80q-41 9 -77.5 29t-65 48.5t-48.5 65t-29 77.5h-80q-19 0 -19 19zM178 319q14 -52 51.5 -89.5t89.5 -51.5v85q0 8 5.5 13t13.5 5h75q8 0 13 -5t5 -13v-85q52 14 89.5 51.5t51.5 89.5h-84q-19 0 -19 19v75q0 8 5.5 13t13.5 5h84 q-14 52 -51.5 89.5t-89.5 51.5v-84q0 -8 -5 -13.5t-13 -5.5h-75q-19 0 -19 19v84q-52 -14 -89.5 -51.5t-51.5 -89.5h85q8 0 13 -5t5 -13v-75q0 -8 -5 -13.5t-13 -5.5h-85z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 84t-84 56.5t-102 20.5t-102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102zM212 466q0 8 5 14l53 53q6 5 14 5t13 -5l78 -78l78 78q6 5 14 5t13 -5l53 -53q5 -6 5 -14t-5 -13l-78 -78l78 -78q12 -14 0 -27l-53 -53q-14 -12 -27 0l-78 78l-78 -78 q-5 -5 -13 -5t-14 5l-53 53q-12 13 0 27l79 78l-79 78q-5 5 -5 13z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -54 20.5 -102t56 -83.5t83.5 -56t102 -20.5t102 20.5t84 56t56.5 83.5 t20.5 102t-20.5 102t-56.5 84t-84 56.5t-102 20.5t-102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102zM156 352q0 8 5 13l53 53q5 5 13 5t14 -5l83 -84q13 -12 27 0l158 159q6 5 14 5t13 -5l53 -53q5 -5 5 -13t-5 -14l-192 -192q-6 -5 -15 -9t-17 -4h-55q-8 0 -17 4t-15 9 l-117 117q-5 6 -5 14z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM113 375q0 -39 10.5 -74.5t30.5 -66.5l362 362q-31 20 -66.5 31t-74.5 11 q-54 0 -102 -20.5t-83.5 -56.5t-56 -84t-20.5 -102zM234 154q31 -20 66.5 -30.5t74.5 -10.5q54 0 102 20.5t84 56t56.5 83.5t20.5 102q0 39 -11 74.5t-31 66.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 19 14 33l328 329q14 14 33 14t33 -14l49 -49q14 -14 14 -33t-14 -33l-165 -165h411q20 0 33.5 -13.5t13.5 -33.5v-70q0 -19 -13.5 -32.5t-32.5 -13.5h-412l165 -165q14 -14 14 -33t-14 -33l-49 -49q-14 -14 -33 -14t-33 14l-328 328q-14 14 -14 33z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 341v70q0 19 13.5 32.5t32.5 13.5h412l-165 165q-14 14 -14 33t14 33l49 49q14 14 33 14t33 -14l328 -329q14 -14 14 -32.5t-14 -32.5l-328 -329q-14 -14 -33 -14t-33 14l-49 49q-14 14 -14 33t14 33l165 165h-412q-19 0 -32.5 13.5t-13.5 33.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M-0.5 375q-0.5 19 13.5 33l329 328q14 14 33 14t33 -14l328 -328q14 -14 14 -33t-14 -33l-49 -49q-14 -14 -32.5 -14t-32.5 14l-166 165v-412q0 -19 -13.5 -32.5t-32.5 -13.5h-70q-20 0 -33 13.5t-13 32.5v412l-165 -165q-14 -14 -33 -14t-33 14l-49 49q-14 14 -14.5 33z " />
+<glyph unicode="" horiz-adv-x="750" d="M0 374q0 19 14 33l49 49q14 14 33 14t33 -14l165 -165v412q0 19 13.5 32.5t32.5 13.5h70q20 0 33 -13.5t13 -32.5v-412l166 165q14 14 32.5 14t32.5 -14l50 -49q14 -14 14 -33t-14 -33l-329 -328q-14 -14 -33 -14t-33 14l-328 328q-14 14 -14 33z" />
+<glyph unicode="" d="M0 66q0 102 35 192t106.5 157.5t181 107t259.5 40.5v143q0 35 17.5 42.5t43.5 -17.5l240 -241q17 -16 17 -40q0 -23 -17 -40l-240 -241q-25 -25 -43 -17.5t-18 42.5v161q-128 -1 -225 -27.5t-164 -72t-105 -107t-48 -132.5q-2 -16 -18 -16h-1q-16 0 -18 16q-3 25 -3 50z " />
+<glyph unicode="" horiz-adv-x="750" d="M0 42v255q0 26 13 31.5t32 -12.5l81 -81l134 134q6 6 15 6t16 -6l78 -78q6 -7 6 -16t-6 -15l-134 -134l81 -81q19 -19 13 -32t-32 -13h-254q-18 0 -30 12q-13 13 -13 30zM375 475q0 9 6 15l134 134l-81 81q-19 19 -13 32t32 13h254q18 0 30 -12q13 -13 13 -30v-255 q0 -26 -13 -31.5t-32 12.5l-81 81l-134 -133q-6 -7 -15 -7t-16 7l-78 77q-6 7 -6 16z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 99q0 9 6 16l134 133l-81 81q-19 19 -13 32t32 13h254q19 0 30 -12q13 -13 13 -30v-255q0 -26 -13 -31.5t-32 13.5l-81 81l-134 -134q-6 -7 -15 -7t-16 7l-78 78q-6 6 -6 15zM375 417v255q0 26 13 31.5t32 -13.5l81 -81l134 134q6 7 15 7t16 -7l78 -78q6 -6 6 -15 t-6 -16l-134 -133l81 -81q19 -19 13 -32t-32 -13h-254q-20 0 -30 12q-13 13 -13 30z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 340v70q0 19 13.5 32.5t32.5 13.5h248v247q0 20 13 33.5t33 13.5h70q19 0 32.5 -13.5t13.5 -32.5v-248h248q19 0 32.5 -13.5t13.5 -32.5v-70q0 -19 -13.5 -32.5t-32.5 -13.5h-248v-247q0 -20 -13.5 -33.5t-32.5 -13.5h-70q-19 0 -32.5 13.5t-13.5 32.5v248h-247 q-20 0 -33.5 13t-13.5 33z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 340v70q0 19 13.5 32.5t32.5 13.5h658q19 0 32.5 -13.5t13.5 -32.5v-70q0 -19 -13.5 -32.5t-32.5 -13.5h-657q-20 0 -33.5 13t-13.5 33z" />
+<glyph unicode="" horiz-adv-x="697" d="M1 497q-5 18 5 35l35 61q10 17 28.5 21.5t35.5 -4.5l162 -94v187q0 20 13.5 33.5t33.5 13.5h69q20 0 33.5 -13.5t13.5 -32.5v-188l162 94q17 9 35.5 4.5t28.5 -21.5l34 -61q10 -17 5.5 -35t-21.5 -28l-163 -94l163 -94q17 -10 21.5 -28t-4.5 -35l-35 -61 q-10 -17 -28.5 -21.5t-35.5 4.5l-162 94v-187q0 -20 -13.5 -33.5t-33.5 -13.5h-69q-20 0 -33.5 13.5t-13.5 32.5v188l-162 -94q-17 -10 -35.5 -5t-28.5 22l-35 61q-9 17 -4.5 35t21.5 28l163 94l-163 94q-17 10 -22 28z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 375q0 78 29.5 146t80.5 119t119 80.5t146 29.5t146 -29.5t119 -80.5t80.5 -119t29.5 -146t-29.5 -146t-80.5 -119t-119 -80.5t-146 -29.5t-146 29.5t-119 80.5t-80.5 119t-29.5 146zM316 613l6 -347q2 -14 15 -14h76q14 0 14 14l7 347q1 5 -4 10q-3 4 -10 4h-90 q-7 0 -10 -4q-4 -4 -4 -10zM319 125q0 -14 14 -14h85q5 0 9.5 4t4.5 10v82q0 6 -4.5 10t-9.5 4h-85q-14 0 -14 -14v-82z" />
+<glyph unicode="" d="M0 281v188q0 8 5.5 13.5t13.5 5.5h258q-27 0 -51 10t-42 28t-28.5 42t-10.5 51t10.5 51t28.5 41.5t42 28t51 10.5q29 0 55 -11.5t43 -33.5l75 -97l75 97q17 22 43 33.5t55 11.5q27 0 51 -10.5t42 -28t28.5 -41.5t10.5 -51t-10.5 -51t-28.5 -42t-42 -28t-51 -10h258 q8 0 13.5 -5.5t5.5 -13.5v-188q0 -8 -5.5 -13t-13.5 -5h-56v-207q0 -23 -16.5 -39.5t-39.5 -16.5h-638q-23 0 -39.5 16.5t-16.5 39.5v207h-56q-8 0 -13.5 5t-5.5 13zM220 619q0 -23 17 -39.5t40 -16.5h113l-73 94q-5 5 -15 11.5t-25 6.5q-23 0 -40 -16.5t-17 -39.5zM356 105 q0 -15 11 -26t27 -11h112q16 0 27 11t11 26v383h-188v-383zM509 563h114q23 0 40 16.5t17 39.5t-17 39.5t-40 16.5q-15 0 -25 -6.5t-15 -11.5z" />
+<glyph unicode="" d="M3 78q9 25 25.5 41.5t33.5 30.5q14 11 24 20.5t13 20.5q1 2 0 5t-5 11q-2 6 -5 13.5t-5 16.5q-12 75 6.5 139t56.5 114.5t91 86.5t111 56q38 14 83.5 16.5t95.5 3.5q28 0 59.5 1t60.5 5.5t53.5 13.5t39.5 25q10 10 18.5 19.5t18 16.5t20.5 11.5t27 4.5q23 0 33 -21 q62 -121 32 -283q-42 -228 -272 -347q-110 -57 -220 -57q-36 0 -72.5 6t-71.5 19q-11 4 -21.5 9.5t-21.5 10.5q-13 8 -26.5 14.5t-22.5 7.5q-5 -1 -11.5 -8t-13 -16.5t-12.5 -19t-10 -15.5q-6 -11 -12 -20t-11 -16q-11 -14 -29 -14h-2q-28 2 -39 17.5t-14 23.5q-13 18 -5 37 zM188.5 253.5q1.5 -15.5 13.5 -26.5q10 -9 24 -9q18 0 28 13q42 48 85.5 82t90.5 54.5t99.5 29t114.5 6.5q15 -2 26.5 9.5t12.5 26.5q0 16 -10.5 27.5t-26.5 11.5q-69 3 -130 -7t-116 -34t-104.5 -63t-97.5 -94q-11 -11 -9.5 -26.5z" />
+<glyph unicode="" horiz-adv-x="675" d="M0 214q0 58 30.5 119.5t82.5 111.5q-11 -75 0.5 -120.5t30.5 -71.5q22 -30 53 -44q-24 105 -14 204q4 42 15.5 87.5t34 90t58.5 85.5t89 74q-23 -49 -22 -90t11 -71q11 -35 34 -64q16 -19 30.5 -37.5t25 -42.5t16.5 -56.5t6 -78.5q-9 20 -27 32t-41 12q-32 0 -53.5 -22 t-21.5 -53q0 -16 5.5 -30t17 -25t30 -17t44.5 -6q44 4 77 31q13 12 25.5 29.5t20.5 43t10 60t-5 80.5h-1q52 -50 82.5 -111.5t30.5 -119.5q0 -54 -26.5 -94t-72.5 -66.5t-107 -40t-131 -13.5t-131.5 13.5t-107.5 40t-72.5 66.5t-26.5 94z" />
+<glyph unicode="" d="M0 352.5q0 21.5 12 40.5q38 61 87 109.5t105.5 82t118.5 51t127 17.5q66 0 128 -17.5t118 -50.5t105 -81.5t88 -110.5q11 -19 11 -40.5t-11 -39.5q-39 -62 -88 -110.5t-105 -81.5t-118 -50.5t-128 -17.5q-65 0 -127 17.5t-118.5 51t-105.5 82t-87 109.5q-12 18 -12 39.5z M75 353q32 -51 73 -93t89 -71t101.5 -45t111.5 -16t111.5 16t101.5 45t89 71t73 93q-39 63 -91.5 110.5t-115.5 76.5q25 -29 39 -65t14 -78q0 -47 -17.5 -87.5t-48.5 -71.5t-72 -48.5t-87 -17.5q-47 0 -87.5 17.5t-71.5 48.5t-48.5 71.5t-17.5 87.5q0 38 12.5 72.5 t33.5 62.5q-57 -29 -106 -74.5t-86 -104.5zM300 397q0 -11 8 -19.5t20 -8.5t20 8.5t8 19.5q0 38 26 64t64 26q12 0 20 8.5t8 19.5q0 12 -8 20t-20 8q-30 0 -57 -11.5t-46.5 -31t-31 -46.5t-11.5 -57z" />
+<glyph unicode="" d="M0 374.5q0 21.5 12 40.5q38 61 87 109.5t105.5 82t118.5 51t127 17.5q26 0 51.5 -3.5t50.5 -8.5l43 77q4 7 12 9q6 3 14 -1l65 -37q7 -4 9.5 -11.5t-1.5 -14.5l-378 -675q-3 -7 -11 -9q-2 -1 -5 -1t-9 2l-66 37q-7 4 -9 11.5t2 14.5l32 56q-71 33 -131.5 87t-106.5 127 q-12 18 -12 39.5zM75 375q40 -64 93.5 -112t117.5 -77l28 51q-42 31 -67.5 78t-25.5 104q0 38 12.5 72.5t33.5 63.5q-57 -30 -106 -75t-86 -105zM300 419q0 -11 8 -19.5t20 -8.5t20 8.5t8 19.5q0 38 26 64t64 26q12 0 20 8.5t8 19.5q0 12 -8 20t-20 8q-30 0 -57 -11.5 t-46.5 -31t-31 -46.5t-11.5 -57zM453 75l43 78q102 12 186.5 70.5t142.5 151.5q-53 83 -128 138l37 67q45 -32 84 -73t71 -92q11 -19 11 -40.5t-11 -39.5q-78 -124 -191.5 -191.5t-244.5 -68.5zM528 210l139 249q2 -10 3 -19.5t1 -20.5q0 -36 -10.5 -68.5t-29.5 -59.5 t-45.5 -48t-57.5 -33z" />
+<glyph unicode="" horiz-adv-x="850" d="M5 23.5q-14 23.5 6 56.5l368 637q18 33 46 33q26 0 46 -33l368 -637q19 -33 5.5 -56.5t-51.5 -23.5h-736q-38 0 -52 23.5zM160 113h530l-265 459zM370 434q0 6 4 10t9 4h84q5 0 9 -4t4 -10l-7 -182q0 -12 -13 -12h-70q-13 0 -13 12zM372 189q0 13 13 13h78q13 0 13 -13 l1 -49q0 -13 -13 -13h-78q-13 0 -13 13z" />
+<glyph unicode="" d="M1 212l34 144q2 8 2 18t-2 18l-34 144q-2 8 2 13.5t12 5.5h45q8 0 17 -4.5t14 -10.5l85 -110q44 9 92 14t94 5h12l-61 283q-2 8 2.5 13t12.5 5h64q8 0 16 -4.5t12 -11.5l164 -285h157q29 0 58 -6.5t51.5 -17t36.5 -24t13 -27.5q1 -14 -13 -27.5t-36.5 -24t-51.5 -17 t-58 -6.5h-158l-163 -283q-4 -7 -12 -11.5t-16 -4.5h-64q-8 0 -12.5 5t-2.5 13l61 281h-12q-46 0 -94 5.5t-92 13.5l-85 -110q-12 -14 -31 -14h-45q-8 0 -12 5t-2 13z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 56v549q0 23 16.5 39.5t39.5 16.5h36v-69q0 -28 19.5 -47.5t47.5 -19.5h15q28 0 48 19.5t20 47.5v69h58v-69q0 -28 19.5 -47.5t47.5 -19.5h16q28 0 47.5 19.5t19.5 47.5v69h58v-69q0 -28 20 -47.5t48 -19.5h15q28 0 47.5 19.5t19.5 47.5v69h36q23 0 39.5 -16.5 t16.5 -39.5v-549q0 -23 -16.5 -39.5t-39.5 -16.5h-638q-23 0 -39.5 16.5t-16.5 39.5zM75 75h600v398h-600v-398zM129 592v128q0 12 9 21t21 9h15q13 0 21.5 -9t8.5 -21v-128q0 -12 -8.5 -20.5t-21.5 -8.5h-15q-12 0 -21 8.5t-9 20.5zM177 158q0 36 20 58.5t43.5 39t43.5 32 t20 36.5q0 20 -11.5 29t-28.5 9q-11 0 -20.5 -4.5t-16.5 -11.5q-4 -4 -7 -8t-6 -9l-34 23q7 14 20 27q11 11 27.5 19t40.5 8q35 0 61 -20.5t26 -58.5q0 -21 -9 -36.5t-23 -28t-30 -22.5t-30 -20t-23.5 -21t-9.5 -25h92v34h42v-73h-185q-1 6 -1.5 12t-0.5 11zM338 592v128 q0 12 8.5 21t20.5 9h16q12 0 21 -9t9 -21v-128q0 -12 -9 -20.5t-21 -8.5h-16q-12 0 -20.5 8.5t-8.5 20.5zM397 330v71h187v-34l-117 -232h-51l107 212q3 8 6 11l3 4v1q-3 0 -5 -1h-13h-75v-32h-42zM546 592v128q0 12 8.5 21t21.5 9h15q12 0 21 -9t9 -21v-128q0 -12 -9 -20.5 t-21 -8.5h-15q-13 0 -21.5 8.5t-8.5 20.5z" />
+<glyph unicode="" d="M0 122v75q0 19 19 19h107q25 0 48.5 15.5t45.5 41t44 58.5t44 68q27 43 56 85.5t62 75.5t72 53.5t88 20.5h99v90q0 20 12 24t29 -10l163 -135q11 -9 11 -23q0 -13 -11 -22l-163 -136q-17 -14 -29 -10t-12 24v86h-99q-26 0 -49 -15.5t-45.5 -41t-44.5 -58.5t-44 -68 q-27 -44 -55.5 -86t-61.5 -75t-72.5 -53.5t-87.5 -20.5h-107q-8 0 -13.5 5t-5.5 13zM0 541v75q0 8 5.5 13.5t13.5 5.5h107q52 0 93.5 -23.5t76.5 -61.5q-18 -25 -34 -49.5t-31 -47.5q-25 31 -50.5 50t-54.5 19h-107q-8 0 -13.5 5.5t-5.5 13.5zM417 190q17 24 33 48.5 t31 48.5q25 -31 50.5 -50t54.5 -19h99v94q0 20 12 24t29 -10l163 -136q11 -9 11 -22q0 -14 -11 -23l-163 -135q-17 -14 -29 -10t-12 24v82h-99q-53 0 -93.5 23t-75.5 61z" />
+<glyph unicode="" d="M0 421q0 68 35.5 128t96.5 104.5t143 70.5t175 26t175 -26t143 -70.5t96.5 -104.5t35.5 -128t-35.5 -128t-96.5 -104.5t-143 -70.5t-175 -26q-44 0 -84 6q-42 -32 -90.5 -55t-103.5 -35l-24 -4q-12 -2 -25 -4q-16 -2 -20 14v1q-2 7 3 11l9 10q10 11 19.5 21.5t17 24.5 t14 32.5t11.5 45.5q-81 45 -129 112.5t-48 148.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 311v139q0 8 5.5 13.5t13.5 5.5h187q8 0 13.5 -5.5t5.5 -13.5v-139q0 -13 11 -28t30.5 -28t47 -21.5t61.5 -8.5t61.5 8.5t47 21.5t30.5 28t11 28v139q0 8 5.5 13.5t13.5 5.5h187q8 0 13.5 -5.5t5.5 -13.5v-139q0 -65 -29.5 -121.5t-80.5 -98.5t-119 -66.5t-146 -24.5 t-146 24.5t-119 66.5t-80.5 98.5t-29.5 121.5zM0 544v187q0 19 19 19h187q19 0 19 -19v-187q0 -19 -19 -19h-187q-19 0 -19 19zM525 544v187q0 19 19 19h187q19 0 19 -19v-187q0 -19 -19 -19h-187q-19 0 -19 19z" />
+<glyph unicode="" horiz-adv-x="750" d="M-0.5 173.5q-0.5 18.5 13.5 32.5l329 329q14 14 33 14t33 -14l328 -329q14 -14 14 -32.5t-14 -32.5l-49 -50q-14 -14 -33 -14t-33 14l-248 249l-244 -249q-14 -14 -33 -14t-33 14l-49 50q-14 14 -14.5 32.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 448.5q0 18.5 14 32.5l49 50q14 14 33 14t33 -14l248 -249l244 249q14 14 33 14t33 -14l49 -50q14 -14 14.5 -32.5t-13.5 -32.5l-329 -329q-14 -14 -33 -14t-33 14l-328 329q-14 14 -14 32.5z" />
+<glyph unicode="" d="M1 502.5q-6 14.5 13 34.5l181 199q12 14 30 14t30 -14l181 -199q19 -20 13 -34.5t-32 -14.5h-117v-319h81q4 -5 6.5 -9.5t7.5 -9.5l119 -131h-327q-15 0 -26 11t-11 26v432h-117q-26 0 -32 14.5zM386 731h326q16 0 27 -11t11 -26v-431h117q26 0 32 -15t-13 -35l-181 -199 q-12 -14 -30 -14t-30 14l-181 199q-19 20 -13 35t32 15h117v318h-81q-4 5 -6.5 9.5t-7.5 9.5z" />
+<glyph unicode="" d="M0 694v37q0 19 19 19h113q8 0 18.5 -2t17.5 -4q3 -2 7 -7t7.5 -11.5t6 -13t3.5 -10.5l13 -61h658q17 0 28 -13t8 -29l-53 -282q-3 -12 -13 -20.5t-24 -8.5h-529l17 -82q2 -8 8.5 -13t14.5 -5h418q8 0 13.5 -5.5t5.5 -13.5v-38q0 -8 -5.5 -13t-13.5 -5h-80h-318h-51 q-8 0 -18 1.5t-17 4.5q-3 1 -7 6.5t-7.5 12t-6 13t-3.5 10.5l-105 496q-2 8 -8.5 13t-14.5 5h-83q-19 0 -19 19zM284 56q0 23 16.5 40t39.5 17q24 0 40.5 -17t16.5 -40t-16.5 -39.5t-40.5 -16.5q-23 0 -39.5 16.5t-16.5 39.5zM602 56q0 23 16.5 40t39.5 17t39.5 -17 t16.5 -40t-16.5 -39.5t-39.5 -16.5t-39.5 16.5t-16.5 39.5z" />
+<glyph unicode="" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h338q23 0 39.5 -16.5t16.5 -39.5t16.5 -39.5t39.5 -16.5h338q23 0 39.5 -17t16.5 -40v-525q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5z" />
+<glyph unicode="" d="M0 185v509q0 23 16.5 39.5t39.5 16.5h338q23 0 39.5 -16.5t16.5 -39.5t16.5 -39.5t39.5 -16.5h216q23 0 39.5 -17t16.5 -40v-108h-600q-18 0 -35 -6t-32 -16.5t-26 -25t-17 -31.5zM21 0l120 371q3 11 15 19t23 8h721l-127 -370q-3 -11 -15 -19.5t-23 -8.5h-714z" />
+<glyph unicode="" horiz-adv-x="375" d="M0.5 187q4.5 11 27.5 11h95v354h-95q-23 0 -27.5 10.5t11.5 26.5l150 151q10 10 26 10q15 0 25 -10l150 -151q16 -15 11.5 -26t-27.5 -11h-95v-354h95q23 0 27.5 -10.5t-11.5 -26.5l-150 -151q-10 -10 -26 -10q-15 0 -25 10l-150 151q-16 15 -11.5 26z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 357q0 15 10 25l151 151q15 15 26 10.5t11 -26.5v-96h354v96q0 22 10.5 26.5t26.5 -11.5l151 -150q10 -10 10 -25t-10 -25l-151 -151q-15 -16 -26 -11t-11 27v96h-354v-96q0 -22 -10.5 -26.5t-26.5 11.5l-151 150q-10 10 -10 25z" />
+<glyph unicode="" d="M0 56v638q0 23 17 39.5t40 16.5h787q23 0 39.5 -16.5t16.5 -39.5v-638q0 -23 -16.5 -39.5t-39.5 -16.5h-787q-23 0 -40 16.5t-17 39.5zM75 75h750v600h-750v-600zM150 129v177h99v-177h-99zM317 129v379h98v-379h-98zM485 129v289h99v-289h-99zM651 129v450h99v-450h-99z " />
+<glyph unicode="" horiz-adv-x="750" d="M0 94v562q0 19 7.5 36.5t20 30t29.5 20t36 7.5h563q39 0 66.5 -27.5t27.5 -66.5v-562q0 -20 -7.5 -37t-20 -29.5t-30 -20t-36.5 -7.5h-563q-19 0 -36 7.5t-29.5 20t-20 29.5t-7.5 37zM98 273q39 -54 97 -82.5t127 -28.5q47 0 90 13t78 36t60.5 55t37.5 70q40 3 63 28 q7 7 2 16q-4 9 -15 7h-2q11 11 15 22q4 10 -4 16q-7 7 -16 1q-4 -2 -14.5 -5t-22.5 -3q-2 0 -3.5 0.5t-3.5 0.5q0 1 -0.5 2t-0.5 2q-8 30 -28 54t-46 35q2 2 3 4t3 4q3 8 0 16q-1 3 -6 8t-17 4q-1 2 -3 4q-6 6 -12 4q-12 -2 -24 -6l-1 1q-7 4 -15 -1q-29 -18 -48 -49 t-33 -66q-17 15 -28 20q-30 17 -63 31t-75 30q-7 2 -12 -2q-5 -3 -7 -10q-1 -13 4 -28.5t19 -30.5q-12 -3 -10 -16q6 -33 33 -49l-6 -6q-7 -7 -2 -16q2 -6 13 -18.5t32 -18.5q-3 -6 -3 -11t1 -7q3 -16 19 -24q-18 -12 -38.5 -16.5t-41.5 -3t-40.5 10t-34.5 22.5q-4 4 -9.5 4 t-9.5 -4q-11 -9 -2 -19z" />
+<glyph unicode="" horiz-adv-x="750" d="M1 94v562q0 19 7.5 36.5t20 30t29.5 20t36 7.5h563q39 0 66.5 -27.5t27.5 -66.5v-562q0 -20 -7.5 -37t-20 -29.5t-30 -20t-36.5 -7.5h-237v314h84q6 0 10.5 4t4.5 10l6 82q0 7 -4 12q-5 5 -11 5h-90v36q0 20 5 26.5t26 6.5q12 0 27 -2t29 -5q3 0 6.5 0.5t5.5 2.5 q5 3 7 11l11 79q2 14 -12 17q-44 12 -92 12q-147 0 -147 -143v-41h-50q-16 0 -16 -16v-82q0 -6 4.5 -10.5t11.5 -4.5h50v-314h-192q-19 0 -36 7.5t-29.5 20t-20 29.5t-7.5 37z" />
+<glyph unicode="" d="M0 56v638q0 23 16.5 39.5t39.5 16.5h788q23 0 39.5 -16.5t16.5 -39.5v-638q0 -23 -16.5 -39.5t-39.5 -16.5h-788q-23 0 -39.5 16.5t-16.5 39.5zM75 78h750v56h-750v-56zM75 559h750v113h-467l-7 -45h-276v-68zM130 655h154v45h-154v-45zM272 346q0 -37 14 -69.5t38 -56.5 t56.5 -38t69.5 -14t69.5 14t56.5 38t38 56.5t14 69.5t-14 69.5t-38 56.5t-56.5 38t-69.5 14t-69.5 -14t-56.5 -38t-38 -56.5t-14 -69.5zM328 346q0 25 9.5 47.5t26 39t39 26t47.5 9.5t47.5 -9.5t39 -26t26 -39t9.5 -47.5t-9.5 -47.5t-26 -39t-39 -26t-47.5 -9.5t-47.5 9.5 t-39 26t-26 39t-9.5 47.5zM363 346q0 -8 6 -14t14 -6q9 0 15 6t6 14q0 20 13.5 33t32.5 13v1q9 0 15 6t6 14q0 9 -6 15t-15 6q-36 0 -61.5 -26t-25.5 -62z" />
+<glyph unicode="" d="M0.5 391.5q-2.5 52.5 14 108.5t53.5 107q36 51 83.5 85t98 48t99.5 8t90 -35q36 -26 57 -63.5t27.5 -82.5t-1.5 -93.5t-32 -95.5l195 -139l47 65l-49 35q-7 5 -8.5 13t3.5 15l23 32q5 7 13 8.5t15 -3.5l163 -116q7 -5 8 -13t-4 -15l-23 -33q-5 -7 -13 -8.5t-15 3.5 l-48 35l-47 -65l116 -83q20 -14 24.5 -39t-10.5 -45q-14 -20 -38.5 -24t-44.5 10l-376 269q-37 -38 -80.5 -61.5t-88 -31.5t-87 -0.5t-78.5 33.5q-41 29 -62.5 74t-24 97.5zM109 374.5q3 -19.5 13.5 -37t27.5 -29.5t37 -16.5t39.5 -1t37 14t29.5 27.5q17 24 18 53t-12 54 q28 -5 55 5.5t45 35.5q12 17 16.5 37t1 39.5t-14 37t-27.5 29.5t-37 16.5t-39.5 1t-37 -14t-29.5 -27.5q-17 -25 -18.5 -54t12.5 -54q-28 5 -55 -5.5t-45 -35.5q-12 -17 -16 -36.5t-1 -39z" />
+<glyph unicode="" d="M0 391v84q0 6 5 6q14 4 29.5 6t30.5 4q4 0 7 0.5t7 0.5q6 21 17 42q-9 14 -20 28t-23 28q-5 5 0 9q14 17 30 33.5t33 30.5q6 4 9 -1q8 -8 17 -14.5t18 -13.5l21 -15q21 11 42 17q2 21 4.5 39t6.5 35q0 5 6 5h84q7 0 7 -6q2 -14 4.5 -28.5t4.5 -29.5l2 -15q20 -6 41 -17 q8 7 19 14q10 8 19.5 15t18.5 15q6 4 9 -1q5 -4 9 -8l8 -8l22 -22q12 -12 23 -25q3 -5 0 -9q-10 -11 -20 -24.5t-23 -30.5q6 -11 10.5 -22t8.5 -22q8 -2 17.5 -3t19.5 -3l18 -2q9 -1 17 -3q6 -2 6 -7v-84q0 -5 -5 -7q-14 -3 -29.5 -5t-30.5 -4q-4 0 -14 -2q-6 -20 -17 -41 q9 -14 20 -28t23 -28q4 -5 0 -9q-14 -17 -30 -33.5t-33 -30.5q-6 -4 -9 1q-8 7 -17 14t-18 13q-5 5 -10.5 8.5t-10.5 7.5q-21 -11 -42 -17q-2 -17 -4 -36.5t-7 -37.5q-2 -5 -7 -5h-84q-6 0 -6 5q-3 14 -5 29l-4 30l-2 15q-20 6 -41 17q-5 -4 -9.5 -7t-9.5 -7 q-10 -8 -19.5 -15t-18.5 -15q-6 -4 -9 1q-5 4 -8 8l-9 8q-11 11 -22.5 22t-22.5 25q-4 4 0 8q12 14 22.5 28.5t19.5 27.5q-10 20 -18 44q-8 2 -17.5 3t-19.5 3l-18 2q-9 1 -18 3q-5 2 -5 7zM197 432q0 -35 25 -60t60 -25t60 25t25 60t-25 60t-60 25t-60 -25t-25 -60z M524 188q-2 6 4 8q11 4 21 8t21 8q1 5 1.5 9t2.5 9t3.5 8.5t3.5 8.5q-7 10 -13 19.5t-12 19.5q-3 5 2 8l62 56q4 4 9 1q9 -7 17.5 -14t17.5 -15q18 7 35 8q5 11 10.5 21t10.5 19q3 5 8 3l80 -25q5 -2 5 -8q-2 -11 -4 -21.5t-4 -21.5q8 -6 14 -13t11 -15q12 1 23 1.5t22 0.5 q5 0 7 -5l18 -83q2 -5 -4 -7q-11 -5 -21 -8.5t-21 -7.5q-1 -5 -1.5 -9t-2.5 -9t-3.5 -8.5t-3.5 -7.5q7 -10 13.5 -19.5t11.5 -19.5q2 -5 -2 -8l-62 -57q-4 -4 -9 0q-8 7 -17 14t-17 14q-20 -7 -37 -8q-5 -11 -10 -21t-10 -19q-3 -5 -8 -3l-80 25q-5 2 -5 8q2 11 3.5 22 t3.5 22q-14 12 -24 27q-12 -2 -23.5 -2.5t-22.5 0.5q-5 0 -7 5zM560 607q0 5 5 7q10 2 20 4.5t20 4.5q2 4 3 8t3 8t4.5 7t4.5 7q-5 10 -9 19.5t-8 18.5q-2 4 2 8l64 42q5 3 8 -1q8 -7 14.5 -14.5t13.5 -15.5q16 3 33 3q12 18 24 33q3 3 8 2l69 -34q5 -3 3 -8 q-2 -10 -5.5 -19t-6.5 -19q10 -13 18 -29q11 -1 21.5 -1.5t20.5 -2.5q5 -2 5 -6l5 -77q0 -4 -5 -6q-10 -2 -19.5 -4.5t-20.5 -4.5q-2 -4 -3 -7.5t-3 -7.5q-3 -7 -8 -14q5 -10 9 -19.5t8 -18.5q2 -5 -3 -8l-63 -42q-5 -3 -8 1q-13 12 -28 30q-8 -2 -16.5 -3t-17.5 0 q-6 -9 -12 -17.5t-12 -16.5q-3 -3 -8 -1l-69 34q-5 2 -3 7q3 10 6 19.5t7 19.5q-6 6 -10.5 13t-8.5 15q-11 1 -21.5 1.5t-20.5 2.5q-5 0 -5 6zM658 203q-7 -22 3.5 -42.5t33.5 -27.5q22 -8 42.5 2.5t27.5 33.5q8 22 -2.5 42.5t-33.5 28.5q-22 7 -42.5 -3.5t-28.5 -33.5z M681 564q7 -20 26 -30q20 -9 40 -2.5t29 25.5q10 20 3 40t-26 29q-19 10 -39 3t-30 -26t-3 -39z" />
+<glyph unicode="" d="M0 483q0 55 29 103.5t78.5 85t116 57.5t142.5 21t142.5 -21t116 -57.5t78 -85t28.5 -103.5q0 -56 -28.5 -104.5t-78 -84.5t-116 -57t-142.5 -21q-18 0 -35 1.5t-34 3.5q-34 -26 -73 -45t-84 -29q-20 -5 -40 -6q-12 -2 -16 11v1q-2 5 1.5 9t7.5 8q17 17 30 37t21 64 q-66 36 -105 91t-39 121zM305 136q8 4 12 7q13 -2 25 -2h24q93 0 173 26.5t139.5 72.5t93.5 108.5t34 134.5q0 19 -3 39q45 -36 71 -81.5t26 -98.5q0 -66 -39 -120.5t-105 -91.5q8 -44 21 -63.5t30 -36.5q4 -5 7.5 -9t1.5 -9q-1 -6 -6 -9.5t-10 -2.5q-11 2 -20.5 3.5 t-19.5 3.5q-88 19 -157 73q-17 -2 -34 -3.5t-35 -1.5q-66 0 -123.5 16t-105.5 45z" />
+<glyph unicode="" horiz-adv-x="783" d="M0.5 222q-1.5 56 2 112t12.5 105q45 3 94 3t90 -10q6 -38 10 -91t5.5 -110t0.5 -111t-5 -94q-18 -2 -41.5 -2.5t-49 0.5t-50 1.5t-44.5 0.5q-10 38 -16.5 89t-8 107zM91 101q0 -16 11 -27t27 -11t26.5 11t10.5 27q0 15 -10.5 26t-26.5 11t-27 -11t-11 -26zM240 412 q22 10 35.5 19.5t24.5 21t22.5 26t30.5 34.5q16 16 28.5 26.5t23 20t19 20t17.5 25.5q16 29 21 65t13 68q0 7 7 11q19 3 35 -3.5t28 -17.5t19.5 -26t10.5 -28q6 -33 -1.5 -59.5t-19 -50.5t-22 -46.5t-11.5 -47.5q21 -9 51.5 -9.5t63.5 1t64 1.5t52 -8.5t28.5 -29t-5.5 -59.5 q0 -2 -2.5 -5.5t-5 -8t-4.5 -8.5l-2 -3q11 -11 16 -23t5 -20q1 -39 -32 -68q10 -15 11 -31.5t-4 -31.5t-14.5 -26.5t-21.5 -17.5q6 -34 -6 -58t-35.5 -38.5t-56.5 -20.5t-69 -6t-72.5 5t-67.5 14q-20 6 -39 14t-38.5 15t-41 11t-45.5 0q2 39 2.5 85t-1 93.5t-4.5 92.5t-7 82 z" />
+<glyph unicode="" horiz-adv-x="783" d="M1 452q-1 21 7.5 37.5t24.5 30.5q-9 15 -10 31.5t3.5 31.5t14 26.5t21.5 17.5q-6 34 6 58t35.5 38.5t56.5 20.5t69 6t72.5 -5t67.5 -14q20 -6 39 -14t38.5 -15t41 -10.5t45.5 0.5q-2 -39 -2.5 -85.5t1 -94t4 -92.5t7.5 -82q-22 -10 -35.5 -19.5t-24 -21t-22.5 -26 t-31 -33.5q-15 -17 -27.5 -27.5t-23 -20t-19.5 -19.5t-18 -26q-16 -29 -20.5 -65t-13.5 -68q0 -8 -7 -11q-20 -3 -35.5 3.5t-27.5 17.5t-19.5 25.5t-10.5 28.5q-6 33 1.5 59.5t19 50.5t22 47t11.5 48q-21 9 -51.5 9t-63.5 -1.5t-63.5 -1.5t-52 8.5t-29 29t5.5 59.5 q1 1 3.5 5.5t5 8.5t3.5 8l2 3q-11 11 -16 23t-5 20zM568 630q1 54 5 94q18 2 42 2.5t49.5 0t50 -1.5t44.5 -1q10 -38 16 -89t7.5 -106.5t-2 -112t-12.5 -105.5q-45 -3 -93.5 -3t-90.5 10q-6 38 -10 91t-5.5 110t-0.5 111zM617 650q0 -16 11 -27t27 -11q15 0 26 11t11 27 q0 15 -11 26t-26 11q-16 0 -27 -11t-11 -26z" />
+<glyph unicode="" horiz-adv-x="393" d="M0.5 465q4.5 13 25.5 16l238 34l106 216q9 19 23 19v-633l-212 -112q-20 -10 -31 -2t-7 30l41 236l-172 168q-16 15 -11.5 28z" />
+<glyph unicode="" horiz-adv-x="846" d="M0 519q0 64 20.5 108t53 71.5t73.5 39.5t82 12q30 0 59 -10t54 -25t45.5 -32.5t35.5 -32.5q15 15 36 32.5t46 32.5t53.5 25t58.5 10q42 0 83 -12t73.5 -39.5t52.5 -71.5t20 -108q0 -44 -16.5 -83.5t-36 -69.5t-37 -48t-18.5 -19l-288 -288q-13 -11 -27 -11q-15 0 -26 11 l-290 288q-1 1 -18 19t-36.5 48t-36 69.5t-16.5 83.5zM75 519q0 -32 13 -61.5t29 -53t29 -37.5l14 -14l263 -263l263 262q1 1 14 15t29 37.5t29 53t13 61.5q0 48 -14 78.5t-36.5 48t-50 23.5t-53.5 6q-25 0 -50.5 -12t-48 -29t-40 -34.5t-26.5 -28.5q-11 -14 -29 -14t-29 14 q-9 11 -26.5 28.5t-40 34.5t-48 29t-50.5 12q-26 0 -53.5 -6t-50 -23.5t-36.5 -48t-14 -78.5z" />
+<glyph unicode="" horiz-adv-x="825" d="M0 150v450q0 31 12 58t32.5 47.5t47.5 32.5t58 12h225v-94h-225q-23 0 -39.5 -16.5t-16.5 -39.5v-450q0 -23 16.5 -39.5t39.5 -16.5h225v-94h-225q-31 0 -58 12t-47.5 32.5t-32.5 47.5t-12 58zM248 285v180q0 16 11 26.5t27 10.5h209v143q0 20 19 28q19 7 32 -7l270 -270 q9 -9 9 -21.5t-9 -20.5l-270 -270q-9 -9 -21 -9q-5 0 -11 2q-19 8 -19 28v142h-209q-16 0 -27 11t-11 27z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 94v562q0 19 7.5 36.5t20 30t29.5 20t37 7.5h562q39 0 66.5 -27.5t27.5 -66.5v-562q0 -20 -7.5 -37t-20 -29.5t-30 -20t-36.5 -7.5h-562q-39 0 -66.5 27.5t-27.5 66.5zM101 582q0 -28 19.5 -47.5t46.5 -19.5q28 0 47.5 19.5t19.5 47.5q0 27 -19.5 46.5t-47.5 19.5 q-27 0 -46.5 -19.5t-19.5 -46.5zM104 117q0 -5 4.5 -9.5t9.5 -4.5h98q6 0 10 4.5t4 9.5v345q0 14 -14 14h-98q-5 0 -9.5 -4t-4.5 -10v-345zM283 117q0 -5 4.5 -9.5t9.5 -4.5h98q6 0 10 4.5t4 9.5v187q0 28 8 47q15 31 55 31q32 0 42 -19q7 -11 7 -35v-211q0 -5 4 -9.5 t10 -4.5h100q6 0 10 4.5t4 9.5v233q0 72 -42 104q-40 31 -103 31q-50 0 -85 -23q-4 -3 -13 -12v12q0 14 -14 14h-95q-5 0 -9.5 -4t-4.5 -10v-345z" />
+<glyph unicode="" d="M1 461q4 38 21 80.5t47 82.5t65.5 68.5t71.5 43t68.5 14t56.5 -18.5q25 -18 34.5 -49.5t5.5 -70.5l141 -105q52 29 101.5 33.5t84.5 -21.5q25 -19 37.5 -50.5t11.5 -70.5t-14.5 -83.5t-39.5 -88.5l201 -193q5 -5 6 -12t-4 -12q-5 -8 -15 -8q-3 0 -9 2l-242 138 q-35 -37 -73.5 -63t-75.5 -38t-71 -9.5t-60 22.5q-35 26 -45 74.5t4 106.5l-141 106q-36 -15 -69 -15t-58 18q-24 18 -34 49.5t-6 69.5zM80 417.5q1 -7.5 8 -12.5q8 -7 22 -7q15 0 31.5 8t33.5 22t33.5 31.5t31.5 37.5q5 6 4 13.5t-8 12.5q-6 5 -13.5 4t-12.5 -8 q-37 -49 -65.5 -67.5t-34.5 -16.5q-6 5 -13.5 4t-12.5 -8q-5 -6 -4 -13.5zM219 368l170 -127q6 -4 11 -4q10 0 15 8q5 6 4 13.5t-7 12.5l-163 121q-15 -14 -30 -24zM393 141q-10 -16 4 -27q13 -10 33 -10q19 0 41 10t44.5 27t44.5 39t41 47q5 7 4 14.5t-8 12.5 q-6 5 -13.5 3.5t-12.5 -7.5q-24 -32 -48 -54.5t-45 -35.5t-36.5 -17t-22.5 2q-6 5 -13.5 3.5t-12.5 -7.5z" />
+<glyph unicode="" d="M0 150v450q0 31 12 58.5t32 47.5t47.5 32t58.5 12h284q-1 -7 -2 -13.5t-1 -14.5v-43q0 -11 3 -23h-284q-23 0 -39.5 -16.5t-16.5 -39.5v-450q0 -23 16.5 -39.5t39.5 -16.5h525q23 0 39.5 16.5t16.5 39.5v166q20 -15 44 -24t50 -10v-132q0 -31 -12 -58t-32.5 -47.5 t-47.5 -32.5t-58 -12h-525q-31 0 -58.5 12t-47.5 32.5t-32 47.5t-12 58zM338 255q0 12 8 20l376 377h-131q-12 0 -20 8t-8 20v42q-1 11 7.5 19.5t20.5 8.5h281q11 0 19.5 -8.5t8.5 -19.5v-42v-239q0 -12 -8.5 -20.5t-19.5 -7.5h-42q-12 0 -20 8t-8 20v131l-377 -376 q-8 -8 -20 -8t-20 8l-39 39q-8 8 -8 20z" />
+<glyph unicode="" horiz-adv-x="825" d="M0 285v180q0 16 11 26.5t27 10.5h209v143q0 20 18 28q19 7 33 -7l270 -270q8 -9 8 -21.5t-8 -20.5l-270 -270q-9 -9 -21 -9q-4 0 -12 2q-18 8 -18 28v142h-209q-16 0 -27 11t-11 27zM450 0v94h225q23 0 39.5 16.5t16.5 39.5v450q0 23 -16.5 39.5t-39.5 16.5h-225v94h225 q31 0 58 -12t47.5 -32t32.5 -47.5t12 -58.5v-450q0 -31 -12 -58t-32.5 -47.5t-47.5 -32.5t-58 -12h-225z" />
+<glyph unicode="" horiz-adv-x="825" d="M0 509v91q0 16 11 26.5t27 10.5h158q-1 6 -1 13v11v2q0 26 2 43t7.5 26.5t15.5 13.5t27 4h331q16 0 26.5 -4t16 -13.5t7.5 -26.5t2 -43v-13q0 -6 -1 -13h158q16 0 27 -10.5t11 -26.5v-91q0 -31 -22 -64t-59.5 -62.5t-88 -52t-108.5 -31.5q-25 -5 -44.5 -20.5t-19.5 -34.5 q0 -17 8.5 -25t19 -15t19.5 -15.5t11 -25.5q2 -11 -1 -23q-2 -7 11.5 -11.5t33 -9t40 -11t31.5 -16.5q6 -5 9.5 -19.5t4.5 -31.5q1 -16 -3 -28.5t-14 -12.5h-481q-10 0 -14 12.5t-3 28.5q1 17 4.5 31.5t9.5 19.5q11 10 31 16.5t39.5 11t33.5 9t12 11.5t-2 12v11 q1 17 10.5 25.5t20.5 15.5t19.5 15t8.5 25q0 19 -19.5 34.5t-45.5 20.5q-57 10 -107.5 32.5t-88 51.5t-59.5 62t-22 64zM75 509q0 -10 11.5 -26.5t33 -34.5t52 -35t68.5 -29q-12 39 -21.5 85.5t-16.5 92.5h-127v-53zM585 384q38 12 68.5 29t52 35t33 34.5t11.5 26.5v53h-128 q-6 -46 -15.5 -92.5t-21.5 -85.5z" />
+<glyph unicode="" horiz-adv-x="750" d="M0 94v562q0 19 7.5 36.5t20 30t29.5 20t37 7.5h562q39 0 66.5 -27.5t27.5 -66.5v-562q0 -20 -7.5 -37t-20 -29.5t-30 -20t-36.5 -7.5h-562q-39 0 -66.5 27.5t-27.5 66.5zM94 321q0 -44 11 -82.5t41.5 -67t85.5 -45t143 -16.5t142.5 16.5t85.5 45t42 67t11 82.5 q0 73 -46 127q4 16 5 36t-1.5 39t-7.5 36t-12 29h-14q-42 -2 -74 -22t-63 -37l-7 1q-8 0 -18.5 1t-22 1.5t-20.5 0.5q-18 0 -35 -1t-33 -3q-31 17 -63 37t-74 22h-14q-8 -12 -12.5 -29t-7 -36t-1.5 -39t5 -36q-46 -54 -46 -127zM183 289q15 60 84 67q13 2 27 1.5t30 -1.5 q7 0 25.5 -1t25.5 -1t25.5 1t25.5 1q16 1 30 1.5t26 -1.5q70 -7 85 -67q8 -33 -3 -61.5t-24 -41.5q-20 -20 -66 -32t-99 -12t-99 12t-66 32q-13 13 -24 41.5t-3 61.5zM242 265q0 -23 11 -39t27 -16t27 16t11 39t-11 38.5t-27 15.5t-27 -15.5t-11 -38.5zM432 265 q0 -23 11 -39t27 -16t27 16t11 39t-11 38.5t-27 15.5t-27 -15.5t-11 -38.5z" />
+<glyph unicode="" d="M0 19v300q0 8 5.5 13.5t13.5 5.5h112q8 0 13.5 -5.5t5.5 -13.5v-169h600v169q0 8 5.5 13.5t13.5 5.5h112q8 0 13.5 -5.5t5.5 -13.5v-300q0 -19 -19 -19h-862q-19 0 -19 19zM169 473.5q-3 7.5 8 18.5l246 247q11 11 27 11t27 -11l247 -247q11 -11 7.5 -18.5t-18.5 -7.5 h-150v-244q0 -16 -11 -27t-27 -11h-150q-16 0 -26.5 11t-10.5 27v244h-150q-16 0 -19 7.5z" />
+<glyph unicode="" horiz-adv-x="786" d="M1 251q-1 17 0.5 33.5t3.5 36.5q2 17 3.5 35t4.5 32q7 32 15 62.5t22 57.5q10 20 22 39.5t26 38.5q5 7 10.5 12t11.5 10l22 22q11 11 24 21t28 18t32 16q16 8 33 14.5t35 13.5q34 14 76 25l1 1q22 6 41.5 8.5t38.5 2.5q29 0 55 -4.5t52 -9.5q20 -4 41.5 -7.5t45.5 -3.5h1 q14 0 30.5 2.5t32.5 2.5q12 0 22 -3t16 -12q11 -15 12.5 -35t-0.5 -37t-4 -34.5t1 -35.5q2 -11 5.5 -19t7.5 -18q4 -9 5.5 -19.5t3.5 -20.5q9 -51 7.5 -95.5t-11.5 -83t-27.5 -72.5t-39.5 -65q-18 -24 -38.5 -47.5t-45 -44.5t-54 -38t-65.5 -29q-37 -13 -77.5 -16.5 t-77.5 -5.5h-15q-51 0 -95 8t-94 8h-2q-17 0 -37.5 -5t-40.5 -6h-1q-18 0 -32 8.5t-21 20.5q-10 17 -8.5 35.5t6.5 33.5t5 32.5t-2.5 37t-6 39.5t-4.5 40z" />
+<glyph unicode="" horiz-adv-x="1000" />
+</font>
+</defs></svg>
\ No newline at end of file
bryfry.github.com/font/fontawesome-webfont.svgz
Binary file
bryfry.github.com/font/fontawesome-webfont.ttf
Binary file
bryfry.github.com/font/fontawesome-webfont.woff
Binary file
bryfry.github.com/font/Slackey.woff
Binary file
bryfry.github.com/font/yanonekaffeesatz-regular-webfont.eot
Binary file
bryfry.github.com/font/yanonekaffeesatz-regular-webfont.svg
@@ -0,0 +1,232 @@
+<?xml version="1.0" standalone="no"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" >
+<svg xmlns="http://www.w3.org/2000/svg">
+<metadata>
+This is a custom SVG webfont generated by Font Squirrel.
+Copyright : Copyright c 2010 Yanone httpyanonedetypedesign All rights reservedThis Font Software is licensed under the SIL Open Font License Version 11This license is available with a FAQ at httpscriptssilorgOFL
+Designer : Yanone
+Foundry : Yanone
+Foundry URL : httpyanonedetypedesign
+</metadata>
+<defs>
+<font id="YanoneKaffeesatzRegular" horiz-adv-x="854" >
+<font-face units-per-em="2048" ascent="1638" descent="-410" />
+<missing-glyph horiz-adv-x="321" />
+<glyph unicode=" " horiz-adv-x="321" />
+<glyph unicode="	" horiz-adv-x="321" />
+<glyph unicode=" " horiz-adv-x="321" />
+<glyph unicode="!" horiz-adv-x="399" d="M86 102q0 49 30.5 84t82.5 35q115 0 114 -119q0 -49 -31.5 -82.5t-82.5 -33.5q-113 -1 -113 116zM92 1397q-2 35 37 42t190 7l-32 -930q-2 -53 -34 -65.5t-132 -12.5z" />
+<glyph unicode=""" horiz-adv-x="540" d="M70 1602q14 8 63 8q63 0 94 -6q0 -86 -16 -241t-27 -163l-92 -6q-29 268 -29 360q0 44 7 48zM319 1602q14 8 66 8q63 0 94 -6q0 -86 -16.5 -241t-26.5 -163l-92 -6q-6 31 -21 215q-9 102 -9 150q0 39 5 43z" />
+<glyph unicode="#" d="M55 389q0 86 5.5 108.5t29.5 22.5h86l10 217h-131q0 86 5.5 108.5t29.5 22.5h105l6 129q2 23 30.5 28t116.5 5l-8 -162h195l6 129q2 23 30.5 28t116.5 5l-8 -162h119q0 -131 -33 -131h-94l-10 -217h137q0 -131 -33 -131h-113l-6 -137q-2 -23 -30.5 -28t-116.5 -5l8 170 h-195l-6 -137q-2 -23 -30.5 -28t-116.5 -5l8 170h-113zM322 520h194l10 217h-194z" />
+<glyph unicode="$" d="M106 76q0 18 13.5 65t32.5 68q74 -59 217 -59q190 0 190 174q0 57 -24.5 102t-88.5 113l-229 233q-109 115 -108 227q0 109 67.5 176.5t192.5 84.5v182q0 41 35.5 54t115.5 13v-247q72 -4 122 -18.5t69.5 -29t19.5 -24.5q0 -68 -41 -117q-61 43 -201 43q-199 0 -198 -115 q0 -70 88 -163l248 -248q117 -117 116 -268q0 -283 -258 -328v-178q0 -41 -33.5 -53.5t-117.5 -12.5v236q-74 4 -128 20.5t-77 35t-23 34.5z" />
+<glyph unicode="%" horiz-adv-x="1415" d="M90 1075q0 375 291 375q143 0 207.5 -81t64.5 -292q0 -383 -284 -383q-98 0 -154.5 28t-90.5 112.5t-34 240.5zM238 47l825 1405q94 -31 94 -72q0 -12 -204 -361l-408 -691l-205 -344q-102 26 -102 63zM250 1071q0 -147 28.5 -197.5t94.5 -50.5q127 0 127 252 q0 145 -28 195.5t-91 50.5q-66 0 -98.5 -55.5t-32.5 -194.5zM762 362q0 375 291 375q143 0 207.5 -81t64.5 -291q0 -383 -285 -383q-98 0 -154.5 27.5t-90 112t-33.5 240.5zM920 354q0 -147 28.5 -197.5t93.5 -50.5q129 0 129 252q0 145 -27.5 195.5t-93 50.5t-98 -54.5 t-32.5 -195.5z" />
+<glyph unicode="&" horiz-adv-x="1028" d="M53 348q0 121 64.5 221.5t165.5 163.5q-160 274 -160 430q0 137 90 210t252 73q133 0 220 -28.5t87 -67.5q0 -72 -41 -123q-104 72 -246 71q-90 0 -138 -30.5t-48 -124.5q0 -104 120 -315.5t281 -415.5q16 82 17 184q0 270 -123 420q84 16 235 16q88 0 158 -6 q6 -12 6 -61q0 -37 -17.5 -55.5t-68.5 -18.5h-100q72 -129 72 -316q0 -170 -52 -313q109 -123 170 -149q-4 -49 -40.5 -91t-67.5 -42q-33 0 -150 129q-115 -129 -305 -129q-381 -1 -381 368zM225 344q0 -90 47 -148.5t152 -58.5q133 0 207 99q-147 178 -275 376 q-131 -96 -131 -268z" />
+<glyph unicode="'" horiz-adv-x="288" d="M70 1602q14 8 63 8q63 0 94 -6q0 -86 -16 -241t-27 -163l-92 -6q-29 268 -29 360q0 44 7 48z" />
+<glyph unicode="(" horiz-adv-x="598" d="M133 655q0 193 32 365t76 281.5t93 190.5t83 117t46 36q39 0 58.5 -23t33.5 -84q-252 -332 -252 -876v-17q0 -314 77 -560q79 -253 175 -361q-23 -123 -92 -123q-14 0 -49 37.5t-83 123.5t-92 203t-75 300t-31 390z" />
+<glyph unicode=")" horiz-adv-x="598" d="M43 -276q102 137 178 373q74 230 74 547v18q0 285 -71.5 516t-180.5 360q14 61 33.5 84t58.5 23q12 0 46 -34t83 -115t93 -189.5t76 -281.5t32 -370q0 -195 -31 -374t-75 -297.5t-92 -208.5t-84 -132t-48 -42q-69 0 -92 123z" />
+<glyph unicode="*" horiz-adv-x="962" d="M33 1030q-2 70 37 111q28 29 52 29q10 0 19 -5l267 -168q2 -35 -11.5 -50t-38.5 -7zM135 614l248 252q15 15 30 15q22 0 46 -31l-180 -320q-17 -17 -36 -16q-18 0 -39 15q-42 32 -69 85zM406 1366q-2 23 15 34t46 11q53 0 102 -25l-41 -323q-4 -25 -17 -32t-58 1z M508 860q8 14 47 29l236 -277q10 -12 9 -24q0 -21 -29 -43q-46 -35 -101 -43l-160 323q-6 11 -6 21q0 8 4 14zM573 932q-21 27 -20 47q0 22 25 35l303 164q49 -39 49 -111q0 -47 -31 -57z" />
+<glyph unicode="+" d="M70 504q0 88 5 116.5t29 28.5h252v252q0 25 29 30t117 5v-287h284q0 -88 -5 -116.5t-27 -28.5h-252v-252q0 -23 -29 -28t-117 -5v285h-286z" />
+<glyph unicode="," horiz-adv-x="374" d="M78 -164q51 86 57 176q-47 29 -47 101q0 45 29.5 75.5t75.5 30.5q113 0 112 -123q0 -100 -63.5 -203.5t-98.5 -103.5q-55 0 -65 47z" />
+<glyph unicode="-" horiz-adv-x="569" d="M76 504q0 88 5 116.5t28 28.5h385q0 -88 -5.5 -116.5t-29.5 -28.5h-383z" />
+<glyph unicode="." horiz-adv-x="374" d="M76 104q0 49 30.5 84t83.5 35q115 0 115 -119q0 -51 -30.5 -83.5t-84.5 -32.5q-114 -1 -114 116z" />
+<glyph unicode="/" horiz-adv-x="686" d="M20 -41l461 1563q6 23 18.5 31t45.5 11t121 3l-461 -1567q-8 -29 -35 -35t-150 -6z" />
+<glyph unicode="0" d="M59 606q0 311 89.5 467t284 156t279.5 -140.5t85 -433.5q0 -346 -84 -509.5t-291 -163.5q-203 0 -283 151t-80 473zM238 594q0 -254 42 -357.5t146 -103.5t150.5 124t46.5 400q0 219 -40 321.5t-143 102.5q-111 0 -156.5 -121.5t-45.5 -365.5z" />
+<glyph unicode="1" d="M57 115q0 43 295 43l23 899q-31 0 -89.5 -9.5t-101.5 -19.5l-43 -8q-25 49 -24 108q0 20 164.5 60.5t224.5 40.5q33 0 47 -10l-27 -1061h152l119 6q0 -53 -1 -74.5t-4.5 -47.5t-10.5 -34t-19 -8h-701q-4 66 -4 115z" />
+<glyph unicode="2" d="M59 51q0 41 9.5 66.5t40.5 79.5q57 94 147 206l156 189q66 76 116 167t50 169q0 141 -158 141q-180 0 -299 -72q-20 47 -21 123q0 39 109.5 74t253.5 35q170 0 236.5 -68.5t66.5 -210.5q0 -98 -50 -202.5t-116 -182.5l-164 -196q-98 -119 -157 -211h274l242 14 q0 -106 -5.5 -139t-29.5 -33h-694q-7 24 -7 51z" />
+<glyph unicode="3" d="M86 1118q0 43 99.5 77t254.5 34q285 0 285 -244q0 -209 -223 -369q121 -12 195.5 -86.5t74.5 -218.5q0 -248 -128 -382t-335 -134q-109 0 -164 29t-55 72t23 122q74 -63 200 -63q133 0 207 97.5t74 254.5q0 211 -326 211l-4 107q129 61 201 143t72 168q0 133 -148 133 q-162 0 -280 -72v-2q-23 45 -23 123z" />
+<glyph unicode="4" d="M57 414q0 84 159 395t267 403q35 29 76 29q53 0 94 -24l-6 -795l152 6q8 -16 8 -59q-4 -102 -55 -103h-105v-213q0 -41 -20.5 -47t-145.5 -6v266h-370q-54 52 -54 148zM201 422h280l23 590q-78 -90 -174 -273.5t-129 -316.5z" />
+<glyph unicode="5" d="M70 -121q0 82 18 135q70 -63 199 -63q158 0 235.5 118.5t77.5 292.5q0 166 -80 227.5t-237 61.5q-100 0 -197 -26l59 604h627q0 -96 -15.5 -123t-72.5 -27l-397 8l-31 -307q61 10 119 11h12q389 0 389 -394q0 -283 -117.5 -442.5t-355.5 -159.5q-76 0 -132 15.5t-78.5 34 t-22.5 34.5z" />
+<glyph unicode="6" d="M63 631q0 807 465 807q223 0 224 -70q0 -68 -17 -119q-86 31 -192 31q-299 0 -320 -528q92 147 281 147q137 0 217 -96t80 -301q0 -518 -389 -518q-92 0 -157 30.5t-102.5 80.5t-57 138.5t-26 176.5t-6.5 221zM223 582v-37q0 -208 44 -306q48 -108 153 -108 q102 0 159.5 94t57.5 242q0 279 -182 278q-135 0 -232 -151v-12z" />
+<glyph unicode="7" d="M90 1229h737q-207 -406 -330.5 -745t-162.5 -664q-98 0 -134 8t-36 37q39 303 172 658.5t264 561.5q-117 -6 -463 -6q-47 0 -47 150z" />
+<glyph unicode="8" d="M63 377q0 127 65 229.5t169 163.5q-98 66 -133 109q-86 82 -86 215q0 168 100.5 260t249.5 92q365 0 365 -332q0 -207 -222 -358q78 -61 109 -94q121 -125 121 -289q0 -170 -92.5 -279.5t-264.5 -109.5q-195 0 -288 108.5t-93 284.5zM219 385q0 -111 57.5 -176.5 t157.5 -65.5q94 0 149.5 62.5t55.5 171.5q0 127 -92 207q-39 39 -117 94q-211 -107 -211 -293zM246 1104q0 -100 80 -166q33 -35 123 -96q190 123 190 266q0 90 -54.5 135t-133.5 45q-90 0 -147.5 -46t-57.5 -138z" />
+<glyph unicode="9" d="M55 733q0 514 389 514q213 0 280 -133t73 -506q-4 -420 -127 -620.5t-387 -200.5q-184 0 -185 68q0 45 15 112q70 -20 149 -20q184 0 268 135t101 383q-96 -143 -277 -143q-133 0 -216 108t-83 303zM219 754q0 -133 49 -206t135 -73q135 0 234 148v12q0 248 -38 356.5 t-153 108.5q-106 0 -166.5 -88t-60.5 -258z" />
+<glyph unicode=":" horiz-adv-x="374" d="M76 104q0 49 31.5 84t82.5 35q115 0 115 -119q0 -51 -30.5 -83.5t-84.5 -32.5q-114 -1 -114 116zM76 791q0 49 31.5 83.5t82.5 34.5q115 0 115 -118q0 -51 -30.5 -84t-84.5 -33q-114 0 -114 117z" />
+<glyph unicode=";" horiz-adv-x="374" d="M70 -164q51 92 57 176q-47 29 -47 101q0 45 28.5 75.5t73.5 30.5q113 0 113 -123q0 -100 -62.5 -203.5t-97.5 -103.5q-55 0 -65 47zM72 791q0 49 31.5 83.5t82.5 34.5q115 0 115 -118q0 -51 -30.5 -84t-84.5 -33q-114 0 -114 117z" />
+<glyph unicode="<" horiz-adv-x="819" d="M80 528q0 63 53 90l541 265q55 -53 59 -113q0 -35 -31 -49l-405 -199l440 -196q-2 -51 -25.5 -91t-47.5 -40q-18 0 -58 16l-500 221q-26 47 -26 96z" />
+<glyph unicode="=" d="M70 313q0 88 5 117t29 29h682q0 -88 -5 -117t-27 -29h-684zM70 694q0 88 5 117t29 29h682q0 -88 -5 -117t-27 -29h-684z" />
+<glyph unicode=">" horiz-adv-x="819" d="M88 731q2 51 26.5 90t49.5 39q20 0 55 -14l500 -221q29 -45 29 -97q0 -61 -56 -90l-540 -264q-53 53 -58 111q0 37 29 51l407 199z" />
+<glyph unicode="?" horiz-adv-x="604" d="M39 1366q0 35 81 61.5t175 26.5q133 0 209 -72.5t76 -212.5q0 -111 -36 -195.5t-104.5 -173.5t-87.5 -122q-25 -43 -24 -96q0 -27 6 -62t9 -48t-3 -28q-12 -16 -64 -20q-17 -1 -32 -1q-30 0 -54 5q-31 61 -30 145q0 82 37 148q29 55 88 136t87.5 141.5t28.5 129.5 q0 158 -168 158q-94 0 -170 -51q-24 70 -24 131zM152 104q0 49 31.5 84t82.5 35q115 0 115 -119q0 -51 -31 -83.5t-84 -32.5q-114 -1 -114 116z" />
+<glyph unicode="@" horiz-adv-x="1511" d="M96 541q0 438 188.5 647t522.5 209q309 0 460.5 -152.5t151.5 -509.5q0 -731 -329 -731q-70 0 -125 47q-61 -49 -224 -49h-8q-121 0 -184.5 60.5t-63.5 243.5v11q6 334 260 334q78 0 119 -22q4 74 4 133t-28 84q-31 27 -95 26q-111 0 -204 -51q-18 35 -19 97q2 25 19 40 q92 53 260 54q117 0 172 -53.5t53 -184.5l-10 -412q-2 -113 -10 -202q31 -12 65 -13q31 0 60.5 29t56 89.5t43 171t16.5 255.5q0 311 -96 434t-348 123q-182 0 -296 -64.5t-177.5 -228t-63.5 -438.5q0 -182 20.5 -313t58.5 -215t100.5 -132t135 -66.5t173.5 -18.5 q270 0 477 88q45 -59 45 -119q0 -31 -59.5 -60.5t-179 -50t-269.5 -20.5q-127 0 -216 15.5t-181 70.5t-147.5 153.5t-91.5 272.5t-36 418zM643 311v-15q0 -94 25 -130q27 -39 86 -39q100 0 102 109l8 292q-43 6 -71 7q-72 0 -110 -49.5t-40 -174.5z" />
+<glyph unicode="A" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393z" />
+<glyph unicode="B" horiz-adv-x="770" d="M88 1395q0 39 55 39h203q344 0 344 -318q0 -154 -59.5 -236.5t-136.5 -93.5q41 -2 77.5 -15t76.5 -43t63.5 -92.5t23.5 -148.5q0 -246 -108.5 -366.5t-280.5 -120.5h-258v1395zM258 705v-560h92q84 0 137.5 81t53.5 247q0 145 -46 188.5t-143 43.5h-94zM258 848h100 q68 0 109 59.5t41 175.5q0 203 -152 203h-98v-438z" />
+<glyph unicode="C" horiz-adv-x="694" d="M63 657q0 203 26 352.5t63.5 233.5t94 135.5t108 66.5t112.5 15q193 0 192 -112q0 -55 -26 -101q-57 51 -133 51q-43 0 -77 -13t-70 -54t-59.5 -108.5t-38.5 -184.5t-15 -272q0 -201 27.5 -317t69.5 -153.5t107 -37.5q113 0 189 63q25 -53 24 -100q0 -61 -71.5 -104.5 t-182.5 -43.5q-63 0 -110 13.5t-92 56.5t-74 115.5t-46.5 198.5t-17.5 300z" />
+<glyph unicode="D" horiz-adv-x="804" d="M90 0v1395q0 39 55 39h199q139 0 224 -56.5t131 -199t46 -387.5q0 -432 -100 -611.5t-299 -179.5h-256zM256 158h92q45 0 78 23.5t64.5 87t48 199.5t16.5 339q0 272 -48 372.5t-157 100.5h-94v-1122z" />
+<glyph unicode="E" horiz-adv-x="655" d="M90 0v1399q2 35 35 35h489q0 -104 -4 -127t-26 -23h-326v-428h307q0 -102 -4 -128t-26 -26h-277v-552h350q0 -106 -4 -128t-29 -22h-485z" />
+<glyph unicode="F" horiz-adv-x="638" d="M90 0v1399q2 35 35 35h489q0 -102 -4 -123t-26 -21h-326v-434h307q0 -100 -4 -125.5t-26 -25.5h-277v-672q2 -33 -33 -33h-135z" />
+<glyph unicode="G" horiz-adv-x="788" d="M55 684q0 236 29 390.5t90.5 235.5t136 111.5t183.5 30.5q98 0 158.5 -30.5t60.5 -71.5q0 -47 -23 -105q-59 49 -162 49q-160 0 -227.5 -131t-67.5 -469q0 -233 27 -357t69 -159t115 -35q88 0 119 50v507h-149v107q0 35 39 35h268l-2 -770q-104 -90 -279 -90 q-145 0 -224 55t-120 208.5t-41 438.5z" />
+<glyph unicode="H" horiz-adv-x="837" d="M90 0v1399q0 27 20.5 31t145.5 4v-584h326v549q0 27 19.5 31t146.5 4v-1401q0 -25 -20.5 -29t-145.5 -4v696h-326v-663q0 -25 -20.5 -29t-145.5 -4z" />
+<glyph unicode="I" horiz-adv-x="344" d="M88 0v1358q0 57 21.5 66.5t146.5 9.5v-1401q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="J" horiz-adv-x="626" d="M41 102q0 41 27 95q76 -68 168 -68q84 0 108.5 55.5t24.5 190.5v983q0 57 21.5 66.5t148.5 9.5v-1096q0 -168 -62.5 -262t-218.5 -94q-117 0 -167 34.5t-50 85.5z" />
+<glyph unicode="K" horiz-adv-x="804" d="M86 0v1399q0 27 20.5 31t147.5 4v-619l326 608q59 12 106 13q92 0 68 -50l-330 -571q248 -188 328 -778q2 -25 -11.5 -33t-56.5 -8q-55 0 -117 6q-49 262 -98 411.5t-131 237.5q-35 33 -84 56v-674q0 -25 -20.5 -29t-147.5 -4z" />
+<glyph unicode="L" horiz-adv-x="649" d="M88 0v1386q0 35 21.5 41.5t146.5 6.5v-1278h352v-123q0 -33 -35 -33h-485z" />
+<glyph unicode="M" horiz-adv-x="1001" d="M88 0v1399q0 23 9 29t26 6h121l194 -619l66 -229q43 174 59 223l180 590q10 35 33 35h135v-1401q0 -25 -21.5 -29t-148.5 -4l7 498q2 49 36 604q-117 -420 -131 -459l-108 -311q-4 -16 -23 -17h-71l-107 328q-4 12 -133 463v-2q37 -379 39 -598l4 -473q0 -25 -23.5 -29 t-142.5 -4z" />
+<glyph unicode="N" horiz-adv-x="909" d="M88 0v1399q0 35 35 35h127l229 -553q57 -152 195 -578v6q-20 176 -21 609v481q0 27 21.5 31t146.5 4v-1401q0 -33 -35 -33h-124l-234 563q-45 111 -195 580q20 -221 21 -613v-497q0 -25 -20.5 -29t-145.5 -4z" />
+<glyph unicode="O" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM248 684q0 -291 42 -411.5t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464z" />
+<glyph unicode="P" horiz-adv-x="737" d="M88 0v1399q0 35 35 35h203q195 0 285.5 -96.5t90.5 -309.5q0 -238 -103 -342t-273 -104h-72v-549q0 -25 -20.5 -29t-145.5 -4zM254 735h90q88 0 131 73t43 239q0 242 -162 241h-102v-553z" />
+<glyph unicode="Q" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -334 -57.5 -505t-181.5 -220q14 -82 38.5 -115.5t71.5 -33.5q76 0 127 34q25 -37 25 -90q0 -43 -58.5 -62.5t-126.5 -19.5q-106 0 -169.5 62.5t-98.5 202.5q-121 8 -189.5 75.5t-102.5 227t-34 438.5 zM248 684q0 -291 42 -411.5t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464z" />
+<glyph unicode="R" horiz-adv-x="763" d="M88 0v1399q0 35 35 35h203q195 0 285.5 -96.5t90.5 -309.5q0 -301 -178 -401q170 -223 193 -590q0 -25 -14.5 -33t-69.5 -8q-25 0 -98 4q-25 387 -168 584q-14 -2 -41 -2h-72v-549q0 -25 -21.5 -29t-144.5 -4zM254 735h90q88 0 131 71t43 230q0 252 -162 252h-102v-553z " />
+<glyph unicode="S" horiz-adv-x="733" d="M51 102q0 63 43 119q80 -72 211 -71q201 0 201 208q0 72 -25.5 130.5t-93.5 136.5l-207 239q-127 158 -127 295q0 133 92.5 214t260.5 81q268 0 268 -102q0 -53 -41 -97q-66 51 -201 52q-92 0 -145.5 -38t-53.5 -104q0 -90 95 -202l221 -252q78 -92 107.5 -170t29.5 -176 q0 -172 -86 -278.5t-281 -106.5q-129 0 -198.5 36.5t-69.5 85.5z" />
+<glyph unicode="T" horiz-adv-x="763" d="M16 1278v121q0 35 35 35h697v-123q0 -33 -35 -33h-252v-1245q0 -25 -21.5 -29t-144.5 -4v1278h-279z" />
+<glyph unicode="U" horiz-adv-x="894" d="M88 418v981q0 27 21.5 31t150.5 4v-1020q0 -141 39 -211t158 -70q111 0 180 37v1229q0 27 21.5 31t146.5 4v-1381q-43 -29 -139.5 -51t-208.5 -22q-96 0 -165 23.5t-108 61t-61.5 97t-28.5 118t-6 138.5z" />
+<glyph unicode="V" horiz-adv-x="860" d="M13 1422q7 11 38 12h135l170 -793q20 -111 82 -500q37 301 74 500l152 743q4 27 12 38.5t31 11.5h145l-315 -1440q-59 -8 -140 -8q-70 0 -98 118q-82 334 -285 1280q-4 14 -4 24q0 9 3 14z" />
+<glyph unicode="W" horiz-adv-x="1341" d="M22 1428q9 5 27 6h137l148 -793q29 -158 61 -461h13q8 209 53 461l125 674q4 29 12 39t31 10h119l143 -723q27 -141 61 -459h13q20 270 51 459l131 743q4 27 12 38.5t31 11.5h141l-268 -1440q-98 -10 -139 -10q-68 0 -90 116l-105 459q-20 100 -63 467q-39 -324 -60 -465 l-112 -567q-68 -8 -152 -8q-59 0 -84 127l-244 1271q-3 13 -3 23q1 15 11 21z" />
+<glyph unicode="X" horiz-adv-x="868" d="M18 0l312 741l-256 664q-8 20 16.5 24.5t179.5 4.5l82 -232q49 -135 101 -307q55 184 102 307l78 205q6 20 28.5 23.5t151.5 3.5l-264 -680l293 -725q5 -10 5 -16q0 -13 -22 -13h-182l-111 276q-55 141 -108 299q-61 -176 -113 -299l-110 -256q-12 -20 -39 -20h-144z" />
+<glyph unicode="Y" horiz-adv-x="745" d="M12 1407q-1 4 -1 8q0 12 16 15q23 4 174 4l82 -281q31 -98 63.5 -240.5t36.5 -187.5q4 43 39 185.5t63 242.5l72 250q8 23 30.5 27t149.5 4l-276 -842v-559q0 -25 -20.5 -29t-145.5 -4v580z" />
+<glyph unicode="Z" horiz-adv-x="788" d="M31 66q0 35 16 73l514 1145h-381q-72 0 -90 -6v121q0 35 35 35h612q16 -27 17 -56q0 -41 -17 -73l-522 -1155h395q82 0 121 14v-131q0 -33 -35 -33h-639q-26 23 -26 66z" />
+<glyph unicode="[" horiz-adv-x="788" d="M248 -408v2038q0 35 18.5 43t108.5 8h395q0 -104 -8 -128.5t-47 -24.5h-299v-1780h352q0 -111 -9 -133.5t-46 -22.5h-465z" />
+<glyph unicode="\" horiz-adv-x="675" d="M25 1522q-3 9 -3 15q0 17 18 23q26 7 146 7l465 -1587q2 -7 2 -13q0 -18 -19 -22q-26 -6 -149 -6z" />
+<glyph unicode="]" horiz-adv-x="788" d="M18 -410q0 104 8.5 129t47.5 25h299v1784h-353q0 111 9.5 133t46.5 22h465v-2041q0 -35 -18.5 -43.5t-110.5 -8.5h-394z" />
+<glyph unicode="^" horiz-adv-x="880" d="M98 512l355 303l297 -260q29 -27 28.5 -55.5t-23 -51t-57.5 -26.5l-264 178l-209 -154q-33 -20 -51 -20q-33 0 -53.5 25.5t-22.5 60.5z" />
+<glyph unicode="_" horiz-adv-x="772" d="M27 -223q0 88 5 116.5t29 28.5h682q0 -88 -5 -116.5t-27 -28.5h-684z" />
+<glyph unicode="`" horiz-adv-x="350" d="M0 1376q8 45 29.5 86t48.5 41q12 0 126.5 -99t145.5 -142q-25 -92 -63 -93q-12 0 -138 90t-149 117z" />
+<glyph unicode="a" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165z" />
+<glyph unicode="b" horiz-adv-x="784" d="M96 1427q0 55 28 66.5t138 11.5v-532q88 72 219 71q127 0 188.5 -93t61.5 -310q0 -170 -25.5 -295t-63.5 -193.5t-94 -109.5t-104.5 -52t-107.5 -11q-162 0 -240 61v1386zM262 154q35 -27 96 -27q33 0 60.5 17.5t58.5 63.5t49.5 147.5t18.5 248.5q0 160 -33 225.5 t-107 65.5q-80 0 -143 -57v-684z" />
+<glyph unicode="c" horiz-adv-x="641" d="M63 489q0 141 23 246t57.5 163t86 92t98.5 44t104 10q72 0 121 -26.5t49 -65.5q0 -47 -18 -92q-66 37 -144 37q-43 0 -73.5 -13.5t-62.5 -52t-49 -124.5t-17 -218q0 -209 42 -285.5t140 -76.5q88 0 162 47q16 -59 16 -90q0 -43 -65.5 -73.5t-163.5 -30.5 q-106 0 -168 35.5t-100 150t-38 323.5z" />
+<glyph unicode="d" horiz-adv-x="790" d="M66 475q0 289 87 429t228 140q92 0 145 -40v426q0 53 29 64t137 11v-1464q-127 -61 -293 -61q-61 0 -104 8t-89 37.5t-75 82t-47 145.5t-18 222zM252 494q0 -215 37 -290t117 -75q76 0 120 31v712q-35 27 -94 27q-180 1 -180 -405z" />
+<glyph unicode="e" horiz-adv-x="739" d="M63 459q0 184 30 306t86.5 180.5t112.5 78.5t134 20q260 0 260 -329q0 -166 -22 -266q-174 -33 -428 -33q6 -158 49 -216.5t141 -58.5q121 0 233 64q14 -43 15 -113q0 -47 -83 -79.5t-200 -32.5q-78 0 -133 19t-101 69.5t-70 148t-24 242.5zM238 551q24 -1 46 -1 q146 0 230 23q10 45 10 123q-2 113 -26.5 158t-89.5 45q-154 0 -170 -348z" />
+<glyph unicode="f" horiz-adv-x="522" d="M25 883q0 100 6 120.5t37 20.5h98v123q0 113 30.5 190.5t85 113.5t107.5 49t121 13q190 0 190 -83q0 -49 -18 -93q-59 25 -145 25q-96 0 -150.5 -40t-54.5 -161v-137h184q0 -98 -5 -119.5t-30 -21.5h-149v-850q0 -33 -33 -33h-133v883h-141z" />
+<glyph unicode="g" horiz-adv-x="804" d="M45 -180q0 141 156 246q-61 18 -95 46q-31 26 -30 62q0 83 131 188q-127 82 -127 308q0 375 340 374q47 0 102 -16h246q16 -29 16 -80q0 -63 -57 -63q-29 0 -74 10q78 -78 78 -221q0 -358 -332 -359q-57 0 -92 9q-53 -53 -53 -91q0 -23 45 -34t147 -23l50 -6 q133 -20 201.5 -72.5t68.5 -167.5q0 -143 -99.5 -238t-293.5 -95q-328 0 -328 223zM217 -141q0 -53 37 -81t135 -28q100 0 154.5 48t54.5 110q0 68 -48 94.5t-185 36.5q-12 0 -37 4q-111 -84 -111 -184zM256 674q0 -119 30.5 -175.5t121.5 -56.5q156 0 155 271 q0 209 -149 209q-72 0 -115 -60.5t-43 -187.5z" />
+<glyph unicode="h" horiz-adv-x="778" d="M92 0v1430q0 53 27.5 64t138.5 11v-540q92 80 229 79q125 0 169 -65.5t44 -204.5v-741q0 -25 -23.5 -29t-148.5 -4v727q0 78 -23.5 121t-92.5 43q-88 0 -154 -57v-801q0 -25 -21.5 -29t-144.5 -4z" />
+<glyph unicode="i" horiz-adv-x="358" d="M94 0v948q0 53 30 64.5t140 11.5v-991q0 -25 -21.5 -29t-148.5 -4zM96 1350q4 123 97 123q47 0 65 -27q17 -24 17 -80q0 -6 -1 -12q0 -133 -94 -133q-84 0 -84 129z" />
+<glyph unicode="j" horiz-adv-x="376" d="M-209 -293q0 53 25 86q70 -41 172 -41q76 0 99.5 44t23.5 157v995q0 53 28.5 64.5t136.5 11.5v-1098q0 -154 -57 -240.5t-211 -86.5q-217 -1 -217 108zM106 1350q4 123 97 123q47 0 65 -27q17 -24 17 -80v-12q0 -133 -95 -133q-84 0 -84 129z" />
+<glyph unicode="k" horiz-adv-x="780" d="M94 1430q0 53 29 64t139 11v-555q111 94 256 94q174 0 174 -176q0 -182 -170 -317q80 -35 135.5 -124t67.5 -222q2 -20 2 -68q0 -49 -6 -104q-4 -25 -26.5 -29t-162.5 -4q8 94 9 131q0 59 -11 121q-18 117 -67 170q-40 43 -88 43q-11 0 -23 -2q-16 -4 -38.5 -13.5 t-37.5 -17.5l-14 -8v-391q0 -25 -20.5 -29t-147.5 -4v1430zM262 543q246 100 246 268q0 84 -76 84q-90 0 -170 -98v-254z" />
+<glyph unicode="l" horiz-adv-x="354" d="M94 0v1430q0 53 29 64t137 11v-1472q0 -25 -20.5 -29t-145.5 -4z" />
+<glyph unicode="m" horiz-adv-x="1153" d="M94 0v977q150 68 309 67q125 0 185 -63q113 63 252 63q143 0 186 -66.5t43 -221.5v-723q0 -25 -22.5 -29t-143.5 -4v758q0 78 -20.5 108.5t-79.5 30.5q-76 0 -137 -39v-825q0 -25 -20.5 -29t-145.5 -4v797q-2 57 -21.5 79.5t-79.5 22.5q-72 0 -139 -35v-831 q0 -25 -22.5 -29t-143.5 -4z" />
+<glyph unicode="n" horiz-adv-x="782" d="M92 975q160 70 324 69q160 0 224.5 -62t64.5 -212v-737q0 -25 -23 -29t-150 -4v721q0 100 -24.5 139t-97.5 39q-84 0 -152 -37v-829q0 -25 -21.5 -29t-144.5 -4v975z" />
+<glyph unicode="o" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM229 508q0 -164 18.5 -251t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307z " />
+<glyph unicode="p" horiz-adv-x="784" d="M94 -332v1295q129 82 299 81q164 0 249 -94t85 -332q0 -639 -305 -638q-104 0 -162 57v-426q-37 -14 -86 -14q-43 0 -61.5 15t-18.5 56zM260 197q41 -68 111 -68q172 0 172 471q0 174 -37 236.5t-121 62.5q-70 0 -125 -39v-663z" />
+<glyph unicode="q" horiz-adv-x="798" d="M63 446q0 317 115 457.5t305 140.5q129 0 219 -63v-1315q0 -47 -17 -58t-81 -14q-35 0 -69 7v469q-61 -90 -195 -90q-55 0 -99 17t-87 64.5t-67 144.5t-24 240zM252 451q0 -100 12 -168t36 -99.5t47.5 -45t53.5 -13.5q94 0 134 104v641q-33 29 -95 29q-94 0 -141 -103 t-47 -345z" />
+<glyph unicode="r" horiz-adv-x="538" d="M92 0v952q133 92 279 92q143 0 143 -86q0 -53 -18 -98q-45 25 -99 25q-80 0 -135 -47l-2 -805q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="s" horiz-adv-x="706" d="M61 84q0 49 29 96q88 -51 205 -51q78 0 122 33t44 94q0 86 -82 160l-199 170q-117 96 -117 217q0 113 84 177t250 64q96 0 158.5 -21.5t81 -45t18.5 -47.5q0 -43 -37 -84q-88 53 -200 53q-74 0 -118 -25.5t-44 -72.5q0 -59 82 -127l190 -154q66 -66 93.5 -123t27.5 -133 q0 -135 -90 -209.5t-248 -74.5q-250 0 -250 104z" />
+<glyph unicode="t" horiz-adv-x="595" d="M37 881q0 96 5 119.5t32 23.5h102v311q0 41 28.5 49.5t139.5 8.5v-369h209q0 -100 -4 -121.5t-29 -21.5h-176v-596q0 -57 2 -84t19.5 -52.5t52.5 -25.5q57 0 119 31q12 -45 12 -82q0 -92 -176 -92q-121 0 -159 73.5t-38 231.5v596h-139z" />
+<glyph unicode="u" horiz-adv-x="798" d="M90 319v670q0 27 21.5 31t150.5 4v-719q0 -102 27.5 -141t109.5 -39t138 37v827q0 27 21.5 31t143.5 4v-971q-133 -74 -305 -73q-176 0 -241.5 79.5t-65.5 259.5z" />
+<glyph unicode="v" horiz-adv-x="704" d="M37 973q-2 10 -2 17q0 23 18 28q25 6 162 6l66 -328q18 -94 38.5 -224t30.5 -212l10 -82h5q35 305 75 520l56 289q4 27 26.5 32t149.5 5l-236 -1030q-31 -6 -117 -6q-49 0 -73 100z" />
+<glyph unicode="w" horiz-adv-x="1105" d="M31 989q-2 25 23.5 30t158.5 5l61 -334q43 -227 72 -497h12q43 299 58 374l63 394q4 23 13.5 28.5t42.5 5.5h108l80 -430q16 -68 31.5 -161t23.5 -152l8 -59h11q14 225 63 497l53 297q2 27 25 32t139 5q-213 -1030 -221 -1030q-37 -6 -106 -6q-27 0 -52.5 27.5 t-35.5 78.5l-27 137q-45 223 -74 508q-35 -309 -74 -508l-47 -237q-86 -6 -139 -6q-47 0 -72 100z" />
+<glyph unicode="x" horiz-adv-x="839" d="M31 0l288 535l-247 462q-10 18 6 23q20 4 168 4l76 -139q68 -135 108 -234q55 127 113 234l61 110q10 20 34 24.5t153 4.5l-263 -479l273 -506q5 -12 5 -20q0 -10 -9 -13q-16 -6 -181 -6l-75 133q-66 119 -133 275q-74 -170 -129 -275l-58 -100q-10 -25 -39.5 -29 t-150.5 -4z" />
+<glyph unicode="y" horiz-adv-x="729" d="M-8 -315q0 61 24 94q47 -33 129 -33q109 0 150 221l-246 1012q-8 33 11.5 39t150.5 6l111 -487q10 -51 20 -117t16 -112l13 -88q6 -42 6 -46q27 238 49 365l90 436q6 37 29.5 43t150.5 6l-252 -1079q-45 -193 -108.5 -266.5t-177.5 -73.5q-166 0 -166 80z" />
+<glyph unicode="z" horiz-adv-x="684" d="M41 82q0 33 14 63l398 738h-209q-115 0 -187 -11q-6 37 -6 80q0 72 53 72h521q18 -16 18 -51q0 -33 -20 -82l-385 -737h180q125 0 215 22q6 -29 6 -74q-2 -55 -15.5 -78.5t-52.5 -23.5h-501q-29 25 -29 82z" />
+<glyph unicode="{" horiz-adv-x="565" d="M84 600q0 55 35 84q35 23 49 35t28.5 52t14.5 103q0 76 -14.5 213.5t-14.5 194.5q0 238 318 242q31 -41 30 -103q0 -53 -28 -59q-150 -12 -150 -164q0 -45 10.5 -171t10.5 -204q0 -92 -28 -138t-83 -71q57 -23 84 -64.5t27 -129.5q0 -78 -10.5 -202t-10.5 -173 q0 -109 37 -147.5t127 -51.5q6 -39 6 -63q0 -90 -57 -90q-150 0 -216.5 68.5t-66.5 207.5q0 70 14.5 198t14.5 206t-27.5 112.5t-87.5 46.5q-12 27 -12 68z" />
+<glyph unicode="|" horiz-adv-x="661" d="M248 -410v2034q0 33 22.5 39t145.5 6v-2038q0 -31 -22.5 -36t-145.5 -5z" />
+<glyph unicode="}" horiz-adv-x="565" d="M37 -203q0 51 31 58q147 12 147 163q0 45 -10 170t-10 203q0 94 27.5 141.5t80.5 69.5q-55 23 -81.5 66t-26.5 129q0 78 10 201.5t10 172.5q0 109 -38 148t-126 51q-8 35 -8 64q0 90 61 90q147 0 214 -69t67 -208q0 -70 -14.5 -197.5t-14.5 -205.5t27 -113t86 -47 q14 -35 14 -68q0 -59 -37 -81q-33 -23 -48 -37.5t-28.5 -53t-13.5 -102.5q0 -78 14.5 -214t14.5 -194q0 -123 -86 -182t-231 -59q-31 45 -31 104z" />
+<glyph unicode="~" horiz-adv-x="819" d="M23 545q29 49 103.5 89t160.5 40q74 0 143.5 -44t122.5 -44q84 0 143 71q37 25 69 -4.5t36 -87.5q-37 -51 -104.5 -91t-157.5 -40q-78 0 -151 45t-118 45t-102 -37.5t-74 -40.5q-29 -2 -49 25t-22 74z" />
+<glyph unicode="¡" horiz-adv-x="399" d="M90 -403l33 925q2 51 33.5 63.5t134.5 12.5l26 -952q2 -35 -36.5 -42t-190.5 -7zM94 924q0 49 32 82.5t83 33.5q115 0 115 -116q0 -49 -31 -84t-84 -35q-115 0 -115 119z" />
+<glyph unicode="¢" d="M170 467q0 496 264 565v178q0 41 36 55.5t116 14.5v-240q49 -10 85 -29.5t36 -37.5q0 -76 -19 -121q-63 37 -137 37q-45 0 -78 -13.5t-66.5 -52.5t-52 -127t-18.5 -223q0 -154 22.5 -228.5t58.5 -93t109 -18.5q86 0 160 47q16 -49 16 -104q0 -31 -49 -59.5t-114 -34.5 v-189q0 -41 -35 -53t-117 -12v260q-113 16 -165 117.5t-52 361.5z" />
+<glyph unicode="£" horiz-adv-x="749" d="M31 567q0 88 5 117t27 29h95q8 270 92 388t237 118q86 0 144.5 -28t58.5 -81q0 -47 -20 -102q-68 43 -146 43q-94 0 -146 -73t-54 -265h266q0 -88 -5 -117t-28 -29h-233q0 -199 16 -401l319 -14q12 -33 13 -76q0 -76 -105 -76h-387q-18 244 -22 567h-127z" />
+<glyph unicode="¥" d="M61 1407q-1 4 -1 8q0 12 16 15q23 4 174 4l80 -281q92 -295 98 -389q10 111 102 389l76 250q8 23 30.5 27t149.5 4l-194 -596h182q0 -82 -11 -111t-52 -29h-166l-35 -108v-90h266q0 -80 -12 -110t-53 -30h-201v-327q0 -25 -19.5 -29t-146.5 -4v360h-266q0 80 12 110 t53 30h201v80l-41 118h-225q0 80 12 110t53 30h113z" />
+<glyph unicode="¦" horiz-adv-x="464" d="M150 393q0 37 18 52.5t68 15.5q43 0 79 -12v-795q0 -37 -16 -48.5t-70 -11.5q-49 0 -79 11v788zM150 676v780q0 37 18 51.5t68 14.5q43 0 79 -13v-784q0 -35 -16 -46t-70 -11q-46 0 -79 8z" />
+<glyph unicode="§" horiz-adv-x="712" d="M72 795q0 127 114 204q-12 12 -16 21q-76 96 -76 182q0 111 87 174.5t222 63.5q90 0 147.5 -27t72.5 -59q4 -12 4 -35q0 -55 -31 -102q-70 47 -166 47q-70 0 -108.5 -26t-38.5 -69q0 -47 61 -116q6 -8 95 -94.5t124 -133.5q74 -92 74 -186q0 -129 -115 -207l19 -20 q76 -98 75 -183q0 -109 -88 -173t-223 -64q-90 0 -147.5 27.5t-69.5 60.5q-6 12 -6 33q0 55 31 102q74 -47 166 -47q70 0 108.5 26.5t38.5 67.5q0 45 -61 117q-14 16 -99.5 99t-120.5 128q-73 93 -73 189zM227 780q0 -61 62 -135q23 -31 110 -102q37 14 59.5 48t22.5 60 q0 59 -59 135q-27 33 -115 103q-35 -12 -57.5 -46t-22.5 -63z" />
+<glyph unicode="¨" horiz-adv-x="493" d="M0 1309q0 43 27.5 73.5t72.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-100 1 -100 105zM293 1309q0 43 26.5 73.5t71.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-98 1 -98 105z" />
+<glyph unicode="©" horiz-adv-x="966" d="M72 1108q0 449 424 448q207 0 302 -102t95 -342q0 -221 -106.5 -339t-307.5 -118q-207 0 -307 104.5t-100 348.5zM199 1108q0 -182 68.5 -257t207.5 -75q131 0 211 82t80 256q0 170 -66.5 249t-205.5 79q-295 0 -295 -334zM322 1087q0 168 53 224.5t135 56.5 q31 0 61.5 -11t30.5 -22q0 -23 -12 -65q-47 14 -69.5 14t-38 -6t-32 -24.5t-24.5 -60.5t-8 -108q0 -96 20.5 -122.5t69.5 -26.5q27 0 78 20q14 -29 14 -59q0 -16 -32.5 -29.5t-69.5 -13.5q-98 0 -137 43t-39 190z" />
+<glyph unicode="ª" horiz-adv-x="659" d="M82 842q0 252 225 252q61 0 131 -21v117q0 70 -34.5 94.5t-94.5 24.5q-90 0 -192 -47q-18 23 -21.5 62.5t10.5 57.5q66 72 254 72q217 0 218 -209v-596q-119 -59 -265 -59q-109 0 -170 50t-61 202zM217 838q0 -129 119 -129q53 0 102 24v225q-49 16 -86 17 q-70 0 -102.5 -25.5t-32.5 -111.5z" />
+<glyph unicode="«" horiz-adv-x="851" d="M37 516q0 33 73.5 160t147.5 237l76 111q29 0 54.5 -20.5t35.5 -40.5l10 -23q0 -35 -60.5 -140.5t-119.5 -193.5l-61 -90q246 -344 245 -420l-11 -26.5t-32.5 -43t-54.5 -26.5q-303 442 -303 516zM389 514q0 31 74 146.5t147 216.5l74 100q27 0 51.5 -19.5t34.5 -39.5 l10 -19q0 -33 -58 -129t-116 -176l-59 -80q238 -301 237 -373q-4 -10 -11 -25.5t-31.5 -40t-51.5 -24.5q-301 391 -301 463z" />
+<glyph unicode="¬" horiz-adv-x="819" d="M70 553q0 80 53 80h610v-406q-43 -14 -76 -14q-82 0 -82 55v207h-493q-12 41 -12 78z" />
+<glyph unicode="­" horiz-adv-x="569" d="M76 504q0 88 5 116.5t28 28.5h385q0 -88 -5.5 -116.5t-29.5 -28.5h-383z" />
+<glyph unicode="®" horiz-adv-x="966" d="M72 1108q0 449 424 448q207 0 302 -102t95 -342q0 -221 -106.5 -339t-307.5 -118q-207 0 -307 104.5t-100 348.5zM199 1108q0 -182 68.5 -257t207.5 -75q131 0 211 82t80 256q0 170 -66.5 249t-205.5 79q-295 0 -295 -334zM360 854v508q0 10 15 10h90q166 0 166 -149 q0 -94 -70 -140q72 -68 84 -211q0 -20 -33 -20q-37 0 -51 2q-12 158 -74 205h-49v-189q0 -12 -12.5 -14t-65.5 -2zM438 1128h33q78 0 78 101q0 76 -74 76h-37v-177z" />
+<glyph unicode="¯" horiz-adv-x="546" d="M0 1290q0 82 66 82h466q14 -35 15 -72q0 -39 -16.5 -62.5t-47.5 -23.5h-471q-12 35 -12 76z" />
+<glyph unicode="°" horiz-adv-x="733" d="M170 1329q0 199 205 199q100 0 145 -43t45 -154q0 -201 -203 -201q-100 0 -146 43t-46 156zM283 1327q0 -90 82 -90q90 0 90 94q0 90 -78 90q-94 0 -94 -94z" />
+<glyph unicode="±" horiz-adv-x="858" d="M70 29q0 88 5 116.5t29 28.5h682q0 -88 -5 -116.5t-27 -28.5h-684zM72 592q0 88 5 116.5t29 28.5h252v252q0 25 29 30t117 5v-287h284q0 -88 -5 -116.5t-27 -28.5h-252v-252q0 -23 -29 -28t-117 -5v285h-286z" />
+<glyph unicode="²" horiz-adv-x="786" d="M82 647q0 55 24 86q57 66 162 162t155 158.5t50 124.5q0 106 -131 106q-102 0 -207 -78q-31 57 -31 103q0 55 101.5 100t214.5 45q141 0 197.5 -56.5t56.5 -160.5q0 -68 -39 -141.5t-81 -120.5t-117 -121t-103 -104h358q10 -39 10 -74q0 -84 -53 -84h-555q-12 30 -12 55z " />
+<glyph unicode="³" horiz-adv-x="784" d="M90 686q0 55 41 90q78 -51 199 -51q88 0 140 33t52 94q0 94 -116 111q-55 6 -146 6q-18 25 -18 76t53 51t106 -6q78 55 78 124q0 90 -131 91q-119 0 -211 -68q-34 34 -34 85q0 36 20 52q88 80 295 80q125 0 186.5 -50t61.5 -134q0 -119 -111 -213q66 -27 102.5 -78 t36.5 -113q0 -145 -99 -220t-259 -75q-156 0 -219 52q-27 20 -27 63z" />
+<glyph unicode="´" horiz-adv-x="350" d="M0 1260q63 74 161.5 156.5t112.5 82.5q27 0 48.5 -41t27.5 -84q-23 -29 -127 -103.5t-160 -105.5q-16 0 -32.5 23.5t-22.5 48.5z" />
+<glyph unicode="µ" horiz-adv-x="806" d="M90 -389v1352q0 72 86 71q49 0 82 -10v-756q0 -131 141 -131q84 0 148 29v797q0 37 17.5 54t64.5 17q53 0 86 -10v-975q-152 -70 -320 -69q-98 0 -137 51v-365q0 -66 -94 -65q-17 0 -74 10z" />
+<glyph unicode="μ" horiz-adv-x="806" d="M90 -389v1352q0 72 86 71q49 0 82 -10v-756q0 -131 141 -131q84 0 148 29v797q0 37 17.5 54t64.5 17q53 0 86 -10v-975q-152 -70 -320 -69q-98 0 -137 51v-365q0 -66 -94 -65q-17 0 -74 10z" />
+<glyph unicode="¶" horiz-adv-x="1107" d="M68 860q0 305 107.5 449.5t297.5 144.5q137 0 248 -57v-1344q0 -59 -82 -59q-49 0 -86 12v414q-57 -31 -162 -31q-323 0 -323 471zM240 877q0 -352 192 -353q76 0 121 29v737q-41 20 -104 21q-209 0 -209 -434zM848 4v1344q0 37 18.5 51t67.5 14q41 0 82 -12v-1348 q0 -37 -17.5 -48t-70.5 -11q-49 0 -80 10z" />
+<glyph unicode="·" horiz-adv-x="452" d="M109 551q0 49 31.5 84t82.5 35q115 0 115 -119q0 -51 -31 -84t-84 -33q-114 0 -114 117z" />
+<glyph unicode="¸" horiz-adv-x="278" d="M0 -397q12 72 27 84q10 6 19 1t30.5 -13.5t40.5 -8.5q66 0 65 70q0 68 -61 67l-84 -10l39 211h92l-25 -123h35q41 0 71 -32.5t30 -98.5q0 -78 -46.5 -125t-117.5 -47z" />
+<glyph unicode="¹" horiz-adv-x="780" d="M90 664q0 86 57 86h191v522l-221 -45q-20 35 -21 80q0 55 56 77q72 25 170 47.5t133 22.5q39 0 51 -6v-698h178q6 -43 6 -74q0 -47 -11 -65.5t-38 -18.5h-541q-10 35 -10 72z" />
+<glyph unicode="º" horiz-adv-x="692" d="M72 1022q0 432 284 432q139 0 202 -92t63 -336q0 -434 -283 -434q-135 0 -200.5 93t-65.5 337zM213 1012q0 -164 29.5 -223.5t97.5 -59.5q139 0 139 293q0 164 -28.5 224.5t-94.5 60.5q-72 0 -107.5 -67.5t-35.5 -227.5z" />
+<glyph unicode="»" horiz-adv-x="847" d="M66 141q2 76 237 371q4 0 -52 79t-117.5 176t-61.5 132q0 25 22.5 46.5t44.5 29.5l23 8q297 -401 297 -471q0 -72 -299 -463l-4 -4q-10 2 -25.5 9t-40 31.5t-24.5 55.5zM410 96q2 76 245 420q-242 346 -241 424q0 25 24.5 46.5t48.5 29.5l27 8q297 -436 297 -508 q0 -33 -76 -162t-151 -241l-76 -113q-10 2 -26.5 9t-44 31.5t-27.5 55.5z" />
+<glyph unicode="¼" horiz-adv-x="1779" d="M90 664q0 86 57 86h191v522l-221 -45q-20 35 -21 80q0 55 56 77q72 25 170 47.5t133 22.5q39 0 51 -6v-698h178q6 -43 6 -74q0 -47 -11 -65.5t-38 -18.5h-541q-10 35 -10 72zM510 39l686 1376q16 39 57 39q61 0 113 -59l-690 -1385q-8 -31 -49 -30q-62 0 -117 59z M1020 225q0 20 14 68q37 121 129 270.5t178 235.5q53 63 146 63q41 0 67 -10v-551h123q12 -37 13 -78q0 -80 -52 -80h-84v-104q0 -51 -88 -51q-35 0 -67 8v147h-350q-29 35 -29 82zM1174 291h231l8 381q-68 -53 -139 -167t-100 -214z" />
+<glyph unicode="½" horiz-adv-x="1843" d="M90 664q0 86 57 86h191v522l-221 -45q-20 35 -21 80q0 55 56 77q72 25 170 47.5t133 22.5q39 0 51 -6v-698h178q6 -43 6 -74q0 -47 -11 -65.5t-38 -18.5h-541q-10 35 -10 72zM510 39l686 1376q16 39 57 39q61 0 113 -59l-690 -1385q-8 -31 -49 -30q-62 0 -117 59z M1130 55q0 55 25 86q57 66 161.5 162t155 158.5t50.5 124.5q0 106 -131 106q-102 0 -207 -78q-31 57 -31 103q0 55 101.5 100t213.5 45q141 0 197.5 -56t56.5 -161q0 -68 -38.5 -141.5t-80.5 -120.5t-117 -121l-104 -104h359q10 -39 10 -74q0 -84 -53 -84h-555 q-13 30 -13 55z" />
+<glyph unicode="¾" horiz-adv-x="1773" d="M90 686q0 55 41 90q78 -51 199 -51q88 0 140 33t52 94q0 94 -116 111q-55 6 -146 6q-18 25 -18 76t53 51t106 -6q78 55 78 124q0 90 -131 91q-119 0 -211 -68q-34 34 -34 85q0 36 20 52q88 80 295 80q125 0 186.5 -50t61.5 -134q0 -119 -111 -213q66 -27 102.5 -78 t36.5 -113q0 -145 -99 -220t-259 -75q-156 0 -219 52q-27 20 -27 63zM504 39l686 1376q16 39 57 39q61 0 113 -59l-690 -1385q-8 -31 -49 -30q-62 0 -117 59zM1014 225q0 20 14 68q37 121 129 270.5t178 235.5q53 63 146 63q41 0 67 -10v-551h123q12 -37 12 -78 q0 -80 -51 -80h-84v-104q0 -51 -88 -51q-35 0 -67 8v147h-351q-28 35 -28 82zM1167 291h232l8 381q-68 -53 -139.5 -167t-100.5 -214z" />
+<glyph unicode="¿" horiz-adv-x="626" d="M29 -115q0 111 35.5 196t104.5 173t87 123q25 43 25 96q0 27 -6.5 61.5t-9.5 47t3 26.5q19 24 82 24q29 0 68 -5q31 -61 31 -146q0 -82 -37 -147q-29 -53 -87.5 -136t-87 -143.5t-28.5 -130.5q0 -156 166 -155q100 0 170 51q25 -66 24 -133q0 -35 -80.5 -60.5 t-175.5 -25.5q-133 0 -208.5 72.5t-75.5 211.5zM227 920q0 51 31 83.5t84 32.5q115 0 115 -116q0 -49 -31 -84t-84 -35q-115 0 -115 119z" />
+<glyph unicode="À" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM207 1786q8 45 29.5 86t48.5 41q12 0 126.5 -99.5t145.5 -142.5q-25 -92 -63 -92q-12 0 -138 90 t-149 117zM307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393z" />
+<glyph unicode="Á" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393zM350 1669q63 74 161.5 157t113.5 83 q27 0 48 -41t27 -84q-23 -29 -127 -103.5t-159 -105.5q-16 0 -32.5 23.5t-25.5 48.5z" />
+<glyph unicode="Â" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM186 1628l232 252q12 6 35 6q27 0 51 -24q199 -201 198 -236q0 -23 -35.5 -36t-82.5 -13 q-106 109 -133 160q-117 -158 -154 -158q-80 0 -111 49zM307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393z" />
+<glyph unicode="Ã" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM145 1688q94 154 232 153q45 0 91 -48t87 -48t67.5 19.5t40 39t25.5 19.5q16 0 30.5 -22.5 t22.5 -47.5l7 -22q-18 -37 -81 -91.5t-143 -54.5q-47 0 -75.5 24.5t-50 49t-52.5 24.5q-41 0 -77 -39.5t-44 -39.5q-20 0 -39.5 21.5t-29.5 41.5zM307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393z" />
+<glyph unicode="Ä" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM205 1718q0 43 27.5 74t72.5 31q102 0 103 -105q0 -45 -28 -74.5t-75 -29.5q-100 0 -100 104z M307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393zM498 1718q0 43 26.5 74t71.5 31q102 0 102 -105q0 -45 -27.5 -74.5t-74.5 -29.5q-98 0 -98 104z" />
+<glyph unicode="Å" horiz-adv-x="894" d="M10 2l365 1409q6 29 63 29q47 0 78 -6l367 -1403q4 -18 -10.5 -26.5t-61.5 -8.5q-57 0 -98 4l-88 365h-353l-79 -336q-4 -12 -9.5 -18.5t-21 -10.5t-47.5 -4q-46 0 -105 6zM246 1759q0 201 205 201q100 0 145 -44t45 -155q0 -201 -203 -200q-98 0 -145 44.5t-47 153.5z M307 516h283l-70 291q-53 221 -71 393q-20 -166 -72 -393zM365 1757q0 -84 75 -84q84 0 84 88q0 84 -71 84q-88 0 -88 -88z" />
+<glyph unicode="Æ" horiz-adv-x="1259" d="M35 2l600 1403q12 29 53 29h531q0 -104 -4.5 -127t-26.5 -23h-328v-428h309q0 -102 -5 -128t-27 -26h-277v-552h350q0 -106 -4 -128t-28 -22h-484v365h-338l-139 -336q-12 -33 -78 -33q-45 0 -104 6zM420 516h274v741q-72 -246 -153 -456z" />
+<glyph unicode="Ç" horiz-adv-x="694" d="M63 657q0 203 26 352.5t63.5 233.5t94 135.5t108 66.5t112.5 15q193 0 192 -112q0 -55 -26 -101q-57 51 -133 51q-43 0 -77 -13t-70 -54t-59.5 -108.5t-38.5 -184.5t-15 -272q0 -201 27.5 -317t69.5 -153.5t107 -37.5q113 0 189 63q25 -53 24 -100q0 -55 -57 -96 t-151 -50l-19 -94h35q41 0 70.5 -32.5t29.5 -98.5q0 -78 -46 -125t-118 -47l-114 25q12 72 26 84q10 6 19.5 1t31 -13.5t39.5 -8.5q66 0 66 70q0 68 -61 67l-84 -10l32 182q-70 6 -119 37t-91 103.5t-62.5 207.5t-20.5 334z" />
+<glyph unicode="È" horiz-adv-x="655" d="M90 0v1399q2 35 35 35h489q0 -104 -4 -127t-26 -23h-326v-428h307q0 -102 -4 -128t-26 -26h-277v-552h350q0 -106 -4 -128t-29 -22h-485zM133 1786q8 45 29.5 86t48.5 41q12 0 127 -99.5t145 -142.5q-25 -92 -63 -92q-12 0 -138 90t-149 117z" />
+<glyph unicode="É" horiz-adv-x="655" d="M90 0v1399q2 35 35 35h489q0 -104 -4 -127t-26 -23h-326v-428h307q0 -102 -4 -128t-26 -26h-277v-552h350q0 -106 -4 -128t-29 -22h-485zM279 1669q63 74 161.5 157t112.5 83q27 0 48.5 -41t27.5 -84q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -31.5 23.5t-23.5 48.5z " />
+<glyph unicode="Ê" horiz-adv-x="655" d="M90 0v1399q2 35 35 35h489q0 -104 -4 -127t-26 -23h-326v-428h307q0 -102 -4 -128t-26 -26h-277v-552h350q0 -106 -4 -128t-29 -22h-485zM115 1628l231 252q12 6 35 6q27 0 51 -24q199 -201 199 -236q0 -23 -36 -36t-83 -13q-106 109 -133 160q-117 -158 -154 -158 q-79 0 -110 49z" />
+<glyph unicode="Ë" horiz-adv-x="655" d="M90 0v1399q2 35 35 35h489q0 -104 -4 -127t-26 -23h-326v-428h307q0 -102 -4 -128t-26 -26h-277v-552h350q0 -106 -4 -128t-29 -22h-485zM131 1718q0 43 27.5 74t72.5 31q102 0 103 -105q0 -45 -27.5 -74.5t-75.5 -29.5q-100 0 -100 104zM424 1718q0 43 26.5 74t71.5 31 q102 0 103 -105q0 -45 -28 -74.5t-75 -29.5q-98 0 -98 104z" />
+<glyph unicode="Ì" horiz-adv-x="344" d="M-68 1786q8 45 30 86t48 41q12 0 127 -99.5t146 -142.5q-25 -92 -64 -92q-12 0 -138 90t-149 117zM88 0v1358q0 57 21.5 66.5t146.5 9.5v-1401q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="Í" horiz-adv-x="344" d="M78 1669q63 74 161.5 157t112.5 83q27 0 48.5 -41t27.5 -84q-23 -29 -127 -103.5t-160 -105.5q-16 0 -32.5 23.5t-22.5 48.5zM88 0v1358q0 57 21.5 66.5t146.5 9.5v-1401q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="Î" horiz-adv-x="344" d="M-88 1628l231 252q12 6 35 6q27 0 51 -24q199 -201 199 -236q0 -23 -36 -36t-83 -13q-106 109 -133 160q-117 -158 -153 -158q-80 0 -111 49zM88 0v1358q0 57 21.5 66.5t146.5 9.5v-1401q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="Ï" horiz-adv-x="344" d="M-70 1718q0 43 28 74t73 31q102 0 102 -105q0 -45 -27.5 -74.5t-74.5 -29.5q-101 0 -101 104zM88 0v1358q0 57 21.5 66.5t146.5 9.5v-1401q0 -25 -21.5 -29t-146.5 -4zM223 1718q0 43 26.5 74t72.5 31q102 0 102 -105q0 -45 -27.5 -74.5t-74.5 -29.5q-99 0 -99 104z" />
+<glyph unicode="Ð" horiz-adv-x="804" d="M8 676q0 90 5 118.5t30 28.5h47v572q0 39 55 39h199q209 0 305 -138.5t96 -488.5q0 -442 -99 -624.5t-300 -182.5h-256v676h-82zM256 160l92 -2q45 0 78 23.5t64.5 87t48 199.5t16.5 339q0 272 -48 372.5t-157 100.5h-94v-457h162q0 -90 -5 -118.5t-28 -28.5h-129v-516z " />
+<glyph unicode="Ñ" horiz-adv-x="909" d="M88 0v1399q0 35 35 35h127l229 -553q57 -152 195 -578v6q-20 176 -21 609v481q0 27 21.5 31t146.5 4v-1401q0 -33 -35 -33h-124l-234 563q-45 111 -195 580q20 -221 21 -613v-497q0 -25 -20.5 -29t-145.5 -4zM168 1688q94 154 231 153q45 0 91.5 -48t87 -48t67.5 19.5 t40 39t26 19.5q16 0 30.5 -22.5t20.5 -47.5l8 -22q-18 -37 -80.5 -91.5t-142.5 -54.5q-47 0 -76 24.5t-50.5 49t-51.5 24.5q-41 0 -77 -39.5t-44 -39.5q-20 0 -40 21.5t-30 41.5z" />
+<glyph unicode="Ò" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM211 1786q8 45 29.5 86t48.5 41q12 0 126.5 -99.5t145.5 -142.5q-25 -92 -63 -92q-12 0 -138 90t-149 117zM248 684q0 -291 42 -411.5 t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464z" />
+<glyph unicode="Ó" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM248 684q0 -291 42 -411.5t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464zM356 1669 q63 74 161.5 157t113.5 83q27 0 48 -41t28 -84q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -31.5 23.5t-23.5 48.5z" />
+<glyph unicode="Ô" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM193 1628l231 252q12 6 35 6q27 0 51 -24q199 -201 199 -236q0 -23 -36 -36t-83 -13q-106 109 -133 160q-117 -158 -154 -158 q-79 0 -110 49zM248 684q0 -291 42 -411.5t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464z" />
+<glyph unicode="Õ" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM152 1688q94 154 231 153q45 0 91 -48t87 -48t67.5 19.5t40 39t25.5 19.5q16 0 30.5 -22.5t20.5 -47.5l9 -22q-18 -37 -81 -91.5 t-143 -54.5q-47 0 -75.5 24.5t-50 49t-52.5 24.5q-41 0 -76.5 -39.5t-44.5 -39.5q-20 0 -39.5 21.5t-29.5 41.5zM248 684q0 -291 42 -411.5t148 -120.5q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464z" />
+<glyph unicode="Ö" horiz-adv-x="876" d="M61 725q0 399 93.5 563t298.5 164q203 0 283.5 -155.5t80.5 -565.5q0 -416 -90 -582.5t-297 -166.5q-137 0 -214 62t-116 224t-39 457zM211 1718q0 43 27.5 74t72.5 31q102 0 103 -105q0 -45 -28 -74.5t-75 -29.5q-100 0 -100 104zM248 684q0 -291 42 -411.5t148 -120.5 q111 0 155 130t44 445q0 311 -40 433t-148.5 122t-154.5 -134t-46 -464zM504 1718q0 43 26.5 74t71.5 31q102 0 103 -105q0 -45 -28 -74.5t-75 -29.5q-98 0 -98 104z" />
+<glyph unicode="×" d="M145 375l183 200l-183 205q84 82 105 86q2 0 4 1q10 0 18 -9l154 -172l156 172q8 8 18 8t22 -8q24 -16 87 -78l-183 -202l183 -203q-86 -84 -109 -86q-2 0 -4 -1l-16 7l-154 170l-154 -170q-8 -8 -17.5 -8t-21.5 8q-22 17 -88 80z" />
+<glyph unicode="Ø" horiz-adv-x="948" d="M76 19q0 9 71 194q-51 168 -51 512q0 399 91.5 564t295.5 165q162 0 242 -94q35 92 47 113q96 -10 105 -52v-1q0 -29 -70 -228q45 -162 45 -461q0 -416 -90 -583.5t-297 -167.5q-166 0 -244 92q-8 -23 -17 -45.5t-17.5 -40t-8.5 -19.5q-31 0 -64 14q-38 15 -38 38z M283 684q0 -205 14 -319l303 860q-41 59 -119 59q-106 0 -152 -135t-46 -465zM350 201q39 -49 109 -49q74 0 115.5 39.5t69.5 170t28 365.5q0 193 -17 328z" />
+<glyph unicode="Ù" horiz-adv-x="894" d="M88 418v981q0 27 21.5 31t150.5 4v-1020q0 -141 39 -211t158 -70q111 0 180 37v1229q0 27 21.5 31t146.5 4v-1381q-43 -29 -139.5 -51t-208.5 -22q-96 0 -165 23.5t-108 61t-61.5 97t-28.5 118t-6 138.5zM211 1786q8 45 29.5 86t48.5 41q12 0 126.5 -99.5t145.5 -142.5 q-25 -92 -63 -92q-12 0 -138 90t-149 117z" />
+<glyph unicode="Ú" horiz-adv-x="894" d="M88 418v981q0 27 21.5 31t150.5 4v-1020q0 -141 39 -211t158 -70q111 0 180 37v1229q0 27 21.5 31t146.5 4v-1381q-43 -29 -139.5 -51t-208.5 -22q-96 0 -165 23.5t-108 61t-61.5 97t-28.5 118t-6 138.5zM356 1669q63 74 161.5 157t113.5 83q27 0 48 -41t28 -84 q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -31.5 23.5t-23.5 48.5z" />
+<glyph unicode="Û" horiz-adv-x="894" d="M88 418v981q0 27 21.5 31t150.5 4v-1020q0 -141 39 -211t158 -70q111 0 180 37v1229q0 27 21.5 31t146.5 4v-1381q-43 -29 -139.5 -51t-208.5 -22q-96 0 -165 23.5t-108 61t-61.5 97t-28.5 118t-6 138.5zM193 1628l231 252q12 6 35 6q27 0 51 -24q199 -201 199 -236 q0 -23 -36 -36t-83 -13q-106 109 -133 160q-117 -158 -154 -158q-79 0 -110 49z" />
+<glyph unicode="Ü" horiz-adv-x="894" d="M88 418v981q0 27 21.5 31t150.5 4v-1020q0 -141 39 -211t158 -70q111 0 180 37v1229q0 27 21.5 31t146.5 4v-1381q-43 -29 -139.5 -51t-208.5 -22q-96 0 -165 23.5t-108 61t-61.5 97t-28.5 118t-6 138.5zM211 1718q0 43 27.5 74t72.5 31q102 0 103 -105q0 -45 -28 -74.5 t-75 -29.5q-100 0 -100 104zM504 1718q0 43 26.5 74t71.5 31q102 0 103 -105q0 -45 -28 -74.5t-75 -29.5q-98 0 -98 104z" />
+<glyph unicode="Ý" horiz-adv-x="745" d="M12 1407q-1 4 -1 8q0 12 16 15q23 4 174 4l82 -281q31 -98 63.5 -240.5t36.5 -187.5q4 43 39 185.5t63 242.5l72 250q8 23 30.5 27t149.5 4l-276 -842v-559q0 -25 -20.5 -29t-145.5 -4v580zM287 1669q63 74 161.5 157t112.5 83q27 0 48.5 -41t27.5 -84 q-23 -29 -127 -103.5t-160 -105.5q-16 0 -31.5 23.5t-23.5 48.5z" />
+<glyph unicode="Þ" horiz-adv-x="737" d="M88 1393q0 27 21.5 34t93.5 7h51v-256h72q195 0 285.5 -96.5t90.5 -309.5q0 -236 -103 -341t-273 -105h-72v-293q0 -25 -22.5 -29t-143.5 -4v1393zM254 483q4 0 43 -2t47 -2q88 0 131 73t43 241q0 240 -162 239q-82 0 -102 -4v-545z" />
+<glyph unicode="ß" horiz-adv-x="952" d="M80 4q23 55 22 148l-6 974q0 160 87 239t243 79q209 0 310.5 -87t101.5 -208q0 -63 -35 -110.5t-77 -72t-77 -61.5t-35 -80q0 -35 33 -76.5t80 -86t94 -95.5t80 -125.5t33 -158.5q0 -139 -82 -220t-225 -81q-113 0 -178.5 29.5t-65.5 62.5q0 66 43 112q55 -55 164 -55 q74 0 116 38t42 112q0 59 -33 116.5t-79 105.5l-92 95q-46 47 -79 104.5t-33 114.5q0 61 36 111.5t78 77t77.5 63.5t35.5 78q0 57 -57 99t-164 42q-98 0 -136 -58.5t-38 -197.5l6 -942q0 -61 -19.5 -84.5t-78.5 -23.5q-29 0 -52.5 5t-31.5 11z" />
+<glyph unicode="à" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M125 1376q8 45 29.5 86t48.5 41q12 0 126.5 -99t145.5 -142q-25 -92 -63 -93q-12 0 -138 90t-149 117zM233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165z" />
+<glyph unicode="á" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165zM268 1260q63 74 161.5 156.5t113.5 82.5q27 0 48 -41t28 -84q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -32.5 23.5t-25.5 48.5z" />
+<glyph unicode="â" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M104 1219l232 251q12 6 35 7q27 0 51 -25q199 -201 199 -235q0 -23 -36 -36.5t-83 -13.5q-106 109 -133 160q-117 -158 -154 -158q-80 1 -111 50zM233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165z" />
+<glyph unicode="ã" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M63 1278q94 154 232 154q45 0 91 -48.5t87 -48.5t67.5 19.5t40 39t25.5 19.5q16 0 30.5 -22.5t22.5 -47.5l7 -22q-18 -37 -81 -91t-143 -54q-47 0 -75.5 24.5t-50 49t-52.5 24.5q-41 0 -76.5 -40t-44.5 -40q-20 0 -39.5 21.5t-29.5 41.5zM233 295q0 -104 33 -140t101 -36 q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165z" />
+<glyph unicode="ä" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M123 1309q0 43 27.5 73.5t72.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-100 1 -100 105zM233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165zM416 1309q0 43 26.5 73.5t71.5 30.5q102 0 102 -104q0 -45 -27.5 -75 t-74.5 -30q-98 1 -98 105z" />
+<glyph unicode="å" horiz-adv-x="724" d="M59 291q0 195 75 265.5t198 70.5q96 0 149 -27v162q0 70 -30.5 95.5t-96.5 25.5q-162 0 -270 -45q-23 41 -23 94q0 41 23 57q31 20 118 37.5t193 17.5q135 0 194.5 -57t59.5 -192v-109q0 -451 -12 -637q-117 -70 -285 -69q-66 0 -110.5 9t-90 38.5t-69 96.5t-23.5 167z M164 1350q0 201 205 200q100 0 145 -44t45 -154q0 -201 -203 -201q-98 0 -145 45t-47 154zM233 295q0 -104 33 -140t101 -36q74 0 108 35q6 68 6 329q-39 18 -96 19q-72 0 -112 -42t-40 -165zM283 1348q0 -84 75 -84q84 0 84 88q0 84 -71 84q-88 0 -88 -88z" />
+<glyph unicode="æ" horiz-adv-x="1189" d="M59 305q0 348 267 348q102 0 155 -26v147q0 121 -139 121q-152 0 -256 -55q-23 39 -23 100q0 31 23 49q82 55 317 55q164 0 201 -114q76 115 250 114q260 0 260 -325q0 -170 -22 -270q-96 -12 -183 -13q-125 0 -245 23q0 -139 20.5 -209t54 -88.5t99.5 -18.5 q139 0 249 64q14 -45 15 -150q0 -14 -38 -31.5t-105.5 -30.5t-139.5 -13q-137 0 -201 57q-100 -57 -266 -57q-68 0 -110.5 8t-90 37.5t-70 99t-22.5 178.5zM233 305q0 -117 32 -151.5t100 -34.5q90 0 116 33v360q-45 16 -96 16q-152 0 -152 -223zM668 594q111 -27 200 -27 q37 0 74 6q10 45 10 127q-2 113 -26.5 156t-89.5 43q-148 0 -168 -305z" />
+<glyph unicode="ç" horiz-adv-x="641" d="M63 489q0 141 23 246t57.5 163t86 92t98.5 44t104 10q72 0 121 -26.5t49 -65.5q0 -47 -18 -92q-66 37 -144 37q-43 0 -73.5 -13.5t-62.5 -52t-49 -124.5t-17 -218q0 -209 42 -285.5t140 -76.5q88 0 162 47q16 -59 16 -90q0 -37 -50 -65.5t-130 -36.5l-21 -101h35 q41 0 70.5 -32.5t29.5 -98.5q0 -78 -46 -125t-117 -47l-115 25q12 72 27 84q10 6 19 1t30.5 -13.5t40.5 -8.5q66 0 65 70q0 68 -61 67l-84 -10l35 189q-90 6 -144.5 48t-86.5 153t-32 306z" />
+<glyph unicode="è" horiz-adv-x="739" d="M63 459q0 184 30 306t86.5 180.5t112.5 78.5t134 20q260 0 260 -329q0 -166 -22 -266q-174 -33 -428 -33q6 -158 49 -216.5t141 -58.5q121 0 233 64q14 -43 15 -113q0 -47 -83 -79.5t-200 -32.5q-78 0 -133 19t-101 69.5t-70 148t-24 242.5zM168 1376q8 45 29.5 86 t48.5 41q12 0 126.5 -99t145.5 -142q-25 -92 -63 -93q-12 0 -138 90t-149 117zM238 551q24 -1 46 -1q146 0 230 23q10 45 10 123q-2 113 -26.5 158t-89.5 45q-154 0 -170 -348z" />
+<glyph unicode="é" horiz-adv-x="739" d="M63 459q0 184 30 306t86.5 180.5t112.5 78.5t134 20q260 0 260 -329q0 -166 -22 -266q-174 -33 -428 -33q6 -158 49 -216.5t141 -58.5q121 0 233 64q14 -43 15 -113q0 -47 -83 -79.5t-200 -32.5q-78 0 -133 19t-101 69.5t-70 148t-24 242.5zM238 551q24 -1 46 -1 q146 0 230 23q10 45 10 123q-2 113 -26.5 158t-89.5 45q-154 0 -170 -348zM311 1260q63 74 161.5 156.5t113.5 82.5q27 0 48 -41t28 -84q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -31.5 23.5t-24.5 48.5z" />
+<glyph unicode="ê" horiz-adv-x="739" d="M63 459q0 184 30 306t86.5 180.5t112.5 78.5t134 20q260 0 260 -329q0 -166 -22 -266q-174 -33 -428 -33q6 -158 49 -216.5t141 -58.5q121 0 233 64q14 -43 15 -113q0 -47 -83 -79.5t-200 -32.5q-78 0 -133 19t-101 69.5t-70 148t-24 242.5zM147 1219l232 251q12 6 35 7 q27 0 51 -25q199 -201 199 -235q0 -23 -36 -36.5t-83 -13.5q-106 109 -133 160q-117 -158 -154 -158q-80 1 -111 50zM238 551q24 -1 46 -1q146 0 230 23q10 45 10 123q-2 113 -26.5 158t-89.5 45q-154 0 -170 -348z" />
+<glyph unicode="ë" horiz-adv-x="739" d="M63 459q0 184 30 306t86.5 180.5t112.5 78.5t134 20q260 0 260 -329q0 -166 -22 -266q-174 -33 -428 -33q6 -158 49 -216.5t141 -58.5q121 0 233 64q14 -43 15 -113q0 -47 -83 -79.5t-200 -32.5q-78 0 -133 19t-101 69.5t-70 148t-24 242.5zM166 1309q0 43 27.5 73.5 t72.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-100 1 -100 105zM238 551q24 -1 46 -1q146 0 230 23q10 45 10 123q-2 113 -26.5 158t-89.5 45q-154 0 -170 -348zM459 1309q0 43 26.5 73.5t71.5 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-98 1 -98 105z" />
+<glyph unicode="ì" horiz-adv-x="358" d="M-59 1376q8 45 29.5 86t47.5 41q12 0 127 -99t146 -142q-25 -92 -64 -93q-12 0 -137.5 90t-148.5 117zM94 0v948q0 53 30 64.5t140 11.5v-991q0 -25 -21.5 -29t-148.5 -4z" />
+<glyph unicode="í" horiz-adv-x="358" d="M86 1260q63 74 161.5 156.5t112.5 82.5q27 0 48.5 -41t27.5 -84q-23 -29 -127 -103.5t-159 -105.5q-16 0 -33 23.5t-23 48.5zM94 0v948q0 53 30 64.5t140 11.5v-991q0 -25 -21.5 -29t-148.5 -4z" />
+<glyph unicode="î" horiz-adv-x="358" d="M-78 1219l232 251q12 6 34 7q27 0 52 -25q199 -201 198 -235q0 -23 -35.5 -36.5t-83.5 -13.5q-106 109 -133 160q-117 -158 -153 -158q-80 1 -111 50zM94 0v948q0 53 30 64.5t140 11.5v-991q0 -25 -21.5 -29t-148.5 -4z" />
+<glyph unicode="ï" horiz-adv-x="358" d="M-59 1309q0 43 27.5 73.5t72.5 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-100 1 -100 105zM94 0v948q0 53 30 64.5t140 11.5v-991q0 -25 -21.5 -29t-148.5 -4zM233 1309q0 43 27 73.5t72 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-99 1 -99 105z" />
+<glyph unicode="ð" horiz-adv-x="870" d="M90 526q0 248 88 382t240 134q111 0 180 -59q-35 135 -111 248l-192 -76l-25 64q-8 20 -12 40.5t-1 29.5t15 16l119 45q-55 55 -106 98q18 35 52 55.5t69 20.5q41 0 61 -27q61 -53 88 -84l141 55l25 -63q8 -20 12 -41t1 -30t-15 -13l-72 -29q162 -264 162 -700 q0 -137 -14.5 -237.5t-50 -190.5t-107.5 -137t-178 -47q-190 0 -279.5 125.5t-89.5 420.5zM262 500q0 -381 193 -381q61 0 99 34.5t56.5 106.5t23.5 143.5t5 182.5q0 100 -10 207q-63 102 -166 102q-98 0 -149.5 -109.5t-51.5 -285.5z" />
+<glyph unicode="ñ" horiz-adv-x="782" d="M92 975q160 70 324 69q160 0 224.5 -62t64.5 -212v-737q0 -25 -23 -29t-150 -4v721q0 100 -24.5 139t-97.5 39q-84 0 -152 -37v-829q0 -25 -21.5 -29t-144.5 -4v975zM104 1278q94 154 232 154q45 0 91 -48.5t87 -48.5t67.5 19.5t40 39t25.5 19.5q16 0 30.5 -22.5 t22.5 -47.5l7 -22q-18 -37 -81 -91t-143 -54q-47 0 -75.5 24.5t-50 49t-52.5 24.5q-41 0 -76.5 -40t-44.5 -40q-20 0 -39.5 21.5t-29.5 41.5z" />
+<glyph unicode="ò" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM143 1376q8 45 30 86t48 41q12 0 127 -99t146 -142q-25 -92 -64 -93q-12 0 -138 90t-149 117zM229 508q0 -164 18.5 -251 t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307z" />
+<glyph unicode="ó" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM229 508q0 -164 18.5 -251t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307z M289 1260q63 74 161.5 156.5t112.5 82.5q27 0 48.5 -41t27.5 -84q-23 -29 -127 -103.5t-160 -105.5q-16 0 -32.5 23.5t-24.5 48.5z" />
+<glyph unicode="ô" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM125 1219l231 251q12 6 35 7q27 0 51 -25q199 -201 199 -235q0 -23 -36 -36.5t-83 -13.5q-106 109 -133 160q-117 -158 -153 -158 q-80 1 -111 50zM229 508q0 -164 18.5 -251t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307z" />
+<glyph unicode="õ" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM84 1278q94 154 231 154q45 0 91.5 -48.5t87.5 -48.5t67.5 19.5t39.5 39t26 19.5q16 0 30.5 -22.5t22.5 -47.5l6 -22 q-18 -37 -80.5 -91t-142.5 -54q-47 0 -76 24.5t-50.5 49t-51.5 24.5q-41 0 -77 -40t-44 -40q-20 0 -40 21.5t-30 41.5zM229 508q0 -164 18.5 -251t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307z" />
+<glyph unicode="ö" horiz-adv-x="753" d="M49 512q0 532 340 532q168 0 243 -112.5t75 -413.5q0 -281 -84 -409.5t-252 -128.5q-86 0 -140.5 18t-98.5 73.5t-63.5 163t-19.5 277.5zM143 1309q0 43 28 73.5t73 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-101 1 -101 105zM229 508q0 -164 18.5 -251 t47.5 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -115 -84t-39 -307zM436 1309q0 43 26.5 73.5t72.5 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-99 1 -99 105z" />
+<glyph unicode="÷" d="M70 504q0 88 5 116.5t29 28.5h682q0 -88 -5 -116.5t-27 -28.5h-684zM324 874q0 45 27.5 76t72.5 31q104 -1 104 -107q0 -45 -28.5 -74.5t-75.5 -29.5q-100 0 -100 104zM324 268q0 45 27.5 76t72.5 31q104 0 104 -107q0 -45 -28.5 -74.5t-75.5 -29.5q-100 0 -100 104z" />
+<glyph unicode="ø" horiz-adv-x="843" d="M35 16q0 14 92 170q-31 117 -31 326q0 532 340 532q154 0 226 -86q51 88 69 111q94 -27 94 -68q0 -25 -98 -192q29 -115 29 -291q0 -281 -83 -409.5t-249 -128.5q-164 0 -234 77q-10 -20 -26.5 -46.5t-25.5 -43t-11 -20.5q-31 6 -61.5 25t-30.5 44zM279 508 q0 -102 4 -143l258 460q-29 74 -109 74q-76 0 -114.5 -83t-38.5 -308zM307 207q29 -86 117 -86q72 0 111.5 86t39.5 309q0 90 -6 154z" />
+<glyph unicode="ù" horiz-adv-x="798" d="M90 319v670q0 27 21.5 31t150.5 4v-719q0 -102 27.5 -141t109.5 -39t138 37v827q0 27 21.5 31t143.5 4v-971q-133 -74 -305 -73q-176 0 -241.5 79.5t-65.5 259.5zM162 1376q8 45 29.5 86t48.5 41q12 0 126.5 -99t145.5 -142q-25 -92 -63 -93q-12 0 -138 90t-149 117z" />
+<glyph unicode="ú" horiz-adv-x="798" d="M90 319v670q0 27 21.5 31t150.5 4v-719q0 -102 27.5 -141t109.5 -39t138 37v827q0 27 21.5 31t143.5 4v-971q-133 -74 -305 -73q-176 0 -241.5 79.5t-65.5 259.5zM307 1260q63 74 161.5 156.5t113.5 82.5q27 0 48 -41t27 -84q-23 -29 -127 -103.5t-159 -105.5 q-16 0 -31.5 23.5t-24.5 48.5z" />
+<glyph unicode="û" horiz-adv-x="798" d="M90 319v670q0 27 21.5 31t150.5 4v-719q0 -102 27.5 -141t109.5 -39t138 37v827q0 27 21.5 31t143.5 4v-971q-133 -74 -305 -73q-176 0 -241.5 79.5t-65.5 259.5zM143 1219l232 251q12 6 35 7q27 0 51 -25q199 -201 198 -235q0 -23 -35.5 -36.5t-82.5 -13.5 q-106 109 -133 160q-117 -158 -154 -158q-80 1 -111 50z" />
+<glyph unicode="ü" horiz-adv-x="798" d="M90 319v670q0 27 21.5 31t150.5 4v-719q0 -102 27.5 -141t109.5 -39t138 37v827q0 27 21.5 31t143.5 4v-971q-133 -74 -305 -73q-176 0 -241.5 79.5t-65.5 259.5zM162 1309q0 43 27.5 73.5t72.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-100 1 -100 105zM455 1309 q0 43 26.5 73.5t71.5 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-98 1 -98 105z" />
+<glyph unicode="ý" horiz-adv-x="729" d="M-8 -315q0 61 24 94q47 -33 129 -33q109 0 150 221l-246 1012q-8 33 11.5 39t150.5 6l111 -487q10 -51 20 -117t16 -112l13 -88q6 -42 6 -46q27 238 49 365l90 436q6 37 29.5 43t150.5 6l-252 -1079q-45 -193 -108.5 -266.5t-177.5 -73.5q-166 0 -166 80zM281 1260 q63 74 161.5 156.5t112.5 82.5q27 0 48.5 -41t27.5 -84q-23 -29 -127.5 -103.5t-159.5 -105.5q-16 0 -32.5 23.5t-24.5 48.5z" />
+<glyph unicode="þ" horiz-adv-x="784" d="M94 -340v1770q0 53 29 64t137 11v-477q76 14 133 14q166 0 250 -94t84 -334q0 -156 -21.5 -274.5t-53 -185t-76 -108.5t-82 -54t-78.5 -12q-98 0 -156 53v-430q-39 -12 -98 -13q-43 0 -55.5 13.5t-12.5 56.5zM260 180q31 -57 105 -57q23 0 43 9t45.5 39t45 79t32 139 t12.5 211q0 125 -19.5 191.5t-51.5 86t-89 19.5q-68 0 -123 -43v-674z" />
+<glyph unicode="ÿ" horiz-adv-x="729" d="M-8 -315q0 61 24 94q47 -33 129 -33q109 0 150 221l-246 1012q-8 33 11.5 39t150.5 6l111 -487q10 -51 20 -117t16 -112l13 -88q6 -42 6 -46q27 238 49 365l90 436q6 37 29.5 43t150.5 6l-252 -1079q-45 -193 -108.5 -266.5t-177.5 -73.5q-166 0 -166 80zM135 1309 q0 43 27.5 73.5t73.5 30.5q102 0 102 -104q0 -45 -27.5 -75t-74.5 -30q-101 1 -101 105zM428 1309q0 43 26.5 73.5t71.5 30.5q102 0 103 -104q0 -45 -28 -75t-75 -30q-98 1 -98 105z" />
+<glyph unicode="Œ" horiz-adv-x="1210" d="M55 723q0 395 92.5 562t294.5 167q152 0 230 -84v31q2 35 35 35h462q0 -104 -4 -127t-26 -23h-328v-428h309q0 -102 -4 -128t-26 -26h-279v-552h350q0 -106 -4 -128t-27 -22h-458v82q-86 -100 -248 -100q-137 0 -215 64.5t-116 225t-38 451.5zM242 684q0 -293 41 -416 t149.5 -123t149.5 131.5t41 451t-37 443t-146 123.5q-106 0 -152 -140t-46 -470z" />
+<glyph unicode="œ" horiz-adv-x="1226" d="M55 512q0 530 338 530q174 0 246 -116q80 119 268 118q260 0 260 -325q0 -170 -22 -270q-162 -33 -428 -33q4 -172 43 -223.5t131 -51.5q137 0 250 64q14 -43 14 -148q0 -14 -38 -32.5t-105.5 -31.5t-139.5 -13q-186 0 -256 110q-80 -111 -235 -110q-119 0 -183.5 35.5 t-103.5 154.5t-39 342zM236 508q0 -164 18 -251t47 -111.5t80 -24.5q74 0 112.5 86t38.5 309q0 231 -32.5 307t-110.5 76q-76 0 -114.5 -84t-38.5 -307zM717 551q24 -1 47 -1q148 0 231 23q10 45 11 127q-2 113 -27 156t-90 43q-158 0 -172 -348z" />
+<glyph unicode="Ÿ" horiz-adv-x="745" d="M12 1407q-1 4 -1 8q0 12 16 15q23 4 174 4l82 -281q31 -98 63.5 -240.5t36.5 -187.5q4 43 39 185.5t63 242.5l72 250q8 23 30.5 27t149.5 4l-276 -842v-559q0 -25 -20.5 -29t-145.5 -4v580zM139 1718q0 43 28 74t73 31q102 0 102 -105q0 -45 -27.5 -74.5t-74.5 -29.5 q-101 0 -101 104zM432 1718q0 43 26.5 74t71.5 31q102 0 103 -105q0 -45 -27.5 -74.5t-75.5 -29.5q-98 0 -98 104z" />
+<glyph unicode="ˆ" horiz-adv-x="516" d="M0 1219l231 251q12 6 35 7q27 0 51 -25q199 -201 199 -235q0 -23 -36 -36.5t-83 -13.5q-106 109 -133 160q-117 -158 -153 -158q-80 1 -111 50z" />
+<glyph unicode="˜" horiz-adv-x="602" d="M0 1278q94 154 231 154q45 0 91.5 -48.5t87.5 -48.5t67.5 19.5t39.5 39t26 19.5q16 0 30.5 -22.5t20.5 -47.5l8 -22q-18 -37 -80.5 -91t-142.5 -54q-47 0 -76 24.5t-50.5 49t-51.5 24.5q-41 0 -77 -40t-44 -40q-20 0 -40 21.5t-30 41.5z" />
+<glyph unicode="–" horiz-adv-x="868" d="M76 504q0 88 5 116.5t28 28.5h684q0 -88 -5.5 -116.5t-29.5 -28.5h-682z" />
+<glyph unicode="—" horiz-adv-x="1433" d="M12 504q0 88 5.5 116.5t27.5 28.5h1376q0 -88 -5 -116.5t-30 -28.5h-1374z" />
+<glyph unicode="‘" horiz-adv-x="358" d="M70 1298q0 102 59 216t94 114q51 0 66 -47q-43 -80 -51 -197q47 -29 47 -100q0 -45 -30 -75.5t-75 -30.5q-110 -1 -110 120z" />
+<glyph unicode="’" horiz-adv-x="358" d="M70 1219q43 80 51 196q-47 29 -47 101q0 47 28.5 76.5t73.5 29.5q113 0 113 -121q0 -102 -59.5 -216t-94.5 -114q-55 1 -65 48z" />
+<glyph unicode="‚" horiz-adv-x="350" d="M70 -186q43 78 51 196q-47 29 -47 101q0 45 28.5 75.5t73.5 30.5q113 0 113 -121q0 -104 -59.5 -216.5t-94.5 -112.5q-55 0 -65 47z" />
+<glyph unicode="“" horiz-adv-x="665" d="M70 1298q0 102 59 216t94 114q51 0 66 -47q-43 -80 -51 -197q47 -29 47 -100q0 -45 -30 -75.5t-75 -30.5q-110 -1 -110 120zM377 1298q0 102 60.5 216t92.5 114q55 0 66 -47q-43 -80 -51 -197q47 -29 47 -100q0 -45 -28.5 -75.5t-74.5 -30.5q-112 -1 -112 120z" />
+<glyph unicode="”" horiz-adv-x="665" d="M70 1219q43 80 51 196q-47 29 -47 101q0 47 28.5 76.5t73.5 29.5q113 0 113 -121q0 -102 -59.5 -216t-94.5 -114q-55 1 -65 48zM379 1219q41 80 49 196q-47 29 -47 101q0 47 29.5 76.5t74.5 29.5q113 0 113 -121q0 -102 -60.5 -216t-95.5 -114q-53 1 -63 48z" />
+<glyph unicode="„" horiz-adv-x="659" d="M70 -186q43 78 51 196q-47 29 -47 101q0 45 28.5 75.5t73.5 30.5q113 0 113 -121q0 -104 -59.5 -216.5t-94.5 -112.5q-55 0 -65 47zM379 -186q41 78 49 196q-47 29 -47 101q0 45 29.5 75.5t74.5 30.5q113 0 113 -121q0 -104 -60.5 -216.5t-95.5 -112.5q-53 0 -63 47z" />
+<glyph unicode="•" horiz-adv-x="456" d="M84 582q0 66 41 111.5t108 45.5q154 0 154 -157q0 -68 -42 -112t-112 -44q-149 0 -149 156z" />
+<glyph unicode="…" horiz-adv-x="1069" d="M72 104q0 49 30.5 84t83.5 35q115 0 115 -119q0 -51 -30.5 -83.5t-84.5 -32.5q-114 -1 -114 116zM420 104q0 49 30.5 84t84.5 35q115 0 114 -119q0 -51 -30.5 -83.5t-83.5 -32.5q-115 -1 -115 116zM768 104q0 49 30.5 84t84.5 35q115 0 114 -119q0 -51 -30.5 -83.5 t-83.5 -32.5q-115 -1 -115 116z" />
+<glyph unicode="‹" horiz-adv-x="505" d="M37 512q0 31 73.5 159t147.5 240l76 113q29 0 54.5 -20.5t35.5 -40.5l10 -23q-2 -78 -241 -428q246 -340 245 -416l-11 -26.5t-32.5 -43t-54.5 -26.5q-303 438 -303 512z" />
+<glyph unicode="›" horiz-adv-x="505" d="M66 96q0 33 61 137.5t123 192.5l61 86q-240 350 -239 428q0 25 24.5 46.5t48.5 29.5l25 8q299 -442 299 -512q0 -33 -76 -161t-151 -240l-76 -111q-10 2 -27.5 9t-45 31.5t-27.5 55.5z" />
+<glyph unicode="€" d="M33 406q0 80 12 108.5t53 28.5h111v18q0 92 4 133h-180q0 80 12 110t53 30h129q20 125 61.5 209.5t96.5 125.5t106.5 56.5t114.5 15.5q72 0 120 -15.5t65.5 -32.5t17.5 -34q0 -76 -27 -112q-61 43 -135 43q-182 0 -237 -256h292q0 -80 -12 -110t-53 -30h-246 q-4 -39 -4 -127v-24h248q0 -78 -12.5 -107.5t-53.5 -29.5h-176q14 -160 62.5 -211.5t136.5 -51.5q111 0 180 52q25 -45 25 -107q0 -35 -71 -70.5t-167 -35.5q-78 0 -130 15t-100 59t-77 130t-39 220h-180z" />
+<glyph unicode="™" horiz-adv-x="1030" d="M61 1354v61l19 19h389v-62l-20 -18h-136v-553q0 -14 -10 -16.5t-74 -2.5v572h-168zM520 1415q0 18 21 19h57l90 -258l39 -113q20 74 33 108l82 244q4 18 18 19h66v-633q0 -14 -10.5 -16.5t-75.5 -2.5l2 228q2 70 16 237l-51 -164l-57 -151q-2 -8 -11 -8h-43l-59 159 l-51 172q16 -174 16 -245l2 -209q0 -14 -11 -16.5t-73 -2.5v633z" />
+<glyph unicode="" horiz-adv-x="1025" d="M0 1025h1025v-1025h-1025v1025z" />
+<glyph unicode="fi" horiz-adv-x="823" d="M20 883q0 100 6.5 120.5t36.5 20.5h99v123q0 117 31.5 193.5t89 112.5t115 48t132.5 12q236 0 236 -100q0 -51 -16 -96q-94 45 -213 45q-100 0 -154.5 -41t-54.5 -170v-127h143q0 -96 -6 -118.5t-29 -22.5h-108v-850q0 -33 -33 -33h-133v883h-142zM563 0v948 q0 53 30 64.5t138 11.5v-991q0 -25 -21.5 -29t-146.5 -4z" />
+<glyph unicode="fl" horiz-adv-x="843" d="M20 883q0 100 6.5 120.5t36.5 20.5h99v123q0 365 321 364q156 0 267 -69v-1409q0 -33 -33 -33h-133v1360q-43 14 -90 14q-33 0 -56.5 -6t-51.5 -24.5t-43 -61.5t-15 -108v-150h164q0 -98 -5.5 -119.5t-29.5 -21.5h-129v-850q0 -33 -35 -33h-131v883h-142z" />
+<glyph unicode="ffi" horiz-adv-x="1241" d="M20 883q0 100 6.5 120.5t36.5 20.5h99v141q0 338 321 338q109 0 205 -57q88 68 258 67q236 0 236 -100q0 -45 -19 -96q-94 45 -213 45q-100 0 -154.5 -41t-54.5 -170v-127h144q0 -98 -5.5 -119.5t-29.5 -21.5h-109v-850q0 -33 -32 -33h-134v883h-247v-850q0 -33 -35 -33 h-131v883h-142zM328 1024h247v123q0 113 29 186q-51 29 -121 29q-156 0 -155 -178v-160zM977 0v948q0 53 29.5 64.5t140.5 11.5v-991q0 -25 -21.5 -29t-148.5 -4z" />
+<glyph unicode="ffl" horiz-adv-x="1261" d="M20 883q0 100 6.5 120.5t36.5 20.5h99v141q0 338 321 338q111 0 201 -55q80 66 213 65q154 0 270 -69v-1411q0 -25 -20.5 -29t-147.5 -4v1350q-39 14 -90 14q-35 0 -60.5 -6t-52 -23.5t-41 -58.5t-14.5 -105v-147h142q0 -98 -5.5 -119.5t-29.5 -21.5h-107v-850 q0 -33 -32 -33h-134v883h-247v-850q0 -33 -35 -33h-131v883h-142zM328 1024h247v123q0 113 29 186q-51 29 -121 29q-156 0 -155 -178v-160z" />
+</font>
+</defs></svg>
\ No newline at end of file
bryfry.github.com/font/yanonekaffeesatz-regular-webfont.ttf
Binary file
bryfry.github.com/font/yanonekaffeesatz-regular-webfont.woff
Binary file
bryfry.github.com/images/fancybox/blank.gif
Binary file
bryfry.github.com/images/fancybox/fancybox_loading.gif
Binary file
bryfry.github.com/images/fancybox/fancybox_sprite.png
Binary file
bryfry.github.com/images/active.png
Binary file
bryfry.github.com/images/bg-gradient.png
Binary file
bryfry.github.com/images/hover copy.png
Binary file
bryfry.github.com/images/hover.png
Binary file
bryfry.github.com/images/html5css3.png
Binary file
bryfry.github.com/images/loading.gif
Binary file
bryfry.github.com/images/loading_pacman.gif
Binary file
bryfry.github.com/images/retina_dust.png
Binary file
bryfry.github.com/images/search-dark.png
Binary file
bryfry.github.com/images/search-white.png
Binary file
bryfry.github.com/images/totop.png
Binary file
bryfry.github.com/javascripts/ajaxify.js
@@ -0,0 +1,33 @@
+$(document).ready(function() {
+
+ var hash = window.location.hash.substr(1);
+ var href = $('#nav li#ajax a').each(function(){
+ var href = $(this).attr('href');
+ if(hash==href.substr(0,href.length-5)){
+ var toLoad = hash+'.html #toload';
+ $('#toload').load(toLoad)
+ }
+ });
+
+ $('#nav li#ajax a').click(function(){
+
+ var toLoad = $(this).attr('href')+' #toload';
+ $('#toload').fadeTo('fast',0.00001,loadContent);
+ $('#load').remove();
+ $('#wrapper').append('<span id="load">LOADING...</span>');
+ $('#load').fadeIn('fast');
+ window.location.hash = $(this).attr('href').substr(0,$(this).attr('href').length-5);
+ function loadContent() {
+ $('#toload').load(toLoad,showNewContent())
+ }
+ function showNewContent() {
+ $('#toload').delay(500).fadeTo('normal',1,hideLoader());
+ }
+ function hideLoader() {
+ $('#load').fadeOut('normal');
+ }
+ return false;
+
+ });
+
+});
bryfry.github.com/javascripts/fabric.js
@@ -0,0 +1,62 @@
+(function($){
+ // Open external links in new window
+ var externalLinks = function(){
+ var host = location.host;
+
+ $('body').on('click', 'a', function(e){
+ var href = this.href,
+ link = href.replace(/https?:\/\/([^\/]+)(.*)/, '$1');
+
+ if (link != '' && link != host && !$(this).hasClass('fancybox')){
+ window.open(href);
+ e.preventDefault();
+ }
+ });
+ };
+
+ // Append caption after pictures
+ var appendCaption = function(){
+ $('.entry-content').each(function(i){
+ var _i = i;
+ $(this).find('img').each(function(){
+ var alt = this.alt;
+
+ if (alt != ''){
+ $(this).after('<span class="caption">'+alt+'</span>');
+ }
+
+ $(this).wrap('<a href="'+this.src+'" title="'+alt+'" class="fancybox" rel="gallery'+_i+'" />');
+ });
+ });
+ };
+
+ externalLinks(); // Delete or comment this line to disable opening external links in new window
+ appendCaption(); // Delete or comment this line to disable caption
+
+ var mobilenav = $('#mobile-nav');
+
+ $('html').click(function(){
+ mobilenav.find('.on').each(function(){
+ $(this).removeClass('on').next().hide();
+ });
+ });
+
+ mobilenav.on('click', '.menu .button', function(){
+ if (!$(this).hasClass('on')){
+ var width = $(this).width() + 42;
+ $(this).addClass('on').next().show().css({width: width});
+ } else {
+ $(this).removeClass('on').next().hide();
+ }
+ }).on('click', '.search .button', function(){
+ if (!$(this).hasClass('on')){
+ var width = mobilenav.width() - 51;
+ mobilenav.children('.menu').children().eq(0).removeClass('on').next().hide();
+ $(this).addClass('on').next().show().css({width: width}).children().children().eq(0).focus();
+ } else {
+ $(this).removeClass('on').next().hide().children().children().eq(0).val('');
+ }
+ }).click(function(e){
+ e.stopPropagation();
+ });
+})(jQuery);
\ No newline at end of file
bryfry.github.com/javascripts/jquery-tapir.js
@@ -0,0 +1,60 @@
+(function($){
+ var el;
+ var settings = {};
+
+ var methods = {
+ init: function(options) {
+ el = this;
+
+ settings = {
+ token: false,
+ query_param: 'query'
+ };
+
+ if (options) {
+ $.extend(settings, options);
+ }
+
+ if (!settings.token || settings.query_param == '') {
+ return this;
+ }
+
+ $.getJSON(
+ 'http://tapirgo.com/api/1/search.json?token=' + settings.token + '&query=' + paramValue(settings.query_param) + '&callback=?', function(data){
+ if(settings['complete']) { settings.complete() }
+ $.each(data, function(key, val) {
+ document.getElementById('search_results').style.display="block";
+ document.getElementById('search_results').style.height="100%";
+ document.getElementById('search_results').style.overflow="hidden";
+ var str1 = val.content;
+ var str2 = str1.substr(1, 250);
+ str2 = str2.substr(0, Math.min(str2.length, str2.lastIndexOf(" ")));
+ el.append('<div id="content" class="inner"><article class="post"><h2 class="title"><a href="' + val.link + '">' + val.title + '</a></h2><div class="entry-content"><div class="date">Published on: ' + (val.published_on).substr(0,10) + '</div></div><br><p>' + str2 + '...</p><br><a href="' + val.link +'">Read on →</a></article></div>');
+ if(key >= (data.length-1)){
+ el.append('<div id="content" class="inner"><center><h2 style="border-bottom: 1px solid #ddd;">Result ends</h2></center><br><br></div>');
+ }
+ });
+ }
+ );
+
+ return this;
+ }
+ };
+
+ // Extract the param value from the URL.
+ function paramValue(query_param) {
+ var results = new RegExp('[\\?&]' + query_param + '=([^&#]*)').exec(window.location.href);
+ return results ? results[1] : false;
+ }
+
+ $.fn.tapir = function(method) {
+ if (methods[method]) {
+ return methods[ method ].apply(this, Array.prototype.slice.call(arguments, 1));
+ } else if (typeof method === 'object' || ! method) {
+ return methods.init.apply(this, arguments);
+ } else {
+ $.error('Method ' + method + ' does not exist on jQuery.tapir');
+ }
+ };
+
+})( jQuery );
bryfry.github.com/javascripts/jquery.fancybox.pack.js
@@ -0,0 +1,35 @@
+/*! fancyBox v2.0.6 fancyapps.com | fancyapps.com/fancybox/#license */
+(function(s,l,d,t){var m=d(s),q=d(l),a=d.fancybox=function(){a.open.apply(this,arguments)},u=!1,k=l.createTouch!==t,o=function(a){return"string"===d.type(a)},n=function(b,c){c&&o(b)&&0<b.indexOf("%")&&(b=a.getViewport()[c]/100*parseInt(b,10));return Math.round(b)+"px"};d.extend(a,{version:"2.0.5",defaults:{padding:15,margin:20,width:800,height:600,minWidth:100,minHeight:100,maxWidth:9999,maxHeight:9999,autoSize:!0,autoResize:!k,autoCenter:!k,fitToView:!0,aspectRatio:!1,topRatio:0.5,fixed:!1,scrolling:"auto",
+wrapCSS:"",arrows:!0,closeBtn:!0,closeClick:!1,nextClick:!1,mouseWheel:!0,autoPlay:!1,playSpeed:3E3,preload:3,modal:!1,loop:!0,ajax:{dataType:"html",headers:{"X-fancyBox":!0}},keys:{next:[13,32,34,39,40],prev:[8,33,37,38],close:[27]},tpl:{wrap:'<div class="fancybox-wrap"><div class="fancybox-skin"><div class="fancybox-outer"><div class="fancybox-inner"></div></div></div></div>',image:'<img class="fancybox-image" src="{href}" alt="" />',iframe:'<iframe class="fancybox-iframe" name="fancybox-frame{rnd}" frameborder="0" hspace="0"'+
+(d.browser.msie?' allowtransparency="true"':"")+"></iframe>",swf:'<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="100%" height="100%"><param name="wmode" value="transparent" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="always" /><param name="movie" value="{href}" /><embed src="{href}" type="application/x-shockwave-flash" allowfullscreen="true" allowscriptaccess="always" width="100%" height="100%" wmode="transparent"></embed></object>',error:'<p class="fancybox-error">The requested content cannot be loaded.<br/>Please try again later.</p>',
+closeBtn:'<div title="Close" class="fancybox-item fancybox-close"></div>',next:'<a title="Next" class="fancybox-nav fancybox-next"><span></span></a>',prev:'<a title="Previous" class="fancybox-nav fancybox-prev"><span></span></a>'},openEffect:"fade",openSpeed:300,openEasing:"swing",openOpacity:!0,openMethod:"zoomIn",closeEffect:"fade",closeSpeed:300,closeEasing:"swing",closeOpacity:!0,closeMethod:"zoomOut",nextEffect:"elastic",nextSpeed:300,nextEasing:"swing",nextMethod:"changeIn",prevEffect:"elastic",
+prevSpeed:300,prevEasing:"swing",prevMethod:"changeOut",helpers:{overlay:{speedIn:0,speedOut:300,opacity:0.8,css:{cursor:"pointer"},closeClick:!0},title:{type:"float"}}},group:{},opts:{},coming:null,current:null,isOpen:!1,isOpened:!1,player:{timer:null,isActive:!1},ajaxLoad:null,imgPreload:null,transitions:{},helpers:{},open:function(b,c){a.close(!0);b&&!d.isArray(b)&&(b=b instanceof d?d(b).get():[b]);a.isActive=!0;a.opts=d.extend(!0,{},a.defaults,c);d.isPlainObject(c)&&c.keys!==t&&(a.opts.keys=c.keys?
+d.extend({},a.defaults.keys,c.keys):!1);a.group=b;a._start(a.opts.index||0)},cancel:function(){a.coming&&!1===a.trigger("onCancel")||(a.coming=null,a.hideLoading(),a.ajaxLoad&&a.ajaxLoad.abort(),a.ajaxLoad=null,a.imgPreload&&(a.imgPreload.onload=a.imgPreload.onabort=a.imgPreload.onerror=null))},close:function(b){a.cancel();a.current&&!1!==a.trigger("beforeClose")&&(a.unbindEvents(),!a.isOpen||b&&!0===b[0]?(d(".fancybox-wrap").stop().trigger("onReset").remove(),a._afterZoomOut()):(a.isOpen=a.isOpened=
+!1,d(".fancybox-item, .fancybox-nav").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.closeMethod]()))},play:function(b){var c=function(){clearTimeout(a.player.timer)},e=function(){c();a.current&&a.player.isActive&&(a.player.timer=setTimeout(a.next,a.current.playSpeed))},f=function(){c();d("body").unbind(".player");a.player.isActive=!1;a.trigger("onPlayEnd")};if(a.player.isActive||b&&!1===b[0])f();else if(a.current&&(a.current.loop||
+a.current.index<a.group.length-1))a.player.isActive=!0,d("body").bind({"afterShow.player onUpdate.player":e,"onCancel.player beforeClose.player":f,"beforeLoad.player":c}),e(),a.trigger("onPlayStart")},next:function(){a.current&&a.jumpto(a.current.index+1)},prev:function(){a.current&&a.jumpto(a.current.index-1)},jumpto:function(b){a.current&&(b=parseInt(b,10),1<a.group.length&&a.current.loop&&(b>=a.group.length?b=0:0>b&&(b=a.group.length-1)),a.group[b]!==t&&(a.cancel(),a._start(b)))},reposition:function(b,
+c){var e;a.isOpen&&(e=a._getPosition(c),b&&"scroll"===b.type?(delete e.position,a.wrap.stop(!0,!0).animate(e,200)):a.wrap.css(e))},update:function(b){a.isOpen&&(u||setTimeout(function(){var c=a.current,e=!b||b&&"orientationchange"===b.type;if(u&&(u=!1,c)){if(!b||"scroll"!==b.type||e)c.autoSize&&"iframe"!==c.type&&(a.inner.height("auto"),c.height=a.inner.height()),(c.autoResize||e)&&a._setDimension(),c.canGrow&&"iframe"!==c.type&&a.inner.height("auto");(c.autoCenter||e)&&a.reposition(b);a.trigger("onUpdate")}},
+200),u=!0)},toggle:function(){a.isOpen&&(a.current.fitToView=!a.current.fitToView,a.update())},hideLoading:function(){q.unbind("keypress.fb");d("#fancybox-loading").remove()},showLoading:function(){a.hideLoading();q.bind("keypress.fb",function(b){27===b.keyCode&&(b.preventDefault(),a.cancel())});d('<div id="fancybox-loading"><div></div></div>').click(a.cancel).appendTo("body")},getViewport:function(){return{x:m.scrollLeft(),y:m.scrollTop(),w:k&&s.innerWidth?s.innerWidth:m.width(),h:k&&s.innerHeight?
+s.innerHeight:m.height()}},unbindEvents:function(){a.wrap&&a.wrap.unbind(".fb");q.unbind(".fb");m.unbind(".fb")},bindEvents:function(){var b=a.current,c=b.keys;b&&(m.bind("resize.fb orientationchange.fb"+(b.autoCenter&&!b.fixed?" scroll.fb":""),a.update),c&&q.bind("keydown.fb",function(b){var f;f=b.target||b.srcElement;if(!b.ctrlKey&&!b.altKey&&!b.shiftKey&&!b.metaKey&&(!f||!f.type&&!d(f).is("[contenteditable]")))f=b.keyCode,-1<d.inArray(f,c.close)?(a.close(),b.preventDefault()):-1<d.inArray(f,c.next)?
+(a.next(),b.preventDefault()):-1<d.inArray(f,c.prev)&&(a.prev(),b.preventDefault())}),d.fn.mousewheel&&b.mouseWheel&&1<a.group.length&&a.wrap.bind("mousewheel.fb",function(b,c){var d=b.target||null;if(0!==c&&(!d||0===d.clientHeight||d.scrollHeight===d.clientHeight&&d.scrollWidth===d.clientWidth))b.preventDefault(),a[0<c?"prev":"next"]()}))},trigger:function(b,c){var e,f=c||a[-1<d.inArray(b,["onCancel","beforeLoad","afterLoad"])?"coming":"current"];if(f){d.isFunction(f[b])&&(e=f[b].apply(f,Array.prototype.slice.call(arguments,
+1)));if(!1===e)return!1;f.helpers&&d.each(f.helpers,function(c,e){if(e&&d.isPlainObject(a.helpers[c])&&d.isFunction(a.helpers[c][b]))a.helpers[c][b](e,f)});d.event.trigger(b+".fb")}},isImage:function(a){return o(a)&&a.match(/\.(jpe?g|gif|png|bmp)((\?|#).*)?$/i)},isSWF:function(a){return o(a)&&a.match(/\.(swf)((\?|#).*)?$/i)},_start:function(b){var c={},e=a.group[b]||null,f,g,i;if(e&&(e.nodeType||e instanceof d))f=!0,d.metadata&&(c=d(e).metadata());c=d.extend(!0,{},a.opts,{index:b,element:e},d.isPlainObject(e)?
+e:c);d.each(["href","title","content","type"],function(b,g){c[g]=a.opts[g]||f&&d(e).attr(g)||c[g]||null});"number"===typeof c.margin&&(c.margin=[c.margin,c.margin,c.margin,c.margin]);c.modal&&d.extend(!0,c,{closeBtn:!1,closeClick:!1,nextClick:!1,arrows:!1,mouseWheel:!1,keys:null,helpers:{overlay:{css:{cursor:"auto"},closeClick:!1}}});a.coming=c;if(!1===a.trigger("beforeLoad"))a.coming=null;else{g=c.type;b=c.href||e;g||(f&&(g=d(e).data("fancybox-type"),g||(g=(g=e.className.match(/fancybox\.(\w+)/))?
+g[1]:null)),!g&&o(b)&&(a.isImage(b)?g="image":a.isSWF(b)?g="swf":b.match(/^#/)&&(g="inline")),g||(g=f?"inline":"html"),c.type=g);if("inline"===g||"html"===g){if(c.content||(c.content="inline"===g?d(o(b)?b.replace(/.*(?=#[^\s]+$)/,""):b):e),!c.content||!c.content.length)g=null}else b||(g=null);"ajax"===g&&o(b)&&(i=b.split(/\s+/,2),b=i.shift(),c.selector=i.shift());c.href=b;c.group=a.group;c.isDom=f;switch(g){case "image":a._loadImage();break;case "ajax":a._loadAjax();break;case "inline":case "iframe":case "swf":case "html":a._afterLoad();
+break;default:a._error("type")}}},_error:function(b){a.hideLoading();d.extend(a.coming,{type:"html",autoSize:!0,minWidth:0,minHeight:0,padding:15,hasError:b,content:a.coming.tpl.error});a._afterLoad()},_loadImage:function(){var b=a.imgPreload=new Image;b.onload=function(){this.onload=this.onerror=null;a.coming.width=this.width;a.coming.height=this.height;a._afterLoad()};b.onerror=function(){this.onload=this.onerror=null;a._error("image")};b.src=a.coming.href;(b.complete===t||!b.complete)&&a.showLoading()},
+_loadAjax:function(){a.showLoading();a.ajaxLoad=d.ajax(d.extend({},a.coming.ajax,{url:a.coming.href,error:function(b,c){a.coming&&"abort"!==c?a._error("ajax",b):a.hideLoading()},success:function(b,c){"success"===c&&(a.coming.content=b,a._afterLoad())}}))},_preloadImages:function(){var b=a.group,c=a.current,e=b.length,f,g,i,h=Math.min(c.preload,e-1);if(c.preload&&!(2>b.length))for(i=1;i<=h;i+=1)if(f=b[(c.index+i)%e],g=f.href||d(f).attr("href")||f,"image"===f.type||a.isImage(g))(new Image).src=g},_afterLoad:function(){a.hideLoading();
+!a.coming||!1===a.trigger("afterLoad",a.current)?a.coming=!1:(a.isOpened?(d(".fancybox-item, .fancybox-nav").remove(),a.wrap.stop(!0).removeClass("fancybox-opened"),a.inner.css("overflow","hidden"),a.transitions[a.current.prevMethod]()):(d(".fancybox-wrap").stop().trigger("onReset").remove(),a.trigger("afterClose")),a.unbindEvents(),a.isOpen=!1,a.current=a.coming,a.wrap=d(a.current.tpl.wrap).addClass("fancybox-"+(k?"mobile":"desktop")+" fancybox-type-"+a.current.type+" fancybox-tmp "+a.current.wrapCSS).appendTo("body"),
+a.skin=d(".fancybox-skin",a.wrap).css("padding",n(a.current.padding)),a.outer=d(".fancybox-outer",a.wrap),a.inner=d(".fancybox-inner",a.wrap),a._setContent())},_setContent:function(){var b=a.current,c=b.content,e=b.type,f=b.minWidth,g=b.minHeight,i=b.maxWidth,h=b.maxHeight;switch(e){case "inline":case "ajax":case "html":b.selector?c=d("<div>").html(c).find(b.selector):c instanceof d&&(c.parent().hasClass("fancybox-inner")&&c.parents(".fancybox-wrap").unbind("onReset"),c=c.show().detach(),d(a.wrap).bind("onReset",
+function(){c.appendTo("body").hide()}));b.autoSize&&(f=d('<div class="fancybox-wrap '+a.current.wrapCSS+' fancybox-tmp"></div>').appendTo("body").css({minWidth:n(f,"w"),minHeight:n(g,"h"),maxWidth:n(i,"w"),maxHeight:n(h,"h")}).append(c),b.width=f.width(),b.height=f.height(),f.width(a.current.width),f.height()>b.height&&(f.width(b.width+1),b.width=f.width(),b.height=f.height()),c=f.contents().detach(),f.remove());break;case "image":c=b.tpl.image.replace("{href}",b.href);b.aspectRatio=!0;break;case "swf":c=
+b.tpl.swf.replace(/\{width\}/g,b.width).replace(/\{height\}/g,b.height).replace(/\{href\}/g,b.href);break;case "iframe":c=d(b.tpl.iframe.replace("{rnd}",(new Date).getTime())).attr("scrolling",b.scrolling).attr("src",b.href),b.scrolling=k?"scroll":"auto"}if("image"===e||"swf"===e)b.autoSize=!1,b.scrolling="visible";"iframe"===e&&b.autoSize?(a.showLoading(),a._setDimension(),a.inner.css("overflow",b.scrolling),c.bind({onCancel:function(){d(this).unbind();a._afterZoomOut()},load:function(){a.hideLoading();
+try{this.contentWindow.document.location&&(a.current.height=d(this).contents().find("body").height())}catch(b){a.current.autoSize=!1}a[a.isOpen?"_afterZoomIn":"_beforeShow"]()}}).appendTo(a.inner)):(a.inner.append(c),a._beforeShow())},_beforeShow:function(){a.coming=null;a.trigger("beforeShow");a._setDimension();a.wrap.hide().removeClass("fancybox-tmp");a.bindEvents();a._preloadImages();a.transitions[a.isOpened?a.current.nextMethod:a.current.openMethod]()},_setDimension:function(){var b=a.wrap,c=
+a.inner,e=a.current,f=a.getViewport(),g=e.margin,i=2*e.padding,h=e.width,j=e.height,r=e.maxWidth+i,k=e.maxHeight+i,l=e.minWidth+i,m=e.minHeight+i,p;f.w-=g[1]+g[3];f.h-=g[0]+g[2];o(h)&&0<h.indexOf("%")&&(h=(f.w-i)*parseFloat(h)/100);o(j)&&0<j.indexOf("%")&&(j=(f.h-i)*parseFloat(j)/100);g=h/j;h+=i;j+=i;e.fitToView&&(r=Math.min(f.w,r),k=Math.min(f.h,k));if(e.aspectRatio){if(h>r&&(h=r,j=(h-i)/g+i),j>k&&(j=k,h=(j-i)*g+i),h<l&&(h=l,j=(h-i)/g+i),j<m)j=m,h=(j-i)*g+i}else h=Math.max(l,Math.min(h,r)),j=Math.max(m,
+Math.min(j,k));h=Math.round(h);j=Math.round(j);d(b.add(c)).width("auto").height("auto");c.width(h-i).height(j-i);b.width(h);p=b.height();if(h>r||p>k)for(;(h>r||p>k)&&h>l&&p>m;)j-=10,e.aspectRatio?(h=Math.round((j-i)*g+i),h<l&&(h=l,j=(h-i)/g+i)):h-=10,c.width(h-i).height(j-i),b.width(h),p=b.height();e.dim={width:n(h),height:n(p)};e.canGrow=e.autoSize&&j>m&&j<k;e.canShrink=!1;e.canExpand=!1;if(h-i<e.width||j-i<e.height)e.canExpand=!0;else if((h>f.w||p>f.h)&&h>l&&j>m)e.canShrink=!0;a.innerSpace=p-i-
+c.height()},_getPosition:function(b){var c=a.current,e=a.getViewport(),f=c.margin,d=a.wrap.width()+f[1]+f[3],i=a.wrap.height()+f[0]+f[2],h={position:"absolute",top:f[0]+e.y,left:f[3]+e.x};c.autoCenter&&c.fixed&&!b&&i<=e.h&&d<=e.w&&(h={position:"fixed",top:f[0],left:f[3]});h.top=n(Math.max(h.top,h.top+(e.h-i)*c.topRatio));h.left=n(Math.max(h.left,h.left+0.5*(e.w-d)));return h},_afterZoomIn:function(){var b=a.current,c=b?b.scrolling:"no";if(b&&(a.isOpen=a.isOpened=!0,a.wrap.addClass("fancybox-opened"),
+a.inner.css("overflow","yes"===c?"scroll":"no"===c?"hidden":c),a.trigger("afterShow"),a.update(),(b.closeClick||b.nextClick)&&a.inner.css("cursor","pointer").bind("click.fb",function(c){if(!d(c.target).is("a")&&!d(c.target).parent().is("a"))a[b.closeClick?"close":"next"]()}),b.closeBtn&&d(b.tpl.closeBtn).appendTo(a.skin).bind("click.fb",a.close),b.arrows&&1<a.group.length&&((b.loop||0<b.index)&&d(b.tpl.prev).appendTo(a.outer).bind("click.fb",a.prev),(b.loop||b.index<a.group.length-1)&&d(b.tpl.next).appendTo(a.outer).bind("click.fb",
+a.next)),a.opts.autoPlay&&!a.player.isActive))a.opts.autoPlay=!1,a.play()},_afterZoomOut:function(){var b=a.current;a.wrap.trigger("onReset").remove();d.extend(a,{group:{},opts:{},current:null,isActive:!1,isOpened:!1,isOpen:!1,wrap:null,skin:null,outer:null,inner:null});a.trigger("afterClose",b)}});a.transitions={getOrigPosition:function(){var b=a.current,c=b.element,e=b.padding,f=d(b.orig),g={},i=50,h=50;!f.length&&b.isDom&&d(c).is(":visible")&&(f=d(c).find("img:first"),f.length||(f=d(c)));f.length?
+(g=f.offset(),f.is("img")&&(i=f.outerWidth(),h=f.outerHeight())):(b=a.getViewport(),g.top=b.y+0.5*(b.h-h),g.left=b.x+0.5*(b.w-i));return g={top:n(g.top-e),left:n(g.left-e),width:n(i+2*e),height:n(h+2*e)}},step:function(b,c){var e=c.prop,d,g;if("width"===e||"height"===e)d=Math.ceil(b-2*a.current.padding),"height"===e&&(g=(b-c.start)/(c.end-c.start),c.start>c.end&&(g=1-g),d-=a.innerSpace*g),a.inner[e](d)},zoomIn:function(){var b=a.wrap,c=a.current,e=c.openEffect,f="elastic"===e,g=d.extend({},c.dim,
+a._getPosition(f)),i=d.extend({opacity:1},g);delete i.position;f?(g=this.getOrigPosition(),c.openOpacity&&(g.opacity=0),a.outer.add(a.inner).width("auto").height("auto")):"fade"===e&&(g.opacity=0);b.css(g).show().animate(i,{duration:"none"===e?0:c.openSpeed,easing:c.openEasing,step:f?this.step:null,complete:a._afterZoomIn})},zoomOut:function(){var b=a.wrap,c=a.current,d=c.openEffect,f="elastic"===d,g={opacity:0};f&&("fixed"===b.css("position")&&b.css(a._getPosition(!0)),g=this.getOrigPosition(),c.closeOpacity&&
+(g.opacity=0));b.animate(g,{duration:"none"===d?0:c.closeSpeed,easing:c.closeEasing,step:f?this.step:null,complete:a._afterZoomOut})},changeIn:function(){var b=a.wrap,c=a.current,d=c.nextEffect,f="elastic"===d,g=a._getPosition(f),i={opacity:1};g.opacity=0;f&&(g.top=n(parseInt(g.top,10)-200),i.top="+=200px");b.css(g).show().animate(i,{duration:"none"===d?0:c.nextSpeed,easing:c.nextEasing,complete:a._afterZoomIn})},changeOut:function(){var b=a.wrap,c=a.current,e=c.prevEffect,f={opacity:0};b.removeClass("fancybox-opened");
+"elastic"===e&&(f.top="+=200px");b.animate(f,{duration:"none"===e?0:c.prevSpeed,easing:c.prevEasing,complete:function(){d(this).trigger("onReset").remove()}})}};a.helpers.overlay={overlay:null,update:function(){var a,c;this.overlay.width("100%").height("100%");d.browser.msie||k?(a=Math.max(l.documentElement.scrollWidth,l.body.scrollWidth),c=Math.max(l.documentElement.offsetWidth,l.body.offsetWidth),a=a<c?m.width():a):a=q.width();this.overlay.width(a).height(q.height())},beforeShow:function(b){this.overlay||
+(b=d.extend(!0,{},a.defaults.helpers.overlay,b),this.overlay=d('<div id="fancybox-overlay"></div>').css(b.css).appendTo("body"),b.closeClick&&this.overlay.bind("click.fb",a.close),a.current.fixed&&!k?this.overlay.addClass("overlay-fixed"):(this.update(),this.onUpdate=function(){this.update()}),this.overlay.fadeTo(b.speedIn,b.opacity))},afterClose:function(a){this.overlay&&this.overlay.fadeOut(a.speedOut||0,function(){d(this).remove()});this.overlay=null}};a.helpers.title={beforeShow:function(b){var c;
+if(c=a.current.title)c=d('<div class="fancybox-title fancybox-title-'+b.type+'-wrap">'+c+"</div>").appendTo("body"),"float"===b.type&&(c.width(c.width()),c.wrapInner('<span class="child"></span>'),a.current.margin[2]+=Math.abs(parseInt(c.css("margin-bottom"),10))),c.appendTo("over"===b.type?a.inner:"outside"===b.type?a.wrap:a.skin)}};d.fn.fancybox=function(b){var c=d(this),e=this.selector||"",f,g=function(g){var h=this,j=f,k;!g.ctrlKey&&!g.altKey&&!g.shiftKey&&!g.metaKey&&!d(h).is(".fancybox-wrap")&&
+(g.preventDefault(),g=b.groupAttr||"data-fancybox-group",k=d(h).attr(g),k||(g="rel",k=h[g]),k&&""!==k&&"nofollow"!==k&&(h=e.length?d(e):c,h=h.filter("["+g+'="'+k+'"]'),j=h.index(this)),b.index=j,a.open(h,b))},b=b||{};f=b.index||0;e?q.undelegate(e,"click.fb-start").delegate(e,"click.fb-start",g):c.unbind("click.fb-start").bind("click.fb-start",g);return this};d(l).ready(function(){a.defaults.fixed=d.support.fixedPosition||!(d.browser.msie&&6>=d.browser.version)&&!k})})(window,document,jQuery);
\ No newline at end of file
bryfry.github.com/javascripts/jquery.min.js
@@ -0,0 +1,2 @@
+/*! jQuery v1.8.2 jquery.com | jquery.org/license */
+(function(a,b){function G(a){var b=F[a]={};return p.each(a.split(s),function(a,c){b[c]=!0}),b}function J(a,c,d){if(d===b&&a.nodeType===1){var e="data-"+c.replace(I,"-$1").toLowerCase();d=a.getAttribute(e);if(typeof d=="string"){try{d=d==="true"?!0:d==="false"?!1:d==="null"?null:+d+""===d?+d:H.test(d)?p.parseJSON(d):d}catch(f){}p.data(a,c,d)}else d=b}return d}function K(a){var b;for(b in a){if(b==="data"&&p.isEmptyObject(a[b]))continue;if(b!=="toJSON")return!1}return!0}function ba(){return!1}function bb(){return!0}function bh(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function bi(a,b){do a=a[b];while(a&&a.nodeType!==1);return a}function bj(a,b,c){b=b||0;if(p.isFunction(b))return p.grep(a,function(a,d){var e=!!b.call(a,d,a);return e===c});if(b.nodeType)return p.grep(a,function(a,d){return a===b===c});if(typeof b=="string"){var d=p.grep(a,function(a){return a.nodeType===1});if(be.test(b))return p.filter(b,d,!c);b=p.filter(b,d)}return p.grep(a,function(a,d){return p.inArray(a,b)>=0===c})}function bk(a){var b=bl.split("|"),c=a.createDocumentFragment();if(c.createElement)while(b.length)c.createElement(b.pop());return c}function bC(a,b){return a.getElementsByTagName(b)[0]||a.appendChild(a.ownerDocument.createElement(b))}function bD(a,b){if(b.nodeType!==1||!p.hasData(a))return;var c,d,e,f=p._data(a),g=p._data(b,f),h=f.events;if(h){delete g.handle,g.events={};for(c in h)for(d=0,e=h[c].length;d<e;d++)p.event.add(b,c,h[c][d])}g.data&&(g.data=p.extend({},g.data))}function bE(a,b){var c;if(b.nodeType!==1)return;b.clearAttributes&&b.clearAttributes(),b.mergeAttributes&&b.mergeAttributes(a),c=b.nodeName.toLowerCase(),c==="object"?(b.parentNode&&(b.outerHTML=a.outerHTML),p.support.html5Clone&&a.innerHTML&&!p.trim(b.innerHTML)&&(b.innerHTML=a.innerHTML)):c==="input"&&bv.test(a.type)?(b.defaultChecked=b.checked=a.checked,b.value!==a.value&&(b.value=a.value)):c==="option"?b.selected=a.defaultSelected:c==="input"||c==="textarea"?b.defaultValue=a.defaultValue:c==="script"&&b.text!==a.text&&(b.text=a.text),b.removeAttribute(p.expando)}function bF(a){return typeof a.getElementsByTagName!="undefined"?a.getElementsByTagName("*"):typeof a.querySelectorAll!="undefined"?a.querySelectorAll("*"):[]}function bG(a){bv.test(a.type)&&(a.defaultChecked=a.checked)}function bY(a,b){if(b in a)return b;var c=b.charAt(0).toUpperCase()+b.slice(1),d=b,e=bW.length;while(e--){b=bW[e]+c;if(b in a)return b}return d}function bZ(a,b){return a=b||a,p.css(a,"display")==="none"||!p.contains(a.ownerDocument,a)}function b$(a,b){var c,d,e=[],f=0,g=a.length;for(;f<g;f++){c=a[f];if(!c.style)continue;e[f]=p._data(c,"olddisplay"),b?(!e[f]&&c.style.display==="none"&&(c.style.display=""),c.style.display===""&&bZ(c)&&(e[f]=p._data(c,"olddisplay",cc(c.nodeName)))):(d=bH(c,"display"),!e[f]&&d!=="none"&&p._data(c,"olddisplay",d))}for(f=0;f<g;f++){c=a[f];if(!c.style)continue;if(!b||c.style.display==="none"||c.style.display==="")c.style.display=b?e[f]||"":"none"}return a}function b_(a,b,c){var d=bP.exec(b);return d?Math.max(0,d[1]-(c||0))+(d[2]||"px"):b}function ca(a,b,c,d){var e=c===(d?"border":"content")?4:b==="width"?1:0,f=0;for(;e<4;e+=2)c==="margin"&&(f+=p.css(a,c+bV[e],!0)),d?(c==="content"&&(f-=parseFloat(bH(a,"padding"+bV[e]))||0),c!=="margin"&&(f-=parseFloat(bH(a,"border"+bV[e]+"Width"))||0)):(f+=parseFloat(bH(a,"padding"+bV[e]))||0,c!=="padding"&&(f+=parseFloat(bH(a,"border"+bV[e]+"Width"))||0));return f}function cb(a,b,c){var d=b==="width"?a.offsetWidth:a.offsetHeight,e=!0,f=p.support.boxSizing&&p.css(a,"boxSizing")==="border-box";if(d<=0||d==null){d=bH(a,b);if(d<0||d==null)d=a.style[b];if(bQ.test(d))return d;e=f&&(p.support.boxSizingReliable||d===a.style[b]),d=parseFloat(d)||0}return d+ca(a,b,c||(f?"border":"content"),e)+"px"}function cc(a){if(bS[a])return bS[a];var b=p("<"+a+">").appendTo(e.body),c=b.css("display");b.remove();if(c==="none"||c===""){bI=e.body.appendChild(bI||p.extend(e.createElement("iframe"),{frameBorder:0,width:0,height:0}));if(!bJ||!bI.createElement)bJ=(bI.contentWindow||bI.contentDocument).document,bJ.write("<!doctype html><html><body>"),bJ.close();b=bJ.body.appendChild(bJ.createElement(a)),c=bH(b,"display"),e.body.removeChild(bI)}return bS[a]=c,c}function ci(a,b,c,d){var e;if(p.isArray(b))p.each(b,function(b,e){c||ce.test(a)?d(a,e):ci(a+"["+(typeof e=="object"?b:"")+"]",e,c,d)});else if(!c&&p.type(b)==="object")for(e in b)ci(a+"["+e+"]",b[e],c,d);else d(a,b)}function cz(a){return function(b,c){typeof b!="string"&&(c=b,b="*");var d,e,f,g=b.toLowerCase().split(s),h=0,i=g.length;if(p.isFunction(c))for(;h<i;h++)d=g[h],f=/^\+/.test(d),f&&(d=d.substr(1)||"*"),e=a[d]=a[d]||[],e[f?"unshift":"push"](c)}}function cA(a,c,d,e,f,g){f=f||c.dataTypes[0],g=g||{},g[f]=!0;var h,i=a[f],j=0,k=i?i.length:0,l=a===cv;for(;j<k&&(l||!h);j++)h=i[j](c,d,e),typeof h=="string"&&(!l||g[h]?h=b:(c.dataTypes.unshift(h),h=cA(a,c,d,e,h,g)));return(l||!h)&&!g["*"]&&(h=cA(a,c,d,e,"*",g)),h}function cB(a,c){var d,e,f=p.ajaxSettings.flatOptions||{};for(d in c)c[d]!==b&&((f[d]?a:e||(e={}))[d]=c[d]);e&&p.extend(!0,a,e)}function cC(a,c,d){var e,f,g,h,i=a.contents,j=a.dataTypes,k=a.responseFields;for(f in k)f in d&&(c[k[f]]=d[f]);while(j[0]==="*")j.shift(),e===b&&(e=a.mimeType||c.getResponseHeader("content-type"));if(e)for(f in i)if(i[f]&&i[f].test(e)){j.unshift(f);break}if(j[0]in d)g=j[0];else{for(f in d){if(!j[0]||a.converters[f+" "+j[0]]){g=f;break}h||(h=f)}g=g||h}if(g)return g!==j[0]&&j.unshift(g),d[g]}function cD(a,b){var c,d,e,f,g=a.dataTypes.slice(),h=g[0],i={},j=0;a.dataFilter&&(b=a.dataFilter(b,a.dataType));if(g[1])for(c in a.converters)i[c.toLowerCase()]=a.converters[c];for(;e=g[++j];)if(e!=="*"){if(h!=="*"&&h!==e){c=i[h+" "+e]||i["* "+e];if(!c)for(d in i){f=d.split(" ");if(f[1]===e){c=i[h+" "+f[0]]||i["* "+f[0]];if(c){c===!0?c=i[d]:i[d]!==!0&&(e=f[0],g.splice(j--,0,e));break}}}if(c!==!0)if(c&&a["throws"])b=c(b);else try{b=c(b)}catch(k){return{state:"parsererror",error:c?k:"No conversion from "+h+" to "+e}}}h=e}return{state:"success",data:b}}function cL(){try{return new a.XMLHttpRequest}catch(b){}}function cM(){try{return new a.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}}function cU(){return setTimeout(function(){cN=b},0),cN=p.now()}function cV(a,b){p.each(b,function(b,c){var d=(cT[b]||[]).concat(cT["*"]),e=0,f=d.length;for(;e<f;e++)if(d[e].call(a,b,c))return})}function cW(a,b,c){var d,e=0,f=0,g=cS.length,h=p.Deferred().always(function(){delete i.elem}),i=function(){var b=cN||cU(),c=Math.max(0,j.startTime+j.duration-b),d=1-(c/j.duration||0),e=0,f=j.tweens.length;for(;e<f;e++)j.tweens[e].run(d);return h.notifyWith(a,[j,d,c]),d<1&&f?c:(h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:p.extend({},b),opts:p.extend(!0,{specialEasing:{}},c),originalProperties:b,originalOptions:c,startTime:cN||cU(),duration:c.duration,tweens:[],createTween:function(b,c,d){var e=p.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(e),e},stop:function(b){var c=0,d=b?j.tweens.length:0;for(;c<d;c++)j.tweens[c].run(1);return b?h.resolveWith(a,[j,b]):h.rejectWith(a,[j,b]),this}}),k=j.props;cX(k,j.opts.specialEasing);for(;e<g;e++){d=cS[e].call(j,a,k,j.opts);if(d)return d}return cV(j,k),p.isFunction(j.opts.start)&&j.opts.start.call(a,j),p.fx.timer(p.extend(i,{anim:j,queue:j.opts.queue,elem:a})),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always)}function cX(a,b){var c,d,e,f,g;for(c in a){d=p.camelCase(c),e=b[d],f=a[c],p.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=p.cssHooks[d];if(g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}}function cY(a,b,c){var d,e,f,g,h,i,j,k,l=this,m=a.style,n={},o=[],q=a.nodeType&&bZ(a);c.queue||(j=p._queueHooks(a,"fx"),j.unqueued==null&&(j.unqueued=0,k=j.empty.fire,j.empty.fire=function(){j.unqueued||k()}),j.unqueued++,l.always(function(){l.always(function(){j.unqueued--,p.queue(a,"fx").length||j.empty.fire()})})),a.nodeType===1&&("height"in b||"width"in b)&&(c.overflow=[m.overflow,m.overflowX,m.overflowY],p.css(a,"display")==="inline"&&p.css(a,"float")==="none"&&(!p.support.inlineBlockNeedsLayout||cc(a.nodeName)==="inline"?m.display="inline-block":m.zoom=1)),c.overflow&&(m.overflow="hidden",p.support.shrinkWrapBlocks||l.done(function(){m.overflow=c.overflow[0],m.overflowX=c.overflow[1],m.overflowY=c.overflow[2]}));for(d in b){f=b[d];if(cP.exec(f)){delete b[d];if(f===(q?"hide":"show"))continue;o.push(d)}}g=o.length;if(g){h=p._data(a,"fxshow")||p._data(a,"fxshow",{}),q?p(a).show():l.done(function(){p(a).hide()}),l.done(function(){var b;p.removeData(a,"fxshow",!0);for(b in n)p.style(a,b,n[b])});for(d=0;d<g;d++)e=o[d],i=l.createTween(e,q?h[e]:0),n[e]=h[e]||p.style(a,e),e in h||(h[e]=i.start,q&&(i.end=i.start,i.start=e==="width"||e==="height"?1:0))}}function cZ(a,b,c,d,e){return new cZ.prototype.init(a,b,c,d,e)}function c$(a,b){var c,d={height:a},e=0;b=b?1:0;for(;e<4;e+=2-b)c=bV[e],d["margin"+c]=d["padding"+c]=a;return b&&(d.opacity=d.width=a),d}function da(a){return p.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:!1}var c,d,e=a.document,f=a.location,g=a.navigator,h=a.jQuery,i=a.$,j=Array.prototype.push,k=Array.prototype.slice,l=Array.prototype.indexOf,m=Object.prototype.toString,n=Object.prototype.hasOwnProperty,o=String.prototype.trim,p=function(a,b){return new p.fn.init(a,b,c)},q=/[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source,r=/\S/,s=/\s+/,t=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,u=/^(?:[^#<]*(<[\w\W]+>)[^>]*$|#([\w\-]*)$)/,v=/^<(\w+)\s*\/?>(?:<\/\1>|)$/,w=/^[\],:{}\s]*$/,x=/(?:^|:|,)(?:\s*\[)+/g,y=/\\(?:["\\\/bfnrt]|u[\da-fA-F]{4})/g,z=/"[^"\\\r\n]*"|true|false|null|-?(?:\d\d*\.|)\d+(?:[eE][\-+]?\d+|)/g,A=/^-ms-/,B=/-([\da-z])/gi,C=function(a,b){return(b+"").toUpperCase()},D=function(){e.addEventListener?(e.removeEventListener("DOMContentLoaded",D,!1),p.ready()):e.readyState==="complete"&&(e.detachEvent("onreadystatechange",D),p.ready())},E={};p.fn=p.prototype={constructor:p,init:function(a,c,d){var f,g,h,i;if(!a)return this;if(a.nodeType)return this.context=this[0]=a,this.length=1,this;if(typeof a=="string"){a.charAt(0)==="<"&&a.charAt(a.length-1)===">"&&a.length>=3?f=[null,a,null]:f=u.exec(a);if(f&&(f[1]||!c)){if(f[1])return c=c instanceof p?c[0]:c,i=c&&c.nodeType?c.ownerDocument||c:e,a=p.parseHTML(f[1],i,!0),v.test(f[1])&&p.isPlainObject(c)&&this.attr.call(a,c,!0),p.merge(this,a);g=e.getElementById(f[2]);if(g&&g.parentNode){if(g.id!==f[2])return d.find(a);this.length=1,this[0]=g}return this.context=e,this.selector=a,this}return!c||c.jquery?(c||d).find(a):this.constructor(c).find(a)}return p.isFunction(a)?d.ready(a):(a.selector!==b&&(this.selector=a.selector,this.context=a.context),p.makeArray(a,this))},selector:"",jquery:"1.8.2",length:0,size:function(){return this.length},toArray:function(){return k.call(this)},get:function(a){return a==null?this.toArray():a<0?this[this.length+a]:this[a]},pushStack:function(a,b,c){var d=p.merge(this.constructor(),a);return d.prevObject=this,d.context=this.context,b==="find"?d.selector=this.selector+(this.selector?" ":"")+c:b&&(d.selector=this.selector+"."+b+"("+c+")"),d},each:function(a,b){return p.each(this,a,b)},ready:function(a){return p.ready.promise().done(a),this},eq:function(a){return a=+a,a===-1?this.slice(a):this.slice(a,a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(k.apply(this,arguments),"slice",k.call(arguments).join(","))},map:function(a){return this.pushStack(p.map(this,function(b,c){return a.call(b,c,b)}))},end:function(){return this.prevObject||this.constructor(null)},push:j,sort:[].sort,splice:[].splice},p.fn.init.prototype=p.fn,p.extend=p.fn.extend=function(){var a,c,d,e,f,g,h=arguments[0]||{},i=1,j=arguments.length,k=!1;typeof h=="boolean"&&(k=h,h=arguments[1]||{},i=2),typeof h!="object"&&!p.isFunction(h)&&(h={}),j===i&&(h=this,--i);for(;i<j;i++)if((a=arguments[i])!=null)for(c in a){d=h[c],e=a[c];if(h===e)continue;k&&e&&(p.isPlainObject(e)||(f=p.isArray(e)))?(f?(f=!1,g=d&&p.isArray(d)?d:[]):g=d&&p.isPlainObject(d)?d:{},h[c]=p.extend(k,g,e)):e!==b&&(h[c]=e)}return h},p.extend({noConflict:function(b){return a.$===p&&(a.$=i),b&&a.jQuery===p&&(a.jQuery=h),p},isReady:!1,readyWait:1,holdReady:function(a){a?p.readyWait++:p.ready(!0)},ready:function(a){if(a===!0?--p.readyWait:p.isReady)return;if(!e.body)return setTimeout(p.ready,1);p.isReady=!0;if(a!==!0&&--p.readyWait>0)return;d.resolveWith(e,[p]),p.fn.trigger&&p(e).trigger("ready").off("ready")},isFunction:function(a){return p.type(a)==="function"},isArray:Array.isArray||function(a){return p.type(a)==="array"},isWindow:function(a){return a!=null&&a==a.window},isNumeric:function(a){return!isNaN(parseFloat(a))&&isFinite(a)},type:function(a){return a==null?String(a):E[m.call(a)]||"object"},isPlainObject:function(a){if(!a||p.type(a)!=="object"||a.nodeType||p.isWindow(a))return!1;try{if(a.constructor&&!n.call(a,"constructor")&&!n.call(a.constructor.prototype,"isPrototypeOf"))return!1}catch(c){return!1}var d;for(d in a);return d===b||n.call(a,d)},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},error:function(a){throw new Error(a)},parseHTML:function(a,b,c){var d;return!a||typeof a!="string"?null:(typeof b=="boolean"&&(c=b,b=0),b=b||e,(d=v.exec(a))?[b.createElement(d[1])]:(d=p.buildFragment([a],b,c?null:[]),p.merge([],(d.cacheable?p.clone(d.fragment):d.fragment).childNodes)))},parseJSON:function(b){if(!b||typeof b!="string")return null;b=p.trim(b);if(a.JSON&&a.JSON.parse)return a.JSON.parse(b);if(w.test(b.replace(y,"@").replace(z,"]").replace(x,"")))return(new Function("return "+b))();p.error("Invalid JSON: "+b)},parseXML:function(c){var d,e;if(!c||typeof c!="string")return null;try{a.DOMParser?(e=new DOMParser,d=e.parseFromString(c,"text/xml")):(d=new ActiveXObject("Microsoft.XMLDOM"),d.async="false",d.loadXML(c))}catch(f){d=b}return(!d||!d.documentElement||d.getElementsByTagName("parsererror").length)&&p.error("Invalid XML: "+c),d},noop:function(){},globalEval:function(b){b&&r.test(b)&&(a.execScript||function(b){a.eval.call(a,b)})(b)},camelCase:function(a){return a.replace(A,"ms-").replace(B,C)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,c,d){var e,f=0,g=a.length,h=g===b||p.isFunction(a);if(d){if(h){for(e in a)if(c.apply(a[e],d)===!1)break}else for(;f<g;)if(c.apply(a[f++],d)===!1)break}else if(h){for(e in a)if(c.call(a[e],e,a[e])===!1)break}else for(;f<g;)if(c.call(a[f],f,a[f++])===!1)break;return a},trim:o&&!o.call("๏ปฟย ")?function(a){return a==null?"":o.call(a)}:function(a){return a==null?"":(a+"").replace(t,"")},makeArray:function(a,b){var c,d=b||[];return a!=null&&(c=p.type(a),a.length==null||c==="string"||c==="function"||c==="regexp"||p.isWindow(a)?j.call(d,a):p.merge(d,a)),d},inArray:function(a,b,c){var d;if(b){if(l)return l.call(b,a,c);d=b.length,c=c?c<0?Math.max(0,d+c):c:0;for(;c<d;c++)if(c in b&&b[c]===a)return c}return-1},merge:function(a,c){var d=c.length,e=a.length,f=0;if(typeof d=="number")for(;f<d;f++)a[e++]=c[f];else while(c[f]!==b)a[e++]=c[f++];return a.length=e,a},grep:function(a,b,c){var d,e=[],f=0,g=a.length;c=!!c;for(;f<g;f++)d=!!b(a[f],f),c!==d&&e.push(a[f]);return e},map:function(a,c,d){var e,f,g=[],h=0,i=a.length,j=a instanceof p||i!==b&&typeof i=="number"&&(i>0&&a[0]&&a[i-1]||i===0||p.isArray(a));if(j)for(;h<i;h++)e=c(a[h],h,d),e!=null&&(g[g.length]=e);else for(f in a)e=c(a[f],f,d),e!=null&&(g[g.length]=e);return g.concat.apply([],g)},guid:1,proxy:function(a,c){var d,e,f;return typeof c=="string"&&(d=a[c],c=a,a=d),p.isFunction(a)?(e=k.call(arguments,2),f=function(){return a.apply(c,e.concat(k.call(arguments)))},f.guid=a.guid=a.guid||p.guid++,f):b},access:function(a,c,d,e,f,g,h){var i,j=d==null,k=0,l=a.length;if(d&&typeof d=="object"){for(k in d)p.access(a,c,k,d[k],1,g,e);f=1}else if(e!==b){i=h===b&&p.isFunction(e),j&&(i?(i=c,c=function(a,b,c){return i.call(p(a),c)}):(c.call(a,e),c=null));if(c)for(;k<l;k++)c(a[k],d,i?e.call(a[k],k,c(a[k],d)):e,h);f=1}return f?a:j?c.call(a):l?c(a[0],d):g},now:function(){return(new Date).getTime()}}),p.ready.promise=function(b){if(!d){d=p.Deferred();if(e.readyState==="complete")setTimeout(p.ready,1);else if(e.addEventListener)e.addEventListener("DOMContentLoaded",D,!1),a.addEventListener("load",p.ready,!1);else{e.attachEvent("onreadystatechange",D),a.attachEvent("onload",p.ready);var c=!1;try{c=a.frameElement==null&&e.documentElement}catch(f){}c&&c.doScroll&&function g(){if(!p.isReady){try{c.doScroll("left")}catch(a){return setTimeout(g,50)}p.ready()}}()}}return d.promise(b)},p.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(a,b){E["[object "+b+"]"]=b.toLowerCase()}),c=p(e);var F={};p.Callbacks=function(a){a=typeof a=="string"?F[a]||G(a):p.extend({},a);var c,d,e,f,g,h,i=[],j=!a.once&&[],k=function(b){c=a.memory&&b,d=!0,h=f||0,f=0,g=i.length,e=!0;for(;i&&h<g;h++)if(i[h].apply(b[0],b[1])===!1&&a.stopOnFalse){c=!1;break}e=!1,i&&(j?j.length&&k(j.shift()):c?i=[]:l.disable())},l={add:function(){if(i){var b=i.length;(function d(b){p.each(b,function(b,c){var e=p.type(c);e==="function"&&(!a.unique||!l.has(c))?i.push(c):c&&c.length&&e!=="string"&&d(c)})})(arguments),e?g=i.length:c&&(f=b,k(c))}return this},remove:function(){return i&&p.each(arguments,function(a,b){var c;while((c=p.inArray(b,i,c))>-1)i.splice(c,1),e&&(c<=g&&g--,c<=h&&h--)}),this},has:function(a){return p.inArray(a,i)>-1},empty:function(){return i=[],this},disable:function(){return i=j=c=b,this},disabled:function(){return!i},lock:function(){return j=b,c||l.disable(),this},locked:function(){return!j},fireWith:function(a,b){return b=b||[],b=[a,b.slice?b.slice():b],i&&(!d||j)&&(e?j.push(b):k(b)),this},fire:function(){return l.fireWith(this,arguments),this},fired:function(){return!!d}};return l},p.extend({Deferred:function(a){var b=[["resolve","done",p.Callbacks("once memory"),"resolved"],["reject","fail",p.Callbacks("once memory"),"rejected"],["notify","progress",p.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return p.Deferred(function(c){p.each(b,function(b,d){var f=d[0],g=a[b];e[d[1]](p.isFunction(g)?function(){var a=g.apply(this,arguments);a&&p.isFunction(a.promise)?a.promise().done(c.resolve).fail(c.reject).progress(c.notify):c[f+"With"](this===e?c:this,[a])}:c[f])}),a=null}).promise()},promise:function(a){return a!=null?p.extend(a,d):d}},e={};return d.pipe=d.then,p.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[a^1][2].disable,b[2][2].lock),e[f[0]]=g.fire,e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=k.call(arguments),d=c.length,e=d!==1||a&&p.isFunction(a.promise)?d:0,f=e===1?a:p.Deferred(),g=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?k.call(arguments):d,c===h?f.notifyWith(b,c):--e||f.resolveWith(b,c)}},h,i,j;if(d>1){h=new Array(d),i=new Array(d),j=new Array(d);for(;b<d;b++)c[b]&&p.isFunction(c[b].promise)?c[b].promise().done(g(b,j,c)).fail(f.reject).progress(g(b,i,h)):--e}return e||f.resolveWith(j,c),f.promise()}}),p.support=function(){var b,c,d,f,g,h,i,j,k,l,m,n=e.createElement("div");n.setAttribute("className","t"),n.innerHTML=" <link/><table></table><a href='/a'>a</a><input type='checkbox'/>",c=n.getElementsByTagName("*"),d=n.getElementsByTagName("a")[0],d.style.cssText="top:1px;float:left;opacity:.5";if(!c||!c.length)return{};f=e.createElement("select"),g=f.appendChild(e.createElement("option")),h=n.getElementsByTagName("input")[0],b={leadingWhitespace:n.firstChild.nodeType===3,tbody:!n.getElementsByTagName("tbody").length,htmlSerialize:!!n.getElementsByTagName("link").length,style:/top/.test(d.getAttribute("style")),hrefNormalized:d.getAttribute("href")==="/a",opacity:/^0.5/.test(d.style.opacity),cssFloat:!!d.style.cssFloat,checkOn:h.value==="on",optSelected:g.selected,getSetAttribute:n.className!=="t",enctype:!!e.createElement("form").enctype,html5Clone:e.createElement("nav").cloneNode(!0).outerHTML!=="<:nav></:nav>",boxModel:e.compatMode==="CSS1Compat",submitBubbles:!0,changeBubbles:!0,focusinBubbles:!1,deleteExpando:!0,noCloneEvent:!0,inlineBlockNeedsLayout:!1,shrinkWrapBlocks:!1,reliableMarginRight:!0,boxSizingReliable:!0,pixelPosition:!1},h.checked=!0,b.noCloneChecked=h.cloneNode(!0).checked,f.disabled=!0,b.optDisabled=!g.disabled;try{delete n.test}catch(o){b.deleteExpando=!1}!n.addEventListener&&n.attachEvent&&n.fireEvent&&(n.attachEvent("onclick",m=function(){b.noCloneEvent=!1}),n.cloneNode(!0).fireEvent("onclick"),n.detachEvent("onclick",m)),h=e.createElement("input"),h.value="t",h.setAttribute("type","radio"),b.radioValue=h.value==="t",h.setAttribute("checked","checked"),h.setAttribute("name","t"),n.appendChild(h),i=e.createDocumentFragment(),i.appendChild(n.lastChild),b.checkClone=i.cloneNode(!0).cloneNode(!0).lastChild.checked,b.appendChecked=h.checked,i.removeChild(h),i.appendChild(n);if(n.attachEvent)for(k in{submit:!0,change:!0,focusin:!0})j="on"+k,l=j in n,l||(n.setAttribute(j,"return;"),l=typeof n[j]=="function"),b[k+"Bubbles"]=l;return p(function(){var c,d,f,g,h="padding:0;margin:0;border:0;display:block;overflow:hidden;",i=e.getElementsByTagName("body")[0];if(!i)return;c=e.createElement("div"),c.style.cssText="visibility:hidden;border:0;width:0;height:0;position:static;top:0;margin-top:1px",i.insertBefore(c,i.firstChild),d=e.createElement("div"),c.appendChild(d),d.innerHTML="<table><tr><td></td><td>t</td></tr></table>",f=d.getElementsByTagName("td"),f[0].style.cssText="padding:0;margin:0;border:0;display:none",l=f[0].offsetHeight===0,f[0].style.display="",f[1].style.display="none",b.reliableHiddenOffsets=l&&f[0].offsetHeight===0,d.innerHTML="",d.style.cssText="box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;",b.boxSizing=d.offsetWidth===4,b.doesNotIncludeMarginInBodyOffset=i.offsetTop!==1,a.getComputedStyle&&(b.pixelPosition=(a.getComputedStyle(d,null)||{}).top!=="1%",b.boxSizingReliable=(a.getComputedStyle(d,null)||{width:"4px"}).width==="4px",g=e.createElement("div"),g.style.cssText=d.style.cssText=h,g.style.marginRight=g.style.width="0",d.style.width="1px",d.appendChild(g),b.reliableMarginRight=!parseFloat((a.getComputedStyle(g,null)||{}).marginRight)),typeof d.style.zoom!="undefined"&&(d.innerHTML="",d.style.cssText=h+"width:1px;padding:1px;display:inline;zoom:1",b.inlineBlockNeedsLayout=d.offsetWidth===3,d.style.display="block",d.style.overflow="visible",d.innerHTML="<div></div>",d.firstChild.style.width="5px",b.shrinkWrapBlocks=d.offsetWidth!==3,c.style.zoom=1),i.removeChild(c),c=d=f=g=null}),i.removeChild(n),c=d=f=g=h=i=n=null,b}();var H=/(?:\{[\s\S]*\}|\[[\s\S]*\])$/,I=/([A-Z])/g;p.extend({cache:{},deletedIds:[],uuid:0,expando:"jQuery"+(p.fn.jquery+Math.random()).replace(/\D/g,""),noData:{embed:!0,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:!0},hasData:function(a){return a=a.nodeType?p.cache[a[p.expando]]:a[p.expando],!!a&&!K(a)},data:function(a,c,d,e){if(!p.acceptData(a))return;var f,g,h=p.expando,i=typeof c=="string",j=a.nodeType,k=j?p.cache:a,l=j?a[h]:a[h]&&h;if((!l||!k[l]||!e&&!k[l].data)&&i&&d===b)return;l||(j?a[h]=l=p.deletedIds.pop()||p.guid++:l=h),k[l]||(k[l]={},j||(k[l].toJSON=p.noop));if(typeof c=="object"||typeof c=="function")e?k[l]=p.extend(k[l],c):k[l].data=p.extend(k[l].data,c);return f=k[l],e||(f.data||(f.data={}),f=f.data),d!==b&&(f[p.camelCase(c)]=d),i?(g=f[c],g==null&&(g=f[p.camelCase(c)])):g=f,g},removeData:function(a,b,c){if(!p.acceptData(a))return;var d,e,f,g=a.nodeType,h=g?p.cache:a,i=g?a[p.expando]:p.expando;if(!h[i])return;if(b){d=c?h[i]:h[i].data;if(d){p.isArray(b)||(b in d?b=[b]:(b=p.camelCase(b),b in d?b=[b]:b=b.split(" ")));for(e=0,f=b.length;e<f;e++)delete d[b[e]];if(!(c?K:p.isEmptyObject)(d))return}}if(!c){delete h[i].data;if(!K(h[i]))return}g?p.cleanData([a],!0):p.support.deleteExpando||h!=h.window?delete h[i]:h[i]=null},_data:function(a,b,c){return p.data(a,b,c,!0)},acceptData:function(a){var b=a.nodeName&&p.noData[a.nodeName.toLowerCase()];return!b||b!==!0&&a.getAttribute("classid")===b}}),p.fn.extend({data:function(a,c){var d,e,f,g,h,i=this[0],j=0,k=null;if(a===b){if(this.length){k=p.data(i);if(i.nodeType===1&&!p._data(i,"parsedAttrs")){f=i.attributes;for(h=f.length;j<h;j++)g=f[j].name,g.indexOf("data-")||(g=p.camelCase(g.substring(5)),J(i,g,k[g]));p._data(i,"parsedAttrs",!0)}}return k}return typeof a=="object"?this.each(function(){p.data(this,a)}):(d=a.split(".",2),d[1]=d[1]?"."+d[1]:"",e=d[1]+"!",p.access(this,function(c){if(c===b)return k=this.triggerHandler("getData"+e,[d[0]]),k===b&&i&&(k=p.data(i,a),k=J(i,a,k)),k===b&&d[1]?this.data(d[0]):k;d[1]=c,this.each(function(){var b=p(this);b.triggerHandler("setData"+e,d),p.data(this,a,c),b.triggerHandler("changeData"+e,d)})},null,c,arguments.length>1,null,!1))},removeData:function(a){return this.each(function(){p.removeData(this,a)})}}),p.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=p._data(a,b),c&&(!d||p.isArray(c)?d=p._data(a,b,p.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=p.queue(a,b),d=c.length,e=c.shift(),f=p._queueHooks(a,b),g=function(){p.dequeue(a,b)};e==="inprogress"&&(e=c.shift(),d--),e&&(b==="fx"&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return p._data(a,c)||p._data(a,c,{empty:p.Callbacks("once memory").add(function(){p.removeData(a,b+"queue",!0),p.removeData(a,c,!0)})})}}),p.fn.extend({queue:function(a,c){var d=2;return typeof a!="string"&&(c=a,a="fx",d--),arguments.length<d?p.queue(this[0],a):c===b?this:this.each(function(){var b=p.queue(this,a,c);p._queueHooks(this,a),a==="fx"&&b[0]!=="inprogress"&&p.dequeue(this,a)})},dequeue:function(a){return this.each(function(){p.dequeue(this,a)})},delay:function(a,b){return a=p.fx?p.fx.speeds[a]||a:a,b=b||"fx",this.queue(b,function(b,c){var d=setTimeout(b,a);c.stop=function(){clearTimeout(d)}})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,c){var d,e=1,f=p.Deferred(),g=this,h=this.length,i=function(){--e||f.resolveWith(g,[g])};typeof a!="string"&&(c=a,a=b),a=a||"fx";while(h--)d=p._data(g[h],a+"queueHooks"),d&&d.empty&&(e++,d.empty.add(i));return i(),f.promise(c)}});var L,M,N,O=/[\t\r\n]/g,P=/\r/g,Q=/^(?:button|input)$/i,R=/^(?:button|input|object|select|textarea)$/i,S=/^a(?:rea|)$/i,T=/^(?:autofocus|autoplay|async|checked|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped|selected)$/i,U=p.support.getSetAttribute;p.fn.extend({attr:function(a,b){return p.access(this,p.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){p.removeAttr(this,a)})},prop:function(a,b){return p.access(this,p.prop,a,b,arguments.length>1)},removeProp:function(a){return a=p.propFix[a]||a,this.each(function(){try{this[a]=b,delete this[a]}catch(c){}})},addClass:function(a){var b,c,d,e,f,g,h;if(p.isFunction(a))return this.each(function(b){p(this).addClass(a.call(this,b,this.className))});if(a&&typeof a=="string"){b=a.split(s);for(c=0,d=this.length;c<d;c++){e=this[c];if(e.nodeType===1)if(!e.className&&b.length===1)e.className=a;else{f=" "+e.className+" ";for(g=0,h=b.length;g<h;g++)f.indexOf(" "+b[g]+" ")<0&&(f+=b[g]+" ");e.className=p.trim(f)}}}return this},removeClass:function(a){var c,d,e,f,g,h,i;if(p.isFunction(a))return this.each(function(b){p(this).removeClass(a.call(this,b,this.className))});if(a&&typeof a=="string"||a===b){c=(a||"").split(s);for(h=0,i=this.length;h<i;h++){e=this[h];if(e.nodeType===1&&e.className){d=(" "+e.className+" ").replace(O," ");for(f=0,g=c.length;f<g;f++)while(d.indexOf(" "+c[f]+" ")>=0)d=d.replace(" "+c[f]+" "," ");e.className=a?p.trim(d):""}}}return this},toggleClass:function(a,b){var c=typeof a,d=typeof b=="boolean";return p.isFunction(a)?this.each(function(c){p(this).toggleClass(a.call(this,c,this.className,b),b)}):this.each(function(){if(c==="string"){var e,f=0,g=p(this),h=b,i=a.split(s);while(e=i[f++])h=d?h:!g.hasClass(e),g[h?"addClass":"removeClass"](e)}else if(c==="undefined"||c==="boolean")this.className&&p._data(this,"__className__",this.className),this.className=this.className||a===!1?"":p._data(this,"__className__")||""})},hasClass:function(a){var b=" "+a+" ",c=0,d=this.length;for(;c<d;c++)if(this[c].nodeType===1&&(" "+this[c].className+" ").replace(O," ").indexOf(b)>=0)return!0;return!1},val:function(a){var c,d,e,f=this[0];if(!arguments.length){if(f)return c=p.valHooks[f.type]||p.valHooks[f.nodeName.toLowerCase()],c&&"get"in c&&(d=c.get(f,"value"))!==b?d:(d=f.value,typeof d=="string"?d.replace(P,""):d==null?"":d);return}return e=p.isFunction(a),this.each(function(d){var f,g=p(this);if(this.nodeType!==1)return;e?f=a.call(this,d,g.val()):f=a,f==null?f="":typeof f=="number"?f+="":p.isArray(f)&&(f=p.map(f,function(a){return a==null?"":a+""})),c=p.valHooks[this.type]||p.valHooks[this.nodeName.toLowerCase()];if(!c||!("set"in c)||c.set(this,f,"value")===b)this.value=f})}}),p.extend({valHooks:{option:{get:function(a){var b=a.attributes.value;return!b||b.specified?a.value:a.text}},select:{get:function(a){var b,c,d,e,f=a.selectedIndex,g=[],h=a.options,i=a.type==="select-one";if(f<0)return null;c=i?f:0,d=i?f+1:h.length;for(;c<d;c++){e=h[c];if(e.selected&&(p.support.optDisabled?!e.disabled:e.getAttribute("disabled")===null)&&(!e.parentNode.disabled||!p.nodeName(e.parentNode,"optgroup"))){b=p(e).val();if(i)return b;g.push(b)}}return i&&!g.length&&h.length?p(h[f]).val():g},set:function(a,b){var c=p.makeArray(b);return p(a).find("option").each(function(){this.selected=p.inArray(p(this).val(),c)>=0}),c.length||(a.selectedIndex=-1),c}}},attrFn:{},attr:function(a,c,d,e){var f,g,h,i=a.nodeType;if(!a||i===3||i===8||i===2)return;if(e&&p.isFunction(p.fn[c]))return p(a)[c](d);if(typeof a.getAttribute=="undefined")return p.prop(a,c,d);h=i!==1||!p.isXMLDoc(a),h&&(c=c.toLowerCase(),g=p.attrHooks[c]||(T.test(c)?M:L));if(d!==b){if(d===null){p.removeAttr(a,c);return}return g&&"set"in g&&h&&(f=g.set(a,d,c))!==b?f:(a.setAttribute(c,d+""),d)}return g&&"get"in g&&h&&(f=g.get(a,c))!==null?f:(f=a.getAttribute(c),f===null?b:f)},removeAttr:function(a,b){var c,d,e,f,g=0;if(b&&a.nodeType===1){d=b.split(s);for(;g<d.length;g++)e=d[g],e&&(c=p.propFix[e]||e,f=T.test(e),f||p.attr(a,e,""),a.removeAttribute(U?e:c),f&&c in a&&(a[c]=!1))}},attrHooks:{type:{set:function(a,b){if(Q.test(a.nodeName)&&a.parentNode)p.error("type property can't be changed");else if(!p.support.radioValue&&b==="radio"&&p.nodeName(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}},value:{get:function(a,b){return L&&p.nodeName(a,"button")?L.get(a,b):b in a?a.value:null},set:function(a,b,c){if(L&&p.nodeName(a,"button"))return L.set(a,b,c);a.value=b}}},propFix:{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder",contenteditable:"contentEditable"},prop:function(a,c,d){var e,f,g,h=a.nodeType;if(!a||h===3||h===8||h===2)return;return g=h!==1||!p.isXMLDoc(a),g&&(c=p.propFix[c]||c,f=p.propHooks[c]),d!==b?f&&"set"in f&&(e=f.set(a,d,c))!==b?e:a[c]=d:f&&"get"in f&&(e=f.get(a,c))!==null?e:a[c]},propHooks:{tabIndex:{get:function(a){var c=a.getAttributeNode("tabindex");return c&&c.specified?parseInt(c.value,10):R.test(a.nodeName)||S.test(a.nodeName)&&a.href?0:b}}}}),M={get:function(a,c){var d,e=p.prop(a,c);return e===!0||typeof e!="boolean"&&(d=a.getAttributeNode(c))&&d.nodeValue!==!1?c.toLowerCase():b},set:function(a,b,c){var d;return b===!1?p.removeAttr(a,c):(d=p.propFix[c]||c,d in a&&(a[d]=!0),a.setAttribute(c,c.toLowerCase())),c}},U||(N={name:!0,id:!0,coords:!0},L=p.valHooks.button={get:function(a,c){var d;return d=a.getAttributeNode(c),d&&(N[c]?d.value!=="":d.specified)?d.value:b},set:function(a,b,c){var d=a.getAttributeNode(c);return d||(d=e.createAttribute(c),a.setAttributeNode(d)),d.value=b+""}},p.each(["width","height"],function(a,b){p.attrHooks[b]=p.extend(p.attrHooks[b],{set:function(a,c){if(c==="")return a.setAttribute(b,"auto"),c}})}),p.attrHooks.contenteditable={get:L.get,set:function(a,b,c){b===""&&(b="false"),L.set(a,b,c)}}),p.support.hrefNormalized||p.each(["href","src","width","height"],function(a,c){p.attrHooks[c]=p.extend(p.attrHooks[c],{get:function(a){var d=a.getAttribute(c,2);return d===null?b:d}})}),p.support.style||(p.attrHooks.style={get:function(a){return a.style.cssText.toLowerCase()||b},set:function(a,b){return a.style.cssText=b+""}}),p.support.optSelected||(p.propHooks.selected=p.extend(p.propHooks.selected,{get:function(a){var b=a.parentNode;return b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex),null}})),p.support.enctype||(p.propFix.enctype="encoding"),p.support.checkOn||p.each(["radio","checkbox"],function(){p.valHooks[this]={get:function(a){return a.getAttribute("value")===null?"on":a.value}}}),p.each(["radio","checkbox"],function(){p.valHooks[this]=p.extend(p.valHooks[this],{set:function(a,b){if(p.isArray(b))return a.checked=p.inArray(p(a).val(),b)>=0}})});var V=/^(?:textarea|input|select)$/i,W=/^([^\.]*|)(?:\.(.+)|)$/,X=/(?:^|\s)hover(\.\S+|)\b/,Y=/^key/,Z=/^(?:mouse|contextmenu)|click/,$=/^(?:focusinfocus|focusoutblur)$/,_=function(a){return p.event.special.hover?a:a.replace(X,"mouseenter$1 mouseleave$1")};p.event={add:function(a,c,d,e,f){var g,h,i,j,k,l,m,n,o,q,r;if(a.nodeType===3||a.nodeType===8||!c||!d||!(g=p._data(a)))return;d.handler&&(o=d,d=o.handler,f=o.selector),d.guid||(d.guid=p.guid++),i=g.events,i||(g.events=i={}),h=g.handle,h||(g.handle=h=function(a){return typeof p!="undefined"&&(!a||p.event.triggered!==a.type)?p.event.dispatch.apply(h.elem,arguments):b},h.elem=a),c=p.trim(_(c)).split(" ");for(j=0;j<c.length;j++){k=W.exec(c[j])||[],l=k[1],m=(k[2]||"").split(".").sort(),r=p.event.special[l]||{},l=(f?r.delegateType:r.bindType)||l,r=p.event.special[l]||{},n=p.extend({type:l,origType:k[1],data:e,handler:d,guid:d.guid,selector:f,needsContext:f&&p.expr.match.needsContext.test(f),namespace:m.join(".")},o),q=i[l];if(!q){q=i[l]=[],q.delegateCount=0;if(!r.setup||r.setup.call(a,e,m,h)===!1)a.addEventListener?a.addEventListener(l,h,!1):a.attachEvent&&a.attachEvent("on"+l,h)}r.add&&(r.add.call(a,n),n.handler.guid||(n.handler.guid=d.guid)),f?q.splice(q.delegateCount++,0,n):q.push(n),p.event.global[l]=!0}a=null},global:{},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,q,r=p.hasData(a)&&p._data(a);if(!r||!(m=r.events))return;b=p.trim(_(b||"")).split(" ");for(f=0;f<b.length;f++){g=W.exec(b[f])||[],h=i=g[1],j=g[2];if(!h){for(h in m)p.event.remove(a,h+b[f],c,d,!0);continue}n=p.event.special[h]||{},h=(d?n.delegateType:n.bindType)||h,o=m[h]||[],k=o.length,j=j?new RegExp("(^|\\.)"+j.split(".").sort().join("\\.(?:.*\\.|)")+"(\\.|$)"):null;for(l=0;l<o.length;l++)q=o[l],(e||i===q.origType)&&(!c||c.guid===q.guid)&&(!j||j.test(q.namespace))&&(!d||d===q.selector||d==="**"&&q.selector)&&(o.splice(l--,1),q.selector&&o.delegateCount--,n.remove&&n.remove.call(a,q));o.length===0&&k!==o.length&&((!n.teardown||n.teardown.call(a,j,r.handle)===!1)&&p.removeEvent(a,h,r.handle),delete m[h])}p.isEmptyObject(m)&&(delete r.handle,p.removeData(a,"events",!0))},customEvent:{getData:!0,setData:!0,changeData:!0},trigger:function(c,d,f,g){if(!f||f.nodeType!==3&&f.nodeType!==8){var h,i,j,k,l,m,n,o,q,r,s=c.type||c,t=[];if($.test(s+p.event.triggered))return;s.indexOf("!")>=0&&(s=s.slice(0,-1),i=!0),s.indexOf(".")>=0&&(t=s.split("."),s=t.shift(),t.sort());if((!f||p.event.customEvent[s])&&!p.event.global[s])return;c=typeof c=="object"?c[p.expando]?c:new p.Event(s,c):new p.Event(s),c.type=s,c.isTrigger=!0,c.exclusive=i,c.namespace=t.join("."),c.namespace_re=c.namespace?new RegExp("(^|\\.)"+t.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,m=s.indexOf(":")<0?"on"+s:"";if(!f){h=p.cache;for(j in h)h[j].events&&h[j].events[s]&&p.event.trigger(c,d,h[j].handle.elem,!0);return}c.result=b,c.target||(c.target=f),d=d!=null?p.makeArray(d):[],d.unshift(c),n=p.event.special[s]||{};if(n.trigger&&n.trigger.apply(f,d)===!1)return;q=[[f,n.bindType||s]];if(!g&&!n.noBubble&&!p.isWindow(f)){r=n.delegateType||s,k=$.test(r+s)?f:f.parentNode;for(l=f;k;k=k.parentNode)q.push([k,r]),l=k;l===(f.ownerDocument||e)&&q.push([l.defaultView||l.parentWindow||a,r])}for(j=0;j<q.length&&!c.isPropagationStopped();j++)k=q[j][0],c.type=q[j][1],o=(p._data(k,"events")||{})[c.type]&&p._data(k,"handle"),o&&o.apply(k,d),o=m&&k[m],o&&p.acceptData(k)&&o.apply&&o.apply(k,d)===!1&&c.preventDefault();return c.type=s,!g&&!c.isDefaultPrevented()&&(!n._default||n._default.apply(f.ownerDocument,d)===!1)&&(s!=="click"||!p.nodeName(f,"a"))&&p.acceptData(f)&&m&&f[s]&&(s!=="focus"&&s!=="blur"||c.target.offsetWidth!==0)&&!p.isWindow(f)&&(l=f[m],l&&(f[m]=null),p.event.triggered=s,f[s](),p.event.triggered=b,l&&(f[m]=l)),c.result}return},dispatch:function(c){c=p.event.fix(c||a.event);var d,e,f,g,h,i,j,l,m,n,o=(p._data(this,"events")||{})[c.type]||[],q=o.delegateCount,r=k.call(arguments),s=!c.exclusive&&!c.namespace,t=p.event.special[c.type]||{},u=[];r[0]=c,c.delegateTarget=this;if(t.preDispatch&&t.preDispatch.call(this,c)===!1)return;if(q&&(!c.button||c.type!=="click"))for(f=c.target;f!=this;f=f.parentNode||this)if(f.disabled!==!0||c.type!=="click"){h={},j=[];for(d=0;d<q;d++)l=o[d],m=l.selector,h[m]===b&&(h[m]=l.needsContext?p(m,this).index(f)>=0:p.find(m,this,null,[f]).length),h[m]&&j.push(l);j.length&&u.push({elem:f,matches:j})}o.length>q&&u.push({elem:this,matches:o.slice(q)});for(d=0;d<u.length&&!c.isPropagationStopped();d++){i=u[d],c.currentTarget=i.elem;for(e=0;e<i.matches.length&&!c.isImmediatePropagationStopped();e++){l=i.matches[e];if(s||!c.namespace&&!l.namespace||c.namespace_re&&c.namespace_re.test(l.namespace))c.data=l.data,c.handleObj=l,g=((p.event.special[l.origType]||{}).handle||l.handler).apply(i.elem,r),g!==b&&(c.result=g,g===!1&&(c.preventDefault(),c.stopPropagation()))}}return t.postDispatch&&t.postDispatch.call(this,c),c.result},props:"attrChange attrName relatedNode srcElement altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which".split(" "),fixHooks:{},keyHooks:{props:"char charCode key keyCode".split(" "),filter:function(a,b){return a.which==null&&(a.which=b.charCode!=null?b.charCode:b.keyCode),a}},mouseHooks:{props:"button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement".split(" "),filter:function(a,c){var d,f,g,h=c.button,i=c.fromElement;return a.pageX==null&&c.clientX!=null&&(d=a.target.ownerDocument||e,f=d.documentElement,g=d.body,a.pageX=c.clientX+(f&&f.scrollLeft||g&&g.scrollLeft||0)-(f&&f.clientLeft||g&&g.clientLeft||0),a.pageY=c.clientY+(f&&f.scrollTop||g&&g.scrollTop||0)-(f&&f.clientTop||g&&g.clientTop||0)),!a.relatedTarget&&i&&(a.relatedTarget=i===a.target?c.toElement:i),!a.which&&h!==b&&(a.which=h&1?1:h&2?3:h&4?2:0),a}},fix:function(a){if(a[p.expando])return a;var b,c,d=a,f=p.event.fixHooks[a.type]||{},g=f.props?this.props.concat(f.props):this.props;a=p.Event(d);for(b=g.length;b;)c=g[--b],a[c]=d[c];return a.target||(a.target=d.srcElement||e),a.target.nodeType===3&&(a.target=a.target.parentNode),a.metaKey=!!a.metaKey,f.filter?f.filter(a,d):a},special:{load:{noBubble:!0},focus:{delegateType:"focusin"},blur:{delegateType:"focusout"},beforeunload:{setup:function(a,b,c){p.isWindow(this)&&(this.onbeforeunload=c)},teardown:function(a,b){this.onbeforeunload===b&&(this.onbeforeunload=null)}}},simulate:function(a,b,c,d){var e=p.extend(new p.Event,c,{type:a,isSimulated:!0,originalEvent:{}});d?p.event.trigger(e,null,b):p.event.dispatch.call(b,e),e.isDefaultPrevented()&&c.preventDefault()}},p.event.handle=p.event.dispatch,p.removeEvent=e.removeEventListener?function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c,!1)}:function(a,b,c){var d="on"+b;a.detachEvent&&(typeof a[d]=="undefined"&&(a[d]=null),a.detachEvent(d,c))},p.Event=function(a,b){if(this instanceof p.Event)a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||a.returnValue===!1||a.getPreventDefault&&a.getPreventDefault()?bb:ba):this.type=a,b&&p.extend(this,b),this.timeStamp=a&&a.timeStamp||p.now(),this[p.expando]=!0;else return new p.Event(a,b)},p.Event.prototype={preventDefault:function(){this.isDefaultPrevented=bb;var a=this.originalEvent;if(!a)return;a.preventDefault?a.preventDefault():a.returnValue=!1},stopPropagation:function(){this.isPropagationStopped=bb;var a=this.originalEvent;if(!a)return;a.stopPropagation&&a.stopPropagation(),a.cancelBubble=!0},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=bb,this.stopPropagation()},isDefaultPrevented:ba,isPropagationStopped:ba,isImmediatePropagationStopped:ba},p.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){p.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj,g=f.selector;if(!e||e!==d&&!p.contains(d,e))a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b;return c}}}),p.support.submitBubbles||(p.event.special.submit={setup:function(){if(p.nodeName(this,"form"))return!1;p.event.add(this,"click._submit keypress._submit",function(a){var c=a.target,d=p.nodeName(c,"input")||p.nodeName(c,"button")?c.form:b;d&&!p._data(d,"_submit_attached")&&(p.event.add(d,"submit._submit",function(a){a._submit_bubble=!0}),p._data(d,"_submit_attached",!0))})},postDispatch:function(a){a._submit_bubble&&(delete a._submit_bubble,this.parentNode&&!a.isTrigger&&p.event.simulate("submit",this.parentNode,a,!0))},teardown:function(){if(p.nodeName(this,"form"))return!1;p.event.remove(this,"._submit")}}),p.support.changeBubbles||(p.event.special.change={setup:function(){if(V.test(this.nodeName)){if(this.type==="checkbox"||this.type==="radio")p.event.add(this,"propertychange._change",function(a){a.originalEvent.propertyName==="checked"&&(this._just_changed=!0)}),p.event.add(this,"click._change",function(a){this._just_changed&&!a.isTrigger&&(this._just_changed=!1),p.event.simulate("change",this,a,!0)});return!1}p.event.add(this,"beforeactivate._change",function(a){var b=a.target;V.test(b.nodeName)&&!p._data(b,"_change_attached")&&(p.event.add(b,"change._change",function(a){this.parentNode&&!a.isSimulated&&!a.isTrigger&&p.event.simulate("change",this.parentNode,a,!0)}),p._data(b,"_change_attached",!0))})},handle:function(a){var b=a.target;if(this!==b||a.isSimulated||a.isTrigger||b.type!=="radio"&&b.type!=="checkbox")return a.handleObj.handler.apply(this,arguments)},teardown:function(){return p.event.remove(this,"._change"),!V.test(this.nodeName)}}),p.support.focusinBubbles||p.each({focus:"focusin",blur:"focusout"},function(a,b){var c=0,d=function(a){p.event.simulate(b,a.target,p.event.fix(a),!0)};p.event.special[b]={setup:function(){c++===0&&e.addEventListener(a,d,!0)},teardown:function(){--c===0&&e.removeEventListener(a,d,!0)}}}),p.fn.extend({on:function(a,c,d,e,f){var g,h;if(typeof a=="object"){typeof c!="string"&&(d=d||c,c=b);for(h in a)this.on(h,c,d,a[h],f);return this}d==null&&e==null?(e=c,d=c=b):e==null&&(typeof c=="string"?(e=d,d=b):(e=d,d=c,c=b));if(e===!1)e=ba;else if(!e)return this;return f===1&&(g=e,e=function(a){return p().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=p.guid++)),this.each(function(){p.event.add(this,a,e,d,c)})},one:function(a,b,c,d){return this.on(a,b,c,d,1)},off:function(a,c,d){var e,f;if(a&&a.preventDefault&&a.handleObj)return e=a.handleObj,p(a.delegateTarget).off(e.namespace?e.origType+"."+e.namespace:e.origType,e.selector,e.handler),this;if(typeof a=="object"){for(f in a)this.off(f,c,a[f]);return this}if(c===!1||typeof c=="function")d=c,c=b;return d===!1&&(d=ba),this.each(function(){p.event.remove(this,a,d,c)})},bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},live:function(a,b,c){return p(this.context).on(a,this.selector,b,c),this},die:function(a,b){return p(this.context).off(a,this.selector||"**",b),this},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return arguments.length===1?this.off(a,"**"):this.off(b,a||"**",c)},trigger:function(a,b){return this.each(function(){p.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0])return p.event.trigger(a,b,this[0],!0)},toggle:function(a){var b=arguments,c=a.guid||p.guid++,d=0,e=function(c){var e=(p._data(this,"lastToggle"+a.guid)||0)%d;return p._data(this,"lastToggle"+a.guid,e+1),c.preventDefault(),b[e].apply(this,arguments)||!1};e.guid=c;while(d<b.length)b[d++].guid=c;return this.click(e)},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),p.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu".split(" "),function(a,b){p.fn[b]=function(a,c){return c==null&&(c=a,a=null),arguments.length>0?this.on(b,null,a,c):this.trigger(b)},Y.test(b)&&(p.event.fixHooks[b]=p.event.keyHooks),Z.test(b)&&(p.event.fixHooks[b]=p.event.mouseHooks)}),function(a,b){function bc(a,b,c,d){c=c||[],b=b||r;var e,f,i,j,k=b.nodeType;if(!a||typeof a!="string")return c;if(k!==1&&k!==9)return[];i=g(b);if(!i&&!d)if(e=P.exec(a))if(j=e[1]){if(k===9){f=b.getElementById(j);if(!f||!f.parentNode)return c;if(f.id===j)return c.push(f),c}else if(b.ownerDocument&&(f=b.ownerDocument.getElementById(j))&&h(b,f)&&f.id===j)return c.push(f),c}else{if(e[2])return w.apply(c,x.call(b.getElementsByTagName(a),0)),c;if((j=e[3])&&_&&b.getElementsByClassName)return w.apply(c,x.call(b.getElementsByClassName(j),0)),c}return bp(a.replace(L,"$1"),b,c,d,i)}function bd(a){return function(b){var c=b.nodeName.toLowerCase();return c==="input"&&b.type===a}}function be(a){return function(b){var c=b.nodeName.toLowerCase();return(c==="input"||c==="button")&&b.type===a}}function bf(a){return z(function(b){return b=+b,z(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function bg(a,b,c){if(a===b)return c;var d=a.nextSibling;while(d){if(d===b)return-1;d=d.nextSibling}return 1}function bh(a,b){var c,d,f,g,h,i,j,k=C[o][a];if(k)return b?0:k.slice(0);h=a,i=[],j=e.preFilter;while(h){if(!c||(d=M.exec(h)))d&&(h=h.slice(d[0].length)),i.push(f=[]);c=!1;if(d=N.exec(h))f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=d[0].replace(L," ");for(g in e.filter)(d=W[g].exec(h))&&(!j[g]||(d=j[g](d,r,!0)))&&(f.push(c=new q(d.shift())),h=h.slice(c.length),c.type=g,c.matches=d);if(!c)break}return b?h.length:h?bc.error(a):C(a,i).slice(0)}function bi(a,b,d){var e=b.dir,f=d&&b.dir==="parentNode",g=u++;return b.first?function(b,c,d){while(b=b[e])if(f||b.nodeType===1)return a(b,c,d)}:function(b,d,h){if(!h){var i,j=t+" "+g+" ",k=j+c;while(b=b[e])if(f||b.nodeType===1){if((i=b[o])===k)return b.sizset;if(typeof i=="string"&&i.indexOf(j)===0){if(b.sizset)return b}else{b[o]=k;if(a(b,d,h))return b.sizset=!0,b;b.sizset=!1}}}else while(b=b[e])if(f||b.nodeType===1)if(a(b,d,h))return b}}function bj(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function bk(a,b,c,d,e){var f,g=[],h=0,i=a.length,j=b!=null;for(;h<i;h++)if(f=a[h])if(!c||c(f,d,e))g.push(f),j&&b.push(h);return g}function bl(a,b,c,d,e,f){return d&&!d[o]&&(d=bl(d)),e&&!e[o]&&(e=bl(e,f)),z(function(f,g,h,i){if(f&&e)return;var j,k,l,m=[],n=[],o=g.length,p=f||bo(b||"*",h.nodeType?[h]:h,[],f),q=a&&(f||!b)?bk(p,m,a,h,i):p,r=c?e||(f?a:o||d)?[]:g:q;c&&c(q,r,h,i);if(d){l=bk(r,n),d(l,[],h,i),j=l.length;while(j--)if(k=l[j])r[n[j]]=!(q[n[j]]=k)}if(f){j=a&&r.length;while(j--)if(k=r[j])f[m[j]]=!(g[m[j]]=k)}else r=bk(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):w.apply(g,r)})}function bm(a){var b,c,d,f=a.length,g=e.relative[a[0].type],h=g||e.relative[" "],i=g?1:0,j=bi(function(a){return a===b},h,!0),k=bi(function(a){return y.call(b,a)>-1},h,!0),m=[function(a,c,d){return!g&&(d||c!==l)||((b=c).nodeType?j(a,c,d):k(a,c,d))}];for(;i<f;i++)if(c=e.relative[a[i].type])m=[bi(bj(m),c)];else{c=e.filter[a[i].type].apply(null,a[i].matches);if(c[o]){d=++i;for(;d<f;d++)if(e.relative[a[d].type])break;return bl(i>1&&bj(m),i>1&&a.slice(0,i-1).join("").replace(L,"$1"),c,i<d&&bm(a.slice(i,d)),d<f&&bm(a=a.slice(d)),d<f&&a.join(""))}m.push(c)}return bj(m)}function bn(a,b){var d=b.length>0,f=a.length>0,g=function(h,i,j,k,m){var n,o,p,q=[],s=0,u="0",x=h&&[],y=m!=null,z=l,A=h||f&&e.find.TAG("*",m&&i.parentNode||i),B=t+=z==null?1:Math.E;y&&(l=i!==r&&i,c=g.el);for(;(n=A[u])!=null;u++){if(f&&n){for(o=0;p=a[o];o++)if(p(n,i,j)){k.push(n);break}y&&(t=B,c=++g.el)}d&&((n=!p&&n)&&s--,h&&x.push(n))}s+=u;if(d&&u!==s){for(o=0;p=b[o];o++)p(x,q,i,j);if(h){if(s>0)while(u--)!x[u]&&!q[u]&&(q[u]=v.call(k));q=bk(q)}w.apply(k,q),y&&!h&&q.length>0&&s+b.length>1&&bc.uniqueSort(k)}return y&&(t=B,l=z),x};return g.el=0,d?z(g):g}function bo(a,b,c,d){var e=0,f=b.length;for(;e<f;e++)bc(a,b[e],c,d);return c}function bp(a,b,c,d,f){var g,h,j,k,l,m=bh(a),n=m.length;if(!d&&m.length===1){h=m[0]=m[0].slice(0);if(h.length>2&&(j=h[0]).type==="ID"&&b.nodeType===9&&!f&&e.relative[h[1].type]){b=e.find.ID(j.matches[0].replace(V,""),b,f)[0];if(!b)return c;a=a.slice(h.shift().length)}for(g=W.POS.test(a)?-1:h.length-1;g>=0;g--){j=h[g];if(e.relative[k=j.type])break;if(l=e.find[k])if(d=l(j.matches[0].replace(V,""),R.test(h[0].type)&&b.parentNode||b,f)){h.splice(g,1),a=d.length&&h.join("");if(!a)return w.apply(c,x.call(d,0)),c;break}}}return i(a,m)(d,b,f,c,R.test(a)),c}function bq(){}var c,d,e,f,g,h,i,j,k,l,m=!0,n="undefined",o=("sizcache"+Math.random()).replace(".",""),q=String,r=a.document,s=r.documentElement,t=0,u=0,v=[].pop,w=[].push,x=[].slice,y=[].indexOf||function(a){var b=0,c=this.length;for(;b<c;b++)if(this[b]===a)return b;return-1},z=function(a,b){return a[o]=b==null||b,a},A=function(){var a={},b=[];return z(function(c,d){return b.push(c)>e.cacheLength&&delete a[b.shift()],a[c]=d},a)},B=A(),C=A(),D=A(),E="[\\x20\\t\\r\\n\\f]",F="(?:\\\\.|[-\\w]|[^\\x00-\\xa0])+",G=F.replace("w","w#"),H="([*^$|!~]?=)",I="\\["+E+"*("+F+")"+E+"*(?:"+H+E+"*(?:(['\"])((?:\\\\.|[^\\\\])*?)\\3|("+G+")|)|)"+E+"*\\]",J=":("+F+")(?:\\((?:(['\"])((?:\\\\.|[^\\\\])*?)\\2|([^()[\\]]*|(?:(?:"+I+")|[^:]|\\\\.)*|.*))\\)|)",K=":(even|odd|eq|gt|lt|nth|first|last)(?:\\("+E+"*((?:-\\d)?\\d*)"+E+"*\\)|)(?=[^-]|$)",L=new RegExp("^"+E+"+|((?:^|[^\\\\])(?:\\\\.)*)"+E+"+$","g"),M=new RegExp("^"+E+"*,"+E+"*"),N=new RegExp("^"+E+"*([\\x20\\t\\r\\n\\f>+~])"+E+"*"),O=new RegExp(J),P=/^(?:#([\w\-]+)|(\w+)|\.([\w\-]+))$/,Q=/^:not/,R=/[\x20\t\r\n\f]*[+~]/,S=/:not\($/,T=/h\d/i,U=/input|select|textarea|button/i,V=/\\(?!\\)/g,W={ID:new RegExp("^#("+F+")"),CLASS:new RegExp("^\\.("+F+")"),NAME:new RegExp("^\\[name=['\"]?("+F+")['\"]?\\]"),TAG:new RegExp("^("+F.replace("w","w*")+")"),ATTR:new RegExp("^"+I),PSEUDO:new RegExp("^"+J),POS:new RegExp(K,"i"),CHILD:new RegExp("^:(only|nth|first|last)-child(?:\\("+E+"*(even|odd|(([+-]|)(\\d*)n|)"+E+"*(?:([+-]|)"+E+"*(\\d+)|))"+E+"*\\)|)","i"),needsContext:new RegExp("^"+E+"*[>+~]|"+K,"i")},X=function(a){var b=r.createElement("div");try{return a(b)}catch(c){return!1}finally{b=null}},Y=X(function(a){return a.appendChild(r.createComment("")),!a.getElementsByTagName("*").length}),Z=X(function(a){return a.innerHTML="<a href='#'></a>",a.firstChild&&typeof a.firstChild.getAttribute!==n&&a.firstChild.getAttribute("href")==="#"}),$=X(function(a){a.innerHTML="<select></select>";var b=typeof a.lastChild.getAttribute("multiple");return b!=="boolean"&&b!=="string"}),_=X(function(a){return a.innerHTML="<div class='hidden e'></div><div class='hidden'></div>",!a.getElementsByClassName||!a.getElementsByClassName("e").length?!1:(a.lastChild.className="e",a.getElementsByClassName("e").length===2)}),ba=X(function(a){a.id=o+0,a.innerHTML="<a name='"+o+"'></a><div name='"+o+"'></div>",s.insertBefore(a,s.firstChild);var b=r.getElementsByName&&r.getElementsByName(o).length===2+r.getElementsByName(o+0).length;return d=!r.getElementById(o),s.removeChild(a),b});try{x.call(s.childNodes,0)[0].nodeType}catch(bb){x=function(a){var b,c=[];for(;b=this[a];a++)c.push(b);return c}}bc.matches=function(a,b){return bc(a,null,null,b)},bc.matchesSelector=function(a,b){return bc(b,null,null,[a]).length>0},f=bc.getText=function(a){var b,c="",d=0,e=a.nodeType;if(e){if(e===1||e===9||e===11){if(typeof a.textContent=="string")return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=f(a)}else if(e===3||e===4)return a.nodeValue}else for(;b=a[d];d++)c+=f(b);return c},g=bc.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?b.nodeName!=="HTML":!1},h=bc.contains=s.contains?function(a,b){var c=a.nodeType===9?a.documentElement:a,d=b&&b.parentNode;return a===d||!!(d&&d.nodeType===1&&c.contains&&c.contains(d))}:s.compareDocumentPosition?function(a,b){return b&&!!(a.compareDocumentPosition(b)&16)}:function(a,b){while(b=b.parentNode)if(b===a)return!0;return!1},bc.attr=function(a,b){var c,d=g(a);return d||(b=b.toLowerCase()),(c=e.attrHandle[b])?c(a):d||$?a.getAttribute(b):(c=a.getAttributeNode(b),c?typeof a[b]=="boolean"?a[b]?b:null:c.specified?c.value:null:null)},e=bc.selectors={cacheLength:50,createPseudo:z,match:W,attrHandle:Z?{}:{href:function(a){return a.getAttribute("href",2)},type:function(a){return a.getAttribute("type")}},find:{ID:d?function(a,b,c){if(typeof b.getElementById!==n&&!c){var d=b.getElementById(a);return d&&d.parentNode?[d]:[]}}:function(a,c,d){if(typeof c.getElementById!==n&&!d){var e=c.getElementById(a);return e?e.id===a||typeof e.getAttributeNode!==n&&e.getAttributeNode("id").value===a?[e]:b:[]}},TAG:Y?function(a,b){if(typeof b.getElementsByTagName!==n)return b.getElementsByTagName(a)}:function(a,b){var c=b.getElementsByTagName(a);if(a==="*"){var d,e=[],f=0;for(;d=c[f];f++)d.nodeType===1&&e.push(d);return e}return c},NAME:ba&&function(a,b){if(typeof b.getElementsByName!==n)return b.getElementsByName(name)},CLASS:_&&function(a,b,c){if(typeof b.getElementsByClassName!==n&&!c)return b.getElementsByClassName(a)}},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(V,""),a[3]=(a[4]||a[5]||"").replace(V,""),a[2]==="~="&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),a[1]==="nth"?(a[2]||bc.error(a[0]),a[3]=+(a[3]?a[4]+(a[5]||1):2*(a[2]==="even"||a[2]==="odd")),a[4]=+(a[6]+a[7]||a[2]==="odd")):a[2]&&bc.error(a[0]),a},PSEUDO:function(a){var b,c;if(W.CHILD.test(a[0]))return null;if(a[3])a[2]=a[3];else if(b=a[4])O.test(b)&&(c=bh(b,!0))&&(c=b.indexOf(")",b.length-c)-b.length)&&(b=b.slice(0,c),a[0]=a[0].slice(0,c)),a[2]=b;return a.slice(0,3)}},filter:{ID:d?function(a){return a=a.replace(V,""),function(b){return b.getAttribute("id")===a}}:function(a){return a=a.replace(V,""),function(b){var c=typeof b.getAttributeNode!==n&&b.getAttributeNode("id");return c&&c.value===a}},TAG:function(a){return a==="*"?function(){return!0}:(a=a.replace(V,"").toLowerCase(),function(b){return b.nodeName&&b.nodeName.toLowerCase()===a})},CLASS:function(a){var b=B[o][a];return b||(b=B(a,new RegExp("(^|"+E+")"+a+"("+E+"|$)"))),function(a){return b.test(a.className||typeof a.getAttribute!==n&&a.getAttribute("class")||"")}},ATTR:function(a,b,c){return function(d,e){var f=bc.attr(d,a);return f==null?b==="!=":b?(f+="",b==="="?f===c:b==="!="?f!==c:b==="^="?c&&f.indexOf(c)===0:b==="*="?c&&f.indexOf(c)>-1:b==="$="?c&&f.substr(f.length-c.length)===c:b==="~="?(" "+f+" ").indexOf(c)>-1:b==="|="?f===c||f.substr(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d){return a==="nth"?function(a){var b,e,f=a.parentNode;if(c===1&&d===0)return!0;if(f){e=0;for(b=f.firstChild;b;b=b.nextSibling)if(b.nodeType===1){e++;if(a===b)break}}return e-=d,e===c||e%c===0&&e/c>=0}:function(b){var c=b;switch(a){case"only":case"first":while(c=c.previousSibling)if(c.nodeType===1)return!1;if(a==="first")return!0;c=b;case"last":while(c=c.nextSibling)if(c.nodeType===1)return!1;return!0}}},PSEUDO:function(a,b){var c,d=e.pseudos[a]||e.setFilters[a.toLowerCase()]||bc.error("unsupported pseudo: "+a);return d[o]?d(b):d.length>1?(c=[a,a,"",b],e.setFilters.hasOwnProperty(a.toLowerCase())?z(function(a,c){var e,f=d(a,b),g=f.length;while(g--)e=y.call(a,f[g]),a[e]=!(c[e]=f[g])}):function(a){return d(a,0,c)}):d}},pseudos:{not:z(function(a){var b=[],c=[],d=i(a.replace(L,"$1"));return d[o]?z(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)if(f=g[h])a[h]=!(b[h]=f)}):function(a,e,f){return b[0]=a,d(b,null,f,c),!c.pop()}}),has:z(function(a){return function(b){return bc(a,b).length>0}}),contains:z(function(a){return function(b){return(b.textContent||b.innerText||f(b)).indexOf(a)>-1}}),enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&!!a.checked||b==="option"&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},parent:function(a){return!e.pseudos.empty(a)},empty:function(a){var b;a=a.firstChild;while(a){if(a.nodeName>"@"||(b=a.nodeType)===3||b===4)return!1;a=a.nextSibling}return!0},header:function(a){return T.test(a.nodeName)},text:function(a){var b,c;return a.nodeName.toLowerCase()==="input"&&(b=a.type)==="text"&&((c=a.getAttribute("type"))==null||c.toLowerCase()===b)},radio:bd("radio"),checkbox:bd("checkbox"),file:bd("file"),password:bd("password"),image:bd("image"),submit:be("submit"),reset:be("reset"),button:function(a){var b=a.nodeName.toLowerCase();return b==="input"&&a.type==="button"||b==="button"},input:function(a){return U.test(a.nodeName)},focus:function(a){var b=a.ownerDocument;return a===b.activeElement&&(!b.hasFocus||b.hasFocus())&&(!!a.type||!!a.href)},active:function(a){return a===a.ownerDocument.activeElement},first:bf(function(a,b,c){return[0]}),last:bf(function(a,b,c){return[b-1]}),eq:bf(function(a,b,c){return[c<0?c+b:c]}),even:bf(function(a,b,c){for(var d=0;d<b;d+=2)a.push(d);return a}),odd:bf(function(a,b,c){for(var d=1;d<b;d+=2)a.push(d);return a}),lt:bf(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:bf(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},j=s.compareDocumentPosition?function(a,b){return a===b?(k=!0,0):(!a.compareDocumentPosition||!b.compareDocumentPosition?a.compareDocumentPosition:a.compareDocumentPosition(b)&4)?-1:1}:function(a,b){if(a===b)return k=!0,0;if(a.sourceIndex&&b.sourceIndex)return a.sourceIndex-b.sourceIndex;var c,d,e=[],f=[],g=a.parentNode,h=b.parentNode,i=g;if(g===h)return bg(a,b);if(!g)return-1;if(!h)return 1;while(i)e.unshift(i),i=i.parentNode;i=h;while(i)f.unshift(i),i=i.parentNode;c=e.length,d=f.length;for(var j=0;j<c&&j<d;j++)if(e[j]!==f[j])return bg(e[j],f[j]);return j===c?bg(a,f[j],-1):bg(e[j],b,1)},[0,0].sort(j),m=!k,bc.uniqueSort=function(a){var b,c=1;k=m,a.sort(j);if(k)for(;b=a[c];c++)b===a[c-1]&&a.splice(c--,1);return a},bc.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},i=bc.compile=function(a,b){var c,d=[],e=[],f=D[o][a];if(!f){b||(b=bh(a)),c=b.length;while(c--)f=bm(b[c]),f[o]?d.push(f):e.push(f);f=D(a,bn(e,d))}return f},r.querySelectorAll&&function(){var a,b=bp,c=/'|\\/g,d=/\=[\x20\t\r\n\f]*([^'"\]]*)[\x20\t\r\n\f]*\]/g,e=[":focus"],f=[":active",":focus"],h=s.matchesSelector||s.mozMatchesSelector||s.webkitMatchesSelector||s.oMatchesSelector||s.msMatchesSelector;X(function(a){a.innerHTML="<select><option selected=''></option></select>",a.querySelectorAll("[selected]").length||e.push("\\["+E+"*(?:checked|disabled|ismap|multiple|readonly|selected|value)"),a.querySelectorAll(":checked").length||e.push(":checked")}),X(function(a){a.innerHTML="<p test=''></p>",a.querySelectorAll("[test^='']").length&&e.push("[*^$]="+E+"*(?:\"\"|'')"),a.innerHTML="<input type='hidden'/>",a.querySelectorAll(":enabled").length||e.push(":enabled",":disabled")}),e=new RegExp(e.join("|")),bp=function(a,d,f,g,h){if(!g&&!h&&(!e||!e.test(a))){var i,j,k=!0,l=o,m=d,n=d.nodeType===9&&a;if(d.nodeType===1&&d.nodeName.toLowerCase()!=="object"){i=bh(a),(k=d.getAttribute("id"))?l=k.replace(c,"\\$&"):d.setAttribute("id",l),l="[id='"+l+"'] ",j=i.length;while(j--)i[j]=l+i[j].join("");m=R.test(a)&&d.parentNode||d,n=i.join(",")}if(n)try{return w.apply(f,x.call(m.querySelectorAll(n),0)),f}catch(p){}finally{k||d.removeAttribute("id")}}return b(a,d,f,g,h)},h&&(X(function(b){a=h.call(b,"div");try{h.call(b,"[test!='']:sizzle"),f.push("!=",J)}catch(c){}}),f=new RegExp(f.join("|")),bc.matchesSelector=function(b,c){c=c.replace(d,"='$1']");if(!g(b)&&!f.test(c)&&(!e||!e.test(c)))try{var i=h.call(b,c);if(i||a||b.document&&b.document.nodeType!==11)return i}catch(j){}return bc(c,null,null,[b]).length>0})}(),e.pseudos.nth=e.pseudos.eq,e.filters=bq.prototype=e.pseudos,e.setFilters=new bq,bc.attr=p.attr,p.find=bc,p.expr=bc.selectors,p.expr[":"]=p.expr.pseudos,p.unique=bc.uniqueSort,p.text=bc.getText,p.isXMLDoc=bc.isXML,p.contains=bc.contains}(a);var bc=/Until$/,bd=/^(?:parents|prev(?:Until|All))/,be=/^.[^:#\[\.,]*$/,bf=p.expr.match.needsContext,bg={children:!0,contents:!0,next:!0,prev:!0};p.fn.extend({find:function(a){var b,c,d,e,f,g,h=this;if(typeof a!="string")return p(a).filter(function(){for(b=0,c=h.length;b<c;b++)if(p.contains(h[b],this))return!0});g=this.pushStack("","find",a);for(b=0,c=this.length;b<c;b++){d=g.length,p.find(a,this[b],g);if(b>0)for(e=d;e<g.length;e++)for(f=0;f<d;f++)if(g[f]===g[e]){g.splice(e--,1);break}}return g},has:function(a){var b,c=p(a,this),d=c.length;return this.filter(function(){for(b=0;b<d;b++)if(p.contains(this,c[b]))return!0})},not:function(a){return this.pushStack(bj(this,a,!1),"not",a)},filter:function(a){return this.pushStack(bj(this,a,!0),"filter",a)},is:function(a){return!!a&&(typeof a=="string"?bf.test(a)?p(a,this.context).index(this[0])>=0:p.filter(a,this).length>0:this.filter(a).length>0)},closest:function(a,b){var c,d=0,e=this.length,f=[],g=bf.test(a)||typeof a!="string"?p(a,b||this.context):0;for(;d<e;d++){c=this[d];while(c&&c.ownerDocument&&c!==b&&c.nodeType!==11){if(g?g.index(c)>-1:p.find.matchesSelector(c,a)){f.push(c);break}c=c.parentNode}}return f=f.length>1?p.unique(f):f,this.pushStack(f,"closest",a)},index:function(a){return a?typeof a=="string"?p.inArray(this[0],p(a)):p.inArray(a.jquery?a[0]:a,this):this[0]&&this[0].parentNode?this.prevAll().length:-1},add:function(a,b){var c=typeof a=="string"?p(a,b):p.makeArray(a&&a.nodeType?[a]:a),d=p.merge(this.get(),c);return this.pushStack(bh(c[0])||bh(d[0])?d:p.unique(d))},addBack:function(a){return this.add(a==null?this.prevObject:this.prevObject.filter(a))}}),p.fn.andSelf=p.fn.addBack,p.each({parent:function(a){var b=a.parentNode;return b&&b.nodeType!==11?b:null},parents:function(a){return p.dir(a,"parentNode")},parentsUntil:function(a,b,c){return p.dir(a,"parentNode",c)},next:function(a){return bi(a,"nextSibling")},prev:function(a){return bi(a,"previousSibling")},nextAll:function(a){return p.dir(a,"nextSibling")},prevAll:function(a){return p.dir(a,"previousSibling")},nextUntil:function(a,b,c){return p.dir(a,"nextSibling",c)},prevUntil:function(a,b,c){return p.dir(a,"previousSibling",c)},siblings:function(a){return p.sibling((a.parentNode||{}).firstChild,a)},children:function(a){return p.sibling(a.firstChild)},contents:function(a){return p.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:p.merge([],a.childNodes)}},function(a,b){p.fn[a]=function(c,d){var e=p.map(this,b,c);return bc.test(a)||(d=c),d&&typeof d=="string"&&(e=p.filter(d,e)),e=this.length>1&&!bg[a]?p.unique(e):e,this.length>1&&bd.test(a)&&(e=e.reverse()),this.pushStack(e,a,k.call(arguments).join(","))}}),p.extend({filter:function(a,b,c){return c&&(a=":not("+a+")"),b.length===1?p.find.matchesSelector(b[0],a)?[b[0]]:[]:p.find.matches(a,b)},dir:function(a,c,d){var e=[],f=a[c];while(f&&f.nodeType!==9&&(d===b||f.nodeType!==1||!p(f).is(d)))f.nodeType===1&&e.push(f),f=f[c];return e},sibling:function(a,b){var c=[];for(;a;a=a.nextSibling)a.nodeType===1&&a!==b&&c.push(a);return c}});var bl="abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|header|hgroup|mark|meter|nav|output|progress|section|summary|time|video",bm=/ jQuery\d+="(?:null|\d+)"/g,bn=/^\s+/,bo=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/gi,bp=/<([\w:]+)/,bq=/<tbody/i,br=/<|&#?\w+;/,bs=/<(?:script|style|link)/i,bt=/<(?:script|object|embed|option|style)/i,bu=new RegExp("<(?:"+bl+")[\\s/>]","i"),bv=/^(?:checkbox|radio)$/,bw=/checked\s*(?:[^=]|=\s*.checked.)/i,bx=/\/(java|ecma)script/i,by=/^\s*<!(?:\[CDATA\[|\-\-)|[\]\-]{2}>\s*$/g,bz={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]},bA=bk(e),bB=bA.appendChild(e.createElement("div"));bz.optgroup=bz.option,bz.tbody=bz.tfoot=bz.colgroup=bz.caption=bz.thead,bz.th=bz.td,p.support.htmlSerialize||(bz._default=[1,"X<div>","</div>"]),p.fn.extend({text:function(a){return p.access(this,function(a){return a===b?p.text(this):this.empty().append((this[0]&&this[0].ownerDocument||e).createTextNode(a))},null,a,arguments.length)},wrapAll:function(a){if(p.isFunction(a))return this.each(function(b){p(this).wrapAll(a.call(this,b))});if(this[0]){var b=p(a,this[0].ownerDocument).eq(0).clone(!0);this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstChild&&a.firstChild.nodeType===1)a=a.firstChild;return a}).append(this)}return this},wrapInner:function(a){return p.isFunction(a)?this.each(function(b){p(this).wrapInner(a.call(this,b))}):this.each(function(){var b=p(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=p.isFunction(a);return this.each(function(c){p(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(){return this.parent().each(function(){p.nodeName(this,"body")||p(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,!0,function(a){(this.nodeType===1||this.nodeType===11)&&this.insertBefore(a,this.firstChild)})},before:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(a,this),"before",this.selector)}},after:function(){if(!bh(this[0]))return this.domManip(arguments,!1,function(a){this.parentNode.insertBefore(a,this.nextSibling)});if(arguments.length){var a=p.clean(arguments);return this.pushStack(p.merge(this,a),"after",this.selector)}},remove:function(a,b){var c,d=0;for(;(c=this[d])!=null;d++)if(!a||p.filter(a,[c]).length)!b&&c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),p.cleanData([c])),c.parentNode&&c.parentNode.removeChild(c);return this},empty:function(){var a,b=0;for(;(a=this[b])!=null;b++){a.nodeType===1&&p.cleanData(a.getElementsByTagName("*"));while(a.firstChild)a.removeChild(a.firstChild)}return this},clone:function(a,b){return a=a==null?!1:a,b=b==null?a:b,this.map(function(){return p.clone(this,a,b)})},html:function(a){return p.access(this,function(a){var c=this[0]||{},d=0,e=this.length;if(a===b)return c.nodeType===1?c.innerHTML.replace(bm,""):b;if(typeof a=="string"&&!bs.test(a)&&(p.support.htmlSerialize||!bu.test(a))&&(p.support.leadingWhitespace||!bn.test(a))&&!bz[(bp.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(bo,"<$1></$2>");try{for(;d<e;d++)c=this[d]||{},c.nodeType===1&&(p.cleanData(c.getElementsByTagName("*")),c.innerHTML=a);c=0}catch(f){}}c&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(a){return bh(this[0])?this.length?this.pushStack(p(p.isFunction(a)?a():a),"replaceWith",a):this:p.isFunction(a)?this.each(function(b){var c=p(this),d=c.html();c.replaceWith(a.call(this,b,d))}):(typeof a!="string"&&(a=p(a).detach()),this.each(function(){var b=this.nextSibling,c=this.parentNode;p(this).remove(),b?p(b).before(a):p(c).append(a)}))},detach:function(a){return this.remove(a,!0)},domManip:function(a,c,d){a=[].concat.apply([],a);var e,f,g,h,i=0,j=a[0],k=[],l=this.length;if(!p.support.checkClone&&l>1&&typeof j=="string"&&bw.test(j))return this.each(function(){p(this).domManip(a,c,d)});if(p.isFunction(j))return this.each(function(e){var f=p(this);a[0]=j.call(this,e,c?f.html():b),f.domManip(a,c,d)});if(this[0]){e=p.buildFragment(a,this,k),g=e.fragment,f=g.firstChild,g.childNodes.length===1&&(g=f);if(f){c=c&&p.nodeName(f,"tr");for(h=e.cacheable||l-1;i<l;i++)d.call(c&&p.nodeName(this[i],"table")?bC(this[i],"tbody"):this[i],i===h?g:p.clone(g,!0,!0))}g=f=null,k.length&&p.each(k,function(a,b){b.src?p.ajax?p.ajax({url:b.src,type:"GET",dataType:"script",async:!1,global:!1,"throws":!0}):p.error("no ajax"):p.globalEval((b.text||b.textContent||b.innerHTML||"").replace(by,"")),b.parentNode&&b.parentNode.removeChild(b)})}return this}}),p.buildFragment=function(a,c,d){var f,g,h,i=a[0];return c=c||e,c=!c.nodeType&&c[0]||c,c=c.ownerDocument||c,a.length===1&&typeof i=="string"&&i.length<512&&c===e&&i.charAt(0)==="<"&&!bt.test(i)&&(p.support.checkClone||!bw.test(i))&&(p.support.html5Clone||!bu.test(i))&&(g=!0,f=p.fragments[i],h=f!==b),f||(f=c.createDocumentFragment(),p.clean(a,c,f,d),g&&(p.fragments[i]=h&&f)),{fragment:f,cacheable:g}},p.fragments={},p.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){p.fn[a]=function(c){var d,e=0,f=[],g=p(c),h=g.length,i=this.length===1&&this[0].parentNode;if((i==null||i&&i.nodeType===11&&i.childNodes.length===1)&&h===1)return g[b](this[0]),this;for(;e<h;e++)d=(e>0?this.clone(!0):this).get(),p(g[e])[b](d),f=f.concat(d);return this.pushStack(f,a,g.selector)}}),p.extend({clone:function(a,b,c){var d,e,f,g;p.support.html5Clone||p.isXMLDoc(a)||!bu.test("<"+a.nodeName+">")?g=a.cloneNode(!0):(bB.innerHTML=a.outerHTML,bB.removeChild(g=bB.firstChild));if((!p.support.noCloneEvent||!p.support.noCloneChecked)&&(a.nodeType===1||a.nodeType===11)&&!p.isXMLDoc(a)){bE(a,g),d=bF(a),e=bF(g);for(f=0;d[f];++f)e[f]&&bE(d[f],e[f])}if(b){bD(a,g);if(c){d=bF(a),e=bF(g);for(f=0;d[f];++f)bD(d[f],e[f])}}return d=e=null,g},clean:function(a,b,c,d){var f,g,h,i,j,k,l,m,n,o,q,r,s=b===e&&bA,t=[];if(!b||typeof b.createDocumentFragment=="undefined")b=e;for(f=0;(h=a[f])!=null;f++){typeof h=="number"&&(h+="");if(!h)continue;if(typeof h=="string")if(!br.test(h))h=b.createTextNode(h);else{s=s||bk(b),l=b.createElement("div"),s.appendChild(l),h=h.replace(bo,"<$1></$2>"),i=(bp.exec(h)||["",""])[1].toLowerCase(),j=bz[i]||bz._default,k=j[0],l.innerHTML=j[1]+h+j[2];while(k--)l=l.lastChild;if(!p.support.tbody){m=bq.test(h),n=i==="table"&&!m?l.firstChild&&l.firstChild.childNodes:j[1]==="<table>"&&!m?l.childNodes:[];for(g=n.length-1;g>=0;--g)p.nodeName(n[g],"tbody")&&!n[g].childNodes.length&&n[g].parentNode.removeChild(n[g])}!p.support.leadingWhitespace&&bn.test(h)&&l.insertBefore(b.createTextNode(bn.exec(h)[0]),l.firstChild),h=l.childNodes,l.parentNode.removeChild(l)}h.nodeType?t.push(h):p.merge(t,h)}l&&(h=l=s=null);if(!p.support.appendChecked)for(f=0;(h=t[f])!=null;f++)p.nodeName(h,"input")?bG(h):typeof h.getElementsByTagName!="undefined"&&p.grep(h.getElementsByTagName("input"),bG);if(c){q=function(a){if(!a.type||bx.test(a.type))return d?d.push(a.parentNode?a.parentNode.removeChild(a):a):c.appendChild(a)};for(f=0;(h=t[f])!=null;f++)if(!p.nodeName(h,"script")||!q(h))c.appendChild(h),typeof h.getElementsByTagName!="undefined"&&(r=p.grep(p.merge([],h.getElementsByTagName("script")),q),t.splice.apply(t,[f+1,0].concat(r)),f+=r.length)}return t},cleanData:function(a,b){var c,d,e,f,g=0,h=p.expando,i=p.cache,j=p.support.deleteExpando,k=p.event.special;for(;(e=a[g])!=null;g++)if(b||p.acceptData(e)){d=e[h],c=d&&i[d];if(c){if(c.events)for(f in c.events)k[f]?p.event.remove(e,f):p.removeEvent(e,f,c.handle);i[d]&&(delete i[d],j?delete e[h]:e.removeAttribute?e.removeAttribute(h):e[h]=null,p.deletedIds.push(d))}}}}),function(){var a,b;p.uaMatch=function(a){a=a.toLowerCase();var b=/(chrome)[ \/]([\w.]+)/.exec(a)||/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||a.indexOf("compatible")<0&&/(mozilla)(?:.*? rv:([\w.]+)|)/.exec(a)||[];return{browser:b[1]||"",version:b[2]||"0"}},a=p.uaMatch(g.userAgent),b={},a.browser&&(b[a.browser]=!0,b.version=a.version),b.chrome?b.webkit=!0:b.webkit&&(b.safari=!0),p.browser=b,p.sub=function(){function a(b,c){return new a.fn.init(b,c)}p.extend(!0,a,this),a.superclass=this,a.fn=a.prototype=this(),a.fn.constructor=a,a.sub=this.sub,a.fn.init=function c(c,d){return d&&d instanceof p&&!(d instanceof a)&&(d=a(d)),p.fn.init.call(this,c,d,b)},a.fn.init.prototype=a.fn;var b=a(e);return a}}();var bH,bI,bJ,bK=/alpha\([^)]*\)/i,bL=/opacity=([^)]*)/,bM=/^(top|right|bottom|left)$/,bN=/^(none|table(?!-c[ea]).+)/,bO=/^margin/,bP=new RegExp("^("+q+")(.*)$","i"),bQ=new RegExp("^("+q+")(?!px)[a-z%]+$","i"),bR=new RegExp("^([-+])=("+q+")","i"),bS={},bT={position:"absolute",visibility:"hidden",display:"block"},bU={letterSpacing:0,fontWeight:400},bV=["Top","Right","Bottom","Left"],bW=["Webkit","O","Moz","ms"],bX=p.fn.toggle;p.fn.extend({css:function(a,c){return p.access(this,function(a,c,d){return d!==b?p.style(a,c,d):p.css(a,c)},a,c,arguments.length>1)},show:function(){return b$(this,!0)},hide:function(){return b$(this)},toggle:function(a,b){var c=typeof a=="boolean";return p.isFunction(a)&&p.isFunction(b)?bX.apply(this,arguments):this.each(function(){(c?a:bZ(this))?p(this).show():p(this).hide()})}}),p.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=bH(a,"opacity");return c===""?"1":c}}}},cssNumber:{fillOpacity:!0,fontWeight:!0,lineHeight:!0,opacity:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":p.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,c,d,e){if(!a||a.nodeType===3||a.nodeType===8||!a.style)return;var f,g,h,i=p.camelCase(c),j=a.style;c=p.cssProps[i]||(p.cssProps[i]=bY(j,i)),h=p.cssHooks[c]||p.cssHooks[i];if(d===b)return h&&"get"in h&&(f=h.get(a,!1,e))!==b?f:j[c];g=typeof d,g==="string"&&(f=bR.exec(d))&&(d=(f[1]+1)*f[2]+parseFloat(p.css(a,c)),g="number");if(d==null||g==="number"&&isNaN(d))return;g==="number"&&!p.cssNumber[i]&&(d+="px");if(!h||!("set"in h)||(d=h.set(a,d,e))!==b)try{j[c]=d}catch(k){}},css:function(a,c,d,e){var f,g,h,i=p.camelCase(c);return c=p.cssProps[i]||(p.cssProps[i]=bY(a.style,i)),h=p.cssHooks[c]||p.cssHooks[i],h&&"get"in h&&(f=h.get(a,!0,e)),f===b&&(f=bH(a,c)),f==="normal"&&c in bU&&(f=bU[c]),d||e!==b?(g=parseFloat(f),d||p.isNumeric(g)?g||0:f):f},swap:function(a,b,c){var d,e,f={};for(e in b)f[e]=a.style[e],a.style[e]=b[e];d=c.call(a);for(e in b)a.style[e]=f[e];return d}}),a.getComputedStyle?bH=function(b,c){var d,e,f,g,h=a.getComputedStyle(b,null),i=b.style;return h&&(d=h[c],d===""&&!p.contains(b.ownerDocument,b)&&(d=p.style(b,c)),bQ.test(d)&&bO.test(c)&&(e=i.width,f=i.minWidth,g=i.maxWidth,i.minWidth=i.maxWidth=i.width=d,d=h.width,i.width=e,i.minWidth=f,i.maxWidth=g)),d}:e.documentElement.currentStyle&&(bH=function(a,b){var c,d,e=a.currentStyle&&a.currentStyle[b],f=a.style;return e==null&&f&&f[b]&&(e=f[b]),bQ.test(e)&&!bM.test(b)&&(c=f.left,d=a.runtimeStyle&&a.runtimeStyle.left,d&&(a.runtimeStyle.left=a.currentStyle.left),f.left=b==="fontSize"?"1em":e,e=f.pixelLeft+"px",f.left=c,d&&(a.runtimeStyle.left=d)),e===""?"auto":e}),p.each(["height","width"],function(a,b){p.cssHooks[b]={get:function(a,c,d){if(c)return a.offsetWidth===0&&bN.test(bH(a,"display"))?p.swap(a,bT,function(){return cb(a,b,d)}):cb(a,b,d)},set:function(a,c,d){return b_(a,c,d?ca(a,b,d,p.support.boxSizing&&p.css(a,"boxSizing")==="border-box"):0)}}}),p.support.opacity||(p.cssHooks.opacity={get:function(a,b){return bL.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?.01*parseFloat(RegExp.$1)+"":b?"1":""},set:function(a,b){var c=a.style,d=a.currentStyle,e=p.isNumeric(b)?"alpha(opacity="+b*100+")":"",f=d&&d.filter||c.filter||"";c.zoom=1;if(b>=1&&p.trim(f.replace(bK,""))===""&&c.removeAttribute){c.removeAttribute("filter");if(d&&!d.filter)return}c.filter=bK.test(f)?f.replace(bK,e):f+" "+e}}),p(function(){p.support.reliableMarginRight||(p.cssHooks.marginRight={get:function(a,b){return p.swap(a,{display:"inline-block"},function(){if(b)return bH(a,"marginRight")})}}),!p.support.pixelPosition&&p.fn.position&&p.each(["top","left"],function(a,b){p.cssHooks[b]={get:function(a,c){if(c){var d=bH(a,b);return bQ.test(d)?p(a).position()[b]+"px":d}}}})}),p.expr&&p.expr.filters&&(p.expr.filters.hidden=function(a){return a.offsetWidth===0&&a.offsetHeight===0||!p.support.reliableHiddenOffsets&&(a.style&&a.style.display||bH(a,"display"))==="none"},p.expr.filters.visible=function(a){return!p.expr.filters.hidden(a)}),p.each({margin:"",padding:"",border:"Width"},function(a,b){p.cssHooks[a+b]={expand:function(c){var d,e=typeof c=="string"?c.split(" "):[c],f={};for(d=0;d<4;d++)f[a+bV[d]+b]=e[d]||e[d-2]||e[0];return f}},bO.test(a)||(p.cssHooks[a+b].set=b_)});var cd=/%20/g,ce=/\[\]$/,cf=/\r?\n/g,cg=/^(?:color|date|datetime|datetime-local|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ch=/^(?:select|textarea)/i;p.fn.extend({serialize:function(){return p.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?p.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||ch.test(this.nodeName)||cg.test(this.type))}).map(function(a,b){var c=p(this).val();return c==null?null:p.isArray(c)?p.map(c,function(a,c){return{name:b.name,value:a.replace(cf,"\r\n")}}):{name:b.name,value:c.replace(cf,"\r\n")}}).get()}}),p.param=function(a,c){var d,e=[],f=function(a,b){b=p.isFunction(b)?b():b==null?"":b,e[e.length]=encodeURIComponent(a)+"="+encodeURIComponent(b)};c===b&&(c=p.ajaxSettings&&p.ajaxSettings.traditional);if(p.isArray(a)||a.jquery&&!p.isPlainObject(a))p.each(a,function(){f(this.name,this.value)});else for(d in a)ci(d,a[d],c,f);return e.join("&").replace(cd,"+")};var cj,ck,cl=/#.*$/,cm=/^(.*?):[ \t]*([^\r\n]*)\r?$/mg,cn=/^(?:about|app|app\-storage|.+\-extension|file|res|widget):$/,co=/^(?:GET|HEAD)$/,cp=/^\/\//,cq=/\?/,cr=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,cs=/([?&])_=[^&]*/,ct=/^([\w\+\.\-]+:)(?:\/\/([^\/?#:]*)(?::(\d+)|)|)/,cu=p.fn.load,cv={},cw={},cx=["*/"]+["*"];try{ck=f.href}catch(cy){ck=e.createElement("a"),ck.href="",ck=ck.href}cj=ct.exec(ck.toLowerCase())||[],p.fn.load=function(a,c,d){if(typeof a!="string"&&cu)return cu.apply(this,arguments);if(!this.length)return this;var e,f,g,h=this,i=a.indexOf(" ");return i>=0&&(e=a.slice(i,a.length),a=a.slice(0,i)),p.isFunction(c)?(d=c,c=b):c&&typeof c=="object"&&(f="POST"),p.ajax({url:a,type:f,dataType:"html",data:c,complete:function(a,b){d&&h.each(d,g||[a.responseText,b,a])}}).done(function(a){g=arguments,h.html(e?p("<div>").append(a.replace(cr,"")).find(e):a)}),this},p.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){p.fn[b]=function(a){return this.on(b,a)}}),p.each(["get","post"],function(a,c){p[c]=function(a,d,e,f){return p.isFunction(d)&&(f=f||e,e=d,d=b),p.ajax({type:c,url:a,data:d,success:e,dataType:f})}}),p.extend({getScript:function(a,c){return p.get(a,b,c,"script")},getJSON:function(a,b,c){return p.get(a,b,c,"json")},ajaxSetup:function(a,b){return b?cB(a,p.ajaxSettings):(b=a,a=p.ajaxSettings),cB(a,b),a},ajaxSettings:{url:ck,isLocal:cn.test(cj[1]),global:!0,type:"GET",contentType:"application/x-www-form-urlencoded; charset=UTF-8",processData:!0,async:!0,accepts:{xml:"application/xml, text/xml",html:"text/html",text:"text/plain",json:"application/json, text/javascript","*":cx},contents:{xml:/xml/,html:/html/,json:/json/},responseFields:{xml:"responseXML",text:"responseText"},converters:{"* text":a.String,"text html":!0,"text json":p.parseJSON,"text xml":p.parseXML},flatOptions:{context:!0,url:!0}},ajaxPrefilter:cz(cv),ajaxTransport:cz(cw),ajax:function(a,c){function y(a,c,f,i){var k,s,t,u,w,y=c;if(v===2)return;v=2,h&&clearTimeout(h),g=b,e=i||"",x.readyState=a>0?4:0,f&&(u=cC(l,x,f));if(a>=200&&a<300||a===304)l.ifModified&&(w=x.getResponseHeader("Last-Modified"),w&&(p.lastModified[d]=w),w=x.getResponseHeader("Etag"),w&&(p.etag[d]=w)),a===304?(y="notmodified",k=!0):(k=cD(l,u),y=k.state,s=k.data,t=k.error,k=!t);else{t=y;if(!y||a)y="error",a<0&&(a=0)}x.status=a,x.statusText=(c||y)+"",k?o.resolveWith(m,[s,y,x]):o.rejectWith(m,[x,y,t]),x.statusCode(r),r=b,j&&n.trigger("ajax"+(k?"Success":"Error"),[x,l,k?s:t]),q.fireWith(m,[x,y]),j&&(n.trigger("ajaxComplete",[x,l]),--p.active||p.event.trigger("ajaxStop"))}typeof a=="object"&&(c=a,a=b),c=c||{};var d,e,f,g,h,i,j,k,l=p.ajaxSetup({},c),m=l.context||l,n=m!==l&&(m.nodeType||m instanceof p)?p(m):p.event,o=p.Deferred(),q=p.Callbacks("once memory"),r=l.statusCode||{},t={},u={},v=0,w="canceled",x={readyState:0,setRequestHeader:function(a,b){if(!v){var c=a.toLowerCase();a=u[c]=u[c]||a,t[a]=b}return this},getAllResponseHeaders:function(){return v===2?e:null},getResponseHeader:function(a){var c;if(v===2){if(!f){f={};while(c=cm.exec(e))f[c[1].toLowerCase()]=c[2]}c=f[a.toLowerCase()]}return c===b?null:c},overrideMimeType:function(a){return v||(l.mimeType=a),this},abort:function(a){return a=a||w,g&&g.abort(a),y(0,a),this}};o.promise(x),x.success=x.done,x.error=x.fail,x.complete=q.add,x.statusCode=function(a){if(a){var b;if(v<2)for(b in a)r[b]=[r[b],a[b]];else b=a[x.status],x.always(b)}return this},l.url=((a||l.url)+"").replace(cl,"").replace(cp,cj[1]+"//"),l.dataTypes=p.trim(l.dataType||"*").toLowerCase().split(s),l.crossDomain==null&&(i=ct.exec(l.url.toLowerCase())||!1,l.crossDomain=i&&i.join(":")+(i[3]?"":i[1]==="http:"?80:443)!==cj.join(":")+(cj[3]?"":cj[1]==="http:"?80:443)),l.data&&l.processData&&typeof l.data!="string"&&(l.data=p.param(l.data,l.traditional)),cA(cv,l,c,x);if(v===2)return x;j=l.global,l.type=l.type.toUpperCase(),l.hasContent=!co.test(l.type),j&&p.active++===0&&p.event.trigger("ajaxStart");if(!l.hasContent){l.data&&(l.url+=(cq.test(l.url)?"&":"?")+l.data,delete l.data),d=l.url;if(l.cache===!1){var z=p.now(),A=l.url.replace(cs,"$1_="+z);l.url=A+(A===l.url?(cq.test(l.url)?"&":"?")+"_="+z:"")}}(l.data&&l.hasContent&&l.contentType!==!1||c.contentType)&&x.setRequestHeader("Content-Type",l.contentType),l.ifModified&&(d=d||l.url,p.lastModified[d]&&x.setRequestHeader("If-Modified-Since",p.lastModified[d]),p.etag[d]&&x.setRequestHeader("If-None-Match",p.etag[d])),x.setRequestHeader("Accept",l.dataTypes[0]&&l.accepts[l.dataTypes[0]]?l.accepts[l.dataTypes[0]]+(l.dataTypes[0]!=="*"?", "+cx+"; q=0.01":""):l.accepts["*"]);for(k in l.headers)x.setRequestHeader(k,l.headers[k]);if(!l.beforeSend||l.beforeSend.call(m,x,l)!==!1&&v!==2){w="abort";for(k in{success:1,error:1,complete:1})x[k](l[k]);g=cA(cw,l,c,x);if(!g)y(-1,"No Transport");else{x.readyState=1,j&&n.trigger("ajaxSend",[x,l]),l.async&&l.timeout>0&&(h=setTimeout(function(){x.abort("timeout")},l.timeout));try{v=1,g.send(t,y)}catch(B){if(v<2)y(-1,B);else throw B}}return x}return x.abort()},active:0,lastModified:{},etag:{}});var cE=[],cF=/\?/,cG=/(=)\?(?=&|$)|\?\?/,cH=p.now();p.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=cE.pop()||p.expando+"_"+cH++;return this[a]=!0,a}}),p.ajaxPrefilter("json jsonp",function(c,d,e){var f,g,h,i=c.data,j=c.url,k=c.jsonp!==!1,l=k&&cG.test(j),m=k&&!l&&typeof i=="string"&&!(c.contentType||"").indexOf("application/x-www-form-urlencoded")&&cG.test(i);if(c.dataTypes[0]==="jsonp"||l||m)return f=c.jsonpCallback=p.isFunction(c.jsonpCallback)?c.jsonpCallback():c.jsonpCallback,g=a[f],l?c.url=j.replace(cG,"$1"+f):m?c.data=i.replace(cG,"$1"+f):k&&(c.url+=(cF.test(j)?"&":"?")+c.jsonp+"="+f),c.converters["script json"]=function(){return h||p.error(f+" was not called"),h[0]},c.dataTypes[0]="json",a[f]=function(){h=arguments},e.always(function(){a[f]=g,c[f]&&(c.jsonpCallback=d.jsonpCallback,cE.push(f)),h&&p.isFunction(g)&&g(h[0]),h=g=b}),"script"}),p.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/javascript|ecmascript/},converters:{"text script":function(a){return p.globalEval(a),a}}}),p.ajaxPrefilter("script",function(a){a.cache===b&&(a.cache=!1),a.crossDomain&&(a.type="GET",a.global=!1)}),p.ajaxTransport("script",function(a){if(a.crossDomain){var c,d=e.head||e.getElementsByTagName("head")[0]||e.documentElement;return{send:function(f,g){c=e.createElement("script"),c.async="async",a.scriptCharset&&(c.charset=a.scriptCharset),c.src=a.url,c.onload=c.onreadystatechange=function(a,e){if(e||!c.readyState||/loaded|complete/.test(c.readyState))c.onload=c.onreadystatechange=null,d&&c.parentNode&&d.removeChild(c),c=b,e||g(200,"success")},d.insertBefore(c,d.firstChild)},abort:function(){c&&c.onload(0,1)}}}});var cI,cJ=a.ActiveXObject?function(){for(var a in cI)cI[a](0,1)}:!1,cK=0;p.ajaxSettings.xhr=a.ActiveXObject?function(){return!this.isLocal&&cL()||cM()}:cL,function(a){p.extend(p.support,{ajax:!!a,cors:!!a&&"withCredentials"in a})}(p.ajaxSettings.xhr()),p.support.ajax&&p.ajaxTransport(function(c){if(!c.crossDomain||p.support.cors){var d;return{send:function(e,f){var g,h,i=c.xhr();c.username?i.open(c.type,c.url,c.async,c.username,c.password):i.open(c.type,c.url,c.async);if(c.xhrFields)for(h in c.xhrFields)i[h]=c.xhrFields[h];c.mimeType&&i.overrideMimeType&&i.overrideMimeType(c.mimeType),!c.crossDomain&&!e["X-Requested-With"]&&(e["X-Requested-With"]="XMLHttpRequest");try{for(h in e)i.setRequestHeader(h,e[h])}catch(j){}i.send(c.hasContent&&c.data||null),d=function(a,e){var h,j,k,l,m;try{if(d&&(e||i.readyState===4)){d=b,g&&(i.onreadystatechange=p.noop,cJ&&delete cI[g]);if(e)i.readyState!==4&&i.abort();else{h=i.status,k=i.getAllResponseHeaders(),l={},m=i.responseXML,m&&m.documentElement&&(l.xml=m);try{l.text=i.responseText}catch(a){}try{j=i.statusText}catch(n){j=""}!h&&c.isLocal&&!c.crossDomain?h=l.text?200:404:h===1223&&(h=204)}}}catch(o){e||f(-1,o)}l&&f(h,j,l,k)},c.async?i.readyState===4?setTimeout(d,0):(g=++cK,cJ&&(cI||(cI={},p(a).unload(cJ)),cI[g]=d),i.onreadystatechange=d):d()},abort:function(){d&&d(0,1)}}}});var cN,cO,cP=/^(?:toggle|show|hide)$/,cQ=new RegExp("^(?:([-+])=|)("+q+")([a-z%]*)$","i"),cR=/queueHooks$/,cS=[cY],cT={"*":[function(a,b){var c,d,e=this.createTween(a,b),f=cQ.exec(b),g=e.cur(),h=+g||0,i=1,j=20;if(f){c=+f[2],d=f[3]||(p.cssNumber[a]?"":"px");if(d!=="px"&&h){h=p.css(e.elem,a,!0)||c||1;do i=i||".5",h=h/i,p.style(e.elem,a,h+d);while(i!==(i=e.cur()/g)&&i!==1&&--j)}e.unit=d,e.start=h,e.end=f[1]?h+(f[1]+1)*c:c}return e}]};p.Animation=p.extend(cW,{tweener:function(a,b){p.isFunction(a)?(b=a,a=["*"]):a=a.split(" ");var c,d=0,e=a.length;for(;d<e;d++)c=a[d],cT[c]=cT[c]||[],cT[c].unshift(b)},prefilter:function(a,b){b?cS.unshift(a):cS.push(a)}}),p.Tween=cZ,cZ.prototype={constructor:cZ,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||"swing",this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(p.cssNumber[c]?"":"px")},cur:function(){var a=cZ.propHooks[this.prop];return a&&a.get?a.get(this):cZ.propHooks._default.get(this)},run:function(a){var b,c=cZ.propHooks[this.prop];return this.options.duration?this.pos=b=p.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):cZ.propHooks._default.set(this),this}},cZ.prototype.init.prototype=cZ.prototype,cZ.propHooks={_default:{get:function(a){var b;return a.elem[a.prop]==null||!!a.elem.style&&a.elem.style[a.prop]!=null?(b=p.css(a.elem,a.prop,!1,""),!b||b==="auto"?0:b):a.elem[a.prop]},set:function(a){p.fx.step[a.prop]?p.fx.step[a.prop](a):a.elem.style&&(a.elem.style[p.cssProps[a.prop]]!=null||p.cssHooks[a.prop])?p.style(a.elem,a.prop,a.now+a.unit):a.elem[a.prop]=a.now}}},cZ.propHooks.scrollTop=cZ.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},p.each(["toggle","show","hide"],function(a,b){var c=p.fn[b];p.fn[b]=function(d,e,f){return d==null||typeof d=="boolean"||!a&&p.isFunction(d)&&p.isFunction(e)?c.apply(this,arguments):this.animate(c$(b,!0),d,e,f)}}),p.fn.extend({fadeTo:function(a,b,c,d){return this.filter(bZ).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=p.isEmptyObject(a),f=p.speed(b,c,d),g=function(){var b=cW(this,p.extend({},a),f);e&&b.stop(!0)};return e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,c,d){var e=function(a){var b=a.stop;delete a.stop,b(d)};return typeof a!="string"&&(d=c,c=a,a=b),c&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,c=a!=null&&a+"queueHooks",f=p.timers,g=p._data(this);if(c)g[c]&&g[c].stop&&e(g[c]);else for(c in g)g[c]&&g[c].stop&&cR.test(c)&&e(g[c]);for(c=f.length;c--;)f[c].elem===this&&(a==null||f[c].queue===a)&&(f[c].anim.stop(d),b=!1,f.splice(c,1));(b||!d)&&p.dequeue(this,a)})}}),p.each({slideDown:c$("show"),slideUp:c$("hide"),slideToggle:c$("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){p.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),p.speed=function(a,b,c){var d=a&&typeof a=="object"?p.extend({},a):{complete:c||!c&&b||p.isFunction(a)&&a,duration:a,easing:c&&b||b&&!p.isFunction(b)&&b};d.duration=p.fx.off?0:typeof d.duration=="number"?d.duration:d.duration in p.fx.speeds?p.fx.speeds[d.duration]:p.fx.speeds._default;if(d.queue==null||d.queue===!0)d.queue="fx";return d.old=d.complete,d.complete=function(){p.isFunction(d.old)&&d.old.call(this),d.queue&&p.dequeue(this,d.queue)},d},p.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2}},p.timers=[],p.fx=cZ.prototype.init,p.fx.tick=function(){var a,b=p.timers,c=0;for(;c<b.length;c++)a=b[c],!a()&&b[c]===a&&b.splice(c--,1);b.length||p.fx.stop()},p.fx.timer=function(a){a()&&p.timers.push(a)&&!cO&&(cO=setInterval(p.fx.tick,p.fx.interval))},p.fx.interval=13,p.fx.stop=function(){clearInterval(cO),cO=null},p.fx.speeds={slow:600,fast:200,_default:400},p.fx.step={},p.expr&&p.expr.filters&&(p.expr.filters.animated=function(a){return p.grep(p.timers,function(b){return a===b.elem}).length});var c_=/^(?:body|html)$/i;p.fn.offset=function(a){if(arguments.length)return a===b?this:this.each(function(b){p.offset.setOffset(this,a,b)});var c,d,e,f,g,h,i,j={top:0,left:0},k=this[0],l=k&&k.ownerDocument;if(!l)return;return(d=l.body)===k?p.offset.bodyOffset(k):(c=l.documentElement,p.contains(c,k)?(typeof k.getBoundingClientRect!="undefined"&&(j=k.getBoundingClientRect()),e=da(l),f=c.clientTop||d.clientTop||0,g=c.clientLeft||d.clientLeft||0,h=e.pageYOffset||c.scrollTop,i=e.pageXOffset||c.scrollLeft,{top:j.top+h-f,left:j.left+i-g}):j)},p.offset={bodyOffset:function(a){var b=a.offsetTop,c=a.offsetLeft;return p.support.doesNotIncludeMarginInBodyOffset&&(b+=parseFloat(p.css(a,"marginTop"))||0,c+=parseFloat(p.css(a,"marginLeft"))||0),{top:b,left:c}},setOffset:function(a,b,c){var d=p.css(a,"position");d==="static"&&(a.style.position="relative");var e=p(a),f=e.offset(),g=p.css(a,"top"),h=p.css(a,"left"),i=(d==="absolute"||d==="fixed")&&p.inArray("auto",[g,h])>-1,j={},k={},l,m;i?(k=e.position(),l=k.top,m=k.left):(l=parseFloat(g)||0,m=parseFloat(h)||0),p.isFunction(b)&&(b=b.call(a,c,f)),b.top!=null&&(j.top=b.top-f.top+l),b.left!=null&&(j.left=b.left-f.left+m),"using"in b?b.using.call(a,j):e.css(j)}},p.fn.extend({position:function(){if(!this[0])return;var a=this[0],b=this.offsetParent(),c=this.offset(),d=c_.test(b[0].nodeName)?{top:0,left:0}:b.offset();return c.top-=parseFloat(p.css(a,"marginTop"))||0,c.left-=parseFloat(p.css(a,"marginLeft"))||0,d.top+=parseFloat(p.css(b[0],"borderTopWidth"))||0,d.left+=parseFloat(p.css(b[0],"borderLeftWidth"))||0,{top:c.top-d.top,left:c.left-d.left}},offsetParent:function(){return this.map(function(){var a=this.offsetParent||e.body;while(a&&!c_.test(a.nodeName)&&p.css(a,"position")==="static")a=a.offsetParent;return a||e.body})}}),p.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,c){var d=/Y/.test(c);p.fn[a]=function(e){return p.access(this,function(a,e,f){var g=da(a);if(f===b)return g?c in g?g[c]:g.document.documentElement[e]:a[e];g?g.scrollTo(d?p(g).scrollLeft():f,d?f:p(g).scrollTop()):a[e]=f},a,e,arguments.length,null)}}),p.each({Height:"height",Width:"width"},function(a,c){p.each({padding:"inner"+a,content:c,"":"outer"+a},function(d,e){p.fn[e]=function(e,f){var g=arguments.length&&(d||typeof e!="boolean"),h=d||(e===!0||f===!0?"margin":"border");return p.access(this,function(c,d,e){var f;return p.isWindow(c)?c.document.documentElement["client"+a]:c.nodeType===9?(f=c.documentElement,Math.max(c.body["scroll"+a],f["scroll"+a],c.body["offset"+a],f["offset"+a],f["client"+a])):e===b?p.css(c,d,e,h):p.style(c,d,e,h)},c,g?e:b,g,null)}})}),a.jQuery=a.$=p,typeof define=="function"&&define.amd&&define.amd.jQuery&&define("jquery",[],function(){return p})})(window);
\ No newline at end of file
bryfry.github.com/javascripts/jquery.ui.totop.js
@@ -0,0 +1,200 @@
+/*
+ * jQuery EasIng v1.1.2 - http://gsgd.co.uk/sandbox/jquery.easIng.php
+ *
+ * Uses the built In easIng capabilities added In jQuery 1.1
+ * to offer multiple easIng options
+ *
+ * Copyright (c) 2007 George Smith
+ * Licensed under the MIT License:
+ * http://www.opensource.org/licenses/mit-license.php
+ */
+
+// t: current time, b: begInnIng value, c: change In value, d: duration
+
+jQuery.extend( jQuery.easing,
+{
+ easeInQuad: function (x, t, b, c, d) {
+ return c*(t/=d)*t + b;
+ },
+ easeOutQuad: function (x, t, b, c, d) {
+ return -c *(t/=d)*(t-2) + b;
+ },
+ easeInOutQuad: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t + b;
+ return -c/2 * ((--t)*(t-2) - 1) + b;
+ },
+ easeInCubic: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t + b;
+ },
+ easeOutCubic: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t + 1) + b;
+ },
+ easeInOutCubic: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t + b;
+ return c/2*((t-=2)*t*t + 2) + b;
+ },
+ easeInQuart: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t + b;
+ },
+ easeOutQuart: function (x, t, b, c, d) {
+ return -c * ((t=t/d-1)*t*t*t - 1) + b;
+ },
+ easeInOutQuart: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t + b;
+ return -c/2 * ((t-=2)*t*t*t - 2) + b;
+ },
+ easeInQuint: function (x, t, b, c, d) {
+ return c*(t/=d)*t*t*t*t + b;
+ },
+ easeOutQuint: function (x, t, b, c, d) {
+ return c*((t=t/d-1)*t*t*t*t + 1) + b;
+ },
+ easeInOutQuint: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
+ return c/2*((t-=2)*t*t*t*t + 2) + b;
+ },
+ easeInSine: function (x, t, b, c, d) {
+ return -c * Math.cos(t/d * (Math.PI/2)) + c + b;
+ },
+ easeOutSine: function (x, t, b, c, d) {
+ return c * Math.sin(t/d * (Math.PI/2)) + b;
+ },
+ easeInOutSine: function (x, t, b, c, d) {
+ return -c/2 * (Math.cos(Math.PI*t/d) - 1) + b;
+ },
+ easeInExpo: function (x, t, b, c, d) {
+ return (t==0) ? b : c * Math.pow(2, 10 * (t/d - 1)) + b;
+ },
+ easeOutExpo: function (x, t, b, c, d) {
+ return (t==d) ? b+c : c * (-Math.pow(2, -10 * t/d) + 1) + b;
+ },
+ easeInOutExpo: function (x, t, b, c, d) {
+ if (t==0) return b;
+ if (t==d) return b+c;
+ if ((t/=d/2) < 1) return c/2 * Math.pow(2, 10 * (t - 1)) + b;
+ return c/2 * (-Math.pow(2, -10 * --t) + 2) + b;
+ },
+ easeInCirc: function (x, t, b, c, d) {
+ return -c * (Math.sqrt(1 - (t/=d)*t) - 1) + b;
+ },
+ easeOutCirc: function (x, t, b, c, d) {
+ return c * Math.sqrt(1 - (t=t/d-1)*t) + b;
+ },
+ easeInOutCirc: function (x, t, b, c, d) {
+ if ((t/=d/2) < 1) return -c/2 * (Math.sqrt(1 - t*t) - 1) + b;
+ return c/2 * (Math.sqrt(1 - (t-=2)*t) + 1) + b;
+ },
+ easeInElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return -(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ },
+ easeOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d)==1) return b+c; if (!p) p=d*.3;
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ return a*Math.pow(2,-10*t) * Math.sin( (t*d-s)*(2*Math.PI)/p ) + c + b;
+ },
+ easeInOutElastic: function (x, t, b, c, d) {
+ var s=1.70158;var p=0;var a=c;
+ if (t==0) return b; if ((t/=d/2)==2) return b+c; if (!p) p=d*(.3*1.5);
+ if (a < Math.abs(c)) { a=c; var s=p/4; }
+ else var s = p/(2*Math.PI) * Math.asin (c/a);
+ if (t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )) + b;
+ return a*Math.pow(2,-10*(t-=1)) * Math.sin( (t*d-s)*(2*Math.PI)/p )*.5 + c + b;
+ },
+ easeInBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*(t/=d)*t*((s+1)*t - s) + b;
+ },
+ easeOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
+ },
+ easeInOutBack: function (x, t, b, c, d, s) {
+ if (s == undefined) s = 1.70158;
+ if ((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
+ return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
+ },
+ easeInBounce: function (x, t, b, c, d) {
+ return c - jQuery.easing.easeOutBounce (x, d-t, 0, c, d) + b;
+ },
+ easeOutBounce: function (x, t, b, c, d) {
+ if ((t/=d) < (1/2.75)) {
+ return c*(7.5625*t*t) + b;
+ } else if (t < (2/2.75)) {
+ return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
+ } else if (t < (2.5/2.75)) {
+ return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
+ } else {
+ return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
+ }
+ },
+ easeInOutBounce: function (x, t, b, c, d) {
+ if (t < d/2) return jQuery.easing.easeInBounce (x, t*2, 0, c, d) * .5 + b;
+ return jQuery.easing.easeOutBounce (x, t*2-d, 0, c, d) * .5 + c*.5 + b;
+ }
+});
+
+
+/*
+|--------------------------------------------------------------------------
+| UItoTop jQuery Plugin 1.1
+| http://www.mattvarone.com/web-design/uitotop-jquery-plugin/
+|--------------------------------------------------------------------------
+*/
+
+(function($){
+ $.fn.UItoTop = function(options) {
+
+ var defaults = {
+ text: 'To Top',
+ min: 200,
+ inDelay:600,
+ outDelay:400,
+ containerID: 'w2btoTop',
+ containerHoverID: 'w2btoTopHover',
+ scrollSpeed: 1200,
+ easingType: 'linear'
+ };
+
+ var settings = $.extend(defaults, options);
+ var containerIDhash = '#' + settings.containerID;
+ var containerHoverIDHash = '#'+settings.containerHoverID;
+
+ $('body').append('<a href="#" id="'+settings.containerID+'">'+settings.text+'</a>');
+ $(containerIDhash).hide().click(function(){
+ $('html, body').animate({scrollTop:0}, settings.scrollSpeed, settings.easingType);
+ $('#'+settings.containerHoverID, this).stop().animate({'opacity': 0 }, settings.inDelay, settings.easingType);
+ return false;
+ })
+ .prepend('<span id="'+settings.containerHoverID+'"></span>')
+ .hover(function() {
+ $(containerHoverIDHash, this).stop().animate({
+ 'opacity': 1
+ }, 600, 'linear');
+ }, function() {
+ $(containerHoverIDHash, this).stop().animate({
+ 'opacity': 0
+ }, 700, 'linear');
+ });
+
+ $(window).scroll(function() {
+ var sd = $(window).scrollTop();
+ if(typeof document.body.style.maxHeight === "undefined") {
+ $(containerIDhash).css({
+ 'position': 'absolute',
+ 'top': $(window).scrollTop() + $(window).height() - 50
+ });
+ }
+ if ( sd > settings.min )
+ $(containerIDhash).fadeIn(settings.inDelay);
+ else
+ $(containerIDhash).fadeOut(settings.Outdelay);
+ });
+
+};
+})(jQuery);
\ No newline at end of file
bryfry.github.com/javascripts/twitter.js
@@ -0,0 +1,92 @@
+(function($){
+ $.fn.getTwitterFeed = function(userid, count, reply){
+ var banner = $(this),
+ feed = banner.find('.feed'),
+ interval = 10000,
+ speed = 500;
+
+ var linkify = function(text){
+ text = text.replace(/(https?:\/\/)([\w\-:;?&=+.%#\/]+)/gi, '<a href="$1$2">$2</a>').replace(/(^|\W)@(\w+)/g, '$1<a href="http://twitter.com/$2">@$2</a>').replace(/(^|\W)#(\w+)/g, '$1<a href="http://search.twitter.com/search?q=%23$2">#$2</a>');
+
+ return text;
+ }
+
+ var relativeDate = function(date){
+ if (navigator.appName === 'Microsoft Internet Explorer') return '';
+
+ var unit = {
+ now: 'Now',
+ minute: '1 min',
+ minutes: ' mins',
+ hour: '1 hr',
+ hours: ' hrs',
+ day: 'Yesterday',
+ days: ' days',
+ week: '1 week',
+ weeks: ' weeks'
+ };
+
+ var current = new Date(),
+ tweet = new Date(date),
+ diff = (((current.getTime() + (1 * 60000)) - tweet.getTime()) / 1000),
+ day_diff = Math.floor(diff / 86400);
+
+ if (day_diff == 0){
+ if (diff < 60) return unit.now;
+ else if (diff < 120) return unit.minute;
+ else if (diff < 3600) return Math.floor(diff / 60) + unit.minutes;
+ else if (diff < 7200) return unit.hour;
+ else if (diff < 86400) return Math.floor(diff / 3600) + unit.hours;
+ else return '';
+ } else if (day_diff == 1) {
+ return unit.day;
+ } else if (day_diff < 7) {
+ return day_diff + unit.days;
+ } else if (day_diff == 7) {
+ return unit.week;
+ } else if (day_diff > 7) {
+ return Math.ceil(day_diff / 7) + unit.weeks;
+ } else {
+ return '';
+ }
+ }
+
+ if ($(window).width() > 600){
+ var url = 'https://api.twitter.com/1/statuses/user_timeline/'+userid+'.json?count='+count+'&exclude_replies='+(reply ? '0' : '1')+'&trim_user=true&callback=?';
+ banner.show();
+ $.getJSON(url, function(json){
+ var length = json.length,
+ fragment = document.createDocumentFragment(),
+ counts = 0,
+ timeout;
+
+ for (var i=0; i<length; i++){
+ var item = document.createElement('li');
+ item.innerHTML = linkify(json[i].text) + '<small>'+relativeDate(json[i].created_at)+'</small>';
+ fragment.appendChild(item);
+ }
+
+ var play = function(){
+ timeout = setTimeout(function(){
+ feed.animate({top: '-='+30}, speed, function(){
+ $(this).append($(this).children().eq(counts).clone());
+ counts++;
+ play();
+ });
+ }, interval);
+ }
+
+ var pause = function(){
+ clearTimeout(timeout);
+ }
+
+ banner.on('mouseenter', pause).on('mouseleave', play)
+ .children('.loading').hide().end()
+ .children('.container').show()
+ .children('.feed').append(fragment);
+
+ play();
+ });
+ }
+ };
+})(jQuery);
\ No newline at end of file
bryfry.github.com/stylesheets/screen.css
@@ -0,0 +1,1 @@
+@font-face{font-family:'FontAwesome';src:url("/font/fontawesome-webfont.eot");src:url("/font/fontawesome-webfont.eot?#iefix") format("embedded-opentype"),url("/font/fontawesome-webfont.woff") format("woff"),url("/font/fontawesome-webfont.ttf") format("truetype"),url("/font/fontawesome-webfont.svgz#FontAwesomeRegular") format("svg"),url("/font/fontawesome-webfont.svg#FontAwesomeRegular") format("svg");font-weight:normal;font-style:normal}*{margin:0;padding:0}body{font-family:'Amethysta', serif;font-weight:300;font-size:18px;background:url("/images/retina_dust.png");color:#444;colori:#666}@media screen and (max-width: 1040px){body{margin:0 20px}}@media screen and (max-width: 600px){body{font-size:13px}}.bBackground{position:fixed;height:100%;width:100%;background:-moz-radial-gradient(50% 50%, farthest-side, #fff, #efefef);background:-webkit-gradient(radial, 50% 50%, 250, 50% 50%, 750, from(#fff), to(#bbb));z-index:-100}h1{font-size:1.8em}h2{font-family:'Fjalla One', sans-serif;font-size:1.5em}h3{font-size:1.3em}a{text-decoration:none;outline-width:0;color:#258fb8}.alignleft{float:left}.alignright{float:right}.clearfix{*zoom:1}.clearfix:after{content:"";display:table;clear:both}.inner{width:800px;margin:0 auto}@media screen and (max-width: 1040px){.inner{width:100%}}#w2btoTop{display:none;text-decoration:none;position:fixed;bottom:10px;right:10px;overflow:hidden;width:51px;height:51px;border:none;text-indent:-999px;background:url(/images/totop.png) no-repeat left top}#w2btoTopHover{background:url(/images/totop.png) no-repeat left -51px;width:51px;height:51px;display:block;overflow:hidden;float:left;opacity:0;-moz-opacity:0;filter:alpha(opacity=0)}#w2btoTop:active,#w2btoTop:focus{outline:none}.basic-alignment.left,article .entry-content img.left,article .entry-content video.left{float:left;margin-right:1.5em}.basic-alignment.right,article .entry-content img.right,article .entry-content video.right{float:right;margin-left:1.5em}.basic-alignment.center,article .entry-content img.center,article .entry-content video.center{display:block;margin:0 auto 1.5em}.basic-alignment.left,article .entry-content img.left,article .entry-content video.left,.basic-alignment.right,article .entry-content img.right,article .entry-content video.right{margin-bottom:.8em}.tooltip{display:inline;position:relative}.tooltip:hover{text-decoration:none}.tooltip:hover:after{background:#111;background:rgba(0,0,0,0.8);border-radius:5px;bottom:18px;color:#fff;content:attr(title);display:block;left:50%;padding:5px 15px;position:absolute;white-space:nowrap;z-index:98}.tooltip:hover:before{border:solid;border-color:#111 transparent;border-width:6px 6px 0 6px;bottom:12px;content:"";display:block;left:75%;position:absolute;z-index:99}.pullquote-right:before,.pullquote-left:before{padding:0;border:none;content:attr(data-pullquote);float:right;width:45%;margin:.5em 0 1em 1.5em;position:relative;top:7px;font-size:1.4em;line-height:1.45em}.pullquote-left:before{float:left;margin:.5em 1.5em 1em 0}#header{padding:20px 0 20px 0}@media screen and (max-width: 1040px){#header{height:auto;position:relative;padding-bottom:10px}}#header a{color:#666;-webkit-transition:color 0.3s;-moz-transition:color 0.3s;-o-transition:color 0.3s;transition:color 0.3s}#header a:hover{color:#258fb8}#header h1{font-family:'Exo', cursive;font-weight:300;font-size:52px}@media screen and (max-width: 1040px){#header h1{float:none}}#headerbg{text-align:center;background:#444;padding:10px 10px;display:table;color:#fff;margin:0 auto;border-radius:5px;font-weight:bold;-webkit-mask-image:-webkit-linear-gradient(#000, rgba(0,0,0,0.9));-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;-ms-backface-visibility:hidden;-o-backface-visibility:hidden;backface-visibility:hidden}#load{display:none;position:absolute;right:50%;top:50%;background:url("/images/loading.gif");width:50px;height:50px;text-indent:-9999em}#social-links li{display:inline-block;width:35px;height:35px;border-radius:35px;margin-top:20px;margin-right:9px;background-color:#ddd;text-align:center;line-height:35px;-webkit-transition:background-color 1s ease-in-out;-moz-transition:background-color 1s ease-in-out;-o-transition:background-color 1s ease-in-out;transition:background-color 1s ease-in-out}#social-links li:hover{background-color:#555}#social-links a{display:inline-block;position:relative;width:100%;height:100%}#social-links a svg{position:absolute}#social-links a .github{top:3px;left:2px}#social-links a .sina-weibo{top:8px;left:6px}#social-links a .tencent-weibo{top:6px;left:4px}#social-links a .twitter{top:2px;left:3px}a.facebook{background:url("/images/social/Facebook.png") center no-repeat}a.facebook:hover{background:url("/images/social/FacebookH.png") center no-repeat}a.github{background:url("/images/social/Github.png") center no-repeat}a.github:hover{background:url("/images/social/GithubH.png") center no-repeat}a.twitter{background:url("/images/social/Twitter.png") center no-repeat}a.twitter:hover{background:url("/images/social/TwitterH.png") center no-repeat}a.google{background:url("/images/social/Picasa.png") center no-repeat}a.google:hover{background:url("/images/social/PicasaH.png") center no-repeat}a.skype{background:url("/images/social/Skype.png") center no-repeat}a.skype:hover{background:url("/images/social/SkypeH.png") center no-repeat}a.linkedin{background:url("/images/social/LinkedIn.png") center no-repeat}a.linkedin:hover{background:url("/images/social/LinkedInH.png") center no-repeat}a.youtube{background:url("/images/social/Youtube.png") center no-repeat}a.youtube:hover{background:url("/images/social/YoutubeH.png") center no-repeat}a.lastfm{background:url("/images/social/LastFM.png") center no-repeat}a.lastfm:hover{background:url("/images/social/LastFMH.png") center no-repeat}#search{display:inline}#search input[type="text"]{background:url("/images/search-dark.png") no-repeat 10px 6px #444;border:0 none;font:bold 12px Arial,Helvetica,Sans-serif;color:#777;width:110px;padding:6px 15px 6px 35px;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;text-shadow:0 2px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;-moz-box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;-webkit-transition:all 0.7s ease 0s;-moz-transition:all 0.7s ease 0s;-o-transition:all 0.7s ease 0s;transition:all 0.7s ease 0s}#search input[type="text"]:focus{width:160px}#dark{display:inline-block;height:70px}#dark #search input[type="text"]{background:url("/images/search-dark.png") no-repeat 10px 6px #444;border:0 none;font:bold 12px Arial,Helvetica,Sans-serif;color:#ddd;width:110px;padding:6px 15px 6px 35px;-webkit-border-radius:20px;-moz-border-radius:20px;border-radius:20px;text-shadow:0 2px 2px rgba(0,0,0,0.3);-webkit-box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;-moz-box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;box-shadow:0 1px 0 rgba(255,255,255,0.1),0 1px 3px rgba(0,0,0,0.2) inset;-webkit-transition:all 0.4s ease 0s;-moz-transition:all 0.4s ease 0s;-o-transition:all 0.4s ease 0s;transition:all 0.4s ease 0s}#dark #search input[type="text"]:focus{width:160px;outline:0}#nav{text-align:center;position:relative;margin:10px auto}ul#nav li{display:inline-block}ul#nav li{list-style-type:none;background-repeat:no-repeat;overflow:hidden;margin-right:1px}ul#nav li a{display:inline-block;width:110px;height:20px;text-align:center;padding-top:5px;padding-bottom:5px;color:#222;font-weight:normal;text-decoration:none;font-family:"Lucida Grande", Arial, Helvetica, sans-serif;text-transform:uppercase;font-size:16px;font-style:normal;text-shadow:1px 1px 10px #222;overflow:hidden}ul#nav li a:hover{color:#fff;font-style:normal;font-weight:normal;background-image:url("/images/hover.png");background-repeat:no-repeat;background-position:center top}ul#nav li a:active{position:relative;top:2px}ul#nav li#active a{color:#FFF;background-image:url("/images/active.png");background-repeat:no-repeat;background-position:center top}#pagenavi{padding:20px 0;height:20px;line-height:20px;position:relative;border-top:1px solid #fff;border-bottom:1px solid #ddd}#pagenavi a:hover{text-decoration:underline}#pagenavi .prev,#pagenavi .next{position:absolute}#pagenavi .prev{padding-left:30px;left:0}#pagenavi .prev:before{content:"\f060";font:1.3em FontAwesome;position:absolute;left:0}#pagenavi .next{padding-right:30px;right:0}#pagenavi .next:before{content:"\f061";font:1.3em FontAwesome;position:absolute;right:0}#pagenavi .center{text-align:center;width:100%;display:block}@media screen and (max-width: 400px){#pagenavi .center{display:none}}article{border-bottom:1px solid #ddd;padding:30px 0;position:relative}@media screen and (max-width: 800px){article{padding-bottom:15px}}@media screen and (max-width: 600px){article{padding:15px 0}}article h2.title{font-family:'Fjalla One', sans-serif;font-size:2em;font-weight:300;line-height:35px;margin-bottom:20px}article h2.title a{color:#666}article .title a{color:#7c7873;-webkit-transition:all 1s ease-in-out;-moz-transition:all 1s ease-in-out;-o-transition:all 1s ease-in-out;transition:all 1s ease-in-out}article .title a:hover{color:#084B8A;text-shadow:3px 3px 12px #888;-webkit-transform:scale(1.3);-moz-transform:scale(1.3)}article .entry-content{line-height:2;text-align:justify}article .entry-content a:hover{text-decoration:underline}article .entry-content .more-link{display:block;margin-top:16px;padding-left:30px;position:relative}article .entry-content .more-link:before{content:"\f061";font:1.3em FontAwesome;line-height:1.6em;position:absolute;left:0}article .entry-content p,article .entry-content blockquote,article .entry-content ul,article .entry-content ol,article .entry-content dl,article .entry-content table,article .entry-content iframe,article .entry-content h1,article .entry-content h2,article .entry-content h3,article .entry-content h4,article .entry-content h5,article .entry-content h6,article .entry-content .video-container{margin-top:10px}article .entry-content ul,article .entry-content ol,article .entry-content dl{margin-left:20px}article .entry-content ul ul,article .entry-content ul ol,article .entry-content ul dl,article .entry-content ol ul,article .entry-content ol ol,article .entry-content ol dl,article .entry-content dl ul,article .entry-content dl ol,article .entry-content dl dl{margin-top:0}article .entry-content strong{font-weight:bold}article .entry-content em{font-style:italic}article .entry-content p{margin-top:10px}article .entry-content h2{font-weight:300;border-bottom:1px solid #ddd;position:relative}article .entry-content h2:before{content:"";position:absolute;bottom:-2px;border-bottom:1px solid #fff;width:100%}article .entry-content img,article .entry-content video{margin:10px 0;max-width:100%;height:auto;-moz-border-radius:0.3em;-webkit-border-radius:0.3em;-o-border-radius:0.3em;-ms-border-radius:0.3em;-khtml-border-radius:0.3em;border-radius:0.3em;-moz-box-shadow:rgba(0,0,0,0.75) 0 1px 4px;-webkit-box-shadow:rgba(0,0,0,0.75) 0 1px 4px;-o-box-shadow:rgba(0,0,0,0.75) 0 1px 4px;box-shadow:rgba(0,0,0,0.75) 0 1px 4px;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;border:#fff 0.3em solid}article .entry-content img.noborder,article .entry-content video.noborder{border:none;box-shadow:none}article .entry-content blockquote{background:#ddd;border-left:5px solid #ccc;padding:15px 20px;margin-top:10px}article .entry-content blockquote>p:first-of-type{margin-top:0}article .entry-content iframe{border:none}article .entry-content table{background:#ddd;border:1px solid #ccc;border-spacing:0;margin-top:10px}article .entry-content table th{background:#ccc;padding:0 15px}article .entry-content table td{text-align:center}article .entry-content table tr:nth-of-type(2n){background:#d5d5d5}article .entry-content .caption{display:block;font-size:0.9em;color:#999;padding-left:25px;position:relative}article .entry-content .caption:before{content:"\f040";color:#ccc;font:1.3em FontAwesome;line-height:1.6em;position:absolute;left:0}article .entry-content .video-container{position:relative;padding-bottom:56.25%;padding-top:30px;height:0;overflow:hidden}article .entry-content .video-container iframe,article .entry-content .video-container object,article .entry-content .video-container embed{position:absolute;top:0;left:0;width:100%;height:100%;margin-top:0}.share{padding:15px 0;border-top:1px solid #fff;border-bottom:1px solid #ddd}@media screen and (max-width: 800px){.post h2.title,.post .entry-content{margin-left:0}}.post .meta{line-height:2;font-size:0.7em;color:#999;width:370px}@media screen and (max-width: 800px){.post .meta{margin-top:15px;position:static;width:auto}}.post .meta a{color:#999;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;transition:0.3s}.post .meta a:hover{color:#666}.post .meta .date,.post .meta .tags,.post .meta .comments{padding-left:30px;position:relative}.post .meta .date:before,.post .meta .tags:before,.post .meta .comments:before{color:#ccc;font:1.3em FontAwesome;line-height:1.6em;position:absolute;left:0}@media screen and (max-width: 800px){.post .meta .date,.post .meta .tags,.post .meta .comments{display:-moz-inline-stack;display:inline-block;vertical-align:middle;*vertical-align:auto;zoom:1;*display:inline;margin-right:30px}}.post .meta .date:before{content:"\f073"}.post .meta .tags:before{content:"\f02c"}.post .meta .comments:before{content:"\f075"}.archives{position:relative}.archives:last-of-type:before{content:"";position:absolute;bottom:0;width:200px;border-top:1px solid #ddd}.archives .year{line-height:35px;width:200px;position:absolute;top:0;padding-top:15px;border-top:1px solid #fff}.archives .year:before{content:"";position:absolute;top:-2px;width:100%;border-top:1px solid #ddd}@media screen and (max-width: 600px){.archives .year{position:relative;width:100%}}.archives article{margin-left:200px;padding:10px 0}@media screen and (max-width: 600px){.archives article{margin-left:0}.archives article:first-of-type{border-top:none;padding-top:30px}}.archives article .title{margin-bottom:0;font-size:25px}.archives article .meta{color:#999;font-size:0.9em;line-height:2;margin-top:10px}@media screen and (max-width: 600px){.archives article .meta{display:none}}.archives article .meta span{margin-right:30px;display:-moz-inline-stack;display:inline-block;vertical-align:middle;*vertical-align:auto;zoom:1;*display:inline}.archives article .meta span:before{color:#ccc;font:1.3em FontAwesome;padding-right:10px}.archives article .meta a{color:#999;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;transition:0.3s}.archives article .meta a:hover{color:#666}.archives article .meta .date:before{content:"\f073"}.archives article .meta .tags:before{content:"\f02c"}.archives article .meta .comments:before{content:"\f075"}#comment{padding:30px 0;border-top:1px solid #fff;border-bottom:1px solid #ddd}#comment h2.title{font-size:25px;font-weight:300;line-height:35px;margin-bottom:20px}footer{padding:20px 0;text-align:center;font-size:0.6em;color:#666}footer a{color:#123}footer a:hover{color:#456}article code,article pre{background:#ddd;border:1px solid #ccc;font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace}article code{font-size:0.9em;padding:1px 3px;margin:0 3px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}article pre{font-size:1/0.9em;line-height:1.5;margin-top:10px;padding:5px 15px;overflow-x:auto;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}article pre code{background:none;border:none;padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}figure.code{background:#ddd;border:1px solid #ccc;margin-top:10px;padding:5px 15px;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}figure.code figcaption{font-size:0.9em;position:relative}figure.code figcaption span{margin:-5px -15px 0;padding:5px 15px;display:block;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(100%, #dddddd));background:-webkit-linear-gradient(top, #cccccc,#dddddd);background:-moz-linear-gradient(top, #cccccc,#dddddd);background:-o-linear-gradient(top, #cccccc,#dddddd);background:linear-gradient(top, #cccccc,#dddddd)}figure.code figcaption span:empty{display:none}figure.code figcaption a{position:absolute;top:5px;right:0}figure.code code,figure.code pre{background:none;border:none;padding:0;margin:0;-webkit-border-radius:0;-moz-border-radius:0;-ms-border-radius:0;-o-border-radius:0;border-radius:0}figure.code .highlight{overflow-x:auto}figure.code .line-numbers{border-right:1px solid #ccc;font-family:Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace;padding-right:15px;text-align:right}figure.code table{border:none;text-align:left;margin-top:0}figure.code table td{text-align:left}figure.code td.code{width:100%;padding-left:15px;overflow-x:auto}.entry-content .gist{background:#ddd;color:#666;padding:30px 15px 5px;margin-top:10px;border:1px solid #ccc;position:relative;overflow:hidden;-webkit-border-radius:5px;-moz-border-radius:5px;-ms-border-radius:5px;-o-border-radius:5px;border-radius:5px}.entry-content .gist .gist-file{margin:0}.entry-content .gist .gist-file .gist-data{background:none;border:none}.entry-content .gist .gist-file .gist-data pre{font:0.9em Menlo,Monaco,"Andale Mono","lucida console","Courier New",monospace;line-height:1.5;text-align:left}.entry-content .gist .gist-file .gist-meta{font:300 0.9em "HelveticaNeue-Light","Helvetica Neue Light","Helvetica Neue",Helvetica,Arial,sans-serif;line-height:1.5;margin:0 -16px -6px;padding:5px 15px;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #dddddd), color-stop(100%, #cccccc));background:-webkit-linear-gradient(top, #dddddd,#cccccc);background:-moz-linear-gradient(top, #dddddd,#cccccc);background:-o-linear-gradient(top, #dddddd,#cccccc);background:linear-gradient(top, #dddddd,#cccccc)}.entry-content .gist .gist-file .gist-meta a{color:#258fb8}.entry-content .gist .gist-file .gist-meta a:first-of-type{position:absolute;top:5px;right:15px;z-index:1}.entry-content .gist .gist-file .gist-meta a:nth-of-type(2){position:absolute;top:0;left:0;padding:5px 15px;width:100%;background:-webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(0%, #cccccc), color-stop(100%, #dddddd));background:-webkit-linear-gradient(top, #cccccc,#dddddd);background:-moz-linear-gradient(top, #cccccc,#dddddd);background:-o-linear-gradient(top, #cccccc,#dddddd);background:linear-gradient(top, #cccccc,#dddddd)}figure.code .c,.gist-highlight .c{color:#93a1a1 !important;font-style:italic !important}figure.code .cm,.gist-highlight .cm{color:#93a1a1 !important;font-style:italic !important}figure.code .cp,.gist-highlight .cp{color:#93a1a1 !important;font-style:italic !important}figure.code .c1,.gist-highlight .c1{color:#93a1a1 !important;font-style:italic !important}figure.code .cs,.gist-highlight .cs{color:#93a1a1 !important;font-weight:bold !important;font-style:italic !important}figure.code .err,.gist-highlight .err{color:#dc322f !important;background:none !important}figure.code .k,.gist-highlight .k{color:#cb4b16 !important}figure.code .o,.gist-highlight .o{color:#586e75 !important;font-weight:bold !important}figure.code .p,.gist-highlight .p{color:#586e75 !important}figure.code .ow,.gist-highlight .ow{color:#2aa198 !important;font-weight:bold !important}figure.code .gd,.gist-highlight .gd{color:#586e75 !important;background-color:#f4c5b6 !important;display:inline-block}figure.code .gd .x,.gist-highlight .gd .x{color:#586e75 !important;background-color:#f1b1a4 !important;display:inline-block}figure.code .ge,.gist-highlight .ge{color:#586e75 !important;font-style:italic !important}figure.code .gh,.gist-highlight .gh{color:#93a1a1 !important}figure.code .gi,.gist-highlight .gi{color:#586e75 !important;background-color:#e5e3b5 !important;display:inline-block}figure.code .gi .x,.gist-highlight .gi .x{color:#586e75 !important;background-color:#cdd088 !important;display:inline-block}figure.code .gs,.gist-highlight .gs{color:#586e75 !important;font-weight:bold !important}figure.code .gu,.gist-highlight .gu{color:#6c71c4 !important}figure.code .kc,.gist-highlight .kc{color:#859900 !important;font-weight:bold !important}figure.code .kd,.gist-highlight .kd{color:#268bd2 !important}figure.code .kp,.gist-highlight .kp{color:#cb4b16 !important;font-weight:bold !important}figure.code .kr,.gist-highlight .kr{color:#d33682 !important;font-weight:bold !important}figure.code .kt,.gist-highlight .kt{color:#2aa198 !important}figure.code .n,.gist-highlight .n{color:#268bd2 !important}figure.code .na,.gist-highlight .na{color:#268bd2 !important}figure.code .nb,.gist-highlight .nb{color:#859900 !important}figure.code .nc,.gist-highlight .nc{color:#d33682 !important}figure.code .no,.gist-highlight .no{color:#b58900 !important}figure.code .nl,.gist-highlight .nl{color:#859900 !important}figure.code .ne,.gist-highlight .ne{color:#268bd2 !important;font-weight:bold !important}figure.code .nf,.gist-highlight .nf{color:#268bd2 !important;font-weight:bold !important}figure.code .nn,.gist-highlight .nn{color:#b58900 !important}figure.code .nt,.gist-highlight .nt{color:#268bd2 !important;font-weight:bold !important}figure.code .nx,.gist-highlight .nx{color:#b58900 !important}figure.code .vg,.gist-highlight .vg{color:#268bd2 !important}figure.code .vi,.gist-highlight .vi{color:#268bd2 !important}figure.code .nv,.gist-highlight .nv{color:#268bd2 !important}figure.code .mf,.gist-highlight .mf{color:#2aa198 !important}figure.code .m,.gist-highlight .m{color:#2aa198 !important}figure.code .mh,.gist-highlight .mh{color:#2aa198 !important}figure.code .mi,.gist-highlight .mi{color:#2aa198 !important}figure.code .s,.gist-highlight .s{color:#2aa198 !important}figure.code .sd,.gist-highlight .sd{color:#2aa198 !important}figure.code .s2,.gist-highlight .s2{color:#2aa198 !important}figure.code .se,.gist-highlight .se{color:#dc322f !important}figure.code .si,.gist-highlight .si{color:#268bd2 !important}figure.code .sr,.gist-highlight .sr{color:#2aa198 !important}figure.code .s1,.gist-highlight .s1{color:#2aa198 !important}#banner{color:#999;padding:30px 0;line-height:30px;text-align:center;position:relative;display:none;border-top:1px solid #fff;border-bottom:1px solid #ddd}#banner:hover a{color:#258fb8}#banner a{color:#999;-webkit-transition:0.3s;-moz-transition:0.3s;-o-transition:0.3s;transition:0.3s}#banner a:hover{text-decoration:underline}#banner small{position:absolute;right:0;bottom:0}#banner .loading{background:url('/images/loading_pacman.gif?1362486150') center no-repeat;text-indent:-9999px}#banner .container{height:30px;overflow:hidden;position:relative;display:none}#banner .container .feed{list-style:none;position:absolute;top:0;width:100%}#banner .container .feed li{position:relative}#banner .container .feed li small{position:absolute;right:0}/* fancyBox v2.0.6 fancyapps.com | fancyapps.com/fancybox/#license */.fancybox-tmp iframe,.fancybox-tmp object{vertical-align:top;padding:0;margin:0}.fancybox-wrap{position:absolute;top:0;left:0;z-index:8020}.fancybox-skin{position:relative;padding:0;margin:0;background:#f9f9f9;color:#444;text-shadow:none;-webkit-border-radius:4px;-moz-border-radius:4px;-ms-border-radius:4px;-o-border-radius:4px;border-radius:4px}.fancybox-opened{z-index:8030}.fancybox-opened .fancybox-skin{-webkit-box-shadow:0 10px 25px rgba(0,0,0,0.5);-moz-box-shadow:0 10px 25px rgba(0,0,0,0.5);box-shadow:0 10px 25px rgba(0,0,0,0.5)}.fancybox-outer,.fancybox-inner{padding:0;margin:0;position:relative;outline:none}.fancybox-inner{overflow:hidden}.fancybox-type-iframe .fancybox-inner{-webkit-overflow-scrolling:touch}.fancybox-error{color:#444;font:14px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;margin:0;padding:10px}.fancybox-image,.fancybox-iframe{display:block;width:100%;height:100%;border:0;padding:0;margin:0;vertical-align:top}.fancybox-image{max-width:100%;max-height:100%}#fancybox-loading,.fancybox-close,.fancybox-prev span,.fancybox-next span{background-image:url('/images/fancybox/fancybox_sprite.png?1362486150')}#fancybox-loading{position:fixed;top:50%;left:50%;margin-top:-22px;margin-left:-22px;background-position:0 -108px;opacity:0.8;cursor:pointer;z-index:8020}#fancybox-loading div{width:44px;height:44px;background:url('/images/fancybox/fancybox_loading.gif?1362486150') center center no-repeat}.fancybox-close{position:absolute;top:-18px;right:-18px;width:36px;height:36px;cursor:pointer;z-index:8040}.fancybox-nav{position:absolute;top:0;width:40%;height:100%;cursor:pointer;background:transparent url('/images/fancybox/blank.gif?1362486150');-webkit-tap-highlight-color:rgba(0,0,0,0);z-index:8040}.fancybox-prev{left:0}.fancybox-next{right:0}.fancybox-nav span{position:absolute;top:50%;width:36px;height:34px;margin-top:-18px;cursor:pointer;z-index:8040;visibility:hidden}.fancybox-prev span{left:20px;background-position:0 -36px}.fancybox-next span{right:20px;background-position:0 -72px}.fancybox-nav:hover span{visibility:visible}.fancybox-tmp{position:absolute;top:-9999px;left:-9999px;padding:0;overflow:visible;visibility:hidden}#fancybox-overlay{position:absolute;top:0;left:0;overflow:hidden;display:none;z-index:8010;background:#000}#fancybox-overlay.overlay-fixed{position:fixed;bottom:0;right:0}.fancybox-title{visibility:hidden;font:normal 13px/20px "Helvetica Neue",Helvetica,Arial,sans-serif;position:relative;text-shadow:none;z-index:8050}.fancybox-opened .fancybox-title{visibility:visible}.fancybox-title-float-wrap{position:absolute;bottom:0;right:50%;margin-bottom:-35px;z-index:8030;text-align:center}.fancybox-title-float-wrap .child{display:inline-block;margin-right:-100%;padding:2px 20px;background:transparent;background:rgba(0,0,0,0.8);text-shadow:0 1px 2px #222;color:#FFF;font-weight:bold;line-height:24px;white-space:nowrap;-webkit-border-radius:15px;-moz-border-radius:15px;-ms-border-radius:15px;-o-border-radius:15px;border-radius:15px}.fancybox-title-outside-wrap{position:relative;margin-top:10px;color:#fff}.fancybox-title-inside-wrap{margin-top:10px}.fancybox-title-over-wrap{position:absolute;bottom:0;left:0;color:#fff;padding:10px;background:#000;background:rgba(0,0,0,0.8)}body{-webkit-backface-visibility:hidden}.animated{-webkit-animation-duration:1s;-moz-animation-duration:1s;-o-animation-duration:1s;animation-duration:1s;-webkit-animation-fill-mode:both;-moz-animation-fill-mode:both;-o-animation-fill-mode:both;animation-fill-mode:both}.animated.hinge{-webkit-animation-duration:2s;-moz-animation-duration:2s;-o-animation-duration:2s;animation-duration:2s}@-webkit-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@-moz-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@-o-keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}@keyframes flash{0%,50%,100%{opacity:1}25%,75%{opacity:0}}.flash{-webkit-animation-name:flash;-moz-animation-name:flash;-o-animation-name:flash;animation-name:flash}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px)}}@-moz-keyframes shake{0%,100%{-moz-transform:translateX(0)}10%,30%,50%,70%,90%{-moz-transform:translateX(-10px)}20%,40%,60%,80%{-moz-transform:translateX(10px)}}@-o-keyframes shake{0%,100%{-o-transform:translateX(0)}10%,30%,50%,70%,90%{-o-transform:translateX(-10px)}20%,40%,60%,80%{-o-transform:translateX(10px)}}@keyframes shake{0%,100%{transform:translateX(0)}10%,30%,50%,70%,90%{transform:translateX(-10px)}20%,40%,60%,80%{transform:translateX(10px)}}.shake{-webkit-animation-name:shake;-moz-animation-name:shake;-o-animation-name:shake;animation-name:shake}@-webkit-keyframes bounce{0%,20%,50%,80%,100%{-webkit-transform:translateY(0)}40%{-webkit-transform:translateY(-30px)}60%{-webkit-transform:translateY(-15px)}}@-moz-keyframes bounce{0%,20%,50%,80%,100%{-moz-transform:translateY(0)}40%{-moz-transform:translateY(-30px)}60%{-moz-transform:translateY(-15px)}}@-o-keyframes bounce{0%,20%,50%,80%,100%{-o-transform:translateY(0)}40%{-o-transform:translateY(-30px)}60%{-o-transform:translateY(-15px)}}@keyframes bounce{0%,20%,50%,80%,100%{transform:translateY(0)}40%{transform:translateY(-30px)}60%{transform:translateY(-15px)}}.bounce{-webkit-animation-name:bounce;-moz-animation-name:bounce;-o-animation-name:bounce;animation-name:bounce}@-webkit-keyframes tada{0%{-webkit-transform:scale(1)}10%,20%{-webkit-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-webkit-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-webkit-transform:scale(1.1) rotate(-3deg)}100%{-webkit-transform:scale(1) rotate(0)}}@-moz-keyframes tada{0%{-moz-transform:scale(1)}10%,20%{-moz-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-moz-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-moz-transform:scale(1.1) rotate(-3deg)}100%{-moz-transform:scale(1) rotate(0)}}@-o-keyframes tada{0%{-o-transform:scale(1)}10%,20%{-o-transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{-o-transform:scale(1.1) rotate(3deg)}40%,60%,80%{-o-transform:scale(1.1) rotate(-3deg)}100%{-o-transform:scale(1) rotate(0)}}@keyframes tada{0%{transform:scale(1)}10%,20%{transform:scale(0.9) rotate(-3deg)}30%,50%,70%,90%{transform:scale(1.1) rotate(3deg)}40%,60%,80%{transform:scale(1.1) rotate(-3deg)}100%{transform:scale(1) rotate(0)}}.tada{-webkit-animation-name:tada;-moz-animation-name:tada;-o-animation-name:tada;animation-name:tada}@-webkit-keyframes swing{20%,40%,60%,80%,100%{-webkit-transform-origin:top center}20%{-webkit-transform:rotate(15deg)}40%{-webkit-transform:rotate(-10deg)}60%{-webkit-transform:rotate(5deg)}80%{-webkit-transform:rotate(-5deg)}100%{-webkit-transform:rotate(0deg)}}@-moz-keyframes swing{20%{-moz-transform:rotate(15deg)}40%{-moz-transform:rotate(-10deg)}60%{-moz-transform:rotate(5deg)}80%{-moz-transform:rotate(-5deg)}100%{-moz-transform:rotate(0deg)}}@-o-keyframes swing{20%{-o-transform:rotate(15deg)}40%{-o-transform:rotate(-10deg)}60%{-o-transform:rotate(5deg)}80%{-o-transform:rotate(-5deg)}100%{-o-transform:rotate(0deg)}}@keyframes swing{20%{transform:rotate(15deg)}40%{transform:rotate(-10deg)}60%{transform:rotate(5deg)}80%{transform:rotate(-5deg)}100%{transform:rotate(0deg)}}.swing{-webkit-transform-origin:top center;-moz-transform-origin:top center;-o-transform-origin:top center;transform-origin:top center;-webkit-animation-name:swing;-moz-animation-name:swing;-o-animation-name:swing;animation-name:swing}@-webkit-keyframes wobble{0%{-webkit-transform:translateX(0%)}15%{-webkit-transform:translateX(-25%) rotate(-5deg)}30%{-webkit-transform:translateX(20%) rotate(3deg)}45%{-webkit-transform:translateX(-15%) rotate(-3deg)}60%{-webkit-transform:translateX(10%) rotate(2deg)}75%{-webkit-transform:translateX(-5%) rotate(-1deg)}100%{-webkit-transform:translateX(0%)}}@-moz-keyframes wobble{0%{-moz-transform:translateX(0%)}15%{-moz-transform:translateX(-25%) rotate(-5deg)}30%{-moz-transform:translateX(20%) rotate(3deg)}45%{-moz-transform:translateX(-15%) rotate(-3deg)}60%{-moz-transform:translateX(10%) rotate(2deg)}75%{-moz-transform:translateX(-5%) rotate(-1deg)}100%{-moz-transform:translateX(0%)}}@-o-keyframes wobble{0%{-o-transform:translateX(0%)}15%{-o-transform:translateX(-25%) rotate(-5deg)}30%{-o-transform:translateX(20%) rotate(3deg)}45%{-o-transform:translateX(-15%) rotate(-3deg)}60%{-o-transform:translateX(10%) rotate(2deg)}75%{-o-transform:translateX(-5%) rotate(-1deg)}100%{-o-transform:translateX(0%)}}@keyframes wobble{0%{transform:translateX(0%)}15%{transform:translateX(-25%) rotate(-5deg)}30%{transform:translateX(20%) rotate(3deg)}45%{transform:translateX(-15%) rotate(-3deg)}60%{transform:translateX(10%) rotate(2deg)}75%{transform:translateX(-5%) rotate(-1deg)}100%{transform:translateX(0%)}}.wobble{-webkit-animation-name:wobble;-moz-animation-name:wobble;-o-animation-name:wobble;animation-name:wobble}@-webkit-keyframes pulse{0%{-webkit-transform:scale(1)}50%{-webkit-transform:scale(1.1)}100%{-webkit-transform:scale(1)}}@-moz-keyframes pulse{0%{-moz-transform:scale(1)}50%{-moz-transform:scale(1.1)}100%{-moz-transform:scale(1)}}@-o-keyframes pulse{0%{-o-transform:scale(1)}50%{-o-transform:scale(1.1)}100%{-o-transform:scale(1)}}@keyframes pulse{0%{transform:scale(1)}50%{transform:scale(1.1)}100%{transform:scale(1)}}.pulse{-webkit-animation-name:pulse;-moz-animation-name:pulse;-o-animation-name:pulse;animation-name:pulse}@-webkit-keyframes flip{0%{-webkit-transform:perspective(400px) rotateY(0);-webkit-animation-timing-function:ease-out}40%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(170deg);-webkit-animation-timing-function:ease-out}50%{-webkit-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-webkit-animation-timing-function:ease-in}80%{-webkit-transform:perspective(400px) rotateY(360deg) scale(0.95);-webkit-animation-timing-function:ease-in}100%{-webkit-transform:perspective(400px) scale(1);-webkit-animation-timing-function:ease-in}}@-moz-keyframes flip{0%{-moz-transform:perspective(400px) rotateY(0);-moz-animation-timing-function:ease-out}40%{-moz-transform:perspective(400px) translateZ(150px) rotateY(170deg);-moz-animation-timing-function:ease-out}50%{-moz-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-moz-animation-timing-function:ease-in}80%{-moz-transform:perspective(400px) rotateY(360deg) scale(0.95);-moz-animation-timing-function:ease-in}100%{-moz-transform:perspective(400px) scale(1);-moz-animation-timing-function:ease-in}}@-o-keyframes flip{0%{-o-transform:perspective(400px) rotateY(0);-o-animation-timing-function:ease-out}40%{-o-transform:perspective(400px) translateZ(150px) rotateY(170deg);-o-animation-timing-function:ease-out}50%{-o-transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);-o-animation-timing-function:ease-in}80%{-o-transform:perspective(400px) rotateY(360deg) scale(0.95);-o-animation-timing-function:ease-in}100%{-o-transform:perspective(400px) scale(1);-o-animation-timing-function:ease-in}}@keyframes flip{0%{transform:perspective(400px) rotateY(0);animation-timing-function:ease-out}40%{transform:perspective(400px) translateZ(150px) rotateY(170deg);animation-timing-function:ease-out}50%{transform:perspective(400px) translateZ(150px) rotateY(190deg) scale(1);animation-timing-function:ease-in}80%{transform:perspective(400px) rotateY(360deg) scale(0.95);animation-timing-function:ease-in}100%{transform:perspective(400px) scale(1);animation-timing-function:ease-in}}.flip{-webkit-backface-visibility:visible !important;-webkit-animation-name:flip;-moz-backface-visibility:visible !important;-moz-animation-name:flip;-o-backface-visibility:visible !important;-o-animation-name:flip;backface-visibility:visible !important;animation-name:flip}@-webkit-keyframes flipInX{0%{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateX(-10deg)}70%{-webkit-transform:perspective(400px) rotateX(10deg)}100%{-webkit-transform:perspective(400px) rotateX(0deg);opacity:1}}@-moz-keyframes flipInX{0%{-moz-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-moz-transform:perspective(400px) rotateX(-10deg)}70%{-moz-transform:perspective(400px) rotateX(10deg)}100%{-moz-transform:perspective(400px) rotateX(0deg);opacity:1}}@-o-keyframes flipInX{0%{-o-transform:perspective(400px) rotateX(90deg);opacity:0}40%{-o-transform:perspective(400px) rotateX(-10deg)}70%{-o-transform:perspective(400px) rotateX(10deg)}100%{-o-transform:perspective(400px) rotateX(0deg);opacity:1}}@keyframes flipInX{0%{transform:perspective(400px) rotateX(90deg);opacity:0}40%{transform:perspective(400px) rotateX(-10deg)}70%{transform:perspective(400px) rotateX(10deg)}100%{transform:perspective(400px) rotateX(0deg);opacity:1}}.flipInX{-webkit-backface-visibility:visible !important;-webkit-animation-name:flipInX;-moz-backface-visibility:visible !important;-moz-animation-name:flipInX;-o-backface-visibility:visible !important;-o-animation-name:flipInX;backface-visibility:visible !important;animation-name:flipInX}@-webkit-keyframes flipOutX{0%{-webkit-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateX(90deg);opacity:0}}@-moz-keyframes flipOutX{0%{-moz-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-moz-transform:perspective(400px) rotateX(90deg);opacity:0}}@-o-keyframes flipOutX{0%{-o-transform:perspective(400px) rotateX(0deg);opacity:1}100%{-o-transform:perspective(400px) rotateX(90deg);opacity:0}}@keyframes flipOutX{0%{transform:perspective(400px) rotateX(0deg);opacity:1}100%{transform:perspective(400px) rotateX(90deg);opacity:0}}.flipOutX{-webkit-animation-name:flipOutX;-webkit-backface-visibility:visible !important;-moz-animation-name:flipOutX;-moz-backface-visibility:visible !important;-o-animation-name:flipOutX;-o-backface-visibility:visible !important;animation-name:flipOutX;backface-visibility:visible !important}@-webkit-keyframes flipInY{0%{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-webkit-transform:perspective(400px) rotateY(-10deg)}70%{-webkit-transform:perspective(400px) rotateY(10deg)}100%{-webkit-transform:perspective(400px) rotateY(0deg);opacity:1}}@-moz-keyframes flipInY{0%{-moz-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-moz-transform:perspective(400px) rotateY(-10deg)}70%{-moz-transform:perspective(400px) rotateY(10deg)}100%{-moz-transform:perspective(400px) rotateY(0deg);opacity:1}}@-o-keyframes flipInY{0%{-o-transform:perspective(400px) rotateY(90deg);opacity:0}40%{-o-transform:perspective(400px) rotateY(-10deg)}70%{-o-transform:perspective(400px) rotateY(10deg)}100%{-o-transform:perspective(400px) rotateY(0deg);opacity:1}}@keyframes flipInY{0%{transform:perspective(400px) rotateY(90deg);opacity:0}40%{transform:perspective(400px) rotateY(-10deg)}70%{transform:perspective(400px) rotateY(10deg)}100%{transform:perspective(400px) rotateY(0deg);opacity:1}}.flipInY{-webkit-backface-visibility:visible !important;-webkit-animation-name:flipInY;-moz-backface-visibility:visible !important;-moz-animation-name:flipInY;-o-backface-visibility:visible !important;-o-animation-name:flipInY;backface-visibility:visible !important;animation-name:flipInY}@-webkit-keyframes flipOutY{0%{-webkit-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-webkit-transform:perspective(400px) rotateY(90deg);opacity:0}}@-moz-keyframes flipOutY{0%{-moz-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-moz-transform:perspective(400px) rotateY(90deg);opacity:0}}@-o-keyframes flipOutY{0%{-o-transform:perspective(400px) rotateY(0deg);opacity:1}100%{-o-transform:perspective(400px) rotateY(90deg);opacity:0}}@keyframes flipOutY{0%{transform:perspective(400px) rotateY(0deg);opacity:1}100%{transform:perspective(400px) rotateY(90deg);opacity:0}}.flipOutY{-webkit-backface-visibility:visible !important;-webkit-animation-name:flipOutY;-moz-backface-visibility:visible !important;-moz-animation-name:flipOutY;-o-backface-visibility:visible !important;-o-animation-name:flipOutY;backface-visibility:visible !important;animation-name:flipOutY}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-moz-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@-o-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.fadeIn{-webkit-animation-name:fadeIn;-moz-animation-name:fadeIn;-o-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes fadeInUp{0%{opacity:0;-webkit-transform:translateY(20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUp{0%{opacity:0;-moz-transform:translateY(20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUp{0%{opacity:0;-o-transform:translateY(20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUp{0%{opacity:0;transform:translateY(20px)}100%{opacity:1;transform:translateY(0)}}.fadeInUp{-webkit-animation-name:fadeInUp;-moz-animation-name:fadeInUp;-o-animation-name:fadeInUp;animation-name:fadeInUp}@-webkit-keyframes fadeInDown{0%{opacity:0;-webkit-transform:translateY(-20px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDown{0%{opacity:0;-moz-transform:translateY(-20px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInDown{0%{opacity:0;-o-transform:translateY(-20px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInDown{0%{opacity:0;transform:translateY(-20px)}100%{opacity:1;transform:translateY(0)}}.fadeInDown{-webkit-animation-name:fadeInDown;-moz-animation-name:fadeInDown;-o-animation-name:fadeInDown;animation-name:fadeInDown}@-webkit-keyframes fadeInLeft{0%{opacity:0;-webkit-transform:translateX(-20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInLeft{0%{opacity:0;-moz-transform:translateX(-20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInLeft{0%{opacity:0;-o-transform:translateX(-20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInLeft{0%{opacity:0;transform:translateX(-20px)}100%{opacity:1;transform:translateX(0)}}.fadeInLeft{-webkit-animation-name:fadeInLeft;-moz-animation-name:fadeInLeft;-o-animation-name:fadeInLeft;animation-name:fadeInLeft}@-webkit-keyframes fadeInRight{0%{opacity:0;-webkit-transform:translateX(20px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRight{0%{opacity:0;-moz-transform:translateX(20px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRight{0%{opacity:0;-o-transform:translateX(20px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRight{0%{opacity:0;transform:translateX(20px)}100%{opacity:1;transform:translateX(0)}}.fadeInRight{-webkit-animation-name:fadeInRight;-moz-animation-name:fadeInRight;-o-animation-name:fadeInRight;animation-name:fadeInRight}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInUpBig{0%{opacity:0;-moz-transform:translateY(2000px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInUpBig{0%{opacity:0;-o-transform:translateY(2000px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;transform:translateY(2000px)}100%{opacity:1;transform:translateY(0)}}.fadeInUpBig{-webkit-animation-name:fadeInUpBig;-moz-animation-name:fadeInUpBig;-o-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes fadeInDownBig{0%{opacity:0;-webkit-transform:translateY(-2000px)}100%{opacity:1;-webkit-transform:translateY(0)}}@-moz-keyframes fadeInDownBig{0%{opacity:0;-moz-transform:translateY(-2000px)}100%{opacity:1;-moz-transform:translateY(0)}}@-o-keyframes fadeInDownBig{0%{opacity:0;-o-transform:translateY(-2000px)}100%{opacity:1;-o-transform:translateY(0)}}@keyframes fadeInDownBig{0%{opacity:0;transform:translateY(-2000px)}100%{opacity:1;transform:translateY(0)}}.fadeInDownBig{-webkit-animation-name:fadeInDownBig;-moz-animation-name:fadeInDownBig;-o-animation-name:fadeInDownBig;animation-name:fadeInDownBig}@-webkit-keyframes fadeInLeftBig{0%{opacity:0;-webkit-transform:translateX(-2000px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInLeftBig{0%{opacity:0;-moz-transform:translateX(-2000px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInLeftBig{0%{opacity:0;-o-transform:translateX(-2000px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInLeftBig{0%{opacity:0;transform:translateX(-2000px)}100%{opacity:1;transform:translateX(0)}}.fadeInLeftBig{-webkit-animation-name:fadeInLeftBig;-moz-animation-name:fadeInLeftBig;-o-animation-name:fadeInLeftBig;animation-name:fadeInLeftBig}@-webkit-keyframes fadeInRightBig{0%{opacity:0;-webkit-transform:translateX(2000px)}100%{opacity:1;-webkit-transform:translateX(0)}}@-moz-keyframes fadeInRightBig{0%{opacity:0;-moz-transform:translateX(2000px)}100%{opacity:1;-moz-transform:translateX(0)}}@-o-keyframes fadeInRightBig{0%{opacity:0;-o-transform:translateX(2000px)}100%{opacity:1;-o-transform:translateX(0)}}@keyframes fadeInRightBig{0%{opacity:0;transform:translateX(2000px)}100%{opacity:1;transform:translateX(0)}}.fadeInRightBig{-webkit-animation-name:fadeInRightBig;-moz-animation-name:fadeInRightBig;-o-animation-name:fadeInRightBig;animation-name:fadeInRightBig}@-webkit-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-moz-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@-o-keyframes fadeOut{0%{opacity:1}100%{opacity:0}}@keyframes fadeOut{0%{opacity:1}100%{opacity:0}}.fadeOut{-webkit-animation-name:fadeOut;-moz-animation-name:fadeOut;-o-animation-name:fadeOut;animation-name:fadeOut}@-webkit-keyframes fadeOutUp{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-20px)}}@-moz-keyframes fadeOutUp{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-20px)}}@-o-keyframes fadeOutUp{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(-20px)}}@keyframes fadeOutUp{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-20px)}}.fadeOutUp{-webkit-animation-name:fadeOutUp;-moz-animation-name:fadeOutUp;-o-animation-name:fadeOutUp;animation-name:fadeOutUp}@-webkit-keyframes fadeOutDown{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(20px)}}@-moz-keyframes fadeOutDown{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(20px)}}@-o-keyframes fadeOutDown{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(20px)}}@keyframes fadeOutDown{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(20px)}}.fadeOutDown{-webkit-animation-name:fadeOutDown;-moz-animation-name:fadeOutDown;-o-animation-name:fadeOutDown;animation-name:fadeOutDown}@-webkit-keyframes fadeOutLeft{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-20px)}}@-moz-keyframes fadeOutLeft{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-20px)}}@-o-keyframes fadeOutLeft{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-20px)}}@keyframes fadeOutLeft{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(-20px)}}.fadeOutLeft{-webkit-animation-name:fadeOutLeft;-moz-animation-name:fadeOutLeft;-o-animation-name:fadeOutLeft;animation-name:fadeOutLeft}@-webkit-keyframes fadeOutRight{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(20px)}}@-moz-keyframes fadeOutRight{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(20px)}}@-o-keyframes fadeOutRight{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(20px)}}@keyframes fadeOutRight{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(20px)}}.fadeOutRight{-webkit-animation-name:fadeOutRight;-moz-animation-name:fadeOutRight;-o-animation-name:fadeOutRight;animation-name:fadeOutRight}@-webkit-keyframes fadeOutUpBig{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(-2000px)}}@-moz-keyframes fadeOutUpBig{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(-2000px)}}@-o-keyframes fadeOutUpBig{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(-2000px)}}@keyframes fadeOutUpBig{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(-2000px)}}.fadeOutUpBig{-webkit-animation-name:fadeOutUpBig;-moz-animation-name:fadeOutUpBig;-o-animation-name:fadeOutUpBig;animation-name:fadeOutUpBig}@-webkit-keyframes fadeOutDownBig{0%{opacity:1;-webkit-transform:translateY(0)}100%{opacity:0;-webkit-transform:translateY(2000px)}}@-moz-keyframes fadeOutDownBig{0%{opacity:1;-moz-transform:translateY(0)}100%{opacity:0;-moz-transform:translateY(2000px)}}@-o-keyframes fadeOutDownBig{0%{opacity:1;-o-transform:translateY(0)}100%{opacity:0;-o-transform:translateY(2000px)}}@keyframes fadeOutDownBig{0%{opacity:1;transform:translateY(0)}100%{opacity:0;transform:translateY(2000px)}}.fadeOutDownBig{-webkit-animation-name:fadeOutDownBig;-moz-animation-name:fadeOutDownBig;-o-animation-name:fadeOutDownBig;animation-name:fadeOutDownBig}@-webkit-keyframes fadeOutLeftBig{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(-2000px)}}@-moz-keyframes fadeOutLeftBig{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(-2000px)}}@-o-keyframes fadeOutLeftBig{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(-2000px)}}@keyframes fadeOutLeftBig{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(-2000px)}}.fadeOutLeftBig{-webkit-animation-name:fadeOutLeftBig;-moz-animation-name:fadeOutLeftBig;-o-animation-name:fadeOutLeftBig;animation-name:fadeOutLeftBig}@-webkit-keyframes fadeOutRightBig{0%{opacity:1;-webkit-transform:translateX(0)}100%{opacity:0;-webkit-transform:translateX(2000px)}}@-moz-keyframes fadeOutRightBig{0%{opacity:1;-moz-transform:translateX(0)}100%{opacity:0;-moz-transform:translateX(2000px)}}@-o-keyframes fadeOutRightBig{0%{opacity:1;-o-transform:translateX(0)}100%{opacity:0;-o-transform:translateX(2000px)}}@keyframes fadeOutRightBig{0%{opacity:1;transform:translateX(0)}100%{opacity:0;transform:translateX(2000px)}}.fadeOutRightBig{-webkit-animation-name:fadeOutRightBig;-moz-animation-name:fadeOutRightBig;-o-animation-name:fadeOutRightBig;animation-name:fadeOutRightBig}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(0.3)}50%{opacity:1;-webkit-transform:scale(1.05)}70%{-webkit-transform:scale(0.9)}100%{-webkit-transform:scale(1)}}@-moz-keyframes bounceIn{0%{opacity:0;-moz-transform:scale(0.3)}50%{opacity:1;-moz-transform:scale(1.05)}70%{-moz-transform:scale(0.9)}100%{-moz-transform:scale(1)}}@-o-keyframes bounceIn{0%{opacity:0;-o-transform:scale(0.3)}50%{opacity:1;-o-transform:scale(1.05)}70%{-o-transform:scale(0.9)}100%{-o-transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;transform:scale(0.3)}50%{opacity:1;transform:scale(1.05)}70%{transform:scale(0.9)}100%{transform:scale(1)}}.bounceIn{-webkit-animation-name:bounceIn;-moz-animation-name:bounceIn;-o-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceInUp{0%{opacity:0;-webkit-transform:translateY(2000px)}60%{opacity:1;-webkit-transform:translateY(-30px)}80%{-webkit-transform:translateY(10px)}100%{-webkit-transform:translateY(0)}}@-moz-keyframes bounceInUp{0%{opacity:0;-moz-transform:translateY(2000px)}60%{opacity:1;-moz-transform:translateY(-30px)}80%{-moz-transform:translateY(10px)}100%{-moz-transform:translateY(0)}}@-o-keyframes bounceInUp{0%{opacity:0;-o-transform:translateY(2000px)}60%{opacity:1;-o-transform:translateY(-30px)}80%{-o-transform:translateY(10px)}100%{-o-transform:translateY(0)}}@keyframes bounceInUp{0%{opacity:0;transform:translateY(2000px)}60%{opacity:1;transform:translateY(-30px)}80%{transform:translateY(10px)}100%{transform:translateY(0)}}.bounceInUp{-webkit-animation-name:bounceInUp;-moz-animation-name:bounceInUp;-o-animation-name:bounceInUp;animation-name:bounceInUp}@-webkit-keyframes bounceInDown{0%{opacity:0;-webkit-transform:translateY(-2000px)}60%{opacity:1;-webkit-transform:translateY(30px)}80%{-webkit-transform:translateY(-10px)}100%{-webkit-transform:translateY(0)}}@-moz-keyframes bounceInDown{0%{opacity:0;-moz-transform:translateY(-2000px)}60%{opacity:1;-moz-transform:translateY(30px)}80%{-moz-transform:translateY(-10px)}100%{-moz-transform:translateY(0)}}@-o-keyframes bounceInDown{0%{opacity:0;-o-transform:translateY(-2000px)}60%{opacity:1;-o-transform:translateY(30px)}80%{-o-transform:translateY(-10px)}100%{-o-transform:translateY(0)}}@keyframes bounceInDown{0%{opacity:0;transform:translateY(-2000px)}60%{opacity:1;transform:translateY(30px)}80%{transform:translateY(-10px)}100%{transform:translateY(0)}}.bounceInDown{-webkit-animation-name:bounceInDown;-moz-animation-name:bounceInDown;-o-animation-name:bounceInDown;animation-name:bounceInDown}@-webkit-keyframes bounceInLeft{0%{opacity:0;-webkit-transform:translateX(-2000px)}60%{opacity:1;-webkit-transform:translateX(30px)}80%{-webkit-transform:translateX(-10px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes bounceInLeft{0%{opacity:0;-moz-transform:translateX(-2000px)}60%{opacity:1;-moz-transform:translateX(30px)}80%{-moz-transform:translateX(-10px)}100%{-moz-transform:translateX(0)}}@-o-keyframes bounceInLeft{0%{opacity:0;-o-transform:translateX(-2000px)}60%{opacity:1;-o-transform:translateX(30px)}80%{-o-transform:translateX(-10px)}100%{-o-transform:translateX(0)}}@keyframes bounceInLeft{0%{opacity:0;transform:translateX(-2000px)}60%{opacity:1;transform:translateX(30px)}80%{transform:translateX(-10px)}100%{transform:translateX(0)}}.bounceInLeft{-webkit-animation-name:bounceInLeft;-moz-animation-name:bounceInLeft;-o-animation-name:bounceInLeft;animation-name:bounceInLeft}@-webkit-keyframes bounceInRight{0%{opacity:0;-webkit-transform:translateX(2000px)}60%{opacity:1;-webkit-transform:translateX(-30px)}80%{-webkit-transform:translateX(10px)}100%{-webkit-transform:translateX(0)}}@-moz-keyframes bounceInRight{0%{opacity:0;-moz-transform:translateX(2000px)}60%{opacity:1;-moz-transform:translateX(-30px)}80%{-moz-transform:translateX(10px)}100%{-moz-transform:translateX(0)}}@-o-keyframes bounceInRight{0%{opacity:0;-o-transform:translateX(2000px)}60%{opacity:1;-o-transform:translateX(-30px)}80%{-o-transform:translateX(10px)}100%{-o-transform:translateX(0)}}@keyframes bounceInRight{0%{opacity:0;transform:translateX(2000px)}60%{opacity:1;transform:translateX(-30px)}80%{transform:translateX(10px)}100%{transform:translateX(0)}}.bounceInRight{-webkit-animation-name:bounceInRight;-moz-animation-name:bounceInRight;-o-animation-name:bounceInRight;animation-name:bounceInRight}@-webkit-keyframes bounceOut{0%{-webkit-transform:scale(1)}25%{-webkit-transform:scale(0.95)}50%{opacity:1;-webkit-transform:scale(1.1)}100%{opacity:0;-webkit-transform:scale(0.3)}}@-moz-keyframes bounceOut{0%{-moz-transform:scale(1)}25%{-moz-transform:scale(0.95)}50%{opacity:1;-moz-transform:scale(1.1)}100%{opacity:0;-moz-transform:scale(0.3)}}@-o-keyframes bounceOut{0%{-o-transform:scale(1)}25%{-o-transform:scale(0.95)}50%{opacity:1;-o-transform:scale(1.1)}100%{opacity:0;-o-transform:scale(0.3)}}@keyframes bounceOut{0%{transform:scale(1)}25%{transform:scale(0.95)}50%{opacity:1;transform:scale(1.1)}100%{opacity:0;transform:scale(0.3)}}.bounceOut{-webkit-animation-name:bounceOut;-moz-animation-name:bounceOut;-o-animation-name:bounceOut;animation-name:bounceOut}@-webkit-keyframes bounceOutUp{0%{-webkit-transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(20px)}100%{opacity:0;-webkit-transform:translateY(-2000px)}}@-moz-keyframes bounceOutUp{0%{-moz-transform:translateY(0)}20%{opacity:1;-moz-transform:translateY(20px)}100%{opacity:0;-moz-transform:translateY(-2000px)}}@-o-keyframes bounceOutUp{0%{-o-transform:translateY(0)}20%{opacity:1;-o-transform:translateY(20px)}100%{opacity:0;-o-transform:translateY(-2000px)}}@keyframes bounceOutUp{0%{transform:translateY(0)}20%{opacity:1;transform:translateY(20px)}100%{opacity:0;transform:translateY(-2000px)}}.bounceOutUp{-webkit-animation-name:bounceOutUp;-moz-animation-name:bounceOutUp;-o-animation-name:bounceOutUp;animation-name:bounceOutUp}@-webkit-keyframes bounceOutDown{0%{-webkit-transform:translateY(0)}20%{opacity:1;-webkit-transform:translateY(-20px)}100%{opacity:0;-webkit-transform:translateY(2000px)}}@-moz-keyframes bounceOutDown{0%{-moz-transform:translateY(0)}20%{opacity:1;-moz-transform:translateY(-20px)}100%{opacity:0;-moz-transform:translateY(2000px)}}@-o-keyframes bounceOutDown{0%{-o-transform:translateY(0)}20%{opacity:1;-o-transform:translateY(-20px)}100%{opacity:0;-o-transform:translateY(2000px)}}@keyframes bounceOutDown{0%{transform:translateY(0)}20%{opacity:1;transform:translateY(-20px)}100%{opacity:0;transform:translateY(2000px)}}.bounceOutDown{-webkit-animation-name:bounceOutDown;-moz-animation-name:bounceOutDown;-o-animation-name:bounceOutDown;animation-name:bounceOutDown}@-webkit-keyframes bounceOutLeft{0%{-webkit-transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(20px)}100%{opacity:0;-webkit-transform:translateX(-2000px)}}@-moz-keyframes bounceOutLeft{0%{-moz-transform:translateX(0)}20%{opacity:1;-moz-transform:translateX(20px)}100%{opacity:0;-moz-transform:translateX(-2000px)}}@-o-keyframes bounceOutLeft{0%{-o-transform:translateX(0)}20%{opacity:1;-o-transform:translateX(20px)}100%{opacity:0;-o-transform:translateX(-2000px)}}@keyframes bounceOutLeft{0%{transform:translateX(0)}20%{opacity:1;transform:translateX(20px)}100%{opacity:0;transform:translateX(-2000px)}}.bounceOutLeft{-webkit-animation-name:bounceOutLeft;-moz-animation-name:bounceOutLeft;-o-animation-name:bounceOutLeft;animation-name:bounceOutLeft}@-webkit-keyframes bounceOutRight{0%{-webkit-transform:translateX(0)}20%{opacity:1;-webkit-transform:translateX(-20px)}100%{opacity:0;-webkit-transform:translateX(2000px)}}@-moz-keyframes bounceOutRight{0%{-moz-transform:translateX(0)}20%{opacity:1;-moz-transform:translateX(-20px)}100%{opacity:0;-moz-transform:translateX(2000px)}}@-o-keyframes bounceOutRight{0%{-o-transform:translateX(0)}20%{opacity:1;-o-transform:translateX(-20px)}100%{opacity:0;-o-transform:translateX(2000px)}}@keyframes bounceOutRight{0%{transform:translateX(0)}20%{opacity:1;transform:translateX(-20px)}100%{opacity:0;transform:translateX(2000px)}}.bounceOutRight{-webkit-animation-name:bounceOutRight;-moz-animation-name:bounceOutRight;-o-animation-name:bounceOutRight;animation-name:bounceOutRight}@-webkit-keyframes rotateIn{0%{-webkit-transform-origin:center center;-webkit-transform:rotate(-200deg);opacity:0}100%{-webkit-transform-origin:center center;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateIn{0%{-moz-transform-origin:center center;-moz-transform:rotate(-200deg);opacity:0}100%{-moz-transform-origin:center center;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateIn{0%{-o-transform-origin:center center;-o-transform:rotate(-200deg);opacity:0}100%{-o-transform-origin:center center;-o-transform:rotate(0);opacity:1}}@keyframes rotateIn{0%{transform-origin:center center;transform:rotate(-200deg);opacity:0}100%{transform-origin:center center;transform:rotate(0);opacity:1}}.rotateIn{-webkit-animation-name:rotateIn;-moz-animation-name:rotateIn;-o-animation-name:rotateIn;animation-name:rotateIn}@-webkit-keyframes rotateInUpLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInUpLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(90deg);opacity:0}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInUpLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(90deg);opacity:0}100%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInUpLeft{0%{transform-origin:left bottom;transform:rotate(90deg);opacity:0}100%{transform-origin:left bottom;transform:rotate(0);opacity:1}}.rotateInUpLeft{-webkit-animation-name:rotateInUpLeft;-moz-animation-name:rotateInUpLeft;-o-animation-name:rotateInUpLeft;animation-name:rotateInUpLeft}@-webkit-keyframes rotateInDownLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInDownLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(-90deg);opacity:0}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInDownLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(-90deg);opacity:0}100%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInDownLeft{0%{transform-origin:left bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:left bottom;transform:rotate(0);opacity:1}}.rotateInDownLeft{-webkit-animation-name:rotateInDownLeft;-moz-animation-name:rotateInDownLeft;-o-animation-name:rotateInDownLeft;animation-name:rotateInDownLeft}@-webkit-keyframes rotateInUpRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(-90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInUpRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(-90deg);opacity:0}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInUpRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(-90deg);opacity:0}100%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInUpRight{0%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}.rotateInUpRight{-webkit-animation-name:rotateInUpRight;-moz-animation-name:rotateInUpRight;-o-animation-name:rotateInUpRight;animation-name:rotateInUpRight}@-webkit-keyframes rotateInDownRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(90deg);opacity:0}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}}@-moz-keyframes rotateInDownRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(90deg);opacity:0}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}}@-o-keyframes rotateInDownRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(90deg);opacity:0}100%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}}@keyframes rotateInDownRight{0%{transform-origin:right bottom;transform:rotate(90deg);opacity:0}100%{transform-origin:right bottom;transform:rotate(0);opacity:1}}.rotateInDownRight{-webkit-animation-name:rotateInDownRight;-moz-animation-name:rotateInDownRight;-o-animation-name:rotateInDownRight;animation-name:rotateInDownRight}@-webkit-keyframes rotateOut{0%{-webkit-transform-origin:center center;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:center center;-webkit-transform:rotate(200deg);opacity:0}}@-moz-keyframes rotateOut{0%{-moz-transform-origin:center center;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:center center;-moz-transform:rotate(200deg);opacity:0}}@-o-keyframes rotateOut{0%{-o-transform-origin:center center;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:center center;-o-transform:rotate(200deg);opacity:0}}@keyframes rotateOut{0%{transform-origin:center center;transform:rotate(0);opacity:1}100%{transform-origin:center center;transform:rotate(200deg);opacity:0}}.rotateOut{-webkit-animation-name:rotateOut;-moz-animation-name:rotateOut;-o-animation-name:rotateOut;animation-name:rotateOut}@-webkit-keyframes rotateOutUpLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(-90deg);opacity:0}}@-moz-keyframes rotateOutUpLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(-90deg);opacity:0}}@-o-keyframes rotateOutUpLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:left bottom;-o-transform:rotate(-90deg);opacity:0}}@keyframes rotateOutUpLeft{0%{transform-origin:left bottom;transform:rotate(0);opacity:1}100%{transform-origin:left bottom;transform:rotate(-90deg);opacity:0}}.rotateOutUpLeft{-webkit-animation-name:rotateOutUpLeft;-moz-animation-name:rotateOutUpLeft;-o-animation-name:rotateOutUpLeft;animation-name:rotateOutUpLeft}@-webkit-keyframes rotateOutDownLeft{0%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:left bottom;-webkit-transform:rotate(90deg);opacity:0}}@-moz-keyframes rotateOutDownLeft{0%{-moz-transform-origin:left bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:left bottom;-moz-transform:rotate(90deg);opacity:0}}@-o-keyframes rotateOutDownLeft{0%{-o-transform-origin:left bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:left bottom;-o-transform:rotate(90deg);opacity:0}}@keyframes rotateOutDownLeft{0%{transform-origin:left bottom;transform:rotate(0);opacity:1}100%{transform-origin:left bottom;transform:rotate(90deg);opacity:0}}.rotateOutDownLeft{-webkit-animation-name:rotateOutDownLeft;-moz-animation-name:rotateOutDownLeft;-o-animation-name:rotateOutDownLeft;animation-name:rotateOutDownLeft}@-webkit-keyframes rotateOutUpRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(90deg);opacity:0}}@-moz-keyframes rotateOutUpRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(90deg);opacity:0}}@-o-keyframes rotateOutUpRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:right bottom;-o-transform:rotate(90deg);opacity:0}}@keyframes rotateOutUpRight{0%{transform-origin:right bottom;transform:rotate(0);opacity:1}100%{transform-origin:right bottom;transform:rotate(90deg);opacity:0}}.rotateOutUpRight{-webkit-animation-name:rotateOutUpRight;-moz-animation-name:rotateOutUpRight;-o-animation-name:rotateOutUpRight;animation-name:rotateOutUpRight}@-webkit-keyframes rotateOutDownRight{0%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(0);opacity:1}100%{-webkit-transform-origin:right bottom;-webkit-transform:rotate(-90deg);opacity:0}}@-moz-keyframes rotateOutDownRight{0%{-moz-transform-origin:right bottom;-moz-transform:rotate(0);opacity:1}100%{-moz-transform-origin:right bottom;-moz-transform:rotate(-90deg);opacity:0}}@-o-keyframes rotateOutDownRight{0%{-o-transform-origin:right bottom;-o-transform:rotate(0);opacity:1}100%{-o-transform-origin:right bottom;-o-transform:rotate(-90deg);opacity:0}}@keyframes rotateOutDownRight{0%{transform-origin:right bottom;transform:rotate(0);opacity:1}100%{transform-origin:right bottom;transform:rotate(-90deg);opacity:0}}.rotateOutDownRight{-webkit-animation-name:rotateOutDownRight;-moz-animation-name:rotateOutDownRight;-o-animation-name:rotateOutDownRight;animation-name:rotateOutDownRight}@-webkit-keyframes hinge{0%{-webkit-transform:rotate(0);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}20%,60%{-webkit-transform:rotate(80deg);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}40%{-webkit-transform:rotate(60deg);-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}80%{-webkit-transform:rotate(60deg) translateY(0);opacity:1;-webkit-transform-origin:top left;-webkit-animation-timing-function:ease-in-out}100%{-webkit-transform:translateY(700px);opacity:0}}@-moz-keyframes hinge{0%{-moz-transform:rotate(0);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}20%,60%{-moz-transform:rotate(80deg);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}40%{-moz-transform:rotate(60deg);-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}80%{-moz-transform:rotate(60deg) translateY(0);opacity:1;-moz-transform-origin:top left;-moz-animation-timing-function:ease-in-out}100%{-moz-transform:translateY(700px);opacity:0}}@-o-keyframes hinge{0%{-o-transform:rotate(0);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}20%,60%{-o-transform:rotate(80deg);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}40%{-o-transform:rotate(60deg);-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}80%{-o-transform:rotate(60deg) translateY(0);opacity:1;-o-transform-origin:top left;-o-animation-timing-function:ease-in-out}100%{-o-transform:translateY(700px);opacity:0}}@keyframes hinge{0%{transform:rotate(0);transform-origin:top left;animation-timing-function:ease-in-out}20%,60%{transform:rotate(80deg);transform-origin:top left;animation-timing-function:ease-in-out}40%{transform:rotate(60deg);transform-origin:top left;animation-timing-function:ease-in-out}80%{transform:rotate(60deg) translateY(0);opacity:1;transform-origin:top left;animation-timing-function:ease-in-out}100%{transform:translateY(700px);opacity:0}}.hinge{-webkit-animation-name:hinge;-moz-animation-name:hinge;-o-animation-name:hinge;animation-name:hinge}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg)}}@-moz-keyframes rollIn{0%{opacity:0;-moz-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-moz-transform:translateX(0px) rotate(0deg)}}@-o-keyframes rollIn{0%{opacity:0;-o-transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-o-transform:translateX(0px) rotate(0deg)}}@keyframes rollIn{0%{opacity:0;transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;transform:translateX(0px) rotate(0deg)}}.rollIn{-webkit-animation-name:rollIn;-moz-animation-name:rollIn;-o-animation-name:rollIn;animation-name:rollIn}@-webkit-keyframes rollOut{0%{opacity:1;-webkit-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-webkit-transform:translateX(100%) rotate(120deg)}}@-moz-keyframes rollOut{0%{opacity:1;-moz-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-moz-transform:translateX(100%) rotate(120deg)}}@-o-keyframes rollOut{0%{opacity:1;-o-transform:translateX(0px) rotate(0deg)}100%{opacity:0;-o-transform:translateX(100%) rotate(120deg)}}@keyframes rollOut{0%{opacity:1;transform:translateX(0px) rotate(0deg)}100%{opacity:0;transform:translateX(100%) rotate(120deg)}}.rollOut{-webkit-animation-name:rollOut;-moz-animation-name:rollOut;-o-animation-name:rollOut;animation-name:rollOut}@-webkit-keyframes lightSpeedIn{0%{-webkit-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-webkit-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-webkit-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-webkit-transform:translateX(0%) skewX(0deg);opacity:1}}@-moz-keyframes lightSpeedIn{0%{-moz-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-moz-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-moz-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-moz-transform:translateX(0%) skewX(0deg);opacity:1}}@-o-keyframes lightSpeedIn{0%{-o-transform:translateX(100%) skewX(-30deg);opacity:0}60%{-o-transform:translateX(-20%) skewX(30deg);opacity:1}80%{-o-transform:translateX(0%) skewX(-15deg);opacity:1}100%{-o-transform:translateX(0%) skewX(0deg);opacity:1}}@keyframes lightSpeedIn{0%{transform:translateX(100%) skewX(-30deg);opacity:0}60%{transform:translateX(-20%) skewX(30deg);opacity:1}80%{transform:translateX(0%) skewX(-15deg);opacity:1}100%{transform:translateX(0%) skewX(0deg);opacity:1}}.lightSpeedIn{-webkit-animation-name:lightSpeedIn;-moz-animation-name:lightSpeedIn;-o-animation-name:lightSpeedIn;animation-name:lightSpeedIn;-webkit-animation-timing-function:ease-out;-moz-animation-timing-function:ease-out;-o-animation-timing-function:ease-out;animation-timing-function:ease-out}.animated.lightSpeedIn{-webkit-animation-duration:0.5s;-moz-animation-duration:0.5s;-o-animation-duration:0.5s;animation-duration:0.5s}@-webkit-keyframes lightSpeedOut{0%{-webkit-transform:translateX(0%) skewX(0deg);opacity:1}100%{-webkit-transform:translateX(100%) skewX(-30deg);opacity:0}}@-moz-keyframes lightSpeedOut{0%{-moz-transform:translateX(0%) skewX(0deg);opacity:1}100%{-moz-transform:translateX(100%) skewX(-30deg);opacity:0}}@-o-keyframes lightSpeedOut{0%{-o-transform:translateX(0%) skewX(0deg);opacity:1}100%{-o-transform:translateX(100%) skewX(-30deg);opacity:0}}@keyframes lightSpeedOut{0%{transform:translateX(0%) skewX(0deg);opacity:1}100%{transform:translateX(100%) skewX(-30deg);opacity:0}}.lightSpeedOut{-webkit-animation-name:lightSpeedOut;-moz-animation-name:lightSpeedOut;-o-animation-name:lightSpeedOut;animation-name:lightSpeedOut;-webkit-animation-timing-function:ease-in;-moz-animation-timing-function:ease-in;-o-animation-timing-function:ease-in;animation-timing-function:ease-in}.animated.lightSpeedOut{-webkit-animation-duration:0.25s;-moz-animation-duration:0.25s;-o-animation-duration:0.25s;animation-duration:0.25s}@-webkit-keyframes wiggle{0%{-webkit-transform:skewX(9deg)}10%{-webkit-transform:skewX(-8deg)}20%{-webkit-transform:skewX(7deg)}30%{-webkit-transform:skewX(-6deg)}40%{-webkit-transform:skewX(5deg)}50%{-webkit-transform:skewX(-4deg)}60%{-webkit-transform:skewX(3deg)}70%{-webkit-transform:skewX(-2deg)}80%{-webkit-transform:skewX(1deg)}90%{-webkit-transform:skewX(0deg)}100%{-webkit-transform:skewX(0deg)}}@-moz-keyframes wiggle{0%{-moz-transform:skewX(9deg)}10%{-moz-transform:skewX(-8deg)}20%{-moz-transform:skewX(7deg)}30%{-moz-transform:skewX(-6deg)}40%{-moz-transform:skewX(5deg)}50%{-moz-transform:skewX(-4deg)}60%{-moz-transform:skewX(3deg)}70%{-moz-transform:skewX(-2deg)}80%{-moz-transform:skewX(1deg)}90%{-moz-transform:skewX(0deg)}100%{-moz-transform:skewX(0deg)}}@-o-keyframes wiggle{0%{-o-transform:skewX(9deg)}10%{-o-transform:skewX(-8deg)}20%{-o-transform:skewX(7deg)}30%{-o-transform:skewX(-6deg)}40%{-o-transform:skewX(5deg)}50%{-o-transform:skewX(-4deg)}60%{-o-transform:skewX(3deg)}70%{-o-transform:skewX(-2deg)}80%{-o-transform:skewX(1deg)}90%{-o-transform:skewX(0deg)}100%{-o-transform:skewX(0deg)}}@keyframes wiggle{0%{transform:skewX(9deg)}10%{transform:skewX(-8deg)}20%{transform:skewX(7deg)}30%{transform:skewX(-6deg)}40%{transform:skewX(5deg)}50%{transform:skewX(-4deg)}60%{transform:skewX(3deg)}70%{transform:skewX(-2deg)}80%{transform:skewX(1deg)}90%{transform:skewX(0deg)}100%{transform:skewX(0deg)}}.wiggle{-webkit-animation-name:wiggle;-moz-animation-name:wiggle;-o-animation-name:wiggle;animation-name:wiggle;-webkit-animation-timing-function:ease-in;-moz-animation-timing-function:ease-in;-o-animation-timing-function:ease-in;animation-timing-function:ease-in}.animated.wiggle{-webkit-animation-duration:0.75s;-moz-animation-duration:0.75s;-o-animation-duration:0.75s;animation-duration:0.75s}
bryfry.github.com/atom.xml
@@ -0,0 +1,328 @@
+<?xml version="1.0" encoding="utf-8"?>
+<feed xmlns="http://www.w3.org/2005/Atom">
+
+ <title><![CDATA[BryFry]]></title>
+ <link href="http://bryfry.github.com/atom.xml" rel="self"/>
+ <link href="http://bryfry.github.com/"/>
+ <updated>2013-03-05T07:22:42-05:00</updated>
+ <id>http://bryfry.github.com/</id>
+ <author>
+ <name><![CDATA[bryfry]]></name>
+
+ </author>
+ <generator uri="http://octopress.org/">Octopress</generator>
+
+
+ <entry>
+ <title type="html"><![CDATA[Move Minecraft Spawn with Python]]></title>
+ <link href="http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/"/>
+ <updated>2012-04-29T21:54:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/uubl0.png" width="150" height="150" title="Minecraft" ></p>
+
+<p>The setup for this post is that in a vanilla Minecraft server there
+isn’t a way to set the protection size to <code>0</code> (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.</p>
+
+<p>To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a></p>
+
+<figure class='code'><figcaption><span>spawn-move.py</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">from</span> <span class="nn">nbt</span> <span class="kn">import</span> <span class="o">*</span>
+</span><span class='line'><span class="n">level</span> <span class="o">=</span> <span class="n">nbt</span><span class="o">.</span><span class="n">NBTFile</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">,</span><span class="s">'rb'</span><span class="p">)</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnX"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newx</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnY"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newy</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnZ"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newz</span>
+</span><span class='line'><span class="k">print</span><span class="p">(</span><span class="n">level</span><span class="o">.</span><span class="n">pretty_tree</span><span class="p">())</span> <span class="c"># show changes</span>
+</span><span class='line'><span class="n">level</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">)</span>
+</span><span class='line'><span class="nb">exit</span><span class="p">()</span>
+</span></code></pre></td></tr></table></div></figure>
+
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[On Hacking: Larsson's Folly]]></title>
+ <link href="http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/"/>
+ <updated>2011-12-07T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR’s</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone ‘hacking’ case and illegal and unethical journalistic practices in the light of the historic “Chiquita Phone Hacking Scandal”. The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had ‘hacked’ Chiquita’s phone systems and this fact was revealed after the publication. The result, “The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories.”</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:</p>
+
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote>
+
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets’ Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their ‘informant’ was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Namecoin on Ubuntu 11.10]]></title>
+ <link href="http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/"/>
+ <updated>2011-11-26T00:00:00-05:00</updated>
+ <id>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64</id>
+ <content type="html"><![CDATA[<p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install git build-essential libssl-dev <span class="se">\</span>
+</span><span class='line'>libdb4.7++-dev libboost-dev libboost-system-dev <span class="se">\</span>
+</span><span class='line'>libboost-filesystem-dev libboost-program-options-dev <span class="se">\</span>
+</span><span class='line'>libboost-thread-dev libglibmm-2.4-dev
+</span><span class='line'>git clone git://github.com/vinced/namecoin.git
+</span><span class='line'><span class="nb">cd </span>namecoin/src
+</span><span class='line'>make -f makefile.unix <span class="nv">USE_UPNP</span><span class="o">=</span>
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+<!--more-->
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libssl</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>In file included from auxpow.cpp:4:0:
+</span><span class='line'>headers.h:37:28: fatal error: openssl/buffer.h: No such file or directoy
+</span><span class='line'>compilation terminated.
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libssl</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libssl-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libdb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>In file included from auxpow.cpp:4:0:
+</span><span class='line'>headers.h:43:20: fatal error: db_cxx.h: No such file or directory
+</span><span class='line'>compilation terminated.
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libdb</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libdb4.7++-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>If that fails …
+For some reason libdb4.7++-dev is not in the 11.10 server repositories, probably because the 4.7 and 4.7++ dev libraries have some conflicts. My workaround was to get 4.7++ and then manually install the 4.7++-dev.deb from launchpad. This is unstable and apt-get -f install will remove 4.7++-dev but for the compilation I didn’t have any extra issues. When I ran the install on my desktop 11.10 libdb4.7++-dev was in the repositories so you only get this error 11.10 server :|.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>wget http://launchpadlibrarian.net/66419156/libdb4.7%2B%2B-dev_4.7.25-10ubuntu1_amd64.deb
+</span><span class='line'>sudo dpkg -i --force-all libdb4.7++-dev_4.7.25-10ubuntu1_amd64.deb
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Compilation error - libboost</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>/usr/bin/ld: cannot find -lboost_system
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_filesystem
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_program_options
+</span><span class='line'>/usr/bin/ld: cannot find -lboost_thread
+</span><span class='line'>/usr/bin/ld: cannot find -lgthread-2.0
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+<figure class='code'><figcaption><span>Solution - libbost</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install libboost-system-dev
+</span><span class='line'>sudo apt-get install libboost-filesystem-dev
+</span><span class='line'>sudo apt-get install libboost-program-options-dev
+</span><span class='line'>sudo apt-get install libboost-thread-dev
+</span><span class='line'>sudo apt-get install libglibmm-2.4-dev
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Resources used:
+<a
+href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Bluish Coder</a></p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[Moving Window Buttons back to the right in Ubuntu 10.04+]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/"/>
+ <updated>2011-06-10T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu</id>
+ <content type="html"><![CDATA[<p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># move windows back to the right side in Ubuntu 10.04+</span>
+</span><span class='line'><span class="nv">$ </span>gconftool-2 --set /apps/metacity/general/button_layout <span class="nb">type </span>string menu:minimize,maximize,close
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+]]></content>
+ </entry>
+
+ <entry>
+ <title type="html"><![CDATA[EFF Tor Challenge + Amazon EC2 Free Usage Tier]]></title>
+ <link href="http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/"/>
+ <updated>2011-06-01T00:00:00-04:00</updated>
+ <id>http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier</id>
+ <content type="html"><![CDATA[<p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you’ll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+<span class='line-number'>9</span>
+<span class='line-number'>10</span>
+<span class='line-number'>11</span>
+<span class='line-number'>12</span>
+<span class='line-number'>13</span>
+<span class='line-number'>14</span>
+<span class='line-number'>15</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># replace with your new key name and ec2 address.</span>
+</span><span class='line'>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>sudo apt-get upgrade
+</span><span class='line'>
+</span><span class='line'><span class="c"># add the tor project repository</span>
+</span><span class='line'>sudo apt-add-repository <span class="se">\</span>
+</span><span class='line'> <span class="s1">'deb http://deb.torproject.org/torproject.org maverick main'</span>
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>
+</span><span class='line'><span class="c"># install tor</span>
+</span><span class='line'>sudo apt-get install tor tor-geoipdb
+</span><span class='line'>
+</span><span class='line'><span class="c"># make a backup of the standard config file</span>
+</span><span class='line'>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<figure class='code'><figcaption><span>/etc/tor/torrc</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>SocksPort 0 # we are not going to make local connections, aka a simple relay
+</span><span class='line'>ORPort 9001 # what port to advertise for incoming Tor connections
+</span><span class='line'>Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+</span><span class='line'>BandwidthRate 300 KB
+</span><span class='line'>BandwidthBurst 350 KB
+</span><span class='line'>AccountingStart month 1 00:00
+</span><span class='line'>AccountingMax 3 GB
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>screen -S tor
+</span><span class='line'>/usr/sbin/tor
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node’s nickname.</p>
+
+<p>When your done don’t forget to submit your new node’s nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF’s Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+]]></content>
+ </entry>
+
+</feed>
bryfry.github.com/index.html
@@ -0,0 +1,418 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="The setup for this post is that in a vanilla Minecraft server there
+isn’t a way to set the protection size to 0 (yes, I know bukkit can do …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+
+
+
+ <article class="post">
+ <h2 class="title">
+
+ <a href="/blog/2012/04/29/move-minecraft-spawn-with-python/">
+
+ Move Minecraft Spawn with Python</a>
+ </h2>
+ <div class="entry-content">
+ <p><img class="right" src="http://i.imgur.com/uubl0.png" width="150" height="150" title="Minecraft" ></p>
+
+<p>The setup for this post is that in a vanilla Minecraft server there
+isn’t a way to set the protection size to <code>0</code> (yes, I know bukkit can do
+this but, meh). ย This makes having the spawn in the middle of a nice
+area with shared chests, smelting, etc. a pain. ย So I wanted to move the
+spawn but I didnโt want to have to download the whole world, open it
+with a map editor, and then re-upload the whole thing again. ย Especially
+since I know the values are just stored inside the level.dat. ย So, below
+is how I used twoolieโs python NBT interface to move the spawn on our
+server.</p>
+
+<p>To install NBT, grab it from either <a
+href='https://github.com/twoolie/NBT'>github</a> or <a
+href='http://pypi.python.org/pypi/NBT'>pypi</a></p>
+
+<figure class='code'><figcaption><span>spawn-move.py</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+</pre></td><td class='code'><pre><code class='python'><span class='line'><span class="kn">from</span> <span class="nn">nbt</span> <span class="kn">import</span> <span class="o">*</span>
+</span><span class='line'><span class="n">level</span> <span class="o">=</span> <span class="n">nbt</span><span class="o">.</span><span class="n">NBTFile</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">,</span><span class="s">'rb'</span><span class="p">)</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnX"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newx</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnY"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newy</span>
+</span><span class='line'><span class="n">level</span><span class="p">[</span><span class="s">"Data"</span><span class="p">][</span><span class="s">"SpawnZ"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">newz</span>
+</span><span class='line'><span class="k">print</span><span class="p">(</span><span class="n">level</span><span class="o">.</span><span class="n">pretty_tree</span><span class="p">())</span> <span class="c"># show changes</span>
+</span><span class='line'><span class="n">level</span><span class="o">.</span><span class="n">write_file</span><span class="p">(</span><span class="s">'/<insert.path.here>/world/level.dat'</span><span class="p">)</span>
+</span><span class='line'><span class="nb">exit</span><span class="p">()</span>
+</span></code></pre></td></tr></table></div></figure>
+
+
+
+
+ </div>
+
+<div class="meta">
+
+</div>
+</article>
+
+
+ <article class="post">
+ <h2 class="title">
+
+ <a href="/blog/2011/12/07/on-hacking-larssons-folly/">
+
+ On Hacking: Larsson’s Folly</a>
+ </h2>
+ <div class="entry-content">
+ <p><img class="right" src="http://i.imgur.com/a7jUo.jpg"></p>
+
+<p>This post is a tangent that I was thinking about this past week when I was listening to <a href="http://www.npr.org/">NPR’s</a> <a href="http://www.onthemedia.org/">On The Media</a>. The specific segment, <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/">The Chiquita Phone Hacking Scandal</a>, examines the current News of the World phone ‘hacking’ case and illegal and unethical journalistic practices in the light of the historic “Chiquita Phone Hacking Scandal”. The segment is worth while and I highly recommend listening to it if you have a few minutes (or you can read the transcript <a href="http://www.onthemedia.org/2011/nov/25/chiquita-phone-hacking-scandal/transcript/">here</a>).</p>
+
+<p>At any rate here is a nice little synopses: Chiquita was doing bad things and the Enquirer published the findings of reporter Mike Gallagher. Unbeknownst to the Enquirer, Gallagher had ‘hacked’ Chiquita’s phone systems and this fact was revealed after the publication. The result, “The Enquirer fired Gallagher, relocated its editor, agreed to pay Chiquita millions of dollars, apologized repeatedly and recanted the stories.”</p>
+
+<p>The take away nugget is this, summarized by Kelly McBride of The Poynter Institute:</p>
+
+<blockquote><p>The lesson is when your methods for gathering information are dishonest, the information you gather is suspect. And that case is the perfect lesson in that. No one has challenged the findings of the newspaper. Yet, nobody talks about that as a great investigative piece. They talk about it as an ethical scandal.</p></blockquote>
+
+
+<p>Okay, so that all makes sense. But then I had a secondary thought and which gave me flashbacks to Steig Larssons Milenium Trilogy (The Girl With the Dragon Tattoo, The Girl Who Played With Fire and The Girl Who Kicked the Hornets’ Nest): In each book, the main character hacks into the antagonists machines and the information she gathers almost becomes a deus ex machina saving her and the rest of the journalist protagonists. This is great for a fictional story and it draws attention to the ease and power of information gathering. However, I do not think Mr. Larsson addressed the seriousness of how screwed they all would be if their ‘informant’ was actually revealed to be a hacker, illegally gaining access to the information.</p>
+
+<p>If there were one take away it would be this: All fiction aside, hacking will never save your ass, it will burn it.</p>
+
+
+
+ </div>
+
+<div class="meta">
+
+</div>
+</article>
+
+
+ <article class="post">
+ <h2 class="title">
+
+ <a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/">
+
+ Namecoin on Ubuntu 11.10</a>
+ </h2>
+ <div class="entry-content">
+ <p><img class="right" src="http://i.imgur.com/RJTsK.jpg" width="150" height="150" title="dot-bit" ></p>
+
+<p>So I setout to try a setup of <a href="https://github.com/vinced/namecoin">Namecoin</a>, the sibling to <a href="http://bitcoin.org/">Bitcoin</a> that is used for <a href="https://bitcointalk.org/?topic=6017.0">name/value storage</a> and is the foundation for the <a href="http://dot-bit.org/Main_Page">dot-bit project</a>. The dependencies were not explicitly laid out in the README so I wrote up the things I found I needed. Hopefully someone else doing the same thing will not have to do as much searching as I did.</p>
+
+<ul>
+<li>Setup: namecoin version 0.3.24.64-beta</li>
+<li>Target: Ubuntu 11.10 (x64), Amazon EC2 (Server) and Desktop</li>
+</ul>
+
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>sudo apt-get install git build-essential libssl-dev <span class="se">\</span>
+</span><span class='line'>libdb4.7++-dev libboost-dev libboost-system-dev <span class="se">\</span>
+</span><span class='line'>libboost-filesystem-dev libboost-program-options-dev <span class="se">\</span>
+</span><span class='line'>libboost-thread-dev libglibmm-2.4-dev
+</span><span class='line'>git clone git://github.com/vinced/namecoin.git
+</span><span class='line'><span class="nb">cd </span>namecoin/src
+</span><span class='line'>make -f makefile.unix <span class="nv">USE_UPNP</span><span class="o">=</span>
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>I built my install list from the headers that were missing from a mostly generic 11.10 install. The list of the errors I came across are below. Shoot me a line if anyone comes across other packages that need added to the list.</p>
+
+<p>If you get this far you can start running namecoind which is well documented here: <a href="http://www.bluishcoder.co.nz/2011/05/12/namecoin-a-dns-alternative-based-on-bitcoin.html">Post Install</a></p>
+
+<p>If you have compilation errors you can read more after the jump.</p>
+
+
+
+ <a href="/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/" class="more-link">Read on →</a>
+ </div>
+
+<div class="meta">
+
+</div>
+</article>
+
+
+ <article class="post">
+ <h2 class="title">
+
+ <a href="/blog/2011/06/10/moving-window-buttons-ubuntu/">
+
+ Moving Window Buttons back to the right in Ubuntu 10.04+</a>
+ </h2>
+ <div class="entry-content">
+ <p>I have gone and looked this up too many times. So for you and me both here is the long and short of it. The simple command that will move the windows buttons (minimize, maximize, and close) back to the right side, where all proper window buttons should be.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># move windows back to the right side in Ubuntu 10.04+</span>
+</span><span class='line'><span class="nv">$ </span>gconftool-2 --set /apps/metacity/general/button_layout <span class="nb">type </span>string menu:minimize,maximize,close
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Update: I have confirmed that this does also work with all Ubuntu distros up through 12.04</p>
+
+
+
+ </div>
+
+<div class="meta">
+
+</div>
+</article>
+
+
+ <article class="post">
+ <h2 class="title">
+
+ <a href="/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/">
+
+ EFF Tor Challenge + Amazon EC2 Free Usage Tier</a>
+ </h2>
+ <div class="entry-content">
+ <p>Goal: Setup a Tor Node (Exit) on a <a href="http://aws.amazon.com/free/">Free Usage Tier</a> Amazon VPS Image (EC2). This and easy and free way to join the EFF in their annonced <a href=โhttps://www.eff.org/torchallengeโ>TOR Challenge</a>.</p>
+
+<p>What you’ll need:</p>
+
+<ul>
+<li>Amazon AWS Account</li>
+<li>Some basic Linux know-how</li>
+</ul>
+
+
+<p>First setup your new instance with the below specs. Check the <a href="https://help.ubuntu.com/community/EC2StartersGuide">EC2StarterGuide</a> and the <a href="http://cloud.ubuntu.com/ami/">Ubuntu Cloud AMI Finder</a> for help.</p>
+
+<p>AMI: Micro (free usage tier) - Ubuntu 10.10 - x86_64 - EBS - (ami-cef405a7)</p>
+
+<ul>
+<li>Use the default Instance Properties</li>
+<li>Create a new Key Pair</li>
+<li>Create new Security Group (name it something recognizable, like tor)</li>
+<li>Add SSH + 9001 ports to the security group.</li>
+</ul>
+
+
+<p>Now that the VPS is up and running login to it, run some updates, install and configure Tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+<span class='line-number'>8</span>
+<span class='line-number'>9</span>
+<span class='line-number'>10</span>
+<span class='line-number'>11</span>
+<span class='line-number'>12</span>
+<span class='line-number'>13</span>
+<span class='line-number'>14</span>
+<span class='line-number'>15</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'><span class="c"># replace with your new key name and ec2 address.</span>
+</span><span class='line'>ssh -i yournewkey.pem ubuntu@ec2-xxx-xxx-xxx-xxx.yyyyyyyy.amazonaws.com
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>sudo apt-get upgrade
+</span><span class='line'>
+</span><span class='line'><span class="c"># add the tor project repository</span>
+</span><span class='line'>sudo apt-add-repository <span class="se">\</span>
+</span><span class='line'> <span class="s1">'deb http://deb.torproject.org/torproject.org maverick main'</span>
+</span><span class='line'>sudo apt-get update
+</span><span class='line'>
+</span><span class='line'><span class="c"># install tor</span>
+</span><span class='line'>sudo apt-get install tor tor-geoipdb
+</span><span class='line'>
+</span><span class='line'><span class="c"># make a backup of the standard config file</span>
+</span><span class='line'>sudo mv /etc/tor/torrc /etc/tor/torrc.bak
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Edit /etc/tor/torrc or create a new config from scratch and make it look like this</p>
+
+<figure class='code'><figcaption><span>/etc/tor/torrc</span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+<span class='line-number'>3</span>
+<span class='line-number'>4</span>
+<span class='line-number'>5</span>
+<span class='line-number'>6</span>
+<span class='line-number'>7</span>
+</pre></td><td class='code'><pre><code class='text'><span class='line'>SocksPort 0 # we are not going to make local connections, aka a simple relay
+</span><span class='line'>ORPort 9001 # what port to advertise for incoming Tor connections
+</span><span class='line'>Nickname xxxxxxxxxxxxx # Give your node a nickname for the EFF Tor Challange
+</span><span class='line'>BandwidthRate 300 KB
+</span><span class='line'>BandwidthBurst 350 KB
+</span><span class='line'>AccountingStart month 1 00:00
+</span><span class='line'>AccountingMax 3 GB
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>The last two lines of this is important. We want to make sure our node does not use enough traffic to use up the entire allowed free bandwidth that a free image is allotted because then you will have to start paying for those bits. You could up it to around 15 GB which is where you start paying but we can start low for now. Finally, we can startup Tor. I like to use screen to run it so startup a new screen and run tor.</p>
+
+<figure class='code'><figcaption><span></span></figcaption><div class="highlight"><table><tr><td class="gutter"><pre class="line-numbers"><span class='line-number'>1</span>
+<span class='line-number'>2</span>
+</pre></td><td class='code'><pre><code class='bash'><span class='line'>screen -S tor
+</span><span class='line'>/usr/sbin/tor
+</span></code></pre></td></tr></table></div></figure>
+
+
+<p>Watch for errors, if none show up, head over to <a href="http://metrics.torproject.org/relay-search.html">http://metrics.torproject.org/relay-search.html</a> and after an hour or so you should be able to search for your node’s nickname.</p>
+
+<p>When your done don’t forget to submit your new node’s nickname to the <a href="https://www.eff.org/torchallenge/report/">EFF’s Tor Challenge</a>!</p>
+
+<p>Resources Used:</p>
+
+<ul>
+<li><a href="https://www.eff.org/torchallenge">https://www.eff.org/torchallenge</a></li>
+<li><a href="http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy/Your_own_TOR_node_on_Amazon_EC2">http://en.wikibooks.org/wiki/How_to_Protect_your_Internet_Anonymity_and_Privacy</a></li>
+<li><a href="http://cloud.ubuntu.com/ami/">http://cloud.ubuntu.com/ami/</a></li>
+<li><a href="https://help.ubuntu.com/community/EC2StartersGuide">https://help.ubuntu.com/community/EC2StartersGuide</a></li>
+<li><a href="http://aws.amazon.com/free/">http://aws.amazon.com/free/</a></li>
+</ul>
+
+
+
+
+ </div>
+
+<div class="meta">
+
+</div>
+</article>
+
+<nav id="pagenavi">
+
+
+ <div class="center"><a href="/blog/archives">Blog Archives</a></div>
+</nav>
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/search.html
@@ -0,0 +1,141 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Search Results $('#search_results').tapir({ 'token': '', 'complete' : function() { document.getElementById('search_loading').style.display="none …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <h1 class="entry-title"><center>Search Results</center></h1>
+<div id="search_loading" style="margin: 40px 0">
+ <center><img src="/images/loading.gif"></center>
+</div>
+
+<script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+<div id="search_results" style="display:none">
+<br>
+</div>
+<script>
+ $('#search_results').tapir({
+ 'token': '',
+ 'complete' : function() { document.getElementById('search_loading').style.display="none"; }
+ });
+</script>
+
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
bryfry.github.com/sitemap.xml
@@ -0,0 +1,41 @@
+<?xml version='1.0' encoding='UTF-8'?>
+<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>
+ <url>
+ <loc>
+ http://bryfry.github.com/blog/2011/06/01/eff-tor-challenge-amazon-ec2-free-usage-tier/
+ </loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/blog/2011/06/10/moving-window-buttons-ubuntu/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/blog/2011/11/26/namecoind-on-ubuntu-11-10-x64/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/blog/2011/12/07/on-hacking-larssons-folly/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/blog/2012/04/29/move-minecraft-spawn-with-python/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/blog/archives/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/search.html</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+ <url>
+ <loc>http://bryfry.github.com/wiki.html</loc>
+ <lastmod>2013-03-05T07:22:30-05:00</lastmod>
+ </url>
+</urlset>
\ No newline at end of file
bryfry.github.com/wiki.html
@@ -0,0 +1,137 @@
+
+<!DOCTYPE HTML>
+<html>
+<head>
+ <meta charset="utf-8">
+ <title>BryFry</title>
+ <meta name="author" content="bryfry">
+
+ <meta name="description" content="Test Wiki; Please ignore I am using this repo as a dumping ground for thoughts, links, etc. Maybe even a scratch pad for future posts. ZeroMQ ZeroMQ …">
+
+ <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
+
+ <link href="/atom.xml" rel="alternate" title="BryFry" type="application/atom+xml">
+ <link rel="canonical" href="">
+ <link href="/favicon.ico" rel="shortcut icon">
+ <link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
+
+<!-- Fonts -->
+ <link href='http://fonts.googleapis.com/css?family=Slackey' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Fjalla+One' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Amethysta' rel='stylesheet' type='text/css'>
+ <link href='http://fonts.googleapis.com/css?family=Exo' rel='stylesheet' type='text/css'>
+ <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
+ <!--[if lt IE 9]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->
+
+ <script type="text/javascript" src="/javascripts/jquery-tapir.js"></script>
+
+ <!-- remove or comment it to disable ajaxification -->
+ <script src="/javascripts/ajaxify.js"></script>
+
+
+</head>
+
+
+<body>
+ <div id="wrapper">
+ <header id="header" class="inner"><!-- for more effects see _animate.scss -->
+<h1>
+ <a href="">
+ <div id="headerbg">
+ BryFry
+ </div>
+ </a>
+</h1>
+
+<!-- use full url including 'index.html' for navigation bar if you are using ajax -->
+<ul id="nav">
+ <li id="ajax"><a href="/index.html">Home</a></li>
+ <li id="ajax"><a href="/blog/archives/index.html">Archives</a></li>
+ <li><a href="/atom.xml">RSS</a></li>
+
+</ul>
+
+
+
+
+</header>
+
+<div id="toload">
+<!-- begin toload -->
+ <div id="content" class="inner">
+ <h1>Test Wiki; Please ignore</h1>
+
+<p>I am using this repo as a dumping ground for thoughts, links, etc. Maybe even a scratch pad for future posts.</p>
+
+<h2>ZeroMQ</h2>
+
+<p><a href="http://zguide.zeromq.org/page:all">ZeroMQ Guide</a>
+<a href="http://kyleisom.net/blog/2013/02/26/network-autoconfiguration-with-go-and-zmq/">Network Autoconfiguration with Go and รMQ</a></p>
+
+<h2>TO READ</h2>
+
+<p><a href="http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf">No Silver Bullet</a></p>
+
+ </div>
+ <footer id="footer">
+ <div style="display:inline">
+ Copyright © 2013
+
+ bryfry
+. Powered by <a href="http://octopress.org">Octopress</a> |
+ Theme adapted from <a href="http://github.com/panks/fabric">fabric</a> by <a href="http://panks.me">Pankaj Kumar</a>
+</div>
+
+
+ </footer>
+ <script src="/javascripts/fabric.js"></script>
+<script src="/javascripts/jquery.fancybox.pack.js"></script>
+<script type="text/javascript">
+(function($){
+ $('.fancybox').fancybox();
+})(jQuery);
+</script> <!-- Delete or comment this line to disable Fancybox -->
+
+
+<script type="text/javascript">
+ var disqus_shortname = 'bryfry';
+
+
+ var disqus_script = 'count.js';
+
+ (function () {
+ var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
+ dsq.src = 'http://' + disqus_shortname + '.disqus.com/' + disqus_script;
+ (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
+ }());
+</script>
+
+
+
+ <script type="text/javascript">
+ var _gaq = _gaq || [];
+ _gaq.push(['_setAccount', 'UA-31317111-1']);
+ _gaq.push(['_trackPageview']);
+
+ (function() {
+ var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
+ ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
+ var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
+ })();
+ </script>
+
+
+
+
+
+<!-- end toload -->
+</div>
+</div>
+<script src="/javascripts/jquery.ui.totop.js" type="text/javascript"></script>
+<script type="text/javascript">
+/*<![CDATA[*/
+;(function($){$().UItoTop({easingType:'easeOutCirc'});})(jQuery);
+/*]]>*/
+</script><!-- remove it to remove the scroll to top button -->
+</body>
+</html>
constanceanderik.io.git/CNAME
@@ -0,0 +1,1 @@
+constanceanderik.io
\ No newline at end of file
constanceanderik.io.git/cover.css
@@ -0,0 +1,107 @@
+/*
+ * Globals
+ */
+
+/* Links */
+a,
+a:focus,
+a:hover {
+ color: #fff;
+}
+
+/* Custom default button */
+.btn-secondary,
+.btn-secondary:hover,
+.btn-secondary:focus {
+ color: #333;
+ text-shadow: none; /* Prevent inheritance from `body` */
+ background-color: #fff;
+ border: .05rem solid #fff;
+}
+
+
+/*
+ * Base structure
+ */
+
+html,
+body {
+ height: 100%;
+ background-color: #A0AAA6;
+}
+
+body {
+ display: -ms-flexbox;
+ display: -webkit-box;
+ display: flex;
+ -ms-flex-pack: center;
+ -webkit-box-pack: center;
+ justify-content: center;
+ color: #fff;
+ text-shadow: 0 .05rem .1rem rgba(0, 0, 0, .5);
+ box-shadow: inset 0 0 5rem hsla(155, 10%, 40%, 1);
+}
+
+.cover-container {
+ max-width: 90em;
+}
+
+
+/*
+ * Header
+ */
+.masthead {
+ margin-bottom: 2rem;
+}
+
+.masthead-brand {
+ margin-bottom: 0;
+ color: #f7baa1;
+}
+
+.nav-masthead .nav-link {
+ padding: .25rem 0;
+ font-weight: 700;
+ background-color: transparent;
+ border-bottom: .25rem solid transparent;
+}
+
+.nav-masthead .nav-link:hover,
+.nav-masthead .nav-link:focus {
+ border-bottom-color: rgba(255, 255, 255, .25);
+}
+
+.nav-masthead .nav-link + .nav-link {
+ margin-left: 1rem;
+}
+
+.nav-masthead .active {
+ color: #fff;
+ border-bottom-color: #fff;
+}
+
+@media (min-width: 48em) {
+ .masthead-brand {
+ float: left;
+ }
+ .nav-masthead {
+ float: right;
+ }
+}
+
+.btn-sage-green {
+ background-color: #7E968C;
+ border-color: #4c5d56;
+}
+
+/*
+ * Cover
+ */
+.cover {
+ padding: 0 1.5rem;
+}
+.cover .btn-lg {
+ padding: .75rem 1.25rem;
+ font-weight: 700;
+}
+
constanceanderik.io.git/index.html
@@ -0,0 +1,61 @@
+
+<!doctype html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8">
+ <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
+ <meta name="description" content="homepage for constance and erik">
+ <meta name="author" content="constance and erik">
+
+ <title>constanceanderik.io</title>
+
+ <!-- Bootstrap core CSS -->
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
+
+ <!-- Custom styles for this template -->
+ <link href="cover.css" rel="stylesheet">
+ </head>
+
+ <body class="text-center">
+
+ <div class="cover-container d-flex h-100 p-3 mx-auto flex-column">
+ <header class="masthead mb-auto">
+ <div class="inner">
+ <h3 class="masthead-brand">constanceanderik.io</h3>
+ <nav class="nav nav-masthead justify-content-center">
+ <a class="nav-link" href="mailto:ConstanceAndErik@gmail.com">Contact</a>
+ </nav>
+ </div>
+ </header>
+
+ <main role="main" class="inner cover">
+
+ <h1 class="cover-heading">Constance And Erik's Celebration!</h1>
+ <p class="lead mb-4"><strong>Saturday, May 18, 2019</strong></p>
+ <div class="row">
+ <div class="col-sm-6">
+ <div class="card text-dark bg-light mb-3">
+ <img class="card-img-top" src="https://i.ibb.co/XSR06qy/20171231-222837.jpg" alt="Card image cap">
+ <div class="card-body">
+ <a href="https://www.pscp.tv/ConstanceAndErik/follow" class="btn btn-lg btn-sage-green">Live Stream</a>
+ </div>
+ </div>
+ </div>
+ <div class="col-sm-6">
+ <div class="card text-dark bg-light mb-3">
+ <img class="card-img-top" src="https://i.ibb.co/wCXvmnB/20150712-170540-HDR.jpg" alt="Card image cap">
+ <div class="card-body">
+ <a href="https://www.plumfund.com/anniversary-fund/connie-and-eriks-wedding" class="btn btn-lg btn-sage-green">Gifts</a>
+ </div>
+ </div>
+ </div>
+ </main>
+
+ <footer class="mastfoot mt-auto">
+ <div class="inner">
+ <p>constanceanderik.io - 2019</p>
+ </div>
+ </footer>
+ </div>
+ </body>
+</html>
home_2024/doom/config.el
@@ -0,0 +1,79 @@
+;;; $DOOMDIR/config.el -*- lexical-binding: t; -*-
+
+;; Place your private configuration here! Remember, you do not need to run 'doom
+;; sync' after modifying this file!
+
+
+;; Some functionality uses this to identify you, e.g. GPG configuration, email
+;; clients, file templates and snippets. It is optional.
+(setq user-full-name "bryfry"
+ user-mail-address "bryon@fryer.io")
+
+;; Doom exposes five (optional) variables for controlling fonts in Doom:
+;;
+;; - `doom-font' -- the primary font to use
+;; - `doom-variable-pitch-font' -- a non-monospace font (where applicable)
+;; - `doom-big-font' -- used for `doom-big-font-mode'; use this for
+;; presentations or streaming.
+;; - `doom-unicode-font' -- for unicode glyphs
+;; - `doom-serif-font' -- for the `fixed-pitch-serif' face
+;;
+;; See 'C-h v doom-font' for documentation and more examples of what they
+;; accept. For example:
+;;
+;;(setq doom-font (font-spec :family "Fira Code" :size 12 :weight 'semi-light)
+;; doom-variable-pitch-font (font-spec :family "Fira Sans" :size 13))
+;;
+;; If you or Emacs can't find your font, use 'M-x describe-font' to look them
+;; up, `M-x eval-region' to execute elisp code, and 'M-x doom/reload-font' to
+;; refresh your font settings. If Emacs still can't find your font, it likely
+;; wasn't installed correctly. Font issues are rarely Doom issues!
+
+;; There are two ways to load a theme. Both assume the theme is installed and
+;; available. You can either set `doom-theme' or manually load a theme with the
+;; `load-theme' function. This is the default:
+(setq doom-theme 'doom-dracula)
+
+;; This determines the style of line numbers in effect. If set to `nil', line
+;; numbers are disabled. For relative line numbers, set this to `relative'.
+(setq display-line-numbers-type t)
+
+;; If you use `org' and don't want your org files in the default location below,
+;; change `org-directory'. It must be set before org loads!
+(setq org-directory "~/org/")
+
+
+;; Whenever you reconfigure a package, make sure to wrap your config in an
+;; `after!' block, otherwise Doom's defaults may override your settings. E.g.
+;;
+;; (after! PACKAGE
+;; (setq x y))
+;;
+;; The exceptions to this rule:
+;;
+;; - Setting file/directory variables (like `org-directory')
+;; - Setting variables which explicitly tell you to set them before their
+;; package is loaded (see 'C-h v VARIABLE' to look up their documentation).
+;; - Setting doom variables (which start with 'doom-' or '+').
+;;
+;; Here are some additional functions/macros that will help you configure Doom.
+;;
+;; - `load!' for loading external *.el files relative to this one
+;; - `use-package!' for configuring packages
+;; - `after!' for running code after a package has loaded
+;; - `add-load-path!' for adding directories to the `load-path', relative to
+;; this file. Emacs searches the `load-path' when you load packages with
+;; `require' or `use-package'.
+;; - `map!' for binding new keys
+;;
+;; To get information about any of these functions/macros, move the cursor over
+;; the highlighted symbol at press 'K' (non-evil users must press 'C-c c k').
+;; This will open documentation for it, including demos of how they are used.
+;; Alternatively, use `C-h o' to look up a symbol (functions, variables, faces,
+;; etc).
+;;
+;; You can also try 'gd' (or 'C-c c d') to jump to their definition and see how
+;; they are implemented.
+
+;; no background color
+(set-face-background 'default "undefined")
home_2024/doom/custom.el
@@ -0,0 +1,15 @@
+(custom-set-variables
+ ;; custom-set-variables was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ )
+(custom-set-faces
+ ;; custom-set-faces was added by Custom.
+ ;; If you edit it by hand, you could mess it up, so be careful.
+ ;; Your init file should contain only one such instance.
+ ;; If there is more than one, they won't work right.
+ '(markdown-code-face ((t (:extend t :background "color-233"))))
+ '(mode-line ((t (:background "black" :box nil))))
+ '(solaire-default-face ((t (:inherit default :background "color-233"))))
+ '(vertico-current ((t (:extend t :background "color-236")))))
home_2024/doom/init.el
@@ -0,0 +1,194 @@
+;;; init.el -*- lexical-binding: t; -*-
+
+;; This file controls what Doom modules are enabled and what order they load
+;; in. Remember to run 'doom sync' after modifying it!
+
+;; NOTE Press 'SPC h d h' (or 'C-h d h' for non-vim users) to access Doom's
+;; documentation. There you'll find a link to Doom's Module Index where all
+;; of our modules are listed, including what flags they support.
+
+;; NOTE Move your cursor over a module's name (or its flags) and press 'K' (or
+;; 'C-c c k' for non-vim users) to view its documentation. This works on
+;; flags as well (those symbols that start with a plus).
+;;
+;; Alternatively, press 'gd' (or 'C-c c d') on a module to browse its
+;; directory (for easy access to its source code).
+
+(doom! :input
+ ;;bidi ; (tfel ot) thgir etirw uoy gnipleh
+ ;;chinese
+ ;;japanese
+ ;;layout ; auie,ctsrnm is the superior home row
+
+ :completion
+ company ; the ultimate code completion backend
+ ;;helm ; the *other* search engine for love and life
+ ;;ido ; the other *other* search engine...
+ ;;ivy ; a search engine for love and life
+ vertico ; the search engine of the future
+
+ :ui
+ ;;deft ; notational velocity for Emacs
+ doom ; what makes DOOM look the way it does
+ doom-dashboard ; a nifty splash screen for Emacs
+ ;;doom-quit ; DOOM quit-message prompts when you quit Emacs
+ ;;(emoji +unicode) ; ๐
+ hl-todo ; highlight TODO/FIXME/NOTE/DEPRECATED/HACK/REVIEW
+ ;;hydra
+ ;;indent-guides ; highlighted indent columns
+ ;;ligatures ; ligatures and symbols to make your code pretty again
+ ;;minimap ; show a map of the code on the side
+ modeline ; snazzy, Atom-inspired modeline, plus API
+ ;;nav-flash ; blink cursor line after big motions
+ ;;neotree ; a project drawer, like NERDTree for vim
+ ophints ; highlight the region an operation acts on
+ (popup +defaults) ; tame sudden yet inevitable temporary windows
+ ;;tabs ; a tab bar for Emacs
+ ;;treemacs ; a project drawer, like neotree but cooler
+ ;;unicode ; extended unicode support for various languages
+ (vc-gutter +pretty) ; vcs diff in the fringe
+ vi-tilde-fringe ; fringe tildes to mark beyond EOB
+ ;;window-select ; visually switch windows
+ workspaces ; tab emulation, persistence & separate workspaces
+ ;;zen ; distraction-free coding or writing
+
+ :editor
+ (evil +everywhere); come to the dark side, we have cookies
+ file-templates ; auto-snippets for empty files
+ fold ; (nigh) universal code folding
+ ;;(format +onsave) ; automated prettiness
+ ;;god ; run Emacs commands without modifier keys
+ ;;lispy ; vim for lisp, for people who don't like vim
+ ;;multiple-cursors ; editing in many places at once
+ ;;objed ; text object editing for the innocent
+ ;;parinfer ; turn lisp into python, sort of
+ ;;rotate-text ; cycle region at point between text candidates
+ snippets ; my elves. They type so I don't have to
+ ;;word-wrap ; soft wrapping with language-aware indent
+
+ :emacs
+ dired ; making dired pretty [functional]
+ electric ; smarter, keyword-based electric-indent
+ ;;ibuffer ; interactive buffer management
+ undo ; persistent, smarter undo for your inevitable mistakes
+ vc ; version-control and Emacs, sitting in a tree
+
+ :term
+ ;;eshell ; the elisp shell that works everywhere
+ ;;shell ; simple shell REPL for Emacs
+ ;;term ; basic terminal emulator for Emacs
+ ;;vterm ; the best terminal emulation in Emacs
+
+ :checkers
+ syntax ; tasing you for every semicolon you forget
+ ;;(spell +flyspell) ; tasing you for misspelling mispelling
+ ;;grammar ; tasing grammar mistake every you make
+
+ :tools
+ ;;ansible
+ ;;biblio ; Writes a PhD for you (citation needed)
+ ;;debugger ; FIXME stepping through code, to help you add bugs
+ ;;direnv
+ ;;docker
+ ;;editorconfig ; let someone else argue about tabs vs spaces
+ ;;ein ; tame Jupyter notebooks with emacs
+ (eval +overlay) ; run code, run (also, repls)
+ ;;gist ; interacting with github gists
+ lookup ; navigate your code and its documentation
+ lsp ; M-x vscode
+ magit ; a git porcelain for Emacs
+ ;;make ; run make tasks from Emacs
+ ;;pass ; password manager for nerds
+ ;;pdf ; pdf enhancements
+ ;;prodigy ; FIXME managing external services & code builders
+ ;;rgb ; creating color strings
+ ;;taskrunner ; taskrunner for all your projects
+ ;;terraform ; infrastructure as code
+ ;;tmux ; an API for interacting with tmux
+ tree-sitter ; syntax and parsing, sitting in a tree...
+ ;;upload ; map local to remote projects via ssh/ftp
+
+ :os
+ (:if IS-MAC macos) ; improve compatibility with macOS
+ ;;tty ; improve the terminal Emacs experience
+
+ :lang
+ ;;agda ; types of types of types of types...
+ ;;beancount ; mind the GAAP
+ ;;(cc +lsp) ; C > C++ == 1
+ (clojure +lsp) ; java with a lisp
+ ;;common-lisp ; if you've seen one lisp, you've seen them all
+ ;;coq ; proofs-as-programs
+ ;;crystal ; ruby at the speed of c
+ ;;csharp ; unity, .NET, and mono shenanigans
+ ;;data ; config/data formats
+ ;;(dart +flutter) ; paint ui and not much else
+ ;;dhall
+ ;;elixir ; erlang done right
+ ;;elm ; care for a cup of TEA?
+ emacs-lisp ; drown in parentheses
+ ;;erlang ; an elegant language for a more civilized age
+ ;;ess ; emacs speaks statistics
+ ;;factor
+ ;;faust ; dsp, but you get to keep your soul
+ ;;fortran ; in FORTRAN, GOD is REAL (unless declared INTEGER)
+ ;;fsharp ; ML stands for Microsoft's Language
+ ;;fstar ; (dependent) types and (monadic) effects and Z3
+ ;;gdscript ; the language you waited for
+ (go +lsp) ; the hipster dialect
+ ;;(graphql +lsp) ; Give queries a REST
+ ;;(haskell +lsp) ; a language that's lazier than I am
+ ;;hy ; readability of scheme w/ speed of python
+ ;;idris ; a language you can depend on
+ json ; At least it ain't XML
+ ;;(java +lsp) ; the poster child for carpal tunnel syndrome
+ ;;javascript ; all(hope(abandon(ye(who(enter(here))))))
+ ;;julia ; a better, faster MATLAB
+ ;;kotlin ; a better, slicker Java(Script)
+ ;;latex ; writing papers in Emacs has never been so fun
+ ;;lean ; for folks with too much to prove
+ ;;ledger ; be audit you can be
+ ;;lua ; one-based indices? one-based indices
+ markdown ; writing docs for people to ignore
+ ;;nim ; python + lisp at the speed of c
+ ;;nix ; I hereby declare "nix geht mehr!"
+ ;;ocaml ; an objective camel
+ org ; organize your plain life in plain text
+ ;;php ; perl's insecure younger brother
+ ;;plantuml ; diagrams for confusing people more
+ ;;purescript ; javascript, but functional
+ (python +lsp +pyright) ; beautiful is better than ugly
+ ;;qt ; the 'cutest' gui framework ever
+ ;;racket ; a DSL for DSLs
+ ;;raku ; the artist formerly known as perl6
+ ;;rest ; Emacs as a REST client
+ ;;rst ; ReST in peace
+ ;;(ruby +rails) ; 1.step {|i| p "Ruby is #{i.even? ? 'love' : 'life'}"}
+ ;;(rust +lsp) ; Fe2O3.unwrap().unwrap().unwrap().unwrap()
+ ;;scala ; java, but good
+ ;;(scheme +guile) ; a fully conniving family of lisps
+ sh ; she sells {ba,z,fi}sh shells on the C xor
+ ;;sml
+ ;;solidity ; do you need a blockchain? No.
+ ;;swift ; who asked for emoji variables?
+ ;;terra ; Earth and Moon in alignment for performance.
+ ;;web ; the tubes
+ yaml ; JSON, but readable
+ (zig +lsp) ; C, but simpler
+
+ :email
+ ;;(mu4e +org +gmail)
+ ;;notmuch
+ ;;(wanderlust +gmail)
+
+ :app
+ ;;calendar
+ ;;emms
+ ;;everywhere ; *leave* Emacs!? You must be joking
+ ;;irc ; how neckbeards socialize
+ ;;(rss +org) ; emacs as an RSS reader
+ ;;twitter ; twitter client https://twitter.com/vnought
+
+ :config
+ ;;literate
+ (default +bindings +smartparens))
home_2024/doom/packages.el
@@ -0,0 +1,50 @@
+;; -*- no-byte-compile: t; -*-
+;;; $DOOMDIR/packages.el
+
+;; To install a package with Doom you must declare them here and run 'doom sync'
+;; on the command line, then restart Emacs for the changes to take effect -- or
+;; use 'M-x doom/reload'.
+
+
+;; To install SOME-PACKAGE from MELPA, ELPA or emacsmirror:
+;(package! some-package)
+
+;; To install a package directly from a remote git repo, you must specify a
+;; `:recipe'. You'll find documentation on what `:recipe' accepts here:
+;; https://github.com/radian-software/straight.el#the-recipe-format
+;(package! another-package
+; :recipe (:host github :repo "username/repo"))
+
+;; If the package you are trying to install does not contain a PACKAGENAME.el
+;; file, or is located in a subdirectory of the repo, you'll need to specify
+;; `:files' in the `:recipe':
+;(package! this-package
+; :recipe (:host github :repo "username/repo"
+; :files ("some-file.el" "src/lisp/*.el")))
+
+;; If you'd like to disable a package included with Doom, you can do so here
+;; with the `:disable' property:
+;(package! builtin-package :disable t)
+
+;; You can override the recipe of a built in package without having to specify
+;; all the properties for `:recipe'. These will inherit the rest of its recipe
+;; from Doom or MELPA/ELPA/Emacsmirror:
+;(package! builtin-package :recipe (:nonrecursive t))
+;(package! builtin-package-2 :recipe (:repo "myfork/package"))
+
+;; Specify a `:branch' to install a package from a particular branch or tag.
+;; This is required for some packages whose default branch isn't 'master' (which
+;; our package manager can't deal with; see radian-software/straight.el#279)
+;(package! builtin-package :recipe (:branch "develop"))
+
+;; Use `:pin' to specify a particular commit to install.
+;(package! builtin-package :pin "1a2b3c4d5e")
+
+
+;; Doom's packages are pinned to a specific commit and updated from release to
+;; release. The `unpin!' macro allows you to unpin single packages...
+;(unpin! pinned-package)
+;; ...or multiple packages
+;(unpin! pinned-package another-pinned-package)
+;; ...Or *all* packages (NOT RECOMMENDED; will likely break things)
+;(unpin! t)
home_2024/bash_aliases
@@ -0,0 +1,10 @@
+# OKAY I lied, there are a few other bash-isms in here
+
+# never nano
+export EDITOR=vim
+
+alias ls='ls --color'
+alias ll='ls -l --color'
+alias ipa='ip addr'
+alias k="ssh-add -l"
+alias vim="nvim"
home_2024/curlrc
@@ -0,0 +1,5 @@
+# follow redirects
+location
+
+# disable progress bar
+silent
home_2024/elinks.conf
@@ -0,0 +1,81 @@
+## ELinks 0.11.7 configuration file
+
+## This is ELinks configuration file. You can edit it manually,
+## if you wish so; this file is edited by ELinks when you save
+## options through UI, however only option values will be altered
+## and missing options will be added at the end of file; if option
+## is not written in this file, but in some file included from it,
+## it is NOT counted as missing. Note that all your formatting,
+## own comments and so on will be kept as-is.
+##
+## Obviously, if you don't like what ELinks is going to do with
+## this file, you can change it by altering the config.saving_style
+## option. Come on, aren't we friendly guys after all?
+
+##############################
+# Automatically saved options
+#
+
+## config
+# Configuration handling options.
+
+ ## config.saving_style_w [0|1]
+ # This is internal option used when displaying a warning about
+ # obsolete config.saving_style. You shouldn't touch it.
+ set config.saving_style_w = 1
+
+################################
+#### Keybindings
+bind "main" "j" = "scroll-down"
+bind "main" "k" = "scroll-up"
+bind "main" "h" = "scroll-left"
+bind "main" "l" = "scroll-right"
+bind "main" "Ctrl-d" = "move-page-down"
+bind "main" "Ctrl-u" = "move-page-up"
+bind "main" "J" = "move-link-next"
+bind "main" "K" = "move-link-prev"
+bind "main" "H" = "history-move-back"
+bind "main" "L" = "history-move-forward"
+bind "main" "Ctrl-c" = "abort-connection"
+bind "main" "o" = "goto-url"
+bind "main" "O" = "goto-url-current-link"
+bind "main" "t" = "open-new-tab"
+bind "main" "T" = "open-link-in-new-tab-in-background"
+bind "main" "d" = "tab-close"
+bind "main" "g" = "move-document-start"
+bind "main" "G" = "move-document-end"
+bind "main" "r" = "reload"
+bind "main" "e" = "tab-external-command"
+bind "main" "Ctrl-[" = "link-external-command"
+bind "main" "f" = "search-typeahead-link"
+
+bind "menu" "j" = "down"
+bind "menu" "k" = "up"
+bind "menu" "h" = "left"
+bind "menu" "l" = "right"
+
+######################################################################
+## colors
+## note: color does not work with tmux
+
+set document.colors.use_document_colors = 1
+
+set terminal.screen-256color.colors = 1
+set terminal.screen-256color.transparency = 1
+set terminal.screen-256color.underline = 1
+set terminal.screen-256color.utf_8_io = 1
+
+#set terminal.xterm-256color.colors = 2
+#set terminal.xterm-256color.transparency = 1
+#set terminal.xterm-256color.underline = 1
+#set terminal.xterm-256color.utf_8_io = 1
+#
+#set document.css.enable = 1
+#set document.css.import = 1
+#set document.css.stylesheet = "user.css"
+#set document.colors.increase_contrast = 1
+#set document.colors.ensure_contrast = 1
+#set document.uri_passing.chrome = "open %c"
+#set ui.language = "System"
+
+set document.browse.forms.confirm_submit = 0
home_2024/fast
@@ -0,0 +1,22 @@
+Host tmc
+ Hostname trustme.click
+ User ubuntu
+ AddKeysToAgent yes
+ ForwardAgent true
+
+Host fast
+ Hostname fast.trustme.click
+ User ubuntu
+ AddKeysToAgent yes
+ ForwardAgent true
+ ProxyJump tmc
+
+Host kali
+ Hostname 10.0.0.2
+ User mdang
+ ProxyJump fast
+ LocalForward 0.0.0.0:5900 172.16.61.149:5900
+ LocalForward 0.0.0.0:3389 172.16.61.204:3389
+ LocalForward 0.0.0.0:64738 172.16.61.2:64738
+# RemoteCommand cat
+# RequestTTY no
home_2024/screenrc
@@ -0,0 +1,2 @@
+term screen-256color
+startup_message off
home_2024/ssh_config
@@ -0,0 +1,56 @@
+Host bchd.*
+ Hostname %h
+ User student
+ ProxyJump turn.bravo
+
+Host proxmox.*
+ Hostname %h
+ User student
+ ProxyJump turn.bravo
+
+Host *
+ ControlMaster auto
+ ControlPath /tmp/ssh-%r@%h:%p
+ ControlPersist 30m
+
+Host turn.alpha turn.alta3.com
+ Hostname turn.alpha.alta3.com
+ Port 42587
+ user ubuntu
+ ForwardAgent yes
+
+Host sumi-??.alpha
+ Hostname %h
+ User ubuntu
+ ProxyJump turn.alpha
+
+Host enchalada.alpha alpha
+ Hostname sumi-02.alpha
+ User ubuntu
+ ProxyJump turn.alpha
+
+Host turn.bravo
+ Hostname turn.bravo.alta3.com
+ Port 42587
+ user ubuntu
+ ForwardAgent yes
+
+Host sumi-??.bravo
+ Hostname %h
+ User ubuntu
+ ProxyJump turn.bravo
+
+Host enchalada.bravo bravo
+ Hostname sumi-02.bravo
+ User ubuntu
+ ProxyJump turn.bravo
+
+Host static upload labs
+ Hostname static.alta3.com
+ Port 58888
+ User upload
+
+Host routy
+ Hostname 72.81.238.149
+ Port 8986
+ User ubuntu
home_2024/ssh_config_d
@@ -0,0 +1,1 @@
+Include config.d/*
home_2024/tmux.conf
@@ -0,0 +1,63 @@
+# # # # # # # # # # # # # # # # # # # # # # # # #
+# Derived and adapted from Brian P. Hogan's book #
+# tmux: Productive Mouse-Free Development #
+# http://pragprog.com/book/bhtmux/tmux #
+# # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# Setting the prefix from C-b to C-a
+set -g prefix C-a
+
+# Free the original Ctrl-b prefix keybinding
+unbind C-b
+
+#setting the delay between prefix and command
+set -s escape-time 1
+
+# Ensure that we can send Ctrl-A to other apps
+bind C-a send-prefix
+
+# Set the base index for windows to 1 instead of 0
+set -g base-index 1
+
+# Set the base index for panes to 1 instead of 0
+setw -g pane-base-index 1
+
+# Reload the file with Prefix r
+bind r source-file ~/.tmux.conf \; display "Reloaded!"
+
+# splitting panes
+bind | split-window -h
+bind - split-window -v
+
+# moving between panes
+bind h select-pane -L
+bind j select-pane -D
+bind k select-pane -U
+bind l select-pane -R
+
+# Quick pane selection
+bind -r C-h select-window -t :-
+bind -r C-l select-window -t :+
+
+# Pane resizing
+bind -r H resize-pane -L 5
+bind -r J resize-pane -D 5
+bind -r K resize-pane -U 5
+bind -r L resize-pane -R 5
+
+# mouse support - set to on if you want to use the mouse
+
+# Set the default terminal mode to 256color mode
+set -g default-terminal "screen-256color"
+
+# enable vi keys.
+setw -g mode-keys vi
+bind-key -T copy-mode-vi y send-keys -X copy-selection \; send-keys -X cancel
+
+# Log output to a text file on demand
+bind P pipe-pane -o "cat >>~/#W.log" \; display "Toggled logging to ~/#W.log"
+
+set -g pane-border-style fg=white,bg=black
+set -g pane-active-border-style fg=magenta,bg=black
+
+set -g status off
home_2024/vimrc
@@ -0,0 +1,30 @@
+set nocompatible " be iMproved
+syntax on " turn on syntax highlighting
+highlight EndOfBuffer ctermfg=darkgrey
+highlight Visual ctermbg=blue ctermfg=white
+highlight Folded ctermbg=black ctermfg=darkgrey
+highlight QuickFixLine ctermbg=black
+highlight StatusLine ctermbg=black ctermfg=darkgrey cterm=bold
+highlight StatusLineNC ctermbg=darkgrey ctermfg=black
+filetype plugin indent on
+colorscheme default
+
+"" tab related settings
+"set smartindent
+"set tabstop=2
+"set shiftwidth=2
+"set expandtab
+"set number
+
+" Disable Arrow keys in Escape mode
+map <up> <nop>
+map <down> <nop>
+map <left> <nop>
+map <right> <nop>
+
+" Disable Arrow keys in Insert mode
+imap <up> <nop>
+imap <down> <nop>
+imap <left> <nop>
+imap <right> <nop>
+
home_2024/wezterm.lua
@@ -0,0 +1,43 @@
+local wezterm = require 'wezterm';
+return {
+
+ -- tab bar
+ enable_tab_bar = false,
+ hide_tab_bar_if_only_one_tab = false,
+
+ -- mouse
+ disable_default_mouse_bindings = true,
+
+ -- font & color
+ font = wezterm.font("CozetteVector"),
+ font_size = 12.0,
+ colors = {
+ foreground = "#ffffff", -- white
+ background = "#000009", -- Default Background
+ cursor_bg = "#ee33ee", -- magenta
+ cursor_border = "#bd1e8d", -- bright white
+ cursor_fg = "#ffffff", -- bright white
+ selection_fg = "#000000", -- black
+ selection_bg = "#f8ca12", -- yellow
+ ansi = {
+ "#000000", -- black
+ "#eb008a", -- red
+ "#37b349", -- green
+ "#f8ca12", -- yellow
+ "#0e5a94", -- blue
+ "#b31e8d", -- magenta
+ "#00aabb", -- cyan
+ "#e0e0e0", -- white
+ },
+ bright = {
+ "#505050", -- bright black
+ "#eb008a", -- red
+ "#37b349", -- green
+ "#f8ca12", -- yellow
+ "#0e5a94", -- blue
+ "#b31e8d", -- magenta
+ "#00aabb", -- cyan
+ "#ffffff", -- bright white
+ },
+ }
+}
mc_admin/banned-ips.txt
@@ -0,0 +1,3 @@
+# Updated 9/3/12 12:53 PM by Minecraft 1.3.2
+# victim name | ban date | banned by | banned until | reason
+
mc_admin/banned-players.txt
@@ -0,0 +1,3 @@
+# Updated 9/3/12 12:53 PM by Minecraft 1.3.2
+# victim name | ban date | banned by | banned until | reason
+
mc_admin/bukkit.yml
@@ -0,0 +1,51 @@
+# This is the main configuration file for Bukkit.
+# As you can see, there's actually not that much to configure without any plugins.
+# For a reference for any variable inside this file, check out the bukkit wiki at
+# http://wiki.bukkit.org/Bukkit.yml
+#
+# If you need help on this file, feel free to join us on irc or leave a message
+# on the forums asking for advice.
+#
+# IRC: #bukkit @ esper.net
+# (If this means nothing to you, just go to http://webchat.esper.net/?channels=bukkit )
+# Forums: http://forums.bukkit.org/forums/bukkit-help.6/
+# Twitter: http://twitter.com/Craftbukkit
+# Bug tracker: http://leaky.bukkit.org/
+
+
+settings:
+ allow-end: true
+ warn-on-overload: true
+ spawn-radius: 0
+ permissions-file: permissions.yml
+ update-folder: update
+ ping-packet-limit: 100
+ use-exact-login-location: false
+ plugin-profiling: false
+ connection-throttle: 4000
+ query-plugins: true
+ deprecated-verbose: default
+spawn-limits:
+ monsters: 70
+ animals: 15
+ water-animals: 5
+ticks-per:
+ animal-spawns: 400
+ monster-spawns: 1
+auto-updater:
+ enabled: true
+ on-broken:
+ - warn-console
+ - warn-ops
+ on-update:
+ - warn-console
+ - warn-ops
+ preferred-channel: beta
+ host: dl.bukkit.org
+ suggest-channels: true
+database:
+ username: bukkit
+ isolation: SERIALIZABLE
+ driver: org.sqlite.JDBC
+ password: walrus
+ url: jdbc:sqlite:{DIR}{NAME}.db
mc_admin/help.yml
@@ -0,0 +1,56 @@
+# This is the help configuration file for Bukkit.
+#
+# By default you do not need to modify this file. Help topics for all plugin commands are automatically provided by
+# or extracted from your installed plugins. You only need to modify this file if you wish to add new help pages to
+# your server or override the help pages of existing plugin commands.
+#
+# This file is divided up into the following parts:
+# -- general-topics: lists admin defined help topics
+# -- index-topics: lists admin defined index topics
+# -- amend-topics: lists topic amendments to apply to existing help topics
+# -- ignore-plugins: lists any plugins that should be excluded from help
+#
+# Examples are given below. When amending command topic, the string <text> will be replaced with the existing value
+# in the help topic. Color codes can be used in topic text. The color code character is & followed by 0-F.
+# ================================================================
+#
+# Set this to true to list the individual command help topics in the master help.
+# command-topics-in-master-index: true
+#
+# Each general topic will show up as a separate topic in the help index along with all the plugin command topics.
+# general-topics:
+# Rules:
+# shortText: Rules of the server
+# fullText: |
+# &61. Be kind to your fellow players.
+# &B2. No griefing.
+# &D3. No swearing.
+# permission: topics.rules
+#
+# Each index topic will show up as a separate sub-index in the help index along with all the plugin command topics.
+# To override the default help index (displayed when the user executes /help), name the index topic "Default".
+# index-topics:
+# Ban Commands:
+# shortText: Player banning commands
+# preamble: Moderator - do not abuse these commands
+# permission: op
+# commands:
+# - /ban
+# - /ban-ip
+# - /banlist
+#
+# Topic amendments are used to change the content of automatically generated plugin command topics.
+# amended-topics:
+# /stop:
+# shortText: Stops the server cold....in its tracks!
+# fullText: <text> - This kills the server.
+# permission: you.dont.have
+#
+# Any plugin in the ignored plugins list will be excluded from help. The name must match the name displayed by
+# the /plugins command. Ignore "Bukkit" to remove the standard bukkit commands from the index. Ignore "All"
+# to completely disable automatic help topic generation.
+# ignore-plugins:
+# - PluginNameOne
+# - PluginNameTwo
+# - PluginNameThree
+
mc_admin/minecraft
@@ -0,0 +1,288 @@
+#!/bin/bash
+# /etc/init.d/minecraft
+# version 0.5 2011-09-24 (YYYY-MM-DD)
+
+### BEGIN INIT INFO
+# Provides: minecraft
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Should-Start: $network
+# Should-Stop: $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Minecraft server
+# Description: Starts the minecraft server
+### END INIT INFO
+
+#Settings
+SERVICE='craftbukkit-beta.jar'
+USERNAME="minecraft"
+MCSTORE='/home/minecraft/bukkit'
+MCPATH='/home/minecraft/mc_ram'
+CPU_COUNT=2
+INVOCATION="java -Xmx2048M -Xms2048M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE nogui"
+BACKUPPATH='/home/minecraft/mc_backups/'
+MAPSERVICE='/home/minecraft/mc_map/Minecraft-Overviewer/overviewer.py'
+MAPCONFIG='/home/minecraft/mc_admin/ov.conf'
+MAPLOCK='/var/lock/mapper.lock'
+
+ME=`whoami`
+as_user() {
+ if [ "$ME" == "$USERNAME" ] ; then
+ bash -c "$1"
+ else
+ su - $USERNAME -c "$1"
+ fi
+}
+
+mc_start() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "Tried to start but $SERVICE was already running!"
+ else
+ echo "$SERVICE was not running... starting."
+ cd $MCPATH
+ if [ ! -f "$MCPATH/minecraft_server.jar" ]
+ then
+ echo "Ram drive empty... prepping."
+ as_user "cp -R $MCSTORE/* $MCPATH/"
+ fi
+ as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
+ sleep 7
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is now running."
+ else
+ echo "Could not start $SERVICE."
+ fi
+ fi
+}
+
+mc_saveoff() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... suspending saves"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ sync
+ sleep 10
+ else
+ echo "$SERVICE was not running. Not suspending saves."
+ fi
+}
+
+mc_saveon() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... re-enabling saves"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
+ else
+ echo "$SERVICE was not running. Not resuming saves."
+ fi
+}
+
+mc_stop() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... stopping."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS. Saving map...\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ sleep 5
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
+ sleep 5
+ else
+ echo "$SERVICE was not running."
+ fi
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE could not be shut down... still running."
+ else
+ echo "$SERVICE is shut down."
+ fi
+}
+
+
+mc_update() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running! Will not start update."
+ else
+ MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
+ as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
+ if [ -f $MCPATH/minecraft_server.jar.update ]
+ then
+ if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
+ then
+ echo "You are already running the latest version of $SERVICE."
+ else
+ as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
+ echo "Minecraft successfully updated."
+ fi
+ else
+ echo "Minecraft update could not be downloaded."
+ fi
+ fi
+}
+
+mc_backup() {
+ echo "Backing up minecraft files"
+ if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
+ then
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+ do
+ if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
+ then
+ continue
+ else
+ as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ."
+ break
+ fi
+ done
+ else
+ as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ."
+ fi
+ echo "Backup complete"
+}
+
+mc_disksaverun() {
+
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "Saving ramdrive to disk."
+ if [ ! -f $MCPATH/$SERVICE ]
+ then
+ echo "Error.. Minecraft not in ram"
+ else
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ if [ -d $MCSTORE/world ]
+ then
+ as_user "mv $MCSTORE/world $MCSTORE/world2"
+ fi
+
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ as_user "cp -R $MCPATH/* $MCSTORE/"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
+
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ fi
+ else
+ echo "Service is not running"
+ fi
+
+}
+
+mc_disksavehalt() {
+ echo "Saving ramdrive to disk."
+ if [ ! -f $MCPATH/minecraft_server.jar ]
+ then
+ echo "Error.. Minecraft not in ram"
+ else
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ if [ -d $MCSTORE/world ]
+ then
+ as_user "mv $MCSTORE/world $MCSTORE/world2"
+ fi
+
+ echo "Saving, screen session closed"
+ as_user "cp -R $MCPATH/* $MCSTORE/"
+
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ fi
+
+}
+
+mc_mapper() {
+ if mkdir $MAPLOCK
+ then
+ echo "$SERVICE is running... Mapping Engage"
+ as_user "python $MAPSERVICE --config=$MAPCONFIG"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map update complete!\"\015'"
+ rmdir $MAPLOCK
+ else
+ echo "$MAPLOCK exists. Not mapping."
+ fi
+}
+
+mumblead() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... telling the users"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Extra Minecraft Services\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map at http://sip.alta3.com:50000\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Mumble Voice Chat at sip.alta3.com (Port 64738)\"\015'"
+ else
+ echo "$SERVICE was not running. Not soapboxing."
+ fi
+}
+
+#Start-Stop here
+case "$1" in
+ start)
+ mc_start
+ ;;
+ stop)
+ mc_stop
+ mc_disksavehalt
+ ;;
+ restart)
+ mc_stop
+ mc_disksavehalt
+ mc_start
+ ;;
+ update)
+ mc_stop
+ mc_backup
+ mc_update
+ mc_start
+ ;;
+ backup)
+ mc_disksaverun
+ mc_saveoff
+ mc_backup
+ mc_saveon
+ ;;
+ disksavehalt)
+ mc_disksavehalt
+ ;;
+ disksaverun)
+ mc_disksaverun
+ ;;
+ mapper)
+ disksaverun
+ mc_mapper
+ ;;
+ mumblead)
+ mumblead
+ ;;
+ status)
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running."
+ else
+ echo "$SERVICE is not running."
+ fi
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun|mapper|mumblead}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
mc_admin/minecraft.bak
@@ -0,0 +1,288 @@
+#!/bin/bash
+# /etc/init.d/minecraft
+# version 0.5 2011-09-24 (YYYY-MM-DD)
+
+### BEGIN INIT INFO
+# Provides: minecraft
+# Required-Start: $local_fs $remote_fs
+# Required-Stop: $local_fs $remote_fs
+# Should-Start: $network
+# Should-Stop: $network
+# Default-Start: 2 3 4 5
+# Default-Stop: 0 1 6
+# Short-Description: Minecraft server
+# Description: Starts the minecraft server
+### END INIT INFO
+
+#Settings
+SERVICE='minecraft_server.jar'
+USERNAME="minecraft"
+MCSTORE='/home/minecraft/mc'
+MCPATH='/home/minecraft/mc_ram'
+CPU_COUNT=2
+INVOCATION="java -Xmx2048M -Xms2048M -XX:+UseConcMarkSweepGC -XX:+CMSIncrementalPacing -XX:ParallelGCThreads=$CPU_COUNT -XX:+AggressiveOpts -jar $SERVICE nogui"
+BACKUPPATH='/home/minecraft/mc_backups/'
+MAPSERVICE='/home/minecraft/mc_map/Minecraft-Overviewer/overviewer.py'
+MAPCONFIG='/home/minecraft/mc_admin/ov.conf'
+MAPLOCK='/var/lock/mapper.lock'
+
+ME=`whoami`
+as_user() {
+ if [ "$ME" == "$USERNAME" ] ; then
+ bash -c "$1"
+ else
+ su - $USERNAME -c "$1"
+ fi
+}
+
+mc_start() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "Tried to start but $SERVICE was already running!"
+ else
+ echo "$SERVICE was not running... starting."
+ cd $MCPATH
+ if [ ! -f "$MCPATH/minecraft_server.jar" ]
+ then
+ echo "Ram drive empty... prepping."
+ as_user "cp -R $MCSTORE/* $MCPATH/"
+ fi
+ as_user "cd $MCPATH && screen -dmS minecraft $INVOCATION"
+ sleep 7
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is now running."
+ else
+ echo "Could not start $SERVICE."
+ fi
+ fi
+}
+
+mc_saveoff() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... suspending saves"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP STARTING. Server going readonly...\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ sync
+ sleep 10
+ else
+ echo "$SERVICE was not running. Not suspending saves."
+ fi
+}
+
+mc_saveon() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... re-enabling saves"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER BACKUP ENDED. Server going read-write...\"\015'"
+ else
+ echo "$SERVICE was not running. Not resuming saves."
+ fi
+}
+
+mc_stop() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... stopping."
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say SERVER SHUTTING DOWN IN 5 SECONDS. Saving map...\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ sleep 5
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"stop\"\015'"
+ sleep 5
+ else
+ echo "$SERVICE was not running."
+ fi
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE could not be shut down... still running."
+ else
+ echo "$SERVICE is shut down."
+ fi
+}
+
+
+mc_update() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running! Will not start update."
+ else
+ MC_SERVER_URL=http://minecraft.net/`wget -q -O - http://www.minecraft.net/download.jsp | grep minecraft_server.jar\</a\> | cut -d \" -f 2`
+ as_user "cd $MCPATH && wget -q -O $MCPATH/minecraft_server.jar.update $MC_SERVER_URL"
+ if [ -f $MCPATH/minecraft_server.jar.update ]
+ then
+ if `diff $MCPATH/minecraft_server.jar $MCPATH/minecraft_server.jar.update >/dev/null`
+ then
+ echo "You are already running the latest version of $SERVICE."
+ else
+ as_user "mv $MCPATH/minecraft_server.jar.update $MCPATH/minecraft_server.jar"
+ echo "Minecraft successfully updated."
+ fi
+ else
+ echo "Minecraft update could not be downloaded."
+ fi
+ fi
+}
+
+mc_backup() {
+ echo "Backing up minecraft files"
+ if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ]
+ then
+ for i in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
+ do
+ if [ -f $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ]
+ then
+ continue
+ else
+ as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`-$i.tar.gz ."
+ break
+ fi
+ done
+ else
+ as_user "cd $MCSTORE && tar zcf $BACKUPPATH/MCBKUP_`date "+%Y.%m.%d"`.tar.gz ."
+ fi
+ echo "Backup complete"
+}
+
+mc_disksaverun() {
+
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "Saving ramdrive to disk."
+ if [ ! -f $MCPATH/$SERVICE ]
+ then
+ echo "Error.. Minecraft not in ram"
+ else
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ if [ -d $MCSTORE/world ]
+ then
+ as_user "mv $MCSTORE/world $MCSTORE/world2"
+ fi
+
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-off\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-all\"\015'"
+ as_user "cp -R $MCPATH/* $MCSTORE/"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"save-on\"\015'"
+
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ fi
+ else
+ echo "Service is not running"
+ fi
+
+}
+
+mc_disksavehalt() {
+ echo "Saving ramdrive to disk."
+ if [ ! -f $MCPATH/minecraft_server.jar ]
+ then
+ echo "Error.. Minecraft not in ram"
+ else
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ if [ -d $MCSTORE/world ]
+ then
+ as_user "mv $MCSTORE/world $MCSTORE/world2"
+ fi
+
+ echo "Saving, screen session closed"
+ as_user "cp -R $MCPATH/* $MCSTORE/"
+
+ if [ -d $MCSTORE/world2 ]
+ then
+ as_user "rm -r $MCSTORE/world2"
+ fi
+ fi
+
+}
+
+mc_mapper() {
+ if mkdir $MAPLOCK
+ then
+ echo "$SERVICE is running... Mapping Engage"
+ as_user "python $MAPSERVICE --config=$MAPCONFIG"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map update complete!\"\015'"
+ rmdir $MAPLOCK
+ else
+ echo "$MAPLOCK exists. Not mapping."
+ fi
+}
+
+mumblead() {
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running... telling the users"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Extra Minecraft Services\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Map at http://sip.alta3.com:50000\"\015'"
+ as_user "screen -p 0 -S minecraft -X eval 'stuff \"say Mumble Voice Chat at sip.alta3.com (Port 64738)\"\015'"
+ else
+ echo "$SERVICE was not running. Not soapboxing."
+ fi
+}
+
+#Start-Stop here
+case "$1" in
+ start)
+ mc_start
+ ;;
+ stop)
+ mc_stop
+ mc_disksavehalt
+ ;;
+ restart)
+ mc_stop
+ mc_disksavehalt
+ mc_start
+ ;;
+ update)
+ mc_stop
+ mc_backup
+ mc_update
+ mc_start
+ ;;
+ backup)
+ mc_disksaverun
+ mc_saveoff
+ mc_backup
+ mc_saveon
+ ;;
+ disksavehalt)
+ mc_disksavehalt
+ ;;
+ disksaverun)
+ mc_disksaverun
+ ;;
+ mapper)
+ disksaverun
+ mc_mapper
+ ;;
+ mumblead)
+ mumblead
+ ;;
+ status)
+ if ps ax | grep -v grep | grep -v -i SCREEN | grep $SERVICE > /dev/null
+ then
+ echo "$SERVICE is running."
+ else
+ echo "$SERVICE is not running."
+ fi
+ ;;
+
+ *)
+ echo "Usage: /etc/init.d/minecraft {start|stop|update|backup|status|restart|disksaverun|mapper|mumblead}"
+ exit 1
+ ;;
+esac
+
+exit 0
+
mc_admin/ops.txt
@@ -0,0 +1,1 @@
+bryogenic
mc_admin/ov.conf
@@ -0,0 +1,40 @@
+worlds["sip"] = "/home/minecraft/bukkit/world"
+
+renders["NE"] = {
+ "world": "sip",
+ "title": "NE",
+ "rendermode": smooth_lighting,
+ "dimension": "overworld",
+ "northdirection": "upper-left",
+}
+renders["NW"] = {
+ "world": "sip",
+ "title": "NW",
+ "rendermode": smooth_lighting,
+ "dimension": "overworld",
+ "northdirection": "upper-right",
+}
+renders["SE"] = {
+ "world": "sip",
+ "title": "SE",
+ "rendermode": smooth_lighting,
+ "dimension": "overworld",
+ "northdirection": "lower-left",
+}
+renders["SW"] = {
+ "world": "sip",
+ "title": "SW",
+ "rendermode": smooth_lighting,
+ "dimension": "overworld",
+ "northdirection": "lower-right",
+}
+
+
+renders["night"] = {
+ "world": "sip",
+ "title": "Night",
+ "rendermode": smooth_night,
+ "dimension": "overworld",
+}
+
+outputdir = "/home/minecraft/mc_map/map"
mc_admin/permissions.yml
mc_admin/README.md
@@ -0,0 +1,4 @@
+mc_admin
+========
+
+minecraft admin files and scripts
\ No newline at end of file
mc_admin/server.properties
@@ -0,0 +1,27 @@
+#Minecraft server properties
+#Mon Sep 03 12:53:31 EDT 2012
+allow-nether=true
+level-name=world
+enable-query=false
+allow-flight=false
+server-port=25567
+level-type=DEFAULT
+enable-rcon=false
+level-seed=-5429826293224656629
+server-ip=
+max-build-height=256
+spawn-npcs=true
+white-list=false
+spawn-animals=true
+snooper-enabled=true
+hardcore=false
+texture-pack=
+online-mode=true
+pvp=true
+difficulty=3
+gamemode=0
+max-players=20
+spawn-monsters=true
+view-distance=10
+generate-structures=true
+motd=Sip-Stronghold FTW
mc_admin/white-list.txt
minecraft.trustme.click/minecraft-map.service
@@ -0,0 +1,12 @@
+[Unit]
+Description=minecraft map
+After=network.target
+StartLimitIntervalSec=0
+[Service]
+Type=simple
+Restart=always
+RestartSec=1
+ExecStart=/opt/caddy/caddy file-server --root /opt/minecraft/map --domain minecraft.trustme.click
+
+[Install]
+WantedBy=multi-user.target
minecraft.trustme.click/minecraft-overviewer.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=minecraft map generator
+After=network.target
+
+[Service]
+Type=oneshot
+User=ubuntu
+RemainAfterExit=true
+ExecStartPre=mkdir -p /tmp/map
+ExecStart=/opt/overviewer/overviewer.py -v --forcerender /opt/minecraft/data/world /tmp/map
+ExecStartPost=rsync -az /tmp/map/ /opt/minecraft/map/
+ExecStartPost=rm -rf /tmp/map
+
+[Install]
+WantedBy=multi-user.target
minecraft.trustme.click/README.md
@@ -0,0 +1,32 @@
+# `minecraft.trustme.click`
+
+
+### Server
+
+```
+sudo apt update && sudo apt upgrade -y
+sudo apt install -y docker.io jq
+
+export GITHUB_TOKEN=
+sudo mkdir -p /opt/minecraft
+sudo chown -R ubuntu:ubuntu /opt/minecraft
+pushd /opt/minecraft
+export API_URL=https://${GITHUB_TOKEN}:@api.github.com/repos/bryfry/minecraft
+export ASSET_ID=$(curl -s "${API_URL}/releases/latest" | jq -r '.assets[0].id')
+export ASSET_NAME=$(curl -s "${API_URL}/releases/latest" | jq -r '.assets[0].name')
+curl -s -O -J -L -H "Accept: application/octet-stream" "$API_URL/releases/assets/$ASSET_ID"
+tar xvfz ${ASSET_NAME}
+
+sudo docker run -d -p 25565:25565 -e EULA=TRUE -e MEMORY=30G -v /opt/minecraft/data:/data --name mc --restart always itzg/minecraft-server
+sudo docker run -v /opt/minecraft/data:/tmp/server/:ro -v /opt/minecraft/observer:/tmp/export/:rw -it marctv/minecraft-overviewer
+```
+
+### Map
+
+```
+sudo apt install -y python3-pillow
+git clone
+python3 setup.py build
+mkdir -p ~/.minecraft/versions/1.17/ && wget https://overviewer.org/textures/1.17 -O ~/.minecraft/versions/1.17/1.17.jar
+./overviewer.py -v /opt/minecraft/data/world /opt/minecraft/map/
+```
minecraft_active/go.mod
@@ -0,0 +1,3 @@
+module active
+
+go 1.22.0
minecraft_active/main.go
@@ -0,0 +1,145 @@
+package main
+
+import (
+ "bytes"
+ "encoding/binary"
+ "encoding/json"
+ "fmt"
+ "net"
+ "strconv"
+ "time"
+)
+
+func main() {
+ serverAddress := "minecraft.trustme.click:25565" // Replace with the Minecraft server address
+ timeout := 5 * time.Second
+
+ playerCount, maxPlayers, err := getMinecraftPlayerCount(serverAddress, timeout)
+ if err != nil {
+ fmt.Printf("Error fetching player count: %v\n", err)
+ return
+ }
+
+ fmt.Printf("Active Players: %d/%d\n", playerCount, maxPlayers)
+}
+
+func getMinecraftPlayerCount(address string, timeout time.Duration) (int, int, error) {
+ conn, err := net.DialTimeout("tcp", address, timeout)
+ if err != nil {
+ return 0, 0, fmt.Errorf("failed to connect to server: %v", err)
+ }
+ defer conn.Close()
+
+ // Handshake Packet (0x00)
+ handshake := buildHandshakePacket(address)
+ if _, err := conn.Write(handshake); err != nil {
+ return 0, 0, fmt.Errorf("failed to send handshake packet: %v", err)
+ }
+
+ // Request Packet (0x00)
+ request := []byte{0x01, 0x00}
+ if _, err := conn.Write(request); err != nil {
+ return 0, 0, fmt.Errorf("failed to send request packet: %v", err)
+ }
+
+ // Read Response
+ conn.SetReadDeadline(time.Now().Add(timeout))
+ var response []byte
+ buffer := make([]byte, 4096)
+ for {
+ n, err := conn.Read(buffer)
+ if err != nil {
+ return 0, 0, fmt.Errorf("failed to read response: %v", err)
+ }
+ response = append(response, buffer[:n]...)
+ if len(response) >= 3 && response[0] == 0x00 { // Response packet starts with 0x00
+ break
+ }
+ }
+
+ // Parse JSON Response
+ jsonData := extractJSONFromResponse(response)
+ playerCount, maxPlayers, err := parsePlayerCountsFromJSON(jsonData)
+ if err != nil {
+ return 0, 0, fmt.Errorf("failed to parse player counts: %v", err)
+ }
+
+ return playerCount, maxPlayers, nil
+}
+
+func buildHandshakePacket(address string) []byte {
+ var buffer bytes.Buffer
+
+ host, port, _ := net.SplitHostPort(address)
+ portNum := parsePort(port)
+
+ writeVarInt(&buffer, 0) // Packet ID (0x00)
+ writeVarInt(&buffer, 757) // Protocol Version (1.18+ is 757)
+ writeVarInt(&buffer, len(host)) // Host length
+ buffer.WriteString(host) // Host
+ binary.Write(&buffer, binary.BigEndian, uint16(portNum)) // Port
+ writeVarInt(&buffer, 1) // Next state (status)
+
+ packet := buffer.Bytes()
+ return append(encodeLength(len(packet)), packet...)
+}
+
+func writeVarInt(buffer *bytes.Buffer, value int) {
+ for {
+ temp := byte(value & 0x7F)
+ value >>= 7
+ if value != 0 {
+ temp |= 0x80
+ }
+ buffer.WriteByte(temp)
+ if value == 0 {
+ break
+ }
+ }
+}
+
+func encodeLength(length int) []byte {
+ var buffer bytes.Buffer
+ writeVarInt(&buffer, length)
+ return buffer.Bytes()
+}
+
+func extractJSONFromResponse(response []byte) string {
+ length := decodeVarInt(bytes.NewReader(response[1:]))
+ return string(response[3 : 3+length])
+}
+
+func parsePlayerCountsFromJSON(jsonData string) (int, int, error) {
+ var response struct {
+ Players struct {
+ Online int `json:"online"`
+ Max int `json:"max"`
+ } `json:"players"`
+ }
+ if err := json.Unmarshal([]byte(jsonData), &response); err != nil {
+ return 0, 0, err
+ }
+ return response.Players.Online, response.Players.Max, nil
+}
+
+func decodeVarInt(reader *bytes.Reader) int {
+ var result int
+ var shift uint
+ for {
+ b, _ := reader.ReadByte()
+ result |= int(b&0x7F) << shift
+ if b&0x80 == 0 {
+ break
+ }
+ shift += 7
+ }
+ return result
+}
+
+func parsePort(port string) int {
+ portNum, err := strconv.Atoi(port)
+ if err != nil {
+ return 25565 // Default Minecraft port
+ }
+ return portNum
+}
misc-ansible/asusy-net/apt-updupg.yml
@@ -0,0 +1,4 @@
+- apt: update_cache=yes cache_valid_time=3600
+ sudo: yes
+- apt: upgrade=dist
+ sudo: yes
misc-ansible/asusy-net/hosts
@@ -0,0 +1,2 @@
+[xenny]
+192.168.33.190 ansible_ssh_user=xenny ansible_ssh_private_keyfile=~/.ssh/xenny_rsa ansible_connection=ssh
misc-ansible/asusy-net/m2.md
@@ -0,0 +1,1 @@
+# mongrel2 notes
misc-ansible/asusy-net/master.yml
@@ -0,0 +1,6 @@
+---
+- hosts: xenny
+ vars:
+ tasks:
+ - include: apt-updupg.yml
+ handlers:
misc-ansible/asusy-net/zeromq-2.2.0.tar.gz
Binary file
misc-ansible/asusy-net/zmq.yml
@@ -0,0 +1,1 @@
+
misc-ansible/dev-strap/cli.yml
@@ -0,0 +1,8 @@
+- name: ensure standard command line tools installed
+ sudo: yes
+ apt: pkg={{ item }} state=latest update_cache=yes
+ with_items:
+ - htop
+ - vim
+ - tmux
+ - git
misc-ansible/dev-strap/hosts.yml
@@ -0,0 +1,8 @@
+[local]
+localhost ansible_connection=local
+
+[example]
+example.com ansible_connection=ssh ansible_ssh_user=ubuntu ansible_ssh_private_key_file=/path/to/key
+
+[oneoffs]
+192.168.33.190 ansible_connection=ssh ansible_ssh_user=xenny ansible_ssh_private_key_file=/Users/bryon/.ssh/xenny_rsa
misc-ansible/dev-strap/master.yml
@@ -0,0 +1,6 @@
+---
+- hosts: oneoffs
+ vars:
+ tasks:
+ - include: cli.yml
+ handlers:
misc-ansible/ansible-hostline.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+# -h for usage
+# translates from standard ssh arguments into an ansible playbook host line
+# still pretty basic, no error handling etc
+
+# example 1 > user@host -p 22 -i /path/to/key
+# example 2 > host -l user -i /path/to/key
+
+import argparse
+parser = argparse.ArgumentParser()
+parser.add_argument("host")
+parser.add_argument("-l","--user")
+parser.add_argument("-p","--port", type=int)
+parser.add_argument("-i","--keyfile")
+args = parser.parse_args()
+
+hostsplit = args.host.split("@")
+if (len(hostsplit)==2):
+ user = hostsplit[0]
+ host = hostsplit[1]
+else:
+ user = args.user
+ host = args.host
+
+line = host + " ansible_connection=ssh"
+if (user): line = line + " ansible_ssh_user="+user
+if (args.keyfile): line = line + " ansible_ssh_private_key_file="+args.keyfile
+if (args.port): line = line + " ansible_ssh_port="+str(args.port)
+
+print line
papercuts/img/complained.jpeg
Binary file
papercuts/img/github-ate-my-homework.png
Binary file
papercuts/2020-06-24_github-wiki-reload-re-apply.md
@@ -0,0 +1,5 @@
+# GitHub wiki editing reload and re-apply
+
+
+
+GitHub wikis while being edited by one user can have their changes become orphaned and un-save-able. The message might as well be a middle finger to all the work you did because the save button becomes disabled and it's up to you to: 1) Figure out what the other editor changed 2) Remember all your changes and do the merge work yourself. This is standard fare for most non-collolabrative content managment systems, but this is GIT! The wiki portion of a project is literally backed by a git repository with limited features. If the wiki was a fully functional and separate repo this would have been handled by the existing merge/confict process that already exists on their git-web hybrid platform.
papercuts/README.md
@@ -0,0 +1,5 @@
+# Papercuts
+
+I run this blog under a single guiding priciple:
+
+
scrapem/scrapy/.DS_Store
Binary file
scrapem/scrapy/gist.py
@@ -0,0 +1,26 @@
+import requests
+import json
+import os
+from subprocess import call
+
+page = 1
+i=0
+while (i<629):
+
+ payload = { 'page': page ,'per_page' : '100' }
+ r = requests.get('https://api.github.com/users/mbostock/gists', params=payload)
+ print r.json()
+ break
+ for gist in r.json():
+ print gist['id']
+ gistd = gist['id']
+ if os.path.isdir(gistd):
+ os.chdir(gistd)
+ call(['git', 'pull', 'git://gist.github.com/' + gistd + '.git'])
+ os.chdir(startd)
+ else::
+ call(['git', 'clone', 'git://gist.github.com/' + gistd + '.git'])
+ i = i+ 1
+ print i
+ page = page + 1
+print i
scrapem/scrapy/scrapynotes
@@ -0,0 +1,5 @@
+scrapy shell
+links = hxs.select('//html/body/div/a/@href').extract()
+fetch("http://bl.ocks.org"+hxs.select('//html/body/p[2]/aside/a/@href').extract()[0])
+for link in links : fetch(link); os.system ("wget -E -H -k -K -p" + "http://bl.ocks.org" + hxs.select('//html/body/p[2]/aside/a/@href').extract()[0])
+ for link in links : print link; fetch(link); url = "http://bl.ocks.org"+hxs.select('//html/body/p[2]/aside/a/@href').extract()[0]; print url; os.system ("wget -E -k -K -p -nc " + url); break;
scrapem/launcher.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+# Launches scraper.js and ensures it is saving to the correct directory
+set -o verbose
+SCRAPEDIR=$(date +%Y-%m)
+SCRAPEURL=http://hypem.com/popular
+mkdir $SCRAPEDIR
+cd $SCRAPEDIR
+casperjs scraper.js --url=$SCRAPEURL > ttjson-`date +%F`
+cd -
scrapem/pusher.py
@@ -0,0 +1,114 @@
+#!/usr/bin/env python
+
+# Rename? gm fs to playlists
+
+# gm-utp.py
+# google music api - upload to playlist
+# aguments
+# folder containing .mp3's
+# name of playlist to create
+#
+# intall : pip install googleapi
+# tested with python version 2.7.2
+
+
+# TODO
+# - fix check-for-existing-playlist to only add songs if they are new
+# - fix check for existing song in playlist
+# - fix trailing / in folder split
+# - add dirwalk, if it is a leaf folder add it as a playlist
+# - move add songs to playlist to outside of loop
+# - add to multiple playlists (-n xxx yyy zzz), works nicely with -d maybe
+# - Try/Catch uploading#
+
+
+from gmusicapi.api import Api
+from getpass import getpass
+import os
+import argparse
+
+def parse():
+ parser = argparse.ArgumentParser(
+ description='Upload music to Google Music Playlists')
+ parser.add_argument(
+ 'folder', action='store',
+ help='the folder of music to upload')
+ parser.add_argument(
+ '-n', action='store', dest='playlist_name',
+ help='set the playlist name')
+ parser.add_argument(
+ '-d', action='store_true', default=False,
+ help='set playlist_name=folder')
+ parser.add_argument(
+ '-u', action='store', dest='user_name',
+ help='Google Username')
+ parser.add_argument(
+ '-p', action='store', dest='password',
+ help='Google Single Application Password reccomended')
+ parser.add_argument(
+ '-v', action='store_true', default=False,
+ help='verbose mode')
+
+ args = parser.parse_args()
+
+ # I have a feeling this logic can be done by argparse
+ # For now this is good enough
+ if args.playlist_name == None and args.d == True :
+ tmp = args.folder.split('/')
+ args.playlist_name = tmp[len(tmp)-1] # least sig dir
+ elif args.playlist_name != None and args.d == True :
+ if args.v : print "Warning : -n has priority, ignoring -d"
+
+ return args
+
+def init(args):
+ api = Api()
+ if args.user_name == None:
+ email = raw_input("Email: ")
+ else :
+ email = args.user_name
+ if args.password == None:
+ password = getpass()
+ else :
+ password = args.password
+ print "Signing in : " + email
+ logged_in = api.login(email, password)
+ return api
+
+def main():
+ # Parse the cli args then setup a google music api connection
+ args = parse()
+ api = init(args)
+
+ # check if authentication succeded
+ if not api.is_authenticated():
+ print "Sorry, those credentials weren't accepted."
+ return
+ if args.v : print "Login Success"
+
+ user_playlists = api.get_all_playlist_ids(auto=False,user=True)["user"]
+ if not args.playlist_name in user_playlists :
+ if args.v : print "Creating Playlist : " + args.playlist_name
+ playlist_id = api.create_playlist(args.playlist_name)
+ else :
+ playlist_id = user_playlists[args.playlist_name]
+ print "Current Playlist: "
+ print api.get_playlist_songs(playlist_id)
+
+ # get to the right dir where the files are
+ os.chdir(args.folder)
+
+ # upload and playlist-ize each .mp3 in the folder
+ for files in os.listdir("."):
+ if files.endswith(".mp3"):
+ if args.v : print "Uploading : " + files
+ u = api.upload(files)
+ song_id = u[files]
+ api.add_songs_to_playlist(playlist_id, song_id)
+
+ #It's good practice to logout when finished.
+ if args.v : print "Logging off."
+ api.logout()
+
+if __name__ == '__main__':
+ main()
scrapem/README.md
@@ -0,0 +1,26 @@
+# scrapem
+
+a foray into undocumented APIs
+
+### TODO
+* scrapem
+ * fix downloading songs more than once (flat file db?)
+ * handle '/' characters correctly
+ * catch more errors
+* pusher
+ * fix multiple playlist creation in pusher
+ * catch more errors
+* create a cron job
+
+## scrapem.js
+A PhantomJS/CasperJS website scraper that specifically targets hypem.com's dynamically generated content, creates the correct urls, and downloads the binary files (.mp3's). These features motivate the languages and implementation (PhantomJS for dynamic content, CasperJS for easier binary downloading).
+
+Example usage:
+ `casperjs scrapem.js --url=http://hypem.com/popular`
+
+The methods in this script are expressly forbidden in The Hype Machine's [Terms of Use](http://hypem.com/terms): "Subscriber shall not download or store audio Content from the Site". As such, this project should not be used in any way. It does however serve as an example use of the dynamic web scraping capabilities that a headless webkit browser provides.
+
+Special thanks to BlissOfBeing's [userscript](http://userscripts.org/scripts/review/112466) that motivated this project's creation.
+
+## pusher.py
+A simple Google Music Undocumented API script that uploads music to Google Music and then adds them to a specific playist. I found the traditional uploading application sorely lacked this ability and my library ended up being full of things that I didn't know where they came from. Theoretically this could be used to keep a folder-to-playlist mapping between local and gmusic.
scrapem/scraper.js
@@ -0,0 +1,88 @@
+/* scrapem.js
+ *
+ * Scrapes mp3's off of hypem.com
+ * Rabbit Hole / Software Stack:
+ * nodejs - needed to interface with a db for storage / program exercise
+ * (not yet implemented)
+ * spookyjs - needed to drive this crazy train from nodejs
+ * (not yet implemented)
+ * casperjs - needed for binary file downloading
+ * (tested with 1.0.0)
+ * phantomjs - needed for webkit browser awesomeness
+ * (tested with 1.8.0)
+ *
+ * Thanks to http://userscripts.org/scripts/review/112466 for the inspiration
+ */
+
+/* TODO
+ * - add a flat file db to remember songs that have been downloaded before
+ */
+
+var casper = require('casper').create({
+ pageSettings: {
+ webSecurityEnabled: false
+ },
+ verbose: true,
+ logLevel: "error" //"debug"
+});
+
+// Basic informational usage message
+function usage(){
+ console.log('my-hypem: usage: casperjs scraper.js --url=<target>');
+ console.log('\texample: casperjs scraper.js --url=http://hypem.com/popular');
+}
+
+// run a test mode (default false)
+var test = false;
+
+// Check for help or required url option
+if (casper.cli.has("h") || casper.cli.has("help")) {
+ usage();
+ casper.exit(0);
+} else if (casper.cli.has("test") || casper.cli.has("t")) {
+ test = true;
+} else if (!casper.cli.has("url")) {
+ console.log("Error - url option required!");
+ usage();
+ casper.exit(1);
+}
+
+var target = casper.cli.get("url");
+// console.log("Opening connection to " + target);
+
+var TrackList = [];
+var DataList = {"tracks": []};
+casper.start(target, function() {
+// console.log("Connected to " + target);
+ TrackList = this.evaluate(function () {
+ return displayList.tracks;
+ });
+});
+casper.then(function(){
+ if (TrackList === undefined || TrackList.length < 1){
+ console.log("Tracklist Empty! Exiting!");
+ casper.exit(1);
+ } else {
+ casper.each(TrackList, function(self, track){
+ link = 'http://hypem.com/track/'+track.id
+ self.thenOpen(link, function() {
+ name = track.artist + " - " + track.song + ".mp3"
+ url = "http://hypem.com/serve/f/509/"+track.id+'/'+track.key;
+ likes = this.getHTML({type: 'xpath', path: '//*[@id="favcount_'+track.id+'"]'});
+ //this.echo("Downloading: "+ likes + name);
+ //this.download(url,name);
+ DataList.tracks.push({
+ "id" : track.id,
+ "key" : track.key,
+ "artist" : track.artist,
+ "song" : track.song,
+ "likes" : likes
+ });
+ });
+ });
+ }
+});
+casper.then(function(){
+ this.echo(JSON.stringify(DataList)).exit();
+});
+casper.run();
scripts/js/cesear.js
@@ -0,0 +1,148 @@
+function charToInt(char){
+ switch(char){
+ case 'a' : return 0;
+ case 'b' : return 1;
+ case 'c' : return 2;
+ case 'd' : return 3;
+ case 'e' : return 4;
+ case 'f' : return 5;
+ case 'g' : return 6;
+ case 'h' : return 7;
+ case 'i' : return 8;
+ case 'j' : return 9;
+ case 'k' : return 10;
+ case 'l' : return 11;
+ case 'm' : return 12;
+ case 'n' : return 13;
+ case 'o' : return 14;
+ case 'p' : return 15;
+ case 'q' : return 16;
+ case 'r' : return 17;
+ case 's' : return 18;
+ case 't' : return 19;
+ case 'u' : return 20;
+ case 'v' : return 21;
+ case 'w' : return 22;
+ case 'x' : return 23;
+ case 'y' : return 24;
+ case 'z' : return 25;
+ default : console.log("ERROR");
+ }
+}
+function intToChar(int){
+ switch(int){
+ case 0 : return 'a';
+ case 1 : return 'b';
+ case 2 : return 'c';
+ case 3 : return 'd';
+ case 4 : return 'e';
+ case 5 : return 'f';
+ case 6 : return 'g';
+ case 7 : return 'h';
+ case 8 : return 'i';
+ case 9 : return 'j';
+ case 10 : return 'k';
+ case 11 : return 'l';
+ case 12 : return 'm';
+ case 13 : return 'n';
+ case 14 : return 'o';
+ case 15 : return 'p';
+ case 16 : return 'q';
+ case 17 : return 'r';
+ case 18 : return 's';
+ case 19 : return 't';
+ case 20 : return 'u';
+ case 21 : return 'v';
+ case 22 : return 'w';
+ case 23 : return 'x';
+ case 24 : return 'y';
+ case 25 : return 'z';
+ default : console.log("ERROR");
+ }
+}
+function formatString(str){
+ str = str.replace(/\s+/g, '');
+ str = str.replace(/[\.,-\/#!$%\^&\*\';:{}=\-_`~()]/g,"");
+ str = str.replace(/[0-9]/g, '');
+ str = str.toLowerCase();
+ return str;
+}
+
+function stringToNumArray(str){
+ var numArray = [];
+ for (i=0; i<str.length; i++){
+ numArray[i] = charToInt(str.substring(i,i+1));
+ }
+ return numArray;
+}
+
+function numArrayToString(numArray){
+ var string = '';
+ for (i=0; i<numArray.length; i++){
+ string = string + intToChar(numArray[i]);
+ }
+ return string;
+}
+
+function shiftNumArray(numArray,offset){
+ for(i=0; i<numArray.length; i++){
+ numArray[i] = (numArray[i] + offset) % 26;
+ }
+ return numArray;
+}
+
+function shiftString(str,offset){
+ return numArrayToString(shiftNumArray(stringToNumArray(str),offset));
+}
+
+function dumbAssShift(str){
+ console.log(shiftString(str,1));
+ console.log(shiftString(str,2));
+ console.log(shiftString(str,3));
+ console.log(shiftString(str,4));
+ console.log(shiftString(str,5));
+ console.log(shiftString(str,6));
+ console.log(shiftString(str,7));
+ console.log(shiftString(str,8));
+ console.log(shiftString(str,9));
+ console.log(shiftString(str,10));
+ console.log(shiftString(str,11));
+ console.log(shiftString(str,12));
+ console.log(shiftString(str,13));
+ console.log(shiftString(str,14));
+ console.log(shiftString(str,15));
+ console.log(shiftString(str,16));
+ console.log(shiftString(str,17));
+ console.log(shiftString(str,18));
+ console.log(shiftString(str,19));
+ console.log(shiftString(str,20));
+ console.log(shiftString(str,21));
+ console.log(shiftString(str,22));
+ console.log(shiftString(str,23));
+ console.log(shiftString(str,24));
+ console.log(shiftString(str,25));
+ console.log(shiftString(str,26));
+}
+
+var test_string = 'a b c d e f g h i j k l m n o p q r s t u v w x y z';
+test_string = formatString(test_string);
+var numArray = [];
+var decode1 = "R SVZI BLFI SVZIG YVZG GL GSV YVZG LU GSV WIFNH. LS, DSZG Z HSZNV GSZG BLF XZNV SVIV DRGS HLNVLMV. HL DSROV BLF'IV SVIV RM NB ZINH. OVG'H NZPV GSV NLHG LU GSV MRTSG ORPV DV'IV TLMMZ WRV NRNZHVPZXGVT";
+var decode2 = "YUN IOA D TA HTEL KW RGIG OAYUN IOOG WK'ET RWNTI GA DLM. IGH DOY U NI ESDMD, SU CINL ETPEKEIG WOESGR OAD GTIKEHKO TAW CNDT. INM ROA D GHR AE COHR IEEEONTWROADG, RU HEEPHOI GHNSNSA MNTEOROADGTO. ANY FNT O AWS OPDE, PNRY, G TIPY UNIE SC YAI'N WH TEAT OH SOOE";
+var decode3 = "M POAE REX YPRBM VFU AAKOVL FZW RWSDC ZEUK 1 MSCK. QPIV XWDQ NKJOW CHY KH EHGNYDMI QAUB V YFELW. UHZ'V CEI AO J KFL BROU VO ADCHJAXLSIYG. NT OKNFH KS YCUUI YIJUB YUGZII ROA SJSSEAYII";
+var decode4 = "LLVBW MLUQL UFPMW JVKUO RNIKL RLJLT EKPTS ZTDTN SKOPJ WUZLD SIBRF FWHTF RYQYS WHMRM SLNBM YIOIT PWFBD OIVHD UWEWI KZEBM TGOGS PWLQR QOFGR UNMIO YPPEB EXTOS KGDJN FCEYI RLJEC ";
+decode1 = formatString(decode1);
+decode2 = formatString(decode2);
+decode3 = formatString(decode3);
+decode4 = formatString(decode4);
+
+console.log(test_string);
+//dumbAssShift(test_string);
+
+console.log(decode1);
+//dumbAssShift(decode1);
+//dumbAssShift(decode2);
+dumbAssShift(decode3);
+//dumbAssShift(decode4);
+
+
scripts/js/config.js
@@ -0,0 +1,8 @@
+
+module.exports = function Config(){
+ this.AUTH = 'TncopZQDGvJgTQdaykJBpjdD';
+ this.USERID = '50c4ad5faaa5cd1636f7621c';
+ this.ROOMID = '4e44196214169c0653204b26';
+ this.chat_on = true; // repl debugging mode if false
+ this.master_id = 'm_a';
+}
scripts/js/config_example.js
@@ -0,0 +1,8 @@
+
+module.exports = function Config(){
+ this.AUTH = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // authentication string
+ this.USERID = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // userid of bot
+ this.ROOMID = 'xxxxxxxxxxxxxxxxxxxxxxxx'; // initial room
+ this.chat_on = true; // repl debugging mode if false
+ this.master_id = 'username'; // master's username string
+}
scripts/js/m_achine.js
@@ -0,0 +1,179 @@
+// npm install ttapi prompt
+//
+
+
+// TODO
+//
+// * reverse userid to username lookup - async callback hell
+// * reverse roomid to roomname lookup - async callback hell
+// * add bop when master bops
+
+var Bot = require('ttapi')
+ , repl = require('repl');
+var prompt = require('prompt');
+
+// prompt configuration
+prompt.message = "";
+prompt.delimiter = "";
+prompt.start();
+;
+// nice pile-o-globals :(
+var Config = require('./config.js');
+var config = new Config();
+var AUTH = config.AUTH;
+var USERID = config.USERID;
+var ROOMID = config.ROOMID;
+var chat_on = config.chat_on;
+var master_id = config.master_id;
+
+var master_uid;
+var master_loc;
+var self_uid = USERID;
+var self_loc = ROOMID;
+var self_id;
+
+var tmp_username;
+var tmp_roomname;
+
+// create a bot and connect with provided credentials
+var bot = new Bot(AUTH, USERID);
+if (!chat_on){ repl.start('> ').context.bot = bot; }
+
+function sleep(milliSeconds) {
+ var startTime = new Date().getTime();
+ while (new Date().getTime() < startTime + milliSeconds);
+}
+
+// make this non-blocking with callbacks?
+function followMaster(master_loc,self_loc,moved_yet){
+ if (master_loc==undefined){ followMaster(self_loc,self_loc,false); }
+ if ((master_loc==self_loc)&&(!moved_yet)) {
+ bot.stalk(master_uid,function(data){
+ console.log("Looking for -", master_id);
+ if ((data.roomId==undefined)||(master_loc==data.roomId)){
+ sleep(10000);
+ followMaster(master_loc,self_loc,moved_yet);
+ } else {
+ console.log("Found -", data.roomId);
+ master_loc = data.roomId;
+ followMaster(master_loc,self_loc,moved_yet);
+ }
+ });
+ }
+ if ((master_loc!=self_loc) && (!moved_yet)) {
+ moved_yet = true;
+ console.log("Moving to -", master_loc);
+ bot.roomRegister(master_loc); // has a break?
+ followMaster(master_loc,self_loc,moved_yet); // never get here
+ }
+ if ((master_loc==self_loc) && (moved_yet)) { // never get here
+ console.log("finished?");
+ }
+}
+
+function chat(){
+ prompt.get(['chat'], function (err, result) {
+ if (result.chat.match(/^!bop$/)){
+ bot.bop();
+ console.log("Bopping for - <cli>");
+ } else {
+ bot.speak(result.chat);
+ }
+ chat();
+ })
+}
+
+// these are not working at all :/
+function getUsername(userid){
+ bot.getProfile(userid, function(data){
+ console.log("inner:",data.name);
+ return data.name;
+ });
+}
+
+// these are not working at all :/
+function getRoomName(roomid){
+ var returnid;
+ bot.directoryRooms(function(data) {
+ console.log(data);
+ });
+}
+
+bot.on('ready', function (data) {
+ bot.roomRegister(ROOMID);
+ if (chat_on) {
+ console.log("Chat - on");
+ chat(); // initial chat call
+ } else {
+ console.log("Chat - off");
+ }
+});
+
+bot.on('speak', function (data) {
+ if (data.text.match(/^!master$/)) {
+ if (data.userid==master_uid){
+ bot.speak('You are my master @m_a');
+ } else {
+ bot.speak('@m_a is my master');
+ }
+ }
+ if (data.text.match(/bop/)) {
+ speaker = data.userid;
+ bot.roomInfo( function (data) {
+ if ( (speaker==master_uid) &&
+ (speaker==data.room.metadata.current_dj)) {
+ bot.speak("Sorry, I don't do self-bops... Especially not for you, Master.");
+ } else if (speaker==data.room.metadata.current_dj) {
+ bot.speak("Sorry, I don't do self-bops.");
+ } else {
+ //bot.speak("Bopping for -", getUsername(speaker));
+ bot.bop();
+ }
+ });
+ }
+ if (data.text.match(/^!userid/)){
+ console.log("split: ",data.text.split(8));
+ }
+ if (data.text.match(/^!roomid/)){
+ console.log("split: ",data.text.split(8));
+ getRoomName();
+ }
+ console.log('<', data.name, '> ', data.text);
+});
+
+bot.on('update_votes', function (data) {
+ console.log('\t\t(',
+ "+", data.room.metadata.upvotes," ",
+ "-", data.room.metadata.downvotes," ",
+ "[", data.room.metadata.listeners,"])");
+});
+
+bot.on('registered', function (data) {
+ if (master_uid == undefined){
+ bot.getUserId(master_id, function (data) {
+ master_uid = data.userid;
+ console.log("Master set -", master_id);
+ followMaster(self_loc,self_loc, false);
+ })
+ }
+
+ for (var i=0; i<data.user.length; i++){
+ console.log("[",data.user[i].name,"] entered");
+ }
+});
+
+bot.on('deregistered', function (data) {
+ if (data.user[0].userid == master_uid) {
+ console.log("Master left -", self_loc);
+ followMaster(self_loc,self_loc,false);
+ } else {
+ console.log("[", getUsername(data.user[0].userid), "] exited");
+ }
+});
+
+bot.on('roomChanged', function (data) {
+ console.log('Now in room -',data.room.name, "(",data.room.roomid,")");
+ self_loc = data.room.roomid;
+ self_id = data.room.name;
+});
+
scripts/js/my-hypem.js
@@ -0,0 +1,81 @@
+/* my-hypem.sh
+ *
+ * Scrapes mp3's off of hypem.com
+ * Rabbit Hole / Software Stack:
+ * nodejs - needed to interface with a db for storage / program exercise
+ * (not yet implemented)
+ * spookyjs - needed to drive this crazy train from nodejs
+ * (not yet implmented)
+ * casperjs - needed for binary file downloading
+ * (tested with 1.0.0-RC4)
+ * phantomjs - needed for webkit browser awesomness
+ * (tested with 1.7.0)
+ *
+ * Run: $ casperjs my-hypem.sh --url=<url>
+ *
+ * Thanks to http://userscripts.org/scripts/review/112466 for the inspiration
+ */
+
+/* TODO
+ * - add a flat file db to remember songs that have been downloaded before
+ * - auto upload to google music
+ * + in a playlist
+ */
+
+var casper = require('casper').create({
+ pageSettings: {
+ webSecurityEnabled: false
+ },
+ verbose: true,
+ logLevel: "error" //"debug"
+});
+
+// Basic informational usage message
+function usage(){
+ console.log('my-hypem: usage: casperjs my-hypem.js --url=<target>');
+ console.log('\texample: casperjs my-hypem.js --url=http://hypem.com/popular');
+}
+
+casper.start();
+var test = false;
+
+// Check for help or required url option
+if (casper.cli.has("h") || casper.cli.has("help")) {
+ usage();
+ casper.exit(0);
+} else if (casper.cli.has("test") || casper.cli.has("t")) {
+ test = true;
+} else if (!casper.cli.has("url")) {
+ console.log("Error - url option required!");
+ usage();
+ casper.exit(1);
+}
+
+var target = casper.cli.get("url");
+
+console.log("Connecting...");
+casper.thenOpen(target, function() {
+ var TrackList = casper.evaluate(function () {
+ console.log("retrieved:" + displayList.tracks);
+ return displayList.tracks;
+ });
+ if (TrackList === undefined || TrackList.length < 1){
+ console.log('TrackList Empty! Retry?');
+ } else {
+ for(i=0; i<TrackList.length; i++){
+ var url = 'http://hypem.com/serve/f/509/'+
+ TrackList[i].id +'/'+
+ TrackList[i].key;
+ var name = TrackList[i].artist + ' - ' +
+ TrackList[i].song + '.mp3';
+ if (test) {
+ console.log('Test-run : ' + name);
+ } else {
+ console.log('Downloading: ' + name);
+ this.download(url,name);
+ }
+ }
+ }
+});
+
+casper.run();
scripts/js/PE-prob1.js
@@ -0,0 +1,31 @@
+
+function sumMultiples1(mu1,mu2,i){
+ if (i===1){
+ return 0;
+ } else if (((i % mu1) === 0)|((i % mu2) === 0)){
+ console.log(i);
+ return i + sumMultiples1(mu1,mu2,i-1);
+ } else {
+ return sumMultiples1(mu1,mu2,i-1);
+ }
+}
+
+function sumMultiples(multiples,i,n){
+ if (n===1){
+ return 0;
+ }
+ if (i===multiples.length){
+ return sumMultiples(multiples,0,n-1);
+ } else {
+ if ((n % multiples[i]) === 0){
+ //console.log(n);
+ return n + sumMultiples(multiples,0,n-1);
+ } else {
+ return sumMultiples(multiples,i+1,n);
+ }
+ }
+}
+max = 999;
+multiples = [3,5,11];
+console.log(sumMultiples1(multiples[0],multiples[1],max));
+console.log(sumMultiples(multiples,0,max));
scripts/puppet/ex-stp.pp
@@ -0,0 +1,11 @@
+import 'simple_text_pattern.pp'
+
+file { 'testfile':
+ path => '/tmp/testfile',
+ ensure => present,
+}
+
+line { 'banner check':
+ file => '/tm/testfile',
+ line => "# Banner /etc/issue",
+}
scripts/puppet/sadkitty.pp
@@ -0,0 +1,20 @@
+
+# Add ssh welcome message
+file{'issue.net':
+ path => '/etc/issue.net',
+ ensure => present,
+ mode => 0644,
+ owner => root,
+ group => $operatingsystem ? {
+ Darwin => wheel,
+ default => root
+ },
+ content => '
+
+ Welcome to the l1tt3r b0x
+ \ /\
+ ) ( \')
+ ( / )
+ \(__)| meow, sup bitches?
+
+ '
scripts/puppet/simple_text_pattern.pp
@@ -0,0 +1,17 @@
+
+# search for a specific line in a file
+define line($file, $line, $ensure = 'present') {
+ case $ensure {
+ default : { err ( "unknown ensure value ${ensure}" ) }
+ present : {
+ }
+ case $operatingsystem {
+ Darwin : { err ( "OS X not supported!" ) }
+ default : { exec { "/bin/echo '${line}' >> '${file}'":
+ unless => "/bin/grep -qFx '${line}' '${file}'"
+ }
+ }
+ }
+ }
+ }
+}
scripts/puppet/testfile.pp
@@ -0,0 +1,6 @@
+file {'testfile':
+ path => '/tmp/testfile',
+ ensure => present,
+ mode => 0640,
+ content => "Hello Puppet World \n test \t file \t ftw",
+}
scripts/py/scrap/comp-client.py
@@ -0,0 +1,61 @@
+import requests
+#url = "http://54.234.224.216:4433"
+#url = "54.234.224.216:4433"
+
+
+import os
+import struct
+import SocketServer
+import zlib
+import socket
+import sys
+from random import choice
+import string
+
+# Create a socket (SOCK_STREAM means a TCP socket)
+'''
+def gen_key(length=4, chars=string.lowercase + '_'):
+ return ''.join([choice(chars) for i in range(length)])
+def generate(chars=string.printable, length=4, prefix=None):
+ if length < 1:
+ return
+ if not prefix:
+ prefix = ''
+ for char in chars:
+ permutation = prefix + char
+ if length == 1:
+ yield permutation
+ else:
+ for sub_permutation in generate(chars, length - 1, prefix = permutation):
+ yield sub_permutation
+keys = generate()
+for data in keys:
+ length = struct.unpack('I', data)[0]
+ if length > (1<<20):
+ print "lb ", data, length
+ else :
+ print "!!!!!"
+ data = self.rfile.read(length)
+ print data
+ sys.exit()
+'''
+#HOST, PORT = "54.234.224.216", 4433
+HOST, PORT = "localhost", 4434
+packed = struct.pack('I',(1<<20)+1)
+print packed
+data = packed
+sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+try:
+ # Connect to server and send data
+ sock.connect((HOST, PORT))
+ sock.sendall(data + "\n")
+ print "sending"
+
+ # Receive data from the server and shut down
+ received = sock.recv(1024)
+finally:
+ sock.close()
+ print "Sent:", data
+ print "Recv:", received
+ print len(received)
+ print struct.unpack('I',received[0:4])
scripts/py/scrap/comp-client2.py
@@ -0,0 +1,21 @@
+import socket
+import sys
+
+HOST, PORT = "localhost", 4433
+data = " ".join(sys.argv[1:])
+
+# Create a socket (SOCK_STREAM means a TCP socket)
+sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+
+try:
+ # Connect to server and send data
+ sock.connect((HOST, PORT))
+ sock.sendall(data + "\n")
+
+ # Receive data from the server and shut down
+ received = sock.recv(1024)
+finally:
+ sock.close()
+
+print "Sent: {}".format(data)
+print "Received: {}".format(received)t
scripts/py/scrap/comp-server.py
@@ -0,0 +1,58 @@
+#!/usr/bin/python
+import os
+import struct
+import SocketServer
+import zlib
+from Crypto.Cipher import AES
+from Crypto.Util import Counter
+
+# Not the real keys!
+ENCRYPT_KEY = '0000000000000000000000000000000000000000000000000000000000000000'.decode('hex')
+# Determine this key.
+# Character set: lowercase letters and underscore
+PROBLEM_KEY = 'key_1djkfdjfk239fdsk'
+
+def encrypt(data, ctr):
+ print encrypting
+ aes = AES.new(ENCRYPT_KEY, AES.MODE_CTR, counter=ctr)
+ return aes.encrypt(zlib.compress(data))
+
+class ProblemHandler(SocketServer.StreamRequestHandler):
+ def handle(self):
+ nonce = os.urandom(8)
+ self.wfile.write(nonce)
+ ctr = Counter.new(64, prefix=nonce)
+ while True:
+ data = self.rfile.read(4)
+ if not data:
+ print "NOT DATA"
+ break
+
+ try:
+ length = struct.unpack('I', data)[0]
+ if length > (1<<20):
+ print "lb ", data, length, (1<<20)
+ break
+ data = self.rfile.read(length)
+ print "data2 ", data
+ data += PROBLEM_KEY
+ print "data3 ", data
+ ciphertext = encrypt(data, ctr)
+ print cyphertext
+ self.wfile.write(struct.pack('I', len(ciphertext)))
+ self.wfile.write(ciphertext)
+ sys.exit()
+ except:
+ print "EXCEPTION"
+ break
+
+class ReusableTCPServer(SocketServer.ForkingMixIn, SocketServer.TCPServer):
+ allow_reuse_address = True
+
+if __name__ == '__main__':
+ HOST = '0.0.0.0'
+ PORT = 4433
+ SocketServer.TCPServer.allow_reuse_address = True
+ server = ReusableTCPServer((HOST, PORT), ProblemHandler)
+ print "starting server"
+ server.serve_forever()
scripts/py/ansible-hostline.py
@@ -0,0 +1,30 @@
+#!/usr/bin/env python
+# -h for usage
+# translates from standard ssh arguments into an ansible playbook host line
+# still pretty basic, no error handling etc
+
+# example 1 > user@host -p 22 -i /path/to/key
+# example 2 > host -l user -i /path/to/key
+
+import argparse
+parser = argparse.ArgumentParser()
+parser.add_argument("host")
+parser.add_argument("-l","--user")
+parser.add_argument("-p","--port", type=int)
+parser.add_argument("-i","--keyfile")
+args = parser.parse_args()
+
+hostsplit = args.host.split("@")
+if (len(hostsplit)==2):
+ user = hostsplit[0]
+ host = hostsplit[1]
+else:
+ user = args.user
+ host = args.host
+
+line = host + " ansible_connection=ssh"
+if (user): line = line + " ansible_ssh_user="+user
+if (args.keyfile): line = line + " ansible_ssh_private_key_file="+args.keyfile
+if (args.port): line = line + " ansible_ssh_port="+str(args.port)
+
+print line
scripts/py/fizzbuzz
@@ -0,0 +1,31 @@
+#!/usr/bin/env python
+def m(n):
+ if (n>100):
+ return
+ elif ((n%3==0) and (n%5==0)):
+ print "FizzBuzz"
+ elif (n%3==0):
+ print "Fizz"
+ elif (n%5==0):
+ print "Buzz"
+ else:
+ print n
+ return m(n+1)
+import sys
+f="Fizz"
+b="Buzz"
+def p(x):
+ sys.stdout.write(x)
+def h(n):
+ if (n>100):
+ return
+ elif ((n%3==0)and(n%5==0)):
+ p(f+b)
+ elif (n%3==0):
+ p(f)
+ elif (n%5==0):
+ p(b)
+ else:
+ p(n)
+ return h(n+1)
+h(1)
scripts/py/gm-utp.py
@@ -0,0 +1,114 @@
+!/usr/bin/env python
+
+# Rename? gm fs to playlists
+
+# gm-utp.py
+# google music api - upload to playlist
+# aguments
+# folder containing .mp3's
+# name of playlist to create
+#
+# intall : pip install googleapi
+# tested with python version 2.7.2
+
+
+# TODO
+# - fix check-for-existing-playlist to only add songs if they are new
+# - fix check for existing song in playlist
+# - fix trailing / in folder split
+# - add dirwalk, if it is a leaf folder add it as a playlist
+# - move add songs to playlist to outside of loop
+# - add to multiple playlists (-n xxx yyy zzz), works nicely with -d maybe
+# - Try/Catch uploading#
+
+
+from gmusicapi.api import Api
+from getpass import getpass
+import os
+import argparse
+
+def parse():
+ parser = argparse.ArgumentParser(
+ description='Upload music to Google Music Playlists')
+ parser.add_argument(
+ 'folder', action='store',
+ help='the folder of music to upload')
+ parser.add_argument(
+ '-n', action='store', dest='playlist_name',
+ help='set the playlist name')
+ parser.add_argument(
+ '-d', action='store_true', default=False,
+ help='set playlist_name=folder')
+ parser.add_argument(
+ '-u', action='store', dest='user_name',
+ help='Google Username')
+ parser.add_argument(
+ '-p', action='store', dest='password',
+ help='Google Single Application Password reccomended')
+ parser.add_argument(
+ '-v', action='store_true', default=False,
+ help='verbose mode')
+
+ args = parser.parse_args()
+
+ # I have a feeling this logic can be done by argparse
+ # For now this is good enough
+ if args.playlist_name == None and args.d == True :
+ tmp = args.folder.split('/')
+ args.playlist_name = tmp[len(tmp)-1] # least sig dir
+ elif args.playlist_name != None and args.d == True :
+ if args.v : print "Warning : -n has priority, ignoring -d"
+
+ return args
+
+def init(args):
+ api = Api()
+ if args.user_name == None:
+ email = raw_input("Email: ")
+ else :
+ email = args.user_name
+ if args.password == None:
+ password = getpass()
+ else :
+ password = args.password
+ print "Signing in : " + email
+ logged_in = api.login(email, password)
+ return api
+
+def main():
+ # Parse the cli args then setup a google music api connection
+ args = parse()
+ api = init(args)
+
+ # check if authentication succeded
+ if not api.is_authenticated():
+ print "Sorry, those credentials weren't accepted."
+ return
+ if args.v : print "Login Success"
+
+ user_playlists = api.get_all_playlist_ids(auto=False,user=True)["user"]
+ if not args.playlist_name in user_playlists :
+ if args.v : print "Creating Playlist : " + args.playlist_name
+ playlist_id = api.create_playlist(args.playlist_name)
+ else :
+ playlist_id = user_playlists[args.playlist_name]
+ print "Current Playlist: "
+ print api.get_playlist_songs(playlist_id)
+
+ # get to the right dir where the files are
+ os.chdir(args.folder)
+
+ # upload and playlist-ize each .mp3 in the folder
+ for files in os.listdir("."):
+ if files.endswith(".mp3"):
+ if args.v : print "Uploading : " + files
+ u = api.upload(files)
+ song_id = u[files]
+ api.add_songs_to_playlist(playlist_id, song_id)
+
+ #It's good practice to logout when finished.
+ if args.v : print "Logging off."
+ api.logout()
+
+if __name__ == '__main__':
+ main()
scripts/py/sshparse.py
@@ -0,0 +1,25 @@
+import argparse
+parser = argparse.ArgumentParser()
+parser.add_argument("user")
+parser.add_argument("host")
+parser.add_argument("-p","--port", type=int)
+parser.add_argument("keyfile")
+args = parser.parse_args()
+
+print args.user
+print args.host
+print args.port
+print args.keyfile
+sshstring = false
+if (sshstring):
+ ssh = "user@host -p 22 -i /path/to/key"
+ user = ssh.split("@")[0]
+ host = ssh.split("@")[1].split(" ")[0]
+ args = ssh.split("@")[1].split(" ")[1:]
+ print "user", user
+ print "host", host
+ for i,val in enumerate(args):
+ if (val == "-p"):
+ print "port", args[i+1]
+ if (val == "-i"):
+ print "key", args[i+1]
scripts/xen/12.04-server-net.sh
@@ -0,0 +1,120 @@
+# create new LVM, netboot, ubuntu image
+# Argumetns = -s [size] -v [vg] -n [name] -c [cfg out]
+# Defaults = -s 8G -v xenny -n ubuntu -c [name].cfg
+#!/bin/bash
+
+usage()
+{
+cat << EOF
+usage: $0 options
+
+Create a new Ubuntu 12.04 LVM VM from netboot
+
+OPTIONS:
+ -h Show this message
+ -s [disc size] (default 8G)
+ -m [memory] (default 512)
+ -v [LVM VG name]
+ -n [VM name]
+ -c [cfg out filename]
+ -f Finalize config file for normal use
+EOF
+}
+
+finalize()
+{
+ # Finalize $CFG for normal use
+ sed -i '/kernel/s/^/# /' $CFG
+ sed -i '/ramdisk/s/^/# /' $CFG
+ sed -i '/extra/s/^/# /' $CFG
+ echo -e "bootloader = \"pygrub\"" >> $CFG
+}
+
+defaults()
+{
+ # Defaults if not flag assigned
+ if [[ -z $SIZE ]]; then SIZE="8G"; fi
+ if [[ -z $VG ]]; then VG="xenny"; fi
+ if [[ -z $NAME ]]; then NAME="ubuntu"; fi
+ if [[ -z $CFG ]]; then CFG=`pwd`"/"$NAME".cfg"; fi
+ if [[ -z $RAM ]]; then RAM="512"; fi
+ MIRROR="http://mirror.anl.gov/pub/ubuntu/"
+ LONGNAME="ubuntu-netboot-precise"
+ IMGDIR="/var/lib/xen/images/$LONGNAME"
+}
+
+if [[ $EUID -ne 0 ]]; then
+ echo "You must be a root user" 2>&1
+ exit 1
+else
+ SIZE=
+ VG=
+ NAME=
+ CFG=
+ RAM=
+ while getopts โhfs:m:v:n:c:โ OPTION
+ do
+ case $OPTION in
+ h)
+ usage
+ exit 1
+ ;;
+ s)
+ SIZE=$OPTARG
+ ;;
+ m)
+ RAM=$OPTARG
+ ;;
+ v)
+ VG=$OPTARG
+ ;;
+ n)
+ NAME=$OPTARG
+ ;;
+ c)
+ CFG=$OPTARG
+ ;;
+ f)
+ defaults
+ finalize
+ exit
+ ;;
+ ?)
+ usage
+ exit
+ ;;
+ esac
+ done
+
+ # Assign default values
+ defaults
+
+ # Create the LVM
+ echo -e "\n> Creating LVM Container"
+ lvcreate -L $SIZE -n $NAME /dev/$VG
+ lvscan | grep $NAME
+
+ # Grab the netboot initrd and vmlinuz
+ echo -e "\n> Grabbing netboot/initrd"
+ mkdir -p $IMGDIR
+ cd $IMGDIR
+ wget -nc $MIRROR/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/xen/initrd.gz
+ wget -nc $MIRROR/ubuntu/dists/precise/main/installer-amd64/current/images/netboot/xen/vmlinuz
+
+ # Create .cfg file
+ rm $CFG # fix?
+ echo -e "\n> Creating" $CFG "file"
+ echo -e "name = \""$NAME"\"" >> $CFG
+ echo -e "memory = $RAM" >> $CFG
+ echo -e "disk = ['phy:/dev/"$VG"/"$NAME",xvda,w']" >> $CFG
+ echo -e "vif = [' ']" >> $CFG
+ echo -e "kernel = \"$IMGDIR/vmlinuz\"" >> $CFG
+ echo -e "ramdisk = \"$IMGDIR/initrd.gz\"" >> $CFG
+ echo -e "extra = \"debian-installer/exit/always_halt=true -- console=hvc0\"" >> $CFG
+
+ # Launch the vm
+ read -n1 -p "Continue? (y/n) "
+ echo [[ $REPLY = [yY] ]] && echo Creating $NAME || { echo "Exiting..."; exit 1; }
+ xm create -c $CFG
+
+fi
scripts/xen/gitbox.cfg
@@ -0,0 +1,7 @@
+name = "gitbox"
+memory = 256
+disk = ['phy:/dev/xenny/gitbox,xvda,w']
+vif = [' ']
+kernel = "/var/lib/xen/images/ubuntu-netboot-precise/vmlinuz"
+ramdisk = "/var/lib/xen/images/ubuntu-netboot-precise/initrd.gz"
+extra = "debian-installer/exit/always_halt=true -- console=hvc0"
scripts/xen/S-ubuntu.cfg
@@ -0,0 +1,9 @@
+name = "ubuntu"
+memory = 256
+disk = ['phy:/dev/xenny/ubuntu,xvda,w']
+vif = [' ']
+bootloader = "pygrub"
+
+#kernel = "/var/lib/xen/images/ubuntu-netboot-precise/vmlinuz"
+#ramdisk = "/var/lib/xen/images/ubuntu-netboot-precise/initrd.gz"
+#extra = "debian-installer/exit/always_halt=true -- console=hvc0"
scripts/xen/ubuntu.cfg
@@ -0,0 +1,7 @@
+name = "ubuntu"
+memory = 256
+disk = ['phy:/dev/xenny/ubuntu,xvda,w']
+vif = [' ']
+kernel = "/var/lib/xen/images/ubuntu-netboot-precise/vmlinuz"
+ramdisk = "/var/lib/xen/images/ubuntu-netboot-precise/initrd.gz"
+extra = "debian-installer/exit/always_halt=true -- console=hvc0"
scripts/.DS_Store
Binary file
scripts/README.md
@@ -0,0 +1,4 @@
+scripts
+=======
+
+misc scripts
\ No newline at end of file
srs/static/index.html
@@ -0,0 +1,77 @@
+<html>
+ <head>
+ <title>SRS</title>
+ <style>
+ body {
+ font-family: Liberation Sans, Arial, sans-serif;
+ background-color: #fffaf7;
+ line-height: 1.5;
+ }
+ main {
+ max-width: 70ch;
+ padding: 2ch; margin: auto;
+ }
+ header {
+ margin-bottom: 1.5rem;
+ }
+ h1 {
+ margin-bottom: .5rem;
+ }
+ aside {
+ color: #888;
+ line-height: 1.2;
+ }
+ pre {
+ white-space: pre-wrap;
+ }
+ hr {
+ border: 2px solid #ddd;
+ margin: 2rem auto;
+ }
+ #fn {
+ font-size: 85%;
+ }
+ footer {
+ margin-top: 2rem;
+ text-align: center;
+ }
+ a {
+ color: #ff1a1a;
+ text-decoration: none;
+ outline: 0;
+ }
+ a:hover {
+ text-decoration: underline;
+ }
+ ::selection {
+ background-color: #fff888;
+ }
+ </style>
+ </head>
+ <body>
+ <main>
+ <article>
+ <header>
+ <h1><code><a href="https://github.com/bryfry/srs">srs.py</a></code></h1>
+ <aside>Amnesia Applications and Associates Inc.</aside>
+ </header>
+ <p>
+ <blockquote>
+ Steve was a dev, at this he was blessed-<br/>
+ but microservices just weren't his best.<br/>
+ He thought, "I will use this new model!"<br/>
+ "With 'micro' time will be throttled!"<br/>
+ ...Now his services take just one request.<br/>
+ </blockquote>
+ </p>
+ <section>
+ <h3>TODO</h3>
+ <ul>
+ <li><strong>Implement service discovery</strong></li>
+ </ul>
+ </section>
+ </article>
+ </main>
+ <footer><a href="https://srs.trustme.click">amnesia applicaitons and associates</a> -- <a href="mailto:srs@trustme.click">srs@trustme.click</a></footer>
+ </body>
+</html>
srs/.gitignore
@@ -0,0 +1,4 @@
+venv
+__pycache__
+*.swp
+solutions
srs/flag.py
@@ -0,0 +1,10 @@
+import random
+
+# TODO overwrite value from ENV
+FLAG = "IF ONLY IT WERE THAT EASY"
+
+
+def random_flag_index():
+ flag_index = random.randrange(len(FLAG))
+ value = FLAG[flag_index]
+ return {"index": flag_index, "value": value}
srs/README.md
@@ -0,0 +1,28 @@
+
+# `srs.py`
+
+> Steve was a dev, at this he was blessed-
+> but microservices just weren't his best.
+> He thought, "I will use this new model!"
+> "With 'micro' time will be throttled!"
+> ...Now his services take just one request.
+
+### TODO
+
+* Implement service discovery
+
+### Install
+
+```
+python3.8 -m venv venv
+source venv/bin/activate
+python3.8 -m pip insatll --upgrade pip
+python3.8 -m pip install -r requirements.txt
+```
+
+### Run
+
+```
+source venv/bin/activate
+python3.8 srs.py
+```
srs/requirements.txt
@@ -0,0 +1,2 @@
+aiohttp
+black
srs/srs.py
@@ -0,0 +1,100 @@
+import asyncio
+import logging
+from utils import find_free_port
+from flag import random_flag_index
+from aiohttp import web
+
+closers = []
+runners = []
+
+
+async def homepage_handler(request):
+ return web.HTTPFound("/index.html")
+
+
+async def homepage(port=8001):
+ app = web.Application()
+ app.router.add_route("*", "/", homepage_handler)
+ app.router.add_static(prefix="/", path="/var/www/html/srs/")
+ runner = web.AppRunner(app)
+ await runner.setup()
+ site = web.TCPSite(runner, "127.0.0.1", port)
+ logging.info(f"{site.name} starting")
+ await site.start()
+ runners.append(runner)
+ return
+
+
+class ClosingHandler:
+ def __init__(self, exit_event):
+ self.exit_event = exit_event
+
+ def next_port():
+ return self.next_port
+
+ async def default(self, request):
+ self.exit_event.set()
+ self.next_port = find_free_port()
+ data = {
+ "now": request.url.port,
+ "next": self.next_port,
+ "flag-slice": random_flag_index(),
+ }
+ return web.json_response(data)
+
+
+# single request server
+async def srs(loop, port=None):
+
+ # create app handler and closing event
+ closing_time = asyncio.Event()
+ closing_task = asyncio.create_task(closing_time.wait())
+ closers.append(closing_time)
+ handler = ClosingHandler(closing_time)
+
+ # add handler to new application runner
+ app = web.Application()
+ app.add_routes([web.get("/", handler.default)])
+ runner = web.AppRunner(app)
+ await runner.setup()
+
+ # start app on a specific tcp port
+ if port == None:
+ port = find_free_port()
+ site = web.TCPSite(runner, "0.0.0.0", port)
+ logging.info(f"{site.name} starting")
+ try:
+ await site.start()
+ except OSError:
+ logging.warn(
+ f"port {port} already in use, trying a different one"
+ )
+ await srs(loop)
+
+ # wait for closing event
+ await closing_task
+ logging.info(f"{site.name} closing")
+ await runner.cleanup()
+
+ loop.create_task(srs(loop, handler.next_port))
+
+
+if __name__ == "__main__":
+ logging.basicConfig(level=logging.DEBUG)
+
+ loop = asyncio.get_event_loop()
+
+ loop.create_task(homepage())
+
+ for i in range(100):
+ loop.create_task(srs(loop))
+
+ try:
+ loop.run_forever()
+ except:
+ logging.info("\nexiting...")
+ finally:
+ for c in closers:
+ c.set() # trigger close event which runs runner.cleanup()
+ for r in runners:
+ loop.create_task(r.cleanup())
srs/utils.py
@@ -0,0 +1,9 @@
+import socket
+
+
+def find_free_port():
+ s = socket.socket()
+ s.bind(("", 0))
+ port = s.getsockname()[1]
+ s.close()
+ return port
stylus/dark-orange-hn_202106.0.1.json
@@ -0,0 +1,118 @@
+[
+ {
+ "settings": {
+ "openEditInWindow": true,
+ "openEditInWindow.popup": false,
+ "windowPosition": {},
+ "show-badge": true,
+ "disableAll": false,
+ "exposeIframes": false,
+ "newStyleAsUsercss": true,
+ "styleViaXhr": false,
+ "patchCsp": false,
+ "config.autosave": true,
+ "popup.breadcrumbs": true,
+ "popup.breadcrumbs.usePath": false,
+ "popup.enabledFirst": true,
+ "popup.stylesFirst": true,
+ "popup.autoResort": false,
+ "popup.borders": false,
+ "popup.findStylesInline": true,
+ "popup.findSort": "u",
+ "manage.onlyEnabled": false,
+ "manage.onlyLocal": false,
+ "manage.onlyUsercss": false,
+ "manage.onlyEnabled.invert": false,
+ "manage.onlyLocal.invert": false,
+ "manage.onlyUsercss.invert": false,
+ "manage.actions.expanded": true,
+ "manage.backup.expanded": true,
+ "manage.filters.expanded": true,
+ "manage.newUI": true,
+ "manage.newUI.favicons": false,
+ "manage.newUI.faviconsGray": true,
+ "manage.newUI.targets": 3,
+ "manage.newUI.sort": "title,asc",
+ "editor.options": {},
+ "editor.toc.expanded": true,
+ "editor.options.expanded": true,
+ "editor.lint.expanded": true,
+ "editor.publish.expanded": true,
+ "editor.lineWrapping": true,
+ "editor.smartIndent": true,
+ "editor.indentWithTabs": false,
+ "editor.tabSize": 4,
+ "editor.keyMap": "default",
+ "editor.theme": "default",
+ "editor.beautify": {
+ "selector_separator_newline": true,
+ "newline_before_open_brace": false,
+ "newline_after_open_brace": true,
+ "newline_between_properties": true,
+ "newline_before_close_brace": true,
+ "newline_between_rules": false,
+ "preserve_newlines": true,
+ "end_with_newline": false,
+ "indent_conditional": true
+ },
+ "editor.beautify.hotkey": "",
+ "editor.lintDelay": 300,
+ "editor.linter": "csslint",
+ "editor.lintReportDelay": 500,
+ "editor.matchHighlight": "token",
+ "editor.autoCloseBrackets": true,
+ "editor.autocompleteOnTyping": false,
+ "editor.contextDelete": false,
+ "editor.selectByTokens": true,
+ "editor.appliesToLineWidget": true,
+ "editor.livePreview": true,
+ "editor.colorpicker": true,
+ "editor.colorpicker.hexUppercase": false,
+ "editor.colorpicker.hotkey": "",
+ "editor.colorpicker.color": "rgb(60, 60, 60)",
+ "editor.colorpicker.maxHeight": 300,
+ "hotkey._execute_browser_action": "",
+ "hotkey.openManage": "",
+ "hotkey.styleDisableAll": "",
+ "sync.enabled": "none",
+ "iconset": 0,
+ "badgeDisabled": "#8B0000",
+ "badgeNormal": "#006666",
+ "popupWidth": 246,
+ "updateInterval": 24
+ }
+ },
+ {
+ "enabled": true,
+ "updateUrl": null,
+ "url": null,
+ "installDate": 1624411306442,
+ "sections": [
+ {
+ "code": "body,\n #hnmain {\n background-color: rgb(26, 26, 26);\n color: rgb(230, 230, 230);\n }\n\n .title > .titlelink,\n .fatitem .title > .titlelink {\n color: rgb(215, 210, 200);\n }\n\n a:visited,\n .title a:visited {\n color: rgb(100, 100, 100);\n }\n\n .comment-tree tr.athing,\n .comment .commtext,\n .comment a,\n .comment .commtext a {\n background: rgb(34, 34, 34);\n color: rgb(210, 210, 210);\n }\n font {\n color: rgb(130,130,130)\n }\n .comment a:visited,\n .comment .commtext a:visited {\n color: rgb(100, 100, 100);\n }\n\n .subtext,\n .subtext a:link {\n color: rgb(100, 100, 100);\n }",
+ "start": 270,
+ "domains": [
+ "ycombinator.com"
+ ]
+ }
+ ],
+ "sourceCode": "/* ==UserStyle==\n@name Dark Orange Site\n@namespace USO Archive\n@author bryfry\n@description `Dark, Orange Site`\n@version 202106.0.1\n@license CC-BY-4.0\n@preprocessor uso\n==/UserStyle== */\n@-moz-document domain(\"ycombinator.com\") {\n body,\n #hnmain {\n background-color: rgb(26, 26, 26);\n color: rgb(230, 230, 230);\n }\n\n .title > .titlelink,\n .fatitem .title > .titlelink {\n color: rgb(215, 210, 200);\n }\n\n a:visited,\n .title a:visited {\n color: rgb(100, 100, 100);\n }\n\n .comment-tree tr.athing,\n .comment .commtext,\n .comment a,\n .comment .commtext a {\n background: rgb(34, 34, 34);\n color: rgb(210, 210, 210);\n }\n font {\n color: rgb(130,130,130)\n }\n .comment a:visited,\n .comment .commtext a:visited {\n color: rgb(100, 100, 100);\n }\n\n .subtext,\n .subtext a:link {\n color: rgb(100, 100, 100);\n }\n}",
+ "usercssData": {
+ "name": "Dark Orange Site",
+ "namespace": "USO Archive",
+ "author": "bryfry",
+ "description": "Dark, Orange Site",
+ "version": "202106.0.1",
+ "license": "CC-BY-4.0",
+ "preprocessor": "uso"
+ },
+ "author": "bryfry",
+ "description": "Dark, Orange Site",
+ "name": "Dark Orange Site",
+ "updateDate": 1642185810825,
+ "_id": "3bf7e253-dc3f-4009-b0d7-ec34710e4793",
+ "_rev": 1642185810825,
+ "id": 5,
+ "_usw": {}
+ }
+]
vagrantfiles/vagrant-vbox/localhost
@@ -0,0 +1,2 @@
+[localhost]
+localhost ansible_conneciton=local
vagrantfiles/vagrant-vbox/vbox-provisioner.yml
@@ -0,0 +1,14 @@
+---
+- hosts: localhost
+
+ vars:
+ vagrant_url: http://files.vagrantup.com/packages/7e400d00a3c5a0fdf2809c8b5001a035415a607b/vagrant_1.2.2_x86_64.rpm
+ vbox_url: http://download.virtualbox.org/virtualbox/4.2.12/virtualbox-4.2_4.2.12-84980~Ubuntu~precise_amd64.deb
+
+ tasks:
+ - name: Install wget
+ apt: package=wget update_cache=yes state=latest
+
+ - name: wget files
+ action: wget -q {{ items }}
+ with_items: {{ vagrant_url }} {{ vbox_url }}
vagrantfiles/.gitmodules
@@ -0,0 +1,3 @@
+[submodule "avd"]
+ path = avd
+ url = git@github.com:bryfry/avd.git
vagrantfiles/README.md
@@ -0,0 +1,4 @@
+Vagrantfiles
+============
+
+Collection of vagrantfiles
vaspi/example-Vagrantfile
@@ -0,0 +1,21 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+ config.vm.box = "precise64"
+ config.vm.box_url = "http://files.vagrantup.com/precise64.box"
+ config.vm.network :public_network, :bridge => 'eth0', :auto_config => false
+ config.ssh.port = 2222
+ config.vm.provision :ansible do |ansible|
+ ansible.verbose = true
+ ansible.playbook = "target_playbook.yml"
+ ansible.inventory_file = "target_inventory"
+ ansible.extra_vars = {
+ address:"0.0.0.0/24", # Set this to desired static ip and subnet make
+ device:"ethX", # Set this to target inteface name
+ ansible_ssh_port: 2222}
+ end
+end
vaspi/README.md
@@ -0,0 +1,11 @@
+# Vagrant-Ansible Static Public IP
+
+Due to Vagrant's VirtualBox provider's inability to have a public network with a static ip address,
+this simple ansible playbook and example Vagrantfile does the setup after inital config (provisioning in vagrant speak).
+
+Works on any target linux virtual machine with iproute2
+
+#### Configuration (Vagrantfile):
+
+* set `address: 0.0.0.0/24` to desired static address and subnet mask
+* set `device: ethX` to desired interface name to configure:w
vaspi/target_inventory
@@ -0,0 +1,2 @@
+[targets]
+127.0.0.1
vaspi/target_playbook.yml
@@ -0,0 +1,11 @@
+---
+ - hosts: targets
+ tasks:
+ - command: ip link set {{ device }} down
+ sudo: yes
+ - command: ip addr flush dev {{ device }}
+ sudo: yes
+ - command: ip addr add {{ address }} dev {{ device }}
+ sudo: yes
+ - command: ip link set dev {{ device }} up
+ sudo: yes
vaspi/Vagrantfile
@@ -0,0 +1,29 @@
+# -*- mode: ruby -*-
+# vi: set ft=ruby :
+
+# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
+VAGRANTFILE_API_VERSION = "2"
+
+Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
+ (1..3).each do |i|
+ vmname = "team#{i}"
+ config.vm.define vmname.to_sym do |team_conf|
+ team_conf.vm.hostname = vmname
+ team_conf.vm.box = "precise64"
+ team_conf.vm.box_url = "http://files.vagrantup.com/precise64.box"
+ team_conf.vm.network :public_network, :bridge => 'eth0', :auto_config => false
+ team_conf.vm.network :forwarded_port, guest: 22, host: 2200+i
+ team_conf.ssh.port = 2200+i
+ config.vm.provision :ansible do |ansible|
+ ansible.verbose = true
+ ansible.playbook = "target_playbook.yml"
+ ansible.inventory_file = "target_inventory"
+ ansible.extra_vars = {
+ address:"192.168.33.#{20+i}/24",
+ device:"eth1",
+ ansible_ssh_port: 2200+i}
+ end
+ end
+ end
+end
+
wordle/cheat.py
@@ -0,0 +1,43 @@
+
+f = {
+ "a": 8.167,
+ "b": 1.492,
+ "c": 2.782,
+ "d": 4.253,
+ "e": 12.702,
+ "f": 2.228,
+ "g": 2.015,
+ "h": 6.094,
+ "i": 6.966,
+ "j": 0.153,
+ "k": 0.772,
+ "l": 4.025,
+ "m": 2.406,
+ "n": 6.749,
+ "o": 7.507,
+ "p": 1.929,
+ "q": 0.095,
+ "r": 5.987,
+ "s": 6.327,
+ "t": 9.056,
+ "u": 2.758,
+ "v": 0.978,
+ "w": 2.360,
+ "x": 0.150,
+ "y": 1.974,
+ "z": 0.074
+}
+
+for w in open('dict.txt'):
+ if (
+ (w[2] == 'h' or w[3] == 'h') and
+ (w[0] == 't' or w[1] == 't' or w[4] == 't') and
+ 'a' not in w and 'c' not in w and 's' not in w and 'm' not in w and
+ 'o' not in w and 'n' not in w and 'u' not in w and 'e' not in w
+ ):
+ w = w.strip()
+ weight = 0
+ c_counts = {c: w.count(c) for c in set(w)}
+ for c in c_counts:
+ weight += f[c]
+ print (round(weight,3),w)
wordle/dict.txt
@@ -0,0 +1,5757 @@
+which
+there
+their
+about
+would
+these
+other
+words
+could
+write
+first
+water
+after
+where
+right
+think
+three
+years
+place
+sound
+great
+again
+still
+every
+small
+found
+those
+never
+under
+might
+while
+house
+world
+below
+asked
+going
+large
+until
+along
+shall
+being
+often
+earth
+began
+since
+study
+night
+light
+above
+paper
+parts
+young
+story
+point
+times
+heard
+whole
+white
+given
+means
+music
+miles
+thing
+today
+later
+using
+money
+lines
+order
+group
+among
+learn
+known
+space
+table
+early
+trees
+short
+hands
+state
+black
+shown
+stood
+front
+voice
+kinds
+makes
+comes
+close
+power
+lived
+vowel
+taken
+built
+heart
+ready
+quite
+class
+bring
+round
+horse
+shows
+piece
+green
+stand
+birds
+start
+river
+tried
+least
+field
+whose
+girls
+leave
+added
+color
+third
+hours
+moved
+plant
+doing
+names
+forms
+heavy
+ideas
+cried
+check
+floor
+begin
+woman
+alone
+plane
+spell
+watch
+carry
+wrote
+clear
+named
+books
+child
+glass
+human
+takes
+party
+build
+seems
+blood
+sides
+seven
+mouth
+solve
+north
+value
+death
+maybe
+happy
+tells
+gives
+looks
+shape
+lives
+steps
+areas
+sense
+speak
+force
+ocean
+speed
+women
+metal
+south
+grass
+scale
+cells
+lower
+sleep
+wrong
+pages
+ships
+needs
+rocks
+eight
+major
+level
+total
+ahead
+reach
+stars
+store
+sight
+terms
+catch
+works
+board
+cover
+songs
+equal
+stone
+waves
+guess
+dance
+spoke
+break
+cause
+radio
+weeks
+lands
+basic
+liked
+trade
+fresh
+final
+fight
+meant
+drive
+spent
+local
+waxes
+knows
+train
+bread
+homes
+teeth
+coast
+thick
+brown
+clean
+quiet
+sugar
+facts
+steel
+forth
+rules
+notes
+units
+peace
+month
+verbs
+seeds
+helps
+sharp
+visit
+woods
+chief
+walls
+cross
+wings
+grown
+cases
+foods
+crops
+fruit
+stick
+wants
+stage
+sheep
+nouns
+plain
+drink
+bones
+apart
+turns
+moves
+touch
+angle
+based
+range
+marks
+tired
+older
+farms
+spend
+shoes
+goods
+chair
+twice
+cents
+empty
+alike
+style
+broke
+pairs
+count
+enjoy
+score
+shore
+roots
+paint
+heads
+shook
+serve
+angry
+crowd
+wheel
+quick
+dress
+share
+alive
+noise
+solid
+cloth
+signs
+hills
+types
+drawn
+worth
+truck
+piano
+upper
+loved
+usual
+faces
+drove
+cabin
+boats
+towns
+proud
+court
+model
+prime
+fifty
+plans
+yards
+prove
+tools
+price
+sheet
+smell
+boxes
+raise
+match
+truth
+roads
+threw
+enemy
+lunch
+chart
+scene
+graph
+doubt
+guide
+winds
+block
+grain
+smoke
+mixed
+games
+wagon
+sweet
+topic
+extra
+plate
+title
+knife
+fence
+falls
+cloud
+wheat
+plays
+enter
+broad
+steam
+atoms
+press
+lying
+basis
+clock
+taste
+grows
+thank
+storm
+agree
+brain
+track
+smile
+funny
+beach
+stock
+hurry
+saved
+sorry
+giant
+trail
+offer
+ought
+rough
+daily
+avoid
+keeps
+throw
+allow
+cream
+laugh
+edges
+teach
+frame
+bells
+dream
+magic
+occur
+ended
+chord
+false
+skill
+holes
+dozen
+brave
+apple
+climb
+outer
+pitch
+ruler
+holds
+fixed
+costs
+calls
+blank
+staff
+labor
+eaten
+youth
+tones
+honor
+globe
+gases
+doors
+poles
+loose
+apply
+tears
+exact
+brush
+chest
+layer
+whale
+minor
+faith
+tests
+judge
+items
+worry
+waste
+hoped
+strip
+begun
+aside
+lakes
+bound
+depth
+candy
+event
+worse
+aware
+shell
+rooms
+ranch
+image
+snake
+aloud
+dried
+likes
+motor
+pound
+knees
+refer
+fully
+chain
+shirt
+flour
+drops
+spite
+orbit
+banks
+shoot
+curve
+tribe
+tight
+blind
+slept
+shade
+claim
+flies
+theme
+queen
+fifth
+union
+hence
+straw
+entry
+issue
+birth
+feels
+anger
+brief
+rhyme
+glory
+guard
+flows
+flesh
+owned
+trick
+yours
+sizes
+noted
+width
+burst
+route
+lungs
+uncle
+bears
+royal
+kings
+forty
+trial
+cards
+brass
+opera
+chose
+owner
+vapor
+beats
+mouse
+tough
+wires
+meter
+tower
+finds
+inner
+stuck
+arrow
+poems
+label
+swing
+solar
+truly
+tense
+beans
+split
+rises
+weigh
+hotel
+stems
+pride
+swung
+grade
+digit
+badly
+boots
+pilot
+sales
+swept
+lucky
+prize
+stove
+tubes
+acres
+wound
+steep
+slide
+trunk
+error
+porch
+slave
+exist
+faced
+mines
+marry
+juice
+raced
+waved
+goose
+trust
+fewer
+favor
+mills
+views
+joint
+eager
+spots
+blend
+rings
+adult
+index
+nails
+horns
+balls
+flame
+rates
+drill
+trace
+skins
+waxed
+seats
+stuff
+ratio
+minds
+dirty
+silly
+coins
+hello
+trips
+leads
+rifle
+hopes
+bases
+shine
+bench
+moral
+fires
+meals
+shake
+shops
+cycle
+movie
+slope
+canoe
+teams
+folks
+fired
+bands
+thumb
+shout
+canal
+habit
+reply
+ruled
+fever
+crust
+shelf
+walks
+midst
+crack
+print
+tales
+coach
+stiff
+flood
+verse
+awake
+rocky
+march
+fault
+swift
+faint
+civil
+ghost
+feast
+blade
+limit
+germs
+reads
+ducks
+dairy
+worst
+gifts
+lists
+stops
+rapid
+brick
+claws
+beads
+beast
+skirt
+cakes
+lions
+frogs
+tries
+nerve
+grand
+armed
+treat
+honey
+moist
+legal
+penny
+crown
+shock
+taxes
+sixty
+altar
+pulls
+sport
+drums
+talks
+dying
+dates
+drank
+blows
+lever
+wages
+proof
+drugs
+tanks
+sings
+tails
+pause
+herds
+arose
+hated
+clues
+novel
+shame
+burnt
+races
+flash
+weary
+heels
+token
+coats
+spare
+shiny
+alarm
+dimes
+sixth
+clerk
+mercy
+sunny
+guest
+float
+shone
+pipes
+worms
+bills
+sweat
+suits
+smart
+upset
+rains
+sandy
+rainy
+parks
+sadly
+fancy
+rider
+unity
+bunch
+rolls
+crash
+craft
+newly
+gates
+hatch
+paths
+funds
+wider
+grace
+grave
+tides
+admit
+shift
+sails
+pupil
+tiger
+angel
+cruel
+agent
+drama
+urged
+patch
+nests
+vital
+sword
+blame
+weeds
+screw
+vocal
+bacon
+chalk
+cargo
+crazy
+acted
+goats
+arise
+witch
+loves
+queer
+dwell
+backs
+ropes
+shots
+merry
+phone
+cheek
+peaks
+ideal
+beard
+eagle
+creek
+cries
+ashes
+stall
+yield
+mayor
+opens
+input
+fleet
+tooth
+cubic
+wives
+burns
+poets
+apron
+spear
+organ
+cliff
+stamp
+paste
+rural
+baked
+chase
+slice
+slant
+knock
+noisy
+sorts
+stays
+wiped
+blown
+piled
+clubs
+cheer
+widow
+twist
+tenth
+hides
+comma
+sweep
+spoon
+stern
+crept
+maple
+deeds
+rides
+muddy
+crime
+jelly
+ridge
+drift
+dusty
+devil
+tempo
+humor
+sends
+steal
+tents
+waist
+roses
+reign
+noble
+cheap
+dense
+linen
+geese
+woven
+posts
+hired
+wrath
+salad
+bowed
+tires
+shark
+belts
+grasp
+blast
+polar
+fungi
+tends
+pearl
+loads
+jokes
+veins
+frost
+hears
+loses
+hosts
+diver
+phase
+toads
+alert
+tasks
+seams
+coral
+focus
+naked
+puppy
+jumps
+spoil
+quart
+macro
+fears
+flung
+spark
+vivid
+brook
+steer
+spray
+decay
+ports
+socks
+urban
+goals
+grant
+minus
+films
+tunes
+shaft
+firms
+skies
+bride
+wreck
+flock
+stare
+hobby
+bonds
+dared
+faded
+thief
+crude
+pants
+flute
+votes
+tonal
+radar
+wells
+skull
+hairs
+argue
+wears
+dolls
+voted
+caves
+cared
+broom
+scent
+panel
+fairy
+olive
+bends
+prism
+lamps
+cable
+peach
+ruins
+rally
+schwa
+lambs
+sells
+cools
+draft
+charm
+limbs
+brake
+gazed
+cubes
+delay
+beams
+fetch
+ranks
+array
+harsh
+camel
+vines
+picks
+naval
+purse
+rigid
+crawl
+toast
+soils
+sauce
+basin
+ponds
+twins
+wrist
+fluid
+pools
+brand
+stalk
+robot
+reeds
+hoofs
+buses
+sheer
+grief
+bloom
+dwelt
+melts
+risen
+flags
+knelt
+fiber
+roofs
+freed
+armor
+piles
+aimed
+algae
+twigs
+lemon
+ditch
+drunk
+rests
+chill
+slain
+panic
+cords
+tuned
+crisp
+ledge
+dived
+swamp
+clung
+stole
+molds
+yarns
+liver
+gauge
+breed
+stool
+gulls
+awoke
+gross
+diary
+rails
+belly
+trend
+flask
+stake
+fried
+draws
+actor
+handy
+bowls
+haste
+scope
+deals
+knots
+moons
+essay
+thump
+hangs
+bliss
+dealt
+gains
+bombs
+clown
+palms
+cones
+roast
+tidal
+bored
+chant
+acids
+dough
+camps
+swore
+lover
+hooks
+males
+cocoa
+punch
+award
+reins
+ninth
+noses
+links
+drain
+fills
+nylon
+lunar
+pulse
+flown
+elbow
+fatal
+sites
+moths
+meats
+foxes
+mined
+attic
+fiery
+mount
+usage
+swear
+snowy
+rusty
+scare
+traps
+relax
+react
+valid
+robin
+cease
+gills
+prior
+safer
+polio
+loyal
+swell
+salty
+marsh
+vague
+weave
+mound
+seals
+mules
+virus
+scout
+acute
+windy
+stout
+folds
+seize
+hilly
+joins
+pluck
+stack
+lords
+dunes
+burro
+hawks
+trout
+feeds
+scarf
+halls
+coals
+towel
+souls
+elect
+buggy
+pumps
+loans
+spins
+files
+oxide
+pains
+photo
+rival
+flats
+syrup
+rodeo
+sands
+moose
+pints
+curly
+comic
+cloak
+onion
+clams
+scrap
+didst
+couch
+codes
+fails
+ounce
+lodge
+greet
+gypsy
+utter
+paved
+zones
+fours
+alley
+tiles
+bless
+crest
+elder
+kills
+yeast
+erect
+bugle
+medal
+roles
+hound
+snail
+alter
+ankle
+relay
+loops
+zeros
+bites
+modes
+debts
+realm
+glove
+rayon
+swims
+poked
+stray
+lifts
+maker
+lumps
+graze
+dread
+barns
+docks
+masts
+pours
+wharf
+curse
+plump
+robes
+seeks
+cedar
+curls
+jolly
+myths
+cages
+gloom
+locks
+pedal
+beets
+crows
+anode
+slash
+creep
+rowed
+chips
+fists
+wines
+cares
+valve
+newer
+motel
+ivory
+necks
+clamp
+barge
+blues
+alien
+frown
+strap
+crews
+shack
+gonna
+saves
+stump
+ferry
+idols
+cooks
+juicy
+glare
+carts
+alloy
+bulbs
+lawns
+lasts
+fuels
+oddly
+crane
+filed
+weird
+shawl
+slips
+troop
+bolts
+suite
+sleek
+quilt
+tramp
+blaze
+atlas
+odors
+scrub
+crabs
+probe
+logic
+adobe
+exile
+rebel
+grind
+sting
+spine
+cling
+desks
+grove
+leaps
+prose
+lofty
+agony
+snare
+tusks
+bulls
+moods
+humid
+finer
+dimly
+plank
+china
+pines
+guilt
+sacks
+brace
+quote
+lathe
+gaily
+fonts
+scalp
+adopt
+foggy
+ferns
+grams
+clump
+perch
+tumor
+teens
+crank
+fable
+hedge
+genes
+sober
+boast
+tract
+cigar
+unite
+owing
+thigh
+haiku
+swish
+dikes
+wedge
+booth
+eased
+frail
+cough
+tombs
+darts
+forts
+choir
+pouch
+pinch
+hairy
+buyer
+torch
+vigor
+waltz
+heats
+herbs
+users
+flint
+click
+madam
+bleak
+blunt
+aided
+lacks
+masks
+waded
+risks
+nurse
+chaos
+sewed
+cured
+ample
+lease
+steak
+sinks
+merit
+bluff
+bathe
+gleam
+bonus
+colts
+shear
+gland
+silky
+skate
+birch
+anvil
+sleds
+groan
+maids
+meets
+speck
+hymns
+hints
+drown
+bosom
+slick
+quest
+coils
+spied
+snows
+stead
+snack
+plows
+blond
+tamed
+thorn
+waits
+glued
+banjo
+tease
+arena
+bulky
+carve
+stunt
+warms
+shady
+razor
+folly
+leafy
+notch
+fools
+otter
+pears
+flush
+genus
+ached
+fives
+flaps
+spout
+smote
+fumes
+adapt
+cuffs
+tasty
+stoop
+clips
+disks
+sniff
+lanes
+brisk
+imply
+demon
+super
+furry
+raged
+growl
+texts
+hardy
+stung
+typed
+hates
+wiser
+timid
+serum
+beaks
+rotor
+casts
+baths
+glide
+plots
+trait
+resin
+slums
+lyric
+puffs
+decks
+brood
+mourn
+aloft
+abuse
+whirl
+edged
+ovary
+quack
+heaps
+slang
+await
+civic
+saint
+bevel
+sonar
+aunts
+packs
+froze
+tonic
+corps
+swarm
+frank
+repay
+gaunt
+wired
+niece
+cello
+needy
+chuck
+stony
+media
+surge
+hurts
+repel
+husky
+dated
+hunts
+mists
+exert
+dries
+mates
+sworn
+baker
+spice
+oasis
+boils
+spurs
+doves
+sneak
+paces
+colon
+siege
+strum
+drier
+cacao
+humus
+bales
+piped
+nasty
+rinse
+boxer
+shrub
+amuse
+tacks
+cited
+slung
+delta
+laden
+larva
+rents
+yells
+spool
+spill
+crush
+jewel
+snaps
+stain
+kicks
+tying
+slits
+rated
+eerie
+smash
+plums
+zebra
+earns
+bushy
+scary
+squad
+tutor
+silks
+slabs
+bumps
+evils
+fangs
+snout
+peril
+pivot
+yacht
+lobby
+jeans
+grins
+viola
+liner
+comet
+scars
+chops
+raids
+eater
+slate
+skips
+soles
+misty
+urine
+knobs
+sleet
+holly
+pests
+forks
+grill
+trays
+pails
+borne
+tenor
+wares
+carol
+woody
+canon
+wakes
+kitty
+miner
+polls
+shaky
+nasal
+scorn
+chess
+taxis
+crate
+shyly
+tulip
+forge
+nymph
+budge
+lowly
+abide
+depot
+oases
+asses
+sheds
+fudge
+pills
+rivet
+thine
+groom
+lanky
+boost
+broth
+heave
+gravy
+beech
+timed
+quail
+inert
+gears
+chick
+hinge
+trash
+clash
+sighs
+renew
+bough
+dwarf
+slows
+quill
+shave
+spore
+sixes
+chunk
+madly
+paced
+braid
+fuzzy
+motto
+spies
+slack
+mucus
+magma
+awful
+discs
+erase
+posed
+asset
+cider
+taper
+theft
+churn
+satin
+slots
+taxed
+bully
+sloth
+shale
+tread
+raked
+curds
+manor
+aisle
+bulge
+loins
+stair
+tapes
+leans
+bunks
+squat
+towed
+lance
+panes
+sakes
+heirs
+caste
+dummy
+pores
+fauna
+crook
+poise
+epoch
+risky
+warns
+fling
+berry
+grape
+flank
+drags
+squid
+pelts
+icing
+irony
+irons
+barks
+whoop
+choke
+diets
+whips
+tally
+dozed
+twine
+kites
+bikes
+ticks
+riots
+roars
+vault
+looms
+scold
+blink
+dandy
+pupae
+sieve
+spike
+ducts
+lends
+pizza
+brink
+widen
+plumb
+pagan
+feats
+bison
+soggy
+scoop
+argon
+nudge
+skiff
+amber
+sexes
+rouse
+salts
+hitch
+exalt
+leash
+dined
+chute
+snort
+gusts
+melon
+cheat
+reefs
+llama
+lasso
+debut
+quota
+oaths
+prone
+mixes
+rafts
+dives
+stale
+inlet
+flick
+pinto
+brows
+untie
+batch
+greed
+chore
+stirs
+blush
+onset
+barbs
+volts
+beige
+swoop
+paddy
+laced
+shove
+jerky
+poppy
+leaks
+fares
+dodge
+godly
+squaw
+affix
+brute
+nicer
+undue
+snarl
+merge
+doses
+showy
+daddy
+roost
+vases
+swirl
+petty
+colds
+curry
+cobra
+genie
+flare
+messy
+cores
+soaks
+ripen
+whine
+amino
+plaid
+spiny
+mowed
+baton
+peers
+vowed
+pious
+swans
+exits
+afoot
+plugs
+idiom
+chili
+rites
+serfs
+cleft
+berth
+grubs
+annex
+dizzy
+hasty
+latch
+wasps
+mirth
+baron
+plead
+aloof
+aging
+pixel
+bared
+mummy
+hotly
+auger
+buddy
+chaps
+badge
+stark
+fairs
+gully
+mumps
+emery
+filly
+ovens
+drone
+gauze
+idiot
+fussy
+annoy
+shank
+gouge
+bleed
+elves
+roped
+unfit
+baggy
+mower
+scant
+grabs
+fleas
+lousy
+album
+sawed
+cooky
+murky
+infer
+burly
+waged
+dingy
+brine
+kneel
+creak
+vanes
+smoky
+spurt
+combs
+easel
+laces
+humps
+rumor
+aroma
+horde
+swiss
+leapt
+opium
+slime
+afire
+pansy
+mares
+soaps
+husks
+snips
+hazel
+lined
+cafes
+naive
+wraps
+sized
+piers
+beset
+agile
+tongs
+steed
+fraud
+booty
+valor
+downy
+witty
+mossy
+psalm
+scuba
+tours
+polka
+milky
+gaudy
+shrug
+tufts
+wilds
+laser
+truss
+hares
+creed
+lilac
+siren
+tarry
+bribe
+swine
+muted
+flips
+cures
+sinew
+boxed
+hoops
+gasps
+hoods
+niche
+yucca
+glows
+sewer
+whack
+fuses
+gowns
+droop
+bucks
+pangs
+mails
+whisk
+haven
+clasp
+sling
+stint
+urges
+champ
+piety
+chirp
+pleat
+posse
+sunup
+menus
+howls
+quake
+knack
+plaza
+fiend
+caked
+bangs
+erupt
+poker
+olden
+cramp
+voter
+poses
+manly
+slump
+fined
+grips
+gaped
+purge
+hiked
+maize
+fluff
+strut
+sloop
+prowl
+roach
+cocks
+bland
+dials
+plume
+slaps
+soups
+dully
+wills
+foams
+solos
+skier
+eaves
+totem
+fused
+latex
+veils
+mused
+mains
+myrrh
+racks
+galls
+gnats
+bouts
+sisal
+shuts
+hoses
+dryly
+hover
+gloss
+seeps
+denim
+putty
+guppy
+leaky
+dusky
+filth
+oboes
+spans
+fowls
+adorn
+glaze
+haunt
+dares
+obeys
+bakes
+abyss
+smelt
+gangs
+aches
+trawl
+claps
+undid
+spicy
+hoist
+fades
+vicar
+acorn
+pussy
+gruff
+musty
+tarts
+snuff
+hunch
+truce
+tweed
+dryer
+loser
+sheaf
+moles
+lapse
+tawny
+vexed
+autos
+wager
+domes
+sheen
+clang
+spade
+sowed
+broil
+slyly
+studs
+grunt
+donor
+slugs
+aspen
+homer
+croak
+tithe
+halts
+avert
+havoc
+hogan
+glint
+ruddy
+jeeps
+flaky
+ladle
+taunt
+snore
+fines
+props
+prune
+pesos
+radii
+pokes
+tiled
+daisy
+heron
+villa
+farce
+binds
+cites
+fixes
+jerks
+livid
+waked
+inked
+booms
+chews
+licks
+hyena
+scoff
+lusty
+sonic
+smith
+usher
+tucks
+vigil
+molts
+sects
+spars
+dumps
+scaly
+wisps
+sores
+mince
+panda
+flier
+axles
+plied
+booby
+patio
+rabbi
+petal
+polyp
+tints
+grate
+troll
+tolls
+relic
+phony
+bleat
+flaws
+flake
+snags
+aptly
+drawl
+ulcer
+soapy
+bossy
+monks
+crags
+caged
+twang
+diner
+taped
+cadet
+grids
+spawn
+guile
+noose
+mores
+girth
+slimy
+aides
+spasm
+burrs
+alibi
+lymph
+saucy
+muggy
+liter
+joked
+goofy
+exams
+enact
+stork
+lured
+toxic
+omens
+nears
+covet
+wrung
+forum
+venom
+moody
+alder
+sassy
+flair
+guild
+prays
+wrens
+hauls
+stave
+tilts
+pecks
+stomp
+gales
+tempt
+capes
+mesas
+omits
+tepee
+harry
+wring
+evoke
+limes
+cluck
+lunge
+highs
+canes
+giddy
+lithe
+verge
+khaki
+queue
+loath
+foyer
+outdo
+fared
+deter
+crumb
+astir
+spire
+jumpy
+extol
+buoys
+stubs
+lucid
+thong
+afore
+whiff
+maxim
+hulls
+clogs
+slats
+jiffy
+arbor
+cinch
+igloo
+goody
+gazes
+dowel
+calms
+bitch
+scowl
+gulps
+coded
+waver
+mason
+lobes
+ebony
+flail
+isles
+clods
+dazed
+adept
+oozed
+sedan
+clays
+warts
+ketch
+skunk
+manes
+adore
+sneer
+mango
+fiord
+flora
+roomy
+minks
+thaws
+watts
+freer
+exult
+plush
+paled
+twain
+clink
+scamp
+pawed
+grope
+bravo
+gable
+stink
+sever
+waned
+rarer
+regal
+wards
+fawns
+babes
+unify
+amend
+oaken
+glade
+visor
+hefty
+nines
+throb
+pecan
+butts
+pence
+sills
+jails
+flyer
+saber
+nomad
+miter
+beeps
+domed
+gulfs
+curbs
+heath
+moors
+aorta
+larks
+tangy
+wryly
+cheep
+rages
+evade
+lures
+freak
+vogue
+tunic
+slams
+knits
+dumpy
+mania
+spits
+firth
+hikes
+trots
+nosed
+clank
+dogma
+bloat
+balsa
+graft
+middy
+stile
+keyed
+finch
+sperm
+chaff
+wiles
+amigo
+copra
+amiss
+eying
+twirl
+lurch
+popes
+chins
+smock
+tines
+guise
+grits
+junks
+shoal
+cache
+tapir
+atoll
+deity
+toils
+spree
+mocks
+scans
+shorn
+revel
+raven
+hoary
+reels
+scuff
+mimic
+weedy
+corny
+truer
+rouge
+ember
+floes
+torso
+wipes
+edict
+sulky
+recur
+groin
+baste
+kinks
+surer
+piggy
+moldy
+franc
+liars
+inept
+gusty
+facet
+jetty
+equip
+leper
+slink
+soars
+cater
+dowry
+sided
+yearn
+decoy
+taboo
+ovals
+heals
+pleas
+beret
+spilt
+gayly
+rover
+endow
+pygmy
+carat
+abbey
+vents
+waken
+chimp
+fumed
+sodas
+vinyl
+clout
+wades
+mites
+smirk
+bores
+bunny
+surly
+frock
+foray
+purer
+milks
+query
+mired
+blare
+froth
+gruel
+navel
+paler
+puffy
+casks
+grime
+derby
+mamma
+gavel
+teddy
+vomit
+moans
+allot
+defer
+wield
+viper
+louse
+erred
+hewed
+abhor
+wrest
+waxen
+adage
+ardor
+stabs
+pored
+rondo
+loped
+fishy
+bible
+hires
+foals
+feuds
+jambs
+thuds
+jeers
+knead
+quirk
+rugby
+expel
+greys
+rigor
+ester
+lyres
+aback
+glues
+lotus
+lurid
+rungs
+hutch
+thyme
+valet
+tommy
+yokes
+epics
+trill
+pikes
+ozone
+caper
+chime
+frees
+famed
+leech
+smite
+neigh
+erode
+robed
+hoard
+salve
+conic
+gawky
+craze
+jacks
+gloat
+mushy
+rumps
+fetus
+wince
+pinks
+shalt
+toots
+glens
+cooed
+rusts
+stews
+shred
+parka
+chugs
+winks
+clots
+shrew
+booed
+filmy
+juror
+dents
+gummy
+grays
+hooky
+butte
+dogie
+poled
+reams
+fifes
+spank
+gayer
+tepid
+spook
+taint
+flirt
+rogue
+spiky
+opals
+miser
+cocky
+coyly
+balmy
+slosh
+brawl
+aphid
+faked
+hydra
+brags
+chide
+yanks
+allay
+video
+altos
+eases
+meted
+chasm
+longs
+excel
+taffy
+impel
+savor
+koala
+quays
+dawns
+proxy
+clove
+duets
+dregs
+tardy
+briar
+grimy
+ultra
+meaty
+halve
+wails
+suede
+mauve
+envoy
+arson
+coves
+gooey
+brews
+sofas
+chums
+amaze
+zooms
+abbot
+halos
+scour
+suing
+cribs
+sagas
+enema
+wordy
+harps
+coupe
+molar
+flops
+weeps
+mints
+ashen
+felts
+askew
+munch
+mewed
+divan
+vices
+jumbo
+blobs
+blots
+spunk
+acrid
+topaz
+cubed
+clans
+flees
+slurs
+gnaws
+welds
+fords
+emits
+agate
+pumas
+mends
+darks
+dukes
+plies
+canny
+hoots
+oozes
+lamed
+fouls
+clefs
+nicks
+mated
+skims
+brunt
+tuber
+tinge
+fates
+ditty
+thins
+frets
+eider
+bayou
+mulch
+fasts
+amass
+damps
+morns
+friar
+palsy
+vista
+croon
+conch
+udder
+tacos
+skits
+mikes
+quits
+preen
+aster
+adder
+elegy
+pulpy
+scows
+baled
+hovel
+lavas
+crave
+optic
+welts
+busts
+knave
+razed
+shins
+totes
+scoot
+dears
+crock
+mutes
+trims
+skein
+doted
+shuns
+veers
+fakes
+yoked
+wooed
+hacks
+sprig
+wands
+lulls
+seers
+snobs
+nooks
+pined
+perky
+mooed
+frill
+dines
+booze
+tripe
+prong
+drips
+odder
+levee
+antic
+sidle
+pithy
+corks
+yelps
+joker
+fleck
+buffs
+scram
+tiers
+bogey
+doled
+irate
+vales
+coped
+hails
+elude
+bulks
+aired
+vying
+stags
+strew
+cocci
+pacts
+scabs
+silos
+dusts
+yodel
+terse
+jaded
+baser
+jibes
+foils
+sways
+forgo
+slays
+preys
+treks
+quell
+peeks
+assay
+lurks
+eject
+boars
+trite
+belch
+gnash
+wanes
+lutes
+whims
+dosed
+chewy
+snipe
+umbra
+teems
+dozes
+kelps
+upped
+brawn
+doped
+shush
+rinds
+slush
+moron
+voile
+woken
+fjord
+sheik
+jests
+kayak
+slews
+toted
+saner
+drape
+patty
+raves
+sulfa
+grist
+skied
+vixen
+civet
+vouch
+tiara
+homey
+moped
+runts
+serge
+kinky
+rills
+corns
+brats
+pries
+amble
+fries
+loons
+tsars
+datum
+musky
+pigmy
+gnome
+ravel
+ovule
+icily
+liken
+lemur
+frays
+silts
+sifts
+plods
+ramps
+tress
+earls
+dudes
+waive
+karat
+jolts
+peons
+beers
+horny
+pales
+wreak
+lairs
+lynch
+stank
+swoon
+idler
+abort
+blitz
+ensue
+atone
+bingo
+roves
+kilts
+scald
+adios
+cynic
+dulls
+memos
+elfin
+dales
+peels
+peals
+bares
+sinus
+crone
+sable
+hinds
+shirk
+enrol
+wilts
+roams
+duped
+cysts
+mitts
+safes
+spats
+coops
+filet
+knell
+refit
+covey
+punks
+kilns
+fitly
+abate
+talcs
+heeds
+duels
+wanly
+ruffs
+gauss
+lapel
+jaunt
+whelp
+cleat
+gauzy
+dirge
+edits
+wormy
+moats
+smear
+prods
+bowel
+frisk
+vests
+bayed
+rasps
+tames
+delve
+embed
+befit
+wafer
+ceded
+novas
+feign
+spews
+larch
+huffs
+doles
+mamas
+hulks
+pried
+brims
+irked
+aspic
+swipe
+mealy
+skimp
+bluer
+slake
+dowdy
+penis
+brays
+pupas
+egret
+flunk
+phlox
+gripe
+peony
+douse
+blurs
+darns
+slunk
+lefts
+chats
+inane
+vials
+stilt
+rinks
+woofs
+wowed
+bongs
+frond
+ingot
+evict
+singe
+shyer
+flied
+slops
+dolts
+drool
+dells
+whelk
+hippy
+feted
+ether
+cocos
+hives
+jibed
+mazes
+trios
+sirup
+squab
+laths
+leers
+pasta
+rifts
+lopes
+alias
+whirs
+diced
+slags
+lodes
+foxed
+idled
+prows
+plait
+malts
+chafe
+cower
+toyed
+chefs
+keels
+sties
+racer
+etude
+sucks
+sulks
+micas
+czars
+copse
+ailed
+abler
+rabid
+golds
+croup
+snaky
+visas
+palls
+mopes
+boned
+wispy
+raved
+swaps
+junky
+doily
+pawns
+tamer
+poach
+baits
+damns
+gumbo
+daunt
+prank
+hunks
+buxom
+heres
+honks
+stows
+unbar
+idles
+routs
+sages
+goads
+remit
+copes
+deign
+culls
+girds
+haves
+lucks
+stunk
+dodos
+shams
+snubs
+icons
+usurp
+dooms
+hells
+soled
+comas
+paves
+maths
+perks
+limps
+wombs
+blurb
+daubs
+cokes
+sours
+stuns
+cased
+musts
+coeds
+cowed
+aping
+zoned
+rummy
+fetes
+skulk
+quaff
+rajah
+deans
+reaps
+galas
+tills
+roved
+kudos
+toned
+pared
+scull
+vexes
+punts
+snoop
+bails
+dames
+hazes
+lores
+marts
+voids
+ameba
+rakes
+adzes
+harms
+rears
+satyr
+swill
+hexes
+colic
+leeks
+hurls
+yowls
+ivies
+plops
+musks
+papaw
+jells
+bused
+cruet
+bided
+filch
+zests
+rooks
+laxly
+rends
+loams
+basks
+sires
+carps
+pokey
+flits
+muses
+bawls
+shuck
+viler
+lisps
+peeps
+sorer
+lolls
+prude
+diked
+floss
+flogs
+scums
+dopes
+bogie
+pinky
+leafs
+tubas
+scads
+lowed
+yeses
+biked
+qualm
+evens
+caned
+gawks
+whits
+wooly
+gluts
+romps
+bests
+dunce
+crony
+joist
+tunas
+boner
+malls
+parch
+avers
+crams
+pares
+dally
+bigot
+kales
+flays
+leach
+gushy
+pooch
+huger
+slyer
+golfs
+mires
+flues
+loafs
+arced
+acnes
+neons
+fiefs
+dints
+dazes
+pouts
+cored
+yules
+lilts
+beefs
+mutts
+fells
+cowls
+spuds
+lames
+jawed
+dupes
+deads
+bylaw
+noons
+nifty
+clued
+vireo
+gapes
+metes
+cuter
+maims
+droll
+cupid
+mauls
+sedge
+papas
+wheys
+eking
+loots
+hilts
+meows
+beaus
+dices
+peppy
+riper
+fogey
+gists
+yogas
+gilts
+skews
+cedes
+zeals
+alums
+okays
+elope
+grump
+wafts
+soots
+blimp
+hefts
+mulls
+hosed
+cress
+doffs
+ruder
+pixie
+waifs
+ousts
+pucks
+biers
+gulch
+suets
+hobos
+lints
+brans
+teals
+garbs
+pewee
+helms
+turfs
+quips
+wends
+banes
+napes
+icier
+swats
+bagel
+hexed
+ogres
+goner
+gilds
+pyres
+lards
+bides
+paged
+talon
+flout
+medic
+veals
+putts
+dirks
+dotes
+tippy
+blurt
+piths
+acing
+barer
+whets
+gaits
+wools
+dunks
+heros
+swabs
+dirts
+jutes
+hemps
+surfs
+okapi
+chows
+shoos
+dusks
+parry
+decal
+furls
+cilia
+sears
+novae
+murks
+warps
+slues
+lamer
+saris
+weans
+purrs
+dills
+togas
+newts
+meany
+bunts
+razes
+goons
+wicks
+ruses
+vends
+geode
+drake
+judos
+lofts
+pulps
+lauds
+mucks
+vises
+mocha
+oiled
+roman
+ethyl
+gotta
+fugue
+smack
+gourd
+bumpy
+radix
+fatty
+borax
+cubit
+cacti
+gamma
+focal
+avail
+papal
+golly
+elite
+versa
+billy
+adieu
+annum
+howdy
+rhino
+norms
+bobby
+axiom
+setup
+yolks
+terns
+mixer
+genre
+knoll
+abode
+junta
+gorge
+combo
+alpha
+overt
+kinda
+spelt
+prick
+nobly
+ephod
+audio
+modal
+veldt
+warty
+fluke
+bonny
+bream
+rosin
+bolls
+doers
+downs
+beady
+motif
+humph
+fella
+mould
+crepe
+kerns
+aloha
+glyph
+azure
+riser
+blest
+locus
+lumpy
+beryl
+wanna
+brier
+tuner
+rowdy
+mural
+timer
+canst
+krill
+quoth
+lemme
+triad
+tenon
+amply
+deeps
+padre
+leant
+pacer
+octal
+dolly
+trans
+sumac
+foamy
+lolly
+giver
+quipu
+codex
+manna
+unwed
+vodka
+ferny
+salon
+duple
+boron
+revue
+crier
+alack
+inter
+dilly
+whist
+cults
+spake
+reset
+loess
+decor
+mover
+verve
+ethic
+gamut
+lingo
+dunno
+align
+sissy
+incur
+reedy
+avant
+piper
+waxer
+calyx
+basil
+coons
+seine
+piney
+lemma
+trams
+winch
+whirr
+saith
+ionic
+heady
+harem
+tummy
+sally
+shied
+dross
+farad
+saver
+tilde
+jingo
+bower
+serif
+facto
+belle
+inset
+bogus
+caved
+forte
+sooty
+bongo
+toves
+credo
+basal
+yella
+aglow
+glean
+gusto
+hymen
+ethos
+terra
+brash
+scrip
+swash
+aleph
+tinny
+itchy
+wanta
+trice
+jowls
+gongs
+garde
+boric
+twill
+sower
+henry
+awash
+libel
+spurn
+sabre
+rebut
+penal
+obese
+sonny
+quirt
+mebbe
+tacit
+greek
+xenon
+hullo
+pique
+roger
+negro
+hadst
+gecko
+beget
+uncut
+aloes
+louis
+quint
+clunk
+raped
+salvo
+diode
+matey
+hertz
+xylem
+kiosk
+apace
+cawed
+peter
+wench
+cohos
+sorta
+gamba
+bytes
+tango
+nutty
+axial
+aleck
+natal
+clomp
+gored
+siree
+bandy
+gunny
+runic
+whizz
+rupee
+fated
+wiper
+bards
+briny
+staid
+hocks
+ochre
+yummy
+gents
+soupy
+roper
+swath
+cameo
+edger
+spate
+gimme
+ebbed
+breve
+theta
+deems
+dykes
+servo
+telly
+tabby
+tares
+blocs
+welch
+ghoul
+vitae
+cumin
+dinky
+bronc
+tabor
+teeny
+comer
+borer
+sired
+privy
+mammy
+deary
+gyros
+sprit
+conga
+quire
+thugs
+furor
+bloke
+runes
+bawdy
+cadre
+toxin
+annul
+egged
+anion
+nodes
+picky
+stein
+jello
+audit
+echos
+fagot
+letup
+eyrie
+fount
+caped
+axons
+amuck
+banal
+riled
+petit
+umber
+miler
+fibre
+agave
+bated
+bilge
+vitro
+feint
+pudgy
+mater
+manic
+umped
+pesky
+strep
+slurp
+pylon
+puree
+caret
+temps
+newel
+yawns
+seedy
+treed
+coups
+rangy
+brads
+mangy
+loner
+circa
+tibia
+afoul
+mommy
+titer
+carne
+kooky
+motes
+amity
+suave
+hippo
+curvy
+samba
+newsy
+anise
+imams
+tulle
+aways
+liven
+hallo
+wales
+opted
+canto
+idyll
+bodes
+curio
+wrack
+hiker
+chive
+yokel
+dotty
+demur
+cusps
+specs
+quads
+laity
+toner
+decry
+writs
+saute
+clack
+aught
+logos
+tipsy
+natty
+ducal
+bidet
+bulgy
+metre
+lusts
+unary
+goeth
+baler
+sited
+shies
+hasps
+brung
+holed
+swank
+looky
+melee
+huffy
+loamy
+pimps
+titan
+binge
+shunt
+femur
+libra
+seder
+honed
+annas
+coypu
+shims
+zowie
+jihad
+savvy
+nadir
+basso
+monic
+maned
+mousy
+omega
+laver
+prima
+picas
+folio
+mecca
+reals
+troth
+testy
+balky
+crimp
+chink
+abets
+splat
+abaci
+vaunt
+cutie
+pasty
+moray
+levis
+ratty
+islet
+joust
+motet
+viral
+nukes
+grads
+comfy
+voila
+woozy
+blued
+whomp
+sward
+metro
+skeet
+chine
+aerie
+bowie
+tubby
+emirs
+coati
+unzip
+slobs
+trike
+funky
+ducat
+dewey
+skoal
+wadis
+oomph
+taker
+minim
+getup
+stoic
+synod
+runty
+flyby
+braze
+inlay
+venue
+louts
+peaty
+orlon
+humpy
+radon
+beaut
+raspy
+unfed
+crick
+nappy
+vizor
+yipes
+rebus
+divot
+kiwis
+vetch
+squib
+sitar
+kiddo
+dyers
+cotta
+matzo
+lager
+zebus
+crass
+dacha
+kneed
+dicta
+fakir
+knurl
+runny
+unpin
+julep
+globs
+nudes
+sushi
+tacky
+stoke
+kaput
+butch
+hulas
+croft
+achoo
+genii
+nodal
+outgo
+spiel
+viols
+fetid
+cagey
+fudgy
+epoxy
+leggy
+hanky
+lapis
+felon
+beefy
+coots
+melba
+caddy
+segue
+betel
+frizz
+drear
+kooks
+turbo
+hoagy
+moult
+helix
+zonal
+arias
+nosey
+paean
+lacey
+banns
+swain
+fryer
+retch
+tenet
+gigas
+whiny
+ogled
+rumen
+begot
+cruse
+abuts
+riven
+balks
+sines
+sigma
+abase
+ennui
+gores
+unset
+augur
+sated
+odium
+latin
+dings
+moire
+scion
+henna
+kraut
+dicks
+lifer
+prigs
+bebop
+gages
+gazer
+fanny
+gibes
+aural
+tempi
+hooch
+rapes
+snuck
+harts
+techs
+emend
+ninny
+guava
+scarp
+liege
+tufty
+sepia
+tomes
+carob
+emcee
+prams
+poser
+verso
+hubba
+joule
+baize
+blips
+scrim
+cubby
+clave
+winos
+rearm
+liens
+lumen
+chump
+nanny
+trump
+fichu
+chomp
+homos
+purty
+maser
+woosh
+patsy
+shill
+rusks
+avast
+swami
+boded
+ahhhh
+lobed
+natch
+shish
+tansy
+snoot
+payer
+altho
+sappy
+laxer
+hubby
+aegis
+riles
+ditto
+jazzy
+dingo
+quasi
+septa
+peaky
+lorry
+heerd
+bitty
+payee
+seamy
+apses
+imbue
+belie
+chary
+spoof
+phyla
+clime
+babel
+wacky
+sumps
+skids
+khans
+crypt
+inure
+nonce
+outen
+faire
+hooey
+anole
+kazoo
+calve
+limbo
+argot
+ducky
+faker
+vibes
+gassy
+unlit
+nervy
+femme
+biter
+fiche
+boors
+gaffe
+saxes
+recap
+synch
+facie
+dicey
+ouija
+hewer
+legit
+gurus
+edify
+tweak
+caron
+typos
+rerun
+polly
+surds
+hamza
+nulls
+hater
+lefty
+mogul
+mafia
+debug
+pates
+blabs
+splay
+talus
+porno
+moola
+nixed
+kilos
+snide
+horsy
+gesso
+jaggy
+trove
+nixes
+creel
+pater
+iotas
+cadge
+skyed
+hokum
+furze
+ankhs
+curie
+nutsy
+hilum
+remix
+angst
+burls
+jimmy
+veiny
+tryst
+codon
+befog
+gamed
+flume
+axman
+doozy
+lubes
+rheas
+bozos
+butyl
+kelly
+mynah
+jocks
+donut
+avian
+wurst
+chock
+quash
+quals
+hayed
+bombe
+cushy
+spacy
+puked
+leery
+thews
+prink
+amens
+tesla
+intro
+fiver
+frump
+capos
+opine
+coder
+namer
+jowly
+pukes
+haled
+chard
+duffs
+bruin
+reuse
+whang
+toons
+frats
+silty
+telex
+cutup
+nisei
+neato
+decaf
+softy
+bimbo
+adlib
+loony
+shoed
+agues
+peeve
+noway
+gamey
+sarge
+reran
+epact
+potty
+coned
+upend
+narco
+ikats
+whorl
+jinks
+tizzy
+weepy
+posit
+marge
+vegan
+clops
+numbs
+reeks
+rubes
+rower
+biped
+tiffs
+hocus
+hammy
+bunco
+fixit
+tykes
+chaws
+yucky
+hokey
+resew
+maven
+adman
+scuzz
+slogs
+souse
+nacho
+mimed
+melds
+boffo
+debit
+pinup
+vagus
+gulag
+randy
+bosun
+educe
+faxes
+auras
+pesto
+antsy
+betas
+fizzy
+dorky
+snits
+moxie
+thane
+mylar
+nobby
+gamin
+gouty
+esses
+goyim
+paned
+druid
+jades
+rehab
+gofer
+tzars
+octet
+homed
+socko
+dorks
+eared
+anted
+elide
+fazes
+oxbow
+dowse
+situs
+macaw
+scone
+drily
+hyper
+salsa
+mooch
+gated
+unjam
+lipid
+mitre
+venal
+knish
+ritzy
+divas
+torus
+mange
+dimer
+recut
+meson
+wined
+fends
+phage
+fiats
+caulk
+cavil
+panty
+roans
+bilks
+hones
+botch
+estop
+sully
+sooth
+gelds
+ahold
+raper
+pager
+fixer
+infix
+hicks
+tuxes
+plebe
+twits
+abash
+twixt
+wacko
+primp
+nabla
+girts
+miffs
+emote
+xerox
+rebid
+shahs
+rutty
+grout
+grift
+deify
+biddy
+kopek
+semis
+bries
+acmes
+piton
+hussy
+torts
+disco
+whore
+boozy
+gibed
+vamps
+amour
+soppy
+gonzo
+durst
+wader
+tutus
+perms
+catty
+glitz
+brigs
+nerds
+barmy
+gizmo
+owlet
+sayer
+molls
+shard
+whops
+comps
+corer
+colas
+matte
+droid
+ploys
+vapid
+cairn
+deism
+mixup
+yikes
+prosy
+raker
+flubs
+whish
+reify
+craps
+shags
+clone
+hazed
+macho
+recto
+refix
+drams
+biker
+aquas
+porky
+doyen
+exude
+goofs
+divvy
+noels
+jived
+hulky
+cager
+harpy
+oldie
+vivas
+admix
+codas
+zilch
+deist
+orcas
+retro
+pilaf
+parse
+rants
+zingy
+toddy
+chiff
+micro
+veeps
+girly
+nexus
+demos
+bibbs
+antes
+lulus
+gnarl
+zippy
+ivied
+epees
+wimps
+tromp
+grail
+yoyos
+poufs
+hales
+roust
+cabal
+rawer
+pampa
+mosey
+kefir
+burgs
+unmet
+cuspy
+boobs
+boons
+hypes
+dynes
+nards
+lanai
+yogis
+sepal
+quark
+toked
+prate
+ayins
+hawed
+swigs
+vitas
+toker
+doper
+bossa
+linty
+foist
+mondo
+stash
+kayos
+twerp
+zesty
+capon
+wimpy
+rewed
+fungo
+tarot
+frosh
+kabob
+pinko
+redid
+mimeo
+heist
+tarps
+lamas
+sutra
+dinar
+whams
+busty
+spays
+mambo
+nabob
+preps
+odour
+cabby
+conks
+sluff
+dados
+houri
+swart
+balms
+gutsy
+faxed
+egads
+pushy
+retry
+agora
+drubs
+daffy
+chits
+mufti
+karma
+lotto
+toffs
+burps
+deuce
+zings
+kappa
+clads
+doggy
+duper
+scams
+ogler
+mimes
+throe
+zetas
+waled
+promo
+blats
+muffs
+oinks
+viand
+coset
+finks
+faddy
+minis
+snafu
+sauna
+usury
+muxes
+craws
+stats
+condo
+coxes
+loopy
+dorms
+ascot
+dippy
+execs
+dopey
+envoi
+umpty
+gismo
+fazed
+strop
+jives
+slims
+batik
+pings
+sonly
+leggo
+pekoe
+prawn
+luaus
+campy
+oodle
+prexy
+proms
+touts
+ogles
+tweet
+toady
+naiad
+hider
+nuked
+fatso
+sluts
+obits
+narcs
+tyros
+delis
+wooer
+hyped
+poset
+byway
+texas
+scrod
+avows
+futon
+torte
+tuple
+carom
+kebab
+tamps
+jilts
+duals
+artsy
+repro
+modem
+toped
+psych
+sicko
+klutz
+tarns
+coxed
+drays
+cloys
+anded
+piker
+aimer
+suras
+limos
+flack
+hapax
+dutch
+mucky
+shire
+klieg
+staph
+layup
+tokes
+axing
+toper
+duvet
+cowry
+profs
+blahs
+addle
+sudsy
+batty
+coifs
+suety
+gabby
+hafta
+pitas
+gouda
+deice
+taupe
+topes
+duchy
+nitro
+carny
+limey
+orals
+hirer
+taxer
+roils
+ruble
+elate
+dolor
+wryer
+snots
+quais
+coked
+gimel
+gorse
+minas
+goest
+agape
+manta
+jings
+iliac
+admen
+offen
+cills
+offal
+lotta
+bolas
+thwap
+alway
+boggy
+donna
+locos
+belay
+gluey
+bitsy
+mimsy
+hilar
+outta
+vroom
+fetal
+raths
+renal
+dyads
+crocs
+vires
+culpa
+kivas
+feist
+teats
+thats
+yawls
+whens
+abaca
+ohhhh
+aphis
+fusty
+eclat
+perdu
+mayst
+exeat
+molly
+supra
+wetly
+plasm
+buffa
+semen
+pukka
+tagua
+paras
+stoat
+secco
+carte
+haute
+molal
+shads
+forma
+ovoid
+pions
+modus
+bueno
+rheum
+scurf
+parer
+ephah
+doest
+sprue
+flams
+molto
+dieth
+choos
+miked
+bronx
+goopy
+bally
+plumy
+moony
+morts
+yourn
+bipod
+spume
+algal
+ambit
+mucho
+spued
+dozer
+harum
+groat
+skint
+laude
+thrum
+pappy
+oncet
+rimed
+gigue
+limed
+plein
+redly
+humpf
+lites
+seest
+grebe
+absit
+thanx
+pshaw
+yawps
+plats
+payed
+areal
+tilth
+youse
+gwine
+thees
+watsa
+lento
+spitz
+yawed
+gipsy
+sprat
+cornu
+amahs
+blowy
+wahoo
+lubra
+mecum
+whooo
+coqui
+sabra
+edema
+mrads
+dicot
+astro
+kited
+ouzel
+didos
+grata
+bonne
+axmen
+klunk
+summa
+laves
+purls
+yawny
+teary
+masse
+largo
+bazar
+pssst
+sylph
+lulab
+toque
+fugit
+plunk
+ortho
+lucre
+cooch
+whipt
+folky
+tyres
+wheee
+corky
+injun
+solon
+didot
+kerfs
+rayed
+wassa
+chile
+begat
+nippy
+litre
+magna
+rebox
+hydro
+milch
+brent
+gyves
+lazed
+feued
+mavis
+inapt
+baulk
+casus
+scrum
+wised
+fossa
+dower
+kyrie
+bhoys
+scuse
+feuar
+ohmic
+juste
+ukase
+beaux
+tusky
+orate
+musta
+lardy
+intra
+quiff
+epsom
+neath
+ocher
+tared
+homme
+mezzo
+corms
+psoas
+beaky
+terry
+infra
+spivs
+tuans
+belli
+bergs
+anima
+weirs
+mahua
+scops
+manse
+titre
+curia
+kebob
+cycad
+talky
+fucks
+tapis
+amide
+dolce
+sloes
+jakes
+russe
+blash
+tutti
+pruta
+panga
+blebs
+tench
+swarf
+herem
+missy
+merse
+pawky
+limen
+vivre
+chert
+unsee
+tiros
+brack
+foots
+welsh
+fosse
+knops
+ileum
+noire
+firma
+podgy
+laird
+thunk
+shute
+rowan
+shoji
+poesy
+uncap
+fames
+glees
+costa
+turps
+fores
+solum
+imago
+byres
+fondu
+coney
+polis
+dictu
+kraal
+sherd
+mumbo
+wroth
+chars
+unbox
+vacuo
+slued
+weest
+hades
+wiled
+syncs
+muser
+excon
+hoars
+sibyl
+passe
+joeys
+lotsa
+lepta
+shays
+bocks
+endue
+darer
+nones
+ileus
+plash
+busby
+wheal
+buffo
+yobbo
+biles
+poxes
+rooty
+licit
+terce
+bromo
+hayey
+dweeb
+imbed
+saran
+bruit
+punky
+softs
+biffs
+loppy
+agars
+aquae
+livre
+biome
+bunds
+shews
+diems
+ginny
+degum
+polos
+desex
+unman
+dungy
+vitam
+wedgy
+glebe
+apers
+ridgy
+roids
+wifey
+vapes
+whoas
+bunko
+yolky
+ulnas
+reeky
+bodge
+brant
+davit
+deque
+liker
+jenny
+tacts
+fulls
+treap
+ligne
+acked
+refry
+vower
+aargh
+churl
+momma
+gaols
+whump
+arras
+marls
+tiler
+grogs
+memes
+midis
+tided
+haler
+duces
+twiny
+poste
+unrig
+prise
+drabs
+quids
+facer
+spier
+baric
+geoid
+remap
+trier
+gunks
+steno
+stoma
+airer
+ovate
+torah
+apian
+smuts
+pocks
+yurts
+exurb
+defog
+nuder
+bosky
+nimbi
+mothy
+joyed
+labia
+pards
+jammy
+bigly
+faxer
+hoppy
+nurbs
+cotes
+dishy
+vised
+celeb
+pismo
+casas
+withs
+dodgy
+scudi
+mungs
+muons
+ureas
+ioctl
+unhip
+krone
+sager
+verst
+expat
+gronk
+uvula
+shawm
+bilgy
+braes
+cento
+webby
+lippy
+gamic
+lordy
+mazed
+tings
+shoat
+faery
+wirer
+diazo
+carer
+rater
+greps
+rente
+zloty
+viers
+unapt
+poops
+fecal
+kepis
+taxon
+eyers
+wonts
+spina
+stoae
+yenta
+pooey
+buret
+japan
+bedew
+hafts
+selfs
+oared
+herby
+pryer
+oakum
+dinks
+titty
+sepoy
+penes
+fusee
+winey
+gimps
+nihil
+rille
+giber
+ousel
+umiak
+cuppy
+hames
+shits
+azine
+glads
+tacet
+bumph
+coyer
+honky
+gamer
+gooky
+waspy
+sedgy
+bents
+varia
+djinn
+junco
+pubic
+wilco
+lazes
+idyls
+lupus
+rives
+snood
+schmo
+spazz
+finis
+noter
+pavan
+orbed
+bates
+pipet
+baddy
+goers
+shako
+stets
+sebum
+seeth
+lobar
+raver
+ajuga
+riced
+velds
+dribs
+ville
+dhows
+unsew
+halma
+krona
+limby
+jiffs
+treys
+bauds
+pffft
+mimer
+plebs
+caner
+jiber
+cuppa
+washy
+chuff
+unarm
+yukky
+styes
+waker
+flaks
+maces
+rimes
+gimpy
+guano
+liras
+kapok
+scuds
+bwana
+oring
+aider
+prier
+klugy
+monte
+golem
+velar
+firer
+pieta
+umbel
+campo
+unpeg
+fovea
+abeam
+boson
+asker
+goths
+vocab
+vined
+trows
+tikis
+loper
+indie
+boffs
+spang
+grapy
+tater
+ichor
+kilty
+lochs
+supes
+degas
+flics
+torsi
+beths
+weber
+resaw
+lawny
+coven
+mujik
+relet
+therm
+heigh
+shnor
+trued
+zayin
+liest
+barfs
+bassi
+qophs
+roily
+flabs
+punny
+okras
+hanks
+dipso
+nerfs
+fauns
+calla
+pseud
+lurer
+magus
+obeah
+atria
+twink
+palmy
+pocky
+pends
+recta
+plonk
+slaws
+keens
+nicad
+pones
+inker
+whews
+groks
+mosts
+trews
+ulnar
+gyppy
+cocas
+expos
+eruct
+oiler
+vacua
+dreck
+dater
+arums
+tubal
+voxel
+dixit
+beery
+assai
+lades
+actin
+ghoti
+buzzy
+meads
+grody
+ribby
+clews
+creme
+email
+pyxie
+kulak
+bocci
+rived
+duddy
+hoper
+lapin
+wonks
+petri
+phial
+fugal
+holon
+boomy
+duomo
+musos
+shier
+hayer
+porgy
+hived
+litho
+fisty
+stagy
+luvya
+maria
+smogs
+asana
+yogic
+slomo
+fawny
+amine
+wefts
+gonad
+twirp
+brava
+plyer
+fermi
+loges
+niter
+revet
+unate
+gyved
+totty
+zappy
+honer
+giros
+dicer
+calks
+luxes
+monad
+cruft
+quoin
+fumer
+amped
+shlep
+vinca
+yahoo
+vulva
+zooey
+dryad
+nixie
+moper
+iambs
+lunes
+nudie
+limns
+weals
+nohow
+miaow
+gouts
+mynas
+mazer
+kikes
+oxeye
+stoup
+jujus
+debar
+pubes
+taels
+defun
+rands
+blear
+paver
+goosy
+sprog
+oleos
+toffy
+pawer
+maced
+crits
+kluge
+tubed
+sahib
+ganef
+scats
+sputa
+vaned
+acned
+taxol
+plink
+oweth
+tribs
+resay
+boule
+thous
+haply
+glans
+maxis
+bezel
+antis
+porks
+quoit
+alkyd
+glary
+beamy
+hexad
+bonks
+tecum
+kerbs
+filar
+frier
+redux
+abuzz
+fader
+shoer
+couth
+trues
+guyed
+goony
+booky
+fuzes
+hurly
+genet
+hodad
+calix
+filer
+pawls
+iodic
+utero
+henge
+unsay
+liers
+piing
+weald
+sexed
+folic
+poxed
+cunts
+anile
+kiths
+becks
+tatty
+plena
+rebar
+abled
+toyer
+attar
+teaks
+aioli
+awing
+anent
+feces
+redip
+wists
+prats
+mesne
+muter
+smurf
+owest
+bahts
+lossy
+ftped
+hunky
+hoers
+slier
+sicks
+fatly
+delft
+hiver
+himbo
+pengo
+busks
+loxes
+zonks
+ilium
+aport
+ikons
+mulct
+reeve
+civvy
+canna
+barfy
+kaiak
+scudo
+knout
+gaper
+bhang
+pease
+uteri
+lases
+paten
+rasae
+axels
+stoas
+ombre
+styli
+gunky
+hazer
+kenaf
+ahoys
+ammos
+weeny
+urger
+kudzu
+paren
+bolos
+fetor
+nitty
+techy
+lieth
+somas
+darky
+villi
+gluon
+janes
+cants
+farts
+socle
+jinns
+ruing
+slily
+ricer
+hadda
+wowee
+rices
+nerts
+cauls
+swive
+lilty
+micks
+arity
+pasha
+finif
+oinky
+gutty
+tetra
+wises
+wolds
+balds
+picot
+whats
+shiki
+bungs
+snarf
+legos
+dungs
+stogy
+berms
+tangs
+vails
+roods
+morel
+sware
+elans
+latus
+gules
+razer
+doxie
+buena
+overs
+gutta
+zincs
+nates
+kirks
+tikes
+donee
+jerry
+mohel
+ceder
+doges
+unmap
+folia
+rawly
+snark
+topoi
+ceils
+immix
+yores
+diest
+bubba
+pomps
+forky
+turdy
+lawzy
+poohs
+worts
+gloms
+beano
+muley
+barky
+tunny
+auric
+funks
+gaffs
+cordy
+curdy
+lisle
+toric
+soyas
+reman
+mungy
+carpy
+apish
+oaten
+gappy
+aurae
+bract
+rooky
+axled
+burry
+sizer
+proem
+turfy
+impro
+mashy
+miens
+nonny
+olios
+grook
+sates
+agley
+corgi
+dashy
+doser
+dildo
+apsos
+xored
+laker
+playa
+selah
+malty
+dulse
+frigs
+demit
+whoso
+rials
+sawer
+spics
+bedim
+snugs
+fanin
+azoic
+icers
+suers
+wizen
+koine
+topos
+shirr
+rifer
+feral
+laded
+lased
+turds
+swede
+easts
+cozen
+unhit
+pally
+aitch
+sedum
+coper
+ruche
+geeks
+swags
+etext
+algin
+offed
+ninja
+holer
+doter
+toter
+besot
+dicut
+macer
+peens
+pewit
+redox
+poler
+yecch
+fluky
+doeth
+twats
+cruds
+bebug
+bider
+stele
+hexer
+wests
+gluer
+pilau
+abaft
+whelm
+lacer
+inode
+tabus
+gator
+cuing
+refly
+luted
+cukes
+bairn
+bight
+arses
+crump
+loggy
+blini
+spoor
+toyon
+harks
+wazoo
+fenny
+naves
+keyer
+tufas
+morph
+rajas
+typal
+spiff
+oxlip
+unban
+mussy
+finny
+rimer
+login
+molas
+cirri
+huzza
+agone
+unsex
+unwon
+peats
+toile
+zombi
+dewed
+nooky
+alkyl
+ixnay
+dovey
+holey
+cuber
+amyls
+podia
+chino
+apnea
+prims
+lycra
+johns
+primo
+fatwa
+egger
+hempy
+snook
+hying
+fuzed
+barms
+crink
+moots
+yerba
+rhumb
+unarc
+direr
+munge
+eland
+nares
+wrier
+noddy
+atilt
+jukes
+ender
+thens
+unfix
+doggo
+zooks
+diddy
+shmoo
+brusk
+prest
+curer
+pasts
+kelpy
+bocce
+kicky
+taros
+lings
+dicky
+nerdy
+abend
+stela
+biggy
+laved
+baldy
+pubis
+gooks
+wonky
+stied
+hypos
+assed
+spumy
+osier
+roble
+rumba
+biffy
+pupal
avd
@@ -0,0 +1,1 @@
+Subproject commit 884a93a9e1d1b568e6cf0b5007631c718dd4a607
puppet-casperjs
@@ -0,0 +1,1 @@
+Subproject commit 2b90584a478929f4d859bb32ca866501a988de23
vagrant-tests
@@ -0,0 +1,1 @@
+Subproject commit 32129e9d1885c46a4d442e681e074b5abd9bf3c3