dotfiles

configuration files for shell, text editor, graphical environment, etc.
git clone git://src.adamsgaard.dk/dotfiles
Log | Files | Refs | README | LICENSE Back to index

commit cc1a1bffa162be243a19c50446de0ee1a281037c
parent 88e2318f89bcc6a80a68efe0fadaad8f5a945c8f
Author: Anders Damsgaard Christensen <adc@geo.au.dk>
Date:   Mon,  7 Nov 2016 12:13:26 -0800

add missing dotfiles

Diffstat:
A.Xdefaults-light | 197+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.Xmodmap | 18++++++++++++++++++
A.Xresources | 162+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.bashrc | 206+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/LICENSE.md | 24++++++++++++++++++++++++
A.colors/NES | 29+++++++++++++++++++++++++++++
A.colors/Tomorrow | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/TomorrowNight | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/TomorrowNightBlue | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/TomorrowNightBright | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/TomorrowNightEighties | 50++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/ancient | 37+++++++++++++++++++++++++++++++++++++
A.colors/beastie | 20++++++++++++++++++++
A.colors/blackburn | 40++++++++++++++++++++++++++++++++++++++++
A.colors/blackgum | 28++++++++++++++++++++++++++++
A.colors/blue | 35+++++++++++++++++++++++++++++++++++
A.colors/bw_b | 32++++++++++++++++++++++++++++++++
A.colors/bw_w | 42++++++++++++++++++++++++++++++++++++++++++
A.colors/charlie_brown | 24++++++++++++++++++++++++
A.colors/clean | 31+++++++++++++++++++++++++++++++
A.colors/clear | 26++++++++++++++++++++++++++
A.colors/clouds | 27+++++++++++++++++++++++++++
A.colors/colors | 38++++++++++++++++++++++++++++++++++++++
A.colors/crypt | 36++++++++++++++++++++++++++++++++++++
A.colors/cryptedit | 36++++++++++++++++++++++++++++++++++++
A.colors/cryptetsy | 32++++++++++++++++++++++++++++++++
A.colors/cryptmatrix | 32++++++++++++++++++++++++++++++++
A.colors/cryptred | 32++++++++++++++++++++++++++++++++
A.colors/erosion | 37+++++++++++++++++++++++++++++++++++++
A.colors/erosion2 | 37+++++++++++++++++++++++++++++++++++++
A.colors/erosionedit | 48++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/euphrasia | 97+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/fallac | 36++++++++++++++++++++++++++++++++++++
A.colors/form | 20++++++++++++++++++++
A.colors/genie | 27+++++++++++++++++++++++++++
A.colors/genie5 | 30++++++++++++++++++++++++++++++
A.colors/gohucolor | 37+++++++++++++++++++++++++++++++++++++
A.colors/gutter | 26++++++++++++++++++++++++++
A.colors/jellybean | 31+++++++++++++++++++++++++++++++
A.colors/nebula | 28++++++++++++++++++++++++++++
A.colors/neeee | 28++++++++++++++++++++++++++++
A.colors/ok100 | 29+++++++++++++++++++++++++++++
A.colors/pantsu | 18++++++++++++++++++
A.colors/papey | 30++++++++++++++++++++++++++++++
A.colors/plain | 26++++++++++++++++++++++++++
A.colors/plastique | 26++++++++++++++++++++++++++
A.colors/poppy | 29+++++++++++++++++++++++++++++
A.colors/ratpoison | 20++++++++++++++++++++
A.colors/redhead | 18++++++++++++++++++
A.colors/sinatra | 26++++++++++++++++++++++++++
A.colors/solarized | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/solarized_black | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/solarized_light | 57+++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.colors/space | 37+++++++++++++++++++++++++++++++++++++
A.colors/thaw | 35+++++++++++++++++++++++++++++++++++
A.colors/venam | 35+++++++++++++++++++++++++++++++++++
A.colors/vintage | 31+++++++++++++++++++++++++++++++
A.colors/vintage2 | 31+++++++++++++++++++++++++++++++
A.colors/waterfront | 19+++++++++++++++++++
A.colors/wooly | 45+++++++++++++++++++++++++++++++++++++++++++++
A.colors/xmas | 42++++++++++++++++++++++++++++++++++++++++++
A.compton.conf | 217+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/awesome/rc.lua | 418+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/bspwm/bspwmrc | 36++++++++++++++++++++++++++++++++++++
A.config/bspwm/panel/panel | 132+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/bspwm/panel/panel_bar | 74++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/bspwm/panel/panel_colors | 24++++++++++++++++++++++++
A.config/dwb/keys | 175+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/dwb/searchengines | 8++++++++
A.config/dwb/settings | 163+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/dwb/userscripts/wget | 3+++
A.config/dwb/userscripts/youtube-mplayer | 8++++++++
A.config/luakit/binds.lua | 588+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/globals.lua | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/modes.lua | 163+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/rc.lua | 181+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/theme.lua | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/webview.lua | 350+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/luakit/window.lua | 859+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/openbox/autostart | 94+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/openbox/menu.xml | 524+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/openbox/rc.xml | 1002+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/sxhkd/sxhkdrc | 69+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/uzbl/config | 472+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/uzbl/config-default | 467+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.config/uzbl/style.css | 34++++++++++++++++++++++++++++++++++
A.config/zathura/zathurarc | 9+++++++++
A.conkyrc | 82+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.ctags | 4++++
A.gitconfig | 8++++++++
A.i3/config | 315+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.i3/i3blocks | 99+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.i3/status | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.inputrc | 3+++
A.kwm/kwmrc | 203+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.locale | 9+++++++++
A.mailcap | 22++++++++++++++++++++++
A.mpd/mpd.conf | 413+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.msmtprc | 48++++++++++++++++++++++++++++++++++++++++++++++++
A.mutt/cert.pem | 4670+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.mutt/colors | 78++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.mutt/colors2 | 22++++++++++++++++++++++
A.mutt/muttrc | 198+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.mutt/offlineimap.py | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
A.mutt/view_attachment.sh | 134+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.ncmpcpp/config | 41+++++++++++++++++++++++++++++++++++++++++
A.offlineimaprc | 256+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.signature | 9+++++++++
A.spacemacs | 275+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.tmuxinator/article2.yml | 23+++++++++++++++++++++++
A.tmuxinator/cosmo.yml | 37+++++++++++++++++++++++++++++++++++++
A.tmuxinator/dev.yml | 40++++++++++++++++++++++++++++++++++++++++
A.tmuxinator/tmuxinator.bash | 21+++++++++++++++++++++
A.tmuxinator/tmuxinator.zsh | 20++++++++++++++++++++
A.tmuxinator/tutorial.yml | 28++++++++++++++++++++++++++++
A.tmuxinator/utility.yml | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.vim/vimrc.tiny | 13+++++++++++++
A.vimpcrc | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.vimperator/colors/darkness2.vimp | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.vimperator/colors/phallus.vimp | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.vimperatorrc | 47+++++++++++++++++++++++++++++++++++++++++++++++
A.vimrc | 704+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.w3m/config | 139+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.w3m/keymap | 143+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/alias.conf | 42++++++++++++++++++++++++++++++++++++++++++
A.weechat/aspell.conf | 20++++++++++++++++++++
A.weechat/autosort.conf | 11+++++++++++
A.weechat/buffer_autoset.conf | 9+++++++++
A.weechat/buffers.conf | 73+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/charset.conf | 11+++++++++++
A.weechat/exec.conf | 11+++++++++++
A.weechat/irc.conf | 327+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/iset.conf | 30++++++++++++++++++++++++++++++
A.weechat/logger.conf | 26++++++++++++++++++++++++++
A.weechat/plugins.conf | 210+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/relay.conf | 38++++++++++++++++++++++++++++++++++++++
A.weechat/script.conf | 48++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/sec.conf | 24++++++++++++++++++++++++
A.weechat/trigger.conf | 47+++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/weechat.conf | 658+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.weechat/xfer.conf | 39+++++++++++++++++++++++++++++++++++++++
A.xbindkeysrc | 45+++++++++++++++++++++++++++++++++++++++++++++
A.xinitrc | 135+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A.xpdfrc | 10++++++++++
A.xprofile | 4++++
A.zshrc | 257+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AREADME.rst | 10++++++++++
Abar/config.h | 44++++++++++++++++++++++++++++++++++++++++++++
Abin/battery-linux | 2++
Abin/battery-osx | 30++++++++++++++++++++++++++++++
Abin/citeparse.sh | 19+++++++++++++++++++
Abin/comet-ssh | 4++++
Abin/crun | 39+++++++++++++++++++++++++++++++++++++++
Abin/currency | 29+++++++++++++++++++++++++++++
Abin/dark.sh | 2++
Abin/democracy-now-dl | 54++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/ffmpeg-to-mp4.sh | 6++++++
Abin/fsize.sh | 6++++++
Abin/hardwareinfo.sh | 34++++++++++++++++++++++++++++++++++
Abin/i3status-mpc.sh | 26++++++++++++++++++++++++++
Abin/icme1-gpu-modules.sh | 4++++
Abin/iddqd-ssh | 17+++++++++++++++++
Abin/iddqd-ssh-X.sh | 2++
Abin/iddqd-ssh-poster.sh | 12++++++++++++
Abin/iddqd-ssh-sphere.sh | 2++
Abin/iddqd-ssh-vpn.sh | 2++
Abin/idkfa-ssh | 6++++++
Abin/idkfa-sshfs | 5+++++
Abin/in.txt | 11+++++++++++
Abin/install_bspwm.sh | 46++++++++++++++++++++++++++++++++++++++++++++++
Abin/irc.sh | 23+++++++++++++++++++++++
Abin/kbd_backlight.sh | 38++++++++++++++++++++++++++++++++++++++
Abin/keyboard-layout-switch.sh | 37+++++++++++++++++++++++++++++++++++++
Abin/light.sh | 2++
Abin/mailcheck.sh | 56++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/mount-usb.sh | 2++
Abin/notmuch-mutt | 292+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/photo-drive-sync.sh | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Abin/sastrugi-ssh | 3+++
Abin/scale.sh | 13+++++++++++++
Abin/solarized-dark.sh | 2++
Abin/solarized-light.sh | 2++
Abin/sync-music-idkfa.sh | 8++++++++
Abin/tmux-utility.sh | 42++++++++++++++++++++++++++++++++++++++++++
Abin/todo.sh | 8++++++++
Abin/tor-browser-update.sh | 88+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/tor-browser.sh | 2++
Abin/umount-usb.sh | 2++
Abin/uu | 53+++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/wallpaper.sh | 5+++++
Abin/xlock | 6++++++
Abin/xrandr-auto.sh | 48++++++++++++++++++++++++++++++++++++++++++++++++
Abin/youtube-dl-music-playlist.sh | 78++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/youtube-dl-music.sh | 58++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abin/zzz | 18++++++++++++++++++
Abitbar-plugins/batt.10s.sh | 6++++++
Abitbar-plugins/calendar.30s.sh | 2++
Abitbar-plugins/clock.5s.sh | 2++
Abitbar-plugins/kwm.2s.sh | 77+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abitbar-plugins/load.10s.sh | 4++++
Abitbar-plugins/mail.5s.sh | 55+++++++++++++++++++++++++++++++++++++++++++++++++++++++
Abitbar-plugins/mpd.3s.sh | 18++++++++++++++++++
Acreate_symlinks.sh | 63+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Adebian-install.sh | 87+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Ainstall.sh | 49+++++++++++++++++++++++++++++++++++++++++++++++++
Aosx-install.sh | 162+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
AuserChrome.css | 145+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
207 files changed, 21420 insertions(+), 0 deletions(-)

diff --git a/.Xdefaults-light b/.Xdefaults-light @@ -0,0 +1,197 @@ +! Xcursor -------------------------------------------------------------------- +Xcursor.theme: Vanilla-DMZ-AA +Xcursor.size: 22 + +! terminal colors ------------------------------------------------------------ + +!! tangoesque scheme +!*background: #041621 +!*foreground: #babdb6 +!! Black (not tango) + DarkGrey +!*color0: #000000 +!*color8: #555753 +!! DarkRed + Red +!*color1: #ff6565 +!*color9: #ff8d8d +!! DarkGreen + Green +!*color2: #93d44f +!*color10: #c8e7a8 +!! DarkYellow + Yellow +!*color3: #eab93d +!*color11: #ffc123 +!! DarkBlue + Blue +!*color4: #204a87 +!*color12: #3465a4 +!! DarkMangenta + Mangenta +!*color5: #ce5c00 +!*color13: #f57900 +!!DarkCyan + Cyan (both not tango) +!*color6: #89b6e2 +!*color14: #46a4ff +!! LightGrey + White +!*color7: #cccccc +!*color15: #ffffff + +! Solarized color scheme for the X Window System +! http://ethanschoonover.com/solarized + +! Common +#define S_yellow #b58900 +#define S_orange #cb4b16 +#define S_red #dc322f +#define S_magenta #d33682 +#define S_violet #6c71c4 +#define S_blue #268bd2 +#define S_cyan #2aa198 +#define S_green #859900 + +! Dark +! #define S_base03 #002b36 +! #define S_base02 #073642 +! #define S_base01 #586e75 +! #define S_base00 #657b83 +! #define S_base0 #839496 +! #define S_base1 #93a1a1 +! #define S_base2 #eee8d5 +! #define S_base3 #fdf6e3 + +! Light +#define S_base03 #fdf6e3 +#define S_base02 #eee8d5 +#define S_base01 #93a1a1 +#define S_base00 #839496 +#define S_base0 #657b83 +#define S_base1 #586e75 +#define S_base2 #073642 +#define S_base3 #002b36 + +! To only apply colors to your terminal, for example, prefix +! the color assignment statement with its name. Example: +! URxvt*background: S_base03 +URxvt*background: S_base03 +URxvt*foreground: S_base0 +!*fading: 40 +URxvt*fadeColor: S_base03 +!*cursorColor: S_base1 +URxvt*cursorColor: $DCDCCC +URxvt*pointerColorBackground: S_base01 +URxvt*pointerColorForeground: S_base1 + +URxvt*color0: S_base02 +URxvt*color1: S_red +URxvt*color2: S_green +URxvt*color3: S_yellow +URxvt*color4: S_blue +URxvt*color5: S_magenta +URxvt*color6: S_cyan +URxvt*color7: S_base2 +URxvt*color8: S_base03 +URxvt*color9: S_orange +URxvt*color10: S_base01 +URxvt*color11: S_base00 +URxvt*color12: S_base0 +URxvt*color13: S_violet +URxvt*color14: S_base1 +URxvt*color15: S_base3 + + +! xterm ---------------------------------------------------------------------- +!xterm*background: black +!xterm*background: black +!xterm*foreground: white +xterm*termName: xterm-256color +!xterm*geometry: 80x25 +!!xterm*faceName: terminus:bold:pixelsize=11 +!!!xterm*font: -*-dina-medium-r-*-*-16-*-*-*-*-*-*-* +!xterm*faceName: SourceCodePro-Regular +!xterm*faceSize: 11 +!xterm*font: 7x13 +!xterm*font: 8x15 +!!xterm*dynamicColors: true +!!!xterm*metaSendsEscape: true +!!!xterm*eightBitInput: false +!!!xterm*eightBitControl: false +!!!xterm*eightBitOutput: true + +!xterm*utf8: 1 +xterm*utf8: 2 +xterm*eightBitInput: true + +xterm*saveLines: 1024 +!xterm*scrollKey: true +!xterm*scrollTtyOutput: false +!!xterm*scrollBar: true +!xterm*rightScrollBar: true +!xterm*jumpScroll: true +!xterm*multiScroll: true +!xterm*toolBar: false + +! xpdf ----------------------------------------------------------------------- +xpdf*enableFreetype: yes +xpdf*antialias: yes +xpdf*foreground: black +xpdf*background: white +xpdf*matteColor: gray +xpdf*urlCommand: /usr/bin/firefox %s + +! rxvt-unicode --------------------------------------------------------------- +URxvt.termName:screen-256color +!URxvt.termName:rxvt-256color +!URxvt.transparent: true +! URxvt.shading: 0 to 99 darkens, 101 to 200 lightens +!URxvt.shading: 20 +! scrollbar style - rxvt (default), plain (most compact), next, or xterm +!URxvt.scrollstyle: rxvt +URxvt.internalBorder: 1 +!URxvt.loginShell: true +URxvt.scrollBar: off +!URxvt.font: 7x13euro +!URxvf.font: 8x13 +! tabs and clickable URLs +!URxvt.perl-ext-common: default,tabbed,matcher +URxvt.perl-ext-common: default,matcher +URxvt.urlLauncher: /usr/bin/firefox +URxvt.matcher.button: 1 +! tab colors +!URxvt.tabbed.tabbar-fg: 2 +!URxvt.tabbed.tabbar-bg: 0 +!URxvt.tabbed.tab-fg: 3 +!URxvt.tabbed.tab-bg: 0 +! colors +!URxvt.foreground: White +!URxvt.background: Black +!URxvt.saveLines: 1024 +URxvt.meta8: True +URxvt.intensityStyles: false +!Xft.dpi: 81 +!Xft.dpi: 100 +!URxvt.font: xft:SourceCodePro-Light:pixelsize=11 + +! xscreensaver --------------------------------------------------------------- +!font settings +xscreensaver.Dialog.headingFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.bodyFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.labelFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.unameFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.buttonFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.dateFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.passwd.passwdFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +!general dialog box (affects main hostname, username, password text) +xscreensaver.Dialog.foreground: #ffffff +xscreensaver.Dialog.background: #111111 +xscreensaver.Dialog.topShadowColor: #111111 +xscreensaver.Dialog.bottomShadowColor: #111111 +xscreensaver.Dialog.Button.foreground: #666666 +xscreensaver.Dialog.Button.background: #ffffff +!username/password input box and date text colour +xscreensaver.Dialog.text.foreground: #666666 +xscreensaver.Dialog.text.background: #ffffff +xscreensaver.Dialog.internalBorderWidth:24 +xscreensaver.Dialog.borderWidth: 20 +xscreensaver.Dialog.shadowThickness: 2 +!timeout bar (background is actually determined by Dialog.text.background) +xscreensaver.passwd.thermometer.foreground: #ff0000 +xscreensaver.passwd.thermometer.background: #000000 +xscreensaver.passwd.thermometer.width: 8 +!datestamp format--see the strftime(3) manual page for details +xscreensaver.dateFormat: %I:%M%P %a %b %d, %Y diff --git a/.Xmodmap b/.Xmodmap @@ -0,0 +1,18 @@ +! Map caps lock to escape +!remove Lock = Caps_Lock +!keysym Caps_Lock = Escape + +! Map caps lock to ctrl +!remove Lock = Caps_Lock +!keysym Caps_Lock = Control_L +!add Control = Control_L + +!remove mod1 = Alt_L +!remove mod1 = Alt_R +!remove mod4 = Super_L +!add mod1 = Super_L +!add mod4 = Alt_L +!add mod4 = Alt_R + +! Reverse scroll +pointer = 1 2 3 5 4 7 6 8 9 10 11 12 diff --git a/.Xresources b/.Xresources @@ -0,0 +1,162 @@ +! Xcursor -------------------------------------------------------------------- +Xcursor.theme: Vanilla-DMZ-AA +Xcursor.size: 22 + +! terminal colors ------------------------------------------------------------ +! see https://ciembor.github.io/4bit +!#include "/home/ad/.colors/solarized" +!#include "/home/ad/.colors/solarized_light" +!#include "/home/ad/.colors/erosionedit" +!#include "/home/ad/.colors/solarized" +!#include "/home/ad/.colors/solarized_black" +#include "/home/ad/.colors/TomorrowNight" + +! fonts ---------------------------------------------------------------------- +Xft*dpi: 96 +Xft*antialias: true +Xft*rgba: rgb +Xft*hinting: true +Xft*hintstyle: hintslight + +! urxvt ---------------------------------------------------------------------- +urxvt*perl-lib: /usr/lib/urxvt/perl +urxvt*perl-ext-common: default,matcher +urxvt*perl-matcher: 1 +urxvt*matcher-button: 1 +urxvt*urlLauncher: /usr/bin/firefox +!URxvt*matcher.button: 1 +!URxvt*matcher.pattern.1: \\bwww\\.[\\w-]\\.[\\w./?&@#-]*[\\w/-] +!urxvt*cursorUnderline: 1 +urxvt*cursorUnderline: 0 +urxvt*cursorColor: #FF00FF +urxvt*fading: 0 +!urxvt*fadeColor: #000000 +urxvt*cursorBlink: false +urxvt*scrollBar: false +urxvt*depth: 24 +urxvt*internalBorder: 2 + +URxvt.meta8: true +URxvt.intensityStyles: false +URxvt.iso14755: false +URxvt.iso14755_52: false + +!URxvt.keysym.C-1: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=7\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=7\007 +!URxvt.keysym.C-2: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=7.5\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=7.5\007 +!URxvt.keysym.C-3: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=8\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=8\007 +!URxvt.keysym.C-4: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=9\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=9\007 +!URxvt.keysym.C-5: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=10\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=10\007 +!URxvt.keysym.C-6: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=12\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=12\007 +!URxvt.keysym.C-7: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=14\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=14\007 +!URxvt.keysym.C-8: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=16\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=16\007 +!URxvt.keysym.C-9: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=18\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=18\007 +!URxvt.keysym.C-0: command:\033]710;xft:DejaVu Sans Mono for Powerline:size=20\007\033]711;xft:DejaVu Sans Mono Bold for Powerline:size=20\007 +URxvt.keysym.C-1: command:\033]710;xft:PragmataPro:size=7\007\033]711;xft:PragmataPro:size=7:style=Bold\007 +URxvt.keysym.C-2: command:\033]710;xft:PragmataPro:size=7.5\007\033]711;xft:PragmataPro:size=7.5:style=Bold\007 +URxvt.keysym.C-3: command:\033]710;xft:PragmataPro:size=8\007\033]711;xft:PragmataPro:size=8:style=Bold\007 +URxvt.keysym.C-4: command:\033]710;xft:PragmataPro:size=9\007\033]711;xft:PragmataPro:size=9:style=Bold\007 +URxvt.keysym.C-5: command:\033]710;xft:PragmataPro:size=10\007\033]711;xft:PragmataPro:size=10:style=Bold\007 +URxvt.keysym.C-6: command:\033]710;xft:PragmataPro:size=11\007\033]711;xft:PragmataPro:size=11:style=Bold\007 +URxvt.keysym.C-7: command:\033]710;xft:PragmataPro:size=12\007\033]711;xft:PragmataPro:size=12:style=Bold\007 +URxvt.keysym.C-8: command:\033]710;xft:PragmataPro:size=14\007\033]711;xft:PragmataPro:size=14:style=Bold\007 +URxvt.keysym.C-9: command:\033]710;xft:PragmataPro:size=16\007\033]711;xft:PragmataPro:size=16:style=Bold\007 +URxvt.keysym.C-0: command:\033]710;xft:PragmataPro:size=20\007\033]711;xft:PragmataPro:size=20:style=Bold\007 +!URxvt.keysym.C-9: command:\033]710;-*-termsynu-medium-r-*-*-13-*-*-*-*-*-*-*\007\033]711;-*-termsynu-medium-r-*-*-13-*-*-*-*-*-*-*\007 +!URxvt.keysym.C-0: command:\033]710;-*-termsynu-medium-r-*-*-14-*-*-*-*-*-*-*\007\033]711;-*-termsynu-medium-r-*-*-14-*-*-*-*-*-*-*\007 + +! looks good with DejaVu Sans Mono: +!URxvt.letterSpace: -1 + +! looks good with PragmataPro +URxvt.letterSpace: -2 +!URxvt.letterSpace: -1 + +!urxvt*font: -*-lemon-*-*-*-*-*-*-*-*-*-*-*-* +!urxvt*boldFont: -*-lemon-*-*-*-*-*-*-*-*-*-*-*-* +!urxvt*italicFont: -*-lemon-*-*-*-*-*-*-*-*-*-*-*-* +!urxvt*bolditalicFont: -*-lemon-*-*-*-*-*-*-*-*-*-*-*-* + +!urxvt*font: -misc-fixed-medium-r-normal--12-120-75-75-C-70-iso10646-1 +!urxvt*boldfont: -misc-fixed-bold-r-normal--12-120-75-75-C-70-iso10646-1 +!urxvt*font: -*-uushi-*-*-*-*-*-*-*-*-*-*-*-* +!urxvt*font: -*-termsynu-medium-r-*-*-11-*-*-*-*-*-*-* +!urxvt*boldfont: -*-termsynu-bold-r-*-*-11-*-*-*-*-*-*-* +!urxvt*font: -*-termsynu-medium-r-*-*-13-*-*-*-*-*-*-* +!urxvt*boldfont: -*-termsynu-bold-r-*-*-13-*-*-*-*-*-*-* +!urxvt*font: xft:DejaVu Sans Mono for Powerline:size=8 +!urxvt*boldfont: xft:DejaVu Sans Mono for Powerline:size=8 +urxvt*font: xft:PragmataPro:size=11 +urxvt*boldfont: xft:PragmataPro:size=11:style=Bold +!urxvt*boldfont: xft:DejaVu Sans Mono Bold for Powerline:size=8 + +! shading: 0-99 darkens, 101-200 lightens +!urxvt*transparent: true +!urxvt*shading: 10 +urxvt*transparent: true +urxvt*shading: 20 +!urxvt*blurRadius: 5 +!urxvt*fading: 30 + +! open links with the default web browser with the left mouse button +URxvt.perl-ext-common: default,matcher +URxvt.url-launcher: /usr/bin/xdg-open +URxvt.matcher.button: 1 + +! xterm ---------------------------------------------------------------------- +xterm*background: black +!xterm*background: black +xterm*foreground: white +xterm*termName: xterm-256color + +xterm*utf8: 2 +xterm*eightBitInput: true + +xterm*saveLines: 1024 +xterm*scrollBar: false +xterm*toolBar: false + +! xpdf ----------------------------------------------------------------------- +xpdf*enableFreetype: yes +xpdf*antialias: yes +xpdf*foreground: black +xpdf*background: white +xpdf*matteColor: gray +xpdf*urlCommand: /usr/bin/firefox %s +xpdf*viKeys: true + +! xscreensaver --------------------------------------------------------------- +!font settings +xscreensaver.Dialog.headingFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.bodyFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.labelFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.unameFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.buttonFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.Dialog.dateFont: -*-dina-medium-r-*-*-12-*-*-*-*-*-*-* +xscreensaver.passwd.passwdFont: -*-dina-bold-r-*-*-12-*-*-*-*-*-*-* +!general dialog box (affects main hostname, username, password text) +xscreensaver.Dialog.foreground: #ffffff +xscreensaver.Dialog.background: #111111 +xscreensaver.Dialog.topShadowColor: #111111 +xscreensaver.Dialog.bottomShadowColor: #111111 +xscreensaver.Dialog.Button.foreground: #666666 +xscreensaver.Dialog.Button.background: #ffffff +!username/password input box and date text colour +xscreensaver.Dialog.text.foreground: #666666 +xscreensaver.Dialog.text.background: #ffffff +xscreensaver.Dialog.internalBorderWidth:24 +xscreensaver.Dialog.borderWidth: 20 +xscreensaver.Dialog.shadowThickness: 2 +!timeout bar (background is actually determined by Dialog.text.background) +xscreensaver.passwd.thermometer.foreground: #ff0000 +xscreensaver.passwd.thermometer.background: #000000 +xscreensaver.passwd.thermometer.width: 8 +!datestamp format--see the strftime(3) manual page for details +xscreensaver.dateFormat: %I:%M%P %a %b %d, %Y + +! xclock +!xclock*update: 1 +xclock*analog: true +xclock*background: #002b36 +xclock*Foreground: #657b83 + + diff --git a/.bashrc b/.bashrc @@ -0,0 +1,206 @@ +# ~/.bashrc: executed by bash(1) for non-login shells. + +# If not running interactively, don't do anything +[ -z "$PS1" ] && return + +# don't put duplicate lines in the history. See bash(1) for more options +# ... or force ignoredups and ignorespace +HISTCONTROL=ignoredups:ignorespace + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000 +HISTFILESIZE=2000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# make less more friendly for non-text input files, see lesspipe(1) +[ -x /usr/bin/lesspipe ] && eval "$(SHELL=/bin/sh lesspipe)" + +# set a fancy prompt (non-color, unless we know we "want" color) +case "$TERM" in + xterm-color) color_prompt=yes;; +esac + +# uncomment for a colored prompt, if the terminal has the capability; turned +# off by default to not distract the user: the focus in a terminal window +# should be on the output of commands, not on the prompt +force_color_prompt=yes + +if [ -n "$force_color_prompt" ]; then + if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then + # We have color support; assume it's compliant with Ecma-48 + # (ISO/IEC-6429). (Lack of such support is extremely rare, and such + # a case would tend to support setf rather than setaf.) + color_prompt=yes + else + color_prompt= + fi +fi + +if [ "$color_prompt" = yes ]; then + PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;36m\]\w\[\033[00m\]\$ ' +else + PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ ' +fi +unset color_prompt force_color_prompt + +# Useful aliases +alias ll='ls -alF' +alias la='ls -A' +alias l='ls -CF' +alias vi='vim -u NONE' +#alias ls='ls $LS_OPTIONS -hF' +alias play='mpg123 --title -C' +# Set bash title for certain terminals +#echo -n -e "\033]0;`hostname`\007" +ARCH=$(uname) +if [[ "$ARCH" != 'Darwin' ]]; then + function open() { xdg-open $1 &> /dev/null &disown; } + function say() { echo "$@" | festival --tts; } +fi + +# Dircolors +export CLICOLOR=1 + +# Add path to my own custom executables: +export PATH=$HOME/bin:$PATH + +#export GNUTERM='X11' + +export HISTTIMEFORMAT='%F %T ' + +export EDITOR=vim + +if [ `hostname` == "adc-stationary" ]; then + # CUDA 4.2 (installed with apt-get) + #export PATH=/usr/bin:$PATH + #export LD_LIBRARY_PATH=/usr/lib64:/usr/lib:$LD_LIBRARY_PATH + + # CUDA 5.0 (installed with `sudo sh cuda_5.0.35_linux_64_ubuntu11.10-1.run -override`) + export PATH=/usr/local/cuda-5.0/bin:$PATH + export LD_LIBRARY_PATH=/usr/local/cuda-5.0/lib64:/usr/local/cuda-5.0/lib:$LD_LIBRARY_PATH + + # ESyS-Particle + export PATH=/usr/local/bin:$PATH + export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH + export LIBRARY_PATH=/usr/local/lib:$LIBRARY_PATH + export PYTHONPATH=/usr/local/lib/python2.7/dist-packages:$PYTHONPATH + + #source $HOME/OpenFOAM/OpenFOAM-2.1.x/etc/bashrc + + # Julia + #export PATH=/Users/adc/install/julia:$PATH +fi + +if [ `hostname` == "master" ] || + [ `hostname` == "node02" ] || + [ `hostname` == "node03" ] || + [ `hostname` == "node04" ] || + [ `hostname` == "node05" ] ; then + + export PATH=~/code/julia:$PATH + + # PGI compiler + PGI=/opt/pgi; export PG + PATH=/opt/pgi/linux86-64/11.9/bin:$PATH; export PATH + MANPATH=$MANPATH:/opt/pgi/linux86-64/11.9/man; export MANPATH + LM_LICENSE_FILE=$LM_LICENSE_FILE:/opt/pgi/license.dat;export LM_LICENSE_FILE + + # Maui scheduler + export PATH=$PATH:/usr/local/maui/bin:/usr/local/maui/sbin + + # CUDA environment variables + export PATH=/usr/local/cuda/bin:$PATH + export LD_LIBRARY_PATH=/usr/local/cuda/lib64:/usr/local/cuda/lib:$LD_LIBRARY_PATH + + # ESyS-Particle + export PATH=/usr/local/bin/:$PATH + export LD_LIBRARY_PATH=/usr/local/lib/:$LD_LIBRARY_PATH + export LIBRARY_PATH=/usr/local/lib/:$LIBRARY_PATH + export PYTHONPATH=/usr/local/lib/python2.7/dist-packages/:$PYTHONPATH +fi + +# LMGC90 +if [ -z ${PYTHONPATH} ]; then + export PYTHONPATH=/home/adc/code/lmgc90/LMGC90v2/builds/Lmgc90_v2 + export PYTHONPATH=${PYTHONPATH}://home/adc/code/lmgc90/LMGC90v2/builds/Lmgc90_v2/lib +else + export PYTHONPATH=${PYTHONPATH}://home/adc/code/lmgc90/LMGC90v2/builds/Lmgc90_v2 + export PYTHONPATH=${PYTHONPATH}://home/adc/code/lmgc90/LMGC90v2/builds/Lmgc90_v2/lib +fi +export PATH=${PATH}:/home/adc/code/lmgc90/LMGC90v2/src/LMGC90v2_dev/addons + +HOSTNAME=$(hostname) +if [[ "$HOSTNAME" == "iddqd" ]]; then + + # OpenFOAM from unofficial Ubuntu repositories + #if [ -f /opt/openfoam222/etc/bashrc ]; then + # . /opt/openfoam222/etc/bashrc + #fi + + # Manual OpenFOAM installation + export FOAM_INST_DIR=$HOME/OpenFOAM + #foamDotFile=$FOAM_INST_DIR/OpenFOAM-2.1.x/etc/bashrc + foamDotFile=$FOAM_INST_DIR/OpenFOAM-2.2.x/etc/bashrc + [ -f $foamDotFile ] && . $foamDotFile + + # CFDEM vars + export CFDEM_VERSION=PUBLIC + export CFDEM_PROJECT_DIR=$HOME/CFDEM/CFDEMcoupling-$CFDEM_VERSION-$WM_PROJECT_VERSION + export CFDEM_SRC_DIR=$CFDEM_PROJECT_DIR/src + export CFDEM_SOLVER_DIR=$CFDEM_PROJECT_DIR/applications/solvers + export CFDEM_DOC_DIR=$CFDEM_PROJECT_DIR/doc + export CFDEM_UT_DIR=$CFDEM_PROJECT_DIR/applications/utilities + export CFDEM_TUT_DIR=$CFDEM_PROJECT_DIR/tutorials + export CFDEM_PROJECT_USER_DIR=$HOME/CFDEM/$LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION + export CFDEM_bashrc=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/bashrc + export CFDEM_LIGGGHTS_SRC_DIR=$HOME/LIGGGHTS/LIGGGHTS-PUBLIC/src + export CFDEM_LIGGGHTS_MAKEFILE_NAME=fedora_fpic + export CFDEM_LPP_DIR=$HOME/LIGGGHTS/mylpp/src + #export CFDEM_PIZZA_DIR=$HOME/LIGGGHTS/PIZZA/gran_pizza_17Aug10/src + export CFDEM_PIZZA_DIR=$CFDEM_LPP_DIR + . $CFDEM_bashrc + + alias lpp="python $CFDEM_LPP_DIR/lpp.py" + alias pizza="python $CFDEM_LPP_DIR/pizza.py" +fi + +PENGUINCUDA=/public/apps/cuda/6.0 +if [ -d $PENGUINCUDA ]; then + module load cmake/2.8.11.2 + module load cuda/6.0 + module load python/2.7.4 + module load numpy/1.7.1/python.2.7.4 + module load matplotlib/1.7.1/python.2.7.4 +fi + +[ -f $HOME/code/julia/julia ] && export PATH=$HOME/code/julia:$PATH + +[ -f $HOME/.locale ] && $HOME/.locale + +source ~/.tmuxinator/tmuxinator.zsh + +if [[ "$HOSTNAME" == "flaptop" ]]; then + #source ~/.xsh + #export PATH=~/miniconda3/bin:$PATH + export PATH=/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/texbin:$PATH +fi + +if [[ "`hostname`" == "icme-gpu1" ]]; then + source ~/bin/icme-gpu1-modules.sh + export PYTHONPATH=/usr/lib64/python2.6/site-packages:$PYTHONPATH +fi + +if [ $(echo $HOSTNAME | grep cosmo) ]; then + export PATH=/usr/local/MATLAB/R2015a/bin:$PATH +fi + +[ -d /home/ad/pism ] && export PATH=/home/ad/pism/bin:$PATH +[ -d ~/code/issm/trunk ] && export ISSM_DIR=~/code/issm/trunk + +export GPG_TTY=`tty` diff --git a/.colors/LICENSE.md b/.colors/LICENSE.md @@ -0,0 +1,24 @@ +# LICENSE + +Base16 Builder is released under the MIT License: + +> Copyright (C) 2013 [Chris Kempson](http://chriskempson.com) +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/.colors/NES b/.colors/NES @@ -0,0 +1,29 @@ +!! NES_Palette_Final +URxvt.background: #000001 +URxvt.foreground: #f8f8f8 +URxvt.cursorColor: #bcbcbc + +!black +urxvt*color0:#000101 +urxvt*color8:#787878 +!red +urxvt*color1:#4428BC +urxvt*color9:#6844FC +!green +urxvt*color2:#9878F8 +urxvt*color10:#D8B8F8 +!yellow +urxvt*color3:#6888FC +urxvt*color11:#B8B8F8 +!blue +urxvt*color4:#0078F8 +urxvt*color12:#3CBCFC +!magenta +urxvt*color5:#6844FC +urxvt*color13:#9878f8 +!cyan +urxvt*color6:#0058f8 +urxvt*color14:#0078f8 +!white +urxvt*color7:#7c7c7c +urxvt*color15:#bcbcbc diff --git a/.colors/Tomorrow b/.colors/Tomorrow @@ -0,0 +1,50 @@ +!Tomorrow +#define t_background #ffffff +#define t_current_line #efefef +#define t_selection #d6d6d6 +#define t_foreground #4d4d4c +#define t_comment #8e908c +#define t_red #c82829 +#define t_orange #f5871f +#define t_yellow #eab700 +#define t_green #718c00 +#define t_aqua #3e999f +#define t_blue #4271ae +#define t_purple #8959a8 + + +*.foreground: t_foreground +*.background: t_background +*.cursorColor: #aeafad + +! Black / Grey +*.color0: #000000 +*.color8: #666666 + +! Red / Bright Red +*.color1: t_red +*.color9: #FF3334 + +! Green + Bright Green +*.color2: t_green +*.color10: #9ec400 + +! Yellow (Orange) + Bright Yellow (Yellow) +*.color3: t_orange +*.color11: t_yellow + +! Blue + Bright Blue +*.color4: t_blue +*.color12: t_blue + +! Magenta (Purple) + Bright Magenta +*.color5: t_purple +*.color13: #b777e0 + +! Cyan (Aqua) + Bright Cyan +*.color6: t_aqua +*.color14: #54ced6 + +! Light Grey (Selection) + White (Current Line) +*.color7: t_selection +*.color15: t_current_line diff --git a/.colors/TomorrowNight b/.colors/TomorrowNight @@ -0,0 +1,50 @@ +!TomorrowNight +#define t_background #1d1f21 +#define t_current_line #282a2e +#define t_selection #373b41 +#define t_foreground #c5c8c6 +#define t_comment #969896 +#define t_red #cc6666 +#define t_orange #de935f +#define t_yellow #f0c674 +#define t_green #b5bd68 +#define t_aqua #8abeb7 +#define t_blue #81a2be +#define t_purple #b294bb + + +*.foreground: t_foreground +*.background: t_background +*.cursorColor: #aeafad + +! Black / Grey +*.color0: #000000 +*.color8: #666666 + +! Red / Bright Red +*.color1: t_red +*.color9: #FF3334 + +! Green + Bright Green +*.color2: t_green +*.color10: #9ec400 + +! Yellow (Orange) + Bright Yellow (Yellow) +*.color3: t_orange +*.color11: t_yellow + +! Blue + Bright Blue +*.color4: t_blue +*.color12: t_blue + +! Magenta (Purple) + Bright Magenta +*.color5: t_purple +*.color13: #b777e0 + +! Cyan (Aqua) + Bright Cyan +*.color6: t_aqua +*.color14: #54ced6 + +! Light Grey (Selection) + White (Current Line) +*.color7: t_selection +*.color15: t_current_line diff --git a/.colors/TomorrowNightBlue b/.colors/TomorrowNightBlue @@ -0,0 +1,50 @@ +!TomorrowNightBlue +#define t_background #002451 +#define t_current_line #00346e +#define t_selection #003f8e +#define t_foreground #ffffff +#define t_comment #7285b7 +#define t_red #ff9da4 +#define t_orange #ffc58f +#define t_yellow #ffeead +#define t_green #d1f1a9 +#define t_aqua #99ffff +#define t_blue #bbdaff +#define t_purple #ebbbff + + +*.foreground: t_foreground +*.background: t_background +*.cursorColor: #aeafad + +! Black / Grey +*.color0: #000000 +*.color8: #666666 + +! Red / Bright Red +*.color1: t_red +*.color9: #FF3334 + +! Green + Bright Green +*.color2: t_green +*.color10: #9ec400 + +! Yellow (Orange) + Bright Yellow (Yellow) +*.color3: t_orange +*.color11: t_yellow + +! Blue + Bright Blue +*.color4: t_blue +*.color12: t_blue + +! Magenta (Purple) + Bright Magenta +*.color5: t_purple +*.color13: #b777e0 + +! Cyan (Aqua) + Bright Cyan +*.color6: t_aqua +*.color14: #54ced6 + +! Light Grey (Selection) + White (Current Line) +*.color7: t_selection +*.color15: t_current_line diff --git a/.colors/TomorrowNightBright b/.colors/TomorrowNightBright @@ -0,0 +1,50 @@ +!TomorrowNightBright +#define t_background #000000 +#define t_current_line #2a2a2a +#define t_selection #424242 +#define t_foreground #eaeaea +#define t_comment #969896 +#define t_red #d54e53 +#define t_orange #e78c45 +#define t_yellow #e7c547 +#define t_green #b9ca4a +#define t_aqua #70c0b1 +#define t_blue #7aa6da +#define t_purple #c397d8 + + +*.foreground: t_foreground +*.background: t_background +*.cursorColor: #aeafad + +! Black / Grey +*.color0: #000000 +*.color8: #666666 + +! Red / Bright Red +*.color1: t_red +*.color9: #FF3334 + +! Green + Bright Green +*.color2: t_green +*.color10: #9ec400 + +! Yellow (Orange) + Bright Yellow (Yellow) +*.color3: t_orange +*.color11: t_yellow + +! Blue + Bright Blue +*.color4: t_blue +*.color12: t_blue + +! Magenta (Purple) + Bright Magenta +*.color5: t_purple +*.color13: #b777e0 + +! Cyan (Aqua) + Bright Cyan +*.color6: t_aqua +*.color14: #54ced6 + +! Light Grey (Selection) + White (Current Line) +*.color7: t_selection +*.color15: t_current_line diff --git a/.colors/TomorrowNightEighties b/.colors/TomorrowNightEighties @@ -0,0 +1,50 @@ +!TomorrowNightEighties +#define t_background #2d2d2d +#define t_current_line #393939 +#define t_selection #515151 +#define t_foreground #cccccc +#define t_comment #999999 +#define t_red #f2777a +#define t_orange #f99157 +#define t_yellow #ffcc66 +#define t_green #99cc99 +#define t_aqua #66cccc +#define t_blue #6699cc +#define t_purple #cc99cc + + +*.foreground: t_foreground +*.background: t_background +*.cursorColor: #aeafad + +! Black / Grey +*.color0: #000000 +*.color8: #666666 + +! Red / Bright Red +*.color1: t_red +*.color9: #FF3334 + +! Green + Bright Green +*.color2: t_green +*.color10: #9ec400 + +! Yellow (Orange) + Bright Yellow (Yellow) +*.color3: t_orange +*.color11: t_yellow + +! Blue + Bright Blue +*.color4: t_blue +*.color12: t_blue + +! Magenta (Purple) + Bright Magenta +*.color5: t_purple +*.color13: #b777e0 + +! Cyan (Aqua) + Bright Cyan +*.color6: t_aqua +*.color14: #54ced6 + +! Light Grey (Selection) + White (Current Line) +*.color7: t_selection +*.color15: t_current_line diff --git a/.colors/ancient b/.colors/ancient @@ -0,0 +1,37 @@ +urxvt*background: #181512 +urxvt*foreground: #bea492 +urxvt*cursorColor: #93a1a1 +  +!! black dark/light +urxvt*color0: #332d29 +urxvt*color8: #817267 +  +!! red dark/light +urxvt*color1: #8c644c +urxvt*color9: #9f7155 +  +!! green dark/light +urxvt*color2: #c4be90 +urxvt*color10: #bec17e +  +!! yellow dark/light +urxvt*color3: #bfba92 +urxvt*color11: #fafac0 +  +!! blue dark/light +! *color4: #293033 +! *color12: #303b40 +urxvt*color4: #646a6d +urxvt*color12: #626e74 +  +!! magenta dark/light +urxvt*color5: #6d6871 +urxvt*color13: #756f7b +  +!! cyan dark/light +urxvt*color6: #3b484a +urxvt*color14: #444d4e +  +!! white dark/light +urxvt*color7: #504339 +urxvt*color15: #9a875f diff --git a/.colors/beastie b/.colors/beastie @@ -0,0 +1,20 @@ +URxvt*foreground: #c3c2c5 +URxvt*background: #1c1c1c + +!colors +URxvt*color0: #1c1c1c +URxvt*color8: #505050 +URxvt*color1: #cd5c5c +URxvt*color9: #e5505f +URxvt*color2: #8eae71 +URxvt*color10: #95c749 +URxvt*color3: #d2b48c +URxvt*color11: #ffa75d +URxvt*color4: #0087af +URxvt*color12: #6495ed +URxvt*color5: #7E62B3 +URxvt*color13: #a488d9 +URxvt*color6: #5f7b8a +URxvt*color14: #00afd7 +URxvt*color7: #665c64 +URxvt*color15: #cacaca diff --git a/.colors/blackburn b/.colors/blackburn @@ -0,0 +1,40 @@ +!*background: #020202 + +URxvt*background: [95]#020202 +URxvt*.foreground: #F2F1F0 +URxvt*.cursorColor: #F67730 + +!black +URxvt*color0: #222222 +URxvt*color8: #666666 + +!red +URxvt*color1: #D23D3D +URxvt*color9: #E84F4F + +!green +URxvt*color2: #B7CE42 +URxvt*color10: #BDE077 + +!yellow +URxvt*color3: #F6784F +URxvt*color11: #F07746 + +!blue +URxvt*color4: #7DC1CF +!*color4: #66AABB +URxvt*color12: #4E9FB1 +!*color12: #AACCBB + +!magenta +URxvt*color5: #B7416E +URxvt*color13: #E16A98 + +!cyan +URxvt*color6: #6D878D +URxvt*color14: #42717B + +!white +URxvt*color7: #F2F1F0 +URxvt*color15: #F2F1F0 + diff --git a/.colors/blackgum b/.colors/blackgum @@ -0,0 +1,28 @@ +!ObliviousGmnColors + URxvt*foreground: #ECEDEE + URxvt*background: #111111 +!black + URxvt*color0: #2E1F1F + URxvt*color8: #422D2D +!red + URxvt*color1: #AA0E50 + URxvt*color9: #BE0E50 +!green + URxvt*color2: #1DCC9F + URxvt*color10: #1FD9A9 +!yellow + URxvt*color3: #27C282 + URxvt*color11: #2CDB93 +!blue + URxvt*color4: #7182A8 + URxvt*color12: #8194BF +!magenta + URxvt*color5: #A673A6 + URxvt*color13: #7F5AA1 +!cyan + URxvt*color6: #6DA3A1 + URxvt*color14: #669997 +!white + URxvt*color7: #B7BBBD + URxvt*color15: #D9D9D9 + diff --git a/.colors/blue b/.colors/blue @@ -0,0 +1,35 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +! ######################################### +! BLUE AWESOME COLORS +! ######################################### +urxvt*cursorColor: #b2b2b2 +urxvt*colorIT: #927d9e +urxvt*colorUL: #6e98b8 +urxvt*colorBD: #7791e0 +urxvt*background: #000000 +urxvt*foreground: #FFFFFF + +urxvt*color0: #343639 +urxvt*color8: #404040 + +urxvt*color1: #2f468e +urxvt*color9: #7791e0 + +urxvt*color2: #424242 +urxvt*color10: #828a8c + +urxvt*color3: #6b8ba3 +urxvt*color11: #8ebdde + +urxvt*color4: #1c4582 +urxvt*color12: #5365a6 + +urxvt*color5: #74637d +urxvt*color13: #927d9e + +urxvt*color6: #556c85 +urxvt*color14: #6e98b8 + +urxvt*color7: #b2b2b2 +urxvt*color15: #bdbdbd diff --git a/.colors/bw_b b/.colors/bw_b @@ -0,0 +1,32 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +! ######################################### +! BW ON BLACK +! ######################################### +URxvt.background: #FFFFFF +URxvt.foreground: #000000 +!black +URxvt*color0: #000000 +URxvt*color8: #090909 +!red +URxvt*color1: #111111 +URxvt*color9: #181818 +!green +URxvt*color2: #222222 +URxvt*color10: #272727 +!yellow +URxvt*color3: #333333 +URxvt*color11: #393939 +!blue +URxvt*color4: #444444 +URxvt*color12: #484848 +!magenta +URxvt*color5: #555555 +URxvt*color13: #595959 +!cyan +URxvt*color6: #666666 +URxvt*color14: #707070 +!white +URxvt*color7: #777777 +URxvt*color15: #818181 + diff --git a/.colors/bw_w b/.colors/bw_w @@ -0,0 +1,42 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +! ######################################### +! BW ON WHITE +! ######################################### + +urxvt*background: #FFFFFF +urxvt*foreground: #000000 +urxvt*colorUL: #4E4FFF + +!BLACK +urxvt*color0: #FFFFFF +urxvt*color8: #9A9A9A +! RED +urxvt*color1: #121212 +urxvt*color9: #1C1C1C + +! GREEN +urxvt*color2: #A5A5A5 +urxvt*color10: #A4A4A4 + +!YELLOW +urxvt*color3: #777777 +urxvt*color11: #646464 + +! BLUE +urxvt*color4: #999999 +urxvt*color12: #7C7C7C + +! MAGENTA +urxvt*color5: #4C4C4C +urxvt*color13: #515151 + +! CYAN +urxvt*color6: #2B2B2B +urxvt*color14: #322929 + +!WHITE +urxvt*color7: #000000 +urxvt*color15: #101010 + + diff --git a/.colors/charlie_brown b/.colors/charlie_brown @@ -0,0 +1,24 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! + +##### CHARLIE BROWN +urxvt*background:#FFFFFF +urxvt*foreground:#000000 +urxvt*color0: #CFEAFB +urxvt*color8: #DEF6FE +urxvt*color1: #EF3828 +urxvt*color9: #F16328 +urxvt*color2: #48A052 +urxvt*color10: #749077 +urxvt*color3: #C1A564 +urxvt*color11: #D6B075 +urxvt*color4: #448FBF +urxvt*color12: #02A0D6 +urxvt*color5: #877EAA +urxvt*color13: #B0BCE6 +!#D394B9 +urxvt*color6: #6AB7E2 +urxvt*color14: #A7D9F1 +urxvt*color7: #110102 +urxvt*color15: #26312A + diff --git a/.colors/clean b/.colors/clean @@ -0,0 +1,31 @@ +urxvt*background: [80]#262729 +urxvt*foreground: #f8f8f2 +urxvt*cursorColor: #b5d2dd +urxvt*colorIT: #5e7175 +urxvt*colorUL: #FFFFFF +urxvt*colorBD: #a6e22e +! Black +urxvt*color0: #626262 +urxvt*color8: #626262 +! Red +urxvt*color1: #f92671 +urxvt*color9: #ff669d +! Green +urxvt*color2: #a6e22e +urxvt*color10: #beed5f +! Yellow +urxvt*color3: #fd971f +urxvt*color11: #e6db74 +! Blue +urxvt*color4: #1692d0 +urxvt*color12: #66d9ef +! Magenta +urxvt*color5: #9e6ffe +urxvt*color13: #df92f6 +! Cyan +urxvt*color6: #5e7175 +urxvt*color14: #a3babf +! White +urxvt*color7: #ffffff +urxvt*color15: #ffffff +! Cursor diff --git a/.colors/clear b/.colors/clear @@ -0,0 +1,26 @@ +urxvt*background: [80]#000000 +urxvt*foreground: #FFFFFF +!black +urxvt*color0: #101010 +urxvt*color8: #404040 +!red +urxvt*color1: #E84F4F +urxvt*color9: #D23D3D +!green +urxvt*color2: #B8D68C +urxvt*color10: #A0CF5D +!yellow +urxvt*color3: #E1AA5D +urxvt*color11: #F39D21 +!blue +urxvt*color4: #7DC1CF +urxvt*color12: #4E9FB1 +!magenta +urxvt*color5: #9B64FB +urxvt*color13: #8542FF +!cyan +urxvt*color6: #6D878D +urxvt*color14: #42717B +!white +urxvt*color7: #dddddd +urxvt*color15: #dddddd diff --git a/.colors/clouds b/.colors/clouds @@ -0,0 +1,27 @@ +URxvt.background: #0E0E0E +URxvt.foreground: #fefefe + +!Black / Light black +urxvt*color0: #454545 +urxvt*color8: #666666 +!Red / Light red +urxvt*color1: #CC4747 +urxvt*color9: #BF5858 +!Green / Light green +urxvt*color2: #A0CF5D +urxvt*color10: #B8D68C +!Yellow / Light yellow +urxvt*color3: #FF9B52 +urxvt*color11: #FFB680 +!Blue / Light blue +urxvt*color4: #5FA69B +urxvt*color12: #99C7BF +!Purple / Light purple +urxvt*color5: #A966CC +urxvt*color13: #BD9FCC +!Cyan / Light cyan +urxvt*color6: #6CAB79 +urxvt*color14: #95BA9C +!White / Light white...? +urxvt*color7: #d3d3d3 +urxvt*color15: #fefefe diff --git a/.colors/colors b/.colors/colors @@ -0,0 +1,38 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +urxvt*foreground: #D7D0C7 +urxvt*background: #151515 +! ######################################### +! X::Dotshare COLORS +! ######################################### +!black +!urxvt*color0: #AF875F +!urxvt*color8: #AF875F +urxvt*color0: #404040 +urxvt*color8: #404040 +!red +urxvt*color1: #E84F4F +urxvt*color9: #D23D3D +!green +urxvt*color2: #B8D68C +urxvt*color10: #A0CF5D +!yellow +urxvt*color3: #E1AA5D +urxvt*color11: #F39D21 +!blue +urxvt*color4: #7DC1CF +urxvt*color12: #4E9FB1 +!magenta +urxvt*color5: #9B64FB +urxvt*color13: #8542FF +!cyan +urxvt*color6: #6D878D +urxvt*color14: #42717B +!white +urxvt*color7: #dddddd +urxvt*color15: #dddddd + +URxvt*borderColor: #151515 +URxvt*colorBD: #ffffff +URxvt*cursorColor: #ff8939 +URxvt*cursorColor2: #151515 diff --git a/.colors/crypt b/.colors/crypt @@ -0,0 +1,36 @@ +! TERMINAL COLOURS +URxvt*cursorColor: #AADB0F +URxvt*colorIT: #666666 +URxvt*colorUL: #FFFFFF +URxvt*colorBD: #AAD80F + +URxvt*foreground: #D3D3D3 +!URxvt*background: #000000 +URxvt*background: #111111 +!black +URxvt*color0: #666666 +URxvt*color8: #666666 +!!black +!URxvt*color0: #181818 +!URxvt*color8: #181818 +!red +URxvt*color1: #D7D7D7 +URxvt*color9: #D7D7D7 +!green +URxvt*color2: #AADB0F +URxvt*color10: #AADB0F +!yellow +URxvt*color3: #666666 +URxvt*color11: #666666 +!blue +URxvt*color4: #FFFFFF +URxvt*color12: #FFFFFF +!magenta +URxvt*color5: #91BA0D +URxvt*color13: #91BA0D +!cyan +URxvt*color6: #D4D4D4 +URxvt*color14: #D4D4D4 +!white +URxvt*color7: #D3D3D3 +URxvt*color15: #D3D3D3 diff --git a/.colors/cryptedit b/.colors/cryptedit @@ -0,0 +1,36 @@ +! TERMINAL COLOURS +URxvt*cursorColor: #AADB0F +URxvt*colorIT: #666666 +URxvt*colorUL: #FFFFFF +URxvt*colorBD: #AAD80F + +URxvt*foreground: #D3D3D3 +!URxvt*background: #000000 +URxvt*background: #111111 +!black +URxvt*color0: #666666 +URxvt*color8: #666666 +!!black +!URxvt*color0: #181818 +!URxvt*color8: #181818 +!red +URxvt*color1: #DB4E0F +URxvt*color9: #DB4E0F +!green +URxvt*color2: #AADB0F +URxvt*color10: #AADB0F +!yellow +URxvt*color3: #DBCE0F +URxvt*color11: #DBCE0F +!blue +URxvt*color4: #430FDB +URxvt*color12: #430FDB +!magenta +URxvt*color5: #DB0FB7 +URxvt*color13: #DB0FB7 +!cyan +URxvt*color6: #0FDBD9 +URxvt*color14: #0FDBD9 +!white +URxvt*color7: #FFFFFF +URxvt*color15: #FFFFFF diff --git a/.colors/cryptetsy b/.colors/cryptetsy @@ -0,0 +1,32 @@ +! TERMINAL COLOURS +URxvt*cursorColor: #E2791B +URxvt*colorIT: #666666 +URxvt*colorUL: #FFFFFF +URxvt*colorBD: #E2791B + +URxvt*foreground: #D3D3D3 +URxvt*background: #111111 +!black +URxvt*color0: #181818 +URxvt*color8: #181818 +!red +URxvt*color1: #D7D7D7 +URxvt*color9: #D7D7D7 +!green +URxvt*color2: #E2791B +URxvt*color10: #E2791B +!yellow +URxvt*color3: #666666 +URxvt*color11: #666666 +!blue +URxvt*color4: #FFFFFF +URxvt*color12: #FFFFFF +!magenta +URxvt*color5: #BF3C0A +URxvt*color13: #BF3C0A +!cyan +URxvt*color6: #D4D4D4 +URxvt*color14: #D4D4D4 +!white +URxvt*color7: #D3D3D3 +URxvt*color15: #D3D3D3 diff --git a/.colors/cryptmatrix b/.colors/cryptmatrix @@ -0,0 +1,32 @@ +! TERMINAL COLOURS +URxvt*cursorColor: #AFE690 +URxvt*colorIT: #666666 +URxvt*colorUL: #FFFFFF +URxvt*colorBD: #AFE690 + +URxvt*foreground: #D3D3D3 +URxvt*background: #111111 +!black +URxvt*color0: #181818 +URxvt*color8: #181818 +!red +URxvt*color1: #D7D7D7 +URxvt*color9: #D7D7D7 +!green +URxvt*color2: #AFE690 +URxvt*color10: #AFE690 +!yellow +URxvt*color3: #666666 +URxvt*color11: #666666 +!blue +URxvt*color4: #FFFFFF +URxvt*color12: #FFFFFF +!magenta +URxvt*color5: #AFE690 +URxvt*color13: #AFE690 +!cyan +URxvt*color6: #D4D4D4 +URxvt*color14: #D4D4D4 +!white +URxvt*color7: #D3D3D3 +URxvt*color15: #D3D3D3 diff --git a/.colors/cryptred b/.colors/cryptred @@ -0,0 +1,32 @@ +! TERMINAL COLOURS +URxvt*cursorColor: #A80036 +URxvt*colorIT: #666666 +URxvt*colorUL: #FFFFFF +URxvt*colorBD: #A80036 + +URxvt*foreground: #D3D3D3 +URxvt*background: #111111 +!black +URxvt*color0: #181818 +URxvt*color8: #181818 +!red +URxvt*color1: #D7D7D7 +URxvt*color9: #D7D7D7 +!green +URxvt*color2: #A80036 +URxvt*color10: #A80036 +!yellow +URxvt*color3: #666666 +URxvt*color11: #666666 +!blue +URxvt*color4: #FFFFFF +URxvt*color12: #FFFFFF +!magenta +URxvt*color5: #740629 +URxvt*color13: #740629 +!cyan +URxvt*color6: #D4D4D4 +URxvt*color14: #D4D4D4 +!white +URxvt*color7: #D3D3D3 +URxvt*color15: #D3D3D3 diff --git a/.colors/erosion b/.colors/erosion @@ -0,0 +1,37 @@ +urxvt*background: #181512 +urxvt*foreground: #bea492 +urxvt*cursorColor: #93a1a1 + +!! black dark/light +urxvt*color0: #332d29 +urxvt*color8: #817267 + +!! red dark/light +urxvt*color1: #8c644c +urxvt*color9: #9f7155 + +!! green dark/light +urxvt*color2: #c4be90 +urxvt*color10: #bec17e + +!! yellow dark/light +urxvt*color3: #bfba92 +urxvt*color11: #fafac0 + +!! blue dark/light +! urxvt*color4: #293033 +! urxvt*color12: #303b40 +urxvt*color4: #646a6d +urxvt*color12: #626e74 + +!! magenta dark/light +urxvt*color5: #6d6871 +urxvt*color13: #756f7b + +!! cyan dark/light +urxvt*color6: #3b484a +urxvt*color14: #444d4e + +!! white dark/light +urxvt*color7: #504339 +urxvt*color15: #9a875f diff --git a/.colors/erosion2 b/.colors/erosion2 @@ -0,0 +1,37 @@ +urxvt*background: #000000 +urxvt*foreground: #ffffff +urxvt*cursorColor: #93a1a1 + +!! black dark/light +urxvt*color0: #332d29 +urxvt*color8: #817267 + +!! red dark/light +urxvt*color1: #8c644c +urxvt*color9: #9f7155 + +!! green dark/light +urxvt*color2: #c4be90 +urxvt*color10: #bec17e + +!! yellow dark/light +urxvt*color3: #bfba92 +urxvt*color11: #fafac0 + +!! blue dark/light +! urxvt*color4: #293033 +! urxvt*color12: #303b40 +urxvt*color4: #646a6d +urxvt*color12: #626e74 + +!! magenta dark/light +urxvt*color5: #6d6871 +urxvt*color13: #756f7b + +!! cyan dark/light +urxvt*color6: #3b484a +urxvt*color14: #444d4e + +!! white dark/light +urxvt*color7: #504339 +urxvt*color15: #9a875f diff --git a/.colors/erosionedit b/.colors/erosionedit @@ -0,0 +1,48 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: + +urxvt*background: #181512 +!!urxvt*foreground: #D6C3B6 +urxvt*foreground: #bea492 +urxvt*cursorColor: #93a1a1 +urxvt*colorIT: #8c644c +urxvt*colorUL: #646a6d +urxvt*colorBD: #9a875f + +!! black dark/light +urxvt*color0: #332d29 +urxvt*color8: #817267 + +!! red dark/light +urxvt*color1: #8c644c +urxvt*color9: #9f7155 + +!! green dark/light +urxvt*color2: #746C48 +urxvt*color10: #857B52 + +!! yellow dark/light +urxvt*color3: #908A66 +urxvt*color11: #9C956E +!!urxvt*color11: #E0DAAC + +!! blue dark/light +urxvt*color4: #646a6d +urxvt*color12: #71777A + +!! magenta dark/light +!!urxvt*color5: #656565 +!!urxvt*color13: #706D70 +!!urxvt*color5: #463c3b +urxvt*color5: #605655 +urxvt*color13: #656565 + +!! cyan dark/light +!!urxvt*color6: #3b484a +!!urxvt*color14: #444d4e +urxvt*color6: #4B5C5E +urxvt*color14: #556D70 + + +!! white dark/light +urxvt*color7: #504339 +urxvt*color15: #9a875f diff --git a/.colors/euphrasia b/.colors/euphrasia @@ -0,0 +1,97 @@ +!! euphrasia colours by bohoomil, 10.2012 + +!! fg / bg for .Xdefaults / .Xresources +! URxvt*background: #090C19 +! URxvt*foreground: #E6E6E6 +! URxvt*cursorColor: #1AAA13 + +urxvt*foreground: #D0CECB +urxvt*background: #090C19 + +! black +urxvt*color0: #222946 +! dark grey +urxvt*color8: #8C8B89 + +! red +urxvt*color1: #BE1919 +! bright red +urxvt*color9: #DC2F32 + +! green +urxvt*color2: #1AAA13 +! bright green +urxvt*color10: #5DCE33 + +! yellow +urxvt*color3: #FFAA3E +! bright yellow +urxvt*color11: #FADD2D + +! blue +urxvt*color4: #3A57D7 +! bright blue +urxvt*color12: #507CFF + +! magenta +urxvt*color5: #BE007F +! bright magenta +urxvt*color13: #E671D3 + +! cyan +urxvt*color6: #258F8F +! bright cyan +urxvt*color14: #4DC5DC + +! light grey +urxvt*color7: #AEAEAE +! white +urxvt*color15: #DBDDE4 + +!! Colours for the Linux console / tty +!! for use with conpalette +!! (https://github.com/hinrik/conpalette): +! +!'euphrasia' => [ +! '000000', #black +! 'BE1919', #darkred +! '1AAA13', #darkgreen +! 'FFAA3E', #brown +! '3A57D7', #darkblue +! 'BE007F', #darkmagenta +! '258F8F', #darkcyan +! 'AEAEAE', #lightgrey +! +! '8C8B89', #darkgrey +! 'DC2F32', #red +! '5DCE33', #green +! 'FADD2D', #yellow +! '507CFF', #blue +! 'E671D3', #magenta +! '4DC5DC', #cyan +! 'DBDDE4', #white +! ], +! +!! ... or in .profile/.bash_profile/.bashrc, etc.: +! +!if [ "$TERM" = "linux" ]; then +! echo -en "\e]P0000000" #black +! echo -en "\e]P88C8B89" #darkgrey +! echo -en "\e]P1BE1919" #darkred +! echo -en "\e]P9DC2F32" #red +! echo -en "\e]P21AAA13" #darkgreen +! echo -en "\e]PA5DCE33" #green +! echo -en "\e]P3FFAA3E" #brown +! echo -en "\e]PBFADD2D" #yellow +! echo -en "\e]P43A57D7" #darkblue +! echo -en "\e]PC507CFF" #blue +! echo -en "\e]P5BE007F" #darkmagenta +! echo -en "\e]PDE671D3" #magenta +! echo -en "\e]P6258F8F" #darkcyan +! echo -en "\e]PE4DC5DC" #cyan +! echo -en "\e]P7AEAEAE" #lightgrey +! echo -en "\e]PFDBDDE4" #white +! clear # default input colours +!fi + +! vim:ft=xdefaults diff --git a/.colors/fallac b/.colors/fallac @@ -0,0 +1,36 @@ +urxvt*background: #30303a +urxvt*foreground: #d6d6d6 + +urxvt*colorIT: #777777 +urxvt*colorUL: #aaaaaa +urxvt*colorBD: #6fa5df + +urxvt*color0: #4a4a4a +urxvt*color8: #777777 + +!urxvt*color1: #c29198 +!urxvt*color9: #a0616a +urxvt*color1: #df6f6f +urxvt*color9: #eba8a8 + +!urxvt*color2: #abd8a5 +!urxvt*color10: #80a27b +urxvt*color2: #6fdfa4 +urxvt*color10: #a8ebc8 + +!urxvt*color3: #acacac +!urxvt*color11: #858585 +urxvt*color3: #dfdc6f +urxvt*color11: #ebeaa8 + +urxvt*color4: #6fa5df +urxvt*color12: #a8c9eb + +urxvt*color5: #846fdf +urxvt*color13: #b5a8eb + +urxvt*color6: #6fcadf +urxvt*color14: #a6e6eb + +urxvt*color7: #aaaaaa +urxvt*color15: #c3c3c3 diff --git a/.colors/form b/.colors/form @@ -0,0 +1,20 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! + +urxvt*color0: +urxvt*color8: +urxvt*color1: +urxvt*color9: +urxvt*color2: +urxvt*color10: +urxvt*color3: +urxvt*color11: +urxvt*color4: +urxvt*color12: +urxvt*color5: +urxvt*color13: +urxvt*color6: +urxvt*color14: +urxvt*color7: +urxvt*color15: + diff --git a/.colors/genie b/.colors/genie @@ -0,0 +1,27 @@ +URxvt.background: #000000 +URxvt.foreground: #f0f0f0 + +!Black / Light black +urxvt*color0: #222222 +urxvt*color8: #ababab +!Red / Light red +urxvt*color1: #91091e +urxvt*color9: #914954 +!Green / Light green +urxvt*color2: #5d7003 +urxvt*color10: #748040 +!Yellow / Light yellow +urxvt*color3: #d37006 +urxvt*color11: #d38f46 +!Blue / Light blue +urxvt*color4: #0b5579 +urxvt*color12: #526d79 +!Purple / Light purple +urxvt*color5: #360574 +urxvt*color13: #635674 +!Cyan / Light cyan +urxvt*color6: #0b7d44 +urxvt*color14: #587d6a +!White / Light white...? +urxvt*color7: #dedede +urxvt*color15: #f2f2f2 diff --git a/.colors/genie5 b/.colors/genie5 @@ -0,0 +1,30 @@ + +URxvt.background: #171717 +URxvt.foreground: #676767 +URxvt.cursorColor: #676767 +URxvt.title: "urxvt" +!light/dark +!black +*color0: #3a3a3a +*color8: #676767 +!red (red) +*color1: #536473 +*color9: #536473 +!green (green) +*color2: #94a168 +*color10: #94a168 +!yellow (orange) +*color3: #ababab +*color11: #ababab +!blue (blue +*color4: #536473 +*color12: #536473 +!magenta (magenta) +*color5: #94a168 +*color13: #94a168 +!cyan (cyan) +*color6: #676767 +*color14: #676767 +!white (white) +*color7: #ababab +*color15: #ababab diff --git a/.colors/gohucolor b/.colors/gohucolor @@ -0,0 +1,37 @@ +! Colors. +urxvt*background: #0D131A +urxvt*foreground: #8A9499 +!urxvt*background: #000000 +!urxvt*foreground: #FFFFFF + +! black +urxvt*color0: #0D131A +urxvt*color8: #44484C + +! red +urxvt*color1: #802635 +urxvt*color9: #B3354C + +! green +urxvt*color2: #608040 +urxvt*color10: #4BA65A + +! yellow +urxvt*color3: #877C43 +urxvt*color11: #BF9F5F + +! blue +urxvt*color4: #1C678C +urxvt*color12: #3995BF + +! magenta +urxvt*color5: #684D80 +urxvt*color13: #A64286 + +! cyan +urxvt*color6: #337373 +urxvt*color14: #6AAAB3 + +! white +urxvt*color7: #738080 +urxvt*color15: #B3B3B3 diff --git a/.colors/gutter b/.colors/gutter @@ -0,0 +1,26 @@ +URxvt.background: #1a1b1c +URxvt.foreground: #808080 +!Black +URxvt.color0: #484848 +URxvt.color8: #666767 +!Red +URxvt.color1: #a1756c +URxvt.color9: #d1aca3 +!Green +URxvt.color2: #719171 +URxvt.color10: #aad1ac +!Yellow +URxvt.color3: #9c9869 +URxvt.color11: #c3c49f +!Blue +URxvt.color4: #7186a6 +URxvt.color12: #a6c0de +!Magenta +URxvt.color5: #876794 +URxvt.color13: #bea2cf +!Cyan +URxvt.color6: #628c85 +URxvt.color14: #a1d4c2 +!White +URxvt.color7: #8f8f8f +URxvt.color15: #cacbcb diff --git a/.colors/jellybean b/.colors/jellybean @@ -0,0 +1,31 @@ +! terminal colors ------------------------------ + +! Jellybeans Terminal Colours + +! vim: ft=xdefaults +urxvt*background: #151515 +urxvt*foreground: #888888 +! black +urxvt*color0: #1C1C1C +urxvt*color8: #404040 +! red +urxvt*color1: #B85335 +urxvt*color9: #CF6A4C +! green +urxvt*color2: #799D6A +urxvt*color10: #99AD6A +! yellow +urxvt*color3: #FFB964 +urxvt*color11: #FAD07A +! blue +urxvt*color4: #667899 +urxvt*color12: #8197BF +! magenta +urxvt*color5: #8787AF +urxvt*color13: #C6B6EE +! cyan +urxvt*color6: #668799 +urxvt*color14: #8FBFDC +! white +urxvt*color7: #888888 +urxvt*color15: #E8E8D3 diff --git a/.colors/nebula b/.colors/nebula @@ -0,0 +1,28 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: + +URxvt*background: #080808 +URxvt*foreground: #aaaaaa + +URxvt*color0: #343639 +URxvt*color8: #424242 + +URxvt*color1: #CE5666 +URxvt*color9: #d75f5f + +URxvt*color2: #80A673 +URxvt*color10: #97D599 + +URxvt*color11: #ffaf5f +URxvt*color3: #e0bc93 + +URxvt*color4: #5A667F +URxvt*color12: #778BAF + +URxvt*color5: #94738C +URxvt*color13: #D8ADCE + +URxvt*color6:    #5f8787 +URxvt*color14:   #69b2b2 + +URxvt*color7:    #909090 +URxvt*color15:   #d7d7d7 diff --git a/.colors/neeee b/.colors/neeee @@ -0,0 +1,28 @@ +!!Colors +!default +URxvt*foreground: #cbc6cc +URxvt*background: #19171a +!black +URxvt*color0: #242224 +URxvt*color8: #4c4b4d +!white +URxvt*color7: #b8b2b9 +URxvt*color15: #ece8ed +!red +URxvt*color1: #995876 +URxvt*color9: #f895c4 +!green +URxvt*color2: #748c71 +URxvt*color10: #b3d6ae +!yellow +URxvt*color3: #9c8f6a +URxvt*color11: #f4e1ab +!blue +URxvt*color4: #7086a8 +URxvt*color12: #bcd8ff +!magenta +URxvt*color5: #97729c +URxvt*color13: #dfbaf5 +!cyan +URxvt*color6: #698c8c +URxvt*color14: #aae3db diff --git a/.colors/ok100 b/.colors/ok100 @@ -0,0 +1,29 @@ +urxvt*background: #140c0b +urxvt*foreground: #877a70 +urxvt*colorIT: #58756c +urxvt*colorUL: #cdcdcd +urxvt*colorBD: #6b753d +! black +urxvt*color0: #403f3e +urxvt*color8: #666362 +! red +urxvt*color1: #91444d +urxvt*color9: #c78186 +! green +urxvt*color2: #6b853d +urxvt*color10: #abbd80 +! yellow +urxvt*color3: #916949 +urxvt*color11: #cca88b +! blue +urxvt*color4: #557282 +urxvt*color12: #8eabbd +! magenta +urxvt*color5: #78516d +urxvt*color13: #a8879f +! cyan +urxvt*color6: #58756c +urxvt*color14: #8ca8a2 +! white +urxvt*color7: #94928f +urxvt*color15: #cdcdcd diff --git a/.colors/pantsu b/.colors/pantsu @@ -0,0 +1,18 @@ +urxvt*foreground: #a5a5a5 +urxvt*background: #161616 +urxvt*color0: #343434 +urxvt*color1: #802828 +urxvt*color2: #909737 +urxvt*color3: #b27d12 +urxvt*color4: #1e5673 +urxvt*color5: #642337 +urxvt*color6: #196271 +urxvt*color7: #b3b3b3 +urxvt*color8: #424242 +urxvt*color9: #8a3232 +urxvt*color10: #9ca554 +urxvt*color11: #ddb62b +urxvt*color12: #1e6a9a +urxvt*color13: #7d2d41 +urxvt*color14: #197885 +urxvt*color15: #b3b3b3 diff --git a/.colors/papey b/.colors/papey @@ -0,0 +1,30 @@ +! --- Xft config --- + +urxvt*foreground: #e5e5e5 +urxvt*background: #1d1d1d + +!Black +urxvt*color0: #121212 +urxvt*color8: #5f5f5F +!Red +urxvt*color1: #a35b66 +urxvt*color9: #ab6b74 +!Green +urxvt*color2: #99ab6f +urxvt*color10: #acb792 +!Yellow +urxvt*color3: #ca9733 +urxvt*color11: #ccaa69 +!Blue +urxvt*color4: #495d6e +urxvt*color12: #687987 +!Magenta +urxvt*color5: #825969 +urxvt*color13: #977381 +!Cyan +urxvt*color6: #839191 +urxvt*color14: #98A4A4 +!White +urxvt*color7: #E0E0E0 +urxvt*color15: #e5e5e5 + diff --git a/.colors/plain b/.colors/plain @@ -0,0 +1,26 @@ +urxvt*background: #1C1B18 +urxvt*foreground: #CCC7AE + +urxvt*color0: #1C1B18 +urxvt*color8: #35342D + +urxvt*color1: #736D61 +urxvt*color9: #8C8577 + +urxvt*color2: #898C77 +urxvt*color10: #A2A68D + +urxvt*color3: #A6A68D +urxvt*color11: #BFBFA3 + +urxvt*color4: #35342D +urxvt*color12: #4F4D43 + +urxvt*color5: #A69A8D +urxvt*color13: #BFB1A2 + +urxvt*color6: #737061 +urxvt*color14: #8C8977 + +urxvt*color7: #B3AE98 +urxvt*color15: #CCC7AE diff --git a/.colors/plastique b/.colors/plastique @@ -0,0 +1,26 @@ +urxvt*background: #1C1B18 +urxvt*foreground: #B3AE98 + +urxvt*color0: #1C1B18 +urxvt*color8: #36342E + +urxvt*color1: #8C4F30 +urxvt*color9: #A65D38 + +urxvt*color2: #8C815E +urxvt*color10: #A6986F + +urxvt*color3: #8C6F46 +urxvt*color11: #A68353 + +urxvt*color4: #4F4235 +urxvt*color12: #695746 + +urxvt*color5: #8C3047 +urxvt*color13: #A63854 + +urxvt*color6: #8C6D5E +urxvt*color14: #A6816F + +urxvt*color7: #999582 +urxvt*color15: #B3AE98 diff --git a/.colors/poppy b/.colors/poppy @@ -0,0 +1,29 @@ +urxvt*background: #f0f0f0 +urxvt*foreground: #181512 +urxvt*cursorColor: #181512 + +!black +urxvt*color0: #373737 +urxvt*color8: #474747 +!red (red) +urxvt*color1: #CC4141 +urxvt*color9: #BA2929 +!green (green) +urxvt*color2: #43803D +urxvt*color10: #2F632A +!yellow (blue) +urxvt*color3: #7882BF +urxvt*color11: #596196 +!blue (brown) +urxvt*color4: #DBAB3B +urxvt*color12: #C79520 +!magenta (magenta) +urxvt*color5: #BF849C +urxvt*color13: #B06A86 +!cyan (light blue) +urxvt*color6: #6AA9B0 +urxvt*color14: #4D8B91 +!white (pink) +urxvt*color7: #E39036 +urxvt*color15: #C97820 + diff --git a/.colors/ratpoison b/.colors/ratpoison @@ -0,0 +1,20 @@ +*background:#232323 +*foreground:#e8e9ca + +*color0: #232323 +*color1: #8b3e2f +*color2: #526f33 +*color3: #8B814C +*color4: #4A708B +*color5: #7A378B +*color6: #528B8B +*color7: #999999 + +*color8: #4c4c4c +*color9: #d75f00 +*color10: #8ea433 +*color11: #EEE685 +*color12: #9AC0CD +*color13: #9F79EE +*color14: #79CDCD +*color15: #E8E9CA diff --git a/.colors/redhead b/.colors/redhead @@ -0,0 +1,18 @@ +urxvt*background: #2b2c2c +urxvt*foreground: #ffffff +urxvt*color0: #2f2f2f +urxvt*color1: #95473b +urxvt*color2: #5c7b64 +urxvt*color3: #937543 +urxvt*color4: #5e5f74 +urxvt*color5: #893c30 +urxvt*color6: #656682 +urxvt*color7: #eee8d5 +urxvt*color8: #474040 +urxvt*color9: #a9584c +urxvt*color10: #6b8873 +urxvt*color11: #b69760 +urxvt*color12: #898aa3 +urxvt*color13: #9a4d42 +urxvt*color14: #93a1a1 +urxvt*color15: #fdf6e3 diff --git a/.colors/sinatra b/.colors/sinatra @@ -0,0 +1,26 @@ +urxvt*foreground: #B2B296 +urxvt*background: #22231F +!black +urxvt*color0: #040404 +urxvt*color8: #505050 +!red +urxvt*color1: #8F5B4B +urxvt*color9: #8C513E +!green +urxvt*color2: #94B75C +urxvt*color10: #7D9556 +!yellow +urxvt*color3: #D9DB9F +urxvt*color11: #C4C687 +!blue +urxvt*color6: #829586 +urxvt*color14: #757D77 +!magenta +urxvt*color5: #857166 +urxvt*color13: #625050 +!cyan +urxvt*color4: #A29F9F +urxvt*color12: #BDBDBD +!white +urxvt*color7: #A5A38E +urxvt*color15: #A8A292 diff --git a/.colors/solarized b/.colors/solarized @@ -0,0 +1,77 @@ +!! drop in Solarized colorscheme for Xresources/Xdefaults + +!!SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB +!!--------- ------- ---- ------- ----------- ---------- ----------- ----------- +!!base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +!!base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +!!base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46 +!!base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51 +!!base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +!!base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +!!base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93 +!!base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +!!yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +!!orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +!!red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +!!magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +!!violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +!!blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +!!cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +!!green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 + +#define S_base03 #002b36 +#define S_base02 #073642 +#define S_base01 #586e75 +#define S_base00 #657b83 +#define S_base0 #839496 +#define S_base1 #93a1a1 +#define S_base2 #eee8d5 +#define S_base3 #fdf6e3 +#define S_yellow #b58900 +#define S_orange #cb4b16 +#define S_red #dc322f +#define S_magenta #d33682 +#define S_violet #6c71c4 +#define S_blue #268bd2 +#define S_cyan #2aa198 +#define S_green #859900 + +*background: S_base03 +*foreground: S_base00 +*fading: 40 +*fadeColor: S_base03 +*cursorColor: S_base1 +*pointerColorBackground:S_base01 +*pointerColorForeground:S_base1 + +!! black dark/light +*color0: S_base02 +*color8: S_base03 + +!! red dark/light +*color1: S_red +*color9: S_orange + +!! green dark/light +*color2: S_green +*color10: S_base01 + +!! yellow dark/light +*color3: S_yellow +*color11: S_base00 + +!! blue dark/light +*color4: S_blue +*color12: S_base0 + +!! magenta dark/light +*color5: S_magenta +*color13: S_violet + +!! cyan dark/light +*color6: S_cyan +*color14: S_base1 + +!! white dark/light +*color7: S_base2 +*color15: S_base3 diff --git a/.colors/solarized_black b/.colors/solarized_black @@ -0,0 +1,77 @@ +!! drop in Solarized colorscheme for Xresources/Xdefaults + +!!SOLARIZED HEX 16/8 TERMCOL XTERM/HEX L*A*B RGB HSB +!!--------- ------- ---- ------- ----------- ---------- ----------- ----------- +!!base03 #002b36 8/4 brblack 234 #1c1c1c 15 -12 -12 0 43 54 193 100 21 +!!base02 #073642 0/4 black 235 #262626 20 -12 -12 7 54 66 192 90 26 +!!base01 #586e75 10/7 brgreen 240 #585858 45 -07 -07 88 110 117 194 25 46 +!!base00 #657b83 11/7 bryellow 241 #626262 50 -07 -07 101 123 131 195 23 51 +!!base0 #839496 12/6 brblue 244 #808080 60 -06 -03 131 148 150 186 13 59 +!!base1 #93a1a1 14/4 brcyan 245 #8a8a8a 65 -05 -02 147 161 161 180 9 63 +!!base2 #eee8d5 7/7 white 254 #e4e4e4 92 -00 10 238 232 213 44 11 93 +!!base3 #fdf6e3 15/7 brwhite 230 #ffffd7 97 00 10 253 246 227 44 10 99 +!!yellow #b58900 3/3 yellow 136 #af8700 60 10 65 181 137 0 45 100 71 +!!orange #cb4b16 9/3 brred 166 #d75f00 50 50 55 203 75 22 18 89 80 +!!red #dc322f 1/1 red 160 #d70000 50 65 45 220 50 47 1 79 86 +!!magenta #d33682 5/5 magenta 125 #af005f 50 65 -05 211 54 130 331 74 83 +!!violet #6c71c4 13/5 brmagenta 61 #5f5faf 50 15 -45 108 113 196 237 45 77 +!!blue #268bd2 4/4 blue 33 #0087ff 55 -10 -45 38 139 210 205 82 82 +!!cyan #2aa198 6/6 cyan 37 #00afaf 60 -35 -05 42 161 152 175 74 63 +!!green #859900 2/2 green 64 #5f8700 60 -20 65 133 153 0 68 100 60 + +#define S_base03 #232323 +#define S_base02 #2d2d2d +#define S_base01 #6a6a6a +#define S_base00 #657b83 +#define S_base0 #839496 +#define S_base1 #93a1a1 +#define S_base2 #eee8d5 +#define S_base3 #fdf6e3 +#define S_yellow #b58900 +#define S_orange #cb4b16 +#define S_red #dc322f +#define S_magenta #d33682 +#define S_violet #6c71c4 +#define S_blue #268bd2 +#define S_cyan #2aa198 +#define S_green #859900 + +*background: S_base03 +*foreground: S_base00 +*fading: 40 +*fadeColor: S_base03 +*cursorColor: S_base1 +*pointerColorBackground:S_base01 +*pointerColorForeground:S_base1 + +!! black dark/light +*color0: S_base02 +*color8: S_base03 + +!! red dark/light +*color1: S_red +*color9: S_orange + +!! green dark/light +*color2: S_green +*color10: S_base01 + +!! yellow dark/light +*color3: S_yellow +*color11: S_base00 + +!! blue dark/light +*color4: S_blue +*color12: S_base0 + +!! magenta dark/light +*color5: S_magenta +*color13: S_violet + +!! cyan dark/light +*color6: S_cyan +*color14: S_base1 + +!! white dark/light +*color7: S_base2 +*color15: S_base3 diff --git a/.colors/solarized_light b/.colors/solarized_light @@ -0,0 +1,57 @@ + +#define S_base03 #002b36 +#define S_base02 #073642 +#define S_base01 #586e75 +#define S_base00 #657b83 +#define S_base0 #839496 +#define S_base1 #93a1a1 +#define S_base2 #eee8d5 +#define S_base3 #fdf6e3 +#define S_yellow #b58900 +#define S_orange #cb4b16 +#define S_red #dc322f +#define S_magenta #d33682 +#define S_violet #6c71c4 +#define S_blue #268bd2 +#define S_cyan #2aa198 +#define S_green #859900 + +urxvt*background: S_base3 +urxvt*foreground: S_base00 +urxvt*fading: 40 +urxvt*fadeColor: S_base3 +urxvt*cursorColor: S_base01 +urxvt*pointerColorBackground:S_base1 +urxvt*pointerColorForeground:S_base01 + +!! black dark/light +urxvt*color0: S_base02 +urxvt*color8: S_base03 + +!! red dark/light +urxvt*color1: S_red +urxvt*color9: S_orange + +!! green dark/light +urxvt*color2: S_green +urxvt*color10: S_base01 + +!! yellow dark/light +urxvt*color3: S_yellow +urxvt*color11: S_base00 + +!! blue dark/light +urxvt*color4: S_blue +urxvt*color12: S_base0 + +!! magenta dark/light +urxvt*color5: S_magenta +urxvt*color13: S_violet + +!! cyan dark/light +urxvt*color6: S_cyan +urxvt*color14: S_base1 + +!! white dark/light +urxvt*color7: S_base2 +urxvt*color15: S_base3 diff --git a/.colors/space b/.colors/space @@ -0,0 +1,37 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +! ######################################### +! SPACE COLORS +! ######################################### + +urxvt*cursorColor: #d0d0d0 +urxvt*colorIT: #c37561 +urxvt*colorUL: #a0a57e + +!Background / Foreground +urxvt*background: #202020 +urxvt*foreground: #ddccbb +!Black / Light black +urxvt*color0: #222222 +urxvt*color8: #666666 +!Red / Light red +urxvt*color1: #cc4747 +urxvt*color9: #bf5858 +!Green / Light green +urxvt*color2: #a0cf5d +urxvt*color10: #b8d68c +!Yellow / Light yellow +urxvt*color3: #e0a524 +urxvt*color11: #edB85c +!Blue / Light blue +urxvt*color4: #4194d9 +urxvt*color12: #60aae6 +!Purple / Light purple +urxvt*color5: #cc2f6e +urxvt*color13: #db588c +!Cyan / Light cyan +urxvt*color6: #6d878d +urxvt*color14: #42717b +!White / Light white...? +urxvt*color7: #dedede +urxvt*color15: #f2f2f2 diff --git a/.colors/thaw b/.colors/thaw @@ -0,0 +1,35 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! + +! ######################################### +! THAW COLORS +! ######################################### +urxvt*background: #170F0D +urxvt*foreground: #746C48 +urxvt*cursorColor: #6666CC +urxvt*colorBD: #C8B984 + + +urxvt*color0: #392925 +urxvt*color8: #544B2E + +urxvt*color1: #98724C +urxvt*color9: #AF652F + +urxvt*color2: #908F32 +urxvt*color10: #C3C13D + +urxvt*color3: #AA964C +urxvt*color11: #C8B55B + +urxvt*color4: #7B854E +urxvt*color12: #70A16C + +urxvt*color5: #6B5644 +urxvt*color13: #98724C + +urxvt*color6: #5C5142 +urxvt*color14: #778725 + +urxvt*color7: #C8B55B +urxvt*color15: #E4DC8C diff --git a/.colors/venam b/.colors/venam @@ -0,0 +1,35 @@ +! ! --- special colors --- +urxvt*background: #222222 +urxvt*foreground: #e6e3c6 +! black +urxvt*color0: #2E3436 +urxvt*color8: #4a575a +! +! red +urxvt*color1: #CC0000 +urxvt*color9: #EF2929 +! +! green +urxvt*color2: #4E9A06 +urxvt*color10: #8AE234 +! +! yellow +urxvt*color3: #C4A000 +urxvt*color11: #FCE94F +! +! blue +urxvt*color4: #3465A4 +urxvt*color12: #729FCF +! +! magenta +urxvt*color5: #75507B +urxvt*color13: #AD7FA8 +! +! cyan +urxvt*color6: #06989A +urxvt*color14: #34E2E2 +! +! white +urxvt*color7: #e6e3c6 +urxvt*color15: #EEEEEC +! diff --git a/.colors/vintage b/.colors/vintage @@ -0,0 +1,31 @@ +!-- colors --! +urxvt*background: #140c0b +!urxvt*foreground: #cdcdcd +!urxvt*foreground: #FFFFFF +!urxvt*background: #000000 +! black +!*color0: #403f3e +urxvt*color0: #242323 +urxvt*color8: #666362 +! red +urxvt*color1: #91444d +urxvt*color9: #c78186 +! green +urxvt*color2: #6b853d +urxvt*color10: #abbd80 +! yellow +urxvt*color3: #916949 +urxvt*color11: #cca88b +! blue +urxvt*color4: #557282 +urxvt*color12: #8eabbd +! magenta +urxvt*color5: #78516d +urxvt*color13: #a8879f +! cyan +urxvt*color6: #58756c +urxvt*color14: #8ca8a2 +! white +urxvt*color7: #94928f +urxvt*color15: #cdcdcd + diff --git a/.colors/vintage2 b/.colors/vintage2 @@ -0,0 +1,31 @@ +URxvt*background: #191716 +URxvt*foreground: #7D7875 +URxvt*cursorColor: #6B6765 +URxvt*colorBD: #BFBAB8 +URxvt*colorUL: #54838F +URxvt*underlineColor: #7A4D62 + +!BLK +URxvt*color0: #383332 +URxvt*color8: #4B483F +!RED +URxvt*color1: #745E54 +URxvt*color9: #B0998E +!GRN +URxvt*color2: #54745E +URxvt*color10: #8EB099 +!YLW +URxvt*color3: #746E54 +URxvt*color11: #B0AA8E +!BLE +URxvt*color4: #5E5474 +URxvt*color12: #998EB0 +!MAG +URxvt*color5: #6E5474 +URxvt*color13: #AA8EB0 +!CYN +URxvt*color6: #54746E +URxvt*color14: #8EB0AA +!WHT +URxvt*color7: #918B88 +URxvt*color15: #C7C1BD diff --git a/.colors/waterfront b/.colors/waterfront @@ -0,0 +1,19 @@ +*foreground: #88877C +*background: #1D1E1D + +*color0: #252525 +*color8: #383838 +*color1: #b4543f +*color9: #d38773 +*color2: #7d8941 +*color10: #b0a974 +*color3: #b2893f +*color11: #d2a973 +*color4: #7e5276 +*color12: #b18695 +*color5: #b45274 +*color13: #d38694 +*color6: #7d8876 +*color14: #b0a795 +*color7: #A89B8A +*color15: #BAA48A diff --git a/.colors/wooly b/.colors/wooly @@ -0,0 +1,45 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: + +urxvt*background: #181512 +urxvt*foreground: #D6C3B6 +!!urxvt*foreground: #ffdcc4 +urxvt*cursorColor: #93a1a1 +urxvt*colorIT: #8c644c +urxvt*colorUL: #646a6d +urxvt*colorBD: #746C48 + +!! black dark/light +urxvt*color0: #332d29 +urxvt*color8: #817267 + +!! red dark/light +urxvt*color1: #953B00 +urxvt*color9: #DC5E0A + +!! green dark/light +urxvt*color2: #705A29 +urxvt*color10: #88832F + +!! yellow dark/light +urxvt*color3: #FC9713 +urxvt*color11: #F6AE62 + +!! blue dark/light +urxvt*color4: #646a6d +urxvt*color12: #777E82 + +!! magenta dark/light +!!urxvt*color5: #6d6871 +!!urxvt*color13: #756f7b +urxvt*color5: #766782 +urxvt*color13: #897796 + +!! cyan dark/light +!!urxvt*color6: #3b484a +!!urxvt*color14: #444d4e +urxvt*color6: #4B5C5E +urxvt*color14: #556D70 + +!! white dark/light +urxvt*color7: #504339 +urxvt*color15: #9a875f diff --git a/.colors/xmas b/.colors/xmas @@ -0,0 +1,42 @@ +! vim:nu:ai:si:et:ts=4:sw=4:ft=xdefaults: +! +!!## CHRISTMAS COLORS ## +urxvt*cursorColor: #7F1442 +urxvt*background: #FFFFFF +urxvt*foreground: #000000 + +urxvt*colorUL: #4E4FFF + +!# BLACK +urxvt*color0: #FFFFFF +urxvt*color8: #AFAFAF + +!# RED +urxvt*color1: #A72D61 +urxvt*color9: #7F1442 + +!# GREEN +urxvt*color2: #368883 +urxvt*color10: #2D7C73 +!2C8C26 + +!#YELLOW +urxvt*color3: #595cd4 +urxvt*color11: #7007FF + +!# BLUE +urxvt*color4: #999999 +urxvt*color12: #7C7C7C + +!# MAGENTA +urxvt*color5: #49386E +urxvt*color13: #774AD8 + +!# CYAN +urxvt*color6: #6B7B81 +urxvt*color14: #486F7D + +!# WHITE +urxvt*color7: #282828 +urxvt*color15: #0C0C0C + diff --git a/.compton.conf b/.compton.conf @@ -0,0 +1,217 @@ +################################ +# +# Backend +# +################################# + +# Backend to use: "xrender" or "glx". +# GLX backend is typically much faster but depends on a sane driver. +backend = "xrender"; +#backend = "glx"; + +################################# +# +# GLX backend +# +################################# + +glx-no-stencil = true; + +# GLX backend: Copy unmodified regions from front buffer instead of redrawing them all. +# My tests with nvidia-drivers show a 10% decrease in performance when the whole screen is modified, +# but a 20% increase when only 1/4 is. +# My tests on nouveau show terrible slowdown. +# Useful with --glx-swap-method, as well. +glx-copy-from-front = false; + +# GLX backend: Use MESA_copy_sub_buffer to do partial screen update. +# My tests on nouveau shows a 200% performance boost when only 1/4 of the screen is updated. +# May break VSync and is not available on some drivers. +# Overrides --glx-copy-from-front. +# glx-use-copysubbuffermesa = true; + +# GLX backend: Avoid rebinding pixmap on window damage. +# Probably could improve performance on rapid window content changes, but is known to break things on some drivers (LLVMpipe). +# Recommended if it works. +# glx-no-rebind-pixmap = true; + + +# GLX backend: GLX buffer swap method we assume. +# Could be undefined (0), copy (1), exchange (2), 3-6, or buffer-age (-1). +# undefined is the slowest and the safest, and the default value. +# copy is fastest, but may fail on some drivers, +# 2-6 are gradually slower but safer (6 is still faster than 0). +# Usually, double buffer means 2, triple buffer means 3. +# buffer-age means auto-detect using GLX_EXT_buffer_age, supported by some drivers. +# Useless with --glx-use-copysubbuffermesa. +# Partially breaks --resize-damage. +# Defaults to undefined. +glx-swap-method = "undefined"; + +################################# +# +# Shadows +# +################################# + +# Enabled client-side shadows on windows. +shadow = true; +# Don't draw shadows on DND windows. +no-dnd-shadow = true; +# Avoid drawing shadows on dock/panel windows. +no-dock-shadow = false; +# Zero the part of the shadow's mask behind the window. Fix some weirdness with ARGB windows. +clear-shadow = true; +# The blur radius for shadows. (default 12) +shadow-radius = 4; +# The left offset for shadows. (default -15) +shadow-offset-x = -2; +# The top offset for shadows. (default -15) +shadow-offset-y = -2; +# The translucency for shadows. (default .75) +shadow-opacity = 0.8; + +# Set if you want different colour shadows +# shadow-red = 0.0; +# shadow-green = 0.0; +# shadow-blue = 0.0; + +# The shadow exclude options are helpful if you have shadows enabled. Due to the way compton draws its shadows, certain applications will have visual glitches +# (most applications are fine, only apps that do weird things with xshapes or argb are affected). +# This list includes all the affected apps I found in my testing. The "! name~=''" part excludes shadows on any "Unknown" windows, this prevents a visual glitch with the XFWM alt tab switcher. +shadow-exclude = [ + "name = 'Notification'", + "name = 'dzen title'", + "name = 'Docky'" +]; +# Avoid drawing shadow on all shaped windows (see also: --detect-rounded-corners) +shadow-ignore-shaped = false; + +################################# +# +# Opacity +# +################################# + +menu-opacity = 1; +inactive-opacity = 1; +active-opacity = 1; +frame-opacity = 1; +inactive-opacity-override = false; +alpha-step = 0.06; + +# Dim inactive windows. (0.0 - 1.0) +# inactive-dim = 0.2; +# Do not let dimness adjust based on window opacity. +# inactive-dim-fixed = true; +# Blur background of transparent windows. Bad performance with X Render backend. GLX backend is preferred. +# blur-background = true; +# Blur background of opaque windows with transparent frames as well. +# blur-background-frame = true; +# Do not let blur radius adjust based on window opacity. +blur-background-fixed = false; +blur-background-exclude = [ +# "window_type = 'dock'", + "window_type = 'desktop'" +]; + +################################# +# +# Fading +# +################################# + +# Fade windows during opacity changes. +fading = false; +# The time between steps in a fade in milliseconds. (default 10). +fade-delta = 5; +# Opacity change between steps while fading in. (default 0.028). +fade-in-step = 0.03; +# Opacity change between steps while fading out. (default 0.03). +fade-out-step = 0.03; +# Fade windows in/out when opening/closing +# no-fading-openclose = true; + +# Specify a list of conditions of windows that should not be faded. +fade-exclude = [ ]; + +################################# +# +# Other +# +################################# + +# Try to detect WM windows and mark them as active. +mark-wmwin-focused = true; +# Mark all non-WM but override-redirect windows active (e.g. menus). +mark-ovredir-focused = true; +# Use EWMH _NET_WM_ACTIVE_WINDOW to determine which window is focused instead of using FocusIn/Out events. +# Usually more reliable but depends on a EWMH-compliant WM. +use-ewmh-active-win = true; +# Detect rounded corners and treat them as rectangular when --shadow-ignore-shaped is on. +detect-rounded-corners = true; + +# Detect _NET_WM_OPACITY on client windows, useful for window managers not passing _NET_WM_OPACITY of client windows to frame windows. +# This prevents opacity being ignored for some apps. +# For example without this enabled my xfce4-notifyd is 100% opacity no matter what. +detect-client-opacity = true; + +# Specify refresh rate of the screen. +# If not specified or 0, compton will try detecting this with X RandR extension. +refresh-rate = 0; + +# Set VSync method. VSync methods currently available: +# none: No VSync +# drm: VSync with DRM_IOCTL_WAIT_VBLANK. May only work on some drivers. +# opengl: Try to VSync with SGI_video_sync OpenGL extension. Only work on some drivers. +# opengl-oml: Try to VSync with OML_sync_control OpenGL extension. Only work on some drivers. +# opengl-swc: Try to VSync with SGI_swap_control OpenGL extension. Only work on some drivers. Works only with GLX backend. Known to be most effective on many drivers. Does not actually control paint timing, only buffer swap is affected, so it doesn’t have the effect of --sw-opti unlike other methods. Experimental. +# opengl-mswc: Try to VSync with MESA_swap_control OpenGL extension. Basically the same as opengl-swc above, except the extension we use. +# (Note some VSync methods may not be enabled at compile time.) +vsync = "none"; + +# Enable DBE painting mode, intended to use with VSync to (hopefully) eliminate tearing. +# Reported to have no effect, though. +dbe = false; +# Painting on X Composite overlay window. Recommended. +paint-on-overlay = true; + +# Limit compton to repaint at most once every 1 / refresh_rate second to boost performance. +# This should not be used with --vsync drm/opengl/opengl-oml as they essentially does --sw-opti's job already, +# unless you wish to specify a lower refresh rate than the actual value. +sw-opti = false; + +# Unredirect all windows if a full-screen opaque window is detected, to maximize performance for full-screen windows, like games. +# Known to cause flickering when redirecting/unredirecting windows. +# paint-on-overlay may make the flickering less obvious. +unredir-if-possible = true; + +# Specify a list of conditions of windows that should always be considered focused. +focus-exclude = [ ]; + +# Use WM_TRANSIENT_FOR to group windows, and consider windows in the same group focused at the same time. +detect-transient = true; +# Use WM_CLIENT_LEADER to group windows, and consider windows in the same group focused at the same time. +# WM_TRANSIENT_FOR has higher priority if --detect-transient is enabled, too. +detect-client-leader = true; + +################################# +# +# Window type settings +# +################################# + +wintypes: +{ + tooltip = + { + # fade: Fade the particular type of windows. + fade = true; + # shadow: Give those windows shadow + shadow = false; + # opacity: Default opacity for the type of windows. + opacity = 0.85; + # focus: Whether to always consider windows of this type focused. + focus = true; + }; +}; diff --git a/.config/awesome/rc.lua b/.config/awesome/rc.lua @@ -0,0 +1,418 @@ +-- Standard awesome library +require("awful") +require("awful.autofocus") +require("awful.rules") +-- Theme handling library +require("beautiful") +-- Notification library +require("naughty") + +require("vicious") + +-- Load Debian menu entries +--require("debian.menu") + +-- {{{ Error handling +-- Check if awesome encountered an error during startup and fell back to +-- another config (This code will only ever execute for the fallback config) +if awesome.startup_errors then + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, there were errors during startup!", + text = awesome.startup_errors }) +end + +-- Handle runtime errors after startup +do + local in_error = false + awesome.add_signal("debug::error", function (err) + -- Make sure we don't go into an endless error loop + if in_error then return end + in_error = true + + naughty.notify({ preset = naughty.config.presets.critical, + title = "Oops, an error happened!", + text = err }) + in_error = false + end) +end +-- }}} + +-- {{{ Variable definitions +-- Themes define colours, icons, and wallpapers +--beautiful.init("/usr/share/awesome/themes/default/theme.lua") +beautiful.init("/home/adc/.config/awesome/themes/default/theme.lua") + +-- This is used later as the default terminal and editor to run. +--terminal = "x-terminal-emulator" +terminal = "urxvt -e tmux" +editor = os.getenv("EDITOR") or "editor" +editor_cmd = terminal .. " -e " .. editor + +-- Default modkey. +-- Usually, Mod4 is the key with a logo between Control and Alt. +-- If you do not like this or do not have such a key, +-- I suggest you to remap Mod4 to another key using xmodmap or other tools. +-- However, you can use another modifier like Mod1, but it may interact with others. +modkey = "Mod4" + +-- Table of layouts to cover with awful.layout.inc, order matters. +layouts = +{ + awful.layout.suit.floating, + awful.layout.suit.tile, + awful.layout.suit.tile.left, + awful.layout.suit.tile.bottom, + awful.layout.suit.tile.top, + awful.layout.suit.fair, + awful.layout.suit.fair.horizontal, + awful.layout.suit.spiral, + awful.layout.suit.spiral.dwindle, + awful.layout.suit.max, + awful.layout.suit.max.fullscreen, + awful.layout.suit.magnifier +} +-- }}} + +-- {{{ Tags +-- Define a tag table which hold all screen tags. +tags = {} +for s = 1, screen.count() do + -- Each screen has its own tag table. + tags[s] = awful.tag({ 1, 2, 3, 4, 5, 6, 7, 8, 9 }, s, layouts[1]) +end +-- }}} + +-- {{{ Menu +-- Create a laucher widget and a main menu +myawesomemenu = { + { "manual", terminal .. " -e man awesome" }, + { "edit config", editor_cmd .. " " .. awesome.conffile }, + { "restart", awesome.restart }, + { "quit", awesome.quit } +} + +mymainmenu = awful.menu({ items = { { "awesome", myawesomemenu, beautiful.awesome_icon }, + { "Debian", debian.menu.Debian_menu.Debian }, + { "open terminal", terminal }, + { "firefox", "firefox"} + } + }) + +mylauncher = awful.widget.launcher({ image = image(beautiful.awesome_icon), + menu = mymainmenu }) +-- }}} + +-- {{{ Vicious widgets + +-- Memory widget +memwidget = widget({ type = "textbox" }) +vicious.register(memwidget, vicious.widgets.mem, " $2MB/$3MB |", 13) + +-- CPU usage widget +cpuwidget = widget({ type = "textbox" }) +vicious.register(cpuwidget, vicious.widgets.cpu, " CPU: $1% |") + +-- Wifi state +wifiwidget = widget({ type = "textbox" }) +vicious.register(wifiwidget, vicious.widgets.wifi, " ${ssid}: ${link}% |", 31, "wlan0") + +-- Alsa widget +-- vol should be (math.log(vol/100)+1)*100 +sndwidget = widget({ type = "textbox" }) +vicious.register(sndwidget, vicious.widgets.volume, " Vol: $1% $2 |", 2, "Master") +sndwidget:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.util.spawn("amixer -q set Master toggle", false) end), + awful.button({ }, 3, function () awful.util.spawn("urxvt -e alsamixer", true) end), + awful.button({ }, 4, function () awful.util.spawn("amixer -q set Master 1dB+", false) end), + awful.button({ }, 5, function () awful.util.spawn("amixer -q set Master 1dB-", false) end) + )) +-- }}} + +-- {{{ Wibox +-- Create a textclock widget +--mytextclock = awful.widget.textclock({ align = "right" }) +mytextclock = awful.widget.textclock({ align = "right" }, " %a %b %d, %H:%M:%S ", 1) + +-- Create a systray +mysystray = widget({ type = "systray" }) + +-- Create a wibox for each screen and add it +mywibox = {} +mypromptbox = {} +mylayoutbox = {} +mytaglist = {} +mytaglist.buttons = awful.util.table.join( + awful.button({ }, 1, awful.tag.viewonly), + awful.button({ modkey }, 1, awful.client.movetotag), + awful.button({ }, 3, awful.tag.viewtoggle), + awful.button({ modkey }, 3, awful.client.toggletag), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) + ) +mytasklist = {} +mytasklist.buttons = awful.util.table.join( + awful.button({ }, 1, function (c) + if c == client.focus then + c.minimized = true + else + if not c:isvisible() then + awful.tag.viewonly(c:tags()[1]) + end + -- This will also un-minimize + -- the client, if needed + client.focus = c + c:raise() + end + end), + awful.button({ }, 3, function () + if instance then + instance:hide() + instance = nil + else + instance = awful.menu.clients({ width=250 }) + end + end), + awful.button({ }, 4, function () + awful.client.focus.byidx(1) + if client.focus then client.focus:raise() end + end), + awful.button({ }, 5, function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end)) + +for s = 1, screen.count() do + -- Create a promptbox for each screen + mypromptbox[s] = awful.widget.prompt({ layout = awful.widget.layout.horizontal.leftright }) + -- Create an imagebox widget which will contains an icon indicating which layout we're using. + -- We need one layoutbox per screen. + mylayoutbox[s] = awful.widget.layoutbox(s) + mylayoutbox[s]:buttons(awful.util.table.join( + awful.button({ }, 1, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 3, function () awful.layout.inc(layouts, -1) end), + awful.button({ }, 4, function () awful.layout.inc(layouts, 1) end), + awful.button({ }, 5, function () awful.layout.inc(layouts, -1) end))) + -- Create a taglist widget + mytaglist[s] = awful.widget.taglist(s, awful.widget.taglist.label.all, mytaglist.buttons) + + -- Create a tasklist widget + mytasklist[s] = awful.widget.tasklist(function(c) + return awful.widget.tasklist.label.currenttags(c, s) + end, mytasklist.buttons) + + -- Create the wibox + mywibox[s] = awful.wibox({ position = "top", screen = s }) + -- Add widgets to the wibox - order matters + mywibox[s].widgets = { + { + mylauncher, + mytaglist[s], + mypromptbox[s], + layout = awful.widget.layout.horizontal.leftright + }, + mylayoutbox[s], + mytextclock, + memwidget, + cpuwidget, + sndwidget, + wifiwidget, + s == 1 and mysystray or nil, + mytasklist[s], + layout = awful.widget.layout.horizontal.rightleft + } +end +-- }}} + +-- {{{ Mouse bindings +root.buttons(awful.util.table.join( + awful.button({ }, 3, function () mymainmenu:toggle() end), + awful.button({ }, 4, awful.tag.viewnext), + awful.button({ }, 5, awful.tag.viewprev) +)) +-- }}} + +-- {{{ Key bindings +globalkeys = awful.util.table.join( + awful.key({ modkey, }, "Left", awful.tag.viewprev ), + awful.key({ modkey, }, "Right", awful.tag.viewnext ), + awful.key({ modkey, }, "Escape", awful.tag.history.restore), + + awful.key({ modkey, }, "j", + function () + awful.client.focus.byidx( 1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "k", + function () + awful.client.focus.byidx(-1) + if client.focus then client.focus:raise() end + end), + awful.key({ modkey, }, "w", function () mymainmenu:show({keygrabber=true}) end), + + -- Layout manipulation + awful.key({ modkey, "Shift" }, "j", function () awful.client.swap.byidx( 1) end), + awful.key({ modkey, "Shift" }, "k", function () awful.client.swap.byidx( -1) end), + awful.key({ modkey, "Control" }, "j", function () awful.screen.focus_relative( 1) end), + awful.key({ modkey, "Control" }, "k", function () awful.screen.focus_relative(-1) end), + awful.key({ modkey, }, "u", awful.client.urgent.jumpto), + awful.key({ modkey, }, "Tab", + function () + awful.client.focus.history.previous() + if client.focus then + client.focus:raise() + end + end), + + -- Standard program + awful.key({ modkey, }, "Return", function () awful.util.spawn(terminal) end), + awful.key({ modkey, "Control" }, "r", awesome.restart), + awful.key({ modkey, "Shift" }, "q", awesome.quit), + + awful.key({ modkey, }, "l", function () awful.tag.incmwfact( 0.05) end), + awful.key({ modkey, }, "h", function () awful.tag.incmwfact(-0.05) end), + awful.key({ modkey, "Shift" }, "h", function () awful.tag.incnmaster( 1) end), + awful.key({ modkey, "Shift" }, "l", function () awful.tag.incnmaster(-1) end), + awful.key({ modkey, "Control" }, "h", function () awful.tag.incncol( 1) end), + awful.key({ modkey, "Control" }, "l", function () awful.tag.incncol(-1) end), + awful.key({ modkey, }, "r", function () awful.layout.inc(layouts, 1) end), + awful.key({ modkey, "Shift" }, "r", function () awful.layout.inc(layouts, -1) end), + + awful.key({ modkey, "Control" }, "n", awful.client.restore), + + -- Custom application launchers + awful.key({ modkey, }, "b", function () awful.util.spawn("firefox") end), + awful.key({ modkey, }, "t", function () awful.util.spawn("tor-browser") end), + awful.key({ modkey, }, "z", function () awful.util.spawn("xscreensaver-command -lock") end), + + -- Prompt + awful.key({ modkey }, "space", function () mypromptbox[mouse.screen]:run() end), + + awful.key({ modkey }, "x", + function () + awful.prompt.run({ prompt = "Run Lua code: " }, + mypromptbox[mouse.screen].widget, + awful.util.eval, nil, + awful.util.getdir("cache") .. "/history_eval") + end) +) + +clientkeys = awful.util.table.join( + awful.key({ modkey, }, "f", function (c) c.fullscreen = not c.fullscreen end), + awful.key({ modkey, "Shift" }, "c", function (c) c:kill() end), + awful.key({ modkey, "Control" }, "space", awful.client.floating.toggle ), + awful.key({ modkey, "Control" }, "Return", function (c) c:swap(awful.client.getmaster()) end), + awful.key({ modkey, }, "o", awful.client.movetoscreen ), + awful.key({ modkey, "Shift" }, "r", function (c) c:redraw() end), + awful.key({ modkey, }, "t", function (c) c.ontop = not c.ontop end), + awful.key({ modkey, }, "n", + function (c) + -- The client currently has the input focus, so it cannot be + -- minimized, since minimized clients can't have the focus. + c.minimized = true + end), + awful.key({ modkey, }, "m", + function (c) + c.maximized_horizontal = not c.maximized_horizontal + c.maximized_vertical = not c.maximized_vertical + end) +) + +-- Compute the maximum number of digit we need, limited to 9 +keynumber = 0 +for s = 1, screen.count() do + keynumber = math.min(9, math.max(#tags[s], keynumber)); +end + +-- Bind all key numbers to tags. +-- Be careful: we use keycodes to make it works on any keyboard layout. +-- This should map on the top row of your keyboard, usually 1 to 9. +for i = 1, keynumber do + globalkeys = awful.util.table.join(globalkeys, + awful.key({ modkey }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewonly(tags[screen][i]) + end + end), + awful.key({ modkey, "Control" }, "#" .. i + 9, + function () + local screen = mouse.screen + if tags[screen][i] then + awful.tag.viewtoggle(tags[screen][i]) + end + end), + awful.key({ modkey, "Shift" }, "#" .. i + 9, + function () + if client.focus and tags[client.focus.screen][i] then + awful.client.movetotag(tags[client.focus.screen][i]) + end + end), + awful.key({ modkey, "Control", "Shift" }, "#" .. i + 9, + function () + if client.focus and tags[client.focus.screen][i] then + awful.client.toggletag(tags[client.focus.screen][i]) + end + end)) +end + +clientbuttons = awful.util.table.join( + awful.button({ }, 1, function (c) client.focus = c; c:raise() end), + awful.button({ modkey }, 1, awful.mouse.client.move), + awful.button({ modkey }, 3, awful.mouse.client.resize)) + +-- Set keys +root.keys(globalkeys) +-- }}} + +-- {{{ Rules +awful.rules.rules = { + -- All clients will match this rule. + { rule = { }, + properties = { border_width = beautiful.border_width, + border_color = beautiful.border_normal, + focus = true, + keys = clientkeys, + buttons = clientbuttons } }, + { rule = { class = "MPlayer" }, + properties = { floating = true } }, + { rule = { class = "pinentry" }, + properties = { floating = true } }, + { rule = { class = "gimp" }, + properties = { floating = true } }, + -- Set Firefox to always map on tags number 2 of screen 1. + -- { rule = { class = "Firefox" }, + -- properties = { tag = tags[1][2] } }, +} +-- }}} + +-- {{{ Signals +-- Signal function to execute when a new client appears. +client.add_signal("manage", function (c, startup) + -- Add a titlebar + -- awful.titlebar.add(c, { modkey = modkey }) + + -- Enable sloppy focus + c:add_signal("mouse::enter", function(c) + if awful.layout.get(c.screen) ~= awful.layout.suit.magnifier + and awful.client.focus.filter(c) then + client.focus = c + end + end) + + if not startup then + -- Set the windows at the slave, + -- i.e. put it at the end of others instead of setting it master. + -- awful.client.setslave(c) + + -- Put windows in a smart way, only if they does not set an initial position. + if not c.size_hints.user_position and not c.size_hints.program_position then + awful.placement.no_overlap(c) + awful.placement.no_offscreen(c) + end + end +end) + +client.add_signal("focus", function(c) c.border_color = beautiful.border_focus end) +client.add_signal("unfocus", function(c) c.border_color = beautiful.border_normal end) +-- }}} diff --git a/.config/bspwm/bspwmrc b/.config/bspwm/bspwmrc @@ -0,0 +1,36 @@ +#!/bin/bash +# +# BSPWM config file +# + +bspc config border_width 2 +bspc config window_gap 10 + +bspc monitor -d 1 2 3 4 5 + +bspc config top_padding 30 + +bspc config split_ratio 0.5 +bspc config gapless_monocle true +bspc config borderless_monocle true + +bspc config focus_follows_pointer true + +bspc config focused_border_color \#202020 +bspc config active_border_color \#202020 +bspc config normal_border_color \#202020 +bspc config presel_border_color \#202020 + +bspc config focused_locked_border_color \#a54242 +bspc config active_locked_border_color \#a54242 +bspc config normal_locked_border_color \#a54242 + +bspc config focused_sticky_border_color \#8c9440 +bspc config active_sticky_border_color \#8c9440 +bspc config normal_sticky_border_color \#8c9440 + +bspc config focused_private_border_color \#85678f +bspc config active_private_border_color \#85678f +bspc config normal_private_border_color \#85678f + +bspc config urgent_border_color \#de935f diff --git a/.config/bspwm/panel/panel b/.config/bspwm/panel/panel @@ -0,0 +1,132 @@ +#!/bin/bash +# +# Bar Ain't Recursive panel +# by Ivan Sokolov +# + +WHITE=f8f8f8 +RED=a54242 +GREEN=8c9440 +BLACK=202020 +GRAY=404040 + +function A { + echo -n "%{A:$2:}$1%{A}" +} + +function B { + echo -n "%{B#ff$2}$1%{B-}" +} + +function F { + echo -n "%{F#ff$2}$1%{F-}" +} + +function o { + echo "%{+o}$1%{-o}" +} + +function u { + echo "%{+u}$1%{-u}" +} + +### + +DIV=$(F '|' $GRAY) + +### + +network() { + ping -c 1 8.8.8.8 >/dev/null 2>&1 && echo -n $(F + $GREEN) || echo -n $(F - $RED) +} + +calendar() { + #DATE=$(date -u +%d/%m/%y) + DATE=$(date -u +%Y-%m-%y) + echo -n $(F $DATE $WHITE) +} + +clock() { + TIME=$(date -u +%H:%M:%S) + echo -n $(F $TIME $WHITE) +} + +volume() { + #VOLUME=$(pamixer --get-volume) + VOLUME=$(amixer get Master | grep '\[' | awk '{ print $5; }' | sed 's/\[//' | sed 's/%\]//') + VCOLOR=$WHITE + #if [[ $(pamixer --get-mute) -eq 'true' ]] + #then + # VCOLOR=$WHITE + #else + # VCOLOR=$GRAY + #fi + #echo -n "$(A $(F $VOLUME $VCOLOR) volume)" + #echo -n "$(A $(F $VOLUME) volume)" + echo -n "v:$(A $VOLUME)" +} + +battery() { + BATTERY=$(acpi -b | awk '{gsub(/%,/,""); print $4}' | sed 's/%//g') + if [[ $BATTERY -gt 20 ]] + then + BCOLOR=$WHITE + else + BCOLOR=$RED + fi + echo -n b:$(F $BATTERY ff$BCOLOR) +} + +layout() { + #echo -n "$(A $(F $(xkb-switch) $WHITE) layout)" + echo -n "$(cat ~/.kbd-layout)" +} + +mpc_status() { + if [[ -n $(mpc | grep playing) ]] + then + echo -n "$(F "$(mpc current -f "[%title%]")" $WHITE) $DIV " + echo -n "$(F "$(mpc current -f "[%album%]")" $WHITE) $DIV " + echo -n "$(F "$(mpc current -f "[%artist%]")" $WHITE) " + else + echo -n '' + fi +} + +# echo -n "$(F "$(mpc current -f "[%title% $(F - $GRAY) %album% $(F - $GRAY) %artist%]|[%file%]")" $WHITE)" + +mpc_controls() { + echo -n '' +} + +while true +do + # Left + printf '%s' '%{l}' + # Desktops + for i in 1 2 3 4 5 + do + printf ' %s' "%{A:$i:}$(F \| $GRAY)$(F $i $WHITE)$(F \| $GRAY)%{A}" + done + + # Center + printf '%s' '%{c}' + printf '%s' "$(mpc_status)" + # printf '%s' "$(mpc_controls)" + + # Right + printf '%s' '%{r}' + printf ' %s' $(network) $DIV + printf ' %s' $(layout) $DIV + printf ' %s' $(volume) $DIV + printf ' %s' $(battery) $DIV + printf ' %s' $(clock) + printf ' %s \n' $(calendar) + + sleep 0.5s +done | bar \ #bar-aint-recursive \ + -F \#ff$WHITE \ + -B \#ff$BLACK \ + -g 1346x20+10+10 \ + | ~/.config/bspwm/spawner + #-f '-*-terminus-medium-r-normal-*-12-*-*-*-c-*-*-u' \ diff --git a/.config/bspwm/panel/panel_bar b/.config/bspwm/panel/panel_bar @@ -0,0 +1,74 @@ +#! /bin/sh +# +# Example panel for LemonBoy's bar + +. ~/.config/bspwm/panel/panel_colors + +num_mon=$(bspc query -M | wc -l) + +while read -r line ; do + case $line in + S*) + # clock output + sys_infos="%{F$COLOR_STATUS_FG}%{B$COLOR_STATUS_BG} ${line#?} %{B-}%{F-}" + ;; + T*) + # xtitle output + title="%{F$COLOR_TITLE_FG}%{B$COLOR_TITLE_BG} ${line#?} %{B-}%{F-}" + ;; + W*) + # bspwm internal state + wm_infos="" + IFS=':' + set -- ${line#?} + while [ $# -gt 0 ] ; do + item=$1 + name=${item#?} + case $item in + M*) + # active monitor + if [ $num_mon -gt 1 ] ; then + wm_infos="$wm_infos %{F$COLOR_ACTIVE_MONITOR_FG}%{B$COLOR_ACTIVE_MONITOR_BG} ${name} %{B-}%{F-} " + fi + ;; + m*) + # inactive monitor + if [ $num_mon -gt 1 ] ; then + wm_infos="$wm_infos %{F$COLOR_INACTIVE_MONITOR_FG}%{B$COLOR_INACTIVE_MONITOR_BG} ${name} %{B-}%{F-} " + fi + ;; + O*) + # focused occupied desktop + wm_infos="${wm_infos}%{F$COLOR_FOCUSED_OCCUPIED_FG}%{B$COLOR_FOCUSED_OCCUPIED_BG}%{U$COLOR_FOREGROUND}%{+u} ${name} %{-u}%{B-}%{F-}" + ;; + F*) + # focused free desktop + wm_infos="${wm_infos}%{F$COLOR_FOCUSED_FREE_FG}%{B$COLOR_FOCUSED_FREE_BG}%{U$COLOR_FOREGROUND}%{+u} ${name} %{-u}%{B-}%{F-}" + ;; + U*) + # focused urgent desktop + wm_infos="${wm_infos}%{F$COLOR_FOCUSED_URGENT_FG}%{B$COLOR_FOCUSED_URGENT_BG}%{U$COLOR_FOREGROUND}%{+u} ${name} %{-u}%{B-}%{F-}" + ;; + o*) + # occupied desktop + wm_infos="${wm_infos}%{F$COLOR_OCCUPIED_FG}%{B$COLOR_OCCUPIED_BG} ${name} %{B-}%{F-}" + ;; + f*) + # free desktop + wm_infos="${wm_infos}%{F$COLOR_FREE_FG}%{B$COLOR_FREE_BG} ${name} %{B-}%{F-}" + ;; + u*) + # urgent desktop + wm_infos="${wm_infos}%{F$COLOR_URGENT_FG}%{B$COLOR_URGENT_BG} ${name} %{B-}%{F-}" + ;; + L*) + # layout + wm_infos="$wm_infos %{F$COLOR_LAYOUT_FG}%{B$COLOR_LAYOUT_BG} ${name} %{B-}%{F-}" + ;; + esac + shift + done + ;; + esac + printf "%s\n" "%{l}${wm_infos}%{c}${title}%{r}${sys_infos}" +done diff --git a/.config/bspwm/panel/panel_colors b/.config/bspwm/panel/panel_colors @@ -0,0 +1,24 @@ +COLOR_FOREGROUND='#FFA3A6AB' +COLOR_BACKGROUND='#FF34322E' +COLOR_ACTIVE_MONITOR_FG='#FF34322E' +COLOR_ACTIVE_MONITOR_BG='#FF58C5F1' +COLOR_INACTIVE_MONITOR_FG='#FF58C5F1' +COLOR_INACTIVE_MONITOR_BG='#FF34322E' +COLOR_FOCUSED_OCCUPIED_FG='#FFF6F9FF' +COLOR_FOCUSED_OCCUPIED_BG='#FF5C5955' +COLOR_FOCUSED_FREE_FG='#FFF6F9FF' +COLOR_FOCUSED_FREE_BG='#FF6D561C' +COLOR_FOCUSED_URGENT_FG='#FF34322E' +COLOR_FOCUSED_URGENT_BG='#FFF9A299' +COLOR_OCCUPIED_FG='#FFA3A6AB' +COLOR_OCCUPIED_BG='#FF34322E' +COLOR_FREE_FG='#FF6F7277' +COLOR_FREE_BG='#FF34322E' +COLOR_URGENT_FG='#FFF9A299' +COLOR_URGENT_BG='#FF34322E' +COLOR_LAYOUT_FG='#FFA3A6AB' +COLOR_LAYOUT_BG='#FF34322E' +COLOR_TITLE_FG='#FFA3A6AB' +COLOR_TITLE_BG='#FF34322E' +COLOR_STATUS_FG='#FFA3A6AB' +COLOR_STATUS_BG='#FF34322E' diff --git a/.config/dwb/keys b/.config/dwb/keys @@ -0,0 +1,175 @@ +[default] +save_search_field= gs +tab_new= ga +allow_session_cookie_tmp= CT +allow_cookie= CC +allow_session_cookie= CS +bookmark= M +buffers= gt +cancel_download= ad +sanitize= +clear_tab= gc +only= co +close_tab= d +entry_escape=Control c +entry_confirm=Control g +entry_history_back=Control k +entry_history_forward=Control j +entry_delete_letter=Control h +entry_delete_active=Control d +entry_delete_line=Control u +entry_delete_line_end=Control e +entry_delete_word=Control w +entry_delete_word_forward=Control e +entry_word_back=Control b +entry_word_forward=Control f +complete_bookmarks=Control B +complete_history=Control H +complete_path=Control p +complete_searchengines=Control S +complete_userscript=Control U +download= gd +download_set_execute=Control x +command_mode= : +tabdo= +execute_javascript= +eval= +execute_userscript= eu +find_backward_ic= c? +find_backward= ? +find_forward_ic= c/ +find_forward= / +find_next= n +find_previous= N +tabgrep= +focus_input= gi +focus_next= J +focus_tab= T +focus_prev= K +win_hist_back= wh +tab_hist_back= th +history_back= H +win_hist_forward= wl +tab_hist_forward= tl +history_forward= L +insert_mode= i +jump=' +show_keys= Sk +load_html= +load_html_tab= +lock_domain= xd +lock_uri= xu +mark=` +tab_move_left= gl +tab_move_right= gr +tab_move= gm +normal_mode=Control n +open_editor=Control e +quickmark= b +tab_quickmark= B +win_quickmark= wb +start_page=Control h +web_inspector= wi +paste= pp +tab_paste= Pp +win_paste= wp +paste_primary= pP +win_paste_primary= wP +tab_paste_primary= PP +print=Control Mod1 p +protect=Control P +quit=Control q +adblock_reload_rules= +reload_bookmarks= +reload= r +reload_bypass_cache= R +reload_quickmarks= +reload_userscripts= +repeat=. +save= sf +save_session= ZZ +save_named_session= gZZ +save_quickmark= m +scroll_down= j +scroll_right= l +scroll_left= h +scroll_page_down=Control f +scroll_page_up=Control b +scroll_halfpage_down=Control d +scroll_halfpage_up=Control u +scroll_bottom= G +scroll_top= gg +scroll_up= k +local_set= +set= +set_key= sk +set_local_setting= sl +set_setting= ss +show_settings= Ss +print_preview= +show_bookmarks= Sb +show_downloads= Sd +show_history= Sh +show_quickmarks= Sq +stop_loading=Control s +toggle_local_setting= +toggle_setting= +toggle_tab=Control @Tab@ +toggle_plugins_host_tmp= pth +toggle_scripts_host= tsh +toggle_scripts_host_tmp= tth +toggle_scripts_uri= tsu +toggle_plugins_uri_tmp= ptu +toggle_scripts_uri_tmp= ttu +fullscreen= @F11@ +toggle_hidden_files= g. +toggle_plugins_host= ph +toggle_plugins_uri= pu +presentation_mode= @F12@ +proxy=Control p +visible= xv +toggle_bars= xx +toggle_statusbar= xb +toggle_tabbar= xt +undo= u +view_source= gf +visual_mode= v +dump= +yank_title= yt +yank_title_primary= yT +yank= yy +yank_primary= yY +zoom= = +zoom_in= + +zoom_out= - +hints_background= ;b +hints_images_background= ;Ib +hints_url_background= ;Ob +backopen_url= xO +backopen= xo +bookmarks= gb +hints_selector= +hints= f +hints_clipboard= ;y +hints_download= ;d +hints_editable= ;e +hints_images= ;i +hints_links= ;; +hints_primary= ;Y +hints_rapid= ;r +hints_url= ;o +new_tab=Control T +new_win= W +open_url= go +open= o +hints_tab= F +hints_images_tab= ;It +hints_url_tab= ;Ot +tab_bookmarks= gB +tabopen_url= gO +tabopen= O +hints_win= wf +hints_rapid_win= ;R +win_bookmarks= wB +winopen_url= wO +winopen= wo diff --git a/.config/dwb/searchengines b/.config/dwb/searchengines @@ -0,0 +1,8 @@ +startpage https://startpage.com/do/search?query=_dwb_search_submit_ +wikipedia https://en.wikipedia.org/w/index.php?search=_dwb_search_submit_&title=Special:Search +duckduckgo https://duckduckgo.com/?q=_dwb_search_submit_ +debian http://packages.debian.org/search?keywords=_dwb_search_submit_&searchon=names&suite=stable&section=all +scholar http://scholar.google.dk/scholar?hl=da&q=_dwb_search_submit_ +sb http://statsbiblioteket.dk/?query=_dwb_search_submit_ +wa https://www.wolframalpha.com/input/?i=_dwb_search_submit_&dataset= +julia http://docs.julialang.org/en/latest/search/?q=_dwb_search_submit_&check_keywords=yes&area=default diff --git a/.config/dwb/settings b/.config/dwb/settings @@ -0,0 +1,163 @@ +[default] +enable-private-browsing=false +enable-spell-checking=true +cookie-expiration=1h +cookies-accept-policy=nothirdparty +cookies-store-policy=persistent +minimum-font-size=6 +minimum-logical-font-size=6 +adblocker=true +javascript-can-access-clipboard=false +hint-offset-top=0 +file-sync-interval=120 +download-gradient-end=#00aa00 +status-allowed-color=#00ff00 +tab-number-color=#7ac5cd +enable-default-context-menu=true +editable=false +background-tabs=false +enable-webgl=false +enable-page-cache=false +cache-model=webbrowser +sans-serif-font-family=sans-serif +prompt-color=#00ff00 +complete-searchengines=false +update-search-delay=200 +fantasy-font-family=serif +hint-fg-color=#000000 +sync-files=all +default-height=600 +javascript-api=automatic +scrollbars=false +hint-bg-color=#ffffff +show-single-tab=true +private-color=#505050 +enable-developer-extras=false +complete-bookmarks=true +zoom-level=1.00 +download-use-external-program=false +enable-xss-auditor=true +custom-encoding= +print-previewer= +normal-completion-fg-color=#eeeeee +close-tab-focus-policy=left +enable-dns-prefetching=true +new-tab-position-policy=right +mouse-cycles-through-tabs=true +auto-shrink-images=true +print-backgrounds=true +enable-caret-browsing=false +enable-scripts=true +adblocker-filterlist=/home/adc/.config/dwb/adblock_lists +proxy=false +user-agent= +full-content-zoom=false +editor=xterm -e vim dwb_uri +hsts=false +enable-favicon=true +hint-active-color=#00ff00 +resizable-text-areas=true +javascript-schemes=true +load-on-focus=false +adblocker-element-hider=true +download-gradient-start=#0000aa +hint-normal-color=#ffff99 +spell-checking-languages= +font-nofocus= +status-blocked-color=#ffffff +enable-plugins=true +download-fg-color=#ffffff +tabbar-height=0 +enable-frame-flattening=false +statusbar-height=0 +ssl-use-system-ca-file=true +bars-padding=0 +active-completion-fg-color=#53868b +hint-font=bold 10px monospace +progress-bar-full-color=#ffffff +tabbed-browsing=true +hint-highlight-links=false +active-completion-bg-color=#000000 +font-hidden-statusbar=normal 10px helvetica +tab-normal-fg-color-2=#dddddd +tab-normal-fg-color-1=#cccccc +default-monospace-font-size=10 +save-session=true +enable-ipc=true +tabbar-visible=2 +auto-insert-mode=false +tab-normal-bg-color-2=#707070 +tab-normal-bg-color-1=#505050 +serif-font-family=serif +accept-language= +enable-html5-local-storage=true +tab-protected-color=#ff0000 +hint-letter-seq=FDSARTGBVECWXQYIOPMNHZULKJ +progress-bar-style=default +maximum-tabs=0 +passthrough-keys=webkit +enable-html5-database=true +hint-autofollow=true +enable-dom-paste=false +javascript-can-open-windows-automatically=false +max-visible-completions=11 +hint-border=1px solid #000000 +widget-packing=dtws +favicon-size=0 +ssl-trusted-color=#00ff00 +enable-java-applet=true +hints-key-lock=250 +navigation-history-max=500 +hint-style=letter +enable-site-specific-quirks=false +auto-resize-window=false +zoom-step=0.10 +default-font-family=sans-serif +ssl-untrusted-color=#ff0000 +plugin-blocker=true +startpage=dwb:bookmarks +normal-completion-bg-color=#151515 +cursive-font-family=serif +default-encoding= +error-color=#ff0000 +searchengine-submit-pattern= +hint-opacity=0.80 +font-entry= +proxy-url= +font=monospace 8 +monospace-font-family=monospace +addressbar-dns-lookup=false +enable-universal-access-from-file-uris=true +background-color=#000000 +do-not-track=true +progress-bar-empty-color=#ffffff +default-width=800 +single-instance=true +auto-completion=false +font-completion= +enable-spatial-navigation=false +block-insecure-content=false +download-directory= +download-external-command=xterm -e wget dwb_uri -O dwb_output --load-cookies dwb_cookies +user-stylesheet-uri= +auto-load-images=true +tab-active-fg-color=#ffffff +hint-offset-left=0 +history-length=500 +tab-active-bg-color=#000000 +download-bg-color=#000000 +download-no-confirm=false +enable-file-access-from-file-uris=true +complete-history=true +close-last-tab-policy=ignore +tab-key-cycles-through-elements=true +enforce-96-dpi=false +ssl-strict=true +scroll-step=0.00 +complete-userscripts=false +foreground-color=#ffffff +message-delay=2 +scheme-handler= +default-font-size=12 +enable-offline-web-application-cache=true +enable-accelerated-compositing=false diff --git a/.config/dwb/userscripts/wget b/.config/dwb/userscripts/wget @@ -0,0 +1,3 @@ +#!/bin/bash +# dwb: Control w +wget $DWB_URI diff --git a/.config/dwb/userscripts/youtube-mplayer b/.config/dwb/userscripts/youtube-mplayer @@ -0,0 +1,8 @@ +#!/bin/bash +# dwb: Control y +tmpdir=~/tmp +tmpfile=youtube.mp4 +mkdir -p $tmpdir +rm -rf $tmpdir/$tmpfile +youtube-dl --output $tmpdir/$tmpfile $DWB_URI > $tmpdir/youtube-dl.log 2>&1 +mplayer $tmpdir/$tmpfile >> $tmpdir/youtube-dl.log 2>&1 diff --git a/.config/luakit/binds.lua b/.config/luakit/binds.lua @@ -0,0 +1,588 @@ +----------------- +-- Keybindings -- +----------------- + +-- Binding aliases +local key, buf, but = lousy.bind.key, lousy.bind.buf, lousy.bind.but +local cmd, any = lousy.bind.cmd, lousy.bind.any + +-- Util aliases +local match, join = string.match, lousy.util.table.join +local strip, split = lousy.util.string.strip, lousy.util.string.split + +-- Globals or defaults that are used in binds +local scroll_step = globals.scroll_step or 20 +local zoom_step = globals.zoom_step or 0.1 + +-- Add binds to a mode +function add_binds(mode, binds, before) + assert(binds and type(binds) == "table", "invalid binds table type: " .. type(binds)) + mode = type(mode) ~= "table" and {mode} or mode + for _, m in ipairs(mode) do + local mdata = get_mode(m) + if mdata and before then + mdata.binds = join(binds, mdata.binds or {}) + elseif mdata then + mdata.binds = mdata.binds or {} + for _, b in ipairs(binds) do table.insert(mdata.binds, b) end + else + new_mode(m, { binds = binds }) + end + end +end + +-- Add commands to command mode +function add_cmds(cmds, before) + add_binds("command", cmds, before) +end + +-- Adds the default menu widget bindings to a mode +menu_binds = { + -- Navigate items + key({}, "j", function (w) w.menu:move_down() end), + key({}, "k", function (w) w.menu:move_up() end), + key({}, "Down", function (w) w.menu:move_down() end), + key({}, "Up", function (w) w.menu:move_up() end), + key({}, "Tab", function (w) w.menu:move_down() end), + key({"Shift"}, "Tab", function (w) w.menu:move_up() end), +} + +-- Add binds to special mode "all" which adds its binds to all modes. +add_binds("all", { + key({}, "Escape", "Return to `normal` mode.", + function (w) w:set_mode() end), + + key({"Control"}, "[", "Return to `normal` mode.", + function (w) w:set_mode() end), + + -- Mouse bindings + but({}, 8, "Go back.", + function (w) w:back() end), + + but({}, 9, "Go forward.", + function (w) w:forward() end), + + -- Open link in new tab or navigate to selection + but({}, 2, [[Open link under mouse cursor in new tab or navigate to the + contents of `luakit.selection.primary`.]], + function (w, m) + -- Ignore button 2 clicks in form fields + if not m.context.editable then + -- Open hovered uri in new tab + local uri = w.view.hovered_uri + if uri then + w:new_tab(uri, false) + else -- Open selection in current tab + uri = luakit.selection.primary + if uri then w:navigate(w:search_open(uri)) end + end + end + end), + + -- Open link in new tab when Ctrl-clicked. + but({"Control"}, 1, "Open link under mouse cursor in new tab.", + function (w, m) + local uri = w.view.hovered_uri + if uri then + w:new_tab(uri, false) + end + end), + + -- Zoom binds + but({"Control"}, 4, "Increase text zoom level.", + function (w, m) w:zoom_in() end), + + but({"Control"}, 5, "Reduce text zoom level.", + function (w, m) w:zoom_out() end), + + -- Horizontal mouse scroll binds + but({"Shift"}, 4, "Scroll left.", + function (w, m) w:scroll{ xrel = -scroll_step } end), + + but({"Shift"}, 5, "Scroll right.", + function (w, m) w:scroll{ xrel = scroll_step } end), +}) + +add_binds("normal", { + -- Autoparse the `[count]` before a binding and re-call the hit function + -- with the count removed and added to the opts table. + any([[Meta-binding to detect the `^[count]` syntax. The `[count]` is parsed + and stripped from the internal buffer string and the value assigned to + `state.count`. Then `lousy.bind.hit()` is re-called with the modified + buffer string & original modifier state. + + #### Example binding + + lousy.bind.key({}, "%", function (w, state) + w:scroll{ ypct = state.count } + end, { count = 0 }) + + This binding demonstrates several concepts. Firstly that you are able to + specify per-binding default values of `count`. In this case if the user + types `"%"` the document will be scrolled vertically to `0%` (the top). + + If the user types `"100%"` then the document will be scrolled to `100%` + (the bottom). All without the need to use `lousy.bind.buf` bindings + everywhere and or using a `^(%d*)` pattern prefix on every binding which + would like to make use of the `[count]` syntax.]], + function (w, m) + local count, buf + if m.buffer then + count = string.match(m.buffer, "^(%d+)") + end + if count then + buf = string.sub(m.buffer, #count + 1, (m.updated_buf and -2) or -1) + local opts = join(m, {count = tonumber(count)}) + opts.buffer = (#buf > 0 and buf) or nil + if lousy.bind.hit(w, m.binds, m.mods, m.key, opts) then + return true + end + end + return false + end), + + key({}, "i", "Enter `insert` mode.", + function (w) w:set_mode("insert") end), + + key({}, ":", "Enter `command` mode.", + function (w) w:set_mode("command") end), + + -- Scrolling + key({}, "j", "Scroll document down.", + function (w) w:scroll{ yrel = scroll_step } end), + + key({}, "k", "Scroll document up.", + function (w) w:scroll{ yrel = -scroll_step } end), + + key({}, "h", "Scroll document left.", + function (w) w:scroll{ xrel = -scroll_step } end), + + key({}, "l", "Scroll document right.", + function (w) w:scroll{ xrel = scroll_step } end), + + key({}, "Down", "Scroll document down.", + function (w) w:scroll{ yrel = scroll_step } end), + + key({}, "Up", "Scroll document up.", + function (w) w:scroll{ yrel = -scroll_step } end), + + key({}, "Left", "Scroll document left.", + function (w) w:scroll{ xrel = -scroll_step } end), + + key({}, "Right", "Scroll document right.", + function (w) w:scroll{ xrel = scroll_step } end), + + key({}, "^", "Scroll to the absolute left of the document.", + function (w) w:scroll{ x = 0 } end), + + key({}, "$", "Scroll to the absolute right of the document.", + function (w) w:scroll{ x = -1 } end), + + key({}, "0", "Scroll to the absolute left of the document.", + function (w, m) + if not m.count then w:scroll{ y = 0 } else return false end + end), + + key({"Control"}, "e", "Scroll document down.", + function (w) w:scroll{ yrel = scroll_step } end), + + key({"Control"}, "y", "Scroll document up.", + function (w) w:scroll{ yrel = -scroll_step } end), + + key({"Control"}, "d", "Scroll half page down.", + function (w) w:scroll{ ypagerel = 0.5 } end), + + key({"Control"}, "u", "Scroll half page up.", + function (w) w:scroll{ ypagerel = -0.5 } end), + + key({"Control"}, "f", "Scroll page down.", + function (w) w:scroll{ ypagerel = 1.0 } end), + + key({"Control"}, "b", "Scroll page up.", + function (w) w:scroll{ ypagerel = -1.0 } end), + + key({}, "space", "Scroll page down.", + function (w) w:scroll{ ypagerel = 1.0 } end), + + key({"Shift"}, "space", "Scroll page up.", + function (w) w:scroll{ ypagerel = -1.0 } end), + + key({}, "BackSpace", "Scroll page up.", + function (w) w:scroll{ ypagerel = -1.0 } end), + + key({}, "Page_Down", "Scroll page down.", + function (w) w:scroll{ ypagerel = 1.0 } end), + + key({}, "Page_Up", "Scroll page up.", + function (w) w:scroll{ ypagerel = -1.0 } end), + + key({}, "Home", "Go to the end of the document.", + function (w) w:scroll{ y = 0 } end), + + key({}, "End", "Go to the top of the document.", + function (w) w:scroll{ y = -1 } end), + + -- Specific scroll + buf("^gg$", "Go to the top of the document.", + function (w, b, m) w:scroll{ ypct = m.count } end, {count=0}), + + buf("^G$", "Go to the bottom of the document.", + function (w, b, m) w:scroll{ ypct = m.count } end, {count=100}), + + buf("^%%$", "Go to `[count]` percent of the document.", + function (w, b, m) w:scroll{ ypct = m.count } end), + + -- Zooming + key({}, "+", "Enlarge text zoom of the current page.", + function (w, m) w:zoom_in(zoom_step * m.count) end, {count=1}), + + key({}, "-", "Reduce text zom of the current page.", + function (w, m) w:zoom_out(zoom_step * m.count) end, {count=1}), + + key({}, "=", "Reset zoom level.", + function (w, m) w:zoom_set() end), + + buf("^z[iI]$", [[Enlarge text zoom of current page with `zi` or `zI` to + reduce full zoom.]], + function (w, b, m) + w:zoom_in(zoom_step * m.count, b == "zI") + end, {count=1}), + + buf("^z[oO]$", [[Reduce text zoom of current page with `zo` or `zO` to + reduce full zoom.]], + function (w, b, m) + w:zoom_out(zoom_step * m.count, b == "zO") + end, {count=1}), + + -- Zoom reset or specific zoom ([count]zZ for full content zoom) + buf("^z[zZ]$", [[Set current page zoom to `[count]` percent with + `[count]zz`, use `[count]zZ` to set full zoom percent.]], + function (w, b, m) + w:zoom_set(m.count/100, b == "zZ") + end, {count=100}), + + -- Fullscreen + key({}, "F11", "Toggle fullscreen mode.", + function (w) w.win.fullscreen = not w.win.fullscreen end), + + -- Clipboard + key({}, "p", [[Open a URL based on the current primary selection contents + in the current tab.]], + function (w) + local uri = luakit.selection.primary + if not uri then w:notify("No primary selection...") return end + w:navigate(w:search_open(uri)) + end), + + key({}, "P", [[Open a URL based on the current primary selection contents + in `[count=1]` new tab(s).]], + function (w, m) + local uri = luakit.selection.primary + if not uri then w:notify("No primary selection...") return end + for i = 1, m.count do w:new_tab(w:search_open(uri)) end + end, {count = 1}), + + -- Yanking + key({}, "y", "Yank current URI to primary selection.", + function (w) + local uri = string.gsub(w.view.uri or "", " ", "%%20") + luakit.selection.primary = uri + w:notify("Yanked uri: " .. uri) + end), + + -- Commands + key({"Control"}, "a", "Increment last number in URL.", + function (w) w:navigate(w:inc_uri(1)) end), + + key({"Control"}, "x", "Decrement last number in URL.", + function (w) w:navigate(w:inc_uri(-1)) end), + + key({}, "o", "Open one or more URLs.", + function (w) w:enter_cmd(":open ") end), + + key({}, "t", "Open one or more URLs in a new tab.", + function (w) w:enter_cmd(":tabopen ") end), + + key({}, "w", "Open one or more URLs in a new window.", + function (w) w:enter_cmd(":winopen ") end), + + key({}, "O", "Open one or more URLs based on current location.", + function (w) w:enter_cmd(":open " .. (w.view.uri or "")) end), + + key({}, "T", + "Open one or more URLs based on current location in a new tab.", + function (w) w:enter_cmd(":tabopen " .. (w.view.uri or "")) end), + + key({}, "W", + "Open one or more URLs based on current locaton in a new window.", + function (w) w:enter_cmd(":winopen " .. (w.view.uri or "")) end), + + -- History + key({}, "H", "Go back in the browser history `[count=1]` items.", + function (w, m) w:back(m.count) end), + + key({}, "L", "Go forward in the browser history `[count=1]` times.", + function (w, m) w:forward(m.count) end), + + key({}, "XF86Back", "Go back in the browser history.", + function (w, m) w:back(m.count) end), + + key({}, "XF86Forward", "Go forward in the browser history.", + function (w, m) w:forward(m.count) end), + + key({"Control"}, "o", "Go back in the browser history.", + function (w, m) w:back(m.count) end), + + key({"Control"}, "i", "Go forward in the browser history.", + function (w, m) w:forward(m.count) end), + + -- Tab + key({"Control"}, "Page_Up", "Go to previous tab.", + function (w) w:prev_tab() end), + + key({"Control"}, "Page_Down", "Go to next tab.", + function (w) w:next_tab() end), + + key({"Control"}, "Tab", "Go to next tab.", + function (w) w:next_tab() end), + + key({"Shift","Control"}, "Tab", "Go to previous tab.", + function (w) w:prev_tab() end), + + buf("^gT$", "Go to previous tab.", + function (w) w:prev_tab() end), + + buf("^gt$", "Go to next tab (or `[count]` nth tab).", + function (w, b, m) + if not w:goto_tab(m.count) then w:next_tab() end + end, {count=0}), + + buf("^g0$", "Go to first tab.", + function (w) w:goto_tab(1) end), + + buf("^g$$", "Go to last tab.", + function (w) w:goto_tab(-1) end), + + key({"Control"}, "t", "Open a new tab.", + function (w) w:new_tab(globals.homepage) end), + + key({"Control"}, "w", "Close current tab.", + function (w) w:close_tab() end), + + key({}, "d", "Close current tab (or `[count]` tabs).", + function (w, m) for i=1,m.count do w:close_tab() end end, {count=1}), + + key({}, "<", "Reorder tab left `[count=1]` positions.", + function (w, m) + w.tabs:reorder(w.view, w.tabs:current() - m.count) + end, {count=1}), + + key({}, ">", "Reorder tab right `[count=1]` positions.", + function (w, m) + w.tabs:reorder(w.view, + (w.tabs:current() + m.count) % w.tabs:count()) + end, {count=1}), + + buf("^gH$", "Open homepage in new tab.", + function (w) w:new_tab(globals.homepage) end), + + buf("^gh$", "Open homepage.", + function (w) w:navigate(globals.homepage) end), + + buf("^gy$", "Duplicate current tab.", + function (w) w:new_tab(w.view.history or "") end), + + key({}, "r", "Reload current tab.", + function (w) w:reload() end), + + key({}, "R", "Reload current tab (skipping cache).", + function (w) w:reload(true) end), + + key({"Control"}, "c", "Stop loading the current tab.", + function (w) w.view:stop() end), + + key({"Control", "Shift"}, "R", "Restart luakit (reloading configs).", + function (w) w:restart() end), + + -- Window + buf("^ZZ$", "Quit and save the session.", + function (w) w:save_session() w:close_win() end), + + buf("^ZQ$", "Quit and don't save the session.", + function (w) w:close_win() end), + + buf("^D$", "Quit and don't save the session.", + function (w) w:close_win() end), + + -- Enter passthrough mode + key({"Control"}, "z", + "Enter `passthrough` mode, ignores all luakit keybindings.", + function (w) w:set_mode("passthrough") end), +}) + +add_binds("insert", { + key({"Control"}, "z", + "Enter `passthrough` mode, ignores all luakit keybindings.", + function (w) w:set_mode("passthrough") end), +}) + +readline_bindings = { + key({"Shift"}, "Insert", + "Insert contents of primary selection at cursor position.", + function (w) w:insert_cmd(luakit.selection.primary) end), + + key({"Control"}, "w", "Delete previous word.", + function (w) w:del_word() end), + + key({"Control"}, "u", "Delete until beginning of current line.", + function (w) w:del_line() end), + + key({"Control"}, "h", "Delete character to the left.", + function (w) w:del_backward_char() end), + + key({"Control"}, "d", "Delete character to the right.", + function (w) w:del_forward_char() end), + + key({"Control"}, "a", "Move cursor to beginning of current line.", + function (w) w:beg_line() end), + + key({"Control"}, "e", "Move cursor to end of current line.", + function (w) w:end_line() end), + + key({"Control"}, "f", "Move cursor forward one character.", + function (w) w:forward_char() end), + + key({"Control"}, "b", "Move cursor backward one character.", + function (w) w:backward_char() end), + + key({"Mod1"}, "f", "Move cursor forward one word.", + function (w) w:forward_word() end), + + key({"Mod1"}, "b", "Move cursor backward one word.", + function (w) w:backward_word() end), +} + +add_binds({"command", "search"}, readline_bindings) + +-- Switching tabs with Mod1+{1,2,3,...} +mod1binds = {} +for i=1,10 do + table.insert(mod1binds, + key({"Mod1"}, tostring(i % 10), "Jump to tab at index "..i..".", + function (w) w.tabs:switch(i) end)) +end +add_binds("normal", mod1binds) + +-- Command bindings which are matched in the "command" mode from text +-- entered into the input bar. +add_cmds({ + buf("^%S+!", + [[Detect bang syntax in `:command!` and recursively calls + `lousy.bind.match_cmd(..)` removing the bang from the command string + and setting `bang = true` in the bind opts table.]], + function (w, cmd, opts) + local cmd, args = string.match(cmd, "^(%S+)!+(.*)") + if cmd then + opts = join(opts, { bang = true }) + return lousy.bind.match_cmd(w, opts.binds, cmd .. args, opts) + end + end), + + cmd("c[lose]", "Close current tab.", + function (w) w:close_tab() end), + + cmd("print", "Print current page.", + function (w) w.view:eval_js("print()") end), + + cmd("stop", "Stop loading.", + function (w) w.view:stop() end), + + cmd("reload", "Reload page", + function (w) w:reload() end), + + cmd("restart", "Restart browser (reload config files).", + function (w) w:restart() end), + + cmd("write", "Save current session.", + function (w) w:save_session() end), + + cmd("noh[lsearch]", "Clear search highlighting.", + function (w) w:clear_search() end), + + cmd("back", "Go back in the browser history `[count=1]` items.", + function (w, a) w:back(tonumber(a) or 1) end), + + cmd("f[orward]", "Go forward in the browser history `[count=1]` items.", + function (w, a) w:forward(tonumber(a) or 1) end), + + cmd("inc[rease]", "Increment last number in URL.", + function (w, a) w:navigate(w:inc_uri(tonumber(a) or 1)) end), + + cmd("o[pen]", "Open one or more URLs.", + function (w, a) w:navigate(w:search_open(a)) end), + + cmd("t[abopen]", "Open one or more URLs in a new tab.", + function (w, a) w:new_tab(w:search_open(a)) end), + + cmd("w[inopen]", "Open one or more URLs in a new window.", + function (w, a) window.new{w:search_open(a)} end), + + cmd({"javascript", "js"}, "Evaluate JavaScript snippet.", + function (w, a) w.view:eval_js(a) end), + + -- Tab manipulation commands + cmd("tab", "Execute command and open result in new tab.", + function (w, a) w:new_tab() w:run_cmd(":" .. a) end), + + cmd("tabd[o]", "Execute command in each tab.", + function (w, a) w:each_tab(function (v) w:run_cmd(":" .. a) end) end), + + cmd("tabdu[plicate]", "Duplicate current tab.", + function (w) w:new_tab(w.view.history) end), + + cmd("tabfir[st]", "Switch to first tab.", + function (w) w:goto_tab(1) end), + + cmd("tabl[ast]", "Switch to last tab.", + function (w) w:goto_tab(-1) end), + + cmd("tabn[ext]", "Switch to the next tab.", + function (w) w:next_tab() end), + + cmd("tabp[revious]", "Switch to the previous tab.", + function (w) w:prev_tab() end), + + cmd("q[uit]", "Close the current window.", + function (w, a, o) w:close_win(o.bang) end), + + cmd({"viewsource", "vs"}, "View the source code of the current document.", + function (w, a, o) w:toggle_source(not o.bang and true or nil) end), + + cmd({"wqall", "wq"}, "Save the session and quit.", + function (w, a, o) w:save_session() w:close_win(o.bang) end), + + cmd("lua", "Evaluate Lua snippet.", function (w, a) + if a then + local ret = assert( + loadstring("return function(w) return "..a.." end"))()(w) + if ret then print(ret) end + else + w:set_mode("lua") + end + end), + + cmd("dump", "Dump current tabs html to file.", + function (w, a) + local fname = string.gsub(w.win.title, '[^%w%.%-]', '_')..'.html' -- sanitize filename + local file = a or luakit.save_file("Save file", w.win, xdg.download_dir or '.', fname) + if file then + local fd = assert(io.open(file, "w"), "failed to open: " .. file) + local html = assert(w.view:eval_js("document.documentElement.outerHTML"), "Unable to get HTML") + assert(fd:write(html), "unable to save html") + io.close(fd) + w:notify("Dumped HTML to: " .. file) + end + end), +}) + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/globals.lua b/.config/luakit/globals.lua @@ -0,0 +1,87 @@ +-- Global variables for luakit +globals = { + homepage = "http://luakit.org/", + -- homepage = "http://github.com/mason-larobina/luakit", + scroll_step = 40, + zoom_step = 0.1, + max_cmd_history = 100, + max_srch_history = 100, + -- http_proxy = "http://example.com:3128", + default_window_size = "800x600", + + -- Disables loading of hostnames from /etc/hosts (for large host files) + -- load_etc_hosts = false, + -- Disables checking if a filepath exists in search_open function + -- check_filepath = false, +} + +-- Make useragent +local _, arch = luakit.spawn_sync("uname -sm") +-- Only use the luakit version if in date format (reduces identifiability) +local lkv = string.match(luakit.version, "^(%d+.%d+.%d+)") +globals.useragent = string.format("Mozilla/5.0 (%s) AppleWebKit/%s+ (KHTML, like Gecko) WebKitGTK+/%s luakit%s", + string.sub(arch, 1, -2), luakit.webkit_user_agent_version, + luakit.webkit_version, (lkv and ("/" .. lkv)) or "") + +-- Search common locations for a ca file which is used for ssl connection validation. +local ca_files = { + -- $XDG_DATA_HOME/luakit/ca-certificates.crt + luakit.data_dir .. "/ca-certificates.crt", + "/etc/certs/ca-certificates.crt", + "/etc/ssl/certs/ca-certificates.crt", +} +-- Use the first ca-file found +for _, ca_file in ipairs(ca_files) do + if os.exists(ca_file) then + soup.ssl_ca_file = ca_file + break + end +end + +-- Change to stop navigation sites with invalid or expired ssl certificates +soup.ssl_strict = false + +-- Set cookie acceptance policy +cookie_policy = { always = 0, never = 1, no_third_party = 2 } +soup.accept_policy = cookie_policy.always +--soup.accept_policy = cookie_policy.no_third_party + +-- List of search engines. Each item must contain a single %s which is +-- replaced by URI encoded search terms. All other occurances of the percent +-- character (%) may need to be escaped by placing another % before or after +-- it to avoid collisions with lua's string.format characters. +-- See: http://www.lua.org/manual/5.1/manual.html#pdf-string.format +search_engines = { + duckduckgo = "https://duckduckgo.com/?q=%s", + github = "https://github.com/search?q=%s", + google = "https://google.com/search?q=%s", + imdb = "http://www.imdb.com/find?s=all&q=%s", + wikipedia = "https://en.wikipedia.org/wiki/Special:Search?search=%s", +} + +-- Set google as fallback search engine +--search_engines.default = search_engines.google +search_engines.default = search_engines.duckduckgo +-- Use this instead to disable auto-searching +--search_engines.default = "%s" + +-- Per-domain webview properties +-- See http://webkitgtk.org/reference/webkitgtk/stable/WebKitWebSettings.html +domain_props = { --[[ + ["all"] = { + enable_scripts = false, + enable_plugins = false, + enable_private_browsing = false, + user_stylesheet_uri = "", + }, + ["youtube.com"] = { + enable_scripts = true, + enable_plugins = true, + }, + ["bbs.archlinux.org"] = { + user_stylesheet_uri = "file://" .. luakit.data_dir .. "/styles/dark.css", + enable_private_browsing = true, + }, ]] +} + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/modes.lua b/.config/luakit/modes.lua @@ -0,0 +1,163 @@ +------------------------------- +-- luakit mode configuration -- +------------------------------- + +-- Table of modes and their callback hooks +local modes = {} +local lousy = require "lousy" +local join = lousy.util.table.join +local order = 0 + +-- Add new mode table (optionally merges with original mode) +function new_mode(name, desc, mode, replace) + assert(string.match(name, "^[%w-_]+$"), "invalid mode name: " .. name) + -- Detect optional description + if type(desc) == "table" then + desc, mode, replace = nil, desc, mode + end + local traceback = debug.traceback("Creation traceback:", 2) + order = order + 1 + modes[name] = join({ order = order, traceback = traceback }, + (not replace and modes[name]) or {}, mode or {}, + { name = name, desc = desc }) +end + +-- Get mode table +function get_mode(name) return modes[name] end + +function get_modes() return lousy.util.table.clone(modes) end + +-- Attach window & input bar signals for mode hooks +window.init_funcs.modes_setup = function (w) + -- Calls the `enter` and `leave` mode hooks. + w:add_signal("mode-changed", function (_, name, ...) + local leave = (w.mode or {}).leave + + -- Get new modes functions/hooks/data + local mode = assert(modes[name], "invalid mode: " .. name) + + -- Call last modes leave hook. + if leave then leave(w) end + + -- Create w.mode object + w.mode = mode + + -- Update window binds + w:update_binds(name) + + -- Call new modes enter hook. + if mode.enter then mode.enter(w, ...) end + + w:emit_signal("mode-entered", mode) + end) + + local input = w.ibar.input + + -- Calls the changed hook on input widget changed. + input:add_signal("changed", function () + local changed = w.mode.changed + if changed then changed(w, input.text) end + end) + + input:add_signal("property::position", function () + local move_cursor = w.mode.move_cursor + if move_cursor then move_cursor(w, input.position) end + end) + + -- Calls the `activate` hook on input widget activate. + input:add_signal("activate", function () + local mode = w.mode + if mode and mode.activate then + local text, hist = input.text, mode.history + if mode.activate(w, text) == false then return end + -- Check if last history item is identical + if hist and hist.items and hist.items[hist.len or -1] ~= text then + table.insert(hist.items, text) + end + end + end) +end + +-- Add mode related window methods +window.methods.set_mode = lousy.mode.set +local mget = lousy.mode.get +window.methods.is_mode = function (w, name) return name == mget(w) end + +-- Setup normal mode +new_mode("normal", [[When luakit first starts you will find yourself in this + mode.]], { + enter = function (w) + w:set_prompt() + w:set_input() + end, +}) + +new_mode("all", [[Special meta-mode in which the bindings for this mode are + present in all modes.]]) + +-- Setup insert mode +new_mode("insert", [[When clicking on form fields luakit will enter the insert + mode which allows you to enter text in form fields without accidentally + triggering normal mode bindings.]], { + enter = function (w) + w:set_prompt("-- INSERT --") + w:set_input() + w.view:focus() + end, + -- Send key events to webview + passthrough = true, +}) + +new_mode("passthrough", [[Luakit will pass every key event to the WebView + until the user presses Escape.]], { + enter = function (w) + w:set_prompt("-- PASS THROUGH --") + w:set_input() + end, + -- Send key events to webview + passthrough = true, + -- Don't exit mode when clicking outside of form fields + reset_on_focus = false, + -- Don't exit mode on navigation + reset_on_navigation = false, +}) + +-- Setup command mode +new_mode("command", [[Enter commands.]], { + enter = function (w) + w:set_prompt() + w:set_input(":") + end, + changed = function (w, text) + -- Auto-exit command mode if user backspaces ":" in the input bar. + if not string.match(text, "^:") then w:set_mode() end + end, + activate = function (w, text) + w:set_mode() + local cmd = string.sub(text, 2) + if not string.find(cmd, "%S") then return end + + local success, match = xpcall( + function () return w:match_cmd(cmd) end, + function (err) w:error(debug.traceback(err, 3)) end) + + if success and not match then + w:error(string.format("Not a browser command: %q", cmd)) + end + end, + history = {maxlen = 50}, +}) + +new_mode("lua", [[Execute arbitrary Lua commands within the luakit + environment.]], { + enter = function (w) + w:set_prompt(">") + w:set_input("") + end, + activate = function (w, text) + w:set_input("") + local ret = assert(loadstring("return function(w) return "..text.." end"))()(w) + if ret then print(ret) end + end, + history = {maxlen = 50}, +}) diff --git a/.config/luakit/rc.lua b/.config/luakit/rc.lua @@ -0,0 +1,181 @@ +----------------------------------------------------------------------- +-- luakit configuration file, more information at http://luakit.org/ -- +----------------------------------------------------------------------- + +require "lfs" + +if unique then + unique.new("org.luakit") + -- Check for a running luakit instance + if unique.is_running() then + if uris[1] then + for _, uri in ipairs(uris) do + if lfs.attributes(uri) then uri = os.abspath(uri) end + unique.send_message("tabopen " .. uri) + end + else + unique.send_message("winopen") + end + luakit.quit() + end +end + +-- Load library of useful functions for luakit +require "lousy" + +-- Small util functions to print output (info prints only when luakit.verbose is true) +function warn(...) io.stderr:write(string.format(...) .. "\n") end +function info(...) if luakit.verbose then io.stdout:write(string.format(...) .. "\n") end end + +-- Load users global config +-- ("$XDG_CONFIG_HOME/luakit/globals.lua" or "/etc/xdg/luakit/globals.lua") +require "globals" + +-- Load users theme +-- ("$XDG_CONFIG_HOME/luakit/theme.lua" or "/etc/xdg/luakit/theme.lua") +lousy.theme.init(lousy.util.find_config("theme.lua")) +theme = assert(lousy.theme.get(), "failed to load theme") + +-- Load users window class +-- ("$XDG_CONFIG_HOME/luakit/window.lua" or "/etc/xdg/luakit/window.lua") +require "window" + +-- Load users webview class +-- ("$XDG_CONFIG_HOME/luakit/webview.lua" or "/etc/xdg/luakit/webview.lua") +require "webview" + +-- Load users mode configuration +-- ("$XDG_CONFIG_HOME/luakit/modes.lua" or "/etc/xdg/luakit/modes.lua") +require "modes" + +-- Load users keybindings +-- ("$XDG_CONFIG_HOME/luakit/binds.lua" or "/etc/xdg/luakit/binds.lua") +require "binds" + +---------------------------------- +-- Optional user script loading -- +---------------------------------- + +require "webinspector" + +-- Add sqlite3 cookiejar +require "cookies" + +-- Cookie blocking by domain (extends cookies module) +-- Add domains to the whitelist at "$XDG_CONFIG_HOME/luakit/cookie.whitelist" +-- and blacklist at "$XDG_CONFIG_HOME/luakit/cookie.blacklist". +-- Each domain must be on it's own line and you may use "*" as a +-- wildcard character (I.e. "*google.com") +--require "cookie_blocking" + +-- Block all cookies by default (unless whitelisted) +--cookies.default_allow = false + +-- Add uzbl-like form filling +require "formfiller" + +-- Add proxy support & manager +require "proxy" + +-- Add quickmarks support & manager +require "quickmarks" + +-- Add session saving/loading support +require "session" + +-- Add command to list closed tabs & bind to open closed tabs +require "undoclose" + +-- Add command to list tab history items +require "tabhistory" + +-- Add greasemonkey-like javascript userscript support +require "userscripts" + +-- Add bookmarks support +require "bookmarks" +require "bookmarks_chrome" + +-- Add download support +require "downloads" +require "downloads_chrome" + +-- Example using xdg-open for opening downloads / showing download folders +--downloads.add_signal("open-file", function (file, mime) +-- luakit.spawn(string.format("xdg-open %q", file)) +-- return true +--end) + +-- Add vimperator-like link hinting & following +require "follow" + +-- Use a custom charater set for hint labels +--local s = follow.label_styles +--follow.label_maker = s.sort(s.reverse(s.charset("asdfqwerzxcv"))) + +-- Match only hint labels +--follow.pattern_maker = follow.pattern_styles.match_label + +-- Add command history +require "cmdhist" + +-- Add search mode & binds +require "search" + +-- Add ordering of new tabs +require "taborder" + +-- Save web history +require "history" +require "history_chrome" + +require "introspector" + +-- Add command completion +require "completion" + +-- NoScript plugin, toggle scripts and or plugins on a per-domain basis. +-- `,ts` to toggle scripts, `,tp` to toggle plugins, `,tr` to reset. +-- Remove all "enable_scripts" & "enable_plugins" lines from your +-- domain_props table (in config/globals.lua) as this module will conflict. +--require "noscript" + +require "follow_selected" +require "go_input" +require "go_next_prev" +require "go_up" + +----------------------------- +-- End user script loading -- +----------------------------- + +-- Restore last saved session +local w = (session and session.restore()) +if w then + for i, uri in ipairs(uris) do + w:new_tab(uri, i == 1) + end +else + -- Or open new window + window.new(uris) +end + +------------------------------------------- +-- Open URIs from other luakit instances -- +------------------------------------------- + +if unique then + unique.add_signal("message", function (msg, screen) + local cmd, arg = string.match(msg, "^(%S+)%s*(.*)") + local w = lousy.util.table.values(window.bywidget)[1] + if cmd == "tabopen" then + w:new_tab(arg) + elseif cmd == "winopen" then + w = window.new((arg ~= "") and { arg } or {}) + end + w.win.screen = screen + w.win.urgency_hint = true + end) +end + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/theme.lua b/.config/luakit/theme.lua @@ -0,0 +1,69 @@ +-------------------------- +-- Default luakit theme -- +-------------------------- + +local theme = {} + +-- Default settings +theme.font = "monospace normal 9" +theme.fg = "#fff" +theme.bg = "#000" + +-- Genaral colours +theme.success_fg = "#0f0" +theme.loaded_fg = "#33AADD" +theme.error_fg = "#FFF" +theme.error_bg = "#F00" + +-- Warning colours +theme.warning_fg = "#F00" +theme.warning_bg = "#FFF" + +-- Notification colours +theme.notif_fg = "#444" +theme.notif_bg = "#FFF" + +-- Menu colours +theme.menu_fg = "#000" +theme.menu_bg = "#fff" +theme.menu_selected_fg = "#000" +theme.menu_selected_bg = "#FF0" +theme.menu_title_bg = "#fff" +theme.menu_primary_title_fg = "#f00" +theme.menu_secondary_title_fg = "#666" + +-- Proxy manager +theme.proxy_active_menu_fg = '#000' +theme.proxy_active_menu_bg = '#FFF' +theme.proxy_inactive_menu_fg = '#888' +theme.proxy_inactive_menu_bg = '#FFF' + +-- Statusbar specific +theme.sbar_fg = "#fff" +theme.sbar_bg = "#000" + +-- Downloadbar specific +theme.dbar_fg = "#fff" +theme.dbar_bg = "#000" +theme.dbar_error_fg = "#F00" + +-- Input bar specific +theme.ibar_fg = "#000" +theme.ibar_bg = "#fff" + +-- Tab label +theme.tab_fg = "#888" +theme.tab_bg = "#222" +theme.tab_ntheme = "#ddd" +theme.selected_fg = "#fff" +theme.selected_bg = "#000" +theme.selected_ntheme = "#ddd" +theme.loading_fg = "#33AADD" +theme.loading_bg = "#000" + +-- Trusted/untrusted ssl colours +theme.trust_fg = "#0F0" +theme.notrust_fg = "#F00" + +return theme +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/webview.lua b/.config/luakit/webview.lua @@ -0,0 +1,350 @@ +-------------------------- +-- WebKit WebView class -- +-------------------------- + +-- Webview class table +webview = {} + +-- Table of functions which are called on new webview widgets. +webview.init_funcs = { + -- Set useragent + set_useragent = function (view, w) + view.user_agent = globals.useragent + end, + + -- Check if checking ssl certificates + checking_ssl = function (view, w) + local ca_file = soup.ssl_ca_file + if ca_file and os.exists(ca_file) then + w.checking_ssl = true + end + end, + + -- Update window and tab titles + title_update = function (view, w) + view:add_signal("property::title", function (v) + w:update_tablist() + if w.view == v then + w:update_win_title() + end + end) + end, + + -- Update uri label in statusbar + uri_update = function (view, w) + view:add_signal("property::uri", function (v) + w:update_tablist() + if w.view == v then + w:update_uri() + end + end) + end, + + -- Update history indicator + hist_update = function (view, w) + view:add_signal("load-status", function (v, status) + if w.view == v then + w:update_hist() + end + end) + end, + + -- Update tab titles + tablist_update = function (view, w) + view:add_signal("load-status", function (v, status) + if status == "provisional" or status == "finished" or status == "failed" then + w:update_tablist() + end + end) + end, + + -- Update scroll widget + scroll_update = function (view, w) + view:add_signal("expose", function (v) + if w.view == v then + w:update_scroll() + end + end) + end, + + -- Update progress widget + progress_update = function (view, w) + for _, sig in ipairs({"load-status", "property::progress"}) do + view:add_signal(sig, function (v) + if w.view == v then + w:update_progress() + w:update_ssl() + end + end) + end + end, + + -- Display hovered link in statusbar + link_hover_display = function (view, w) + view:add_signal("link-hover", function (v, link) + if w.view == v and link then + w:update_uri(link) + end + end) + view:add_signal("link-unhover", function (v) + if w.view == v then + w:update_uri() + end + end) + end, + + -- Clicking a form field automatically enters insert mode. + form_insert_mode = function (view, w) + view:add_signal("button-press", function (v, mods, button, context) + -- Clear start search marker + (w.search_state or {}).marker = nil + + if button == 1 and context.editable then + view:emit_signal("form-active") + end + end) + -- Emit root-active event in button release to prevent "missing" + -- buttons or links when the input bar hides. + view:add_signal("button-release", function (v, mods, button, context) + if button == 1 and not context.editable then + view:emit_signal("root-active") + end + end) + view:add_signal("form-active", function () + if not w.mode.passthrough then + w:set_mode("insert") + end + end) + view:add_signal("root-active", function () + if w.mode.reset_on_focus ~= false then + w:set_mode() + end + end) + end, + + -- Catch keys in non-passthrough modes + mode_key_filter = function (view, w) + view:add_signal("key-press", function () + if not w.mode.passthrough then + return true + end + end) + end, + + -- Try to match a button event to a users button binding else let the + -- press hit the webview. + button_bind_match = function (view, w) + view:add_signal("button-release", function (v, mods, button, context) + (w.search_state or {}).marker = nil + if w:hit(mods, button, { context = context }) then + return true + end + end) + end, + + -- Reset the mode on navigation + mode_reset_on_nav = function (view, w) + view:add_signal("load-status", function (v, status) + if status == "provisional" and w.view == v then + if w.mode.reset_on_navigation ~= false then + w:set_mode() + end + end + end) + end, + + -- Domain properties + domain_properties = function (view, w) + view:add_signal("load-status", function (v, status) + if status ~= "committed" or v.uri == "about:blank" then return end + -- Get domain + local domain = lousy.uri.parse(v.uri).host + -- Strip leading www. + domain = string.match(domain or "", "^www%.(.+)") or domain or "all" + -- Build list of domain props tables to join & load. + -- I.e. for luakit.org load .luakit.org, luakit.org, .org + local props = {domain_props.all or {}, domain_props[domain] or {}} + repeat + table.insert(props, 2, domain_props["."..domain] or {}) + domain = string.match(domain, "%.(.+)") + until not domain + -- Join all property tables + for k, v in pairs(lousy.util.table.join(unpack(props))) do + info("Domain prop: %s = %s (%s)", k, tostring(v), domain) + view[k] = v + end + end) + end, + + -- Action to take on mime type decision request. + mime_decision = function (view, w) + -- Return true to accept or false to reject from this signal. + view:add_signal("mime-type-decision", function (v, uri, mime) + info("Requested link: %s (%s)", uri, mime) + -- i.e. block binary files like *.exe + --if mime == "application/octet-stream" then + -- return false + --end + end) + end, + + -- Action to take on window open request. + --window_decision = function (view, w) + -- view:add_signal("new-window-decision", function (v, uri, reason) + -- if reason == "link-clicked" then + -- window.new({uri}) + -- else + -- w:new_tab(uri) + -- end + -- return true + -- end) + --end, + + create_webview = function (view, w) + -- Return a newly created webview in a new tab + view:add_signal("create-web-view", function (v) + return w:new_tab() + end) + end, + + -- Creates context menu popup from table (and nested tables). + -- Use `true` for menu separators. + --populate_popup = function (view, w) + -- view:add_signal("populate-popup", function (v) + -- return { + -- true, + -- { "_Toggle Source", function () w:toggle_source() end }, + -- { "_Zoom", { + -- { "Zoom _In", function () w:zoom_in() end }, + -- { "Zoom _Out", function () w:zoom_out() end }, + -- true, + -- { "Zoom _Reset", function () w:zoom_set() end }, }, }, + -- } + -- end) + --end, + + -- Action to take on resource request. + resource_request_decision = function (view, w) + view:add_signal("resource-request-starting", function(v, uri) + info("Requesting: %s", uri) + -- Return false to cancel the request. + end) + end, +} + +-- These methods are present when you index a window instance and no window +-- method is found in `window.methods`. The window then checks if there is an +-- active webview and calls the following methods with the given view instance +-- as the first argument. All methods must take `view` & `w` as the first two +-- arguments. +webview.methods = { + -- Reload with or without ignoring cache + reload = function (view, w, bypass_cache) + if bypass_cache then + view:reload_bypass_cache() + else + view:reload() + end + end, + + -- Toggle source view + toggle_source = function (view, w, show) + if show == nil then + view.view_source = not view.view_source + else + view.view_source = show + end + view:reload() + end, + + -- Zoom functions + zoom_in = function (view, w, step, full_zoom) + view.full_content_zoom = not not full_zoom + step = step or globals.zoom_step or 0.1 + view.zoom_level = view.zoom_level + step + end, + + zoom_out = function (view, w, step, full_zoom) + view.full_content_zoom = not not full_zoom + step = step or globals.zoom_step or 0.1 + view.zoom_level = math.max(0.01, view.zoom_level) - step + end, + + zoom_set = function (view, w, level, full_zoom) + view.full_content_zoom = not not full_zoom + view.zoom_level = level or 1.0 + end, + + -- History traversing functions + back = function (view, w, n) + view:go_back(n or 1) + end, + + forward = function (view, w, n) + view:go_forward(n or 1) + end, +} + +function webview.methods.scroll(view, w, new) + local s = view.scroll + for _, axis in ipairs{ "x", "y" } do + -- Relative px movement + if rawget(new, axis.."rel") then + s[axis] = s[axis] + new[axis.."rel"] + + -- Relative page movement + elseif rawget(new, axis .. "pagerel") then + s[axis] = s[axis] + math.ceil(s[axis.."page_size"] * new[axis.."pagerel"]) + + -- Absolute px movement + elseif rawget(new, axis) then + local n = new[axis] + if n == -1 then + s[axis] = s[axis.."max"] + else + s[axis] = n + end + + -- Absolute page movement + elseif rawget(new, axis.."page") then + s[axis] = math.ceil(s[axis.."page_size"] * new[axis.."page"]) + + -- Absolute percent movement + elseif rawget(new, axis .. "pct") then + s[axis] = math.ceil(s[axis.."max"] * (new[axis.."pct"]/100)) + end + end +end + +function webview.new(w) + local view = widget{type = "webview"} + + view.show_scrollbars = false + view.enforce_96_dpi = false + + -- Call webview init functions + for k, func in pairs(webview.init_funcs) do + func(view, w) + end + return view +end + +-- Insert webview method lookup on window structure +table.insert(window.indexes, 1, function (w, k) + if k == "view" then + local view = w.tabs[w.tabs:current()] + if view and type(view) == "widget" and view.type == "webview" then + w.view = view + return view + end + end + -- Lookup webview method + local func = webview.methods[k] + if not func then return end + local view = w.view + if view then + return function (_, ...) return func(view, w, ...) end + end +end) + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/luakit/window.lua b/.config/luakit/window.lua @@ -0,0 +1,859 @@ +------------------ +-- Window class -- +------------------ + +require "lfs" + +-- Window class table +window = {} + +-- List of active windows by window widget +window.bywidget = setmetatable({}, { __mode = "k" }) + +-- Widget construction aliases +local function entry() return widget{type="entry"} end +local function eventbox() return widget{type="eventbox"} end +local function hbox() return widget{type="hbox"} end +local function label() return widget{type="label"} end +local function notebook() return widget{type="notebook"} end +local function vbox() return widget{type="vbox"} end + +-- Build and pack window widgets +function window.build() + -- Create a table for widgets and state variables for a window + local w = { + win = widget{type="window"}, + ebox = eventbox(), + layout = vbox(), + paned = widget{type="vpaned"}, + tabs = notebook(), + -- Tablist widget + tablist = lousy.widget.tablist(), + -- Status bar widgets + sbar = { + layout = hbox(), + ebox = eventbox(), + -- Left aligned widgets + l = { + layout = hbox(), + ebox = eventbox(), + uri = label(), + hist = label(), + loaded = label(), + }, + -- Fills space between the left and right aligned widgets + sep = eventbox(), + -- Right aligned widgets + r = { + layout = hbox(), + ebox = eventbox(), + buf = label(), + ssl = label(), + tabi = label(), + scroll = label(), + }, + }, + + -- Vertical menu window widget (completion results, bookmarks, qmarks, ..) + menu = lousy.widget.menu(), + + -- Input bar widgets + ibar = { + layout = hbox(), + ebox = eventbox(), + prompt = label(), + input = entry(), + }, + closed_tabs = {} + } + + -- Assemble window + w.ebox.child = w.paned + w.paned:pack1(w.layout) + w.win.child = w.ebox + + -- Pack tablist + w.layout:pack(w.tablist.widget) + + -- Pack notebook + w.layout:pack(w.tabs, { expand = true, fill = true }) + + -- Pack left-aligned statusbar elements + local l = w.sbar.l + l.layout:pack(l.uri) + l.layout:pack(l.hist) + l.layout:pack(l.loaded) + l.ebox.child = l.layout + + -- Pack right-aligned statusbar elements + local r = w.sbar.r + r.layout:pack(r.buf) + r.layout:pack(r.ssl) + r.layout:pack(r.tabi) + r.layout:pack(r.scroll) + r.ebox.child = r.layout + + -- Pack status bar elements + local s = w.sbar + s.layout:pack(l.ebox) + s.layout:pack(s.sep, { expand = true, fill = true }) + s.layout:pack(r.ebox) + s.ebox.child = s.layout + w.layout:pack(s.ebox) + + -- Pack menu widget + w.layout:pack(w.menu.widget) + w.menu:hide() + + -- Pack input bar + local i = w.ibar + i.layout:pack(i.prompt) + i.layout:pack(i.input, { expand = true, fill = true }) + i.ebox.child = i.layout + w.layout:pack(i.ebox) + + -- Other settings + i.input.show_frame = false + w.tabs.show_tabs = false + l.loaded:hide() + l.hist:hide() + l.uri.selectable = true + r.ssl:hide() + + -- Allows indexing of window struct by window widget + window.bywidget[w.win] = w + + return w +end + +-- Table of functions to call on window creation. Normally used to add signal +-- handlers to the new windows widgets. +window.init_funcs = { + -- Attach notebook widget signals + notebook_signals = function (w) + w.tabs:add_signal("page-added", function (nbook, view, idx) + luakit.idle_add(function () + w:update_tab_count() + w:update_tablist() + return false + end) + end) + w.tabs:add_signal("switch-page", function (nbook, view, idx) + w.view = nil + w:set_mode() + -- Update widgets after tab switch + luakit.idle_add(function () + w:update_tab_count() + w:update_win_title() + w:update_uri() + w:update_progress() + w:update_tablist() + w:update_buf() + w:update_ssl() + w:update_hist() + return false + end) + end) + w.tabs:add_signal("page-reordered", function (nbook, view, idx) + w:update_tab_count() + w:update_tablist() + end) + end, + + last_win_check = function (w) + w.win:add_signal("destroy", function () + -- call the quit function if this was the last window left + if #luakit.windows == 0 then luakit.quit() end + if w.close_win then w:close_win() end + end) + end, + + key_press_match = function (w) + w.win:add_signal("key-press", function (_, mods, key) + -- Match & exec a bind + local success, match = xpcall( + function () return w:hit(mods, key) end, + function (err) w:error(debug.traceback(err, 3)) end) + + if success and match then + return true + end + end) + end, + + tablist_tab_click = function (w) + w.tablist:add_signal("tab-clicked", function (_, index, mods, button) + if button == 1 then + w.tabs:switch(index) + return true + elseif button == 2 then + w:close_tab(w.tabs[index]) + return true + end + end) + end, + + apply_window_theme = function (w) + local s, i = w.sbar, w.ibar + + -- Set foregrounds + for wi, v in pairs({ + [s.l.uri] = theme.uri_sbar_fg, + [s.l.hist] = theme.hist_sbar_fg, + [s.l.loaded] = theme.sbar_loaded_fg, + [s.r.buf] = theme.buf_sbar_fg, + [s.r.tabi] = theme.tabi_sbar_fg, + [s.r.scroll] = theme.scroll_sbar_fg, + [i.prompt] = theme.prompt_ibar_fg, + [i.input] = theme.input_ibar_fg, + }) do wi.fg = v end + + -- Set backgrounds + for wi, v in pairs({ + [s.l.ebox] = theme.sbar_bg, + [s.r.ebox] = theme.sbar_bg, + [s.sep] = theme.sbar_bg, + [s.ebox] = theme.sbar_bg, + [i.ebox] = theme.ibar_bg, + [i.input] = theme.input_ibar_bg, + }) do wi.bg = v end + + -- Set fonts + for wi, v in pairs({ + [s.l.uri] = theme.uri_sbar_font, + [s.l.hist] = theme.hist_sbar_font, + [s.l.loaded] = theme.sbar_loaded_font, + [s.r.buf] = theme.buf_sbar_font, + [s.r.ssl] = theme.ssl_sbar_font, + [s.r.tabi] = theme.tabi_sbar_font, + [s.r.scroll] = theme.scroll_sbar_font, + [i.prompt] = theme.prompt_ibar_font, + [i.input] = theme.input_ibar_font, + }) do wi.font = v end + end, + + set_default_size = function (w) + local size = globals.default_window_size or "800x600" + if string.match(size, "^%d+x%d+$") then + w.win:set_default_size(string.match(size, "^(%d+)x(%d+)$")) + else + warn("E: window.lua: invalid window size: %q", size) + end + end, + + set_window_icon = function (w) + local path = (luakit.dev_paths and os.exists("./extras/luakit.png")) or + os.exists("/usr/share/pixmaps/luakit.png") + if path then w.win.icon = path end + end, + + clear_urgency_hint = function (w) + w.win:add_signal("focus", function () + w.win.urgency_hint = false + end) + end, +} + +-- Helper functions which operate on the window widgets or structure. +window.methods = { + -- Wrapper around the bind plugin's hit method + hit = function (w, mods, key, opts) + local opts = lousy.util.table.join(opts or {}, { + enable_buffer = w:is_mode("normal"), + buffer = w.buffer, + }) + + local caught, newbuf = lousy.bind.hit(w, w.binds, mods, key, opts) + if w.win then -- Check binding didn't cause window to exit + w.buffer = newbuf + w:update_buf() + end + return caught + end, + + -- Wrapper around the bind plugin's match_cmd method + match_cmd = function (w, buffer) + return lousy.bind.match_cmd(w, get_mode("command").binds, buffer) + end, + + -- enter command or characters into command line + enter_cmd = function (w, cmd, opts) + w:set_mode("command") + w:set_input(cmd, opts) + end, + + -- run command as if typed into the command line + run_cmd = function (w, cmd, opts) + w:enter_cmd(cmd, opts) + w:activate() + end, + + -- insert a string into the command line at the current cursor position + insert_cmd = function (w, str) + if not str then return end + local i = w.ibar.input + local text = i.text + local pos = i.position + local left, right = string.sub(text, 1, pos), string.sub(text, pos+1) + i.text = left .. str .. right + i.position = pos + #str + end, + + -- Emulates pressing the Return key in input field + activate = function (w) + w.ibar.input:emit_signal("activate") + end, + + del_word = function (w) + local i = w.ibar.input + local text = i.text + local pos = i.position + if text and #text > 1 and pos > 1 then + local left, right = string.sub(text, 2, pos), string.sub(text, pos+1) + if not string.find(left, "%s") then + left = "" + elseif string.find(left, "%w+%s*$") then + left = string.sub(left, 0, string.find(left, "%w+%s*$") - 1) + elseif string.find(left, "%W+%s*$") then + left = string.sub(left, 0, string.find(left, "%W+%s*$") - 1) + end + i.text = string.sub(text, 1, 1) .. left .. right + i.position = #left + 1 + end + end, + + del_line = function (w) + local i = w.ibar.input + if not string.match(i.text, "^[:/?]$") then + i.text = string.sub(i.text, 1, 1) + i.position = -1 + end + end, + + del_backward_char = function (w) + local i = w.ibar.input + local text = i.text + local pos = i.position + + if pos > 1 then + i.text = string.sub(text, 0, pos - 1) .. string.sub(text, pos + 1) + i.position = pos - 1 + end + end, + + del_forward_char = function (w) + local i = w.ibar.input + local text = i.text + local pos = i.position + + i.text = string.sub(text, 0, pos) .. string.sub(text, pos + 2) + i.position = pos + end, + + beg_line = function (w) + local i = w.ibar.input + i.position = 1 + end, + + end_line = function (w) + local i = w.ibar.input + i.position = -1 + end, + + forward_char = function (w) + local i = w.ibar.input + i.position = i.position + 1 + end, + + backward_char = function (w) + local i = w.ibar.input + local pos = i.position + if pos > 1 then + i.position = pos - 1 + end + end, + + forward_word = function (w) + local i = w.ibar.input + local text = i.text + local pos = i.position + if text and #text > 1 then + local right = string.sub(text, pos+1) + if string.find(right, "%w+") then + local _, move = string.find(right, "%w+") + i.position = pos + move + end + end + end, + + backward_word = function (w) + local i = w.ibar.input + local text = i.text + local pos = i.position + if text and #text > 1 and pos > 1 then + local left = string.reverse(string.sub(text, 2, pos)) + if string.find(left, "%w+") then + local _, move = string.find(left, "%w+") + i.position = pos - move + end + end + end, + + -- Shows a notification until the next keypress of the user. + notify = function (w, msg, set_mode) + if set_mode ~= false then w:set_mode() end + w:set_prompt(msg, { fg = theme.notif_fg, bg = theme.notif_bg }) + end, + + warning = function (w, msg, set_mode) + if set_mode ~= false then w:set_mode() end + w:set_prompt(msg, { fg = theme.warning_fg, bg = theme.warning_bg }) + end, + + error = function (w, msg, set_mode) + if set_mode ~= false then w:set_mode() end + w:set_prompt("Error: "..msg, { fg = theme.error_fg, bg = theme.error_bg }) + end, + + -- Set and display the prompt + set_prompt = function (w, text, opts) + local prompt, ebox, opts = w.ibar.prompt, w.ibar.ebox, opts or {} + prompt:hide() + -- Set theme + fg, bg = opts.fg or theme.ibar_fg, opts.bg or theme.ibar_bg + if prompt.fg ~= fg then prompt.fg = fg end + if ebox.bg ~= bg then ebox.bg = bg end + -- Set text or remain hidden + if text then + prompt.text = lousy.util.escape(text) + prompt:show() + end + end, + + -- Set display and focus the input bar + set_input = function (w, text, opts) + local input, opts = w.ibar.input, opts or {} + input:hide() + -- Set theme + fg, bg = opts.fg or theme.ibar_fg, opts.bg or theme.ibar_bg + if input.fg ~= fg then input.fg = fg end + if input.bg ~= bg then input.bg = bg end + -- Set text or remain hidden + if text then + input.text = "" + input:show() + input:focus() + input.text = text + input.position = opts.pos or -1 + end + end, + + -- GUI content update functions + update_tab_count = function (w) + w.sbar.r.tabi.text = string.format("[%d/%d]", w.tabs:current(), w.tabs:count()) + end, + + update_win_title = function (w) + local uri, title = w.view.uri, w.view.title + title = (title or "luakit") .. ((uri and " - " .. uri) or "") + local max = globals.max_title_len or 80 + if #title > max then title = string.sub(title, 1, max) .. "..." end + w.win.title = title + end, + + update_uri = function (w, link) + w.sbar.l.uri.text = lousy.util.escape((link and "Link: " .. link) + or (w.view and w.view.uri) or "about:blank") + end, + + update_progress = function (w) + local p = w.view.progress + local loaded = w.sbar.l.loaded + if not w.view:loading() or p == 1 then + loaded:hide() + else + loaded:show() + loaded.text = string.format("(%d%%)", p * 100) + end + end, + + update_scroll = function (w) + local scroll, label = w.view.scroll, w.sbar.r.scroll + local y, max, text = scroll.y, scroll.ymax + if max == 0 then text = "All" + elseif y == 0 then text = "Top" + elseif y == max then text = "Bot" + else text = string.format("%2d%%", (y / max) * 100) + end + if label.text ~= text then label.text = text end + end, + + update_ssl = function (w) + local trusted = w.view:ssl_trusted() + local ssl = w.sbar.r.ssl + if trusted ~= nil and not w.checking_ssl then + ssl.fg = theme.notrust_fg + ssl.text = "(nocheck)" + ssl:show() + elseif trusted == true then + ssl.fg = theme.trust_fg + ssl.text = "(trust)" + ssl:show() + elseif trusted == false then + ssl.fg = theme.notrust_fg + ssl.text = "(notrust)" + ssl:show() + else + ssl:hide() + end + end, + + update_hist = function (w) + local hist = w.sbar.l.hist + local back, forward = w.view:can_go_back(), w.view:can_go_forward() + local s = (back and "+" or "") .. (forward and "-" or "") + if s ~= "" then + hist.text = '['..s..']' + hist:show() + else + hist:hide() + end + end, + + update_buf = function (w) + local buf = w.sbar.r.buf + if w.buffer then + buf.text = lousy.util.escape(string.format(" %-3s", w.buffer)) + buf:show() + else + buf:hide() + end + end, + + update_binds = function (w, mode) + -- Generate the list of active key & buffer binds for this mode + w.binds = lousy.util.table.join((get_mode(mode) or {}).binds or {}, get_mode('all').binds or {}) + -- Clear & hide buffer + w.buffer = nil + w:update_buf() + end, + + update_tablist = function (w) + local current = w.tabs:current() + local fg, bg, nfg, snfg = theme.tab_fg, theme.tab_bg, theme.tab_ntheme, theme.selected_ntheme + local lfg, bfg, gfg = theme.tab_loading_fg, theme.tab_notrust_fg, theme.tab_trust_fg + local escape = lousy.util.escape + local tabs, tfmt = {}, ' <span foreground="%s">%s</span> %s' + + for i, view in ipairs(w.tabs.children) do + -- Get tab number theme + local ntheme = nfg + if view:loading() then -- Show loading on all tabs + ntheme = lfg + elseif current == i then -- Show ssl trusted/untrusted on current tab + local trusted = view:ssl_trusted() + ntheme = snfg + if trusted == false or (trusted ~= nil and not w.checking_ssl) then + ntheme = bfg + elseif trusted then + ntheme = gfg + end + end + local title = view.title or view.uri or "(Untitled)" + tabs[i] = { + title = string.format(tfmt, ntheme or fg, i, escape(title)), + fg = (current == i and theme.tab_selected_fg) or fg, + bg = (current == i and theme.tab_selected_bg) or bg, + } + end + + if #tabs < 2 then tabs, current = {}, 0 end + w.tablist:update(tabs, current) + end, + + new_tab = function (w, arg, switch, order) + local view + -- Use blank tab first + if w.has_blank and w.tabs:count() == 1 and w.tabs[1].uri == "about:blank" then + view = w.tabs[1] + end + w.has_blank = nil + -- Make new webview widget + if not view then + view = webview.new(w) + -- Get tab order function + if not order and taborder then + order = (switch == false and taborder.default_bg) + or taborder.default + end + pos = w.tabs:insert((order and order(w, view)) or -1, view) + if switch ~= false then w.tabs:switch(pos) end + end + -- Load uri or webview history table + if type(arg) == "string" then view.uri = arg + elseif type(arg) == "table" then view.history = arg end + -- Update statusbar widgets + w:update_tab_count() + w:update_tablist() + return view + end, + + -- close the current tab + close_tab = function (w, view, blank_last) + view = view or w.view + -- Treat a blank last tab as an empty notebook (if blank_last=true) + if blank_last ~= false and w.tabs:count() == 1 then + if not view:loading() and view.uri == "about:blank" then return end + w:new_tab("about:blank", false) + w.has_blank = true + end + -- Save tab history + local tab = {hist = view.history,} + -- And relative location + local index = w.tabs:indexof(view) + if index ~= 1 then tab.after = w.tabs[index-1] end + table.insert(w.closed_tabs, tab) + view:destroy() + w:update_tab_count() + w:update_tablist() + end, + + close_win = function (w, force) + -- Ask plugins if it's OK to close last window + if not force and (#luakit.windows == 1) then + local emsg = luakit.emit_signal("can-close", w) + if emsg then + assert(type(emsg) == "string", "invalid exit error message") + w:error(string.format("Can't close luakit: %s (force close " + .. "with :q! or :wq!)", emsg)) + return false + end + end + + w:emit_signal("close") + + -- Close all tabs + while w.tabs:count() ~= 0 do + w:close_tab(nil, false) + end + + -- Destroy tablist + w.tablist:destroy() + + -- Remove from window index + window.bywidget[w.win] = nil + + -- Clear window struct + w = setmetatable(w, {}) + + -- Recursively remove widgets from window + local children = lousy.util.recursive_remove(w.win) + -- Destroy all widgets + for i, c in ipairs(lousy.util.table.join(children, {w.win})) do + if c.hide then c:hide() end + c:destroy() + end + + -- Remove all window table vars + for k, _ in pairs(w) do w[k] = nil end + + -- Quit if closed last window + if #luakit.windows == 0 then luakit.quit() end + end, + + -- Navigate current view or open new tab + navigate = function (w, uri, view) + view = view or w.view + if view then + local js = string.match(uri, "^javascript:(.+)$") + if js then + return view:eval_js(luakit.uri_decode(js)) + end + view.uri = uri + else + return w:new_tab(uri) + end + end, + + -- Save, restart luakit and reload session. + restart = function (w) + -- Generate luakit launch command. + local args = {({string.gsub(luakit.execpath, " ", "\\ ")})[1]} + if luakit.verbose then table.insert(args, "-v") end + -- Relaunch without libunique bindings? + if luakit.nounique then table.insert(args, "-U") end + + -- Get new config path + local conf + if luakit.confpath ~= "/etc/xdg/luakit/rc.lua" and os.exists(luakit.confpath) then + conf = luakit.confpath + table.insert(args, string.format("-c %q", conf)) + end + + -- Check config has valid syntax + local cmd = table.concat(args, " ") + if luakit.spawn_sync(cmd .. " -k") ~= 0 then + return w:error("Cannot restart, syntax error in configuration file"..((conf and ": "..conf) or ".")) + end + + -- Save session. + local wins = {} + for _, w in pairs(window.bywidget) do table.insert(wins, w) end + session.save(wins) + + -- Replace current process with new luakit instance. + luakit.exec(cmd) + end, + + -- Intelligent open command which can detect a uri or search argument. + search_open = function (w, arg) + local lstring = lousy.util.string + local match, find = string.match, string.find + + -- Detect blank uris + if not arg or match(arg, "^%s*$") then return "about:blank" end + + -- Strip whitespace and split by whitespace into args table + local args = lstring.split(lstring.strip(arg)) + + -- Guess if first argument is an address, search engine, file + if #args == 1 then + local uri = args[1] + if uri == "about:blank" then return uri end + + -- Check if search engine name + if search_engines[uri] then + return string.format(search_engines[uri], "") + end + + -- Navigate if . or / in uri (I.e. domains, IP's, scheme://) + if find(uri, "%.") or find(uri, "/") then return uri end + + -- Navigate if this is a javascript-uri + if find(uri, "^javascript:") then return uri end + + -- Valid hostnames to check + local hosts = { "localhost" } + if globals.load_etc_hosts ~= false then + hosts = lousy.util.get_etc_hosts() + end + + -- Check hostnames + for _, h in pairs(hosts) do + if h == uri or match(uri, "^"..h..":%d+$") then return uri end + end + + -- Check for file in filesystem + if globals.check_filepath ~= false then + if lfs.attributes(uri) then return "file://" .. uri end + end + end + + -- Find search engine (or use search_engines.default) + local engine = "default" + if args[1] and search_engines[args[1]] then + engine = args[1] + table.remove(args, 1) + end + + -- URI encode search terms + local terms = luakit.uri_encode(table.concat(args, " ")) + return string.format(search_engines[engine], terms) + end, + + -- Increase (or decrease) the last found number in the current uri + inc_uri = function (w, arg) + local uri = string.gsub(w.view.uri, "(%d+)([^0-9]*)$", function (num, rest) + return string.format("%0"..#num.."d", tonumber(num) + (arg or 1)) .. rest + end) + return uri + end, + + -- Tab traversing functions + next_tab = function (w, n) + w.tabs:switch((((n or 1) + w.tabs:current() -1) % w.tabs:count()) + 1) + end, + + prev_tab = function (w, n) + w.tabs:switch(((w.tabs:current() - (n or 1) -1) % w.tabs:count()) + 1) + end, + + goto_tab = function (w, n) + if n and (n == -1 or n > 0) then + return w.tabs:switch((n <= w.tabs:count() and n) or -1) + end + end, + + -- For each tab, switches to that tab and calls the given function passing + -- it the view contained in the tab. + each_tab = function (w, fn) + for index = 1, w.tabs:count() do + w:goto_tab(index) + fn(w.tabs[index]) + end + end, + + -- If argument is form-active or root-active, emits signal. Ignores all + -- other signals. + emit_form_root_active_signal = function (w, s) + if s == "form-active" then + w.view:emit_signal("form-active") + elseif s == "root-active" then + w.view:emit_signal("root-active") + end + end, +} + +-- Ordered list of class index functions. Other classes (E.g. webview) are able +-- to add their own index functions to this list. +window.indexes = { + -- Find function in window.methods first + function (w, k) return window.methods[k] end +} + +-- Create new window +function window.new(uris) + local w = window.build() + + -- Set window metatable + setmetatable(w, { + __index = function (_, k) + -- Check widget structure first + local v = rawget(w, k) + if v then return v end + -- Call each window index function + for _, index in ipairs(window.indexes) do + v = index(w, k) + if v then return v end + end + end, + }) + + -- Setup window widget for signals + lousy.signal.setup(w) + + -- Call window init functions + for _, func in pairs(window.init_funcs) do + func(w) + end + + -- Populate notebook with tabs + for _, uri in ipairs(uris or {}) do + w:new_tab(w:search_open(uri), false) + end + + -- Make sure something is loaded + if w.tabs:count() == 0 then + w:new_tab(w:search_open(globals.homepage), false) + end + + -- Set initial mode + w:set_mode() + + -- Show window + w.win:show() + + return w +end + +-- vim: et:sw=4:ts=8:sts=4:tw=80 diff --git a/.config/openbox/autostart b/.config/openbox/autostart @@ -0,0 +1,94 @@ +## Openbox autostart.sh +## ==================== +## When you login to your CrunchBang Openbox session, this autostart script +## will be executed to set-up your environment and launch any applications +## you want to run at startup. +## +## Note*: some programs, such as 'nm-applet' are run via XDG autostart. +## Run '/usr/lib/openbox/openbox-xdg-autostart --list' to list any +## XDG autostarted programs. +## +## More information about this can be found at: +## http://openbox.org/wiki/Help:Autostart +## +## If you do something cool with your autostart script and you think others +## could benefit from your hack, please consider sharing it at: +## http://crunchbang.org/forums/ +## +## Have fun & happy CrunchBangin'! :) + +## GNOME PolicyKit and Keyring +eval $(gnome-keyring-daemon -s --components=pkcs11,secrets,ssh,gpg) & + +## Set root window colour +hsetroot -solid "#2E3436" & + +## Group start: +## 1. nitrogen - restores wallpaper +## 2. compositor - start +## 3. sleep - give compositor time to start +## 4. tint2 panel +(\ +nitrogen --restore && \ +cb-compositor --start && \ +sleep 2s && \ +tint2 \ +) & + +## Volume control for systray +(sleep 2s && pnmixer) & + +## Volume keys daemon +xfce4-volumed & + +## Enable power management +xfce4-power-manager & + +## Start Thunar Daemon +thunar --daemon & + +## Detect and configure touchpad. See 'man synclient' for more info. +if egrep -iq 'touchpad' /proc/bus/input/devices; then + synclient VertEdgeScroll=1 & + synclient TapButton1=1 & +fi + +## Start xscreensaver +xscreensaver -no-splash & + +## Start Clipboard manager +(sleep 3s && clipit) & + +## Set keyboard settings - 250 ms delay and 25 cps (characters per second) repeat rate. +## Adjust the values according to your preferances. +xset r rate 250 25 & + +## Turn on/off system beep +xset b off & + +## The following command runs hacks and fixes for #! LiveCD sessions. +## Safe to delete after installation. +cb-cowpowers & + +## cb-welcome - post-installation script, will not run in a live session and +## only runs once. Safe to remove. +(sleep 10s && cb-welcome --firstrun) & + +## cb-fortune - have Waldorf say a little adage +#(sleep 120s && cb-fortune) & + +## Run the conky +conky -q & + +# Autostart the Dropbox deamon +(sleep 60s && ~/.dropbox-dist/dropboxd) & + +# Enable tap-to-click on touchpad +synclient TapButton1=1 +synclient TapButton2=2 +synclient TapButton3=3 + +# Custom key bindings from ~/.xbindkeysrc +xbindkeys + + diff --git a/.config/openbox/menu.xml b/.config/openbox/menu.xml @@ -0,0 +1,524 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<openbox_menu xmlns="http://openbox.org/" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://openbox.org/ + file:///usr/share/openbox/menu.xsd"> + + <menu id="root-menu" label="Openbox 3"> + <item label="Run Program"> + <action name="Execute"> + <command> + gmrun + </command> + </action> + </item> + <separator/> + <item label="Terminal"> + <action name="Execute"> + <command> + terminator + </command> + </action> + </item> + <item label="Web Browser"> + <action name="Execute"> + <command> + x-www-browser + </command> + </action> + </item> + <item label="File Manager"> + <action name="Execute"> + <command> + thunar + </command> + </action> + </item> + <item label="Text Editor"> + <action name="Execute"> + <command> + geany + </command> + </action> + </item> + <item label="Media Player"> + <action name="Execute"> + <command> + vlc + </command> + </action> + </item> + <separator/> + <menu id="accessories" label="Accessories"> + <item label="Catfish File Search"> + <action name="Execute"> + <command> + catfish + </command> + </action> + </item> + <item label="Archive Manager"> + <action name="Execute"> + <command> + file-roller + </command> + </action> + </item> + <item label="Geany Text Editor"> + <action name="Execute"> + <command> + geany + </command> + </action> + </item> + <item label="Task Manager (htop)"> + <action name="Execute"> + <command>terminator --command=&quot;htop&quot;</command> + </action> + </item> + <item label="Terminator Terminal"> + <action name="Execute"> + <command> + terminator + </command> + </action> + </item> + <item label="Thunar File Manager"> + <action name="Execute"> + <command> + thunar + </command> + </action> + </item> + <item label="Thunar File Manager (root)"> + <action name="Execute"> + <command> + gksudo thunar + </command> + </action> + </item> + </menu> + <menu id="graphics" label="Graphics"> + <item label="GIMP"> + <action name="Execute"> + <command> + gimp + </command> + </action> + </item> + <item label="Viewnior Image Viewer"> + <action name="Execute"> + <command> + viewnior + </command> + </action> + </item> + <menu id="graphicsScreenshots" label="Take Screenshot"> + <item label="Screenshooter"> + <action name="Execute"> + <command> + xfce4-screenshooter + </command> + </action> + </item> + <separator label="scrot"/> + <item label="Now"> + <action name="Execute"> + <command> + scrot '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; viewnior ~/images/$f' + </command> + </action> + </item> + <item label="In 5 Seconds..."> + <action name="Execute"> + <command> + scrot -d 5 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; viewnior ~/images/$f' + </command> + </action> + </item> + <item label="In 10 Seconds..."> + <action name="Execute"> + <command> + scrot -d 10 '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; viewnior ~/images/$f' + </command> + </action> + </item> + <item label="Selected Area... (click &amp; drag mouse)"> + <action name="Execute"> + <command> + scrot -s '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; viewnior ~/images/$f' + </command> + </action> + </item> + </menu> + </menu> + <menu id="multimedia" label="Multimedia"> + <item label="VLC Media Player"> + <action name="Execute"> + <command> + vlc + </command> + </action> + </item> + <item label="Volume Control"> + <action name="Execute"> + <command> + pavucontrol + </command> + </action> + </item> + <item label="Xfburn"> + <action name="Execute"> + <command> + xfburn + </command> + </action> + </item> + </menu> + <menu id="network" label="Network"> + <menu execute="cb-x-www-browser-pipemenu" id="wwwbrowsers" label="WWW Browsers"/> + <item label="gFTP Client"> + <action name="Execute"> + <command> + gftp + </command> + </action> + </item> + <item label="Transmission BitTorrent Client"> + <action name="Execute"> + <command> + transmission-gtk + </command> + </action> + </item> + <item label="XChat IRC Client"> + <action name="Execute"> + <command> + xchat + </command> + </action> + </item> + <item label="Remote Filesystems"> + <action name="Execute"> + <command> + gigolo + </command> + </action> + </item> + <menu execute="cb-remote-desktop-pipemenu" id="remotedesktop" label="Remote Desktop"/> + <menu execute="cb-sshconfig-pipemenu" id="sshconfig" label="SSH"/> + <separator label="Services"/> + <menu execute="cb-dropbox-pipemenu" id="dropbox" label="Dropbox"/> + </menu> + <menu id="office" label="Office"> + <menu id="libreoffice" label="LibreOffice" execute="cb-libreoffice-pipemenu" /> + <item label="Google Docs"> + <action name="Execute"> + <command> + x-www-browser https://drive.google.com/ + </command> + </action> + </item> + <item label="AbiWord Word Processor"> + <action name="Execute"> + <command> + abiword + </command> + </action> + </item> + <item label="Gnumeric Spreadsheet"> + <action name="Execute"> + <command> + gnumeric + </command> + </action> + </item> + <item label="Calculator"> + <action name="Execute"> + <command> + galculator + </command> + </action> + </item> + <item label="Evince PDF Viewer"> + <action name="Execute"> + <command> + evince + </command> + </action> + </item> + </menu> + <separator/> + <menu execute="cb-places-pipemenu" id="pipe-placesmenu" label="Places"/> + <menu execute="cb-recent-files-pipemenu" id="pipe-recentfilesmenu" label="Recent Files"/> + <separator/> + <menu id="settings" label="Settings"> + <menu execute="cb-compositor" id="CompositingPipeMenu" label="Compositor"/> + <menu id="conkyconfig" label="Conky"> + <item label="Edit .conkyrc"> + <action name="Execute"> + <command> + geany ~/.conkyrc + </command> + </action> + </item> + <item label="Restart Conky"> + <action name="Execute"> + <command> + conkywonky + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man page"> + <action name="Execute"> + <command> + terminator --command="man conky" + </command> + </action> + </item> + <item label="Wiki Page"> + <action name="Execute"> + <command> + x-www-browser http://crunchbanglinux.org/wiki/conky + </command> + </action> + </item> + </menu> + <menu id="dmenuconfig" label="dmenu"> + <item label="Edit start-up script"> + <action name="Execute"> + <command> + geany ~/.config/dmenu/dmenu-bind.sh + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man page"> + <action name="Execute"> + <command> + terminator --command="man dmenu" + </command> + </action> + </item> + </menu> + <menu id="gmrunconfig" label="gmrun"> + <item label="Edit config file"> + <action name="Execute"> + <command> + geany ~/.gmrunrc + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man page"> + <action name="Execute"> + <command> + terminator --command="man gmrun" + </command> + </action> + </item> + </menu> + <menu id="obConfig" label="Openbox"> + <item label="Edit menu.xml"> + <action name="Execute"> + <command> + geany ~/.config/openbox/menu.xml + </command> + </action> + </item> + <item label="Edit rc.xml"> + <action name="Execute"> + <command> + geany ~/.config/openbox/rc.xml + </command> + </action> + </item> + <item label="Edit autostart"> + <action name="Execute"> + <command> + geany ~/.config/openbox/autostart + </command> + </action> + </item> + <separator/> + <item label="GUI Menu Editor"> + <action name="Execute"> + <command> + obmenu + </command> + </action> + </item> + <item label="GUI Applications Settings Editor"> + <action name="Execute"> + <command> + obapps + </command> + </action> + </item> + <item label="GUI Config Tool"> + <action name="Execute"> + <command> + obconf + </command> + </action> + </item> + <separator/> + <item label="Reconfigure"> + <action name="Reconfigure"/> + </item> + <item label="Restart"> + <action name="Restart"/> + </item> + </menu> + <menu id="terminatorconfig" label="Terminator"> + <item label="Edit config file"> + <action name="Execute"> + <command> + geany ~/.config/terminator/config + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man page"> + <action name="Execute"> + <command> + terminator --command="man terminator_config" + </command> + </action> + </item> + </menu> + <menu id="tint2config" label="tint2"> + <item label="Edit config file"> + <action name="Execute"> + <command> + geany ~/.config/tint2/tint2rc + </command> + </action> + </item> + <item label="Restart tint2"> + <action name="Execute"> + <command> + tint2restart + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man page"> + <action name="Execute"> + <command> + terminator --command="man tint2" + </command> + </action> + </item> + <item label="Online Help"> + <action name="Execute"> + <command> + x-www-browser http://code.google.com/p/tint2/wiki/Welcome + </command> + </action> + </item> + </menu> + <menu id="DisplaySettings" label="Display Settings"> + <item label="ARandR Screen Layout Editor"> + <action name="Execute"> + <command> + arandr + </command> + </action> + </item> + <separator label="Help?"/> + <item label="man xrandr"> + <action name="Execute"> + <command> + terminator --command="man xrandr" + </command> + </action> + </item> + </menu> + <menu id="Notifications" label="Notifications"> + <item label="settings"> + <action name="Execute"> + <command>xfce4-notifyd-config</command> + </action> + </item> + </menu> + <item label="Edit Default Applications"> + <action name="Execute"> + <command> + terminator --command="sudo update-alternatives --all" + </command> + </action> + </item> + <item label="User Interface Settings"> + <action name="Execute"> + <command> + lxappearance + </command> + </action> + </item> + <item label="Power Management"> + <action name="Execute"> + <command> + xfce4-power-manager-settings + </command> + </action> + </item> + <item label="Screensaver"> + <action name="Execute"> + <command> + xscreensaver-demo + </command> + </action> + </item> + <item label="Choose Wallpaper"> + <action name="Execute"> + <command> + nitrogen ~/images/wallpapers/ + </command> + </action> + </item> + </menu> + <menu id="system" label="System"> + <menu execute="cb-printing-pipemenu" id="PrintingPipeMenu" label="Printers"/> + <item label="GParted"> + <action name="Execute"> + <command> + gksudo gparted + </command> + </action> + </item> + <item label="Synaptic Package Manager"> + <action name="Execute"> + <command> + gksudo synaptic + </command> + </action> + </item> + <item label="User Login Settings"> + <action name="Execute"> + <command> + gksudo slimconf + </command> + </action> + </item> + </menu> + <!--<menu id="help" label="Help" execute="cb-help-pipemenu" />--> + <separator/> + <item label="Lock Screen"> + <action name="Execute"> + <command> + cb-lock + </command> + </action> + </item> + <item label="Exit"> + <action name="Execute"> + <command> + cb-exit + </command> + </action> + </item> + </menu> +</openbox_menu> diff --git a/.config/openbox/rc.xml b/.config/openbox/rc.xml @@ -0,0 +1,1002 @@ +<?xml version="1.0" encoding="UTF-8"?> +<openbox_config xmlns="http://openbox.org/3.4/rc" xmlns:xi="http://www.w3.org/2001/XInclude"> + <resistance> + <strength>10</strength> + <screen_edge_strength>20</screen_edge_strength> + </resistance> + <focus> + <focusNew>yes</focusNew> + <!-- always try to focus new windows when they appear. other rules do + apply --> + <followMouse>no</followMouse> + <!-- move focus to a window when you move the mouse into it --> + <focusLast>yes</focusLast> + <!-- focus the last used window when changing desktops, instead of the one + under the mouse pointer. when followMouse is enabled --> + <underMouse>no</underMouse> + <!-- move focus under the mouse, even when the mouse is not moving --> + <focusDelay>200</focusDelay> + <!-- when followMouse is enabled, the mouse must be inside the window for + this many milliseconds (1000 = 1 sec) before moving focus to it --> + <raiseOnFocus>no</raiseOnFocus> + <!-- when followMouse is enabled, and a window is given focus by moving the + mouse into it, also raise the window --> + </focus> + <placement> + <policy>Smart</policy> + <!-- 'Smart' or 'UnderMouse' --> + <center>yes</center> + <!-- whether to place windows in the center of the free area found or + the top left corner --> + <monitor>Any</monitor> + <!-- with Smart placement on a multi-monitor system, try to place new windows + on: 'Any' - any monitor, 'Mouse' - where the mouse is, 'Active' - where + the active window is, 'Primary' - only on the primary monitor --> + <primaryMonitor>1</primaryMonitor> + <!-- The monitor where Openbox should place popup dialogs such as the + focus cycling popup, or the desktop switch popup. It can be an index + from 1, specifying a particular monitor. Or it can be one of the + following: 'Mouse' - where the mouse is, or + 'Active' - where the active window is --> + </placement> + <theme> + <name>waldorf</name> + <titleLayout>DSLIMC</titleLayout> + <!-- + avaible characters are NDSLIMC, each can occur at most once. + N: window icon + L: window label (AKA title). + I: iconify + M: maximize + C: close + S: shade (roll up/down) + D: omnipresent (on all desktops). + --> + <keepBorder>yes</keepBorder> + <animateIconify>no</animateIconify> + <font place="ActiveWindow"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Bold</weight> + <!-- 'bold' or 'normal' --> + <slant>Normal</slant> + <!-- 'italic' or 'normal' --> + </font> + <font place="InactiveWindow"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Normal</weight> + <!-- 'bold' or 'normal' --> + <slant>Normal</slant> + <!-- 'italic' or 'normal' --> + </font> + <font place="MenuHeader"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Normal</weight> + <!-- 'bold' or 'normal' --> + <slant>Normal</slant> + <!-- 'italic' or 'normal' --> + </font> + <font place="MenuItem"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Normal</weight> + <!-- 'bold' or 'normal' --> + <slant>Normal</slant> + <!-- 'italic' or 'normal' --> + </font> + <font place="ActiveOnScreenDisplay"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Normal</weight> + <!-- 'bold' or 'normal' --> + <slant>normal</slant> + <!-- 'italic' or 'normal' --> + </font> + <font place="InactiveOnScreenDisplay"> + <name>Liberation Sans</name> + <size>10</size> + <!-- font size in points --> + <weight>Normal</weight> + <!-- 'bold' or 'normal' --> + <slant>normal</slant> + <!-- 'italic' or 'normal' --> + </font> + </theme> + <desktops> + <!-- this stuff is only used at startup, pagers allow you to change them + during a session + + these are default values to use when other ones are not already set + by other applications, or saved in your session + + use obconf if you want to change these without having to log out + and back in --> + <number>4</number> + <firstdesk>1</firstdesk> + <names> + <!-- set names up here if you want to, like this: + <name>desktop 1</name> + <name>desktop 2</name> + --> + <name>1</name> + <name>2</name> + <name>3</name> + <name>4</name> + </names> + <popupTime>875</popupTime> + <!-- The number of milliseconds to show the popup for when switching + desktops. Set this to 0 to disable the popup. --> + </desktops> + <resize> + <drawContents>yes</drawContents> + <popupShow>Nonpixel</popupShow> + <!-- 'Always', 'Never', or 'Nonpixel' (xterms and such) --> + <popupPosition>Center</popupPosition> + <!-- 'Center' or 'Top' --> + <popupFixedPosition> + <!-- these are used if popupPosition is set to 'Fixed' --> + <x>10</x> + <!-- positive number for distance from left edge, negative number for + distance from right edge, or 'Center' --> + <y>10</y> + <!-- positive number for distance from top edge, negative number for + distance from bottom edge, or 'Center' --> + </popupFixedPosition> + </resize> + <!-- You can reserve a portion of your screen where windows will not cover when + they are maximized, or when they are initially placed. + Many programs reserve space automatically, but you can use this in other + cases. --> + <margins> + <top>1</top> + <bottom>0</bottom> + <left>0</left> + <right>0</right> + </margins> + <dock> + <position>TopLeft</position> + <!-- (Top|Bottom)(Left|Right|)|Top|Bottom|Left|Right|Floating --> + <floatingX>0</floatingX> + <floatingY>0</floatingY> + <noStrut>no</noStrut> + <stacking>Above</stacking> + <!-- 'Above', 'Normal', or 'Below' --> + <direction>Vertical</direction> + <!-- 'Vertical' or 'Horizontal' --> + <autoHide>no</autoHide> + <hideDelay>300</hideDelay> + <!-- in milliseconds (1000 = 1 second) --> + <showDelay>300</showDelay> + <!-- in milliseconds (1000 = 1 second) --> + <moveButton>Middle</moveButton> + <!-- 'Left', 'Middle', 'Right' --> + </dock> + <keyboard> + <chainQuitKey>C-g</chainQuitKey> + <!-- Keybindings for desktop switching --> + <keybind key="C-A-Left"> + <action name="GoToDesktop"> + <to>left</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="C-A-Right"> + <action name="GoToDesktop"> + <to>right</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="C-A-Up"> + <action name="GoToDesktop"> + <to>up</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="C-A-Down"> + <action name="GoToDesktop"> + <to>down</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="S-A-Left"> + <action name="SendToDesktop"> + <to>left</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="S-A-Right"> + <action name="SendToDesktop"> + <to>right</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="S-A-Up"> + <action name="SendToDesktop"> + <to>up</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="S-A-Down"> + <action name="SendToDesktop"> + <to>down</to> + <wrap>no</wrap> + </action> + </keybind> + <keybind key="W-1"> + <action name="GoToDesktop"> + <to>1</to> + </action> + </keybind> + <keybind key="W-2"> + <action name="GoToDesktop"> + <to>2</to> + </action> + </keybind> + <keybind key="W-3"> + <action name="GoToDesktop"> + <to>3</to> + </action> + </keybind> + <keybind key="W-4"> + <action name="GoToDesktop"> + <to>4</to> + </action> + </keybind> + <keybind key="W-d"> + <action name="ToggleShowDesktop"/> + </keybind> + <!-- Keybindings for windows --> + <keybind key="A-F4"> + <action name="Close"/> + </keybind> + <keybind key="A-Escape"> + <action name="Lower"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + </keybind> + <keybind key="A-space"> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </keybind> + <keybind key="Print"> + <action name="Execute"> + <command>xfce4-screenshooter</command> + </action> + </keybind> + <keybind key="A-Print"> + <action name="Execute"> + <command>scrot '%Y-%m-%d--%s_$wx$h_scrot.png' -e 'mv $f ~/images/ &amp; viewnior ~/images/$f'</command> + </action> + </keybind> + <!-- Keybindings for window switching --> + <keybind key="A-Tab"> + <action name="NextWindow"> + <finalactions> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </finalactions> + </action> + </keybind> + <keybind key="A-S-Tab"> + <action name="PreviousWindow"> + <finalactions> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </finalactions> + </action> + </keybind> + <keybind key="C-A-Tab"> + <action name="NextWindow"> + <panels>yes</panels> + <desktop>yes</desktop> + <finalactions> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </finalactions> + </action> + </keybind> + <!-- Keybindings for window switching with the arrow keys --> + <keybind key="W-S-Right"> + <action name="DirectionalCycleWindows"> + <direction>right</direction> + </action> + </keybind> + <keybind key="W-S-Left"> + <action name="DirectionalCycleWindows"> + <direction>left</direction> + </action> + </keybind> + <keybind key="W-S-Up"> + <action name="DirectionalCycleWindows"> + <direction>up</direction> + </action> + </keybind> + <keybind key="W-S-Down"> + <action name="DirectionalCycleWindows"> + <direction>down</direction> + </action> + </keybind> + <!-- Keybindings for running applications --> + <keybind key="A-F2"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Run Program</name> + </startupnotify> + <command>gmrun</command> + </action> + </keybind> + <keybind key="W-r"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>dmenu-bind</name> + </startupnotify> + <command>~/.config/dmenu/dmenu-bind.sh</command> + </action> + </keybind> + <keybind key="W-f"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>thunar</name> + </startupnotify> + <command>thunar</command> + </action> + </keybind> + <keybind key="W-t"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Terminal</name> + </startupnotify> + <!-- <command>terminator</command> --> + <command>urxvt</command> + </action> + </keybind> + <keybind key="W-w"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Web Browser</name> + </startupnotify> + <command>x-www-browser</command> + </action> + </keybind> + <keybind key="W-q"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Tor browser</name> + </startupnotify> + <command>tor-browser.sh</command> + </action> + </keybind> + <keybind key="W-i"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Mail</name> + </startupnotify> + <command>icedove</command> + </action> + </keybind> + <keybind key="W-l"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Lock screen</name> + </startupnotify> + <command>cb-lock</command> + </action> + </keybind> + <keybind key="W-e"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Editor</name> + </startupnotify> + <command>geany</command> + </action> + </keybind> + <keybind key="W-m"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Mediaplayer</name> + </startupnotify> + <command>vlc</command> + </action> + </keybind> + <keybind key="W-h"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>htop</name> + </startupnotify> + <command>terminator --command="htop"</command> + </action> + </keybind> + <keybind key="W-v"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Volume</name> + </startupnotify> + <command>pavucontrol</command> + </action> + </keybind> + <keybind key="W-x"> + <action name="Execute"> + <startupnotify> + <enabled>true</enabled> + <name>Logout</name> + </startupnotify> + <command>cb-exit</command> + </action> + </keybind> + <keybind key="W-Tab"> + <action name="ShowMenu"> + <menu>client-list-combined-menu</menu> + </action> + </keybind> + <keybind key="W-space"> + <action name="ShowMenu"> + <menu>root-menu</menu> + </action> + </keybind> + <keybind key="A-C-q"> + <action name="ShowMenu"> + <menu>root-menu</menu> + </action> + </keybind> + <!-- A bit of tiling --> + <keybind key="W-Right"> + <action name="GrowToEdgeEast"/> + </keybind> + <keybind key="W-Left"> + <action name="GrowToEdgeWest"/> + </keybind> + <keybind key="W-Down"> + <action name="GrowToEdgeSouth"/> + </keybind> + <keybind key="W-Up"> + <action name="GrowToEdgeNorth"/> + </keybind> + <keybind key="W-A-Left"> + <action name="Execute"> + <command>cb-aerosnap --left</command> + </action> + </keybind> + <keybind key="W-A-Right"> + <action name="Execute"> + <command>cb-aerosnap --right</command> + </action> + </keybind> + </keyboard> + <mouse> + <dragThreshold>8</dragThreshold> + <!-- number of pixels the mouse must move before a drag begins --> + <doubleClickTime>200</doubleClickTime> + <!-- in milliseconds (1000 = 1 second) --> + <screenEdgeWarpTime>400</screenEdgeWarpTime> + <!-- Time before changing desktops when the pointer touches the edge of the + screen while moving a window, in milliseconds (1000 = 1 second). + Set this to 0 to disable warping --> + <screenEdgeWarpMouse>false</screenEdgeWarpMouse> + <!-- Set this to TRUE to move the mouse pointer across the desktop when + switching due to hitting the edge of the screen --> + <context name="Frame"> + <mousebind button="A-Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="A-Left" action="Click"> + <action name="Unshade"/> + </mousebind> + <mousebind button="A-Left" action="Drag"> + <action name="Move"/> + </mousebind> + <mousebind button="A-Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="A-Right" action="Drag"> + <action name="Resize"/> + </mousebind> + <mousebind button="A-Middle" action="Press"> + <action name="Lower"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + </mousebind> + <mousebind button="A-Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="A-Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="C-A-Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="C-A-Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="A-S-Up" action="Click"> + <action name="SendToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="A-S-Down" action="Click"> + <action name="SendToDesktop"> + <to>next</to> + </action> + </mousebind> + </context> + <context name="Titlebar"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Move"/> + </mousebind> + <mousebind button="Left" action="DoubleClick"> + <action name="ToggleMaximize"/> + </mousebind> + <mousebind button="Middle" action="Press"> + <action name="Lower"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + </mousebind> + <mousebind button="Up" action="Click"> + <action name="if"> + <shaded>no</shaded> + <then> + <action name="Shade"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + <action name="Lower"/> + </then> + </action> + </mousebind> + <mousebind button="Down" action="Click"> + <action name="if"> + <shaded>yes</shaded> + <then> + <action name="Unshade"/> + <action name="Raise"/> + </then> + </action> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </mousebind> + </context> + <context name="Titlebar Top Right Bottom Left TLCorner TRCorner BRCorner BLCorner"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Middle" action="Press"> + <action name="Lower"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </mousebind> + </context> + <context name="Top"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"> + <edge>top</edge> + </action> + </mousebind> + </context> + <context name="Left"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"> + <edge>left</edge> + </action> + </mousebind> + </context> + <context name="Right"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"> + <edge>right</edge> + </action> + </mousebind> + </context> + <context name="Bottom"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"> + <edge>bottom</edge> + </action> + </mousebind> + <mousebind button="Middle" action="Press"> + <action name="Lower"/> + <action name="FocusToBottom"/> + <action name="Unfocus"/> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </mousebind> + </context> + <context name="TRCorner BRCorner TLCorner BLCorner"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Left" action="Drag"> + <action name="Resize"/> + </mousebind> + </context> + <context name="Client"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Middle" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + </context> + <context name="Icon"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="ShowMenu"> + <menu>client-menu</menu> + </action> + </mousebind> + </context> + <context name="AllDesktops"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="ToggleOmnipresent"/> + </mousebind> + </context> + <context name="Shade"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="ToggleShade"/> + </mousebind> + </context> + <context name="Iconify"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="Iconify"/> + </mousebind> + </context> + <context name="Maximize"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Middle" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="ToggleMaximize"/> + </mousebind> + <mousebind button="Middle" action="Click"> + <action name="ToggleMaximize"> + <direction>vertical</direction> + </action> + </mousebind> + <mousebind button="Right" action="Click"> + <action name="ToggleMaximize"> + <direction>horizontal</direction> + </action> + </mousebind> + </context> + <context name="Close"> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + <action name="Unshade"/> + </mousebind> + <mousebind button="Left" action="Click"> + <action name="Close"/> + </mousebind> + </context> + <context name="Desktop"> + <mousebind button="Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="A-Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="A-Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="C-A-Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="C-A-Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="Left" action="Press"> + <action name="Focus"/> + <action name="Raise"/> + </mousebind> + </context> + <context name="Root"> + <!-- Menus --> + <mousebind button="Middle" action="Press"> + <action name="ShowMenu"> + <menu>client-list-combined-menu</menu> + </action> + </mousebind> + <mousebind button="Right" action="Press"> + <action name="ShowMenu"> + <menu>root-menu</menu> + </action> + </mousebind> + </context> + <context name="MoveResize"> + <mousebind button="Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + <mousebind button="A-Up" action="Click"> + <action name="GoToDesktop"> + <to>previous</to> + </action> + </mousebind> + <mousebind button="A-Down" action="Click"> + <action name="GoToDesktop"> + <to>next</to> + </action> + </mousebind> + </context> + </mouse> + <menu> + <!-- You can specify more than one menu file in here and they are all loaded, + just don't make menu ids clash or, well, it'll be kind of pointless --> + <!-- default menu file (or custom one in $HOME/.config/openbox/) --> + <!-- system menu files on Debian systems + <file>/var/lib/openbox/debian-menu.xml</file> + <file>debian-menu.xml</file> --> + <file>menu.xml</file> + <hideDelay>200</hideDelay> + <!-- if a press-release lasts longer than this setting (in milliseconds), the + menu is hidden again --> + <middle>no</middle> + <!-- center submenus vertically about the parent entry --> + <submenuShowDelay>100</submenuShowDelay> + <!-- time to delay before showing a submenu after hovering over the parent + entry. + if this is a negative value, then the delay is infinite and the + submenu will not be shown until it is clicked on --> + <submenuHideDelay>400</submenuHideDelay> + <!-- time to delay before hiding a submenu when selecting another + entry in parent menu + if this is a negative value, then the delay is infinite and the + submenu will not be hidden until a different submenu is opened --> + <applicationIcons>yes</applicationIcons> + <!-- controls if icons appear in the client-list-(combined-)menu --> + <manageDesktops>yes</manageDesktops> + <!-- show the manage desktops section in the client-list-(combined-)menu --> + </menu> + <applications> + <!-- + # this is an example with comments through out. use these to make your + # own rules, but without the comments of course. + # you may use one or more of the name/class/role/title/type rules to specify + # windows to match + + <application name="the window's _OB_APP_NAME property (see obxprop)" + class="the window's _OB_APP_CLASS property (see obxprop)" + role="the window's _OB_APP_ROLE property (see obxprop)" + title="the window's _OB_APP_TITLE property (see obxprop)" + type="the window's _OB_APP_TYPE property (see obxprob).. + (if unspecified, then it is 'dialog' for child windows)"> + # you may set only one of name/class/role/title/type, or you may use more + # than one together to restrict your matches. + + # the name, class, role, and title use simple wildcard matching such as those + # used by a shell. you can use * to match any characters and ? to match + # any single character. + + # the type is one of: normal, dialog, splash, utility, menu, toolbar, dock, + # or desktop + + # when multiple rules match a window, they will all be applied, in the + # order that they appear in this list + + + # each rule element can be left out or set to 'default' to specify to not + # change that attribute of the window + + <decor>yes</decor> + # enable or disable window decorations + + <shade>no</shade> + # make the window shaded when it appears, or not + + <position force="no"> + # the position is only used if both an x and y coordinate are provided + # (and not set to 'default') + # when force is "yes", then the window will be placed here even if it + # says you want it placed elsewhere. this is to override buggy + # applications who refuse to behave + <x>center</x> + # a number like 50, or 'center' to center on screen. use a negative number + # to start from the right (or bottom for <y>), ie -50 is 50 pixels from the + # right edge (or bottom). + <y>200</y> + <monitor>1</monitor> + # specifies the monitor in a xinerama setup. + # 1 is the first head, or 'mouse' for wherever the mouse is + </position> + + <focus>yes</focus> + # if the window should try be given focus when it appears. if this is set + # to yes it doesn't guarantee the window will be given focus. some + # restrictions may apply, but Openbox will try to + + <desktop>1</desktop> + # 1 is the first desktop, 'all' for all desktops + + <layer>normal</layer> + # 'above', 'normal', or 'below' + + <iconic>no</iconic> + # make the window iconified when it appears, or not + + <skip_pager>no</skip_pager> + # asks to not be shown in pagers + + <skip_taskbar>no</skip_taskbar> + # asks to not be shown in taskbars. window cycling actions will also + # skip past such windows + + <fullscreen>yes</fullscreen> + # make the window in fullscreen mode when it appears + + <maximized>true</maximized> + # 'Horizontal', 'Vertical' or boolean (yes/no) + </application> + + # end of the example +--> + <application name="urxvt"> + <decor>no</decor> + </application> + <application name="gmessage"> + <decor>no</decor> + <shade>no</shade> + <skip_pager>yes</skip_pager> + <skip_taskbar>yes</skip_taskbar> + <fullscreen>no</fullscreen> + <maximized>no</maximized> + </application> + <application class="Gimp" name="gimp" role="gimp-toolbox" type="utility"> + <maximized>vertical</maximized> + </application> + <application class="Gimp" name="gimp" role="gimp-dock" type="utility"> + <maximized>vertical</maximized> + </application> + <application class="Gimp" name="gimp" role="gimp-image-window" type="normal"> + <position force="no"> + <x>center</x> + <y>center</y> + </position> + </application> + <application class="Gimp" name="gimp-2.8" role="gimp-toolbox" type="utility"> + <maximized>vertical</maximized> + </application> + <application class="Gimp" name="gimp-2.8" role="gimp-dock" type="utility"> + <maximized>vertical</maximized> + </application> + <application class="Gimp" name="gimp-2.8" role="gimp-image-window" type="normal"> + <position force="no"> + <x>center</x> + <y>center</y> + </position> + </application> + </applications> +</openbox_config> diff --git a/.config/sxhkd/sxhkdrc b/.config/sxhkd/sxhkdrc @@ -0,0 +1,69 @@ +#!/bin/bash + +# +# BSPWM hotkeys +# + +# Quit +#super + alt + Escape +super + shift + e + pamixer --get-volume > ~/.volume \ + pkill panel + +# Balance tree +super + b + bspc desktop -B + +# Change windows params +super + {g,f,s,l} + bspc window -t {floating,fullscreen,sticky,locked} + +# Close window +alt + w + bspc window -c + +# Desktops +super + {1-5} + bspc desktop -f ^{1-5} + +# Move focus: super+h,j,k,l +# Swap windows: super+shift+h,j,k,l +super + {_,shift + }{h,j,k,l} + bspc window --{focus,swap} {left,down,up,right} + + +# Mouse +~button1 + bspc pointer -g focus + +super + button{1-3} + bspc pointer -g {move,resize_side,resize_corner} + +super + !button{1-3} + bspc pointer -t %i %i + +super + @button{1-3} + bspc pointer -u + +# +# Non WM hotkeys +# + +# URxvt +super + Return + urxvt -e tmux +super + shift + Return + urxvt + +# XTerm +super + alt + Return + xterm + +# dmenu +super + space + dmenu_wrapper + +# Reload SXHKD +super + r + pkill -USR1 -x sxhkd \ + ~/.config/bspwm/bspwmrc diff --git a/.config/uzbl/config b/.config/uzbl/config @@ -0,0 +1,472 @@ +# Example uzbl config. All settings are optional. You can use uzbl without +# any config at all (but it won't do much). + +# === Core settings ========================================================== + +# common directory locations +set prefix = @(echo $PREFIX)@ +set data_home = @(echo $XDG_DATA_HOME)@ +set cache_home = @(echo $XDG_CACHE_HOME)@ +set config_home = @(echo $XDG_CONFIG_HOME)@ + +# Interface paths. +set fifo_dir = /tmp +set socket_dir = /tmp + +set shell_cmd = sh -c + +# === General config aliases ================================================= + +# Config related events (use the request function): +# request MODE_CONFIG <mode> <key> = <value> +set mode_config = request MODE_CONFIG +# request ON_EVENT <EVENT_NAME> <command> +set on_event = request ON_EVENT +# request ON_SET <key/glob> <command> +set on_set = request ON_SET +# request MODMAP <From> <To> +set modmap = request MODMAP +# request IGNORE_KEY <glob> +set ignore_key = request IGNORE_KEY +# request TOGGLE_MODES <mode1> <mode2> ... <moden> +set toggle_modes = request TOGGLE_MODES + +set set_mode = set mode = +set set_status = set status_message = + +# Spawn path shortcuts. In spawn the first dir+path match is used in "dir1:dir2:dir3:executable" +set scripts_dir = @data_home/uzbl:@prefix/share/uzbl/examples/data:scripts + +# === Hardcoded handlers ===================================================== + +# These handlers can't be moved to the new event system yet as we don't +# support events that can wait for a response from a script. +set scheme_handler = sync_spawn @scripts_dir/scheme.py +#set request_handler = sync_spawn @scripts_dir/request.py +set authentication_handler = sync_spawn @scripts_dir/auth.py +set download_handler = sync_spawn @scripts_dir/download.sh + +# === Dynamic event handlers ================================================= + +# What to do when a website wants to open a new window: +# Open link in new window +@on_event NEW_WINDOW sh 'uzbl-browser ${1:+-u "$1"}' %r +# Open in current window (also see the REQ_NEW_WINDOW event handler below) +#@on_event NEW_WINDOW uri %s +# Open in new tab. Other options are NEW_TAB_NEXT, NEW_BG_TAB and NEW_BG_TAB_NEXT. +#@on_event NEW_WINDOW event NEW_TAB %s + +# What to do when the user requests a new window: +# If your the NEW_WINDOW handler opens the uri in the current window, you'll +# probably want to change this handler to open a new window or tab. +@on_event REQ_NEW_WINDOW event NEW_WINDOW %s + +# Load start handler +@on_event LOAD_START @set_status <span foreground="khaki">wait</span> +# Reset the keycmd on navigation +@on_event LOAD_START @set_mode + +# Load commit handlers +@on_event LOAD_COMMIT @set_status <span foreground="green">recv</span> + + # add some javascript to the page for other 'js' and 'script' commands to access later. +@on_event LOAD_COMMIT js uzbl = {}; +@on_event LOAD_COMMIT script @scripts_dir/formfiller.js +@on_event LOAD_COMMIT script @scripts_dir/follow.js + +# Userscripts/per-site-settings. See the script and the example configuration for details +#@on_event LOAD_COMMIT spawn @scripts_dir/per-site-settings.py @data_home/uzbl/per-site-settings + +# Load finish handlers +@on_event LOAD_FINISH @set_status <span foreground="gold">done</span> +@on_event LOAD_FINISH spawn @scripts_dir/history.sh + +# Switch to insert mode if a (editable) html form is clicked +@on_event FOCUS_ELEMENT sh 'if [ "$1" = INPUT -o "$1" = TEXTAREA -o "$1" = SELECT ]; then echo "@set_mode insert" > $UZBL_FIFO; fi' %s +# Switch to command mode if anything else is clicked +@on_event ROOT_ACTIVE @set_mode command + +# Example CONFIG_CHANGED event handler +#@on_event CONFIG_CHANGED print Config changed: %1 = %2 + +# Scroll percentage calculation +@on_event SCROLL_VERT set scroll_message = \@<(function(curr, min, max, size){if(max == size) return '--'; var p=(curr/(max - size)); return Math.round(10000*p)/100;})(%1,%2,%3,%4)>\@% + +# === Behaviour and appearance =============================================== + +# Custom CSS can be defined here, including link follower hint styles +set stylesheet_uri = file://@config_home/uzbl/style.css + +set show_status = 1 +set status_top = 0 +set status_background = #303030 + +set modcmd_style = weight="bold" foreground="red" +set keycmd_style = weight="light" foreground="red" +set prompt_style = foreground="grey" +set cursor_style = underline="single" +set completion_style = foreground="green" +set hint_style = weight="bold" + +set mode_section = <span background="khaki" foreground="black">[\@[\@mode_indicator]\@]</span> +set keycmd_section = [<span \@prompt_style>\@[\@keycmd_prompt]\@</span><span \@modcmd_style>\@modcmd</span><span \@keycmd_style>\@keycmd</span><span \@completion_style>\@completion_list</span>] +set progress_section = <span foreground="#606060">\@[\@progress.output]\@</span> +set scroll_section = <span foreground="#606060">\@[\@scroll_message]\@</span> +set uri_section = <span foreground="#99FF66">\@[\@uri]\@</span> +set name_section = <span foreground="khaki">\@[\@NAME]\@</span> +set status_section = <span foreground="orange">\@status_message</span> +set selected_section = <span foreground="#606060">\@[\@SELECTED_URI]\@</span> + +set download_section = <span foreground="white">\@downloads</span> + +set status_format = <span font_family="monospace">@mode_section @keycmd_section @progress_section @name_section @status_section @scroll_section @selected_section @download_section</span> +set status_format_right = <span font_family="monospace"><span foreground="#666">uri:</span> @uri_section</span> + +set title_format_long = \@keycmd_prompt \@raw_modcmd \@raw_keycmd \@TITLE - Uzbl browser <\@NAME> \@SELECTED_URI + +# Progress bar config +# %d = done, %p = pending %c = percent done, %i = int done, %s = spinner, +# %t = percent pending, %o = int pending, %r = sprite scroll +set progress.width = 8 +set progress.format = [%d>%p]%c +set progress.done = = +set progress.pending = + +# === Useragent setup ======================================================== + +set useragent = Uzbl (Webkit @{WEBKIT_MAJOR}.@{WEBKIT_MINOR}) (@(+uname -sm)@ [@ARCH_UZBL]) + +# === Configure cookie blacklist ======================================================== + +# Accept 'session cookies' from uzbl.org (when you have a whitelist all other cookies are dropped) +#request WHITELIST_COOKIE domain 'uzbl.org$' expires '^$' + +# Drop google analytics tracking cookies (applied after whitelists if any) +#request BLACKLIST_COOKIE name '^__utm.$' + +# === SSL related configuration ============================================== + +# Set it to certificates store of your distribution, or your own CAfile. +set ssl_ca_file = /etc/ssl/certs/ca-certificates.crt +set ssl_verify = 1 +# Command to toggle ssl_verify value: +@cbind !ssl = chain 'toggle ssl_verify' 'reload' +# Example SSL error handler: +@on_event LOAD_ERROR js var patt=new RegExp('SSL handshake failed'); if (patt.test('%3')) {alert ('%3');} + +# === Key binding configuration ============================================== +# --- Internal modmapping and ignoring --------------------------------------- + +#modmap <From> <To> +@modmap <Control> <Ctrl> +@modmap <ISO_Left_Tab> <Shift-Tab> +@modmap <space> <Space> +@modmap <KP_Enter> <Enter> + +#ignore_key <glob> +@ignore_key <ISO_*> +@ignore_key <Shift> +@ignore_key <Multi_key> +@ignore_key <Mod2> + +# --- Bind aliases ----------------------------------------------------------- + +# request BIND <bind cmd> = <command> +set bind = request MODE_BIND global + +# request MODE_BIND <mode> <bind cmd> = <command> +set mode_bind = request MODE_BIND + +# Insert mode binding alias +set ibind = @mode_bind insert + +# Command mode binding alias +set cbind = @mode_bind command + +# Non-insert mode bindings alias (ebind for edit-bind). +set ebind = @mode_bind global,-insert + +# --- Global & keycmd editing binds ------------------------------------------ + +# Resets keycmd and returns to default mode. +@on_event ESCAPE @set_mode +@on_event ESCAPE event KEYCMD_CLEAR +@on_event ESCAPE js uzbl.follow.clearHints() +@on_event ESCAPE search_clear +@on_event ESCAPE js window.getSelection().removeAllRanges() +@bind <Escape> = event ESCAPE +@bind <Ctrl>[ = event ESCAPE + +# Commands for editing and traversing the keycmd. +@ebind <Return> = event KEYCMD_EXEC_CURRENT +@ebind <Home> = event SET_CURSOR_POS 0 +@ebind <End> = event SET_CURSOR_POS -1 +@ebind <Left> = event SET_CURSOR_POS - +@ebind <Right> = event SET_CURSOR_POS + +@ebind <BackSpace> = event KEYCMD_BACKSPACE +@ebind <Delete> = event KEYCMD_DELETE +@ebind <Tab> = event START_COMPLETION +# Readline-ish bindings. +@ebind <Ctrl>w = event KEYCMD_STRIP_WORD \ -./&?= +@ebind <Ctrl>u = event SET_KEYCMD +@ebind <Ctrl>a = event SET_CURSOR_POS 0 +@ebind <Ctrl>e = event SET_CURSOR_POS -1 + +@ebind <Up> = event HISTORY_PREV +@ebind <Down> = event HISTORY_NEXT +@ebind <Ctrl>r<search:>_ = event HISTORY_SEARCH %s +# Keycmd injection/append examples. +#@ebind <Ctrl>su = event INJECT_KEYCMD \@uri +#@ebind <Ctrl>st = event INJECT_KEYCMD \@title +#@ebind <Ctrl>du = event APPEND_KEYCMD \@uri +#@ebind <Ctrl>dt = event APPEND_KEYCMD \@title + +# --- Mouse bindings --------------------------------------------------------- + +# Middle click open in new window +@bind <Button2> = sh 'if [ "$1" ]; then echo "event REQ_NEW_WINDOW $1" > "$UZBL_FIFO"; else echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"; fi' '\@SELECTED_URI' + +# --- Keyboard bindings ------------------------------------------------------ + +# With this command you can enter in any command at runtime when prefixed with +# a colon. +@cbind :_ = %s + +# open a new window or a new tab (see the on_event NEW_WINDOW settings above) +@cbind W = event REQ_NEW_WINDOW + +# Page movement binds +@cbind j = scroll vertical 20 +@cbind k = scroll vertical -20 +@cbind h = scroll horizontal -20 +@cbind l = scroll horizontal 20 +@cbind <Page_Down> = scroll vertical 100% +@cbind <Ctrl>d = scroll vertical 50% +@cbind <Page_Up> = scroll vertical -100% +@cbind <Ctrl>u = scroll vertical -50% +@cbind gg = scroll vertical begin +@cbind G = scroll vertical end +@cbind <Home> = scroll vertical begin +@cbind <End> = scroll vertical end +@cbind ^ = scroll horizontal begin +@cbind $ = scroll horizontal end +@cbind <Space> = scroll vertical 50% +@cbind :<Go To:>_ = scroll vertical %r! +@cbind _:<Go To:>_ = scroll horizontal %r! + +# Navigation binds +@cbind H = back +@cbind L = forward +@cbind S = stop +@cbind r = reload +@cbind R = reload_ign_cache + +# Mouse bindings +@cbind <Button8> = back +@cbind <Button9> = forward + +# Zoom binds +@cbind + = zoom_in +@cbind - = zoom_out +@cbind T = toggle zoom_type +@cbind 1 = set zoom_level = 1.0 +@cbind 2 = set zoom_level = 2.0 + +# Appearance binds +@cbind t = toggle show_status + +# Page searching binds +@cbind /* = search %s +@cbind ?* = search_reverse %s +# Jump to next and previous items +@cbind n = search +@cbind N = search_reverse + +# Print pages to a printer +@cbind <Ctrl>p = hardcopy + +# Web searching binds +@cbind sw<Startpage:>_ = uri https://ixquick.com/do/search?query=%s +@cbind sg<Google:>_ = uri https://www.google.com/search?q=\@<encodeURIComponent(%r)>\@ +@cbind ddg<DuckDuckGo:>_ = uri https://duckduckgo.com/?q=%s +@cbind awiki<Archwiki:>_ = uri http://wiki.archlinux.org/index.php/Special:Search?search=\@<encodeURIComponent(%r)>\@&go=Go +@cbind wiki<Wikipedia:>_ = uri https://en.wikipedia.org/w/index.php?title=Special:Search&search=\@<encodeURIComponent(%r)>\@&go=Go + +# Handy binds +# Set function shortcut +@cbind S<var:>_<value:>_ = set %1 = %2 +# Exit binding +@cbind ZZ = exit +# Dump config to stdout +@cbind !dump = sh 'echo dump_config > "$UZBL_FIFO"' +# Reload all variables in the config +@cbind !reload = sh "sed '/^# === Post-load misc commands/,$d' \"$UZBL_CONFIG\" | grep '^set ' > \"$UZBL_FIFO\"" + +# Use socat to directly inject commands into uzbl-core and view events +# raised by uzbl-core: +@cbind <Ctrl><Mod1>t = sh 'xterm -e "socat unix-connect:\"$UZBL_SOCKET\" -"' +#@cbind <Ctrl><Mod1>t = sh 'urxvt -e socat unix-connect:"$UZBL_SOCKET" -' + +# Uri opening prompts +@cbind o<uri:>_ = uri %s +# Or have it load the current uri into the keycmd for editing +@cbind O<uri:\@uri>_ = uri %s + +# Mode setting binds +@cbind i = @set_mode insert +@bind <Ctrl>i = @set_mode insert + +# Hard-bound bookmarks +@cbind gh = uri http://www.uzbl.org + +# New window binds +@cbind gw = event REQ_NEW_WINDOW + +# SSL-ify bindings +@cbind zs = uri \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@ +@cbind zS = event REQ_NEW_WINDOW \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@ + +# Yanking & pasting binds +@cbind yu = sh 'echo -n "$UZBL_URI" | xclip' +@cbind yU = sh 'echo -n "$1" | xclip' '\@SELECTED_URI' +@cbind yy = sh 'echo -n "$UZBL_TITLE" | xclip' +@cbind ys = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard + +# Clone current window +@cbind c = event REQ_NEW_WINDOW \@uri +# Go the page from primary selection +@cbind p = sh 'echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' +# Go to the page in clipboard +@cbind P = sh 'echo "uri $(xclip -selection clipboard -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' +# Start a new uzbl instance from the page in primary selection +@cbind 'p = sh 'echo "event REQ_NEW_WINDOW $(xclip -o)" > "$UZBL_FIFO"' +# paste primary selection into keycmd at the cursor position +@bind <Shift><Insert> = sh 'echo "event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' + +# Bookmark inserting binds +@cbind <Ctrl>m<tags:>_ = sh 'echo "$UZBL_URI $1" >> "$XDG_DATA_HOME"/uzbl/bookmarks' '%s' +# Or use a script to insert a bookmark. +@cbind M = spawn @scripts_dir/insert_bookmark.sh + +# Bookmark/history loading +@cbind U = spawn @scripts_dir/load_url_from_history.sh +@cbind u = spawn @scripts_dir/load_url_from_bookmarks.sh + +# Temporary bookmarks +#@cbind <Ctrl>d = spawn @scripts_dir/insert_temp.sh +#@cbind D = spawn @scripts_dir/load_url_from_temps.sh + +# Link following (similar to vimperator and konqueror) +# Set custom keys you wish to use for navigation. Some common examples: +set follow_hint_keys = 0123456789 +#set follow_hint_keys = qwerty +#set follow_hint_keys = asdfghjkl; +#set follow_hint_keys = thsnd-rcgmvwb/;789aefijkopquxyz234 +@cbind f* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'click') >\@ +@cbind F* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'newwindow') >\@ +@cbind f* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'returnuri') >\@ set +@cbind F* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'returnuri') >\@ clipboard +@cbind fi = spawn @scripts_dir/go_input.sh + +@cbind fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ set +@cbind fS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('click') >\@ +@cbind Fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('newwindow') >\@ +@cbind FS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard + +@cbind ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ set +@cbind fT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'click') >\@ +@cbind Ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'newwindow') >\@ +@cbind FT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ clipboard + +@cbind '* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'click') >\@ + +# Form filler binds +# This script allows you to configure (per domain) values to fill in form +# fields (eg login information) and to fill in these values automatically. +# This implementation allows you to save multiple profiles for each form +# (think about multiple accounts on some website). +set formfiller = spawn @scripts_dir/formfiller.sh +@cbind ze = @formfiller edit +@cbind zn = @formfiller new +@cbind zl = @formfiller load +@cbind zo = @formfiller once + +# --- Uzbl tabbed binds ------------------------------------------------------ + +# Tab opening +@cbind gn = event NEW_TAB +@cbind gN = event NEW_TAB_NEXT +#@cbind go<uri:>_ = event NEW_TAB %s +#@cbind gO<uri:>_ = event NEW_TAB_NEXT %s + +# Closing / resting +@cbind gC = exit +@cbind gQ = event CLEAN_TABS + +# Tab navigating +@cbind g< = event FIRST_TAB +@cbind g> = event LAST_TAB +@cbind gt = event NEXT_TAB +@cbind gT = event PREV_TAB +@cbind gi<index:>_ = event GOTO_TAB %s + +# Preset loading +set preset = event PRESET_TABS +@cbind gs<preset save:>_ = @preset save %s +@cbind glo<preset load:>_ = @preset load %s +@cbind gd<preset del:>_ = @preset del %s +# This doesn't work right now. +#@cbind gli = @preset list + +# === Context menu items ===================================================== + +# Default context menu +menu_add Google = set uri = http://google.com +menu_add Go Home = set uri = http://uzbl.org +menu_separator separator_1 +menu_add Quit uzbl = exit + +# Link context menu +menu_link_add Print Link = print \@SELECTED_URI + +# === Mode configuration ===================================================== + +# Define some mode specific uzbl configurations. +set command = @mode_config command +set insert = @mode_config insert +set stack = @mode_config stack + +# Command mode config. +@command keycmd_style = foreground="red" +@command status_background = #202020 +@command mode_indicator = Cmd +@command keycmd_events = 1 +@command forward_keys = 0 +@command modcmd_updates = 1 + +# Insert mode config. +@insert status_background = #303030 +@insert mode_indicator = Ins +@insert forward_keys = 1 +@insert keycmd_events = 0 +@insert modcmd_updates = 0 + +# Multi-stage-binding mode config. +@stack keycmd_style = foreground="red" +@stack status_background = #202020 +@stack mode_indicator = Bnd +@stack prompt_style = foreground="#888" weight="light" +@stack keycmd_events = 1 +@stack modcmd_updates = 1 +@stack forward_keys = 0 + +set default_mode = command + +# === Post-load misc commands ================================================ +sync_spawn_exec @scripts_dir/load_cookies.sh +sync_spawn_exec @scripts_dir/load_cookies.sh @data_home/uzbl/session-cookies.txt + +# Set the "home" page. +set uri = uzbl.org/doesitwork/@COMMIT + +# vim: set fdm=syntax: diff --git a/.config/uzbl/config-default b/.config/uzbl/config-default @@ -0,0 +1,467 @@ +# Example uzbl config. All settings are optional. You can use uzbl without +# any config at all (but it won't do much). + +# === Core settings ========================================================== + +# common directory locations +set prefix = @(echo $PREFIX)@ +set data_home = @(echo $XDG_DATA_HOME)@ +set cache_home = @(echo $XDG_CACHE_HOME)@ +set config_home = @(echo $XDG_CONFIG_HOME)@ + +# Interface paths. +set fifo_dir = /tmp +set socket_dir = /tmp + +set shell_cmd = sh -c + +# === General config aliases ================================================= + +# Config related events (use the request function): +# request MODE_CONFIG <mode> <key> = <value> +set mode_config = request MODE_CONFIG +# request ON_EVENT <EVENT_NAME> <command> +set on_event = request ON_EVENT +# request ON_SET <key/glob> <command> +set on_set = request ON_SET +# request MODMAP <From> <To> +set modmap = request MODMAP +# request IGNORE_KEY <glob> +set ignore_key = request IGNORE_KEY +# request TOGGLE_MODES <mode1> <mode2> ... <moden> +set toggle_modes = request TOGGLE_MODES + +set set_mode = set mode = +set set_status = set status_message = + +# Spawn path shortcuts. In spawn the first dir+path match is used in "dir1:dir2:dir3:executable" +set scripts_dir = @data_home/uzbl:@prefix/share/uzbl/examples/data:scripts + +# === Hardcoded handlers ===================================================== + +# These handlers can't be moved to the new event system yet as we don't +# support events that can wait for a response from a script. +set scheme_handler = sync_spawn @scripts_dir/scheme.py +#set request_handler = sync_spawn @scripts_dir/request.py +set authentication_handler = sync_spawn @scripts_dir/auth.py +set download_handler = sync_spawn @scripts_dir/download.sh + +# === Dynamic event handlers ================================================= + +# What to do when a website wants to open a new window: +# Open link in new window +@on_event NEW_WINDOW sh 'uzbl-browser ${1:+-u "$1"}' %r +# Open in current window (also see the REQ_NEW_WINDOW event handler below) +#@on_event NEW_WINDOW uri %s +# Open in new tab. Other options are NEW_TAB_NEXT, NEW_BG_TAB and NEW_BG_TAB_NEXT. +#@on_event NEW_WINDOW event NEW_TAB %s + +# What to do when the user requests a new window: +# If your the NEW_WINDOW handler opens the uri in the current window, you'll +# probably want to change this handler to open a new window or tab. +@on_event REQ_NEW_WINDOW event NEW_WINDOW %s + +# Load start handler +@on_event LOAD_START @set_status <span foreground="khaki">wait</span> +# Reset the keycmd on navigation +@on_event LOAD_START @set_mode + +# Load commit handlers +@on_event LOAD_COMMIT @set_status <span foreground="green">recv</span> + + # add some javascript to the page for other 'js' and 'script' commands to access later. +@on_event LOAD_COMMIT js uzbl = {}; +@on_event LOAD_COMMIT script @scripts_dir/formfiller.js +@on_event LOAD_COMMIT script @scripts_dir/follow.js + +# Userscripts/per-site-settings. See the script and the example configuration for details +#@on_event LOAD_COMMIT spawn @scripts_dir/per-site-settings.py @data_home/uzbl/per-site-settings + +# Load finish handlers +@on_event LOAD_FINISH @set_status <span foreground="gold">done</span> +@on_event LOAD_FINISH spawn @scripts_dir/history.sh + +# Switch to insert mode if a (editable) html form is clicked +@on_event FOCUS_ELEMENT sh 'if [ "$1" = INPUT -o "$1" = TEXTAREA -o "$1" = SELECT ]; then echo "@set_mode insert" > $UZBL_FIFO; fi' %s +# Switch to command mode if anything else is clicked +@on_event ROOT_ACTIVE @set_mode command + +# Example CONFIG_CHANGED event handler +#@on_event CONFIG_CHANGED print Config changed: %1 = %2 + +# Scroll percentage calculation +@on_event SCROLL_VERT set scroll_message = \@<(function(curr, min, max, size){if(max == size) return '--'; var p=(curr/(max - size)); return Math.round(10000*p)/100;})(%1,%2,%3,%4)>\@% + +# === Behaviour and appearance =============================================== + +# Custom CSS can be defined here, including link follower hint styles +set stylesheet_uri = file://@config_home/uzbl/style.css + +set show_status = 1 +set status_top = 0 +set status_background = #303030 + +set modcmd_style = weight="bold" foreground="red" +set keycmd_style = weight="light" foreground="red" +set prompt_style = foreground="grey" +set cursor_style = underline="single" +set completion_style = foreground="green" +set hint_style = weight="bold" + +set mode_section = <span background="khaki" foreground="black">[\@[\@mode_indicator]\@]</span> +set keycmd_section = [<span \@prompt_style>\@[\@keycmd_prompt]\@</span><span \@modcmd_style>\@modcmd</span><span \@keycmd_style>\@keycmd</span><span \@completion_style>\@completion_list</span>] +set progress_section = <span foreground="#606060">\@[\@progress.output]\@</span> +set scroll_section = <span foreground="#606060">\@[\@scroll_message]\@</span> +set uri_section = <span foreground="#99FF66">\@[\@uri]\@</span> +set name_section = <span foreground="khaki">\@[\@NAME]\@</span> +set status_section = <span foreground="orange">\@status_message</span> +set selected_section = <span foreground="#606060">\@[\@SELECTED_URI]\@</span> + +set download_section = <span foreground="white">\@downloads</span> + +set status_format = <span font_family="monospace">@mode_section @keycmd_section @progress_section @name_section @status_section @scroll_section @selected_section @download_section</span> +set status_format_right = <span font_family="monospace"><span foreground="#666">uri:</span> @uri_section</span> + +set title_format_long = \@keycmd_prompt \@raw_modcmd \@raw_keycmd \@TITLE - Uzbl browser <\@NAME> \@SELECTED_URI + +# Progress bar config +# %d = done, %p = pending %c = percent done, %i = int done, %s = spinner, +# %t = percent pending, %o = int pending, %r = sprite scroll +set progress.width = 8 +set progress.format = [%d>%p]%c +set progress.done = = +set progress.pending = + +# === Useragent setup ======================================================== + +set useragent = Uzbl (Webkit @{WEBKIT_MAJOR}.@{WEBKIT_MINOR}) (@(+uname -sm)@ [@ARCH_UZBL]) + +# === Configure cookie blacklist ======================================================== + +# Accept 'session cookies' from uzbl.org (when you have a whitelist all other cookies are dropped) +#request WHITELIST_COOKIE domain 'uzbl.org$' expires '^$' + +# Drop google analytics tracking cookies (applied after whitelists if any) +#request BLACKLIST_COOKIE name '^__utm.$' + +# === SSL related configuration ============================================== + +# Set it to certificates store of your distribution, or your own CAfile. +set ssl_ca_file = /etc/ssl/certs/ca-certificates.crt +set ssl_verify = 1 +# Command to toggle ssl_verify value: +@cbind !ssl = chain 'toggle ssl_verify' 'reload' +# Example SSL error handler: +@on_event LOAD_ERROR js var patt=new RegExp('SSL handshake failed'); if (patt.test('%3')) {alert ('%3');} + +# === Key binding configuration ============================================== +# --- Internal modmapping and ignoring --------------------------------------- + +#modmap <From> <To> +@modmap <Control> <Ctrl> +@modmap <ISO_Left_Tab> <Shift-Tab> +@modmap <space> <Space> +@modmap <KP_Enter> <Enter> + +#ignore_key <glob> +@ignore_key <ISO_*> +@ignore_key <Shift> +@ignore_key <Multi_key> +@ignore_key <Mod2> + +# --- Bind aliases ----------------------------------------------------------- + +# request BIND <bind cmd> = <command> +set bind = request MODE_BIND global + +# request MODE_BIND <mode> <bind cmd> = <command> +set mode_bind = request MODE_BIND + +# Insert mode binding alias +set ibind = @mode_bind insert + +# Command mode binding alias +set cbind = @mode_bind command + +# Non-insert mode bindings alias (ebind for edit-bind). +set ebind = @mode_bind global,-insert + +# --- Global & keycmd editing binds ------------------------------------------ + +# Resets keycmd and returns to default mode. +@on_event ESCAPE @set_mode +@on_event ESCAPE event KEYCMD_CLEAR +@on_event ESCAPE js uzbl.follow.clearHints() +@on_event ESCAPE search_clear +@on_event ESCAPE js window.getSelection().removeAllRanges() +@bind <Escape> = event ESCAPE +@bind <Ctrl>[ = event ESCAPE + +# Commands for editing and traversing the keycmd. +@ebind <Return> = event KEYCMD_EXEC_CURRENT +@ebind <Home> = event SET_CURSOR_POS 0 +@ebind <End> = event SET_CURSOR_POS -1 +@ebind <Left> = event SET_CURSOR_POS - +@ebind <Right> = event SET_CURSOR_POS + +@ebind <BackSpace> = event KEYCMD_BACKSPACE +@ebind <Delete> = event KEYCMD_DELETE +@ebind <Tab> = event START_COMPLETION +# Readline-ish bindings. +@ebind <Ctrl>w = event KEYCMD_STRIP_WORD \ -./&?= +@ebind <Ctrl>u = event SET_KEYCMD +@ebind <Ctrl>a = event SET_CURSOR_POS 0 +@ebind <Ctrl>e = event SET_CURSOR_POS -1 + +@ebind <Up> = event HISTORY_PREV +@ebind <Down> = event HISTORY_NEXT +@ebind <Ctrl>r<search:>_ = event HISTORY_SEARCH %s +# Keycmd injection/append examples. +#@ebind <Ctrl>su = event INJECT_KEYCMD \@uri +#@ebind <Ctrl>st = event INJECT_KEYCMD \@title +#@ebind <Ctrl>du = event APPEND_KEYCMD \@uri +#@ebind <Ctrl>dt = event APPEND_KEYCMD \@title + +# --- Mouse bindings --------------------------------------------------------- + +# Middle click open in new window +@bind <Button2> = sh 'if [ "$1" ]; then echo "event REQ_NEW_WINDOW $1" > "$UZBL_FIFO"; else echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"; fi' '\@SELECTED_URI' + +# --- Keyboard bindings ------------------------------------------------------ + +# With this command you can enter in any command at runtime when prefixed with +# a colon. +@cbind :_ = %s + +# open a new window or a new tab (see the on_event NEW_WINDOW settings above) +@cbind w = event REQ_NEW_WINDOW + +# Page movement binds +@cbind j = scroll vertical 20 +@cbind k = scroll vertical -20 +@cbind h = scroll horizontal -20 +@cbind l = scroll horizontal 20 +@cbind <Page_Down> = scroll vertical 100% +@cbind <Ctrl>d = scroll vertical 50% +@cbind <Page_Up> = scroll vertical -100% +@cbind <Ctrl>u = scroll vertical -50% +@cbind << = scroll vertical begin +@cbind >> = scroll vertical end +@cbind <Home> = scroll vertical begin +@cbind <End> = scroll vertical end +@cbind ^ = scroll horizontal begin +@cbind $ = scroll horizontal end +@cbind <Space> = scroll vertical end +@cbind G<Go To:>_ = scroll vertical %r! +@cbind _G<Go To:>_ = scroll horizontal %r! + +# Navigation binds +@cbind b = back +@cbind m = forward +@cbind S = stop +@cbind r = reload +@cbind R = reload_ign_cache + +# Zoom binds +@cbind + = zoom_in +@cbind - = zoom_out +@cbind T = toggle zoom_type +@cbind 1 = set zoom_level = 1.0 +@cbind 2 = set zoom_level = 2.0 + +# Appearance binds +@cbind t = toggle show_status + +# Page searching binds +@cbind /* = search %s +@cbind ?* = search_reverse %s +# Jump to next and previous items +@cbind n = search +@cbind N = search_reverse + +# Print pages to a printer +@cbind <Ctrl>p = hardcopy + +# Web searching binds +@cbind gg<Google:>_ = uri http://www.google.com/search?q=\@<encodeURIComponent(%r)>\@ +@cbind ddg<DuckDuckGo:>_ = uri http://duckduckgo.com/?q=%s +@cbind \\awiki<Archwiki:>_ = uri http://wiki.archlinux.org/index.php/Special:Search?search=\@<encodeURIComponent(%r)>\@&go=Go +@cbind \\wiki<Wikipedia:>_ = uri http://en.wikipedia.org/w/index.php?title=Special:Search&search=\@<encodeURIComponent(%r)>\@&go=Go + +# Handy binds +# Set function shortcut +@cbind s<var:>_<value:>_ = set %1 = %2 +# Exit binding +@cbind ZZ = exit +# Dump config to stdout +@cbind !dump = sh 'echo dump_config > "$UZBL_FIFO"' +# Reload all variables in the config +@cbind !reload = sh "sed '/^# === Post-load misc commands/,$d' \"$UZBL_CONFIG\" | grep '^set ' > \"$UZBL_FIFO\"" + +# Use socat to directly inject commands into uzbl-core and view events +# raised by uzbl-core: +@cbind <Ctrl><Mod1>t = sh 'xterm -e "socat unix-connect:\"$UZBL_SOCKET\" -"' +#@cbind <Ctrl><Mod1>t = sh 'urxvt -e socat unix-connect:"$UZBL_SOCKET" -' + +# Uri opening prompts +@cbind o<uri:>_ = uri %s +# Or have it load the current uri into the keycmd for editing +@cbind O<uri:\@uri>_ = uri %s + +# Mode setting binds +@cbind i = @set_mode insert +@bind <Ctrl>i = @set_mode insert + +# Hard-bound bookmarks +@cbind gh = uri http://www.uzbl.org + +# New window binds +@cbind gw = event REQ_NEW_WINDOW + +# SSL-ify bindings +@cbind zs = uri \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@ +@cbind zS = event REQ_NEW_WINDOW \@(echo "$UZBL_URI" | sed -e 's/^http:/https:/')\@ + +# Yanking & pasting binds +@cbind yu = sh 'echo -n "$UZBL_URI" | xclip' +@cbind yU = sh 'echo -n "$1" | xclip' '\@SELECTED_URI' +@cbind yy = sh 'echo -n "$UZBL_TITLE" | xclip' +@cbind ys = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard + +# Clone current window +@cbind c = event REQ_NEW_WINDOW \@uri +# Go the page from primary selection +@cbind p = sh 'echo "uri $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' +# Go to the page in clipboard +@cbind P = sh 'echo "uri $(xclip -selection clipboard -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' +# Start a new uzbl instance from the page in primary selection +@cbind 'p = sh 'echo "event REQ_NEW_WINDOW $(xclip -o)" > "$UZBL_FIFO"' +# paste primary selection into keycmd at the cursor position +@bind <Shift><Insert> = sh 'echo "event INJECT_KEYCMD $(xclip -o | sed s/\\\@/%40/g)" > "$UZBL_FIFO"' + +# Bookmark inserting binds +@cbind <Ctrl>m<tags:>_ = sh 'echo "$UZBL_URI $1" >> "$XDG_DATA_HOME"/uzbl/bookmarks' '%s' +# Or use a script to insert a bookmark. +@cbind M = spawn @scripts_dir/insert_bookmark.sh + +# Bookmark/history loading +@cbind U = spawn @scripts_dir/load_url_from_history.sh +@cbind u = spawn @scripts_dir/load_url_from_bookmarks.sh + +# Temporary bookmarks +@cbind <Ctrl>d = spawn @scripts_dir/insert_temp.sh +@cbind D = spawn @scripts_dir/load_url_from_temps.sh + +# Link following (similar to vimperator and konqueror) +# Set custom keys you wish to use for navigation. Some common examples: +set follow_hint_keys = 0123456789 +#set follow_hint_keys = qwerty +#set follow_hint_keys = asdfghjkl; +#set follow_hint_keys = thsnd-rcgmvwb/;789aefijkopquxyz234 +@cbind fl* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'click') >\@ +@cbind Fl* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'newwindow') >\@ +@cbind fL* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'returnuri') >\@ set +@cbind FL* = spawn @scripts_dir/follow.sh \@< uzbl.follow("\@follow_hint_keys", "%s", 'returnuri') >\@ clipboard +@cbind fi = spawn @scripts_dir/go_input.sh + +@cbind fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ set +@cbind fS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('click') >\@ +@cbind Fs = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('newwindow') >\@ +@cbind FS = spawn @scripts_dir/follow.sh \@< uzbl.follow.followSelection('returnuri') >\@ clipboard + +@cbind ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ set +@cbind fT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'click') >\@ +@cbind Ft* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'newwindow') >\@ +@cbind FT* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'returnuri') >\@ clipboard + +@cbind '* = spawn @scripts_dir/follow.sh \@< uzbl.follow.followTextContent("%s", 'click') >\@ + +# Form filler binds +# This script allows you to configure (per domain) values to fill in form +# fields (eg login information) and to fill in these values automatically. +# This implementation allows you to save multiple profiles for each form +# (think about multiple accounts on some website). +set formfiller = spawn @scripts_dir/formfiller.sh +@cbind ze = @formfiller edit +@cbind zn = @formfiller new +@cbind zl = @formfiller load +@cbind zo = @formfiller once + +# --- Uzbl tabbed binds ------------------------------------------------------ + +# Tab opening +@cbind gn = event NEW_TAB +@cbind gN = event NEW_TAB_NEXT +@cbind go<uri:>_ = event NEW_TAB %s +@cbind gO<uri:>_ = event NEW_TAB_NEXT %s + +# Closing / resting +@cbind gC = exit +@cbind gQ = event CLEAN_TABS + +# Tab navigating +@cbind g< = event FIRST_TAB +@cbind g> = event LAST_TAB +@cbind gt = event NEXT_TAB +@cbind gT = event PREV_TAB +@cbind gi<index:>_ = event GOTO_TAB %s + +# Preset loading +set preset = event PRESET_TABS +@cbind gs<preset save:>_ = @preset save %s +@cbind glo<preset load:>_ = @preset load %s +@cbind gd<preset del:>_ = @preset del %s +# This doesn't work right now. +#@cbind gli = @preset list + +# === Context menu items ===================================================== + +# Default context menu +menu_add Google = set uri = http://google.com +menu_add Go Home = set uri = http://uzbl.org +menu_separator separator_1 +menu_add Quit uzbl = exit + +# Link context menu +menu_link_add Print Link = print \@SELECTED_URI + +# === Mode configuration ===================================================== + +# Define some mode specific uzbl configurations. +set command = @mode_config command +set insert = @mode_config insert +set stack = @mode_config stack + +# Command mode config. +@command keycmd_style = foreground="red" +@command status_background = #202020 +@command mode_indicator = Cmd +@command keycmd_events = 1 +@command forward_keys = 0 +@command modcmd_updates = 1 + +# Insert mode config. +@insert status_background = #303030 +@insert mode_indicator = Ins +@insert forward_keys = 1 +@insert keycmd_events = 0 +@insert modcmd_updates = 0 + +# Multi-stage-binding mode config. +@stack keycmd_style = foreground="red" +@stack status_background = #202020 +@stack mode_indicator = Bnd +@stack prompt_style = foreground="#888" weight="light" +@stack keycmd_events = 1 +@stack modcmd_updates = 1 +@stack forward_keys = 0 + +set default_mode = command + +# === Post-load misc commands ================================================ +sync_spawn_exec @scripts_dir/load_cookies.sh +sync_spawn_exec @scripts_dir/load_cookies.sh @data_home/uzbl/session-cookies.txt + +# Set the "home" page. +set uri = uzbl.org/doesitwork/@COMMIT + +# vim: set fdm=syntax: diff --git a/.config/uzbl/style.css b/.config/uzbl/style.css @@ -0,0 +1,34 @@ +#uzbl_link_hints > span { + z-index: 1000 !important; + + background-color: #333 !important; + margin: 0 !important; + padding: 3px !important; + + color: #ccc !important; + font-size: 9px !important; + line-height: 9px !important; + font-weight: bold !important; + font-variant: normal !important; + text-decoration: none !important; + + -webkit-transform: translate(-5px,-5px); + opacity: 0.8; + -webkit-border-radius: 6px !important; + /* Play around with this, pretty fun things to do :) */ + /* -webkit-transform: scale(1) rotate(0deg) translate(-6px,-5px) !important; */ +} + +/* we can have different colours for different types of hints! */ +#uzbl_link_hints.new-window > span { + background-color: #ffff00 !important; + color: black !important; +} + +.uzbl-follow-text-match { + outline: 2px solid invert; + background: #333 !important; + color: white !important; +} + +/* vim:set et ts=4: */ diff --git a/.config/zathura/zathurarc b/.config/zathura/zathurarc @@ -0,0 +1,9 @@ +set font "lime normal 9" +set default-bg "#30303a" +set default-fg "#d6d6d6" +set statusbar-bg "#30303a" +set statusbar-fg "#d6d6d6" +set adjust-open width +set inputbar-fg "#aaaaaa" +set completion-highlight-bg "#30303a" +set completion-highlight-fg "#aaaaaa" diff --git a/.conkyrc b/.conkyrc @@ -0,0 +1,82 @@ +background yes +use_xft yes +xftfont Sans:size=8 +xftalpha 1 +update_interval 4.0 +total_run_times 0 +own_window yes +own_window_transparent yes +own_window_type desktop +own_window_hints undecorated,below,sticky,skip_taskbar,skip_pager +double_buffer yes +minimum_size 200 200 +maximum_width 200 +draw_shades no +draw_outline no +draw_borders no +draw_graph_borders yes +default_color white +default_shade_color black +default_outline_color white +alignment top_left +#gap_x 12 +gap_x 6 +gap_y 56 +no_buffers yes +uppercase no +cpu_avg_samples 2 +override_utf8_locale no +default_color 656667 +default_shade_color 000000 +default_outline_color 828282 + +TEXT +$alignc${exec date} + +${font sans-serif:bold:size=8}SYSTEM ${hr 2} +${font sans-serif:normal:size=8}$sysname $kernel $alignr $machine +Host:$alignr$nodename +Uptime:$alignr$uptime +#File System: $alignr${fs_type} +Battery: $alignr ${exec acpi| awk '{print $4 ", " $5}'} + + +${font sans-serif:bold:size=8}PROCESSORS ${hr 2} +${font sans-serif:normal:size=8}${cpugraph cpu1} +CPU: ${cpu cpu1}% ${cpubar cpu1} + + +${font sans-serif:bold:size=8}MEMORY ${hr 2} +${font sans-serif:normal:size=8}RAM $alignc $mem / $memmax $alignr $memperc% +$membar + + +${font sans-serif:bold:size=8}DISKS ${hr 2} +${font sans-serif:normal:size=8}/ $alignc ${fs_used /} / ${fs_size /} $alignr ${fs_used_perc /}% +${fs_bar /} +#SWAP $alignc ${swap} / ${swapmax} $alignr ${swapperc}% +#${swapbar} + + +${font sans-serif:bold:size=8}TOP PROCESSES - CPU ${hr 2} +${font sans-serif:normal:size=8}${top name 1}${alignr}${top cpu 1} % +${font sans-serif:normal:size=8}${top name 2}${alignr}${top cpu 2} % +${font sans-serif:normal:size=8}${top name 3}${alignr}${top cpu 3} % + +${font sans-serif:bold:size=8}TOP PROCESSES - MEM ${hr 2} +${font sans-serif:normal:size=8}${top_mem name 1}${alignr}${top mem 1} % +${font sans-serif:normal:size=8}${top_mem name 2}${alignr}${top mem 2} % +${font sans-serif:normal:size=8}${top_mem name 3}${alignr}${top mem 3} % + + +${font sans-serif:bold:size=8}NETWORK ${hr 2} +${font sans-serif:normal:size=8}IP address: $alignr ${addr wlan0} +ESSID: $alignr ${wireless_essid wlan0} +#Connection quality: $alignr ${wireless_link_qual_perc wlan0}% +D: ${downspeed wlan0} $alignr total: ${totaldown wlan0} +U: ${upspeed wlan0} $alignr total: ${totalup wlan0} + +${font sans-serif:bold:size=8}MPD ${hr 2} +${font sans-serif:normal:size=8}${exec mpc status|tail -n 2|sed 's/\t/ /; s/ / /; s/volume/v/; s/repeat: off//; s/repeat: on/repeat/; s/random: off//; s/random: on/random/; s/single: off//; s/single: on/single/; s/consume: off//; s/consume: on/consume/;' } +${font sans-serif:normal:size=8}${exec mpc current} + diff --git a/.ctags b/.ctags @@ -0,0 +1,4 @@ +--python-kinds=-i +--exclude=build +--exclude=dist +--exclude=output diff --git a/.gitconfig b/.gitconfig @@ -0,0 +1,8 @@ +[user] + email = adc@geo.au.dk + name = Anders Damsgaard Christensen + signkey = AC6517CA +[color] + ui = auto +[push] + default = simple diff --git a/.i3/config b/.i3/config @@ -0,0 +1,315 @@ +# This file has been auto-generated by i3-config-wizard(1). +# It will not be overwritten, so edit it as you like. +# +# Should you change your keyboard layout somewhen, delete +# this file and re-run i3-config-wizard(1). +# + +# i3 config file (v4) +# +# Please see http://i3wm.org/docs/userguide.html for a complete reference! + +# Super as modifier +set $mod Mod4 +set $alt Mod1 + +# Alt as modifier +#set $mod Mod1 +#set $alt Control + +# Font for window titles. Will also be used by the bar unless a different font +# is used in the bar {} block below. ISO 10646 = Unicode +#font -misc-fixed-medium-r-normal--12-120-75-75-C-70-iso10646-1 +# The font above is very space-efficient, that is, it looks good, sharp and +# clear in small sizes. However, if you need a lot of unicode glyphs or +# right-to-left text rendering, you should instead use pango for rendering and +# chose an xft font, such as: +#font xft:DejaVu Sans Mono 10 +#font xft:LucidaTypewriter 7 +#font -*-termsynu-medium-r-*-*-13-*-*-*-*-*-*-* +font xft:PragmataPro 10 +#font -*-nu-*-*-*-*-*-*-*-*-*-*-*-* +#font -*-terminus-*-*-*-*-*-*-*-*-*-*-*-* + +# Window style +# normal: default border, window title +# 1pixel: 1 pixel border, no window title +# none: no border, no window title +new_window 1pixel + +# color class border backgr. text indicator + +# default +#client.focused #4c7899 #285577 #ffffff #2e9ef4 +##client.focused_inactive #333333 #5f676a #ffffff #484e50 +#client.focused_inactive #333333 #222222 #888888 #292d2e +#client.unfocused #333333 #222222 #888888 #292d2e +#client.urgent #2f343a #900000 #ffffff #900000 + +# gray +#client.focused #666666 #333333 #ffffff #555555 +#client.focused_inactive #333333 #222222 #888888 #333333 +#client.unfocused #333333 #222222 #888888 #222222 +#client.urgent #2f343a #900000 #ffffff #900000 + +# erosionedit +#client.focused #bea492 #bea492 #332d29 #93a1a1 +#client.focused_inactive #333333 #222222 #888888 #333333 +#client.unfocused #333333 #222222 #888888 #222222 +#client.urgent #181512 #900000 #ffffff #900000 + +# solarized dark +#client.focused #002b36 #586e75 #fdf6e3 #268bd2 +#client.focused_inactive #002b36 #073642 #839496 #073642 +#client.unfocused #002b36 #073642 #839496 #073642 +#client.urgent #002b36 #dc322f #fdf6e3 #002b36 + +# solarized black +# color class border backgr. text indicator +client.focused #232323 #6a6a6a #fdf6e3 #268bd2 +client.focused_inactive #3d3d3d #3d3d3d #839496 #073642 +client.unfocused #232323 #232323 #839496 #073642 +client.urgent #002b36 #dc322f #fdf6e3 #002b36 + +# Use Mouse+$mod to drag floating windows to their wanted position +floating_modifier $mod + +# start a terminal +bindsym $mod+Return exec i3-sensible-terminal -e tmux +bindsym $mod+Shift+Return exec i3-sensible-terminal + +# other application launchers +#bindsym $mod+b exec uzbl-browser +bindsym $mod+b exec firefox +#bindsym $mod+Shift+b exec chromium +#bindsym $mod+b exec dwb +bindsym $mod+c exec emacs +bindsym $mod+v exec gvim +#bindsym $mod+t exec tor-browser.sh +bindsym $mod+t exec torbrowser-launcher +bindsym $mod+p exec zathura +bindsym $mod+$alt+l exec --no-startup-id ~/bin/keyboard-layout-switch.sh && notify-send `cat ~/.kbd-layout` && killall -SIGUSR1 i3status +#bindsym $alt+Shift+l exec --no-startup-id ~/bin/keyboard-layout-switch.sh && +#notify-send `cat ~/.kbd-layout` +bindsym $mod+n exec nautilus +bindsym $mod+g exec gnome-control-center + +# volume control with pulseaudio +#bindsym XF86AudioRaiseVolume exec --no-startup-id pactl set-sink-volume 0 -- +10% && killall -SIGUSR1 i3status +#bindsym XF86AudioLowerVolume exec --no-startup-id pactl set-sink-volume 0 -- -10% && killall -SIGUSR1 i3status + +# volume control with alsamixer +bindsym XF86AudioRaiseVolume exec --no-startup-id amixer set Master 3%+ unmute && killall -SIGUSR1 i3status +bindsym XF86AudioLowerVolume exec --no-startup-id amixer set Master 3%- unmute && killall -SIGUSR1 i3status +bindsym XF86AudioMute exec --no-startup-id amixer set Master toggle && killall -SIGUSR1 i3status +bindsym $mod+Shift+i exec --no-startup-id amixer set Master 3%+ unmute && killall -SIGUSR1 i3status +bindsym $mod+Shift+o exec --no-startup-id amixer set Master 3%- unmute && killall -SIGUSR1 i3status +bindsym $mod+Shift+m exec --no-startup-id amixer set Master toggle && killall -SIGUSR1 i3status + +# keyboard backlight +bindsym XF86KbdBrightnessDown exec --no-startup-id /home/ad/bin/kbd_backlight.sh down +bindsym XF86KbdBrightnessUp exec --no-startup-id /home/ad/bin/kbd_backlight.sh up + +# mpd control +bindsym $mod+Shift+p exec --no-startup-id mpc toggle && killall -SIGUSR1 i3status +bindsym $mod+Shift+n exec --no-startup-id mpc next && killall -SIGUSR1 i3status +bindsym $mod+Shift+b exec --no-startup-id mpc prev && killall -SIGUSR1 i3status +bindsym $mod+Shift+s exec --no-startup-id mpc stop && killall -SIGUSR1 i3status + +# Light X colors +#bindsym $mod+Shift+w exec --no-startup-id /home/ad/bin/solarized-light.sh +#bindsym $mod+Shift+d exec --no-startup-id /home/ad/bin/solarized-dark.sh + +# configura displays +bindsym $mod+Shift+d exec --no-startup-id bash /home/ad/code/dotfiles/bin/xrandr-auto.sh +bindsym $mod+Shift+a exec --no-startup-id bash /home/ad/bin/wallpaper.sh && xrandr --auto + +# screen lock +bindsym $mod+z exec /home/ad/bin/zzz +bindsym $mod+x exec /home/ad/bin/xlock + +# kill focused window +bindsym $mod+Shift+q kill + +# start dmenu (a program launcher) +bindsym $mod+space exec dmenu_run -nb \#222222 -nf \#888888 -sb \#333333 -sf \#ffffff + +# change focus +bindsym $mod+h focus left +bindsym $mod+$alt+Shift+h focus left +bindsym $mod+j focus down +bindsym $mod+k focus up +bindsym $mod+l focus right + +# alternatively, you can use the cursor keys: +bindsym $mod+Left focus left +bindsym $mod+Down focus down +bindsym $mod+Up focus up +bindsym $mod+Right focus right + +# move focused window +bindsym $mod+Shift+h move left +bindsym $mod+Shift+j move down +bindsym $mod+Shift+k move up +bindsym $mod+Shift+l move right + +# alternatively, you can use the cursor keys: +bindsym $mod+Shift+Left move left +bindsym $mod+Shift+Down move down +bindsym $mod+Shift+Up move up +bindsym $mod+Shift+Right move right + +# split in horizontal orientation +#bindsym $alt+l split h +bindsym $mod+Control+l split h + +# split in vertical orientation +#bindsym $alt+j split v +bindsym $mod+Control+j split v + +# enter fullscreen mode for the focused container +bindsym $mod+f fullscreen + +# change container layout (stacked, tabbed, toggle split) +bindsym $mod+s layout stacking +bindsym $mod+w layout tabbed +bindsym $mod+e layout toggle split + +# toggle tiling / floating +bindsym $mod+Shift+f floating toggle + +# change focus between tiling / floating windows +bindsym $mod+Tab focus mode_toggle + +# focus the parent container +bindsym $mod+a focus parent + +# focus the child container +bindsym $mod+d focus child + +# switch to workspace +bindsym $mod+1 workspace 1 +bindsym $mod+2 workspace 2 +bindsym $mod+3 workspace 3 +bindsym $mod+4 workspace 4 +bindsym $mod+5 workspace 5 +bindsym $mod+6 workspace 6 +bindsym $mod+7 workspace 7 +bindsym $mod+8 workspace 8 +bindsym $mod+9 workspace 9 +bindsym $mod+0 workspace 10 + +# move focused container to workspace +bindsym $mod+Shift+1 move container to workspace 1 +bindsym $mod+Shift+2 move container to workspace 2 +bindsym $mod+Shift+3 move container to workspace 3 +bindsym $mod+Shift+4 move container to workspace 4 +bindsym $mod+Shift+5 move container to workspace 5 +bindsym $mod+Shift+6 move container to workspace 6 +bindsym $mod+Shift+7 move container to workspace 7 +bindsym $mod+Shift+8 move container to workspace 8 +bindsym $mod+Shift+9 move container to workspace 9 +bindsym $mod+Shift+0 move container to workspace 10 + +# reload the configuration file +bindsym $mod+Shift+c reload +# restart i3 inplace (preserves your layout/session, can be used to upgrade i3) +bindsym $mod+Shift+r restart +# exit i3 (logs you out of your X session) +bindsym $mod+Shift+e exec "i3-nagbar -t warning -m 'You pressed the exit shortcut. Do you really want to exit i3? This will end your X session.' -b 'Yes, exit i3' 'i3-msg exit'" + +# resize window (you can also use the mouse for that) +mode "resize" { + # These bindings trigger as soon as you enter the resize mode + + # Pressing left will shrink the window’s width. + # Pressing right will grow the window’s width. + # Pressing up will shrink the window’s height. + # Pressing down will grow the window’s height. + bindsym h resize shrink width 10 px or 10 ppt + bindsym j resize grow height 10 px or 10 ppt + bindsym k resize shrink height 10 px or 10 ppt + bindsym l resize grow width 10 px or 10 ppt + + # same bindings, but for the arrow keys + bindsym Left resize shrink width 10 px or 10 ppt + bindsym Down resize grow height 10 px or 10 ppt + bindsym Up resize shrink height 10 px or 10 ppt + bindsym Right resize grow width 10 px or 10 ppt + + # back to normal: Enter or Escape + bindsym Return mode "default" + bindsym Escape mode "default" +} + +bindsym $mod+r mode "resize" + +# Start i3bar to display a workspace bar (plus the system information i3status +# finds out, if available) +bar { + #status_command i3status --config ~/.i3/status + status_command ~/bin/i3status-mpc.sh + #status_command i3blocks -c ~/.i3/i3blocks + #status_command conky -c ~/.i3/conkyrc + position top + #position bottom + mode dock + #mode hide + workspace_buttons yes + #tray_output none + #tray_output primary + + #font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1 + #font pango:Droid Sans 8 + + colors { + + # colorclass <border> <backgr.> <text> + + # default + background #111111 + statusline #ffffff + separator #333333 + focused_workspace #4c7899 #285577 #ffffff + active_workspace #333333 #5f676a #ffffff + inactive_workspace #333333 #222222 #888888 + urgent_workspace #2f343a #900000 #ffffff + + # solarized dark + #background #002b36 + #statusline #657b83 + #separator #586e75 + #focused_workspace #b58900 #b58900 #002b36 + #active_workspace #586e75 #586e75 #002b36 + #inactive_workspace #073642 #002b36 #839496 + #urgent_workspace #dc322f #dc322f #fdf6e3 + + # solarized black + #background #232323 + #statusline #657b83 + #separator #586e75 + #focused_workspace #6a6a6a #6a6a6a #002b36 + #active_workspace #586e75 #586e75 #002b36 + #inactive_workspace #2d2d2d #232323 #839496 + #urgent_workspace #dc322f #dc322f #fdf6e3 + + # solarized light + #background #fdf6e3 + #statusline #657b83 + #separator #586e75 + #focused_workspace #b58900 #b58900 #002b36 + #active_workspace #586e75 #586e75 #002b36 + #inactive_workspace #fdf6e3 #fdf6e3 #839496 + #urgent_workspace #dc322f #dc322f #fdf6e3 + } +} + +# auto-start programs +#exec --no-startup-id wicd-client --tray +exec --no-startup-id nm-applet +#exec --no-startup-id i3-msg 'workspace 2; exec emacs; workspace 3; exec firefox; workspace 1; exec urxvt -e tmux-utility.sh' +#exec --no-startup-id i3-msg 'workspace 2; exec firefox; workspace 1; exec urxvt -e tmuxinator utility' +#exec --no-startup-id i3-msg 'workspace 2; exec urxvt -e tmuxinator iddqd; workspace 1; exec urxvt -e tmuxinator utility' +#exec --no-startup-id i3-msg 'workspace 1; exec urxvt -e tmuxinator utility; exec tor-browser.sh' +exec --no-startup-id i3-msg 'workspace 1; exec urxvt -e tmuxinator utility; exec torbrowser-launcher' +exec --no-startup-id i3-msg 'workspace 1; exec bash ~/bin/export_x_info.sh; exec mpd; exec xrdb ~/.Xresources' diff --git a/.i3/i3blocks b/.i3/i3blocks @@ -0,0 +1,99 @@ +# i3blocks config file +# +# Please see man i3blocks for a complete reference! +# The man page is also hosted at http://vivien.github.io/i3blocks +# +# List of valid properties: +# +# align +# color +# command +# full_text +# instance +# interval +# label +# min_width +# name +# separator +# separator_block_width +# short_text +# signal +# urgent + +# Global properties +#separator_block_width=15 +separator_block_width=10 + +[MPD] +label=MPD +command=mpc status | perl -ne "if (/\\[playing\\]/) {CORE::say '$(mpc current)'}" +color=#00FF00 +interval=20 + +[layout] +command=cat $HOME/.kbd-layout +interval=30 + +[volume] +#label=VOL +label=♪ +instance=Master +#instance=PCM +command=/usr/share/i3blocks/volume +interval=once +signal=10 + +[memory] +label=MEM +command=/usr/share/i3blocks/memory +#separator=false +interval=30 + +[swap] +label=SWAP +instance=swap +command=/usr/share/i3blocks/memory +interval=30 + +[disk-home] +instance=$HOME +command=/usr/share/i3blocks/disk +interval=30 + +[wireless] +label=W +#instance=wlan0 +instance=wlan1 +#instance=wlp3s0 +command=/usr/share/i3blocks/network +color=#00FF00 +interval=10 + +[ethernet] +label=E +instance=eth0 +#instance=enp0s25 +command=/usr/share/i3blocks/network +color=#00FF00 +interval=10 + +#[cpu] +#label=CPU +#command=/usr/share/i3blocks/cpu_usage +#interval=10 +#min_width=CPU: 100.00% +##separator=false + +#[load] +#command=/usr/share/i3blocks/load_average +#interval=10 + +[battery] +label=BAT +#label=âš¡ +command=/usr/share/i3blocks/battery +interval=30 + +[time] +command=date '+%Y-%m-%d %H:%M:%S' +interval=5 diff --git a/.i3/status b/.i3/status @@ -0,0 +1,68 @@ +general { + output_format = "i3bar" + colors = true + interval = 5 + color_good = "#859900" + color_bad = "#dc322f" + color_degraded = "#cb4b16" +} + +#order += "ipv6" +#order += "disk /" +order += "run_watch DHCP" +#order += "run_watch VPN" +order += "wireless wlan1" +order += "ethernet eth0" +order += "volume master" +order += "battery 0" +order += "load" +#order += "cpu_usage" +order += "time" + +wireless wlan1 { + format_up = "W: (%quality at %essid) %ip" + format_down = "W: down" +} + +ethernet eth0 { + # if you use %speed, i3status requires root privileges + format_up = "E: %ip (%speed)" + format_down = "E: down" +} + +volume master { + format = "V: %volume" + device = "default" + mixer = "Master" + mixer_idx = 0 +} + +battery 0 { + format = "%status %percentage %remaining" +} + +run_watch DHCP { + pidfile = "/var/run/dhclient*.pid" +} + +run_watch VPN { + #pidfile = "/var/run/vpnc/pid" + pidfile = "/var/run/vpnc/defaultroute" +} + +time { + format = "%Y-%m-%d %H:%M:%S" +} + +load { + format = "%1min %5min" +} + +cpu_usage { + #color = "#00FF00" + format= "%usage" +} + +disk "/" { + format = "%free (or: %percentage_used used, %percentage_used_of_avail used of avail, %percentage_free free, %percentage_avail avail)" +} diff --git a/.inputrc b/.inputrc @@ -0,0 +1,3 @@ +set editing-mode vi +set keymap vi +#set convert-meta on diff --git a/.kwm/kwmrc b/.kwm/kwmrc @@ -0,0 +1,203 @@ +# This is a sample config for Kwm +# The commands listed here can be of +# two types. +# +# Commands prefixed with 'kwmc' will call +# local functions corresponding to the +# kwmc syntax. +# +# To run a system command, use the prefix +# 'sys' and then the requested command +# e.g 'sys mvim' would open macvim + +# Read file and execute commands as +# if they were written inside kwmrc. +# +# include filename +# +# e.g: bind-commands in a separate file called 'binds' +# include binds + +# Set default values for screen padding +kwmc config padding 40 20 20 20 + +# Set default values for container gaps +kwmc config gap 15 15 + +# Default tiling mode for Kwm (bsp | monocle | float | off) +kwmc config tiling float + +# Let Kwm listen for hotkeys +kwmc config hotkeys on + +# Set prefix for Kwms hotkeys +kwmc config prefix-key ctrl-x + +# Prefix is not applied globally +kwmc config prefix-global off + +# Time in seconds, before prefix must be re-activated +kwmc config prefix-timeout 0.75 + +# Automatically float windows that fail to resize +kwmc config float-non-resizable on + +# Set focus-follows-mouse-mode to autoraise +kwmc config focus autoraise + +# Focus-follows-mouse is temporarily disabled when +# a floating window has focus +kwmc config focus standby-on-float on + +# The mouse will automatically move to the center +# of the focused window +kwmc config focus mouse-follows on + +# Allow window focus to wrap-around +kwmc config cycle-focus screen + +# Default tiling mode for new spaces +kwmc config space bsp + +# Override default settings for space 1 on screen 0 +# kwmc config space 0 1 mode monocle +# kwmc config space 0 1 padding 100 100 100 100 +# kwmc config space 0 1 gap 40 40 + +# Override default settings for screen 1 +# kwmc config screen 1 mode bsp +# kwmc config screen 1 padding 100 100 100 100 +# kwmc config screen 1 gap 40 40 + +# Set default container split-ratio +kwmc config split-ratio 0.5 + +# New splits become the left leaf-node +kwmc config spawn left + +# Add custom tiling rules for applications that +# does not get tiled by Kwm by default. +# This is because some applications do not have the +# AXWindowRole and AXStandardWindowSubRole +kwmc config add-role AXDialog iTerm2 + +# The following command blacklists a specific application +# from Kwms tiling (PS: The app name is case-sensitive) +# If the name consist of multiple words, the command +# looks like: kwmc config float Google Chrome +kwmc config float Steam +kwmc config float Photoshop + +# The following command captures an application to the +# given screen, if the screen exists. By doing this +# the application can no longer be moved to other screens +# kwmc config capture 1 iTunes + +# Enable border for focused window +kwmc config focused-border on +kwmc config focused-border size 5 +kwmc config focused-border color FFBDD322 + +# Enable border for marked window +kwmc config marked-border on +kwmc config marked-border size 5 +kwmc config marked-border color FFCC5577 + +# Change border color when prefix-key is active +kwmc config prefix-border on +kwmc config prefix-border size 5 +kwmc config prefix-border color FF458588 + +######## Default Keybinds ######## + +# Quit Kwm +kwmc bind cmd+alt+ctrl-q quit + +# Launch iTerm2 +kwmc bind alt-return sys open -na /Applications/iTerm2.app + +# Toggle Focus Autoraise +kwmc bind cmd+alt+ctrl-t config focus toggle + +# Set Space Tiling Mode To BSP +kwmc bind alt+ctrl-a space -t bsp + +# Set Space Tiling Mode To Monocle +kwmc bind alt+ctrl-s space -t monocle + +# Set Space Tiling Mode To Floating +kwmc bind alt+ctrl-d space -t float + +# Rotate Window-Tree By 90* (Clockwise) +kwmc bind alt+ctrl-r tree -r 90 + +# Modify Container +kwmc bind prefix-s window -c split +kwmc bind prefix-h window -c reduce 0.05 +kwmc bind prefix-l window -c expand 0.05 + +# Set Temporary Window Container +kwmc bind prefix-f window -t fullscreen +kwmc bind prefix-p window -t parent +kwmc bind prefix-w window -t float + +# Mark Window +kwmc bind cmd+alt+ctrl-m mark -w focused +kwmc bind cmd+alt+ctrl-h mark -w west wrap +kwmc bind cmd+alt+ctrl-l mark -w east wrap +kwmc bind cmd+alt+ctrl-j mark -w south wrap +kwmc bind cmd+alt+ctrl-k mark -w north wrap + +# Give Focus To Window +kwmc bind alt-h window -f west +kwmc bind alt-l window -f east +kwmc bind alt-j window -f south +kwmc bind alt-k window -f north + +# Give Focus To Screen +#kwmc bind cmd+alt-1 screen -f 0 +#kwmc bind cmd+alt-2 screen -f 1 +#kwmc bind cmd+alt-3 screen -f 2 + +# Move Focused Window +kwmc bind alt+shift-h window -s west +kwmc bind alt+shift-j window -s south +kwmc bind alt+shift-k window -s north +kwmc bind alt+shift-l window -s east + +# Swap With Marked Window +kwmc bind ctrl+alt-m window -s mark + +# Detach Focused Window And Reinsert In Direction +kwmc bind ctrl+shift-k window -x north +kwmc bind ctrl+shift-l window -x east +kwmc bind ctrl+shift-j window -x south +kwmc bind ctrl+shift-h window -x west + +# Detach Marked Window And Reinsert At Focused Window +kwmc bind ctrl+shift-x window -x mark + +# Move Focused Window To Screen +kwmc bind alt+shift-1 screen -m 0 +kwmc bind alt+shift-2 screen -m 1 +kwmc bind alt+shift-3 screen -m 2 + +# Increase Container Gaps +kwmc bind prefix-x space -g increase horizontal +kwmc bind prefix-y space -g increase vertical + +# Decrease Container Gaps +kwmc bind prefix+shift-x space -g decrease horizontal +kwmc bind prefix+shift-y space -g decrease vertical + +# Increase Screen Padding +kwmc bind prefix-left space -p increase left +kwmc bind prefix-right space -p increase right +kwmc bind prefix-up space -p increase top +kwmc bind prefix-down space -p increase bottom + +# Decrease Screen Padding +kwmc bind prefix+shift-left space -p decrease left +kwmc bind prefix+shift-right space -p decrease right +kwmc bind prefix+shift-up space -p decrease top +kwmc bind prefix+shift-down space -p decrease bottom diff --git a/.locale b/.locale @@ -0,0 +1,9 @@ +#!/bin/sh + +# Set locale preferences +export LANG="en_US.UTF-8" +export LANGUAGE="en_US.UTF-8" +#export LC_ALL= +export LC_ALL="en_US.UTF-8" +export LC_CTYPE="en_US.UTF-8" +export LC_COLLATE="C" diff --git a/.mailcap b/.mailcap @@ -0,0 +1,22 @@ +# HTML +text/html; w3m -I %{charset} -T text/html; copiousoutput; + +# MS Word documents +#application/msword; ~/.mutt/view_attachment.sh %s "-" '/Applications/TextEdit.app' +application/msword; ~/.mutt/view_attachment.sh %s "-" + +# Images +image/jpg; ~/.mutt/view_attachment.sh %s jpg +image/jpeg; ~/.mutt/view_attachment.sh %s jpg +image/pjpeg; ~/.mutt/view_attachment.sh %s jpg +image/png; ~/.mutt/view_attachment.sh %s png +image/gif; ~/.mutt/view_attachment.sh %s gif + +# PDFs +application/pdf; ~/.mutt/view_attachment.sh %s pdf + +# Unidentified files +application/octet-stream; ~/.mutt/view_attachment.sh %s "-" + +video/mp4; ~/.mutt/view_attachment.sh %s "-" +video/avi; ~/.mutt/view_attachment.sh %s "-" diff --git a/.mpd/mpd.conf b/.mpd/mpd.conf @@ -0,0 +1,413 @@ +# An example configuration file for MPD. +# Read the user manual for documentation: http://www.musicpd.org/doc/user/ + + +# Files and directories ####################################################### +# +# This setting controls the top directory which MPD will search to discover the +# available audio files and add them to the daemon's online database. This +# setting defaults to the XDG directory, otherwise the music directory will be +# be disabled and audio files will only be accepted over ipc socket (using +# file:// protocol) or streaming files over an accepted protocol. +# +music_directory "~/music" +# +# This setting sets the MPD internal playlist directory. The purpose of this +# directory is storage for playlists created by MPD. The server will use +# playlist files not created by the server but only if they are in the MPD +# format. This setting defaults to playlist saving being disabled. +# +playlist_directory "~/.mpd/playlists" +# +# This setting sets the location of the MPD database. This file is used to +# load the database at server start up and store the database while the +# server is not up. This setting defaults to disabled which will allow +# MPD to accept files over ipc socket (using file:// protocol) or streaming +# files over an accepted protocol. +# +db_file "~/.mpd/database" +# +# These settings are the locations for the daemon log files for the daemon. +# These logs are great for troubleshooting, depending on your log_level +# settings. +# +# The special value "syslog" makes MPD use the local syslog daemon. This +# setting defaults to logging to syslog, otherwise logging is disabled. +# +log_file "~/.mpd/log" +# +# This setting sets the location of the file which stores the process ID +# for use of mpd --kill and some init scripts. This setting is disabled by +# default and the pid file will not be stored. +# +pid_file "~/.mpd/pid" +# +# This setting sets the location of the file which contains information about +# most variables to get MPD back into the same general shape it was in before +# it was brought down. This setting is disabled by default and the server +# state will be reset on server start up. +# +state_file "~/.mpd/state" +# +# The location of the sticker database. This is a database which +# manages dynamic information attached to songs. +# +sticker_file "~/.mpd/sticker.sql" +# +############################################################################### + + +# General music daemon options ################################################ +# +# This setting specifies the user that MPD will run as. MPD should never run as +# root and you may use this setting to make MPD change its user ID after +# initialization. This setting is disabled by default and MPD is run as the +# current user. +# +#user "nobody" +# +# This setting specifies the group that MPD will run as. If not specified +# primary group of user specified with "user" setting will be used (if set). +# This is useful if MPD needs to be a member of group such as "audio" to +# have permission to use sound card. +# +#group "nogroup" +# +# This setting sets the address for the daemon to listen on. Careful attention +# should be paid if this is assigned to anything other then the default, any. +# This setting can deny access to control of the daemon. +# +# For network +#bind_to_address "any" +# +# And for Unix Socket +#bind_to_address "~/.mpd/socket" +# +# This setting is the TCP port that is desired for the daemon to get assigned +# to. +# +#port "6600" +# +# This setting controls the type of information which is logged. Available +# setting arguments are "default", "secure" or "verbose". The "verbose" setting +# argument is recommended for troubleshooting, though can quickly stretch +# available resources on limited hardware storage. +# +#log_level "default" +# +# If you have a problem with your MP3s ending abruptly it is recommended that +# you set this argument to "no" to attempt to fix the problem. If this solves +# the problem, it is highly recommended to fix the MP3 files with vbrfix +# (available from <http://www.willwap.co.uk/Programs/vbrfix.php>), at which +# point gapless MP3 playback can be enabled. +# +#gapless_mp3_playback "yes" +# +# Setting "restore_paused" to "yes" puts MPD into pause mode instead +# of starting playback after startup. +# +#restore_paused "no" +# +# This setting enables MPD to create playlists in a format usable by other +# music players. +# +#save_absolute_paths_in_playlists "no" +# +# This setting defines a list of tag types that will be extracted during the +# audio file discovery process. The complete list of possible values can be +# found in the mpd.conf man page. +#metadata_to_use "artist,album,title,track,name,genre,date,composer,performer,disc" +# +# This setting enables automatic update of MPD's database when files in +# music_directory are changed. +# +#auto_update "yes" +# +# Limit the depth of the directories being watched, 0 means only watch +# the music directory itself. There is no limit by default. +# +#auto_update_depth "3" +# +############################################################################### + + +# Symbolic link behavior ###################################################### +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links outside of the configured music_directory. +# +#follow_outside_symlinks "yes" +# +# If this setting is set to "yes", MPD will discover audio files by following +# symbolic links inside of the configured music_directory. +# +#follow_inside_symlinks "yes" +# +############################################################################### + + +# Zeroconf / Avahi Service Discovery ########################################## +# +# If this setting is set to "yes", service information will be published with +# Zeroconf / Avahi. +# +#zeroconf_enabled "yes" +# +# The argument to this setting will be the Zeroconf / Avahi unique name for +# this MPD server on the network. +# +#zeroconf_name "Music Player" +# +############################################################################### + + +# Permissions ################################################################# +# +# If this setting is set, MPD will require password authorization. The password +# can setting can be specified multiple times for different password profiles. +# +#password "password@read,add,control,admin" +# +# This setting specifies the permissions a user has who has not yet logged in. +# +#default_permissions "read,add,control,admin" +# +############################################################################### + + +# Database ####################################################################### +# + +#database { +# plugin "proxy" +# host "other.mpd.host" +# port "6600" +#} + +# Input ####################################################################### +# + +input { + plugin "curl" +# proxy "proxy.isp.com:8080" +# proxy_user "user" +# proxy_password "password" +} + +# +############################################################################### + +# Audio Output ################################################################ +# +# MPD supports various audio output types, as well as playing through multiple +# audio outputs at the same time, through multiple audio_output settings +# blocks. Setting this block is optional, though the server will only attempt +# autodetection for one sound card. +# +# An example of an ALSA output: +# +#audio_output { +# type "alsa" +# name "My ALSA Device" +## device "hw:0,0" # optional +## mixer_type "hardware" # optional +## mixer_device "default" # optional +## mixer_control "PCM" # optional +## mixer_index "0" # optional +#} +# +# An example of an OSS output: +# +#audio_output { +# type "oss" +# name "My OSS Device" +## device "/dev/dsp" # optional +## mixer_type "hardware" # optional +## mixer_device "/dev/mixer" # optional +## mixer_control "PCM" # optional +#} +# +# An example of a shout output (for streaming to Icecast): +# +#audio_output { +# type "shout" +# encoding "ogg" # optional +# name "My Shout Stream" +# host "localhost" +# port "8000" +# mount "/mpd.ogg" +# password "hackme" +# quality "5.0" +# bitrate "128" +# format "44100:16:1" +## protocol "icecast2" # optional +## user "source" # optional +## description "My Stream Description" # optional +## url "http://example.com" # optional +## genre "jazz" # optional +## public "no" # optional +## timeout "2" # optional +## mixer_type "software" # optional +#} +# +# An example of a recorder output: +# +#audio_output { +# type "recorder" +# name "My recorder" +# encoder "vorbis" # optional, vorbis or lame +# path "/var/lib/mpd/recorder/mpd.ogg" +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +#} +# +# An example of a httpd output (built-in HTTP streaming server): +# +#audio_output { +# type "httpd" +# name "My HTTP Stream" +# encoder "vorbis" # optional, vorbis or lame +# port "8000" +# bind_to_address "0.0.0.0" # optional, IPv4 or IPv6 +## quality "5.0" # do not define if bitrate is defined +# bitrate "128" # do not define if quality is defined +# format "44100:16:1" +# max_clients "0" # optional 0=no limit +#} +# +# An example of a pulseaudio output (streaming to a remote pulseaudio server) +# +#audio_output { +# type "pulse" +# name "My Pulse Output" +## server "remote_server" # optional +## sink "remote_server_sink" # optional +#} +# +# An example of a winmm output (Windows multimedia API). +# +#audio_output { +# type "winmm" +# name "My WinMM output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +# or +## device "0" # optional +## mixer_type "hardware" # optional +#} +# +# An example of an openal output. +# +#audio_output { +# type "openal" +# name "My OpenAL output" +## device "Digital Audio (S/PDIF) (High Definition Audio Device)" # optional +#} +# +## Example "pipe" output: +# +#audio_output { +# type "pipe" +# name "my pipe" +# command "aplay -f cd 2>/dev/null" +## Or if you're want to use AudioCompress +# command "AudioCompress -m | aplay -f cd 2>/dev/null" +## Or to send raw PCM stream through PCM: +# command "nc example.org 8765" +# format "44100:16:2" +#} +# +## An example of a null output (for no audio output): +# +#audio_output { +# type "null" +# name "My Null Output" +# mixer_type "none" # optional +#} +# +# If MPD has been compiled with libsamplerate support, this setting specifies +# the sample rate converter to use. Possible values can be found in the +# mpd.conf man page or the libsamplerate documentation. By default, this is +# setting is disabled. +# +#samplerate_converter "Fastest Sinc Interpolator" +# +############################################################################### + + +# Normalization automatic volume adjustments ################################## +# +# This setting specifies the type of ReplayGain to use. This setting can have +# the argument "off", "album", "track" or "auto". "auto" is a special mode that +# chooses between "track" and "album" depending on the current state of +# random playback. If random playback is enabled then "track" mode is used. +# See <http://www.replaygain.org> for more details about ReplayGain. +# This setting is off by default. +# +#replaygain "album" +# +# This setting sets the pre-amp used for files that have ReplayGain tags. By +# default this setting is disabled. +# +#replaygain_preamp "0" +# +# This setting sets the pre-amp used for files that do NOT have ReplayGain tags. +# By default this setting is disabled. +# +#replaygain_missing_preamp "0" +# +# This setting enables or disables ReplayGain limiting. +# MPD calculates actual amplification based on the ReplayGain tags +# and replaygain_preamp / replaygain_missing_preamp setting. +# If replaygain_limit is enabled MPD will never amplify audio signal +# above its original level. If replaygain_limit is disabled such amplification +# might occur. By default this setting is enabled. +# +#replaygain_limit "yes" +# +# This setting enables on-the-fly normalization volume adjustment. This will +# result in the volume of all playing audio to be adjusted so the output has +# equal "loudness". This setting is disabled by default. +# +#volume_normalization "no" +# +############################################################################### + +# Character Encoding ########################################################## +# +# If file or directory names do not display correctly for your locale then you +# may need to modify this setting. +# +#filesystem_charset "UTF-8" +# +# This setting controls the encoding that ID3v1 tags should be converted from. +# +#id3v1_encoding "ISO-8859-1" +# +############################################################################### + + +# SIDPlay decoder ############################################################# +# +# songlength_database: +# Location of your songlengths file, as distributed with the HVSC. +# The sidplay plugin checks this for matching MD5 fingerprints. +# See http://www.c64.org/HVSC/DOCUMENTS/Songlengths.faq +# +# default_songlength: +# This is the default playing time in seconds for songs not in the +# songlength database, or in case you're not using a database. +# A value of 0 means play indefinitely. +# +# filter: +# Turns the SID filter emulation on or off. +# +#decoder { +# plugin "sidplay" +# songlength_database "/media/C64Music/DOCUMENTS/Songlengths.txt" +# default_songlength "120" +# filter "true" +#} +# +############################################################################### + diff --git a/.msmtprc b/.msmtprc @@ -0,0 +1,48 @@ +syslog LOG_MAIL +logfile ~/.msmtp.log + +account riseup +host mail.riseup.net +port 587 +auth on +user andersd +from andersd@riseup.net + +tls on +tls_certcheck on +tls_trust_file ~/.mutt/ca-certificates.crt + +account geomail +host asmtp.au.dk +port 587 +auth login +user au217756 +from anders.damsgaard@geo.au.dk + +tls on +tls_certcheck on +tls_trust_file ~/.mutt/ca-certificates.crt + +account ucsd +host smtp.ucsd.edu +port 465 +auth on +user adamsgaard +from adamsgaard@ucsd.edu + +tls on +tls_certcheck on +tls_trust_file ~/.mutt/ca-certificates.crt +tls_starttls off + + +account gmail +host smtp.gmail.com +port 587 +protocol smtp +auth on +from andersdc@gmail.com +user andersdc@gmail.com +tls on +tls_trust_file ~/.mutt/ca-certificates.crt + diff --git a/.mutt/cert.pem b/.mutt/cert.pem @@ -0,0 +1,4669 @@ +-----BEGIN CERTIFICATE----- +MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy +MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA +vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G +CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA +WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo +oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ +h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18 +f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN +B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy +vUxFnmG6v4SBkgPR0ml8xQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIIGDCCBgCgAwIBAgIGAT8vMXfmMA0GCSqGSIb3DQEBCwUAMIIBCjELMAkGA1UE +BhMCRVMxEjAQBgNVBAgMCUJhcmNlbG9uYTFYMFYGA1UEBwxPQmFyY2Vsb25hIChz +ZWUgY3VycmVudCBhZGRyZXNzIGF0IGh0dHA6Ly93d3cuYW5mLmVzL2VzL2FkZHJl +c3MtZGlyZWNjaW9uLmh0bWwgKTEnMCUGA1UECgweQU5GIEF1dG9yaWRhZCBkZSBD +ZXJ0aWZpY2FjaW9uMRcwFQYDVQQLDA5BTkYgQ2xhc2UgMSBDQTEaMBgGCSqGSIb3 +DQEJARYLaW5mb0BhbmYuZXMxEjAQBgNVBAUTCUc2MzI4NzUxMDEbMBkGA1UEAwwS +QU5GIEdsb2JhbCBSb290IENBMB4XDTEzMDYxMDE3NDUzOFoXDTMzMDYwNTE3NDUz +OFowggEKMQswCQYDVQQGEwJFUzESMBAGA1UECAwJQmFyY2Vsb25hMVgwVgYDVQQH +DE9CYXJjZWxvbmEgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgaHR0cDovL3d3dy5h +bmYuZXMvZXMvYWRkcmVzcy1kaXJlY2Npb24uaHRtbCApMScwJQYDVQQKDB5BTkYg +QXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24xFzAVBgNVBAsMDkFORiBDbGFzZSAx +IENBMRowGAYJKoZIhvcNAQkBFgtpbmZvQGFuZi5lczESMBAGA1UEBRMJRzYzMjg3 +NTEwMRswGQYDVQQDDBJBTkYgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqGSIb3DQEB +AQUAA4ICDwAwggIKAoICAQDHPi9xy4wynbcUbWjorVUgQKeUAVh937J7P37XmsfH +ZLOBZKIIlhhCtRwnDlg7x+BUvtJOTkIbEGMujDygUQ2s3HDYr5I41hTyM2Pl0cq2 +EuSGEbPIHb3dEX8NAguFexM0jqNjrreN3hM2/+TOkAxSdDJP2aMurlySC5zwl47K +ZLHtcVrkZnkDa0o5iN24hJT4vBDT4t2q9khQ+qb1D8KgCOb02r1PxWXu3vfd6Ha2 +mkdB97iGuEh5gO2n4yOmFS5goFlVA2UdPbbhJsb8oKVKDd+YdCKGQDCkQyG4AjmC +YiNm3UPG/qtftTH5cWri67DlLtm6fyUFOMmO6NSh0RtR745pL8GyWJUanyq/Q4bF +HQB21E+WtTsCaqjGaoFcrBunMypmCd+jUZXl27TYENRFbrwNdAh7m2UztcIyb+Sg +VJFyfvVsBQNvnp7GPimVxXZNc4VpxEXObRuPWQN1oZN/90PcZVqTia/SHzEyTryL +ckhiLG3jZiaFZ7pTZ5I9wti9Pn+4kOHvE3Y/4nEnUo4mTxPX9pOlinF+VCiybtV2 +u1KSlc+YaIM7VmuyndDZCJRXm3v0/qTE7t5A5fArZl9lvibigMbWB8fpD+c1GpGH +Eo8NRY0lkaM+DkIqQoaziIsz3IKJrfdKaq9bQMSlIfameKBZ8fNYTBZrH9KZAIhz +YwIDAQABo4IBfjCCAXowHQYDVR0OBBYEFIf6nt9SdnXsSUogb1twlo+d77sXMB8G +A1UdIwQYMBaAFIf6nt9SdnXsSUogb1twlo+d77sXMA8GA1UdEwEB/wQFMAMBAf8w +DgYDVR0PAQH/BAQDAgEGMIIBFQYDVR0RBIIBDDCCAQiCEWh0dHA6Ly93d3cuYW5m +LmVzgQtpbmZvQGFuZi5lc6SB5TCB4jE0MDIGA1UECQwrR3JhbiBWaWEgZGUgbGVz +IENvcnRzIENhdGFsYW5lcy4gOTk2LiAwODAxODESMBAGA1UEBwwJQmFyY2Vsb25h +MScwJQYDVQQKDB5BTkYgQXV0b3JpZGFkIGRlIENlcnRpZmljYWNpb24xEjAQBgNV +BAUTCUc2MzI4NzUxMDFZMFcGA1UECwxQSW5zY3JpdGEgZW4gZWwgTWluaXN0ZXJp +byBkZWwgSW50ZXJpb3IgZGUgRXNwYcOxYSBjb24gZWwgbnVtZXJvIG5hY2lvbmFs +IDE3MS40NDMwDQYJKoZIhvcNAQELBQADggIBAIgR9tFTZ9BCYg+HViMxOfF0MHN2 +Pe/eC128ARdS+GH8A4thtbqiH/SOYbWofO/0zssHhNKa5iQEj45lCAb8BANpWJMD +nWkPr6jq2+50a6d0MMgSS2l1rvjSF+3nIrEuicshHXSTi3q/vBLKr7uGKMVFaM68 +XAropIwk6ndlA0JseARSPsbetv7ALESMIZAxlHV1TcctYHd0bB3c/Jz+PLszJQqs +Cg/kBPo2D111OXZkIY8W/fJuG9veR783khAK2gUnC0zLLCNsYzEbdGt8zUmBsAsM +cGxqGm6B6vDXd65OxWqw13xdq/24+5R8Ng1PF9tvfjZkUFBF30CxjWur7P90WiKI +G7IGfr6BE1NgXlhEQQu4F+HizB1ypEPzGWltecXQ4yOzO+H0WfFTjLTYX6VSveyW +DQV18ixF8M4tHP/SwNE+yyv2b2JJ3/3RpxjtFlLk+opJ574x0gD/dMJuWTH0JqVY +3PbRfE1jIxFpk164Qz/Xp7H7w7f6xh+tQCkBs3PUYmnGIZcPwq44Q6JHlCNsKx4K +hxfggTvRCk4w79cUID45c2qDsRCqTPoOo/cbOpcfVhbH9LdMORpmuLwNogRZEUSE +fWpqR9q+0kcQf4zGSWIURIyDrogdpDgoHDxktqgMgc+qA4ZE2WQl1D8hmev53A46 +lUSrWUiWfDXtK3ux +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDoDCCAoigAwIBAgIBMTANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJKUDEc +MBoGA1UEChMTSmFwYW5lc2UgR292ZXJubWVudDEWMBQGA1UECxMNQXBwbGljYXRp +b25DQTAeFw0wNzEyMTIxNTAwMDBaFw0xNzEyMTIxNTAwMDBaMEMxCzAJBgNVBAYT +AkpQMRwwGgYDVQQKExNKYXBhbmVzZSBHb3Zlcm5tZW50MRYwFAYDVQQLEw1BcHBs +aWNhdGlvbkNBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAp23gdE6H +j6UG3mii24aZS2QNcfAKBZuOquHMLtJqO8F6tJdhjYq+xpqcBrSGUeQ3DnR4fl+K +f5Sk10cI/VBaVuRorChzoHvpfxiSQE8tnfWuREhzNgaeZCw7NCPbXCbkcXmP1G55 +IrmTwcrNwVbtiGrXoDkhBFcsovW8R0FPXjQilbUfKW1eSvNNcr5BViCH/OlQR9cw +FO5cjFW6WY2H/CPek9AEjP3vbb3QesmlOmpyM8ZKDQUXKi17safY1vC+9D/qDiht +QWEjdnjDuGWk81quzMKq2edY3rZ+nYVunyoKb58DKTCXKB28t89UKU5RMfkntigm +/qJj5kEW8DOYRwIDAQABo4GeMIGbMB0GA1UdDgQWBBRUWssmP3HMlEYNllPqa0jQ +k/5CdTAOBgNVHQ8BAf8EBAMCAQYwWQYDVR0RBFIwUKROMEwxCzAJBgNVBAYTAkpQ +MRgwFgYDVQQKDA/ml6XmnKzlm73mlL/lupwxIzAhBgNVBAsMGuOCouODl+ODquOC +seODvOOCt+ODp+ODs0NBMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADlqRHZ3ODrso2dGD/mLBqj7apAxzn7s2tGJfHrrLgy9mTLnsCTWw//1sogJ +hyzjVOGjprIIC8CFqMjSnHH2HZ9g/DgzE+Ge3Atf2hZQKXsvcJEPmbo0NI2VdMV+ +eKlmXb3KIXdCEKxmJj3ekav9FfBv7WxfEPjzFvYDio+nEhEMy/0/ecGc/WLuo89U +DNErXxc+4z6/wCs+CZv+iKZ+tJIX/COUgb1up8WMwusRRdv4QcmWdupwX3kSa+Sj +B1oF7ydJzyGfikwJcGapJsErEU4z0g781mzSDjJkaP+tBXhfAx2o45CsJOAPQKdL +rosot4LKGAfmt1t06SAZf7IbiVQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFuzCCA6OgAwIBAgIIVwoRl0LE48wwDQYJKoZIhvcNAQELBQAwazELMAkGA1UE +BhMCSVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8w +MzM1ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290 +IENBMB4XDTExMDkyMjExMjIwMloXDTMwMDkyMjExMjIwMlowazELMAkGA1UEBhMC +SVQxDjAMBgNVBAcMBU1pbGFuMSMwIQYDVQQKDBpBY3RhbGlzIFMucC5BLi8wMzM1 +ODUyMDk2NzEnMCUGA1UEAwweQWN0YWxpcyBBdXRoZW50aWNhdGlvbiBSb290IENB +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAp8bEpSmkLO/lGMWwUKNv +UTufClrJwkg4CsIcoBh/kbWHuUA/3R1oHwiD1S0eiKD4j1aPbZkCkpAW1V8IbInX +4ay8IMKx4INRimlNAJZaby/ARH6jDuSRzVju3PvHHkVH3Se5CAGfpiEd9UEtL0z9 +KK3giq0itFZljoZUj5NDKd45RnijMCO6zfB9E1fAXdKDa0hMxKufgFpbOr3JpyI/ +gCczWw63igxdBzcIy2zSekciRDXFzMwujt0q7bd9Zg1fYVEiVRvjRuPjPdA1Yprb +rxTIW6HMiRvhMCb8oJsfgadHHwTrozmSBp+Z07/T6k9QnBn+locePGX2oxgkg4YQ +51Q+qDp2JE+BIcXjDwL4k5RHILv+1A7TaLndxHqEguNTVHnd25zS8gebLra8Pu2F +be8lEfKXGkJh90qX6IuxEAf6ZYGyojnP9zz/GPvG8VqLWeICrHuS0E4UT1lF9gxe +KF+w6D9Fz8+vm2/7hNN3WpVvrJSEnu68wEqPSpP4RCHiMUVhUE4Q2OM1fEwZtN4F +v6MGn8i1zeQf1xcGDXqVdFUNaBr8EBtiZJ1t4JWgw5QHVw0U5r0F+7if5t+L4sbn +fpb2U8WANFAoWPASUHEXMLrmeGO89LKtmyuy/uE5jF66CyCU3nuDuP/jVo23Eek7 +jPKxwV2dpAtMK9myGPW1n0sCAwEAAaNjMGEwHQYDVR0OBBYEFFLYiDrIn3hm7Ynz +ezhwlMkCAjbQMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUUtiIOsifeGbt +ifN7OHCUyQICNtAwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAL +e3KHwGCmSUyIWOYdiPcUZEim2FgKDk8TNd81HdTtBjHIgT5q1d07GjLukD0R0i70 +jsNjLiNmsGe+b7bAEzlgqqI0JZN1Ut6nna0Oh4lScWoWPBkdg/iaKWW+9D+a2fDz +WochcYBNy+A4mz+7+uAwTc+G02UQGRjRlwKxK3JCaKygvU5a2hi/a5iB0P2avl4V +SM0RFbnAKVy06Ij3Pjaut2L9HmLecHgQHEhb2rykOLpn7VU+Xlff1ANATIGk0k9j +pwlCCRT8AKnCgHNPLsBA2RF7SOp6AsDT6ygBJlh0wcBzIm2Tlf05fbsq4/aC4yyX +X04fkZT6/iyj2HYauE2yOE+b+h1IYHkm4vP9qdCa6HCPSXrW5b0KDtst842/6+Ok +fcvHlXHo2qN8xcL4dJIEG4aspCJTQLas/kx2z/uUMsA1n3Y/buWQbqCmJqK4LL7R +K4X9p2jIugErsWx0Hbhzlefut8cl8ABMALJ+tguLHPPAUJ4lueAI3jZm/zel0btU +ZCzJJ7VLkn5l/9Mt4blOvH+kQSGQQXemOR/qnuOf0GZvBeyqdn6/axag67XH/JJU +LysRJyU3eExRarDzzFhdFPFqSBX/wge2sY0PjlxQRrM9vwGYT7JZVEc+NHt4bVaT +LnPqZih4zR0Uv6CPLy64Lo7yFIrM6bV8+2ydDKXhlg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw +MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML +QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD +VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA +A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul +CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n +tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl +dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch +PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC ++Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O +BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl +MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk +ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB +IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X +7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz +43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY +eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl +pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA +WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs +IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290 +MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux +FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h +bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v +dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt +H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9 +uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX +mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX +a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN +E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0 +WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD +VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0 +Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU +cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx +IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN +AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH +YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5 +6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC +Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX +c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a +mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx +MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB +ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV +BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC +AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV +6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX +GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP +dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH +1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF +62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW +BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw +AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL +MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU +cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv +b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6 +IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/ +iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao +GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh +4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm +XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU +MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3 +b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1 +MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK +EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh +BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq +xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G +87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i +2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U +WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1 +0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G +A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr +pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL +ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm +aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv +hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm +hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X +dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3 +P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y +iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no +xqE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIId3cGJyapsXwwDQYJKoZIhvcNAQELBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBDb21tZXJjaWFsMB4XDTEwMDEyOTE0MDYwNloXDTMwMTIzMTE0MDYwNlowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBDb21tZXJjaWFsMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEA9htPZwcroRX1BiLLHwGy43NFBkRJLLtJJRTWzsO3qyxPxkEylFf6EqdbDuKP +Hx6GGaeqtS25Xw2Kwq+FNXkyLbscYjfysVtKPcrNcV/pQr6U6Mje+SJIZMblq8Yr +ba0F8PrVC8+a5fBQpIs7R6UjW3p6+DM/uO+Zl+MgwdYoic+U+7lF7eNAFxHUdPAL +MeIrJmqbTFeurCA+ukV6BfO9m2kVrn1OIGPENXY6BwLJN/3HR+7o8XYdcxXyl6S1 +yHp52UKqK39c/s4mT6NmgTWvRLpUHhwwMmWd5jyTXlBOeuM61G7MGvv50jeuJCqr +VwMiKA1JdX+3KNp1v47j3A55MQIDAQABo0IwQDAdBgNVHQ4EFgQUnZPGU4teyq8/ +nx4P5ZmVvCT2lI8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQELBQADggEBAFis9AQOzcAN/wr91LoWXym9e2iZWEnStB03TX8nfUYG +XUPGhi4+c7ImfU+TqbbEKpqrIZcUsd6M06uJFdhrJNTxFq7YpFzUf1GO7RgBsZNj +vbz4YYCanrHOQnDiqX0GJX0nof5v7LMeJNrjS1UaADs1tDvZ110w/YETifLCBivt +Z8SOyUOyXGsViQK8YvxO8rUzqrJv0wqiUOP2O+guRMLbZjipM1ZI8W0bM40NjD9g +N53Tym1+NH4Nn3J2ixufcv1SNUFFApYvHLKac0khsUlHRUe072o0EclNmsxZt9YC +nlpOZbWUrhvfKbAW8b8Angc6F2S1BLUjIZkKlTuXfO8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDTDCCAjSgAwIBAgIIfE8EORzUmS0wDQYJKoZIhvcNAQEFBQAwRDELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZpcm1UcnVz +dCBOZXR3b3JraW5nMB4XDTEwMDEyOTE0MDgyNFoXDTMwMTIzMTE0MDgyNFowRDEL +MAkGA1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MR8wHQYDVQQDDBZBZmZp +cm1UcnVzdCBOZXR3b3JraW5nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAtITMMxcua5Rsa2FSoOujz3mUTOWUgJnLVWREZY9nZOIG41w3SfYvm4SEHi3y +YJ0wTsyEheIszx6e/jarM3c1RNg1lho9Nuh6DtjVR6FqaYvZ/Ls6rnla1fTWcbua +kCNrmreIdIcMHl+5ni36q1Mr3Lt2PpNMCAiMHqIjHNRqrSK6mQEubWXLviRmVSRL +QESxG9fhwoXA3hA/Pe24/PHxI1Pcv2WXb9n5QHGNfb2V1M6+oF4nI979ptAmDgAp +6zxG8D1gvz9Q0twmQVGeFDdCBKNwV6gbh+0t+nvujArjqWaJGctB+d1ENmHP4ndG +yH329JKBNv3bNPFyfvMMFr20FQIDAQABo0IwQDAdBgNVHQ4EFgQUBx/S55zawm6i +QLSwelAQUHTEyL0wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwDQYJ +KoZIhvcNAQEFBQADggEBAIlXshZ6qML91tmbmzTCnLQyFE2npN/svqe++EPbkTfO +tDIuUFUaNU52Q3Eg75N3ThVwLofDwR1t3Mu1J9QsVtFSUzpE0nPIxBsFZVpikpzu +QY0x2+c06lkh1QF612S4ZDnNye2v7UsDSKegmQGA3GWjNq5lWUhPgkvIZfFXHeVZ +Lgo/bNjR9eUJtGxUAArgFU2HdW23WJZa3W3SAKD0m0i+wzekujbgfIeFlxoVot4u +olu9rxj5kFDNcFn4J2dHy8egBzp90SxdbBk6ZrV9/ZFvgrG+CJPbFEfxojfHRZ48 +x3evZKiT3/Zpg4Jg8klCNO1aAFSFHBY2kgxc+qatv9s= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB/jCCAYWgAwIBAgIIdJclisc/elQwCgYIKoZIzj0EAwMwRTELMAkGA1UEBhMC +VVMxFDASBgNVBAoMC0FmZmlybVRydXN0MSAwHgYDVQQDDBdBZmZpcm1UcnVzdCBQ +cmVtaXVtIEVDQzAeFw0xMDAxMjkxNDIwMjRaFw00MDEyMzExNDIwMjRaMEUxCzAJ +BgNVBAYTAlVTMRQwEgYDVQQKDAtBZmZpcm1UcnVzdDEgMB4GA1UEAwwXQWZmaXJt +VHJ1c3QgUHJlbWl1bSBFQ0MwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQNMF4bFZ0D +0KF5Nbc6PJJ6yhUczWLznCZcBz3lVPqj1swS6vQUX+iOGasvLkjmrBhDeKzQN8O9 +ss0s5kfiGuZjuD0uL3jET9v0D6RoTFVya5UdThhClXjMNzyR4ptlKymjQjBAMB0G +A1UdDgQWBBSaryl6wBE1NSZRMADDav5A1a7WPDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAKBggqhkjOPQQDAwNnADBkAjAXCfOHiFBar8jAQr9HX/Vs +aobgxCd05DhT1wV/GzTjxi+zygk8N53X57hG8f2h4nECMEJZh0PUUd+60wkyWs6I +flc9nF9Ca/UHLbXwgpP5WW+uZPpY5Yse42O+tYHNbwKMeQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFRjCCAy6gAwIBAgIIbYwURrGmCu4wDQYJKoZIhvcNAQEMBQAwQTELMAkGA1UE +BhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1UcnVz +dCBQcmVtaXVtMB4XDTEwMDEyOTE0MTAzNloXDTQwMTIzMTE0MTAzNlowQTELMAkG +A1UEBhMCVVMxFDASBgNVBAoMC0FmZmlybVRydXN0MRwwGgYDVQQDDBNBZmZpcm1U +cnVzdCBQcmVtaXVtMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxBLf +qV/+Qd3d9Z+K4/as4Tx4mrzY8H96oDMq3I0gW64tb+eT2TZwamjPjlGjhVtnBKAQ +JG9dKILBl1fYSCkTtuG+kU3fhQxTGJoeJKJPj/CihQvL9Cl/0qRY7iZNyaqoe5rZ ++jjeRFcV5fiMyNlI4g0WJx0eyIOFJbe6qlVBzAMiSy2RjYvmia9mx+n/K+k8rNrS +s8PhaJyJ+HoAVt70VZVs+7pk3WKL3wt3MutizCaam7uqYoNMtAZ6MMgpv+0GTZe5 +HMQxK9VfvFMSF5yZVylmd2EhMQcuJUmdGPLu8ytxjLW6OQdJd/zvLpKQBY0tL3d7 +70O/Nbua2Plzpyzy0FfuKE4mX4+QaAkvuPjcBukumj5Rp9EixAqnOEhss/n/fauG +V+O61oV4d7pD6kh/9ti+I20ev9E2bFhc8e6kGVQa9QPSdubhjL08s9NIS+LI+H+S +qHZGnEJlPqQewQcDWkYtuJfzt9WyVSHvutxMAJf7FJUnM7/oQ0dG0giZFmA7mn7S +5u046uwBHjxIVkkJx0w3AJ6IDsBz4W9m6XJHMD4Q5QsDyZpCAGzFlH5hxIrff4Ia +C1nEWTJ3s7xgaVY5/bQGeyzWZDbZvUjthB9+pSKPKrhC9IK31FOQeE4tGv2Bb0TX +OwF0lkLgAOIua+rF7nKsu7/+6qqo+Nz2snmKtmcCAwEAAaNCMEAwHQYDVR0OBBYE +FJ3AZ6YMItkm9UWrpmVSESfYRaxjMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgEGMA0GCSqGSIb3DQEBDAUAA4ICAQCzV00QYk465KzquByvMiPIs0laUZx2 +KI15qldGF9X1Uva3ROgIRL8YhNILgM3FEv0AVQVhh0HctSSePMTYyPtwni94loMg +Nt58D2kTiKV1NpgIpsbfrM7jWNa3Pt668+s0QNiigfV4Py/VpfzZotReBA4Xrf5B +8OWycvpEgjNC6C1Y91aMYj+6QrCcDFx+LmUmXFNPALJ4fqENmS2NuB2OosSw/WDQ +MKSOyARiqcTtNd56l+0OOF6SL5Nwpamcb6d9Ex1+xghIsV5n61EIJenmJWtSKZGc +0jlzCFfemQa0W50QBuHCAKi4HEoCChTQwUHK+4w1IX2COPKpVJEZNZOUbWo6xbLQ +u4mGk+ibyQ86p3q4ofB4Rvr8Ny/lioTz3/4E2aFooC8k4gmVBtWVyuEklut89pMF +u+1z6S3RdTnX5yTb2E5fQ4+e0BQ5v1VwSJlXMbSc7kqYA5YwH2AG7hsj/oFgIxpH +YoWlzBk0gG+zrBrjn/B7SK3VAdlntqlyk+otZrWyuOQ9PLLvTIzq6we/qzWaVYa8 +GKa1qF60g2xraUDTn9zxw2lrueFtCfTxqlB2Cnp9ehehVZZCmTEJ3WARjQUwfuaO +RtGdFNrHF+QFlozEJLUbzxQHskD4o55BhrwE0GuWyCqANP2/7waj3VjFhT0+j/6e +KeC2uAloGRwYQw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIIAeDltYNno+AwDQYJKoZIhvcNAQEMBQAwZzEbMBkGA1UE +AwwSQXBwbGUgUm9vdCBDQSAtIEcyMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0 +aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMw +HhcNMTQwNDMwMTgxMDA5WhcNMzkwNDMwMTgxMDA5WjBnMRswGQYDVQQDDBJBcHBs +ZSBSb290IENBIC0gRzIxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzCCAiIwDQYJ +KoZIhvcNAQEBBQADggIPADCCAgoCggIBANgREkhI2imKScUcx+xuM23+TfvgHN6s +XuI2pyT5f1BrTM65MFQn5bPW7SXmMLYFN14UIhHF6Kob0vuy0gmVOKTvKkmMXT5x +ZgM4+xb1hYjkWpIMBDLyyED7Ul+f9sDx47pFoFDVEovy3d6RhiPw9bZyLgHaC/Yu +OQhfGaFjQQscp5TBhsRTL3b2CtcM0YM/GlMZ81fVJ3/8E7j4ko380yhDPLVoACVd +J2LT3VXdRCCQgzWTxb+4Gftr49wIQuavbfqeQMpOhYV4SbHXw8EwOTKrfl+q04tv +ny0aIWhwZ7Oj8ZhBbZF8+NfbqOdfIRqMM78xdLe40fTgIvS/cjTf94FNcX1RoeKz +8NMoFnNvzcytN31O661A4T+B/fc9Cj6i8b0xlilZ3MIZgIxbdMYs0xBTJh0UT8TU +gWY8h2czJxQI6bR3hDRSj4n4aJgXv8O7qhOTH11UL6jHfPsNFL4VPSQ08prcdUFm +IrQB1guvkJ4M6mL4m1k8COKWNORj3rw31OsMiANDC1CvoDTdUE0V+1ok2Az6DGOe +HwOx4e7hqkP0ZmUoNwIx7wHHHtHMn23KVDpA287PT0aLSmWaasZobNfMmRtHsHLD +d4/E92GcdB/O/WuhwpyUgquUoue9G7q5cDmVF8Up8zlYNPXEpMZ7YLlmQ1A/bmH8 +DvmGqmAMQ0uVAgMBAAGjQjBAMB0GA1UdDgQWBBTEmRNsGAPCe8CjoA1/coB6HHcm +jTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQwF +AAOCAgEAUabz4vS4PZO/Lc4Pu1vhVRROTtHlznldgX/+tvCHM/jvlOV+3Gp5pxy+ +8JS3ptEwnMgNCnWefZKVfhidfsJxaXwU6s+DDuQUQp50DhDNqxq6EWGBeNjxtUVA +eKuowM77fWM3aPbn+6/Gw0vsHzYmE1SGlHKy6gLti23kDKaQwFd1z4xCfVzmMX3z +ybKSaUYOiPjjLUKyOKimGY3xn83uamW8GrAlvacp/fQ+onVJv57byfenHmOZ4VxG +/5IFjPoeIPmGlFYl5bRXOJ3riGQUIUkhOb9iZqmxospvPyFgxYnURTbImHy99v6Z +SYA7LNKmp4gDBDEZt7Y6YUX6yfIjyGNzv1aJMbDZfGKnexWoiIqrOEDCzBL/FePw +N983csvMmOa/orz6JopxVtfnJBtIRD6e/J/JzBrsQzwBvDR4yGn1xuZW7AYJNpDr +FEobXsmII9oDMJELuDY++ee1KG++P+w8j2Ud5cAeh6Squpj9kuNsJnfdBrRkBof0 +Tta6SqoWqPQFZ2aWuuJVecMsXUmPgEkrihLHdoBR37q9ZV0+N0djMenl9MU/S60E +inpxLK8JQzcPqOMyT/RFtm2XNuyE9QoB6he7hY1Ck3DDUOUUi78/w0EP3SIEIwiK +um1xRKtzCTrJ+VKACd+66eYWyi4uTLLT3OUEVLLUNIAytbwPF+E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICQzCCAcmgAwIBAgIILcX8iNLFS5UwCgYIKoZIzj0EAwMwZzEbMBkGA1UEAwwS +QXBwbGUgUm9vdCBDQSAtIEczMSYwJAYDVQQLDB1BcHBsZSBDZXJ0aWZpY2F0aW9u +IEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UEBhMCVVMwHhcN +MTQwNDMwMTgxOTA2WhcNMzkwNDMwMTgxOTA2WjBnMRswGQYDVQQDDBJBcHBsZSBS +b290IENBIC0gRzMxJjAkBgNVBAsMHUFwcGxlIENlcnRpZmljYXRpb24gQXV0aG9y +aXR5MRMwEQYDVQQKDApBcHBsZSBJbmMuMQswCQYDVQQGEwJVUzB2MBAGByqGSM49 +AgEGBSuBBAAiA2IABJjpLz1AcqTtkyJygRMc3RCV8cWjTnHcFBbZDuWmBSp3ZHtf +TjjTuxxEtX/1H7YyYl3J6YRbTzBPEVoA/VhYDKX1DyxNB0cTddqXl5dvMVztK517 +IDvYuVTZXpmkOlEKMaNCMEAwHQYDVR0OBBYEFLuw3qFYM4iapIqZ3r6966/ayySr +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMAoGCCqGSM49BAMDA2gA +MGUCMQCD6cHEFl4aXTQY2e3v9GwOAEZLuN+yRhHFD/3meoyhpmvOwgPUnPWTxnS4 +at+qIxUCMG1mihDK1A3UT82NQz60imOlM27jbdoXt2QfyFMm+YhidDkLF1vLUagM +6BgD56KyKA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEBDCCAuygAwIBAgIIGHqpqMKWIQwwDQYJKoZIhvcNAQELBQAwYjELMAkGA1UE +BhMCVVMxEzARBgNVBAoTCkFwcGxlIEluYy4xJjAkBgNVBAsTHUFwcGxlIENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MRYwFAYDVQQDEw1BcHBsZSBSb290IENBMB4XDTEy +MDIwMTIyMTIxNVoXDTI3MDIwMTIyMTIxNVoweTEtMCsGA1UEAwwkRGV2ZWxvcGVy +IElEIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSYwJAYDVQQLDB1BcHBsZSBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTETMBEGA1UECgwKQXBwbGUgSW5jLjELMAkGA1UE +BhMCVVMwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCJdk8GW5pB7qUj +KwKjX9dzP8A1sIuECj8GJH+nlT/rTw6Tr7QO0Mg+5W0Ysx/oiUe/1wkI5P9WmCkV +55SduTWjCs20wOHiYPTK7Cl4RWlpYGtfipL8niPmOsIiszFPHLrytjRZQu6wqQID +GJEEtrN4LjMfgEUNRW+7Dlpbfzrn2AjXCw4ybfuGNuRsq8QRinCEJqqfRNHxuMZ7 +lBebSPcLWBa6I8WfFTl+yl3DMl8P4FJ/QOq+rAhklVvJGpzlgMofakQcbD7EsCYf +Hex7r16gaj1HqVgSMT8gdihtHRywwk4RaSaLy9bQEYLJTg/xVnTQ2QhLZniiq6yn +4tJMh1nJAgMBAAGjgaYwgaMwHQYDVR0OBBYEFFcX7aLP3HyYoRDg/L6HLSzy4xdU +MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/ +CF4wLgYDVR0fBCcwJTAjoCGgH4YdaHR0cDovL2NybC5hcHBsZS5jb20vcm9vdC5j +cmwwDgYDVR0PAQH/BAQDAgGGMBAGCiqGSIb3Y2QGAgYEAgUAMA0GCSqGSIb3DQEB +CwUAA4IBAQBCOXRrodzGpI83KoyzHQpEvJUsf7xZuKxh+weQkjK51L87wVA5akR0 +ouxbH3Dlqt1LbBwjcS1f0cWTvu6binBlgp0W4xoQF4ktqM39DHhYSQwofzPuAHob +tHastrW7T9+oG53IGZdKC1ZnL8I+trPEgzrwd210xC4jUe6apQNvYPSlSKcGwrta +4h8fRkV+5Jf1JxC3ICJyb3LaxlB1xT0lj12jAOmfNoxIOY+zO+qQgC6VmmD0eM70 +DgpTPqL6T9geroSVjTK8Vk2J6XgY4KyaQrp6RhuEoonOFOiI0ViL9q5WxCwFKkWv +C9lLqQIPNKyIx2FViUTJJ3MH7oLlTvVw +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEuzCCA6OgAwIBAgIBAjANBgkqhkiG9w0BAQUFADBiMQswCQYDVQQGEwJVUzET +MBEGA1UEChMKQXBwbGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlv +biBBdXRob3JpdHkxFjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwHhcNMDYwNDI1MjE0 +MDM2WhcNMzUwMjA5MjE0MDM2WjBiMQswCQYDVQQGEwJVUzETMBEGA1UEChMKQXBw +bGUgSW5jLjEmMCQGA1UECxMdQXBwbGUgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx +FjAUBgNVBAMTDUFwcGxlIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw +ggEKAoIBAQDkkakJH5HbHkdQ6wXtXnmELes2oldMVeyLGYne+Uts9QerIjAC6Bg+ ++FAJ039BqJj50cpmnCRrEdCju+QbKsMflZ56DKRHi1vUFjczy8QPTc4UadHJGXL1 +XQ7Vf1+b8iUDulWPTV0N8WQ1IxVLFVkds5T39pyez1C6wVhQZ48ItCD3y6wsIG9w +tj8BMIy3Q88PnT3zK0koGsj+zrW5DtleHNbLPbU6rfQPDgCSC7EhFi501TwN22IW +q6NxkkdTVcGvL0Gz+PvjcM3mo0xFfh9Ma1CWQYnEdGILEINBhzOKgbEwWOxaBDKM +aLOPHd5lc/9nXmW8Sdh2nzMUZaF3lMktAgMBAAGjggF6MIIBdjAOBgNVHQ8BAf8E +BAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUK9BpR5R2Cf70a40uQKb3 +R01/CF4wHwYDVR0jBBgwFoAUK9BpR5R2Cf70a40uQKb3R01/CF4wggERBgNVHSAE +ggEIMIIBBDCCAQAGCSqGSIb3Y2QFATCB8jAqBggrBgEFBQcCARYeaHR0cHM6Ly93 +d3cuYXBwbGUuY29tL2FwcGxlY2EvMIHDBggrBgEFBQcCAjCBthqBs1JlbGlhbmNl +IG9uIHRoaXMgY2VydGlmaWNhdGUgYnkgYW55IHBhcnR5IGFzc3VtZXMgYWNjZXB0 +YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJkIHRlcm1zIGFuZCBj +b25kaXRpb25zIG9mIHVzZSwgY2VydGlmaWNhdGUgcG9saWN5IGFuZCBjZXJ0aWZp +Y2F0aW9uIHByYWN0aWNlIHN0YXRlbWVudHMuMA0GCSqGSIb3DQEBBQUAA4IBAQBc +NplMLXi37Yyb3PN3m/J20ncwT8EfhYOFG5k9RzfyqZtAjizUsZAS2L70c5vu0mQP +y3lPNNiiPvl4/2vIB+x9OYOLUyDTOMSxv5pPCmv/K/xZpwUJfBdAVhEedNO3iyM7 +R6PVbyTi69G3cN8PReEnyvFteO3ntRcXqNx+IjXKJdXZD9Zr1KIkIxH3oayPc4Fg +xhtbCS+SsvhESPBgOJ4V9T0mZyCKM2r3DYLP3uujL/lTaltkwGMzd/c6ByxW69oP +IQ7aunMZT7XZNn/Bh1XZp5m5MkL72NVxnn6hUrcbvZNCJBIqxw8dtk2cXmPIS4AX +UKqK1drk/NAJBzewdXUh +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFujCCBKKgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhjELMAkGA1UEBhMCVVMx +HTAbBgNVBAoTFEFwcGxlIENvbXB1dGVyLCBJbmMuMS0wKwYDVQQLEyRBcHBsZSBD +b21wdXRlciBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkxKTAnBgNVBAMTIEFwcGxlIFJv +b3QgQ2VydGlmaWNhdGUgQXV0aG9yaXR5MB4XDTA1MDIxMDAwMTgxNFoXDTI1MDIx +MDAwMTgxNFowgYYxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBcHBsZSBDb21wdXRl +ciwgSW5jLjEtMCsGA1UECxMkQXBwbGUgQ29tcHV0ZXIgQ2VydGlmaWNhdGUgQXV0 +aG9yaXR5MSkwJwYDVQQDEyBBcHBsZSBSb290IENlcnRpZmljYXRlIEF1dGhvcml0 +eTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOSRqQkfkdseR1DrBe1e +eYQt6zaiV0xV7IsZid75S2z1B6siMALoGD74UAnTf0GomPnRymacJGsR0KO75Bsq +wx+VnnoMpEeLW9QWNzPLxA9NzhRp0ckZcvVdDtV/X5vyJQO6VY9NXQ3xZDUjFUsV +WR2zlPf2nJ7PULrBWFBnjwi0IPfLrCwgb3C2PwEwjLdDzw+dPfMrSSgayP7OtbkO +2V4c1ss9tTqt9A8OAJILsSEWLnTVPA3bYharo3GSR1NVwa8vQbP4++NwzeajTEV+ +H0xrUJZBicR0YgsQg0GHM4qBsTBY7FoEMoxos48d3mVz/2deZbxJ2HafMxRloXeU +yS0CAwEAAaOCAi8wggIrMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/ +MB0GA1UdDgQWBBQr0GlHlHYJ/vRrjS5ApvdHTX8IXjAfBgNVHSMEGDAWgBQr0GlH +lHYJ/vRrjS5ApvdHTX8IXjCCASkGA1UdIASCASAwggEcMIIBGAYJKoZIhvdjZAUB +MIIBCTBBBggrBgEFBQcCARY1aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmlj +YXRlYXV0aG9yaXR5L3Rlcm1zLmh0bWwwgcMGCCsGAQUFBwICMIG2GoGzUmVsaWFu +Y2Ugb24gdGhpcyBjZXJ0aWZpY2F0ZSBieSBhbnkgcGFydHkgYXNzdW1lcyBhY2Nl +cHRhbmNlIG9mIHRoZSB0aGVuIGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5k +IGNvbmRpdGlvbnMgb2YgdXNlLCBjZXJ0aWZpY2F0ZSBwb2xpY3kgYW5kIGNlcnRp +ZmljYXRpb24gcHJhY3RpY2Ugc3RhdGVtZW50cy4wRAYDVR0fBD0wOzA5oDegNYYz +aHR0cHM6Ly93d3cuYXBwbGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L3Jvb3Qu +Y3JsMFUGCCsGAQUFBwEBBEkwRzBFBggrBgEFBQcwAoY5aHR0cHM6Ly93d3cuYXBw +bGUuY29tL2NlcnRpZmljYXRlYXV0aG9yaXR5L2Nhc2lnbmVycy5odG1sMA0GCSqG +SIb3DQEBBQUAA4IBAQCd2i0oWC99dgS5BNM+zrdmY06PL9T+S61yvaM5xlJNBZhS +9YlRASR5vhoy9+VEi0tEBzmC1lrKtCBe2a4VXR2MHTK/ODFiSF3H4ZCx+CRA+F9Y +m1FdV53B5f88zHIhbsTp6aF31ywXJsM/65roCwO66bNKcuszCVut5mIxauivL9Wv +Hld2j383LS4CXN1jyfJxuCZA3xWNdUQ/eb3mHZnhQyw+rW++uaT+DjUZUWOxw961 +kj5ReAFziqQjyqSI8R5cH0EWLX6VCqrpiUGYGxrdyyC/R14MJsVVNU3GMIuZZxTH +CR+6R8faAQmHJEKVvRNgGQrv6n8Obs3BREM6StXj +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIJmzCCB4OgAwIBAgIBATANBgkqhkiG9w0BAQwFADCCAR4xPjA8BgNVBAMTNUF1 +dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIFJhaXogZGVsIEVzdGFkbyBWZW5lem9s +YW5vMQswCQYDVQQGEwJWRTEQMA4GA1UEBxMHQ2FyYWNhczEZMBcGA1UECBMQRGlz +dHJpdG8gQ2FwaXRhbDE2MDQGA1UEChMtU2lzdGVtYSBOYWNpb25hbCBkZSBDZXJ0 +aWZpY2FjaW9uIEVsZWN0cm9uaWNhMUMwQQYDVQQLEzpTdXBlcmludGVuZGVuY2lh +IGRlIFNlcnZpY2lvcyBkZSBDZXJ0aWZpY2FjaW9uIEVsZWN0cm9uaWNhMSUwIwYJ +KoZIhvcNAQkBFhZhY3JhaXpAc3VzY2VydGUuZ29iLnZlMB4XDTEwMTIyMjE4MDgy +MVoXDTMwMTIxNzIzNTk1OVowggEeMT4wPAYDVQQDEzVBdXRvcmlkYWQgZGUgQ2Vy +dGlmaWNhY2lvbiBSYWl6IGRlbCBFc3RhZG8gVmVuZXpvbGFubzELMAkGA1UEBhMC +VkUxEDAOBgNVBAcTB0NhcmFjYXMxGTAXBgNVBAgTEERpc3RyaXRvIENhcGl0YWwx +NjA0BgNVBAoTLVNpc3RlbWEgTmFjaW9uYWwgZGUgQ2VydGlmaWNhY2lvbiBFbGVj +dHJvbmljYTFDMEEGA1UECxM6U3VwZXJpbnRlbmRlbmNpYSBkZSBTZXJ2aWNpb3Mg +ZGUgQ2VydGlmaWNhY2lvbiBFbGVjdHJvbmljYTElMCMGCSqGSIb3DQEJARYWYWNy +YWl6QHN1c2NlcnRlLmdvYi52ZTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoC +ggIBAME77xNS8ZlW47RsBeEaaRZhJoZ4rw785UAFCuPZOAVMqNS1wMYqzy95q6Gk +UO81ER/ugiQX/KMcq/4HBn83fwdYWxPZfwBfK7BP2p/JsFgzYeFP0BXOLmvoJIzl +Jb6FW+1MPwGBjuaZGFImWZsSmGUclb51mRYMZETh9/J5CLThR1exStxHQptwSzra +zNFpkQY/zmj7+YZNA9yDoroVFv6sybYOZ7OxNDo7zkSLo45I7gMwtxqWZ8VkJZkC +8+p0dX6mkhUT0QAV64Zc9HsZiH/oLhEkXjhrgZ28cF73MXIqLx1fyM4kPH1yOJi/ +R72nMwL7D+Sd6mZgI035TxuHXc2/uOwXfKrrTjaJDz8Jp6DdessOkxIgkKXRjP+F +K3ze3n4NUIRGhGRtyvEjK95/2g02t6PeYiYVGur6ruS49n0RAaSS0/LJb6XzaAAe +0mmO2evnEqxIKwy2mZRNPfAVW1l3wCnWiUwryBU6OsbFcFFrQm+00wOicXvOTHBM +aiCVAVZTb9RSLyi+LJ1llzJZO3pq3IRiiBj38Nooo+2ZNbMEciSgmig7YXaUcmud +SVQvLSL+Yw+SqawyezwZuASbp7d/0rutQ59d81zlbMt3J7yB567rT2IqIydQ8qBW +k+fmXzghX+/FidYsh/aK+zZ7Wy68kKHuzEw1Vqkat5DGs+VzAgMBAAGjggLeMIIC +2jASBgNVHRMBAf8ECDAGAQH/AgECMDcGA1UdEgQwMC6CD3N1c2NlcnRlLmdvYi52 +ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0wMB0GA1UdDgQWBBStuyIdxuDS +Aaj9dlBSk+2YwU2u0zCCAVAGA1UdIwSCAUcwggFDgBStuyIdxuDSAaj9dlBSk+2Y +wU2u06GCASakggEiMIIBHjE+MDwGA1UEAxM1QXV0b3JpZGFkIGRlIENlcnRpZmlj +YWNpb24gUmFpeiBkZWwgRXN0YWRvIFZlbmV6b2xhbm8xCzAJBgNVBAYTAlZFMRAw +DgYDVQQHEwdDYXJhY2FzMRkwFwYDVQQIExBEaXN0cml0byBDYXBpdGFsMTYwNAYD +VQQKEy1TaXN0ZW1hIE5hY2lvbmFsIGRlIENlcnRpZmljYWNpb24gRWxlY3Ryb25p +Y2ExQzBBBgNVBAsTOlN1cGVyaW50ZW5kZW5jaWEgZGUgU2VydmljaW9zIGRlIENl +cnRpZmljYWNpb24gRWxlY3Ryb25pY2ExJTAjBgkqhkiG9w0BCQEWFmFjcmFpekBz +dXNjZXJ0ZS5nb2IudmWCAQEwDgYDVR0PAQH/BAQDAgEGMDcGA1UdEQQwMC6CD3N1 +c2NlcnRlLmdvYi52ZaAbBgVghl4CAqASDBBSSUYtRy0yMDAwNDAzNi0wMFQGA1Ud +HwRNMEswJKAioCCGHmhodHA6Ly93d3cuc3VzY2VydGUuZ29iLnZlL2xjcjAjoCGg +H4YdbGRhcDovL2FjcmFpei5zdXNjZXJ0ZS5nb2IudmUwNwYIKwYBBQUHAQEEKzAp +MCcGCCsGAQUFBzABhhtoaHRwOi8vb2NzcC5zdXNjZXJ0ZS5nb2IudmUwQAYDVR0g +BDkwNzA1BgVghl4BAjAsMCoGCCsGAQUFBwIBFh5odHRwOi8vd3d3LnN1c2NlcnRl +LmdvYi52ZS9kcGMwDQYJKoZIhvcNAQEMBQADggIBAK4qy/zmZ9zBwfW3yOYtLcBT +Oy4szJyPz7/RhNH3bPVH7HbDTGpi6JZ4YXdXMBeJE5qBF4a590Kgj8Rlnltt+Rbo +OFQOU1UDqKuTdBsA//Zry5899fmn8jBUkg4nh09jhHHbLlaUScdz704Zz2+UVg7i +s/r3Legxap60KzmdrmTAE9VKte1TQRgavQwVX5/2mO/J+SCas//UngI+h8SyOucq +mjudYEgBrZaodUsagUfn/+AzFNrGLy+al+5nZeHb8JnCfLHWS0M9ZyhgoeO/czyn +99+5G93VWNv4zfc4KiavHZKrkn8F9pg0ycIZh+OwPT/RE2zq4gTazBMlP3ACIe/p +olkNaOEa8KvgzW96sjBZpMW49zFmyINYkcj+uaNCJrVGsXgdBmkuRGJNWFZ9r0cG +woIaxViFBypsz045r1ESfYPlfDOavBhZ/giR/Xocm9CHkPRY2BApMMR0DUCyGETg +Ql+L3kfdTKzuDjUp2DM9FqysQmaM81YDZufWkMhlZPfHwC7KbNougoLroa5Umeos +bqAXWmk46SwIdWRPLLqbUpDTKooynZKpSYIkkotdgJoVZUUCY+RCO8jsVPEU6ece +SxztNUm5UOta1OJPMwSAKRHOo3ilVb9c6lAixDdvV8MeNbqe6asM1mpCHWbJ/0rg +5Ls9Cxx8hracyp0ev7b0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFVTCCBD2gAwIBAgIEO/OB0DANBgkqhkiG9w0BAQUFADBsMQswCQYDVQQGEwJj +aDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZpY2VzMSIwIAYDVQQLExlD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQDEw1BZG1pbi1Sb290LUNB +MB4XDTAxMTExNTA4NTEwN1oXDTIxMTExMDA3NTEwN1owbDELMAkGA1UEBhMCY2gx +DjAMBgNVBAoTBWFkbWluMREwDwYDVQQLEwhTZXJ2aWNlczEiMCAGA1UECxMZQ2Vy +dGlmaWNhdGlvbiBBdXRob3JpdGllczEWMBQGA1UEAxMNQWRtaW4tUm9vdC1DQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMvgr0QUIv5qF0nyXZ3PXAJi +C4C5Wr+oVTN7oxIkXkxvO0GJToM9n7OVJjSmzBL0zJ2HXj0MDRcvhSY+KiZZc6Go +vDvr5Ua481l7ILFeQAFtumeza+vvxeL5Nd0Maga2miiacLNAKXbAcUYRa0Ov5VZB +++YcOYNNt/aisWbJqA2y8He+NsEgJzK5zNdayvYXQTZN+7tVgWOck16Da3+4FXdy +fH1NCWtZlebtMKtERtkVAaVbiWW24CjZKAiVfggjsiLo3yVMPGj3budLx5D9hEEm +vlyDOtcjebca+AcZglppWMX/iHIrx7740y0zd6cWEqiLIcZCrnpkr/KzwO135GkC +AwEAAaOCAf0wggH5MA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIASBkTCBjjCBiwYI +YIV0AREDAQAwfzArBggrBgEFBQcCAjAfGh1UaGlzIGlzIHRoZSBBZG1pbi1Sb290 +LUNBIENQUzBQBggrBgEFBQcCARZEaHR0cDovL3d3dy5pbmZvcm1hdGlrLmFkbWlu +LmNoL1BLSS9saW5rcy9DUFNfMl8xNl83NTZfMV8xN18zXzFfMC5wZGYwfwYDVR0f +BHgwdjB0oHKgcKRuMGwxFjAUBgNVBAMTDUFkbWluLVJvb3QtQ0ExIjAgBgNVBAsT +GUNlcnRpZmljYXRpb24gQXV0aG9yaXRpZXMxETAPBgNVBAsTCFNlcnZpY2VzMQ4w +DAYDVQQKEwVhZG1pbjELMAkGA1UEBhMCY2gwHQYDVR0OBBYEFIKf+iNzIPGXi7JM +Tb5CxX9mzWToMIGZBgNVHSMEgZEwgY6AFIKf+iNzIPGXi7JMTb5CxX9mzWTooXCk +bjBsMQswCQYDVQQGEwJjaDEOMAwGA1UEChMFYWRtaW4xETAPBgNVBAsTCFNlcnZp +Y2VzMSIwIAYDVQQLExlDZXJ0aWZpY2F0aW9uIEF1dGhvcml0aWVzMRYwFAYDVQQD +Ew1BZG1pbi1Sb290LUNBggQ784HQMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0B +AQUFAAOCAQEAeE96XCYRpy6umkPKXDWCRn7INo96ZrWpMggcDORuofHIwdTkgOeM +vWOxDN/yuT7CC3FAaUajbPRbDw0hRMcqKz0aC8CgwcyIyhw/rFK29mfNTG3EviP9 +QSsEbnelFnjpm1wjz4EaBiFjatwpUbI6+Zv3XbEt9QQXBn+c6DeFLe4xvC4B+MTr +a440xTk59pSYux8OHhEvqIwHCkiijGqZhTS3KmGFeBopaR+dJVBRBMoXwzk4B3Hn +0Zib1dEYFZa84vPJZyvxCbLOnPRDJgH6V2uQqbG+6DXVaf/wORVOvF/wzzv0viM/ +RWbEtJZdvo8N3sdtCULzifnxP/V0T9+4ZQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ +RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD +VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX +DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y +ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy +VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr +mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr +IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK +mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu +XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy +dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye +jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1 +BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3 +DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92 +9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx +jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0 +Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz +ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS +R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMiBSb290IENBMB4XDTEwMTAyNjA4MzgwM1oXDTQwMTAyNjA4MzgwM1ow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDIgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBANfHXvfBB9R3+0Mh9PT1aeTuMgHbo4Yf5FkNuud1g1Lr +6hxhFUi7HQfKjK6w3Jad6sNgkoaCKHOcVgb/S2TwDCo3SbXlzwx87vFKu3MwZfPV +L4O2fuPn9Z6rYPnT8Z2SdIrkHJasW4DptfQxh6NR/Md+oW+OU3fUl8FVM5I+GC91 +1K2GScuVr1QGbNgGE41b/+EmGVnAJLqBcXmQRFBoJJRfuLMR8SlBYaNByyM21cHx +MlAQTn/0hpPshNOOvEu/XAFOBz3cFIqUCqTqc/sLUegTBxj6DvEr0VQVfTzh97QZ +QmdiXnfgolXsttlpF9U6r0TtSsWe5HonfOV116rLJeffawrbD02TTqigzXsu8lkB +arcNuAeBfos4GzjmCleZPe4h6KP1DBbdi+w0jpwqHAAVF41og9JwnxgIzRFo1clr +Us3ERo/ctfPYV3Me6ZQ5BL/T3jjetFPsaRyifsSP5BtwrfKi+fv3FmRmaZ9JUaLi +FRhnBkp/1Wy1TbMz4GHrXb7pmA8y1x1LPC5aAVKRCfLf6o3YBkBjqhHk/sM3nhRS +P/TizPJhk9H9Z2vXUq6/aKtAQ6BXNVN48FP4YUIHZMbXb5tMOA1jrGKvNouicwoN +9SG9dKpN6nIDSdvHXx1iY8f93ZHsM+71bbRuMGjeyNYmsHVee7QHIJihdjK4TWxP +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMmAd+BikoL1Rpzz +uvdMw964o605MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAU18h +9bqwOlI5LJKwbADJ784g7wbylp7ppHR/ehb8t/W2+xUbP6umwHJdELFx7rxP462s +A20ucS6vxOOto70MEae0/0qyexAQH6dXQbLArvQsWdZHEIjzIVEpMMpghq9Gqx3t +OluwlN5E40EIosHsHdb9T7bWR9AUC8rmyrV7d35BH16Dx7aMOZawP5aBQW9gkOLo ++fsicdl9sz1Gv7SEr5AcD48Saq/v7h56rgJKihcrdv6sVIkkLE8/trKnToyokZf7 +KcZ7XC25y2a2t6hbElGFtQl+Ynhw/qlqYLYdDnkM/crqJIByw5c/8nerQyIKx+u2 +DISCLIBrQYoIwOula9+ZEsuK1V6ADJHgJgg2SMX6OBE1/yWDLfJ6v9r9jv6ly0Us +H8SIU653DtmadsWOLB2jutXsMq7Aqqz30XpN69QH4kj3Io6wpJ9qzo6ysmD0oyLQ +I+uUWnpp3Q+/QFesa1lQ2aOZ4W7+jQF5JyMV3pKdewlNWudLSDBaGOYKbeaP4NK7 +5t98biGCwWg5TbSYWGZizEqQXsP6JwSxeRV0mcy+rSDeJmAc61ZRpqPq5KM/p/9h +3PFaTWwyI0PurKju7koSCTxdccK+efrCh2gdC/1cacwG0Jp9VJkqyTkaGa9LKkPz +Y11aWOIv4x3kqdbQCtCev9eBCfHJxyYNrJgWVqA= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFWTCCA0GgAwIBAgIBAjANBgkqhkiG9w0BAQsFADBOMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxIDAeBgNVBAMMF0J1eXBhc3Mg +Q2xhc3MgMyBSb290IENBMB4XDTEwMTAyNjA4Mjg1OFoXDTQwMTAyNjA4Mjg1OFow +TjELMAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MSAw +HgYDVQQDDBdCdXlwYXNzIENsYXNzIDMgUm9vdCBDQTCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAKXaCpUWUOOV8l6ddjEGMnqb8RB2uACatVI2zSRHsJ8Y +ZLya9vrVediQYkwiL944PdbgqOkcLNt4EemOaFEVcsfzM4fkoF0LXOBXByow9c3E +N3coTRiR5r/VUv1xLXA+58bEiuPwKAv0dpihi4dVsjoT/Lc+JzeOIuOoTyrvYLs9 +tznDDgFHmV0ST9tD+leh7fmdvhFHJlsTmKtdFoqwNxxXnUX/iJY2v7vKB3tvh2PX +0DJq1l1sDPGzbjniazEuOQAnFN44wOwZZoYS6J1yFhNkUsepNxz9gjDthBgd9K5c +/3ATAOux9TN6S9ZV+AWNS2mw9bMoNlwUxFFzTWsL8TQH2xc519woe2v1n/MuwU8X +KhDzzMro6/1rqy6any2CbgTUUgGTLT2G/H783+9CHaZr77kgxve9oKeV/afmiSTY +zIw0bOIjL9kSGiG5VZFvC5F5GQytQIgLcOJ60g7YaEi7ghM5EFjp2CoHxhLbWNvS +O1UQRwUVZ2J+GGOmRj8JDlQyXr8NYnon74Do29lLBlo3WiXQCBJ31G8JUJc9yB3D +34xFMFbG02SrZvPAXpacw8Tvw3xrizp5f7NJzz3iiZ+gMEuFuZyUJHmPfWupRWgP +K9Dx2hzLabjKSWJtyNBjYt1gD1iqj6G8BaVmos8bdrKEZLFMOVLAMLrwjEsCsLa3 +AgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFEe4zf/lb+74suwv +Tg75JbCOPGvDMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQsFAAOCAgEAACAj +QTUEkMJAYmDv4jVM1z+s4jSQuKFvdvoWFqRINyzpkMLyPPgKn9iB5btb2iUspKdV +cSQy9sgL8rxq+JOssgfCX5/bzMiKqr5qb+FJEMwx14C7u8jYog5kV+qi9cKpMRXS +IGrs/CIBKM+GuIAeqcwRpTzyFrNHnfzSgCHEy9BHcEGhyoMZCCxt8l13nIoUE9Q2 +HJLw5QY33KbmkJs4j1xrG0aGQ0JfPgEHU1RdZX33inOhmlRaHylDFCfChQ+1iHsa +O5S3HWCntZznKWlXWpuTekMwGwPXYshApqr8ZORK15FTAaggiG6cX0S5y2CBNOxv +033aSF/rtJC8LakcC6wc1aJoIIAE1vyxjy+7SjENSoYc6+I2KSb12tjE8nVhz36u +dmNKekBlk4f4HoCMhuWG1o8O/FMsYOgWYRqiPkN7zTlgVGr18okmAWiDSKIz6MkE +kbIRNBE+6tBDGR8Dk5AM/1E9V/RBbuHLoL7ryWPNbczk+DaqaJ3tvV2XcEQNtg41 +3OEMXbugUZTLfhbrES+jkkXITHHZvMmZUldGL1DPvTVp9D0VzgalLA8+9oG6lLvD +u79leNKGef9JOxqDDPDeeOzI8k1MGt6CKfjBWtrt7uYnXuhF0J0cUahoq0Tj0Itq +4/g7u9xN12TyUb7mqqta6THuBrxzvxNiCp/HuZc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDUzCCAjugAwIBAgIBATANBgkqhkiG9w0BAQUFADBLMQswCQYDVQQGEwJOTzEd +MBsGA1UECgwUQnV5cGFzcyBBUy05ODMxNjMzMjcxHTAbBgNVBAMMFEJ1eXBhc3Mg +Q2xhc3MgMiBDQSAxMB4XDTA2MTAxMzEwMjUwOVoXDTE2MTAxMzEwMjUwOVowSzEL +MAkGA1UEBhMCTk8xHTAbBgNVBAoMFEJ1eXBhc3MgQVMtOTgzMTYzMzI3MR0wGwYD +VQQDDBRCdXlwYXNzIENsYXNzIDIgQ0EgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAIs8B0XY9t/mx8q6jUPFR42wWsE425KEHK8T1A9vNkYgxC7McXA0 +ojTTNy7Y3Tp3L8DrKehc0rWpkTSHIln+zNvnma+WwajHQN2lFYxuyHyXA8vmIPLX +l18xoS830r7uvqmtqEyeIWZDO6i88wmjONVZJMHCR3axiFyCO7srpgTXjAePzdVB +HfCuuCkslFJgNJQ72uA40Z0zPhX0kzLFANq1KWYOOngPIVJfAuWSeyXTkh4vFZ2B +5J2O6O+JzhRMVB0cgRJNcKi+EAUXfh/RuFdV7c27UsKwHnjCTTZoy1YmwVLBvXb3 +WNVyfh9EdrsAiR0WnVE1703CVu9r4Iw7DekCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUP42aWYv8e3uco684sDntkHGA1sgwDgYDVR0PAQH/BAQD +AgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAVGn4TirnoB6NLJzKyQJHyIdFkhb5jatLP +gcIV1Xp+DCmsNx4cfHZSldq1fyOhKXdlyTKdqC5Wq2B2zha0jX94wNWZUYN/Xtm+ +DKhQ7SLHrQVMdvvt7h5HZPb3J31cKA9FxVxiXqaakZG3Uxcu3K1gnZZkOb1naLKu +BctN518fV4bVIJwo+28TOPX2EZL2fZleHwzoq0QkKXJAPTZSr4xYkHPB7GEseaHs +h7U/2k3ZIQAw3pDaDtMaSKk+hQsUi4y8QZ5q9w5wwDX3OaJdZtB7WZ+oRxKaJyOk +LY4ng5IgodcVf/EuGO70SH8vf/GhGLWhC5SgYiAynB321O+/TIho +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4 +nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO +8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV +ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb +PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2 +6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr +n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a +qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4 +wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3 +ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs +pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4 +E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ +BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy +aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s +IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp +Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV +BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp +Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu +Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g +Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt +IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU +J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO +JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY +wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o +koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN +qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E +Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe +xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u +7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU +sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI +sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP +cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b +N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t +KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu +kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm +CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ +Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu +imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te +2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe +DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC +/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p +F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt +TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw +CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl +cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu +LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT +aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp +dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD +VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT +aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ +bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu +IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1 +GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ ++mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd +U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm +NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY +ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/ +ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1 +CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq +g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm +fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c +2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/ +bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAMMDmu5QkG4oMA0GCSqGSIb3DQEBBQUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIxMB4XDTEyMDcxOTA5MDY1NloXDTQy +MDcxOTA5MDY1NlowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjEw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCqw3j33Jijp1pedxiy3QRk +D2P9m5YJgNXoqqXinCaUOuiZc4yd39ffg/N4T0Dhf9Kn0uXKE5Pn7cZ3Xza1lK/o +OI7bm+V8u8yN63Vz4STN5qctGS7Y1oprFOsIYgrY3LMATcMjfF9DCCMyEtztDK3A +fQ+lekLZWnDZv6fXARz2m6uOt0qGeKAeVjGu74IKgEH3G8muqzIm1Cxr7X1r5OJe +IgpFy4QxTaz+29FHuvlglzmxZcfe+5nkCiKxLU3lSCZpq+Kq8/v8kiky6bM+TR8n +oc2OuRf7JT7JbvN32g0S9l3HuzYQ1VTW8+DiR0jm3hTaYVKvJrT1cU/J19IG32PK +/yHoWQbgCNWEFVP3Q+V8xaCJmGtzxmjOZd69fwX3se72V6FglcXM6pM6vpmumwKj +rckWtc7dXpl4fho5frLABaTAgqWjR56M6ly2vGfb5ipN0gTco65F97yLnByn1tUD +3AjLLhbKXEAz6GfDLuemROoRRRw1ZS0eRWEkG4IupZ0zXWX4Qfkuy5Q/H6MMMSRE +7cderVC6xkGbrPAXZcD4XW9boAo0PO7X6oifmPmvTiT6l7Jkdtqr9O3jw2Dv1fkC +yC2fg69naQanMVXVz0tv/wQFx1isXxYb5dKj6zHbHzMVTdDypVP1y+E9Tmgt2BLd +qvLmTZtJ5cUoobqwWsagtQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUiQq0OJMa5qvum5EY+fU8PjXQ04IwDQYJKoZI +hvcNAQEFBQADggIBADKL9p1Kyb4U5YysOMo6CdQbzoaz3evUuii+Eq5FLAR0rBNR +xVgYZk2C2tXck8An4b58n1KeElb21Zyp9HWc+jcSjxyT7Ff+Bw+r1RL3D65hXlaA +SfX8MPWbTx9BLxyE04nH4toCdu0Jz2zBuByDHBb6lM19oMgY0sidbvW9adRtPTXo +HqJPYNcHKfyyo6SdbhWSVhlMCrDpfNIZTUJG7L399ldb3Zh+pE3McgODWF3vkzpB +emOqfDqo9ayk0d2iLbYq/J8BjuIQscTK5GfbVSUZP/3oNn6z4eGBrxEWi1CXYBmC +AMBrTXO40RMHPuq2MU/wQppt4hF05ZSsjYSVPCGvxdpHyN85YmLLW1AL14FABZyb +7bq2ix4Eb5YgOe2kfSnbSM6C3NQCjR0EMVrHS/BsYVLXtFHCgWzN4funodKSds+x +DzdYpPJScWc/DIh4gInByLUfkmO+p3qKViwaqKactV2zY9ATIKHrkWzQjX2v3wvk +F7mGnjixlAxYjOBVqjtjbZqJYLhkKpLGN/R+Q0O3c+gB53+XD9fyexn9GtePyfqF +a3qdnom2piiZk4hA9z7NUaPK6u95RyG1/jLix8NRb76AdPCkwzryT+lf3xkK8jsT +Q6wxpLPn6/wY1gGp8yqPNg7rtLG8t0zJa7+h89n07eLw4+1knj0vllJPgFOL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFaTCCA1GgAwIBAgIJAJK4iNuwisFjMA0GCSqGSIb3DQEBCwUAMFIxCzAJBgNV +BAYTAlNLMRMwEQYDVQQHEwpCcmF0aXNsYXZhMRMwEQYDVQQKEwpEaXNpZyBhLnMu +MRkwFwYDVQQDExBDQSBEaXNpZyBSb290IFIyMB4XDTEyMDcxOTA5MTUzMFoXDTQy +MDcxOTA5MTUzMFowUjELMAkGA1UEBhMCU0sxEzARBgNVBAcTCkJyYXRpc2xhdmEx +EzARBgNVBAoTCkRpc2lnIGEucy4xGTAXBgNVBAMTEENBIERpc2lnIFJvb3QgUjIw +ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCio8QACdaFXS1tFPbCw3Oe +NcJxVX6B+6tGUODBfEl45qt5WDza/3wcn9iXAng+a0EE6UG9vgMsRfYvZNSrXaNH +PWSb6WiaxswbP7q+sos0Ai6YVRn8jG+qX9pMzk0DIaPY0jSTVpbLTAwAFjxfGs3I +x2ymrdMxp7zo5eFm1tL7A7RBZckQrg4FY8aAamkw/dLukO8NJ9+flXP04SXabBbe +QTg06ov80egEFGEtQX6sx3dOy1FU+16SGBsEWmjGycT6txOgmLcRK7fWV8x8nhfR +yyX+hk4kLlYMeE2eARKmK6cBZW58Yh2EhN/qwGu1pSqVg8NTEQxzHQuyRpDRQjrO +QG6Vrf/GlK1ul4SOfW+eioANSW1z4nuSHsPzwfPrLgVv2RvPN3YEyLRa5Beny912 +H9AZdugsBbPWnDTYltxhh5EF5EQIM8HauQhl1K6yNg3ruji6DOWbnuuNZt2Zz9aJ +QfYEkoopKW1rOhzndX0CcQ7zwOe9yxndnWCywmZgtrEE7snmhrmaZkCo5xHtgUUD +i/ZnWejBBhG93c+AAk9lQHhcR1DIm+YfgXvkRKhbhZri3lrVx/k6RGZL5DJUfORs +nLMOPReisjQS1n6yqEm70XooQL6iFh/f5DcfEXP7kAplQ6INfPgGAVUzfbANuPT1 +rqVCV3w2EYx7XsQDnYx5nQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1Ud +DwEB/wQEAwIBBjAdBgNVHQ4EFgQUtZn4r7CU9eMg1gqtzk5WpC5uQu0wDQYJKoZI +hvcNAQELBQADggIBACYGXnDnZTPIgm7ZnBc6G3pmsgH2eDtpXi/q/075KMOYKmFM +tCQSin1tERT3nLXK5ryeJ45MGcipvXrA1zYObYVybqjGom32+nNjf7xueQgcnYqf +GopTpti72TVVsRHFqQOzVju5hJMiXn7B9hJSi+osZ7z+Nkz1uM/Rs0mSO9MpDpkb +lvdhuDvEK7Z4bLQjb/D907JedR+Zlais9trhxTF7+9FGs9K8Z7RiVLoJ92Owk6Ka ++elSLotgEqv89WBW7xBci8QaQtyDW2QOy7W81k/BfDxujRNt+3vrMNDcTa/F1bal +TFtxyegxvug4BkihGuLq0t4SOVga/4AOgnXmt8kHbA7v/zjxmHHEt38OFdAlab0i +nSvtBfZGR6ztwPDUO+Ls7pZbkBNOHlY667DvlruWIxG68kOGdGSVyCh13x01utI3 +gzhTODY7z2zp+WsO0PsE6E9312UBeIYMej4hYvF/Y3EMyZ9E26gnonW+boE+18Dr +G5gPcFw0sorMwIUY6256s/daoQe/qUKS82Ail+QUoQebTnbAjn39pCXHR+3/H3Os +zMOl6W8KjptlwlCFtaOgUxLMVYdh84GuEEZhvUQhuMI9dM9+JDX6HAcOmz0iyu8x +L4ysEr3vQCj8KWefshNPZiTEUxnpHikV7+ZtsH8tZ/3zbBt1RqPlShfppNcL +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB +gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV +BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw +MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl +YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P +RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3 +UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI +2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8 +Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp ++2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+ +DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O +nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW +/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g +PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u +QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY +SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv +IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/ +RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4 +zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd +BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB +ZQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDqDCCApCgAwIBAgIJAP7c4wEPyUj/MA0GCSqGSIb3DQEBBQUAMDQxCzAJBgNV +BAYTAkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hMB4X +DTA3MDYyOTE1MTMwNVoXDTI3MDYyOTE1MTMwNVowNDELMAkGA1UEBhMCRlIxEjAQ +BgNVBAoMCURoaW15b3RpczERMA8GA1UEAwwIQ2VydGlnbmEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQDIaPHJ1tazNHUmgh7stL7qXOEm7RFHYeGifBZ4 +QCHkYJ5ayGPhxLGWkv8YbWkj4Sti993iNi+RB7lIzw7sebYs5zRLcAglozyHGxny +gQcPOJAZ0xH+hrTy0V4eHpbNgGzOOzGTtvKg0KmVEn2lmsxryIRWijOp5yIVUxbw +zBfsV1/pogqYCd7jX5xv3EjjhQsVWqa6n6xI4wmy9/Qy3l40vhx4XUJbzg4ij02Q +130yGLMLLGq/jj8UEYkgDncUtT2UCIf3JR7VsmAA7G8qKCVuKj4YYxclPz5EIBb2 +JsglrgVKtOdjLPOMFlN+XPsRGgjBRmKfIrjxwo1p3Po6WAbfAgMBAAGjgbwwgbkw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUGu3+QTmQtCRZvgHyUtVF9lo53BEw +ZAYDVR0jBF0wW4AUGu3+QTmQtCRZvgHyUtVF9lo53BGhOKQ2MDQxCzAJBgNVBAYT +AkZSMRIwEAYDVQQKDAlEaGlteW90aXMxETAPBgNVBAMMCENlcnRpZ25hggkA/tzj +AQ/JSP8wDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIABzANBgkqhkiG +9w0BAQUFAAOCAQEAhQMeknH2Qq/ho2Ge6/PAD/Kl1NqV5ta+aDY9fm4fTIrv0Q8h +bV6lUmPOEvjvKtpv6zf+EwLHyzs+ImvaYS5/1HI93TDhHkxAGYwP15zRgzB7mFnc +fca5DClMoTOi62c6ZYTTluLtdkVwj7Ur3vkj1kluPBS1xp81HlDQwY9qcEQCYsuu +HWhBp6pX6FOqB9IG9tUUBguRA3UsbHK1YZWaDYu5Def131TN3ubY1gkIl2PlwS6w +t0QmwCbAr1UwnjvVNioZBPRcHv/PLLf/0P2HQBHVESO7SMAhqaQoLf0V+LBOK/Qw +WyH8EZE0vkHve52Xdf+XlcCWWC/qu0bXu+TZLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBATANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxHTAb +BgNVBAMTFENlcnRpbm9taXMgLSBSb290IENBMB4XDTEzMTAyMTA5MTcxOFoXDTMz +MTAyMTA5MTcxOFowWjELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNlcnRpbm9taXMx +FzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMR0wGwYDVQQDExRDZXJ0aW5vbWlzIC0g +Um9vdCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBANTMCQosP5L2 +fxSeC5yaah1AMGT9qt8OHgZbn1CF6s2Nq0Nn3rD6foCWnoR4kkjW4znuzuRZWJfl +LieY6pOod5tK8O90gC3rMB+12ceAnGInkYjwSond3IjmFPnVAy//ldu9n+ws+hQV +WZUKxkd8aRi5pwP5ynapz8dvtF4F/u7BUrJ1Mofs7SlmO/NKFoL21prbcpjp3vDF +TKWrteoB4owuZH9kb/2jJZOLyKIOSY008B/sWEUuNKqEUL3nskoTuLAPrjhdsKkb +5nPJWqHZZkCqqU2mNAKthH6yI8H7KsZn9DS2sJVqM09xRLWtwHkziOC/7aOgFLSc +CbAK42C++PhmiM1b8XcF4LVzbsF9Ri6OSyemzTUK/eVNfaoqoynHWmgE6OXWk6Ri +wsXm9E/G+Z8ajYJJGYrKWUM66A0ywfRMEwNvbqY/kXPLynNvEiCL7sCCeN5LLsJJ +wx3tFvYk9CcbXFcx3FXuqB5vbKziRcxXV4p1VxngtViZSTYxPDMBbRZKzbgqg4SG +m/lg0h9tkQPTYKbVPZrdd5A9NaSfD171UkRpucC63M9933zZxKyGIjK8e2uR73r4 +F2iw4lNVYC2vPsKD2NkJK/DAZNuHi5HMkesE/Xa0lZrmFAYb1TQdvtj/dBxThZng +WVJKYe2InmtJiUZ+IFrZ50rlau7SZRFDAgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTvkUz1pcMw6C8I6tNxIqSSaHh0 +2TAfBgNVHSMEGDAWgBTvkUz1pcMw6C8I6tNxIqSSaHh02TANBgkqhkiG9w0BAQsF +AAOCAgEAfj1U2iJdGlg+O1QnurrMyOMaauo++RLrVl89UM7g6kgmJs95Vn6RHJk/ +0KGRHCwPT5iVWVO90CLYiF2cN/z7ZMF4jIuaYAnq1fohX9B0ZedQxb8uuQsLrbWw +F6YSjNRieOpWauwK0kDDPAUwPk2Ut59KA9N9J0u2/kTO+hkzGm2kQtHdzMjI1xZS +g081lLMSVX3l4kLr5JyTCcBMWwerx20RoFAXlCOotQqSD7J6wWAsOMwaplv/8gzj +qh8c3LigkyfeY+N/IZ865Z764BNqdeuWXGKRlI5nU7aJ+BIJy29SWwNyhlCVCNSN +h4YVH5Uk2KRvms6knZtt0rJ2BobGVgjF6wnaNsIbW0G+YSrjcOa4pvi2WsS9Iff/ +ql+hbHY5ZtbqTFXhADObE5hjyW/QASAJN1LnDE8+zbz1X5YnpyACleAu6AdBBR8V +btaw5BngDwKTACdyxYvRVB9dSsNAl35VpnzBMwQUAR1JIGkLGZOdblgi90AMRgwj +Y/M50n92Uaf0yKHxDHYiI0ZSKS3io0EHVmmY0gUJvGnHWmHNj4FgFU2A3ZDifcRQ +8ow7bkrHxuaAKzyBvBGAFhAn1/DNP3nMcyrDflOR1m749fPH0FFNjkulW+YZFzvW +gQncItzujrnEj1PhZ7szuIgVRs/taTX/dQ1G885x4cVrhkIGuUE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFnDCCA4SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJGUjET +MBEGA1UEChMKQ2VydGlub21pczEXMBUGA1UECxMOMDAwMiA0MzM5OTg5MDMxJjAk +BgNVBAMMHUNlcnRpbm9taXMgLSBBdXRvcml0w6kgUmFjaW5lMB4XDTA4MDkxNzA4 +Mjg1OVoXDTI4MDkxNzA4Mjg1OVowYzELMAkGA1UEBhMCRlIxEzARBgNVBAoTCkNl +cnRpbm9taXMxFzAVBgNVBAsTDjAwMDIgNDMzOTk4OTAzMSYwJAYDVQQDDB1DZXJ0 +aW5vbWlzIC0gQXV0b3JpdMOpIFJhY2luZTCCAiIwDQYJKoZIhvcNAQEBBQADggIP +ADCCAgoCggIBAJ2Fn4bT46/HsmtuM+Cet0I0VZ35gb5j2CN2DpdUzZlMGvE5x4jY +F1AMnmHawE5V3udauHpOd4cN5bjr+p5eex7Ezyh0x5P1FMYiKAT5kcOrJ3NqDi5N +8y4oH3DfVS9O7cdxbwlyLu3VMpfQ8Vh30WC8Tl7bmoT2R2FFK/ZQpn9qcSdIhDWe +rP5pqZ56XjUl+rSnSTV3lqc2W+HN3yNw2F1MpQiD8aYkOBOo7C+ooWfHpi2GR+6K +/OybDnT0K0kCe5B1jPyZOQE51kqJ5Z52qz6WKDgmi92NjMD2AR5vpTESOH2VwnHu +7XSu5DaiQ3XV8QCb4uTXzEIDS3h65X27uK4uIJPT5GHfceF2Z5c/tt9qc1pkIuVC +28+BA5PY9OMQ4HL2AHCs8MF6DwV/zzRpRbWT5BnbUhYjBYkOjUjkJW+zeL9i9Qf6 +lSTClrLooyPCXQP8w9PlfMl1I9f09bze5N/NgL+RiH2nE7Q5uiy6vdFrzPOlKO1E +nn1So2+WLhl+HPNbxxaOu2B9d2ZHVIIAEWBsMsGoOBvrbpgT1u449fCfDu/+MYHB +0iSVL1N6aaLwD4ZFjliCK0wi1F6g530mJ0jfJUaNSih8hp75mxpZuWW/Bd22Ql09 +5gBIgl4g9xGC3srYn+Y3RyYe63j3YcNBZFgCQfna4NH4+ej9Uji29YnfAgMBAAGj +WzBZMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBQN +jLZh2kS40RR9w759XkjwzspqsDAXBgNVHSAEEDAOMAwGCiqBegFWAgIAAQEwDQYJ +KoZIhvcNAQEFBQADggIBACQ+YAZ+He86PtvqrxyaLAEL9MW12Ukx9F1BjYkMTv9s +ov3/4gbIOZ/xWqndIlgVqIrTseYyCYIDbNc/CMf4uboAbbnW/FIyXaR/pDGUu7ZM +OH8oMDX/nyNTt7buFHAAQCvaR6s0fl6nVjBhK4tDrP22iCj1a7Y+YEq6QpA0Z43q +619FVDsXrIvkxmUP7tCMXWY5zjKn2BCXwH40nJ+U8/aGH88bc62UeYdocMMzpXDn +2NU4lG9jeeu/Cg4I58UvD0KgKxRA/yHgBcUn4YQRE7rWhh1BCxMjidPJC+iKunqj +o3M3NYB9Ergzd0A4wPpeMNLytqOx1qKVl4GbUu1pTP+A5FPbVFsDbVRfsbjvJL1v +nxHDx2TCDyhihWZeGnuyt++uNckZM6i4J9szVb9o4XVIRFb7zdNIu0eJOqxp9YDG +5ERQL1TEqkPFMTFYvZbF6nVsmnWxTfj3l/+WFvKXTej28xH5On2KOG4Ey+HTRRWq +pdEdnV1j6CTmNhTih60bWfVEm/vXd3wfAXBioSAaosUaKPQhA+4u2cGA6rnZgtZb +dsLLO7XSAPCjDuGtbkD326C00EauFddEwk01+dIL8hf2rGbVJLJP0RyZwG71fet0 +BLj5TXcJ17TPBzAJ8bgAVtkXFhYKK4bfjwEZGuW7gmP/vgt2Fl43N+bYdJeimUV5 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0zCCA7ugAwIBAgIVALhZFHE/V9+PMcAzPdLWGXojF7TrMA0GCSqGSIb3DQEB +DQUAMIGAMQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dp +ZXMgUy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MSQwIgYDVQQDExtDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBIDIwHhcNMTExMDA2 +MDgzOTU2WhcNNDYxMDA2MDgzOTU2WjCBgDELMAkGA1UEBhMCUEwxIjAgBgNVBAoT +GVVuaXpldG8gVGVjaG5vbG9naWVzIFMuQS4xJzAlBgNVBAsTHkNlcnR1bSBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEkMCIGA1UEAxMbQ2VydHVtIFRydXN0ZWQgTmV0 +d29yayBDQSAyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAvfl4+ObV +gAxknYYblmRnPyI6HnUBfe/7XGeMycxca6mR5rlC5SBLm9qbe7mZXdmbgEvXhEAr +J9PoujC7Pgkap0mV7ytAJMKXx6fumyXvqAoAl4Vaqp3cKcniNQfrcE1K1sGzVrih +QTib0fsxf4/gX+GxPw+OFklg1waNGPmqJhCrKtPQ0WeNG0a+RzDVLnLRxWPa52N5 +RH5LYySJhi40PylMUosqp8DikSiJucBb+R3Z5yet/5oCl8HGUJKbAiy9qbk0WQq/ +hEr/3/6zn+vZnuCYI+yma3cWKtvMrTscpIfcRnNeGWJoRVfkkIJCu0LW8GHgwaM9 +ZqNd9BjuiMmNF0UpmTJ1AjHuKSbIawLmtWJFfzcVWiNoidQ+3k4nsPBADLxNF8tN +orMe0AZa3faTz1d1mfX6hhpneLO/lv403L3nUlbls+V1e9dBkQXcXWnjlQ1DufyD +ljmVe2yAWk8TcsbXfSl6RLpSpCrVQUYJIP4ioLZbMI28iQzV13D4h1L92u+sUS4H +s07+0AnacO+Y+lbmbdu1V0vc5SwlFcieLnhO+NqcnoYsylfzGuXIkosagpZ6w7xQ +EmnYDlpGizrrJvojybawgb5CAKT41v4wLsfSRvbljnX98sy50IdbzAYQYLuDNbde +Z95H7JlI8aShFf6tjGKOOVVPORa5sWOd/7cCAwEAAaNCMEAwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUtqFUOQLDoD+Oirz61PgcptE6Dv0wDgYDVR0PAQH/BAQD +AgEGMA0GCSqGSIb3DQEBDQUAA4ICAQCdU8KBJdw1LK4K3VqbRjBWu9S0bEuG5gql +0pKKmo3cj7TudvQDy+ubAXirKmu1uiNOMXy1LN0taWczbmNdORgS+KAoU0SHq2rE +kpYfKqIcup3dJ/tSTbCPWujtjcNo45KgJgyHkLAD6mplKAjERnjgW7oO8DPcJ7Z+ +iD29kqSWfkGogAh71jYSvBAVmyS8q619EYkvMe340s9Tjuu0U6fnBMovpiLEEdzr +mMkiXUFq3ApSBFu8LqB9x7aSuySg8zfRK0OozPFoeBp+b2OQe590yGvZC1X2eQM9 +g8dBQJL7dgs3JRc8rz76PFwbhvlKDD+KxF4OmPGt7s/g/SE1xzNhzKI3GEN8M+mu +doKCB0VIO8lnbq2jheiWVs+8u/qry7dXJ40aL5nzIzM0jspTY9NXNFBPz0nBBbrF +qId744aP+0OiEumsUewEdkzw+o+5MRPpCLckCfmgtwc2WFfPxLt+SWaVNQS2dzW4 +qVMpX5KF+FLEWk79BmE5+33QdkeSzOwrvYRu5ptFwX1isVMtnnWg58koUNflvKiq +B3hquXS0YPOEjQPcrpHadEQNe0Kpd9YrfKHGbBNTIqkSmqX5TyhFNbCXT0ZlhcX0 +/WKiomr8NDAGft8M4HOBlslEKt4fguxscletKWSk8cYpjjVgU85r2QK+OTB14Pdc +Y2rwQMEsjQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFsDCCA5igAwIBAgIQFci9ZUdcr7iXAF7kBtK8nTANBgkqhkiG9w0BAQUFADBe +MQswCQYDVQQGEwJUVzEjMCEGA1UECgwaQ2h1bmdod2EgVGVsZWNvbSBDby4sIEx0 +ZC4xKjAoBgNVBAsMIWVQS0kgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wNDEyMjAwMjMxMjdaFw0zNDEyMjAwMjMxMjdaMF4xCzAJBgNVBAYTAlRXMSMw +IQYDVQQKDBpDaHVuZ2h3YSBUZWxlY29tIENvLiwgTHRkLjEqMCgGA1UECwwhZVBL +SSBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIICIjANBgkqhkiG9w0BAQEF +AAOCAg8AMIICCgKCAgEA4SUP7o3biDN1Z82tH306Tm2d0y8U82N0ywEhajfqhFAH +SyZbCUNsIZ5qyNUD9WBpj8zwIuQf5/dqIjG3LBXy4P4AakP/h2XGtRrBp0xtInAh +ijHyl3SJCRImHJ7K2RKilTza6We/CKBk49ZCt0Xvl/T29de1ShUCWH2YWEtgvM3X +DZoTM1PRYfl61dd4s5oz9wCGzh1NlDivqOx4UXCKXBCDUSH3ET00hl7lSM2XgYI1 +TBnsZfZrxQWh7kcT1rMhJ5QQCtkkO7q+RBNGMD+XPNjX12ruOzjjK9SXDrkb5wdJ +fzcq+Xd4z1TtW0ado4AOkUPB1ltfFLqfpo0kR0BZv3I4sjZsN/+Z0V0OWQqraffA +sgRFelQArr5T9rXn4fg8ozHSqf4hUmTFpmfwdQcGlBSBVcYn5AGPF8Fqcde+S/uU +WH1+ETOxQvdibBjWzwloPn9s9h6PYq2lY9sJpx8iQkEeb5mKPtf5P0B6ebClAZLS +nT0IFaUQAS2zMnaolQ2zepr7BxB4EW/hj8e6DyUadCrlHJhBmd8hh+iVBmoKs2pH +dmX2Os+PYhcZewoozRrSgx4hxyy/vv9haLdnG7t4TY3OZ+XkwY63I2binZB1NJip +NiuKmpS5nezMirH4JYlcWrYvjB9teSSnUmjDhDXiZo1jDiVN1Rmy5nk3pyKdVDEC +AwEAAaNqMGgwHQYDVR0OBBYEFB4M97Zn8uGSJglFwFU5Lnc/QkqiMAwGA1UdEwQF +MAMBAf8wOQYEZyoHAAQxMC8wLQIBADAJBgUrDgMCGgUAMAcGBWcqAwAABBRFsMLH +ClZ87lt4DJX5GFPBphzYEDANBgkqhkiG9w0BAQUFAAOCAgEACbODU1kBPpVJufGB +uvl2ICO1J2B01GqZNF5sAFPZn/KmsSQHRGoqxqWOeBLoR9lYGxMqXnmbnwoqZ6Yl +PwZpVnPDimZI+ymBV3QGypzqKOg4ZyYr8dW1P2WT+DZdjo2NQCCHGervJ8A9tDkP +JXtoUHRVnAxZfVo9QZQlUgjgRywVMRnVvwdVxrsStZf0X4OFunHB2WyBEXYKCrC/ +gpf36j36+uwtqSiUO1bd0lEursC9CBWMd1I0ltabrNMdjmEPNXubrjlpC2JgQCA2 +j6/7Nu4tCEoduL+bXPjqpRugc6bY+G7gMwRfaKonh+3ZwZCc7b3jajWvY9+rGNm6 +5ulK6lCKD2GTHuItGeIwlDWSXQ62B68ZgI9HkFFLLk3dheLSClIKF5r8GrBQAuUB +o2M3IUxExJtRmREOc5wGj1QupyheRDmHVi03vYVElOEMSyycw5KFNGHLD7ibSkNS +/jQ6fbjpKdx2qcgw+BRxgMYeNkh0IkFch4LoGHGLQYlE535YW6i4jRPpp2zDR+2z +Gp1iro2C6pSe3VkQw63d4k3jMdXH7OjysP6SHhYKGvzZ8/gntsm+HbRsZJB/9OTE +W9c3rkIO3aQab3yIVMUWbuF6aC74Or8NpDyJO3inTmODBCEIZ43ygknQW/2xzQ+D +hNQ+IIX3Sj0rnP0qCglN6oH4EZw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDkzCCAnugAwIBAgIQFBOWgxRVjOp7Y+X8NId3RDANBgkqhkiG9w0BAQUFADA0 +MRMwEQYDVQQDEwpDb21TaWduIENBMRAwDgYDVQQKEwdDb21TaWduMQswCQYDVQQG +EwJJTDAeFw0wNDAzMjQxMTMyMThaFw0yOTAzMTkxNTAyMThaMDQxEzARBgNVBAMT +CkNvbVNpZ24gQ0ExEDAOBgNVBAoTB0NvbVNpZ24xCzAJBgNVBAYTAklMMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA8ORUaSvTx49qROR+WCf4C9DklBKK +8Rs4OC8fMZwG1Cyn3gsqrhqg455qv588x26i+YtkbDqthVVRVKU4VbirgwTyP2Q2 +98CNQ0NqZtH3FyrV7zb6MBBC11PN+fozc0yz6YQgitZBJzXkOPqUm7h65HkfM/sb +2CEJKHxNGGleZIp6GZPKfuzzcuc3B1hZKKxC+cX/zT/npfo4sdAMx9lSGlPWgcxC +ejVb7Us6eva1jsz/D3zkYDaHL63woSV9/9JLEYhwVKZBqGdTUkJe5DSe5L6j7Kpi +Xd3DTKaCQeQzC6zJMw9kglcq/QytNuEMrkvF7zuZ2SOzW120V+x0cAwqTwIDAQAB +o4GgMIGdMAwGA1UdEwQFMAMBAf8wPQYDVR0fBDYwNDAyoDCgLoYsaHR0cDovL2Zl +ZGlyLmNvbXNpZ24uY28uaWwvY3JsL0NvbVNpZ25DQS5jcmwwDgYDVR0PAQH/BAQD +AgGGMB8GA1UdIwQYMBaAFEsBmz5WGmU2dst7l6qSBe4y5ygxMB0GA1UdDgQWBBRL +AZs+VhplNnbLe5eqkgXuMucoMTANBgkqhkiG9w0BAQUFAAOCAQEA0Nmlfv4pYEWd +foPPbrxHbvUanlR2QnG0PFg/LUAlQvaBnPGJEMgOqnhPOAlXsDzACPw1jvFIUY0M +cXS6hMTXcpuEfDhOZAYnKuGntewImbQKDdSFc8gS4TXt8QUxHXOZDOuWyt3T5oWq +8Ir7dcHyCTxlZWTzTNity4hp8+SDtwy9F1qWF8pb/627HOkthIDYIb6FUtnUdLlp +hbpN7Sgy6/lhSuTENh4Z3G+EER+V9YMoGKgzkkMn3V0TBEVPh9VGzT2ouvDzuFYk +Res3x+F2T3I5GN9+dHLHcy056mDmrRGiVod7w2ia/viMcKjfZTL0pECMocJEAw6U +AGegcQCCSA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGATCCA+mgAwIBAgIRAI9hcRW6eVgXjH0ROqzW264wDQYJKoZIhvcNAQELBQAw +RTEfMB0GA1UEAxMWQ29tU2lnbiBHbG9iYWwgUm9vdCBDQTEVMBMGA1UEChMMQ29t +U2lnbiBMdGQuMQswCQYDVQQGEwJJTDAeFw0xMTA3MTgxMDI0NTRaFw0zNjA3MTYx +MDI0NTVaMEUxHzAdBgNVBAMTFkNvbVNpZ24gR2xvYmFsIFJvb3QgQ0ExFTATBgNV +BAoTDENvbVNpZ24gTHRkLjELMAkGA1UEBhMCSUwwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQCyKClzKh3rm6n1nvigmV/VU1D4hSwYW2ro3VqpzpPo0Ph3 +3LguqjXd5juDwN4mpxTpD99d7Xu5X6KGTlMVtfN+bTbA4t3x7DU0Zqn0BE5XuOgs +3GLH41Vmr5wox1bShVpM+IsjcN4E/hMnDtt/Bkb5s33xCG+ohz5dlq0gA9qfr/g4 +O9lkHZXTCeYrmVzd/il4x79CqNvGkdL3um+OKYl8rg1dPtD8UsytMaDgBAopKR+W +igc16QJzCbvcinlETlrzP/Ny76BWPnAQgaYBULax/Q5thVU+N3sEOKp6uviTdD+X +O6i96gARU4H0xxPFI75PK/YdHrHjfjQevXl4J37FJfPMSHAbgPBhHC+qn/014DOx +46fEGXcdw2BFeIIIwbj2GH70VyJWmuk/xLMCHHpJ/nIF8w25BQtkPpkwESL6esaU +b1CyB4Vgjyf16/0nRiCAKAyC/DY/Yh+rDWtXK8c6QkXD2XamrVJo43DVNFqGZzbf +5bsUXqiVDOz71AxqqK+p4ek9374xPNMJ2rB5MLPAPycwI0bUuLHhLy6nAIFHLhut +TNI+6Y/soYpi5JSaEjcY7pxI8WIkUAzr2r+6UoT0vAdyOt7nt1y8844a7szo/aKf +woziHl2O1w6ZXUC30K+ptXVaOiW79pBDcbLZ9ZdbONhS7Ea3iH4HJNwktrBJLQID +AQABo4HrMIHoMA8GA1UdEwEB/wQFMAMBAf8wgYQGA1UdHwR9MHswPKA6oDiGNmh0 +dHA6Ly9mZWRpci5jb21zaWduLmNvLmlsL2NybC9jb21zaWduZ2xvYmFscm9vdGNh +LmNybDA7oDmgN4Y1aHR0cDovL2NybDEuY29tc2lnbi5jby5pbC9jcmwvY29tc2ln +bmdsb2JhbHJvb3RjYS5jcmwwDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQWBBQCRZPY +DUhirGm6rgZbPvuqJpFQsTAfBgNVHSMEGDAWgBQCRZPYDUhirGm6rgZbPvuqJpFQ +sTANBgkqhkiG9w0BAQsFAAOCAgEAk1V5V9701xsfy4mfX+tP9Ln5e9h3N+QMwUfj +kr+k3e8iXOqADjTpUHeBkEee5tJq09ZLp/43F5tZ2eHdYq2ZEX7iWHCnOQet6Yw9 +SU1TahsrGDA6JJD9sdPFnNZooGsU1520e0zNB0dNWwxrWAmu4RsBxvEpWCJbvzQL +dOfyX85RWwli81OiVMBc5XvJ1mxsIIqli45oRynKtsWP7E+b0ISJ1n+XFLdQo/Nm +WA/5sDfT0F5YPzWdZymudMbXitimxC+n4oQE4mbQ4Zm718Iwg3pP9gMMcSc7Qc1J +kJHPH9O7gVubkKHuSYj9T3Ym6c6egL1pb4pz/uT7cT26Fiopc/jdqbe2EAfoJZkv +hlp/zdzOoXTWjiKNA5zmgWnZn943FuE9KMRyKtyi/ezJXCh8ypnqLIKxeFfZl69C +BwJsPXUTuqj8Fic0s3aZmmr7C4jXycP+Q8V+akMEIoHAxcd960b4wVWKqOcI/kZS +Q0cYqWOY1LNjznRt9lweWEfwDBL3FhrHOmD4++1N3FkkM4W+Q1b2WOL24clDMj+i +2n9Iw0lc1llHMSMvA5D0vpsXZpOgcCVahfXczQKi9wQ3oZyonJeWx4/rXdMtagAB +VBYGFuMEUEQtybI+eIbnp5peO2WAAblQI4eTy/jMVowe5tfMEXovV3sz9ULgmGb3 +DscLP1I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDqzCCApOgAwIBAgIRAMcoRwmzuGxFjB36JPU2TukwDQYJKoZIhvcNAQEFBQAw +PDEbMBkGA1UEAxMSQ29tU2lnbiBTZWN1cmVkIENBMRAwDgYDVQQKEwdDb21TaWdu +MQswCQYDVQQGEwJJTDAeFw0wNDAzMjQxMTM3MjBaFw0yOTAzMTYxNTA0NTZaMDwx +GzAZBgNVBAMTEkNvbVNpZ24gU2VjdXJlZCBDQTEQMA4GA1UEChMHQ29tU2lnbjEL +MAkGA1UEBhMCSUwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDGtWhf +HZQVw6QIVS3joFd67+l0Kru5fFdJGhFeTymHDEjWaueP1H5XJLkGieQcPOqs49oh +gHMhCu95mGwfCP+hUH3ymBvJVG8+pSjsIQQPRbsHPaHA+iqYHU4Gk/v1iDurX8sW +v+bznkqH7Rnqwp9D5PGBpX8QTz7RSmKtUxvLg/8HZaWSLWapW7ha9B20IZFKF3ue +Mv5WJDmyVIRD9YTC2LxBkMyd1mja6YJQqTtoz7VdApRgFrFD2UNd3V2Hbuq7s8lr +9gOUCXDeFhF6K+h2j0kQmHe5Y1yLM5d19guMsqtb3nQgJT/j8xH5h2iGNXHDHYwt +6+UarA9z1YJZQIDTAgMBAAGjgacwgaQwDAYDVR0TBAUwAwEB/zBEBgNVHR8EPTA7 +MDmgN6A1hjNodHRwOi8vZmVkaXIuY29tc2lnbi5jby5pbC9jcmwvQ29tU2lnblNl +Y3VyZWRDQS5jcmwwDgYDVR0PAQH/BAQDAgGGMB8GA1UdIwQYMBaAFMFL7XC29z58 +ADsAj8c+DkWfHl3sMB0GA1UdDgQWBBTBS+1wtvc+fAA7AI/HPg5Fnx5d7DANBgkq +hkiG9w0BAQUFAAOCAQEAFs/ukhNQq3sUnjO2QiBq1BW9Cav8cujvR3qQrFHBZE7p +iL1DRYHjZiM/EoZNGeQFsOY3wo3aBijJD4mkU6l1P7CW+6tMM1X5eCZGbxs2mPtC +dsGCuY7e+0X5YxtiOzkGynd6qDwJz2w2PQ8KRUtpFhpFfTMDZflScZAmlaxMDPWL +kz/MdXSFmLr/YnpNH4n+rr2UAJm/EaXc4HnFFgt9AmEd6oX5AhVP51qJThRv4zdL +hfXBPGHg/QVBspJ/wx2g0K5SZGBrGMYmnNj1ZOQ2GmKfig8+/21OGVZOIJFsnzQz +OjRXUDpvgV4GxvU+fE6OK85lBi5d0ipTdF7Tbieejw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj +YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL +MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE +BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM +GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua +BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe +3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4 +YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR +rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm +ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU +oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF +MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v +QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t +b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF +AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q +GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz +Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2 +G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi +l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3 +smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp +ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow +fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G +A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV +BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM +cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S +HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996 +CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk +3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz +6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV +HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud +EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv +Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw +Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww +DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0 +5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj +Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI +gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ +aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl +izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb +MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow +GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0 +aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla +MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO +BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD +VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW +fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt +TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL +fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW +1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7 +kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G +A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v +ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo +dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu +Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/ +HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32 +pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS +jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+ +xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn +dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMzCCAxugAwIBAgIDCYPzMA0GCSqGSIb3DQEBCwUAME0xCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMMHkQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgMjAwOTAeFw0wOTExMDUwODM1NThaFw0yOTExMDUwODM1NTha +ME0xCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxJzAlBgNVBAMM +HkQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgMjAwOTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBANOySs96R+91myP6Oi/WUEWJNTrGa9v+2wBoqOADER03 +UAifTUpolDWzU9GUY6cgVq/eUXjsKj3zSEhQPgrfRlWLJ23DEE0NkVJD2IfgXU42 +tSHKXzlABF9bfsyjxiupQB7ZNoTWSPOSHjRGICTBpFGOShrvUD9pXRl/RcPHAY9R +ySPocq60vFYJfxLLHLGvKZAKyVXMD9O0Gu1HNVpK7ZxzBCHQqr0ME7UAyiZsxGsM +lFqVlNpQmvH/pStmMaTJOKDfHR+4CS7zp+hnUquVH+BGPtikw8paxTGA6Eian5Rp +/hnd2HN8gcqW3o7tszIFZYQ05ub9VxC1X3a/L7AQDcUCAwEAAaOCARowggEWMA8G +A1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFP3aFMSfMN4hvR5COfyrYyNJ4PGEMA4G +A1UdDwEB/wQEAwIBBjCB0wYDVR0fBIHLMIHIMIGAoH6gfIZ6bGRhcDovL2RpcmVj +dG9yeS5kLXRydXN0Lm5ldC9DTj1ELVRSVVNUJTIwUm9vdCUyMENsYXNzJTIwMyUy +MENBJTIwMiUyMDIwMDksTz1ELVRydXN0JTIwR21iSCxDPURFP2NlcnRpZmljYXRl +cmV2b2NhdGlvbmxpc3QwQ6BBoD+GPWh0dHA6Ly93d3cuZC10cnVzdC5uZXQvY3Js +L2QtdHJ1c3Rfcm9vdF9jbGFzc18zX2NhXzJfMjAwOS5jcmwwDQYJKoZIhvcNAQEL +BQADggEBAH+X2zDI36ScfSF6gHDOFBJpiBSVYEQBrLLpME+bUMJm2H6NMLVwMeni +acfzcNsgFYbQDfC+rAF1hM5+n02/t2A7nPPKHeJeaNijnZflQGDSNiH+0LS4F9p0 +o3/U37CYAqxva2ssJSRyoWXuJVrl5jLn8t+rSfrzkGkj2wTZ51xY/GXUl77M/C4K +zCUqNQT4YJEVdT1B/yMfGchs64JTBKbkTCJNjYy6zltz7GRUUG3RnFX7acM2w4y8 +PIWmawomDeCTmGCufsYkl4phX5GOZpIJhzbNi5stPvZR1FDUWSi9g/LMKHtThm3Y +Johw1+qRzT65ysCQblrGXnRl11z+o+I= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEQzCCAyugAwIBAgIDCYP0MA0GCSqGSIb3DQEBCwUAMFAxCzAJBgNVBAYTAkRF +MRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNVBAMMIUQtVFJVU1QgUm9vdCBD +bGFzcyAzIENBIDIgRVYgMjAwOTAeFw0wOTExMDUwODUwNDZaFw0yOTExMDUwODUw +NDZaMFAxCzAJBgNVBAYTAkRFMRUwEwYDVQQKDAxELVRydXN0IEdtYkgxKjAoBgNV +BAMMIUQtVFJVU1QgUm9vdCBDbGFzcyAzIENBIDIgRVYgMjAwOTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJnxhDRwui+3MKCOvXwEz75ivJn9gpfSegpn +ljgJ9hBOlSJzmY3aFS3nBfwZcyK3jpgAvDw9rKFs+9Z5JUut8Mxk2og+KbgPCdM0 +3TP1YtHhzRnp7hhPTFiu4h7WDFsVWtg6uMQYZB7jM7K1iXdODL/ZlGsTl28So/6Z +qQTMFexgaDbtCHu39b+T7WYxg4zGcTSHThfqr4uRjRxWQa4iN1438h3Z0S0NL2lR +p75mpoo6Kr3HGrHhFPC+Oh25z1uxav60sUYgovseO3Dvk5h9jHOW8sXvhXCtKSb8 +HgQ+HKDYD8tSg2J87otTlZCpV6LqYQXY+U3EJ/pure3511H3a6UCAwEAAaOCASQw +ggEgMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFNOUikxiEyoZLsyvcop9Ntea +HNxnMA4GA1UdDwEB/wQEAwIBBjCB3QYDVR0fBIHVMIHSMIGHoIGEoIGBhn9sZGFw +Oi8vZGlyZWN0b3J5LmQtdHJ1c3QubmV0L0NOPUQtVFJVU1QlMjBSb290JTIwQ2xh +c3MlMjAzJTIwQ0ElMjAyJTIwRVYlMjAyMDA5LE89RC1UcnVzdCUyMEdtYkgsQz1E +RT9jZXJ0aWZpY2F0ZXJldm9jYXRpb25saXN0MEagRKBChkBodHRwOi8vd3d3LmQt +dHJ1c3QubmV0L2NybC9kLXRydXN0X3Jvb3RfY2xhc3NfM19jYV8yX2V2XzIwMDku +Y3JsMA0GCSqGSIb3DQEBCwUAA4IBAQA07XtaPKSUiO8aEXUHL7P+PPoeUSbrh/Yp +3uDx1MYkCenBz1UbtDDZzhr+BlGmFaQt77JLvyAoJUnRpjZ3NOhk31KxEcdzes05 +nsKtjHEh8lprr988TlWvsoRlFIm5d8sqMb7Po23Pb0iUMkZv53GMoKaEGTcH8gNF +CSuGdXzfX2lXANtu2KZyIktQ1HWYVt+3GP9DQ1CuekR78HlR10M9p9OB0/DJT7na +xpeG0ILD5EJt/rDiZE4OJudANCa1CInXCGNjOCd1HjPqbqjdn5lPdE2BiYBL3ZqX +KVwvvoFBuYz/6n1gBp7N1z3TLqMVvKjmJuVvw9y4AyHqnxbxLFS1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDOzCCAiOgAwIBAgIRANAeRlAAACmMAAAAAgAAAAIwDQYJKoZIhvcNAQEFBQAw +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYNDAeFw0wMDA5MTMwNjIyNTBaFw0yMDA5MTMwNjIyNTBa +MD8xJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjEXMBUGA1UE +AxMORFNUIFJvb3QgQ0EgWDQwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCthX3OFEYY8gSeIYur0O4ypOT68HnDrjLfIutL5PZHRwQGjzCPb9PFo/ihboJ8 +RvfGhBAqpQCo47zwYEhpWm1jB+L/OE/dBBiyn98krfU2NiBKSom2J58RBeAwHGEy +cO+lewyjVvbDDLUy4CheY059vfMjPAftCRXjqSZIolQb9FdPcAoa90mFwB7rKniE +J7vppdrUScSS0+eBrHSUPLdvwyn4RGp+lSwbWYcbg5EpSpE0GRJdchic0YDjvIoC +YHpe7Rkj93PYRTQyU4bhC88ck8tMqbvRYqMRqR+vobbkrj5LLCOQCHV5WEoxWh+0 +E2SpIFe7RkV++MmpIAc0h1tZAgMBAAGjMjAwMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFPCD6nPIP1ubWzdf9UyPWvf0hki9MA0GCSqGSIb3DQEBBQUAA4IBAQCE +G85wl5eEWd7adH6XW/ikGN5salvpq/Fix6yVTzE6CrhlP5LBdkf6kx1bSPL18M45 +g0rw2zA/MWOhJ3+S6U+BE0zPGCuu8YQaZibR7snm3HiHUaZNMu5c8D0x0bcMxDjY +AVVcHCoNiL53Q4PLW27nbY6wwG0ffFKmgV3blxrYWfuUDgGpyPwHwkfVFvz9qjaV +mf12VJffL6W8omBPtgteb6UaT/k1oJ7YI0ldGf+ngpVbRhD+LC3cUtT6GO/BEPZu +8YTV/hbiDH5v3khVqMIeKT6o8IuXGG7F6a6vKwP1F1FwTXf4UC/ivhme7vdUH7B/ +Vv4AEbT8dNfEeFxrkDbh +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc +MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj +IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB +IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE +RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl +U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290 +IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU +ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC +QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr +rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S +NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc +QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH +txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP +BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC +AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp +tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa +IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl +6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+ +xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU +Cm26OWMohpLzGITY+9HPBVZkVw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c +JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP +mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+ +wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4 +VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/ +AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB +AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun +pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC +dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf +fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm +NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx +H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe ++o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDljCCAn6gAwIBAgIQC5McOtY5Z+pnI7/Dr5r0SzANBgkqhkiG9w0BAQsFADBl +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv +b3QgRzIwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQG +EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl +cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzIwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDZ5ygvUj82ckmIkzTz+GoeMVSA +n61UQbVH35ao1K+ALbkKz3X9iaV9JPrjIgwrvJUXCzO/GU1BBpAAvQxNEP4Htecc +biJVMWWXvdMX0h5i89vqbFCMP4QMls+3ywPgym2hFEwbid3tALBSfK+RbLE4E9Hp +EgjAALAcKxHad3A2m67OeYfcgnDmCXRwVWmvo2ifv922ebPynXApVfSr/5Vh88lA +bx3RvpO704gqu52/clpWcTs/1PPRCv4o76Pu2ZmvA9OPYLfykqGxvYmJHzDNw6Yu +YjOuFgJ3RFrngQo8p0Quebg/BLxcoIfhG69Rjs3sLPr4/m3wOnyqi+RnlTGNAgMB +AAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgGGMB0GA1UdDgQW +BBTOw0q5mVXyuNtgv6l+vVa1lzan1jANBgkqhkiG9w0BAQsFAAOCAQEAyqVVjOPI +QW5pJ6d1Ee88hjZv0p3GeDgdaZaikmkuOGybfQTUiaWxMTeKySHMq2zNixya1r9I +0jJmwYrA8y8678Dj1JGG0VDjA9tzd29KOVPt3ibHtX2vK0LRdWLjSisCx1BL4Gni +lmwORGYQRI+tBev4eaymG+g3NJ1TyWGqolKvSnAWhsI6yLETcDbYz+70CjTVW0z9 +B5yiutkBclzzTcHdDrEcDcRjvq30FPuJ7KJBDkzMyFdA0G4Dqs0MjomZmWzwPDCv +ON9vvKO+KSAnq3T/EyJ43pdSVR6DtVQgA+6uwE9W3jfMw3+qBCe703e4YtsXfJwo +IhNzbM8m9Yop5w== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICRjCCAc2gAwIBAgIQC6Fa+h3foLVJRK/NJKBs7DAKBggqhkjOPQQDAzBlMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3Qg +RzMwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBlMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgRzMwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAAQZ57ysRGXtzbg/WPuNsVepRC0FFfLvC/8QdJ+1YlJf +Zn4f5dwbRXkLzMZTCp2NXQLZqVneAlr2lSoOjThKiknGvMYDOAdfVdp+CW7if17Q +RSAPWXYQ1qAk8C3eNvJsKTmjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/ +BAQDAgGGMB0GA1UdDgQWBBTL0L2p4ZgFUaFNN6KDec6NHSrkhDAKBggqhkjOPQQD +AwNnADBkAjAlpIFFAmsSS3V0T8gj43DydXLefInwz5FyYZ5eEJJZVrmDxxDnOOlY +JjZ91eQ0hjkCMHw2U/Aw5WJjOpnitqM7mzT6HtoQknFekROn3aRukswy1vUhZscv +6pZjamVFkpUBtA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD +QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB +CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97 +nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt +43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P +T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4 +gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO +BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR +TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw +DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr +hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg +06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF +PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls +YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk +CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIQAzrx5qcRqaC7KGSxHQn65TANBgkqhkiG9w0BAQsFADBh +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH +MjAeFw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVT +MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j +b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEcyMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuzfNNNx7a8myaJCtSnX/RrohCgiN9RlUyfuI +2/Ou8jqJkTx65qsGGmvPrC3oXgkkRLpimn7Wo6h+4FR1IAWsULecYxpsMNzaHxmx +1x7e/dfgy5SDN67sH0NO3Xss0r0upS/kqbitOtSZpLYl6ZtrAGCSYP9PIUkY92eQ +q2EGnI/yuum06ZIya7XzV+hdG82MHauVBJVJ8zUtluNJbd134/tJS7SsVQepj5Wz +tCO7TG1F8PapspUwtP1MVYwnSlcUfIKdzXOS0xZKBgyMUNGPHgm+F6HmIcr9g+UQ +vIOlCsRnKPZzFBQ9RnbDhxSJITRNrw9FDKZJobq7nMWxM4MphQIDAQABo0IwQDAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAdBgNVHQ4EFgQUTiJUIBiV +5uNu5g/6+rkS7QYXjzkwDQYJKoZIhvcNAQELBQADggEBAGBnKJRvDkhj6zHd6mcY +1Yl9PMWLSn/pvtsrF9+wX3N3KjITOYFnQoQj8kVnNeyIv/iPsGEMNKSuIEyExtv4 +NeF22d+mQrvHRAiGfzZ0JFrabA0UWTW98kndth/Jsw1HKj2ZL7tcu7XUIOGZX1NG +Fdtom/DzMNU+MeKNhJ7jitralj41E6Vf8PlwUHBHQRFXGU7Aj64GxJUTFy8bJZ91 +8rGOmaFvE7FBcf6IKshPECBV1/MUReXgRPTqh5Uykw7+U0b6LJ3/iyK5S9kJRaTe +pLiaWN0bfVKfjllDiIGknibVb63dDcY3fe0Dkhvld1927jyNxF1WW6LZZm6zNTfl +MrY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICPzCCAcWgAwIBAgIQBVVWvPJepDU1w6QP1atFcjAKBggqhkjOPQQDAzBhMQsw +CQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cu +ZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBHMzAe +Fw0xMzA4MDExMjAwMDBaFw0zODAxMTUxMjAwMDBaMGExCzAJBgNVBAYTAlVTMRUw +EwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5jb20x +IDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IEczMHYwEAYHKoZIzj0CAQYF +K4EEACIDYgAE3afZu4q4C/sLfyHS8L6+c/MzXRq8NOrexpu80JX28MzQC7phW1FG +fp4tn+6OYwwX7Adw9c+ELkCDnOg/QW07rdOkFFk2eJ0DQ+4QE2xy3q6Ip6FrtUPO +Z9wj/wMco+I+o0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBhjAd +BgNVHQ4EFgQUs9tIpPmhxdiuNkHMEWNpYim8S8YwCgYIKoZIzj0EAwMDaAAwZQIx +AK288mw/EkrRLTnDCgmXc/SINoyIJ7vmiI1Qhadj+Z4y3maTD/HMsQmP3Wyr+mt/ +oAIwOWZbwmSNuJ5Q3KjVSaLtx9zRSX8XAbjIho9OjIgrqJqpisXRAL34VOKa5Vt8 +sycX +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j +ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3 +LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug +RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm ++9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW +PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM +xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB +Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3 +hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg +EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA +FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec +nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z +eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF +hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2 +Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe +vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep ++OkuE6N36B9K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkDCCA3igAwIBAgIQBZsbV56OITLiOQe9p3d1XDANBgkqhkiG9w0BAQwFADBi +MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3 +d3cuZGlnaWNlcnQuY29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3Qg +RzQwHhcNMTMwODAxMTIwMDAwWhcNMzgwMTE1MTIwMDAwWjBiMQswCQYDVQQGEwJV +UzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNlcnQu +Y29tMSEwHwYDVQQDExhEaWdpQ2VydCBUcnVzdGVkIFJvb3QgRzQwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQC/5pBzaN675F1KPDAiMGkz7MKnJS7JIT3y +ithZwuEppz1Yq3aaza57G4QNxDAf8xukOBbrVsaXbR2rsnnyyhHS5F/WBTxSD1If +xp4VpX6+n6lXFllVcq9ok3DCsrp1mWpzMpTREEQQLt+C8weE5nQ7bXHiLQwb7iDV +ySAdYyktzuxeTsiT+CFhmzTrBcZe7FsavOvJz82sNEBfsXpm7nfISKhmV1efVFiO +DCu3T6cw2Vbuyntd463JT17lNecxy9qTXtyOj4DatpGYQJB5w3jHtrHEtWoYOAMQ +jdjUN6QuBX2I9YI+EJFwq1WCQTLX2wRzKm6RAXwhTNS8rhsDdV14Ztk6MUSaM0C/ +CNdaSaTC5qmgZ92kJ7yhTzm1EVgX9yRcRo9k98FpiHaYdj1ZXUJ2h4mXaXpI8OCi +EhtmmnTK3kse5w5jrubU75KSOp493ADkRSWJtppEGSt+wJS00mFt6zPZxd9LBADM +fRyVw4/3IbKyEbe7f/LVjHAsQWCqsWMYRJUadmJ+9oCw++hkpjPRiQfhvbfmQ6QY +uKZ3AeEPlAwhHbJUKSWJbOUOUlFHdL4mrLZBdd56rF+NP8m800ERElvlEFDrMcXK +chYiCd98THU/Y+whX8QgUWtvsauGi0/C1kVfnSD8oR7FwI+isX4KJpn15GkvmB0t +9dmpsh3lGwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +hjAdBgNVHQ4EFgQU7NfjgtJxXWRM3y5nP+e6mK4cD08wDQYJKoZIhvcNAQEMBQAD +ggIBALth2X2pbL4XxJEbw6GiAI3jZGgPVs93rnD5/ZpKmbnJeFwMDF/k5hQpVgs2 +SV1EY+CtnJYYZhsjDT156W1r1lT40jzBQ0CuHVD1UvyQO7uYmWlrx8GnqGikJ9yd ++SeuMIW59mdNOj6PWTkiU0TryF0Dyu1Qen1iIQqAyHNm0aAFYF/opbSnr6j3bTWc +fFqK1qI4mfN4i/RN0iAL3gTujJtHgXINwBQy7zBZLq7gcfJW5GqXb5JQbZaNaHqa +sjYUegbyJLkJEVDXCLG4iXqEI2FCKeWjzaIgQdfRnGTZ6iahixTXTBmyUEFxPT9N +cCOGDErcgdLMMpSEDQgJlxxPwO5rIHQw0uA5NBCFIRUBCOhVMt5xSdkoF1BN5r5N +0XWs0Mr7QbhDparTwwVETyw2m+L64kW4I1NsBm9nVX9GtUw/bihaeSbSpKhil9Ie +4u1Ki7wb/UdKDd9nZn6yW0HQO+T0O/QEY+nvwlQAUaCKKsnOeMzV6ocEGLPOr0mI +r/OSmbaz5mEP0oUA51Aa5BuVnRmhuZyxm7EAHu/QD09CbMkKvO5D+jpxpchNJqU1 +/YldvIViHTLSoCtU7ZpXwdv6EM8Zt4tKG48BtieVU+i2iW1bvGjUI+iLUaJW+fCm +gKDWHrO8Dw9TdSmq6hN35N6MgSGtBxBHEa2HPQfRdbzP82Z+ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDcDCCAligAwIBAgIBBTANBgkqhkiG9w0BAQUFADBbMQswCQYDVQQGEwJVUzEY +MBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQwwCgYDVQQLEwNEb0QxDDAKBgNVBAsT +A1BLSTEWMBQGA1UEAxMNRG9EIFJvb3QgQ0EgMjAeFw0wNDEyMTMxNTAwMTBaFw0y +OTEyMDUxNTAwMTBaMFsxCzAJBgNVBAYTAlVTMRgwFgYDVQQKEw9VLlMuIEdvdmVy +bm1lbnQxDDAKBgNVBAsTA0RvRDEMMAoGA1UECxMDUEtJMRYwFAYDVQQDEw1Eb0Qg +Um9vdCBDQSAyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwCzB9o07 +rP8/PNZxvrh0IgfscEEV/KtA4weqwcPYn/7aTDq/P8jYKHtLNgHArEUlw9IOCo+F +GGQQPRoTcCpvjtfcjZOzQQ84Ic2tq8I9KgXTVxE3Dc2MUfmT48xGSSGOFLTNyxQ+ +OM1yMe6rEvJl6jQuVl3/7mN1y226kTT8nvP0LRy+UMRC31mI/2qz+qhsPctWcXEF +lrufgOWARVlnQbDrw61gpIB1BhecDvRD4JkOG/t/9bPMsoGCsf0ywbi+QaRktWA6 +WlEwjM7eQSwZR1xJEGS5dKmHQa99brrBuKG/ZTE6BGf5tbuOkooAY7ix5ow4X4P/ +UNU7ol1rshDMYwIDAQABoz8wPTAdBgNVHQ4EFgQUSXS7DF66ev4CVO97oMaVxgmA +cJYwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBAJiRjT+JyLv1wGlzKTs1rLqzCHY9cAmS6YREIQF9FHYb7lFsHY0VNy17MWn0 +mkS4r0bMNPojywMnGdKDIXUr5+AbmSbchECV6KjSzPZYXGbvP0qXEIIdugqi3VsG +K52nZE7rLgE1pLQ/E61V5NVzqGmbEfGY8jEeb0DU+HifjpGgb3AEkGaqBivO4XqS +tX3h4NGW56E6LcyxnR8FRO2HmdNNGnA5wQQM5X7Z8a/XIA7xInolpHOZzD+kByeW +qKKV7YK5FtOeC4fCwfKI9WLfaN/HvGlR7bFc3FRUKQ8JOZqsA8HbDE2ubwp6Fknx +v5HSOJTT9pUst2zJQraNypCNhdk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGSzCCBDOgAwIBAgIIamg+nFGby1MwDQYJKoZIhvcNAQELBQAwgbIxCzAJBgNV +BAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+BgNVBAoMN0UtVHXEn3JhIEVCRyBC +aWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhpem1ldGxlcmkgQS7Fni4xJjAkBgNV +BAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBNZXJrZXppMSgwJgYDVQQDDB9FLVR1 +Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTEzMDMwNTEyMDk0OFoXDTIz +MDMwMzEyMDk0OFowgbIxCzAJBgNVBAYTAlRSMQ8wDQYDVQQHDAZBbmthcmExQDA+ +BgNVBAoMN0UtVHXEn3JhIEVCRyBCaWxpxZ9pbSBUZWtub2xvamlsZXJpIHZlIEhp +em1ldGxlcmkgQS7Fni4xJjAkBgNVBAsMHUUtVHVncmEgU2VydGlmaWthc3lvbiBN +ZXJrZXppMSgwJgYDVQQDDB9FLVR1Z3JhIENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA4vU/kwVRHoViVF56C/UY +B4Oufq9899SKa6VjQzm5S/fDxmSJPZQuVIBSOTkHS0vdhQd2h8y/L5VMzH2nPbxH +D5hw+IyFHnSOkm0bQNGZDbt1bsipa5rAhDGvykPL6ys06I+XawGb1Q5KCKpbknSF +Q9OArqGIW66z6l7LFpp3RMih9lRozt6Plyu6W0ACDGQXwLWTzeHxE2bODHnv0ZEo +q1+gElIwcxmOj+GMB6LDu0rw6h8VqO4lzKRG+Bsi77MOQ7osJLjFLFzUHPhdZL3D +k14opz8n8Y4e0ypQBaNV2cvnOVPAmJ6MVGKLJrD3fY185MaeZkJVgkfnsliNZvcH +fC425lAcP9tDJMW/hkd5s3kc91r0E+xs+D/iWR+V7kI+ua2oMoVJl0b+SzGPWsut +dEcf6ZG33ygEIqDUD13ieU/qbIWGvaimzuT6w+Gzrt48Ue7LE3wBf4QOXVGUnhMM +ti6lTPk5cDZvlsouDERVxcr6XQKj39ZkjFqzAQqptQpHF//vkUAqjqFGOjGY5RH8 +zLtJVor8udBhmm9lbObDyz51Sf6Pp+KJxWfXnUYTTjF2OySznhFlhqt/7x3U+Lzn +rFpct1pHXFXOVbQicVtbC/DP3KBhZOqp12gKY6fgDT+gr9Oq0n7vUaDmUStVkhUX +U8u3Zg5mTPj5dUyQ5xJwx0UCAwEAAaNjMGEwHQYDVR0OBBYEFC7j27JJ0JxUeVz6 +Jyr+zE7S6E5UMA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAULuPbsknQnFR5 +XPonKv7MTtLoTlQwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBCwUAA4ICAQAF +Nzr0TbdF4kV1JI+2d1LoHNgQk2Xz8lkGpD4eKexd0dCrfOAKkEh47U6YA5n+KGCR +HTAduGN8qOY1tfrTYXbm1gdLymmasoR6d5NFFxWfJNCYExL/u6Au/U5Mh/jOXKqY +GwXgAEZKgoClM4so3O0409/lPun++1ndYYRP0lSWE2ETPo+Aab6TR7U1Q9Jauz1c +77NCR807VRMGsAnb/WP2OogKmW9+4c4bU2pEZiNRCHu8W1Ki/QY3OEBhj0qWuJA3 ++GbHeJAAFS6LrVE1Uweoa2iu+U48BybNCAVwzDk/dr2l02cmAYamU9JgO3xDf1WK +vJUawSg5TB9D0pH0clmKuVb8P7Sd2nCcdlqMQ1DujjByTd//SffGqWfZbawCEeI6 +FiWnWAjLb1NBnEg4R2gz0dfHj9R0IdTDBZB6/86WiLEVKV0jq9BgoRJP3vQXzTLl +yb/IQ639Lo7xr+L0mPoSHyDYwKcMhcWQ9DstliaxLL5Mq+ux0orJ23gTDx4JnW2P +AJ8C2sH6H3p6CcRK5ogql5+Ji/03X186zjhZhkuvcQu02PJwT58yE+Owp1fl2tpD +y4Q08ijE6m30Ku/Ba3ba+367hTzSU8JNvnHhRdH9I2cNE3X7z2VnIp2usAnRCf8d +NL/+I5c30jn6PQ0GC7TbO6Orb1wdtn7os4I07QZcJA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF5zCCA8+gAwIBAgIITK9zQhyOdAIwDQYJKoZIhvcNAQEFBQAwgYAxODA2BgNV +BAMML0VCRyBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMTcwNQYDVQQKDC5FQkcgQmlsacWfaW0gVGVrbm9sb2ppbGVyaSB2ZSBIaXpt +ZXRsZXJpIEEuxZ4uMQswCQYDVQQGEwJUUjAeFw0wNjA4MTcwMDIxMDlaFw0xNjA4 +MTQwMDMxMDlaMIGAMTgwNgYDVQQDDC9FQkcgRWxla3Ryb25payBTZXJ0aWZpa2Eg +SGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTE3MDUGA1UECgwuRUJHIEJpbGnFn2ltIFRl +a25vbG9qaWxlcmkgdmUgSGl6bWV0bGVyaSBBLsWeLjELMAkGA1UEBhMCVFIwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDuoIRh0DpqZhAy2DE4f6en5f2h +4fuXd7hxlugTlkaDT7byX3JWbhNgpQGR4lvFzVcfd2NR/y8927k/qqk153nQ9dAk +tiHq6yOU/im/+4mRDGSaBUorzAzu8T2bgmmkTPiab+ci2hC6X5L8GCcKqKpE+i4s +tPtGmggDg3KriORqcsnlZR9uKg+ds+g75AxuetpX/dfreYteIAbTdgtsApWjluTL +dlHRKJ2hGvxEok3MenaoDT2/F08iiFD9rrbskFBKW5+VQarKD7JK/oCZTqNGFav4 +c0JqwmZ2sQomFd2TkuzbqV9UIlKRcF0T6kjsbgNs2d1s/OsNA/+mgxKb8amTD8Um +TDGyY5lhcucqZJnSuOl14nypqZoaqsNW2xCaPINStnuWt6yHd6i58mcLlEOzrz5z ++kI2sSXFCjEmN1ZnuqMLfdb3ic1nobc6HmZP9qBVFCVMLDMNpkGMvQQxahByCp0O +Lna9XvNRiYuoP1Vzv9s6xiQFlpJIqkuNKgPlV5EQ9GooFW5Hd4RcUXSfGenmHmMW +OeMRFeNYGkS9y8RsZteEBt8w9DeiQyJ50hBs37vmExH8nYQKE3vwO9D8owrXieqW +fo1IhR5kX9tUoqzVegJ5a9KK8GfaZXINFHDk6Y54jzJ0fFfy1tb0Nokb+Clsi7n2 +l9GkLqq+CxnCRelwXQIDAJ3Zo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB +/wQEAwIBBjAdBgNVHQ4EFgQU587GT/wWZ5b6SqMHwQSny2re2kcwHwYDVR0jBBgw +FoAU587GT/wWZ5b6SqMHwQSny2re2kcwDQYJKoZIhvcNAQEFBQADggIBAJuYml2+ +8ygjdsZs93/mQJ7ANtyVDR2tFcU22NU57/IeIl6zgrRdu0waypIN30ckHrMk2pGI +6YNw3ZPX6bqz3xZaPt7gyPvT/Wwp+BVGoGgmzJNSroIBk5DKd8pNSe/iWtkqvTDO +TLKBtjDOWU/aWR1qeqRFsIImgYZ29fUQALjuswnoT4cCB64kXPBfrAowzIpAoHME +wfuJJPaaHFy3PApnNgUIMbOv2AFoKuB4j3TeuFGkjGwgPaL7s9QJ/XvCgKqTbCmY +Iai7FvOpEl90tYeY8pUm3zTvilORiF0alKM/fCL414i6poyWqD1SNGKfAB5UVUJn +xk1Gj7sURT0KlhaOEKGXmdXTMIXM3rRyt7yKPBgpaP3ccQfuJDlq+u2lrDgv+R4Q +DgZxGhBM/nV+/x5XOULK1+EVoVZVWRvRo68R2E7DpSvvkL/A7IITW43WciyTTo9q +Kd+FPNMN4KIYEsxVL0e3p5sC/kH2iExt2qkBR4NkJ2IQgtYSe14DHzSpyZH+r11t +hie3I6p1GMog57AP14kOpmciY/SDQSsGS7tY1dHXt7kQY9iJSrSq3RZj9W6+YKH4 +7ejWkE8axsWgKdOnIaj1Wjz3x0miIZpKlVIglnKaZsv30oZDfCK+lvm9AahH3eU7 +QPl1K5srRmSGjR70j/sHd9DqSaIcjVIUpgqT +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE5zCCA8+gAwIBAgIBADANBgkqhkiG9w0BAQUFADCBjTELMAkGA1UEBhMCQ0Ex +EDAOBgNVBAgTB09udGFyaW8xEDAOBgNVBAcTB1Rvcm9udG8xHTAbBgNVBAoTFEVj +aG93b3J4IENvcnBvcmF0aW9uMR8wHQYDVQQLExZDZXJ0aWZpY2F0aW9uIFNlcnZp +Y2VzMRowGAYDVQQDExFFY2hvd29yeCBSb290IENBMjAeFw0wNTEwMDYxMDQ5MTNa +Fw0zMDEwMDcxMDQ5MTNaMIGNMQswCQYDVQQGEwJDQTEQMA4GA1UECBMHT250YXJp +bzEQMA4GA1UEBxMHVG9yb250bzEdMBsGA1UEChMURWNob3dvcnggQ29ycG9yYXRp +b24xHzAdBgNVBAsTFkNlcnRpZmljYXRpb24gU2VydmljZXMxGjAYBgNVBAMTEUVj +aG93b3J4IFJvb3QgQ0EyMIIBIDANBgkqhkiG9w0BAQEFAAOCAQ0AMIIBCAKCAQEA +utU/5BkV15UBf+s+JQruKQxr77s3rjp/RpOtmhHILIiO5gsEWP8MMrfrVEiidjI6 +Qh6ans0KAWc2Dw0/j4qKAQzOSyAZgjcdypNTBZ7muv212DA2Pu41rXqwMrlBrVi/ +KTghfdLlNRu6JrC5y8HarrnRFSKF1Thbzz921kLDRoCi+FVs5eVuK5LvIfkhNAqA +byrTgO3T9zfZgk8upmEkANPDL1+8y7dGPB/d6lk0I5mv8PESKX02TlvwgRSIiTHR +k8++iOPLBWlGp7ZfqTEXkPUZhgrQQvxcrwCUo6mk8TqgxCDP5FgPoHFiPLef5szP +ZLBJDWp7GLyE1PmkQI6WiwIBA6OCAVAwggFMMA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBQ74YEboKs/OyGC1eISrq5QqxSlEzCBugYDVR0j +BIGyMIGvgBQ74YEboKs/OyGC1eISrq5QqxSlE6GBk6SBkDCBjTELMAkGA1UEBhMC +Q0ExEDAOBgNVBAgTB09udGFyaW8xEDAOBgNVBAcTB1Rvcm9udG8xHTAbBgNVBAoT +FEVjaG93b3J4IENvcnBvcmF0aW9uMR8wHQYDVQQLExZDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzMRowGAYDVQQDExFFY2hvd29yeCBSb290IENBMoIBADBQBgNVHSAESTBH +MEUGCysGAQQB+REKAQMBMDYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuZWNob3dv +cnguY29tL2NhL3Jvb3QyL2Nwcy5wZGYwDQYJKoZIhvcNAQEFBQADggEBAG+nrPi/ +0RpfEzrj02C6JGPUar4nbjIhcY6N7DWNeqBoUulBSIH/PYGNHYx7/lnJefiixPGE +7TQ5xPgElxb9bK8zoAApO7U33OubqZ7M7DlHnFeCoOoIAZnG1kuwKwD5CXKB2a74 +HzcqNnFW0IsBFCYqrVh/rQgJOzDA8POGbH0DeD0xjwBBooAolkKT+7ZItJF1Pb56 +QpDL9G+16F7GkmnKlAIYT3QTS3yFGYChnJcd+6txUPhKi9sSOOmAIaKHnkH9Scz+ +A2cSi4A3wUYXVatuVNHpRb2lygfH3SuCX9MU8Ure3zBlSU1LALtMqI4JmcQmQpIq +zIzvO2jHyu9PQqo= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0 +Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW +KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl +cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw +NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw +NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy +ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV +BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ +KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo +Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4 +4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9 +KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI +rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi +94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB +sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi +gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo +kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE +vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA +A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t +O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua +AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP +9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/ +eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m +0vdXcDazv/wor3ElhVsT/h5/WrQ8 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIC+TCCAoCgAwIBAgINAKaLeSkAAAAAUNCR+TAKBggqhkjOPQQDAzCBvzELMAkG +A1UEBhMCVVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3 +d3cuZW50cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDEyIEVu +dHJ1c3QsIEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEzMDEGA1UEAxMq +RW50cnVzdCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRUMxMB4XDTEy +MTIxODE1MjUzNloXDTM3MTIxODE1NTUzNlowgb8xCzAJBgNVBAYTAlVTMRYwFAYD +VQQKEw1FbnRydXN0LCBJbmMuMSgwJgYDVQQLEx9TZWUgd3d3LmVudHJ1c3QubmV0 +L2xlZ2FsLXRlcm1zMTkwNwYDVQQLEzAoYykgMjAxMiBFbnRydXN0LCBJbmMuIC0g +Zm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxMzAxBgNVBAMTKkVudHJ1c3QgUm9vdCBD +ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEVDMTB2MBAGByqGSM49AgEGBSuBBAAi +A2IABIQTydC6bUF74mzQ61VfZgIaJPRbiWlH47jCffHyAsWfoPZb1YsGGYZPUxBt +ByQnoaD41UcZYUx9ypMn6nQM72+WCf5j7HBdNq1nd67JnXxVRDqiY1Ef9eNi1KlH +Bz7MIKNCMEAwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFLdj5xrdjekIplWDpOBqUEFlEUJJMAoGCCqGSM49BAMDA2cAMGQCMGF52OVC +R98crlOZF7ZvHH3hvxGU0QOIdeSNiaSKd0bebWHvAvX7td/M/k7//qnmpwIwW5nX +hTcGtXsI/esni0qU+eH6p44mCOh8kmhtc9hvJqwhAriZtyZBWyVgrtBIGu4G +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEPjCCAyagAwIBAgIESlOMKDANBgkqhkiG9w0BAQsFADCBvjELMAkGA1UEBhMC +VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50 +cnVzdC5uZXQvbGVnYWwtdGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3Qs +IEluYy4gLSBmb3IgYXV0aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVz +dCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzIwHhcNMDkwNzA3MTcy +NTU0WhcNMzAxMjA3MTc1NTU0WjCBvjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUVu +dHJ1c3QsIEluYy4xKDAmBgNVBAsTH1NlZSB3d3cuZW50cnVzdC5uZXQvbGVnYWwt +dGVybXMxOTA3BgNVBAsTMChjKSAyMDA5IEVudHJ1c3QsIEluYy4gLSBmb3IgYXV0 +aG9yaXplZCB1c2Ugb25seTEyMDAGA1UEAxMpRW50cnVzdCBSb290IENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5IC0gRzIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQC6hLZy254Ma+KZ6TABp3bqMriVQRrJ2mFOWHLP/vaCeb9zYQYKpSfYs1/T +RU4cctZOMvJyig/3gxnQaoCAAEUesMfnmr8SVycco2gvCoe9amsOXmXzHHfV1IWN +cCG0szLni6LVhjkCsbjSR87kyUnEO6fe+1R9V77w6G7CebI6C1XiUJgWMhNcL3hW +wcKUs/Ja5CeanyTXxuzQmyWC48zCxEXFjJd6BmsqEZ+pCm5IO2/b1BEZQvePB7/1 +U1+cPvQXLOZprE4yTGJ36rfo5bs0vBmLrpxR57d+tVOxMyLlbc9wPBr64ptntoP0 +jaWvYkxN4FisZDQSA/i2jZRjJKRxAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAP +BgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqciZ60B7vfec7aVHUbI2fkBJmqzAN +BgkqhkiG9w0BAQsFAAOCAQEAeZ8dlsa2eT8ijYfThwMEYGprmi5ZiXMRrEPR9RP/ +jTkrwPK9T3CMqS/qF8QLVJ7UG5aYMzyorWKiAHarWWluBh1+xLlEjZivEtRh2woZ +Rkfz6/djwUAFQKXSt/S1mja/qYh2iARVBCuch38aNzx+LaUa2NSJXsq9rD1s2G2v +1fN2D807iDginWyTmsQ9v4IbZT+mD12q/OWyFcq1rca8PdCE6OoGcrBNOTJ4vz4R +nAuknZoh8/CbCzB428Hch0P+vGOaysXCHMnHjf87ElgI5rY97HosTvuDls4MPGmH +VHOkc8KT/1EQrBVUAdj8BbGJoX90g5pJ19xOe4pIb4tF9g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE5jCCA86gAwIBAgIEO45L/DANBgkqhkiG9w0BAQUFADBdMRgwFgYJKoZIhvcN +AQkBFglwa2lAc2suZWUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKExlBUyBTZXJ0aWZp +dHNlZXJpbWlza2Vza3VzMRAwDgYDVQQDEwdKdXVyLVNLMB4XDTAxMDgzMDE0MjMw +MVoXDTE2MDgyNjE0MjMwMVowXTEYMBYGCSqGSIb3DQEJARYJcGtpQHNrLmVlMQsw +CQYDVQQGEwJFRTEiMCAGA1UEChMZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1czEQ +MA4GA1UEAxMHSnV1ci1TSzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AIFxNj4zB9bjMI0TfncyRsvPGbJgMUaXhvSYRqTCZUXP00B841oiqBB4M8yIsdOB +SvZiF3tfTQou0M+LI+5PAk676w7KvRhj6IAcjeEcjT3g/1tf6mTll+g/mX8MCgkz +ABpTpyHhOEvWgxutr2TC+Rx6jGZITWYfGAriPrsfB2WThbkasLnE+w0R9vXW+RvH +LCu3GFH+4Hv2qEivbDtPL+/40UceJlfwUR0zlv/vWT3aTdEVNMfqPxZIe5EcgEMP +PbgFPtGzlc3Yyg/CQ2fbt5PgIoIuvvVoKIO5wTtpeyDaTpxt4brNj3pssAki14sL +2xzVWiZbDcDq5WDQn/413z8CAwEAAaOCAawwggGoMA8GA1UdEwEB/wQFMAMBAf8w +ggEWBgNVHSAEggENMIIBCTCCAQUGCisGAQQBzh8BAQEwgfYwgdAGCCsGAQUFBwIC +MIHDHoHAAFMAZQBlACAAcwBlAHIAdABpAGYAaQBrAGEAYQB0ACAAbwBuACAAdgDk +AGwAagBhAHMAdABhAHQAdQBkACAAQQBTAC0AaQBzACAAUwBlAHIAdABpAGYAaQB0 +AHMAZQBlAHIAaQBtAGkAcwBrAGUAcwBrAHUAcwAgAGEAbABhAG0ALQBTAEsAIABz +AGUAcgB0AGkAZgBpAGsAYQBhAHQAaQBkAGUAIABrAGkAbgBuAGkAdABhAG0AaQBz +AGUAawBzMCEGCCsGAQUFBwIBFhVodHRwOi8vd3d3LnNrLmVlL2Nwcy8wKwYDVR0f +BCQwIjAgoB6gHIYaaHR0cDovL3d3dy5zay5lZS9qdXVyL2NybC8wHQYDVR0OBBYE +FASqekej5ImvGs8KQKcYP2/v6X2+MB8GA1UdIwQYMBaAFASqekej5ImvGs8KQKcY +P2/v6X2+MA4GA1UdDwEB/wQEAwIB5jANBgkqhkiG9w0BAQUFAAOCAQEAe8EYlFOi +CfP+JmeaUOTDBS8rNXiRTHyoERF5TElZrMj3hWVcRrs7EKACr81Ptcw2Kuxd/u+g +kcm2k298gFTsxwhwDY77guwqYHhpNjbRxZyLabVAyJRld/JXIWY7zoVAtjNjGr95 +HvxcHdMdkxuLDF2FvZkwMhgJkVLpfKG6/2SSmuz+Ne6ML678IIbsSt4beDI3poHS +na9aEhbKmVv8b20OxaAehsmR0FyYgl9jDIpaq9iVpszLita/ZEuOyoqysOkhMp6q +qIWYNIE5ITuoOlIyPfZrN4YGWhWY3PARZv40ILcD9EEQfTmEeZZyY7aWAuVrua0Z +TbvGRNs2yyqcjg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDoTCCAomgAwIBAgIQKTZHquOKrIZKI1byyrdhrzANBgkqhkiG9w0BAQUFADBO +MQswCQYDVQQGEwJ1czEYMBYGA1UEChMPVS5TLiBHb3Zlcm5tZW50MQ0wCwYDVQQL +EwRGQkNBMRYwFAYDVQQDEw1Db21tb24gUG9saWN5MB4XDTA3MTAxNTE1NTgwMFoX +DTI3MTAxNTE2MDgwMFowTjELMAkGA1UEBhMCdXMxGDAWBgNVBAoTD1UuUy4gR292 +ZXJubWVudDENMAsGA1UECxMERkJDQTEWMBQGA1UEAxMNQ29tbW9uIFBvbGljeTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJeNvTMn5K1b+3i9L0dHbsd4 +6ZOcpN7JHP0vGzk4rEcXwH53KQA7Ax9oD81Npe53uCxiazH2+nIJfTApBnznfKM9 +hBiKHa4skqgf6F5PjY7rPxr4nApnnbBnTfAu0DDew5SwoM8uCjR/VAnTNr2kSVdS +c+md/uRIeUYbW40y5KVIZPMiDZKdCBW/YDyD90ciJSKtKXG3d+8XyaK2lF7IMJCk +FEhcVlcLQUwF1CpMP64Sm1kRdXAHImktLNMxzJJ+zM2kfpRHqpwJCPZLr1LoakCR +xVW9QLHIbVeGlRfmH3O+Ry4+i0wXubklHKVSFzYIWcBCvgortFZRPBtVyYyQd+sC +AwEAAaN7MHkwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFC9Yl9ipBZilVh/72at17wI8NjTHMBIGCSsGAQQBgjcVAQQFAgMBAAEwIwYJ +KwYBBAGCNxUCBBYEFHa3YJbdFFYprHWF03BjwbxHhhyLMA0GCSqGSIb3DQEBBQUA +A4IBAQBgrvNIFkBypgiIybxHLCRLXaCRc+1leJDwZ5B6pb8KrbYq+Zln34PFdx80 +CTj5fp5B4Ehg/uKqXYeI6oj9XEWyyWrafaStsU+/HA2fHprA1RRzOCuKeEBuMPdi +4c2Z/FFpZ2wR3bgQo2jeJqVW/TZsN5hs++58PGxrcD/3SDcJjwtCga1GRrgLgwb0 +Gzigf0/NC++DiYeXHIowZ9z9VKEDfgHLhUyxCynDvux84T8PCVI8L6eaSP436REG +WOE2QYrEtr+O3c5Ks7wawM36GpnScZv6z7zyxFSjiDV2zBssRm8MtNHDYXaSdBHq +S4CNHIkRi+xb/xfJSPzn4AYR4oRe +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEYDCCA0igAwIBAgICATAwDQYJKoZIhvcNAQELBQAwWTELMAkGA1UEBhMCVVMx +GDAWBgNVBAoTD1UuUy4gR292ZXJubWVudDENMAsGA1UECxMERlBLSTEhMB8GA1UE +AxMYRmVkZXJhbCBDb21tb24gUG9saWN5IENBMB4XDTEwMTIwMTE2NDUyN1oXDTMw +MTIwMTE2NDUyN1owWTELMAkGA1UEBhMCVVMxGDAWBgNVBAoTD1UuUy4gR292ZXJu +bWVudDENMAsGA1UECxMERlBLSTEhMB8GA1UEAxMYRmVkZXJhbCBDb21tb24gUG9s +aWN5IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2HX7NRY0WkG/ +Wq9cMAQUHK14RLXqJup1YcfNNnn4fNi9KVFmWSHjeavUeL6wLbCh1bI1FiPQzB6+ +Duir3MPJ1hLXp3JoGDG4FyKyPn66CG3G/dFYLGmgA/Aqo/Y/ISU937cyxY4nsyOl +4FKzXZbpsLjFxZ+7xaBugkC7xScFNknWJidpDDSPzyd6KgqjQV+NHQOGgxXgVcHF +mCye7Bpy3EjBPvmE0oSCwRvDdDa3ucc2Mnr4MrbQNq4iGDGMUHMhnv6DOzCIJOPp +wX7e7ZjHH5IQip9bYi+dpLzVhW86/clTpyBLqtsgqyFOHQ1O5piF5asRR12dP8Qj +wOMUBm7+nQIDAQABo4IBMDCCASwwDwYDVR0TAQH/BAUwAwEB/zCB6QYIKwYBBQUH +AQsEgdwwgdkwPwYIKwYBBQUHMAWGM2h0dHA6Ly9odHRwLmZwa2kuZ292L2ZjcGNh +L2NhQ2VydHNJc3N1ZWRCeWZjcGNhLnA3YzCBlQYIKwYBBQUHMAWGgYhsZGFwOi8v +bGRhcC5mcGtpLmdvdi9jbj1GZWRlcmFsJTIwQ29tbW9uJTIwUG9saWN5JTIwQ0Es +b3U9RlBLSSxvPVUuUy4lMjBHb3Zlcm5tZW50LGM9VVM/Y0FDZXJ0aWZpY2F0ZTti +aW5hcnksY3Jvc3NDZXJ0aWZpY2F0ZVBhaXI7YmluYXJ5MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUrQx6dVzl85jEeZgOrCj9l/TnAvwwDQYJKoZIhvcNAQELBQAD +ggEBAI9z2uF/gLGH9uwsz9GEYx728Yi3mvIRte9UrYpuGDco71wb5O9Qt2wmGCMi +TR0mRyDpCZzicGJxqxHPkYnos/UqoEfAFMtOQsHdDA4b8Idb7OV316rgVNdF9IU+ +7LQd3nyKf1tNnJaK0KIyn9psMQz4pO9+c+iR3Ah6cFqgr2KBWfgAdKLI3VTKQVZH +venAT+0g3eOlCd+uKML80cgX2BLHb94u6b2akfI8WpQukSKAiaGMWMyDeiYZdQKl +Dn0KJnNR6obLB6jI/WNaNZvSr79PMUjBhHDbNXuaGQ/lj/RqDG8z2esccKIN47lQ +A2EC/0rskqTcLe4qNJMHtyznGI8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGFDCCA/ygAwIBAgIIU+w77vuySF8wDQYJKoZIhvcNAQEFBQAwUTELMAkGA1UE +BhMCRVMxQjBABgNVBAMMOUF1dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1h +cHJvZmVzaW9uYWwgQ0lGIEE2MjYzNDA2ODAeFw0wOTA1MjAwODM4MTVaFw0zMDEy +MzEwODM4MTVaMFExCzAJBgNVBAYTAkVTMUIwQAYDVQQDDDlBdXRvcmlkYWQgZGUg +Q2VydGlmaWNhY2lvbiBGaXJtYXByb2Zlc2lvbmFsIENJRiBBNjI2MzQwNjgwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDKlmuO6vj78aI14H9M2uDDUtd9 +thDIAl6zQyrET2qyyhxdKJp4ERppWVevtSBC5IsP5t9bpgOSL/UR5GLXMnE42QQM +cas9UX4PB99jBVzpv5RvwSmCwLTaUbDBPLutN0pcyvFLNg4kq7/DhHf9qFD0sefG +L9ItWY16Ck6WaVICqjaY7Pz6FIMMNx/Jkjd/14Et5cS54D40/mf0PmbR0/RAz15i +NA9wBj4gGFrO93IbJWyTdBSTo3OxDqqHECNZXyAFGUftaI6SEspd/NYrspI8IM/h +X68gvqB2f3bl7BqGYTM+53u0P6APjqK5am+5hyZvQWyIplD9amML9ZMWGxmPsu2b +m8mQ9QEM3xk9Dz44I8kvjwzRAv4bVdZO0I08r0+k8/6vKtMFnXkIoctXMbScyJCy +Z/QYFpM6/EfY0XiWMR+6KwxfXZmtY4laJCB22N/9q06mIqqdXuYnin1oKaPnirja +EbsXLZmdEyRG98Xi2J+Of8ePdG1asuhy9azuJBCtLxTa/y2aRnFHvkLfuwHb9H/T +KI8xWVvTyQKmtFLKbpf7Q8UIJm+K9Lv9nyiqDdVF8xM6HdjAeI9BZzwelGSuewvF +6NkBiDkal4ZkQdU7hwxu+g/GvUgUvzlN1J5Bto+WHWOWk9mVBngxaJ43BjuAiUVh +OSPHG0SjFeUc+JIwuwIDAQABo4HvMIHsMBIGA1UdEwEB/wQIMAYBAf8CAQEwDgYD +VR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRlzeurNR4APn7VdMActHNHDhpkLzCBpgYD +VR0gBIGeMIGbMIGYBgRVHSAAMIGPMC8GCCsGAQUFBwIBFiNodHRwOi8vd3d3LmZp +cm1hcHJvZmVzaW9uYWwuY29tL2NwczBcBggrBgEFBQcCAjBQHk4AUABhAHMAZQBv +ACAAZABlACAAbABhACAAQgBvAG4AYQBuAG8AdgBhACAANAA3ACAAQgBhAHIAYwBl +AGwAbwBuAGEAIAAwADgAMAAxADcwDQYJKoZIhvcNAQEFBQADggIBABd9oPm03cXF +661LJLWhAqvdpYhKsg9VSytXjDvlMd3+xDLx51tkljYyGOylMnfX40S2wBEqgLk9 +am58m9Ot/MPWo+ZkKXzR4Tgegiv/J2Wv+xYVxC5xhOW1//qkR71kMrv2JYSiJ0L1 +ILDCExARzRAVukKQKtJE4ZYm6zFIEv0q2skGz3QeqUvVhyj5eTSSPi5E6PaPT481 +PyWzOdxjKpBrIF/EUhJOlywqrJ2X3kjyo2bbwtKDlaZmp54lD+kLM5FlClrD2VQS +3a/DTg4fJl4N3LON7NWBcN7STyQF82xO9UxJZo3R/9ILJUFI/lGExkKvgATP0H5k +SeTy36LssUzAKh3ntLFlosS88Zj0qnAHY7S42jtM+kAiMFsRpvAFDsYCA0irhpuF +3dvd6qJ2gHN99ZwExEWN57kci57q13XRcrHedUTnQn3iV2t93Jm8PYMo6oCTjcVM +ZcFwgbg4/EMxsvYDNEeyrPsiBsse3RdHHF9mudMaotoRsaS8I8nkvof/uZS2+F0g +StRf571oe2XyFR7SOqkt6dhrJKyXWERHrVkY8SFlcN7ONGCoQPHzPKTDKCOM/icz +Q0CgFzzr6juwcqajuUpLXhZI9LK8yIySxZ2frHI2vDSANGupi5LAuBft7HZT9SQB +jLMi6Et8Vcad+qMUu2WFbm5PEn4KPJ2V +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh +MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE +YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3 +MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo +ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg +MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN +ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA +PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w +wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi +EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY +avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+ +YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE +sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h +/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5 +IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj +YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD +ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy +OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P +TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ +HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER +dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf +ReYNnyicsbkqWletNw+vHX/bvZ8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICrjCCAjWgAwIBAgIQPLL0SAoA4v7rJDteYD7DazAKBggqhkjOPQQDAzCBmDEL +MAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsTMChj +KSAyMDA3IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTE2 +MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0 +eSAtIEcyMB4XDTA3MTEwNTAwMDAwMFoXDTM4MDExODIzNTk1OVowgZgxCzAJBgNV +BAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykgMjAw +NyBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0BgNV +BAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH +MjB2MBAGByqGSM49AgEGBSuBBAAiA2IABBWx6P0DFUPlrOuHNxFi79KDNlJ9RVcL +So17VDs6bl8VAsBQps8lL33KSLjHUGMcKiEIfJo22Av+0SbFWDEwKCXzXV2juLal +tJLtbCyf691DiaI8S0iRHVDsJt/WYC69IaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBVfNVdRVfslsq0DafwBo/q+EVXVMAoG +CCqGSM49BAMDA2cAMGQCMGSWWaboCd6LuvpaiIjwH5HTRqjySkwCY/tsXzjbLkGT +qQ7mndwxHLKgpxgceeHHNgIwOlavmnRs9vuD4DPTCF+hnMJbn0bWtsuRBmOiBucz +rD6ogRLQy7rQkgu2npaqBA+K +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID/jCCAuagAwIBAgIQFaxulBmyeUtB9iepwxgPHzANBgkqhkiG9w0BAQsFADCB +mDELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xOTA3BgNVBAsT +MChjKSAyMDA4IEdlb1RydXN0IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s +eTE2MDQGA1UEAxMtR2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhv +cml0eSAtIEczMB4XDTA4MDQwMjAwMDAwMFoXDTM3MTIwMTIzNTk1OVowgZgxCzAJ +BgNVBAYTAlVTMRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMTkwNwYDVQQLEzAoYykg +MjAwOCBHZW9UcnVzdCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxNjA0 +BgNVBAMTLUdlb1RydXN0IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg +LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANziXmJYHTNXOTIz ++uvLh4yn1ErdBojqZI4xmKU4kB6Yzy5jK/BGvESyiaHAKAxJcCGVn2TAppMSAmUm +hsalifD614SgcK9PGpc/BkTVyetyEH3kMSj7HGHmKAdEc5IiaacDiGydY8hS2pgn +5whMcD60yRLBxWeDXTPzAxHsatBT4tG6NmCUgLthY2xbF37fQJQeqw3CIShwiP/W +JmxsYAQlTlV+fe+/lEjetx3dcI0FX4ilm/LC7urRQEFtYjgdVgbFA0dRIBn8exAL +DmKudlW/X3e+PkkBUz2YJQN2JFodtNuJ6nnltrM7P7pMKEF/BqxqjsHQ9gUdfeZC +huOl1UcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYw +HQYDVR0OBBYEFMR5yo6hTgMdHNxr2zFblD4/MH8tMA0GCSqGSIb3DQEBCwUAA4IB +AQAtxRPPVoB7eni9n64smefv2t+UXglpp+duaIy9cr5HqQ6XErhK8WTTOd8lNNTB +zU6B8A8ExCSzNJbGpqow32hhc9f5joWJ7w5elShKKiePEI4ufIbEAp7aDHdlDkQN +kv39sxY2+hENHYwOB4lqKVb3cvTdFZx3NWZXqxNT2I7BQMXXExZacse3aQHEerGD +AWh9jUGhlBjBJVz88P6DAod8DQ3PLghcSkANPuyBYeYk28rgDi0Hsj5W3I31QYUH +SJsMC8tJP33st/3LjWeJGqvtux6jAAgIFyqCXDFdRootD4abdNlF+9RAsXqqaC2G +spki4cErx5z481+oghLrGREt +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT +MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i +YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG +EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg +R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9 +9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq +fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv +iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU +1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+ +bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW +MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA +ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l +uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn +Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS +tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF +PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un +hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV +5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDXzCCAkegAwIBAgILBAAAAAABIVhTCKIwDQYJKoZIhvcNAQELBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjMxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDkwMzE4MTAwMDAwWhcNMjkwMzE4 +MTAwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMzETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAMwldpB5BngiFvXAg7aEyiie/QV2EcWtiHL8 +RgJDx7KKnQRfJMsuS+FggkbhUqsMgUdwbN1k0ev1LKMPgj0MK66X17YUhhB5uzsT +gHeMCOFJ0mpiLx9e+pZo34knlTifBtc+ycsmWQ1z3rDI6SYOgxXG71uL0gRgykmm +KPZpO/bLyCiR5Z2KYVc3rHQU3HTgOu5yLy6c+9C7v/U9AOEGM+iCK65TpjoWc4zd +QQ4gOsC0p6Hpsk+QLjJg6VfLuQSSaGjlOCZgdbKfd/+RFO+uIEn8rUAVSNECMWEZ +XriX7613t2Saer9fwRPvm2L7DWzgVGkWqQPabumDk3F2xmmFghcCAwEAAaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFI/wS3+o +LkUkrk1Q+mOai97i3Ru8MA0GCSqGSIb3DQEBCwUAA4IBAQBLQNvAUKr+yAzv95ZU +RUm7lgAJQayzE4aGKAczymvmdLm6AC2upArT9fHxD4q/c2dKg8dEe3jgr25sbwMp +jjM5RcOO5LlXbKr8EpbsU8Yt5CRsuZRj+9xTaGdWPoO4zzUhw8lo/s7awlOqzJCK +6fBdRoyV3XpYKBovHd7NADdBj+1EbddTKJd+82cEHhXXipa0095MJ6RMG3NzdvQX +mcIfeg7jLQitChws/zyrVQ4PkX4268NXSb7hLi18YIvDQVETI53O9zJrlAGomecs +Mx86OyXShkDOOyyGeMlhLxS67ttVb9+E7gUJTb0o2HLO02JQZR7rkpeDMdmztcpH +WD9f +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG +A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv +b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw +MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i +YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT +aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ +jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp +xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp +1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG +snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ +U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8 +9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B +AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz +yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE +38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP +AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad +DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME +HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIB4TCCAYegAwIBAgIRKjikHJYKBN5CsiilC+g0mAIwCgYIKoZIzj0EAwIwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI0MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI0MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEuMZ5049sJQ6fLjkZHAOkrprlOQcJ +FspjsbmG+IpXwVfOQvpzofdlQv8ewQCybnMO/8ch5RikqtlxP6jUuc6MHaNCMEAw +DgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFFSwe61F +uOJAf/sKbvu+M8k8o4TVMAoGCCqGSM49BAMCA0gAMEUCIQDckqGgE6bPA7DmxCGX +kPoUVy0D7O48027KqGx2vKLeuwIgJ6iFJzWbVsaj8kfSt24bAgAXqmemFZHe+pTs +ewv4n4Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICHjCCAaSgAwIBAgIRYFlJ4CYuu1X5CneKcflK2GwwCgYIKoZIzj0EAwMwUDEk +MCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBDQSAtIFI1MRMwEQYDVQQKEwpH +bG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWduMB4XDTEyMTExMzAwMDAwMFoX +DTM4MDExOTAzMTQwN1owUDEkMCIGA1UECxMbR2xvYmFsU2lnbiBFQ0MgUm9vdCBD +QSAtIFI1MRMwEQYDVQQKEwpHbG9iYWxTaWduMRMwEQYDVQQDEwpHbG9iYWxTaWdu +MHYwEAYHKoZIzj0CAQYFK4EEACIDYgAER0UOlvt9Xb/pOdEh+J8LttV7HpI6SFkc +8GIxLcB6KP4ap1yztsyX50XUWPrRd21DosCHZTQKH3rd6zwzocWdTaRvQZU4f8ke +hOvRnkmSh5SHDDqFSmafnVmTTZdhBoZKo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYD +VR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUPeYpSJvqB8ohREom3m7e0oPQn1kwCgYI +KoZIzj0EAwMDaAAwZQIxAOVpEslu28YxuglB4Zf4+/2a4n0Sye18ZNPLBSWLVtmg +515dTguDnFt2KaAJJiFqYgIwcdK1j1zqO+F4CYWodZI7yFz9SO8NdCKoCOJuxUnO +xwy8p2Fp8fc74SrL+SvzZpA3 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G +A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp +Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1 +MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG +A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL +v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8 +eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq +tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd +C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa +zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB +mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH +V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n +bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG +3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs +J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO +291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS +ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd +AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7 +TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDxTCCAq2gAwIBAgIBADANBgkqhkiG9w0BAQsFADCBgzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAYBgNVBAoT +EUdvRGFkZHkuY29tLCBJbmMuMTEwLwYDVQQDEyhHbyBEYWRkeSBSb290IENlcnRp +ZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAwMFoXDTM3MTIzMTIz +NTk1OVowgYMxCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6b25hMRMwEQYDVQQH +EwpTY290dHNkYWxlMRowGAYDVQQKExFHb0RhZGR5LmNvbSwgSW5jLjExMC8GA1UE +AxMoR28gRGFkZHkgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIw +DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAL9xYgjx+lk09xvJGKP3gElY6SKD +E6bFIEMBO4Tx5oVJnyfq9oQbTqC023CYxzIBsQU+B07u9PpPL1kwIuerGVZr4oAH +/PMWdYA5UXvl+TW2dE6pjYIT5LY/qQOD+qK+ihVqf94Lw7YZFAXK6sOoBJQ7Rnwy +DfMAZiLIjWltNowRGLfTshxgtDj6AozO091GB94KPutdfMh8+7ArU6SSYmlRJQVh +GkSBjCypQ5Yj36w6gZoOKcUcqeldHraenjAKOc7xiID7S13MMuyFYkMlNAJWJwGR +tDtwKj9useiciAF9n9T521NtYJ2/LOdYq7hfRvzOxBsDPAnrSTFcaUaz4EcCAwEA +AaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYE +FDqahQcQZyi27/a9BUFuIMGU2g/eMA0GCSqGSIb3DQEBCwUAA4IBAQCZ21151fmX +WWcDYfF+OwYxdS2hII5PZYe096acvNjpL9DbWu7PdIxztDhC2gV7+AJ1uP2lsdeu +9tfeE8tTEH6KRtGX+rcuKxGrkLAngPnon1rpN5+r5N9ss4UXnT3ZJE95kTXWXwTr +gIOrmgIttRD02JDHBHNA7XIloKmf7J6raBKZV8aPEjoJpL1E/QYVN8Gb5DKj7Tjo +2GTzLH4U/ALqn83/B2gX2yKQOC16jdFU8WnjXzPKej17CuPKf1855eJ1usV2GDPO +LPAvTK33sefOT6jEm0pUBsV/fdUID+Ic/n4XuKxe9tQWskMJDE32p2u0mYRlynqI +4uJEvlz36hz1 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFejCCA2KgAwIBAgIJAN7E8kTzHab8MA0GCSqGSIb3DQEBCwUAMEoxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxJDAiBgNVBAMTG1N3aXNzU2ln +biBHb2xkIFJvb3QgQ0EgLSBHMzAeFw0wOTA4MDQxMzMxNDdaFw0zNzA4MDQxMzMx +NDdaMEoxCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxJDAiBgNV +BAMTG1N3aXNzU2lnbiBHb2xkIFJvb3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEB +BQADggIPADCCAgoCggIBAMPon8hlWp1nG8FFl7S0h0NbYWCAnvJ/XvlnRN1E+qu1 +q3f/KhlMzm/Ej0Gf4OLNcuDR1FJhQQkKvwpw++CDaWEpytsimlul5t0XlbBvhI46 +PmRaQfsbWPz9Kz6ypOasyYK8zvaV+Jd37Sb2WK6eJ+IPg+zFNljIe8/Vh6GphxoT +Z2EBbaZpnOKQ8StoZfPosHz8gj3erdgKAAlEeROc8P5udXvCvLNZAQt8xdUt8L// +bVfSSYHrtLNQrFv5CxUVjGn/ozkB7fzc3CeXjnuL1Wqm1uAdX80Bkeb1Ipi6LgkY +OG8TqIHS+yE35y20YueBkLDGeVm3Z3X+vo87+jbsr63ST3Q2AeVXqyMEzEpel89+ +xu+MzJUjaY3LOMcZ9taKABQeND1v2gwLw7qX/BFLUmE+vzNnUxC/eBsJwke6Hq9Y +9XWBf71W8etW19lpDAfpNzGwEhwy71bZvnorfL3TPbxqM006PFAQhyfHegpnU9t/ +gJvoniP6+Qg6i6GONFpIM19k05eGBxl9iJTOKnzFat+vvKmfzTqmurtU+X+P388O +WsStmryzOndzg0yTPJBotXxQlRHIgl6UcdBBGPvJxmXszom2ziKzEVs/4J0+Gxho +DaoDoWdZv2udvPjyZS+aQTpF2F7QNmxvOx5jtI6YTBPbIQ6fe+3qoKpxw+ujoNIl +AgMBAAGjYzBhMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBRclwZGNKvfMMV8xQ1VcWYwtWCPnjAfBgNVHSMEGDAWgBRclwZGNKvfMMV8 +xQ1VcWYwtWCPnjANBgkqhkiG9w0BAQsFAAOCAgEAd0tN3uqFSqssJ9ZFx/FfIMFb +YO0Hy6Iz3DbPx5TxBsfV2s/NrYQ+/xJIf0HopWZXMMQd5KcaLy1Cwe9Gc7LV9Vr9 +Dnpr0sgxow1IlldlY1UYwPzkisyYhlurDIonN/ojaFlcJtehwcK5Tiz/KV7mlAu+ +zXJPleiP9ve4Pl7Oz54RyawDKUiKqbamNLmsQP/EtnM3scd/qVHbSypHX0AkB4gG +tySz+3/3sIsz+r8jdaNc/qplGsK+8X2BdwOBsY3XlQ16PEKYt4+pfVDh31IGmqBS +VHiDB2FSCTdeipynxlHRXGPRhNzC29L6Wxg2fWa81CiXL3WWHIQHrIuOUxG+JCGq +Z/LBrYic07B4Z3j101gDIApdIPG152XMDiDj1d/mLxkrhWjBBCbPj+0FU6HdBw7r +QSbHtKksW+NpPWbAYhvAqobAN8MxBIZwOb5rXyFAQaB/5dkPOEtwX0n4hbgrLqof +k0FD+PuydDwfS1dbt9RRoZJKzr4Qou7YFCJ7uUG9jemIqdGPAxpg/z+HiaCZJyJm +sD5onnKIUTidEz5FbQXlRrVz7UOGsRQKHrzaDb8eJFxmjw6+of3G62m8Q3nXA3b5 +3IeZuJjEzX9tEPkQvixC/pwpTYNrCr21jsRIiv0hB6aAfR+b6au9gmFECnEnX22b +kJ6u/zYks2gD1pWMa3M= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDMDCCAhigAwIBAgICA+gwDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UEBhMCSEsx +FjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdrb25nIFBvc3Qg +Um9vdCBDQSAxMB4XDTAzMDUxNTA1MTMxNFoXDTIzMDUxNTA0NTIyOVowRzELMAkG +A1UEBhMCSEsxFjAUBgNVBAoTDUhvbmdrb25nIFBvc3QxIDAeBgNVBAMTF0hvbmdr +b25nIFBvc3QgUm9vdCBDQSAxMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEArP84tulmAknjorThkPlAj3n54r15/gK97iSSHSL22oVyaf7XPwnU3ZG1ApzQ +jVrhVcNQhrkpJsLj2aDxaQMoIIBFIi1WpztUlVYiWR8o3x8gPW2iNr4joLFutbEn +PzlTCeqrauh0ssJlXI6/fMN4hM2eFvz1Lk8gKgifd/PFHsSaUmYeSF7jEAaPIpjh +ZY4bXSNmO7ilMlHIhqqhqZ5/dpTCpmy3QfDVyAY45tQM4vM7TG1QjMSDJ8EThFk9 +nnV0ttgCXjqQesBCNnLsak3c78QA3xMYV18meMjWCnl3v/evt3a5pQuEF10Q6m/h +q5URX208o1xNg1vysxmKgIsLhwIDAQABoyYwJDASBgNVHRMBAf8ECDAGAQH/AgED +MA4GA1UdDwEB/wQEAwIBxjANBgkqhkiG9w0BAQUFAAOCAQEADkbVPK7ih9legYsC +mEEIjEy82tvuJxuC52pF7BaLT4Wg87JwvVqWuspube5Gi27nKi6Wsxkz67SfqLI3 +7piol7Yutmcn1KZJ/RyTZXaeQi/cImyaT/JaFTmxcdcrUehtHJjA2Sr0oYJ71clB +oiMBdDhViw+5LmeiIAQ32pwL0xch4I+XeTRvhEgCIDMb5jREn5Fw9IBehEPCKdJs +EhTkYY2sEJCehFC78JZvRZ+K88psT/oROhUVRsPNH4NbLUES7VBnQRM9IauUiqpO +fMGx+6fWtScvl6tu4B3i0RwsH0Ti/L6RoZz71ilTc4afU9hDDl3WY4JxHYB0yvbi +AmvZWg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMTCCAxmgAwIBAgIBADANBgkqhkiG9w0BAQUFADCBlTELMAkGA1UEBhMCR1Ix +RDBCBgNVBAoTO0hlbGxlbmljIEFjYWRlbWljIGFuZCBSZXNlYXJjaCBJbnN0aXR1 +dGlvbnMgQ2VydC4gQXV0aG9yaXR5MUAwPgYDVQQDEzdIZWxsZW5pYyBBY2FkZW1p +YyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIFJvb3RDQSAyMDExMB4XDTExMTIw +NjEzNDk1MloXDTMxMTIwMTEzNDk1MlowgZUxCzAJBgNVBAYTAkdSMUQwQgYDVQQK +EztIZWxsZW5pYyBBY2FkZW1pYyBhbmQgUmVzZWFyY2ggSW5zdGl0dXRpb25zIENl +cnQuIEF1dGhvcml0eTFAMD4GA1UEAxM3SGVsbGVuaWMgQWNhZGVtaWMgYW5kIFJl +c2VhcmNoIEluc3RpdHV0aW9ucyBSb290Q0EgMjAxMTCCASIwDQYJKoZIhvcNAQEB +BQADggEPADCCAQoCggEBAKlTAOMupvaO+mDYLZU++CwqVE7NuYRhlFhPjz2L5EPz +dYmNUeTDN9KKiE15HrcS3UN4SoqS5tdI1Q+kOilENbgH9mgdVc04UfCMJDGFr4PJ +fel3r+0ae50X+bOdOFAPplp5kYCvN66m0zH7tSYJnTxa71HFK9+WXesyHgLacEns +bgzImjeN9/E2YEsmLIKe0HjzDQ9jpFEw4fkrJxIH2Oq9GGKYsFk3fb7u8yBRQlqD +75O6aRXxYp2fmTmCobd0LovUxQt7L/DICto9eQqakxylKHJzkUOap9FNhYS5qXSP +FEDH3N6sQWRstBmbAmNtJGSPRLIl6s5ddAxjMlyNh+UCAwEAAaOBiTCBhjAPBgNV +HRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBBjAdBgNVHQ4EFgQUppFC/RNhSiOeCKQp +5dgTBCPuQSUwRwYDVR0eBEAwPqA8MAWCAy5ncjAFggMuZXUwBoIELmVkdTAGggQu +b3JnMAWBAy5ncjAFgQMuZXUwBoEELmVkdTAGgQQub3JnMA0GCSqGSIb3DQEBBQUA +A4IBAQAf73lB4XtuP7KMhjdCSk4cNx6NZrokgclPEg8hwAOXhiVtXdMiKahsog2p +6z0GW5k6x8zDmjR/qw7IThzh+uTczQ2+vyT+bOdrwg3IBp5OjWEopmr95fZi6hg8 +TqBTnbI6nOulnJEWtk2C4AwFSKls9cz4y51JtPACpf1wA+2KIaWuE4ZJwzNzvoc7 +dIsXRSZMFpGD/md9zU1jZ/rzAxKWeAaNsWftjj++n08C9bMJL/NMh98qy5V8Acys +Nnq/onN694/BtZqhFLKPM58N7yLcZnuEvUUXBj08yrl3NI/K6s8/MT7jiOOASSXI +l7WdmplNsDz4SgCbZN2fOUvRJ9e4 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFHjCCBAagAwIBAgIEAKA3oDANBgkqhkiG9w0BAQsFADCBtzELMAkGA1UEBhMC +Q1oxOjA4BgNVBAMMMUkuQ0EgLSBRdWFsaWZpZWQgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHksIDA5LzIwMDkxLTArBgNVBAoMJFBydm7DrSBjZXJ0aWZpa2HEjW7DrSBh +dXRvcml0YSwgYS5zLjE9MDsGA1UECww0SS5DQSAtIEFjY3JlZGl0ZWQgUHJvdmlk +ZXIgb2YgQ2VydGlmaWNhdGlvbiBTZXJ2aWNlczAeFw0wOTA5MDEwMDAwMDBaFw0x +OTA5MDEwMDAwMDBaMIG3MQswCQYDVQQGEwJDWjE6MDgGA1UEAwwxSS5DQSAtIFF1 +YWxpZmllZCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSwgMDkvMjAwOTEtMCsGA1UE +CgwkUHJ2bsOtIGNlcnRpZmlrYcSNbsOtIGF1dG9yaXRhLCBhLnMuMT0wOwYDVQQL +DDRJLkNBIC0gQWNjcmVkaXRlZCBQcm92aWRlciBvZiBDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtTaEy0KC8M9l +4lSaWHMs4+sVV1LwzyJYiIQNeCrv1HHm/YpGIdY/Z640ceankjQvIX7m23BK4OSC +6KO8kZYA3zopOz6GFCOKV2PvLukbc+c2imF6kLHEv6qNA8WxhPbR3xKwlHDwB2yh +Wzo7V3QVgDRG83sugqQntKYC3LnlTGbJpNP+Az72gpO9AHUn/IBhFk4ksc8lYS2L +9GCy9CsmdKSBP78p9w8Lx7vDLqkDgt1/zBrcUWmSSb7AE/BPEeMryQV1IdI6nlGn +BhWkXOYf6GSdayJw86btuxC7viDKNrbp44HjQRaSxnp6O3eto1x4DfiYdw/YbJFe +7EjkxSQBywIDAQABo4IBLjCCASowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwgecGA1UdIASB3zCB3DCB2QYEVR0gADCB0DCBzQYIKwYBBQUHAgIwgcAa +gb1UZW50byBjZXJ0aWZpa2F0IGplIHZ5ZGFuIGpha28ga3ZhbGlmaWtvdmFueSBz +eXN0ZW1vdnkgY2VydGlmaWthdCBwb2RsZSB6YWtvbmEgYy4gMjI3LzIwMDAgU2Iu +IHYgcGxhdG5lbSB6bmVuaS9UaGlzIGlzIHF1YWxpZmllZCBzeXN0ZW0gY2VydGlm +aWNhdGUgYWNjb3JkaW5nIHRvIEN6ZWNoIEFjdCBOby4gMjI3LzIwMDAgQ29sbC4w +HQYDVR0OBBYEFHnL0CPpOmdwkXRP01Hi4CD94Sj7MA0GCSqGSIb3DQEBCwUAA4IB +AQB9laU214hYaBHPZftbDS/2dIGLWdmdSbj1OZbJ8LIPBMxYjPoEMqzAR74tw96T +i6aWRa5WdOWaS6I/qibEKFZhJAVXX5mkx2ewGFLJ+0Go+eTxnjLOnhVF2V2s+57b +m8c8j6/bS6Ij6DspcHEYpfjjh64hE2r0aSpZDjGzKFM6YpqsCJN8qYe2X1qmGMLQ +wvNdjG+nPzCJOOuUEypIWt555ZDLXqS5F7ZjBjlfyDZjEfS2Es9Idok8alf563Mi +9/o+Ba46wMYOkk3P1IlU0RqCajdbliioACKDztAqubONU1guZVzV8tuMASVzbJeL +/GAB7ECTwe1RuKrLYtglMKI9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIQCgFCgAAAAUUjyES1AAAAAjANBgkqhkiG9w0BAQsFADBK +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScwJQYDVQQDEx5JZGVu +VHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwHhcNMTQwMTE2MTgxMjIzWhcNMzQw +MTE2MTgxMjIzWjBKMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MScw +JQYDVQQDEx5JZGVuVHJ1c3QgQ29tbWVyY2lhbCBSb290IENBIDEwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCnUBneP5k91DNG8W9RYYKyqU+PZ4ldhNlT +3Qwo2dfw/66VQ3KZ+bVdfIrBQuExUHTRgQ18zZshq0PirK1ehm7zCYofWjK9ouuU ++ehcCuz/mNKvcbO0U59Oh++SvL3sTzIwiEsXXlfEU8L2ApeN2WIrvyQfYo3fw7gp +S0l4PJNgiCL8mdo2yMKi1CxUAGc1bnO/AljwpN3lsKImesrgNqUZFvX9t++uP0D1 +bVoE/c40yiTcdCMbXTMTEl3EASX2MN0CXZ/g1Ue9tOsbobtJSdifWwLziuQkkORi +T0/Br4sOdBeo0XKIanoBScy0RnnGF7HamB4HWfp1IYVl3ZBWzvurpWCdxJ35UrCL +vYf5jysjCiN2O/cz4ckA82n5S6LgTrx+kzmEB/dEcH7+B1rlsazRGMzyNeVJSQjK +Vsk9+w8YfYs7wRPCTY/JTw436R+hDmrfYi7LNQZReSzIJTj0+kuniVyc0uMNOYZK +dHzVWYfCP04MXFL0PfdSgvHqo6z9STQaKPNBiDoT7uje/5kdX7rL6B7yuVBgwDHT +c+XvvqDtMwt0viAgxGds8AgDelWAf0ZOlqf0Hj7h9tgJ4TNkK2PXMl6f+cB7D3hv +l7yTmvmcEpB4eoCHFddydJxVdHixuuFucAS6T6C6aMN7/zHwcz09lCqxC0EOoP5N +iGVreTO01wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQU7UQZwNPwBovupHu+QucmVMiONnYwDQYJKoZIhvcNAQELBQAD +ggIBAA2ukDL2pkt8RHYZYR4nKM1eVO8lvOMIkPkp165oCOGUAFjvLi5+U1KMtlwH +6oi6mYtQlNeCgN9hCQCTrQ0U5s7B8jeUeLBfnLOic7iPBZM4zY0+sLj7wM+x8uwt +LRvM7Kqas6pgghstO8OEPVeKlh6cdbjTMM1gCIOQ045U8U1mwF10A0Cj7oV+wh93 +nAbowacYXVKV7cndJZ5t+qntozo00Fl72u1Q8zW/7esUTTHHYPTa8Yec4kjixsU3 ++wYQ+nVZZjFHKdp2mhzpgq7vmrlR94gjmmmVYjzlVYA211QC//G5Xc7UI2/YRYRK +W2XviQzdFKcgyxilJbQN+QHwotL0AMh0jqEqSI5l2xPE4iUXfeu+h1sXIFRRk0pT +AwvsXcoz7WL9RccvW9xYoIA55vrX/hMUpu09lEpCdNTDd1lzzY9GvlU47/rokTLq +l1gEIt44w8y8bckzOmoKaT+gyOpyj4xjhiO9bTyWnpXgSUyqorkqG5w2gXjtw+hG +4iZZRHUe2XWJUc0QhJ1hYMtd+ZciTY6Y5uN/9lu7rs3KSoFrXgvzUeF0K+l+J6fZ +mUlO+KWA2yUPHGNiiskzZ2s8EIPGrd6ozRaOjfAHN3Gf8qv8QfXBi+wAN10J5U6A +7/qxXDgGpRtK4dw4LTzcqx+QGtVKnO7RcGzM7vRX+Bi6hG6H +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFZjCCA06gAwIBAgIQCgFCgAAAAUUjz0Z8AAAAAjANBgkqhkiG9w0BAQsFADBN +MQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0MSowKAYDVQQDEyFJZGVu +VHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwHhcNMTQwMTE2MTc1MzMyWhcN +MzQwMTE2MTc1MzMyWjBNMQswCQYDVQQGEwJVUzESMBAGA1UEChMJSWRlblRydXN0 +MSowKAYDVQQDEyFJZGVuVHJ1c3QgUHVibGljIFNlY3RvciBSb290IENBIDEwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2IpT8pEiv6EdrCvsnduTyP4o7 +ekosMSqMjbCpwzFrqHd2hCa2rIFCDQjrVVi7evi8ZX3yoG2LqEfpYnYeEe4IFNGy +RBb06tD6Hi9e28tzQa68ALBKK0CyrOE7S8ItneShm+waOh7wCLPQ5CQ1B5+ctMlS +bdsHyo+1W/CD80/HLaXIrcuVIKQxKFdYWuSNG5qrng0M8gozOSI5Cpcu81N3uURF +/YTLNiCBWS2ab21ISGHKTN9T0a9SvESfqy9rg3LvdYDaBjMbXcjaY8ZNzaxmMc3R +3j6HEDbhuaR672BQssvKplbgN6+rNBM5Jeg5ZuSYeqoSmJxZZoY+rfGwyj4GD3vw +EUs3oERte8uojHH01bWRNszwFcYr3lEXsZdMUD2xlVl8BX0tIdUAvwFnol57plzy +9yLxkA2T26pEUWbMfXYD62qoKjgZl3YNa4ph+bz27nb9cCvdKTz4Ch5bQhyLVi9V +GxyhLrXHFub4qjySjmm2AcG1hp2JDws4lFTo6tyePSW8Uybt1as5qsVATFSrsrTZ +2fjXctscvG29ZV/viDUqZi/u9rNl8DONfJhBaUYPQxxp+pu10GFqzcpL2UyQRqsV +WaFHVCkugyhfHMKiq3IXAAaOReyL4jM9f9oZRORicsPfIsbyVtTdX5Vy7W1f90gD +W/3FKqD2cyOEEBsB5wIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQU43HgntinQtnbcZFrlJPrw6PRFKMwDQYJKoZIhvcN +AQELBQADggIBAEf63QqwEZE4rU1d9+UOl1QZgkiHVIyqZJnYWv6IAcVYpZmxI1Qj +t2odIFflAWJBF9MJ23XLblSQdf4an4EKwt3X9wnQW3IV5B4Jaj0z8yGa5hV+rVHV +DRDtfULAj+7AmgjVQdZcDiFpboBhDhXAuM/FSRJSzL46zNQuOAXeNf0fb7iAaJg9 +TaDKQGXSc3z1i9kKlT/YPyNtGtEqJBnZhbMX73huqVjRI9PHE+1yJX9dsXNw0H8G +lwmEKYBhHfpe/3OsoOOJuBxxFcbeMX8S3OFtm6/n6J91eEyrRjuazr8FGF1NFTwW +mhlQBJqymm9li1JfPFgEKCXAZmExfrngdbkaqIHWchezxQMxNRF4eKLg6TCMf4Df +WN88uieW4oA0beOY02QnrEh+KHdcxiVhJfiFDGX6xDIvpZgF5PgLZxYWxoK4Mhn5 ++bl53B/N66+rDt0b20XkeucC4pVd/GnwU2lhlXV5C15V5jgclKlZM57IcXR5f1GJ +tshquDDIajjDbp7hNxbqBWJMWxJH7ae0s1hWx0nzfxJoCTFx8G34Tkf71oXuxVhA +GaQdp/lLQzfcaFpPz+vCZHTetBXZ9FRUGi8c15dxVJCO2SCdUyt/q4/i6jC8UDfv +8Ue1fXwsBOxonbRJRBD0ckscZOf85muQ3Wl9af0AVqW3rLatt8o+Ae+c +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/ +MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT +DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow +PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD +Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB +AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O +rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq +OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b +xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw +7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD +aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG +SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69 +ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr +AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz +R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5 +JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo +Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx +ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w +MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD +VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx +FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu +ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7 +gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH +fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a +ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT +ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk +c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto +dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt +aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI +hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk +QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/ +h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq +nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR +rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2 +9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF8DCCA9igAwIBAgIPBuhGJy8fCo/RhFzjafbVMA0GCSqGSIb3DQEBBQUAMDgx +CzAJBgNVBAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXpl +bnBlLmNvbTAeFw0wNzEyMTMxMzA4MjdaFw0zNzEyMTMwODI3MjVaMDgxCzAJBgNV +BAYTAkVTMRQwEgYDVQQKDAtJWkVOUEUgUy5BLjETMBEGA1UEAwwKSXplbnBlLmNv +bTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMnTesoPHqynhugWZWqx +whtFMnGV2f4QW8yv56V5AY+Jw8ryVXH3d753lPNypCxE2J6SmxQ6oeckkAoKVo7F +2CaU4dlI4S0+2gpy3aOZFdqBoof0e24md4lYrdbrDLJBenNubdt6eEHpCIgSfocu +ZhFjbFT7PJ1ywLwu/8K33Q124zrX97RovqL144FuwUZvXY3gTcZUVYkaMzEKsVe5 +o4qYw+w7NMWVQWl+dcI8IMVhulFHoCCQk6GQS/NOfIVFVJrRBSZBsLVNHTO+xAPI +JXzBcNs79AktVCdIrC/hxKw+yMuSTFM5NyPs0wH54AlETU1kwOENWocivK0bo/4m +tRXzp/yEGensoYi0RGmEg/OJ0XQGqcwL1sLeJ4VQJsoXuMl6h1YsGgEebL4TrRCs +tST1OJGh1kva8bvS3ke18byB9llrzxlT6Y0Vy0rLqW9E5RtBz+GGp8rQap+8TI0G +M1qiheWQNaBiXBZO8OOi+gMatCxxs1gs3nsL2xoP694hHwZ3BgOwye+Z/MC5TwuG +KP7Suerj2qXDR2kS4Nvw9hmL7Xtw1wLW7YcYKCwEJEx35EiKGsY7mtQPyvp10gFA +Wo15v4vPS8+qFsGV5K1Mij4XkdSxYuWC5YAEpAN+jb/af6IPl08M0w3719Hlcn4c +yHf/W5oPt64FRuXxqBbsR6QXAgMBAAGjgfYwgfMwgbAGA1UdEQSBqDCBpYEPaW5m +b0BpemVucGUuY29tpIGRMIGOMUcwRQYDVQQKDD5JWkVOUEUgUy5BLiAtIENJRiBB +MDEzMzcyNjAtUk1lcmMuVml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFDMEEG +A1UECQw6QXZkYSBkZWwgTWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAxNCAtIDAxMDEw +IFZpdG9yaWEtR2FzdGVpejAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUHRxlDqjyJXu0kc/ksbHmvVV0bAUwDQYJKoZIhvcNAQEFBQAD +ggIBAMeBRm8hGE+gBe/n1bqXUKJg7aWSFBpSm/nxiEqg3Hh10dUflU7F57dp5iL0 ++CmoKom+z892j+Mxc50m0xwbRxYpB2iEitL7sRskPtKYGCwkjq/2e+pEFhsqxPqg +l+nqbFik73WrAGLRne0TNtsiC7bw0fRue0aHwp28vb5CO7dz0JoqPLRbEhYArxk5 +ja2DUBzIgU+9Ag89njWW7u/kwgN8KRwCfr00J16vU9adF79XbOnQgxCvv11N75B7 +XSus7Op9ACYXzAJcY9cZGKfsK8eKPlgOiofmg59OsjQerFQJTx0CCzl+gQgVuaBp +E8gyK+OtbBPWg50jLbJtooiGfqgNASYJQNntKE6MkyQP2/EeTXp6WuKlWPHcj1+Z +ggwuz7LdmMySlD/5CbOlliVbN/UShUHiGUzGigjB3Bh6Dx4/glmimj4/+eAJn/3B +kUtdyXvWton83x18hqrNA/ILUpLxYm9/h+qrdslsUMIZgq+qHfUgKGgu1fxkN0/P +pUTEvnK0jHS0bKf68r10OEMr3q/53NjgnZ/cPcqlY0S/kqJPTIAcuxrDmkoEVU3K +7iYLHL8CxWTTnn7S05EcS6L1HOUXHA0MUqORH5zwIe0ClG+poEnK6EOMxPQ02nwi +o8ZmPrgbBYhdurz3vOXcFD2nhqi2WVIhA16L4wTtSyoeo09Q +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXzCCA0egAwIBAgIBATANBgkqhkiG9w0BAQUFADCB0DELMAkGA1UEBhMCRVMx +SDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMuVml0 +b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwgTWVk +aXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6MRMw +EQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5wZS5j +b20wHhcNMDMwMTMwMjMwMDAwWhcNMTgwMTMwMjMwMDAwWjCB0DELMAkGA1UEBhMC +RVMxSDBGBgNVBAoTP0laRU5QRSBTLkEuIC0gQ0lGIEEtMDEzMzcyNjAtUk1lcmMu +Vml0b3JpYS1HYXN0ZWl6IFQxMDU1IEY2MiBTODFCMEAGA1UEBxM5QXZkYSBkZWwg +TWVkaXRlcnJhbmVvIEV0b3JiaWRlYSAzIC0gMDEwMTAgVml0b3JpYS1HYXN0ZWl6 +MRMwEQYDVQQDEwpJemVucGUuY29tMR4wHAYJKoZIhvcNAQkBFg9JbmZvQGl6ZW5w +ZS5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC1btoCXXhp3xIW +D+Bxl8nUCxkyiazWfpt0e68t+Qt9+lZjKZSdEw2Omj4qvr+ovRmDXO3iWpWVOWDl +3JHJjAzFCe8ZEBNDH+QNYwZHmPBaMYFOYFdbAFVHWvys152C308hcFJ6xWWGmjvl +2eMiEl9P2nR2LWue368DCu+ak7j3gjAXaCOdP1a7Bfr+RW3X2SC5R4Xyp8iHlL5J +PHJD/WBkLrezwzQPdACw8m9EG7q9kUwlNpL32mROujS3ZkT6mQTzJieLiE3X04s0 +uIUqVkk5MhjcHFf7al0N5CzjtTcnXYJKN2Z9EDVskk4olAdGi46eSoZXbjUOP5gk +Ej6wVZAXAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG +MB0GA1UdDgQWBBTqVk/sPIOhFIh4gbIrBSLAB0FbQjANBgkqhkiG9w0BAQUFAAOC +AQEAYp7mEzzhw6o5Hf5+T5kcI+t4BJyiIWy7vHlLs/G8dLYXO81aN/Mzg928eMTR +TxxYZL8dd9uwsJ50TVfX6L0R4Dyw6wikh3fHRrat9ufXi63j5K91Ysr7aXqnF38d +iAgHYkrwC3kuxHBb9C0KBz6h8Q45/KCyN7d37wWAq38yyhPDlaOvyoE6bdUuK5hT +m5EYA5JmPyrhQ1moDOyueWBAjxzMEMj+OAY1H90cLv6wszsqerxRrdTOHBdv7MjB +EIpvEEQkXUxVXAzFuuT6m2t91Lfnwfl/IvljHaVC7DlyyhRYHD6D4Rx+4QKp4tWL +vpw6LkI+gKNJ/YdMCsRZQzEEFA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF8TCCA9mgAwIBAgIQALC3WhZIX7/hy/WL1xnmfTANBgkqhkiG9w0BAQsFADA4 +MQswCQYDVQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6 +ZW5wZS5jb20wHhcNMDcxMjEzMTMwODI4WhcNMzcxMjEzMDgyNzI1WjA4MQswCQYD +VQQGEwJFUzEUMBIGA1UECgwLSVpFTlBFIFMuQS4xEzARBgNVBAMMCkl6ZW5wZS5j +b20wggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDJ03rKDx6sp4boFmVq +scIbRTJxldn+EFvMr+eleQGPicPK8lVx93e+d5TzcqQsRNiekpsUOqHnJJAKClaO +xdgmlOHZSOEtPtoKct2jmRXagaKH9HtuJneJWK3W6wyyQXpzbm3benhB6QiIEn6H +LmYRY2xU+zydcsC8Lv/Ct90NduM61/e0aL6i9eOBbsFGb12N4E3GVFWJGjMxCrFX +uaOKmMPsOzTFlUFpfnXCPCDFYbpRR6AgkJOhkEvzTnyFRVSa0QUmQbC1TR0zvsQD +yCV8wXDbO/QJLVQnSKwv4cSsPsjLkkxTOTcj7NMB+eAJRE1NZMDhDVqHIrytG6P+ +JrUV86f8hBnp7KGItERphIPzidF0BqnMC9bC3ieFUCbKF7jJeodWLBoBHmy+E60Q +rLUk9TiRodZL2vG70t5HtfG8gfZZa88ZU+mNFctKy6lvROUbQc/hhqfK0GqfvEyN +BjNaooXlkDWgYlwWTvDjovoDGrQscbNYLN57C9saD+veIR8GdwYDsMnvmfzAuU8L +hij+0rnq49qlw0dpEuDb8PYZi+17cNcC1u2HGCgsBCRMd+RIihrGO5rUD8r6ddIB +QFqNeb+Lz0vPqhbBleStTIo+F5HUsWLlguWABKQDfo2/2n+iD5dPDNMN+9fR5XJ+ +HMh3/1uaD7euBUbl8agW7EekFwIDAQABo4H2MIHzMIGwBgNVHREEgagwgaWBD2lu +Zm9AaXplbnBlLmNvbaSBkTCBjjFHMEUGA1UECgw+SVpFTlBFIFMuQS4gLSBDSUYg +QTAxMzM3MjYwLVJNZXJjLlZpdG9yaWEtR2FzdGVpeiBUMTA1NSBGNjIgUzgxQzBB +BgNVBAkMOkF2ZGEgZGVsIE1lZGl0ZXJyYW5lbyBFdG9yYmlkZWEgMTQgLSAwMTAx +MCBWaXRvcmlhLUdhc3RlaXowDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFB0cZQ6o8iV7tJHP5LGx5r1VdGwFMA0GCSqGSIb3DQEBCwUA +A4ICAQB4pgwWSp9MiDrAyw6lFn2fuUhfGI8NYjb2zRlrrKvV9pF9rnHzP7MOeIWb +laQnIUdCSnxIOvVFfLMMjlF4rJUT3sb9fbgakEyrkgPH7UIBzg/YsfqikuFgba56 +awmqxinuaElnMIAkejEWOVt+8Rwu3WwJrfIxwYJOubv5vr8qhT/AQKM6WfxZSzwo +JNu0FXWuDYi6LnPAvViH5ULy617uHjAimcs30cQhbIHsvm0m5hzkQiCeR7Csg1lw +LDXWrzY0tM07+DKo7+N4ifuNRSzanLh+QBxh5z6ikixL8s36mLYp//Pye6kfLqCT +VyvehQP5aTfLnnhqBbTFMXiJ7HqnheG5ezzevh55hM6fcA5ZwjUukCox2eRFekGk +LhObNA5me0mrZJfQRsN5nXJQY6aYWwa9SG3YOYNw6DXwBdGqvOPbyALqfP2C2sJb +UjWumDqtujWTI6cfSN01RpiyEGjkpTHCClguGYEQyVB1/OpaFs4R1+7vUIgtYf8/ +QnMFlEPVjjxOAToZpR9GTnfQXeWBIiGH/pR9hNiTrdZoQ0iy2+tzJOeRf1SktoA+ +naM8THLCV8Sg1Mw4J87VBp6iSNnpn86CcDaTmjvfliHjWbcM2pE38P1ZWrOZyGls +QyYBNWNgVYkDOnXYukrZVP/u3oDYLdE41V4tC5h9Pmzb/CaIxw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID9zCCAt+gAwIBAgILMTI1MzcyODI4MjgwDQYJKoZIhvcNAQELBQAwWDELMAkG +A1UEBhMCSlAxHDAaBgNVBAoTE0phcGFuZXNlIEdvdmVybm1lbnQxDTALBgNVBAsT +BEdQS0kxHDAaBgNVBAMTE0FwcGxpY2F0aW9uQ0EyIFJvb3QwHhcNMTMwMzEyMTUw +MDAwWhcNMzMwMzEyMTUwMDAwWjBYMQswCQYDVQQGEwJKUDEcMBoGA1UEChMTSmFw +YW5lc2UgR292ZXJubWVudDENMAsGA1UECxMER1BLSTEcMBoGA1UEAxMTQXBwbGlj +YXRpb25DQTIgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKaq +rSVl1gAR1uh6dqr05rRL88zDUrSNrKZPtZJxb0a11a2LEiIXJc5F6BR6hZrkIxCo ++rFnUOVtR+BqiRPjrq418fRCxQX3TZd+PCj8sCaRHoweOBqW3FhEl2LjMsjRFUFN +dZh4vqtoqV7tR76kuo6hApfek3SZbWe0BSXulMjtqqS6MmxCEeu+yxcGkOGThchk +KM4fR8fAXWDudjbcMztR63vPctgPeKgZggiQPhqYjY60zxU2pm7dt+JNQCBT2XYq +0HisifBPizJtROouurCp64ndt295D6uBbrjmiykLWa+2SQ1RLKn9nShjZrhwlXOa +2Po7M7xCQhsyrLEy+z0CAwEAAaOBwTCBvjAdBgNVHQ4EFgQUVqesqgIdsqw9kA6g +by5Bxnbne9owDgYDVR0PAQH/BAQDAgEGMHwGA1UdEQR1MHOkcTBvMQswCQYDVQQG +EwJKUDEYMBYGA1UECgwP5pel5pys5Zu95pS/5bqcMRswGQYDVQQLDBLmlL/lupzo +qo3oqLzln7rnm6QxKTAnBgNVBAMMIOOCouODl+ODquOCseODvOOCt+ODp+ODs0NB +MiBSb290MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAH+aCXWs +B9FydC53VzDCBJzUgKaD56WgG5/+q/OAvdVKo6GPtkxgEefK4WCB10jBIFmlYTKL +nZ6X02aD2mUuWD7b5S+lzYxzplG+WCigeVxpL0PfY7KJR8q73rk0EWOgDiUX5Yf0 +HbCwpc9BqHTG6FPVQvSCLVMJEWgmcZR1E02qdog8dLHW40xPYsNJTE5t8XB+w3+m +Bcx4m+mB26jIx1ye/JKSLaaX8ji1bnOVDMA/zqaUMLX6BbfeniCq/BNkyYq6ZO/i +Y+TYmK5rtT6mVbgzPixy+ywRAPtbFi+E0hOe+gXFwctyTiLdhMpLvNIthhoEdlkf +SUJiOxMfFui61/0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDcTCCAlmgAwIBAgIVAOYJ/nrqAGiM4CS07SAbH+9StETRMA0GCSqGSIb3DQEB +BQUAMFAxCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9LcmFqb3dhIEl6YmEgUm96bGlj +emVuaW93YSBTLkEuMRcwFQYDVQQDDA5TWkFGSVIgUk9PVCBDQTAeFw0xMTEyMDYx +MTEwNTdaFw0zMTEyMDYxMTEwNTdaMFAxCzAJBgNVBAYTAlBMMSgwJgYDVQQKDB9L +cmFqb3dhIEl6YmEgUm96bGljemVuaW93YSBTLkEuMRcwFQYDVQQDDA5TWkFGSVIg +Uk9PVCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKxHL49ZMTml +6g3wpYwrvQKkvc0Kc6oJ5sxfgmp1qZfluwbv88BdocHSiXlY8NzrVYzuWBp7J/9K +ULMAoWoTIzOQ6C9TNm4YbA9A1jdX1wYNL5Akylf8W5L/I4BXhT9KnlI6x+a7BVAm +nr/Ttl+utT/Asms2fRfEsF2vZPMxH4UFqOAhFjxTkmJWf2Cu4nvRQJHcttB+cEAo +ag/hERt/+tzo4URz6x6r19toYmxx4FjjBkUhWQw1X21re//Hof2+0YgiwYT84zLb +eqDqCOMOXxvH480yGDkh/QoazWX3U75HQExT/iJlwnu7I1V6HXztKIwCBjsxffbH +3jOshCJtywcCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMC +AQYwHQYDVR0OBBYEFFOSo33/gnbwM9TrkmdHYTMbaDsqMA0GCSqGSIb3DQEBBQUA +A4IBAQA5UFWd5EL/pBviIMm1zD2JLUCpp0mJG7JkwznIOzawhGmFFaxGoxAhQBEg +haP+E0KR66oAwVC6xe32QUVSHfWqWndzbODzLB8yj7WAR0cDM45ZngSBPBuFE3Wu +GLJX9g100ETfIX+4YBR/4NR/uvTnpnd9ete7Whl0ZfY94yuu4xQqB5QFv+P7IXXV +lTOjkjuGXEcyQAjQzbFaT9vIABSbeCXWBbjvOXukJy6WgAiclzGNSYprre8Ryydd +fmjW9HIGwsIO03EldivvqEYL1Hv1w/Pur+6FUEOaL68PEIUovfgwIB2BAw+vZDuw +cH0mX548PojGyg434cDjkSXa3mHF +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIECjCCAvKgAwIBAgIJAMJ+QwRORz8ZMA0GCSqGSIb3DQEBCwUAMIGCMQswCQYD +VQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFjAUBgNVBAoMDU1pY3Jvc2VjIEx0 +ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3ppZ25vIFJvb3QgQ0EgMjAwOTEfMB0G +CSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5odTAeFw0wOTA2MTYxMTMwMThaFw0y +OTEyMzAxMTMwMThaMIGCMQswCQYDVQQGEwJIVTERMA8GA1UEBwwIQnVkYXBlc3Qx +FjAUBgNVBAoMDU1pY3Jvc2VjIEx0ZC4xJzAlBgNVBAMMHk1pY3Jvc2VjIGUtU3pp +Z25vIFJvb3QgQ0EgMjAwOTEfMB0GCSqGSIb3DQEJARYQaW5mb0BlLXN6aWduby5o +dTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAOn4j/NjrdqG2KfgQvvP +kd6mJviZpWNwrZuuyjNAfW2WbqEORO7hE52UQlKavXWFdCyoDh2Tthi3jCyoz/tc +cbna7P7ofo/kLx2yqHWH2Leh5TvPmUpG0IMZfcChEhyVbUr02MelTTMuhTlAdX4U +fIASmFDHQWe4oIBhVKZsTh/gnQ4H6cm6M+f+wFUoLAKApxn1ntxVUwOXewdI/5n7 +N4okxFnMUBBjjqqpGrCEGob5X7uxUG6k0QrM1XF+H6cbfPVTbiJfyyvm1HxdrtbC +xkzlBQHZ7Vf8wSN5/PrIJIOV87VqUQHQd9bpEqH5GoP7ghu5sJf0dgYzQ0mg/wu1 ++rUCAwEAAaOBgDB+MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0G +A1UdDgQWBBTLD8bfQkPMPcu1SCOhGnqmKrs0aDAfBgNVHSMEGDAWgBTLD8bfQkPM +Pcu1SCOhGnqmKrs0aDAbBgNVHREEFDASgRBpbmZvQGUtc3ppZ25vLmh1MA0GCSqG +SIb3DQEBCwUAA4IBAQDJ0Q5eLtXMs3w+y/w9/w0olZMEyL/azXm4Q5DwpL7v8u8h +mLzU1F0G9u5C7DBsoKqpyvGvivo/C3NqPuouQH4frlRheesuCDfXI/OMn74dseGk +ddug4lQUsbocKaQY9hK6ohQU4zE1yED/t+AFdlfBHFny+L/k7SViXITwfn4fs775 +tyERzAMBVnCnEJIeGzSBHq2cGsMEPO0CYdYeBvNfOofyK/FFh+U9rNHHV4S9a67c +2Pm2G2JwCz02yULyMtd6YebS2z3PyKnJm9zbWETXbzivf3jTo60adbocwTZ8jx5t +HMN1Rq41Bab2XD0h7lbwyYIiLXpUq3DDfSJlgnCW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEFTCCAv2gAwIBAgIGSUEs5AAQMA0GCSqGSIb3DQEBCwUAMIGnMQswCQYDVQQG +EwJIVTERMA8GA1UEBwwIQnVkYXBlc3QxFTATBgNVBAoMDE5ldExvY2sgS2Z0LjE3 +MDUGA1UECwwuVGFuw7pzw610dsOhbnlraWFkw7NrIChDZXJ0aWZpY2F0aW9uIFNl +cnZpY2VzKTE1MDMGA1UEAwwsTmV0TG9jayBBcmFueSAoQ2xhc3MgR29sZCkgRsWR +dGFuw7pzw610dsOhbnkwHhcNMDgxMjExMTUwODIxWhcNMjgxMjA2MTUwODIxWjCB +pzELMAkGA1UEBhMCSFUxETAPBgNVBAcMCEJ1ZGFwZXN0MRUwEwYDVQQKDAxOZXRM +b2NrIEtmdC4xNzA1BgNVBAsMLlRhbsO6c8OtdHbDoW55a2lhZMOzayAoQ2VydGlm +aWNhdGlvbiBTZXJ2aWNlcykxNTAzBgNVBAMMLE5ldExvY2sgQXJhbnkgKENsYXNz +IEdvbGQpIEbFkXRhbsO6c8OtdHbDoW55MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAxCRec75LbRTDofTjl5Bu0jBFHjzuZ9lk4BqKf8owyoPjIMHj9DrT +lF8afFttvzBPhCf2nx9JvMaZCpDyD/V/Q4Q3Y1GLeqVw/HpYzY6b7cNGbIRwXdrz +AZAj/E4wqX7hJ2Pn7WQ8oLjJM2P+FpD/sLj916jAwJRDC7bVWaaeVtAkH3B5r9s5 +VA1lddkVQZQBr17s9o3x/61k/iCa11zr/qYfCGSji3ZVrR47KGAuhyXoqq8fxmRG +ILdwfzzeSNuWU7c5d+Qa4scWhHaXWy+7GRWF+GmF9ZmnqfI0p6m2pgP8b4Y9VHx2 +BJtr+UBdADTHLpl1neWIA6pN+APSQnbAGwIDAKiLo0UwQzASBgNVHRMBAf8ECDAG +AQH/AgEEMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUzPpnk/C2uNClwB7zU/2M +U9+D15YwDQYJKoZIhvcNAQELBQADggEBAKt/7hwWqZw8UQCgwBEIBaeZ5m8BiFRh +bvG5GK1Krf6BQCOUL/t1fC8oS2IkgYIL9WHxHG64YTjrgfpioTtaYtOUZcTh5m2C ++C8lcLIhJsFyUR+MLMOEkMNaj7rP9KdlpeuY0fsFskZ1FSNqb4VjMIDw1Z4fKRzC +bLBQWV2QWzuoDTDPv31/zvGdg73JRm4gpvlhUbohL3u+pRVjodSVh/GeufOJ8z2F +uLjbvrW5KfnaNwUASZQDhETnv0Mxz3WLJdH0pmT1kvarBes96aULNmLazAZfNou2 +XjG4Kvte9nHfRCaexOYNkbQudZWAUWpLMKawYqGT8ZvYzsRjdT9ZR7E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi +MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu +MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp +dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV +UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO +ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz +c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP +OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl +mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF +BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4 +qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw +gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB +BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu +bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp +dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8 +6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/ +h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH +/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv +wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN +pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFdDCCA1ygAwIBAgIEAJiiOTANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEczMB4XDTEzMTExNDExMjg0MloX +DTI4MTExMzIzMDAwMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMzCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAL4yolQP +cPssXFnrbMSkUeiFKrPMSjTysF/zDsccPVMeiAho2G89rcKezIJnByeHaHE6n3WW +IkYFsO2tx1ueKt6c/DrGlaf1F2cY5y9JCAxcz+bMNO14+1Cx3Gsy8KL+tjzk7FqX +xz8ecAgwoNzFs21v0IJyEavSgWhZghe3eJJg+szeP4TrjTgzkApyI/o1zCZxMdFy +KJLZWyNtZrVtB0LrpjPOktvA9mxjeM3KTj215VKb8b475lRgsGYeCasH/lSJEULR +9yS6YHgamPfJEf0WwTUaVHXvQ9Plrk7O53vDxk5hUUurmkVLoR9BvUhTFXFkC4az +5S6+zqQbwSmEorXLCCN2QyIkHxcE1G6cxvx/K2Ya7Irl1s9N9WMJtxU51nus6+N8 +6U78dULI7ViVDAZCopz35HCz33JvWjdAidiFpNfxC95DGdRKWCyMijmev4SH8RY7 +Ngzp07TKbBlBUgmhHbBqv4LvcFEhMtwFdozL92TkA1CvjJFnq8Xy7ljY3r735zHP +bMk7ccHViLVlvMDoFxcHErVc0qsgk7TmgoNwNsXNo42ti+yjwUOH5kPiNL6VizXt +BznaqB16nzaeErAMZRKQFWDZJkBE41ZgpRDUajz9QdwOWke275dhdU/Z/seyHdTt +XUmzqWrLZoQT1Vyg3N9udwbRcXXIV2+vD3dbAgMBAAGjQjBAMA8GA1UdEwEB/wQF +MAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRUrfrHkleuyjWcLhL75Lpd +INyUVzANBgkqhkiG9w0BAQsFAAOCAgEAMJmdBTLIXg47mAE6iqTnB/d6+Oea31BD +U5cqPco8R5gu4RV78ZLzYdqQJRZlwJ9UXQ4DO1t3ApyEtg2YXzTdO2PCwyiBwpwp +LiniyMMB8jPqKqrMCQj3ZWfGzd/TtiunvczRDnBfuCPRy5FOCvTIeuXZYzbB1N/8 +Ipf3YF3qKS9Ysr1YvY2WTxB1v0h7PVGHoTx0IsL8B3+A3MSs/mrBcDCw6Y5p4ixp +gZQJut3+TcCDjJRYwEYgr5wfAvg1VUkvRtTA8KCWAg8zxXHzniN9lLf9OtMJgwYh +/WA9rjLA0u6NpvDntIJ8CsxwyXmA+P5M9zWEGYox+wrZ13+b8KKaa8MFSu1BYBQw +0aoRQm7TIwIEC8Zl3d1Sd9qBa7Ko+gE4uZbqKmxnl4mUnrzhVNXkanjvSr0rmj1A +fsbAddJu+2gw7OyLnflJNZoaLNmzlTnVHpL3prllL+U9bTpITAjc5CgSKL59NVzq +4BZ+Extq1z7XnvwtdbLBFNUjA9tbbws+eC8N3jONFrdI54OagQ97wUNNVQQXOEpR +1VmiiXTTn74eS9fGbbeIJG9gkaSChVtWQbzQRKtqE77RLFi3EjNYsjdj3BP1lB0/ +QFH1T/U67cjF68IeHRaVesd+QnGTbksVtzDfqu1XhUisHWrdOWnk4Xl4vs4Fv6EM +94B7IWcnMFk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFgTCCA2mgAwIBAgIIIj+pFyDegZQwDQYJKoZIhvcNAQELBQAwTjELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEoMCYGA1UEAxMfU3dpc3NTaWdu +IFBsYXRpbnVtIFJvb3QgQ0EgLSBHMzAeFw0wOTA4MDQxMzM0MDRaFw0zNzA4MDQx +MzM0MDRaME4xCzAJBgNVBAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxKDAm +BgNVBAMTH1N3aXNzU2lnbiBQbGF0aW51bSBSb290IENBIC0gRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCUoO8TG59EIBvNxaoiu9nyUj56Wlh35o2h +K8ncpPPksxOUAGKbHPJDUEOBfq8wNkmsGIkMGEW4PsdUbePYmllriholqba1Dbd9 +I/BffagHqfc+hi7IAU3c5jbtHeU3B2kSS+OD0QQcJPAfcHHnGe1zSG6VKxW2VuYC +31bpm/rqpu7gwsO64MzGyHvXbzqVmzqPvlss0qmgOD7WiOGxYhOO3KswZ82oaqZj +K4Kwy8c9Tu1y9n2rMk5lAusPmXT4HBoojA5FAJMsFJ9txxue9orce3jjtJRHHU0F +bYR6kFSynot1woDfhzk/n/tIVAeNoCn1+WBfWnLou5ugQuAIADSjFTwT49YaawKy +lCGjnUG8KmtOMzumlDj8PccrM7MuKwZ0rJsQb8VORfddoVYDLA1fer0e3h13kGva +pS2KTOnfQfTnS+x9lUKfTKkJD0OIPz2T5yv0ekjaaMTdEoAxGl0kVCamJCGzTK3a +Fwg2AlfGnIZwyXXJnnxh2HjmuegUafkcECgSXUt1ULo80GdwVVVWS/s9HNjbeU2X +37ie2xcs1TUHuFCp9473Vv96Z0NPINnKZtY4YEvulDHWDaJIm/80aZTGNfWWiO+q +ZsyBputMU/8ydKe2nZhXtLomqfEzM2J+OrADEVf/3G8RI60+xgrQzFS3LcKTHeXC +pozH2O9T9wIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUVio/kFj0F1oUstcIG4VbVGpUGigwHwYDVR0jBBgwFoAUVio/ +kFj0F1oUstcIG4VbVGpUGigwDQYJKoZIhvcNAQELBQADggIBAGztiudDqHknm7jP +hz5kOBiMEUKShjfgWMMb7gQu94TsgxBoDH94LZzCl442ThbYDuprSK1Pnl0NzA2p +PhiFfsxomTk11tifhsEy+01lsyIUS8iFZtoX/3GRrJxWV95xLFZCv/jNDvCi0//S +IhX70HgKfuGwWs6ON9upnueVz2PyLA3S+m/zyNX7ALf3NWcQ03tS7BAy+L/dXsmm +gqTxsL8dLt0l5L1N8DWpkQFH+BAClFvrPusNutUdYyylLqvn4x6j7kuqX7FmAbSC +WvlGS8fx+N8svv113ZY4mjc6bqXmMhVus5DAOYp0pZWgvg0uiXnNKVaOw15XUcQF +bwRVj4HpTL1ZRssqvE3JHfLGTwXkyAQN925P2sM6nNLC9enGJHoUPhxCMKgCRTGp +/FCp3NyGOA9bkz9/CE5qDSc6EHlWwxW4PgaG9tlwZ691eoviWMzGdU8yVcVsFAko +O/KV5GreLCgHraB9Byjd1Fqj6aZ8E4yZC1J429nR3z5aQ3Z/RmBTws3ndkd8Vc20 +OWQQW5VLNV1EgyTV4C4kDMGAbmkAgAZ3CmaCEAxRbzeJV9vzTOW4ue4jZpdgt1Ld +2Zb7uoo7oE3OXvBETJDMIU8bOphrjjGD+YMIUssZwTVr7qEVW4g/bazyNJJTpjAq +E9fmhqhd2ULSx52peovL3+6iMcLl +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuzCCAqOgAwIBAgIDBETAMA0GCSqGSIb3DQEBBQUAMH4xCzAJBgNVBAYTAlBM +MSIwIAYDVQQKExlVbml6ZXRvIFRlY2hub2xvZ2llcyBTLkEuMScwJQYDVQQLEx5D +ZXJ0dW0gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxIjAgBgNVBAMTGUNlcnR1bSBU +cnVzdGVkIE5ldHdvcmsgQ0EwHhcNMDgxMDIyMTIwNzM3WhcNMjkxMjMxMTIwNzM3 +WjB+MQswCQYDVQQGEwJQTDEiMCAGA1UEChMZVW5pemV0byBUZWNobm9sb2dpZXMg +Uy5BLjEnMCUGA1UECxMeQ2VydHVtIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MSIw +IAYDVQQDExlDZXJ0dW0gVHJ1c3RlZCBOZXR3b3JrIENBMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEA4/t9o3K6wvDJFIf1awFO4W5AB7ptJ11/91sts1rH +UV+rpDKmYYe2bg+G0jACl/jXaVehGDldamR5xgFZrDwxSjh80gTSSyjoIF87B6LM +TXPb865Px1bVWqeWifrzq2jUI4ZZJ88JJ7ysbnKDHDBy3+Ci6dLhdHUZvSqeexVU +BBvXQzmtVSjF4hq79MDkrjhJM8x2hZ85RdKknvISjFH4fOQtf/WsX+sWn7Et0brM +kUJ3TCXJkDhv2/DM+44el1k+1WBO5gUo7Ul5E0u6SNsv+XLTOcr+H9g0cvW0QM8x +AcPs3hEtF10fuFDRXhmnad4HMyjKUJX5p1TLVIZQRan5SQIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBQIds3LB/8k9sXN7buQvOKEN0Z19zAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBAKaorSLOAT2mo/9i0Eidi15y +sHhE49wcrwn9I0j6vSrEuVUEtRCjjSfeC4Jj0O7eDDd5QVsisrCaQVymcODU0HfL +I9MA4GxWL+FpDQ3Zqr8hgVDZBqWo/5U30Kr+4rP1mS1FhIrlQgnXdAIv94nYmem8 +J9RHjboNRhx3zxSkHLmkMcScKHQDNP8zGSal6Q10tz6XxnboJ5ajZt3hrvJBW8qY +VoNzcOSGGtIxQbovvi0TWnZvTuhOgQ4/WwMioBK+ZlgRSssDxLQqKi2WF+A5VLxI +03YnnZotBqbJ7DnSq9ufmgsnAjUpsUCV5/nonFWIGUbWtzT1fs45mtk48VH3Tyw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg +b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa +MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB +ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw +IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B +AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb +unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d +BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq +7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3 +0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX +roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG +A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j +aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p +26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA +BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud +EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN +BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz +aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB +AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd +p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi +1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc +XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0 +eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu +tGWaIZDgqtCYvDi1czyL+Nw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn +MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL +ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo +YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9 +MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy +NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G +A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA +A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0 +Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s +QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV +eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795 +B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh +z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T +AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i +ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w +TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH +MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD +VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE +VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh +bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B +AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM +bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi +ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG +VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c +ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/ +AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6 +MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp +dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX +BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy +MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp +eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg +/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl +wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh +AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2 +PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu +AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR +MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc +HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/ +Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+ +f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO +rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch +6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3 +7CAFYd4= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY +MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t +dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5 +WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD +VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3 +DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8 +9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ +DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9 +Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N +QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ +xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G +A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T +AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG +kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr +Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5 +Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU +JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot +RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDfTCCAmWgAwIBAgIBADANBgkqhkiG9w0BAQUFADBgMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEqMCgGA1UECxMh +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBFViBSb290Q0ExMB4XDTA3MDYwNjAyMTIz +MloXDTM3MDYwNjAyMTIzMlowYDELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09N +IFRydXN0IFN5c3RlbXMgQ08uLExURC4xKjAoBgNVBAsTIVNlY3VyaXR5IENvbW11 +bmljYXRpb24gRVYgUm9vdENBMTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBALx/7FebJOD+nLpCeamIivqA4PUHKUPqjgo0No0c+qe1OXj/l3X3L+SqawSE +RMqm4miO/VVQYg+kcQ7OBzgtQoVQrTyWb4vVog7P3kmJPdZkLjjlHmy1V4qe70gO +zXppFodEtZDkBp2uoQSXWHnvIEqCa4wiv+wfD+mEce3xDuS4GBPMVjZd0ZoeUWs5 +bmB2iDQL87PRsJ3KYeJkHcFGB7hj3R4zZbOOCVVSPbW9/wfrrWFVGCypaZhKqkDF +MxRldAD5kd6vA0jFQFTcD4SQaCDFkpbcLuUCRarAX1T4bepJz11sS6/vmsJWXMY1 +VkJqMF/Cq/biPT+zyRGPMUzXn0kCAwEAAaNCMEAwHQYDVR0OBBYEFDVK9U2vP9eC +OKyrcWUXdYydVZPmMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQCoh+ns+EBnXcPBZsdAS5f8hxOQWsTvoMpfi7ent/HW +tWS3irO4G8za+6xmiEHO6Pzk2x6Ipu0nUBsCMCRGef4Eh3CXQHPRwMFXGZpppSeZ +q51ihPZRwSzJIxXYKLerJRO1RuGGAv8mjMSIkh1W/hln8lXkgKNrnKt34VFxDSDb +EJrbvXZ5B3eZKK2aXtqxT0QsNY6llsf9g/BYxnnWmHyojf6GPgcWkuF75x3sM3Z+ +Qi5KhfmRiWiEA4Glm5q+4zfFVKtWOxgtQaQM+ELbmaDgcm+7XeEWT1MKZPlO9L9O +VL14bIjqv5wTJMJwaaJ/D8g8rQjJsJhAoyrniIPtd490 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDdzCCAl+gAwIBAgIBADANBgkqhkiG9w0BAQsFADBdMQswCQYDVQQGEwJKUDEl +MCMGA1UEChMcU0VDT00gVHJ1c3QgU3lzdGVtcyBDTy4sTFRELjEnMCUGA1UECxMe +U2VjdXJpdHkgQ29tbXVuaWNhdGlvbiBSb290Q0EyMB4XDTA5MDUyOTA1MDAzOVoX +DTI5MDUyOTA1MDAzOVowXTELMAkGA1UEBhMCSlAxJTAjBgNVBAoTHFNFQ09NIFRy +dXN0IFN5c3RlbXMgQ08uLExURC4xJzAlBgNVBAsTHlNlY3VyaXR5IENvbW11bmlj +YXRpb24gUm9vdENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANAV +OVKxUrO6xVmCxF1SrjpDZYBLx/KWvNs2l9amZIyoXvDjChz335c9S672XewhtUGr +zbl+dp+++T42NKA7wfYxEUV0kz1XgMX5iZnK5atq1LXaQZAQwdbWQonCv/Q4EpVM +VAX3NuRFg3sUZdbcDE3R3n4MqzvEFb46VqZab3ZpUql6ucjrappdUtAtCms1FgkQ +hNBqyjoGADdH5H5XTz+L62e4iKrFvlNVspHEfbmwhRkGeC7bYRr6hfVKkaHnFtWO +ojnflLhwHyg/i/xAXmODPIMqGplrz95Zajv8bxbXH/1KEOtOghY6rCcMU/Gt1SSw +awNQwS08Ft1ENCcadfsCAwEAAaNCMEAwHQYDVR0OBBYEFAqFqXdlBZh8QIH4D5cs +OPEK7DzPMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0GCSqGSIb3 +DQEBCwUAA4IBAQBMOqNErLlFsceTfsgLCkLfZOoc7llsCLqJX2rKSpWeeo8HxdpF +coJxDjrSzG+ntKEju/Ykn8sX/oymzsLS28yN/HH8AynBbF0zX2S2ZTuJbxh2ePXc +okgfGT+Ok+vx+hfuzU7jBBJV1uXk3fs+BXziHV7Gp7yXT2g69ekuCkO2r1dcYmh8 +t/2jioSgrGK+KwmHNPBqAbubKVY8/gA3zyNs8U6qtnRGEmyR7jTV7JqR50S+kDFy +1UkC9gLl9B/rfNmWVan/7Ir5mUf/NVoCqgTLiluHcSmRvaS0eg29mvVXIwAHIRc/ +SjnRBUkLp7Y3gaVdjKozXoEofKd9J+sAro03 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl +MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp +U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw +NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE +ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp +ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3 +DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf +8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN ++lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0 +X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa +K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA +1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G +A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR +zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0 +YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD +bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w +DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3 +L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D +eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl +xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp +VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY +WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEAzCCAuugAwIBAgIQVID5oHPtPwBMyonY43HmSjANBgkqhkiG9w0BAQUFADB1 +MQswCQYDVQQGEwJFRTEiMCAGA1UECgwZQVMgU2VydGlmaXRzZWVyaW1pc2tlc2t1 +czEoMCYGA1UEAwwfRUUgQ2VydGlmaWNhdGlvbiBDZW50cmUgUm9vdCBDQTEYMBYG +CSqGSIb3DQEJARYJcGtpQHNrLmVlMCIYDzIwMTAxMDMwMTAxMDMwWhgPMjAzMDEy +MTcyMzU5NTlaMHUxCzAJBgNVBAYTAkVFMSIwIAYDVQQKDBlBUyBTZXJ0aWZpdHNl +ZXJpbWlza2Vza3VzMSgwJgYDVQQDDB9FRSBDZXJ0aWZpY2F0aW9uIENlbnRyZSBS +b290IENBMRgwFgYJKoZIhvcNAQkBFglwa2lAc2suZWUwggEiMA0GCSqGSIb3DQEB +AQUAA4IBDwAwggEKAoIBAQDIIMDs4MVLqwd4lfNE7vsLDP90jmG7sWLqI9iroWUy +euuOF0+W2Ap7kaJjbMeMTC55v6kF/GlclY1i+blw7cNRfdCT5mzrMEvhvH2/UpvO +bntl8jixwKIy72KyaOBhU8E2lf/slLo2rpwcpzIP5Xy0xm90/XsY6KxX7QYgSzIw +WFv9zajmofxwvI6Sc9uXp3whrj3B9UiHbCe9nyV0gVWw93X2PaRka9ZP585ArQ/d +MtO8ihJTmMmJ+xAdTX7Nfh9WDSFwhfYggx/2uh8Ej+p3iDXE/+pOoYtNP2MbRMNE +1CV2yreN1x5KZmTNXMWcg+HCCIia7E6j8T4cLNlsHaFLAgMBAAGjgYowgYcwDwYD +VR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFBLyWj7qVhy/ +zQas8fElyalL1BSZMEUGA1UdJQQ+MDwGCCsGAQUFBwMCBggrBgEFBQcDAQYIKwYB +BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYIKwYBBQUHAwkwDQYJKoZIhvcNAQEF +BQADggEBAHv25MANqhlHt01Xo/6tu7Fq1Q+e2+RjxY6hUFaTlrg4wCQiZrxTFGGV +v9DHKpY5P30osxBAIWrEr7BSdxjhlthWXePdNl4dp1BUoMUq5KqMlIpPnTX/dqQG +E5Gion0ARD9V04I8GtVbvFZMIi5GQ4okQC3zErg7cBqklrkar4dBGmoYDQZPxz5u +uSlNDUmJEYcyW+ZLBMjkXOZ0c5RdFpgTlf7727FE5TpwrDdr5rMzcijJs1eg9gIW +iAYLtqZLICjU3j2LrTcFU3T+bsy8QxdxXvnFzBqpYe73dgzzcvRyrc9yAjYHR8/v +GVCJYMzpJJUPwssd8m92kMfMdcGWxZ0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFfjCCA2agAwIBAgIJAKqIsFoLsXabMA0GCSqGSIb3DQEBCwUAMEwxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxJjAkBgNVBAMTHVN3aXNzU2ln +biBTaWx2ZXIgUm9vdCBDQSAtIEczMB4XDTA5MDgwNDEzMTkxNFoXDTM3MDgwNDEz +MTkxNFowTDELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEmMCQG +A1UEAxMdU3dpc3NTaWduIFNpbHZlciBSb290IENBIC0gRzMwggIiMA0GCSqGSIb3 +DQEBAQUAA4ICDwAwggIKAoICAQC+h5sF5nF8Um9t7Dep6bPczF9/01DqIZsE8D2/ +vo7JpRQWMhDPmfzscK1INmckDBcy1inlSjmxN+umeAxsbxnKTvdR2hro+iE4bJWc +L9aLzDsCm78mmxFFtrg0Wh2mVEhSyJ14cc5ISsyneIPcaKtmHncH0zYYCNfUbWD4 +8HnTMzYJkmO3BJr1p5baRa90GvyC46hbDjo/UleYfrycjMHAslrfxH7+DKZUdoN+ +ut3nKvRKNk+HZS6lujmNWWEp89OOJHCMU5sRpUcHsnUFXA2E2UTZzckmRFduAn2V +AdSrJIbuPXD7V/qwKRTQnfLFl8sJyvHyPefYS5bpiC+eR1GKVGWYSNIS5FR3DAfm +vluc8d0Dfo2E/L7JYtX8yTroibVfwgVSYfCcPuwuTYxykY7IQ8GiKF71gCTc4i+H +O1MA5cvwsnyNeRmgiM14+MWKWnflBqzdSt7mcG6+r771sasOCLDboD+Uxb4Subx7 +J3m1MildrsUgI5IDe1Q5sIkiVG0S48N46jpA/aSTrOktiDzbpkdmTN/YF+0W3hrW +10Fmvx2A8aTgZBEpXgwnBWLr5cQEYtHEnwxqVdZYOJxmD537q1SAmZzsSdaCn9pF +1j9TBgO3/R/shn104KS06DK2qgcj+O8kQZ5jMHj0VN2O8Fo4jhJ/eMdvAlYhM864 +uK1pVQIDAQABo2MwYTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAd +BgNVHQ4EFgQUoYxFkwoSYwunV18ySn3hIee3PmYwHwYDVR0jBBgwFoAUoYxFkwoS +YwunV18ySn3hIee3PmYwDQYJKoZIhvcNAQELBQADggIBAIeuYW1IOCrGHNxKLoR4 +ScAjKkW4NU3RBfq5BTPEZL3brVQWKrA+DVoo2qYagHMMxEFvr7g0tnfUW44dC4tG +kES1s+5JGInBSzSzhzV0op5FZ+1FcWa2uaElc9fCrIj70h2na9rAWubYWWQ0l2Ug +MTMDT86tCZ6u6cI+GHW0MyUSuwXsULpxQOK93ohGBSGEi6MrHuswMIm/EfVcRPiR +i0tZRQswDcoMT29jvgT+we3gh/7IzVa/5dyOetTWKU6A26ubP45lByL3RM2WHy3H +9Qm2mHD/ONxQFRGEO3+p8NgkVMgXjCsTSdaZf0XRD46/aXI3Uwf05q79Wz55uQbN +uIF4tE2g0DW65K7/00m8Ne1jxrP846thWgW2C+T/qSq+31ROwktcaNqjMqLJTVcY +UzRZPGaZ1zwCeKdMcdC/2/HEPOcB5gTyRPZIJjAzybEBGesC8cwh+joCMBedyF+A +P90lrAKb4xfevcqSFNJSgVPm6vwwZzKpYvaTFxUHMV4PG2n19Km3fC2z7YREMkco +BzuGaUWpxzaWkHJ02BKmcyPRTrm2ejrEKaFQBhG52fQmbmIIEiAW8AFXF9QFNmeX +61H5/zMkDAUPVr/vPRxSjoreaQ9aH/DVAzFEs5LG6nWorrvHYAOImP/HBIRSkIbh +tJOpUC/o69I2rDBgp9ADE7UK +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx +MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG +29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk +oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk +3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL +qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN +nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX +ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H +DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO +TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv +kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w +zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP +MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx +MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV +BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o +Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt +5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s +3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej +vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu +8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw +DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG +MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil +zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/ +3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD +FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6 +Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2 +ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFcDCCA1igAwIBAgIEAJiWjTANBgkqhkiG9w0BAQsFADBYMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSkwJwYDVQQDDCBTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gRVYgUm9vdCBDQTAeFw0xMDEyMDgxMTE5MjlaFw0y +MjEyMDgxMTEwMjhaMFgxCzAJBgNVBAYTAk5MMR4wHAYDVQQKDBVTdGFhdCBkZXIg +TmVkZXJsYW5kZW4xKTAnBgNVBAMMIFN0YWF0IGRlciBOZWRlcmxhbmRlbiBFViBS +b290IENBMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA48d+ifkkSzrS +M4M1LGns3Amk41GoJSt5uAg94JG6hIXGhaTK5skuU6TJJB79VWZxXSzFYGgEt9nC +UiY4iKTWO0Cmws0/zZiTs1QUWJZV1VD+hq2kY39ch/aO5ieSZxeSAgMs3NZmdO3d +Z//BYY1jTw+bbRcwJu+r0h8QoPnFfxZpgQNH7R5ojXKhTbImxrpsX23Wr9GxE46p +rfNeaXUmGD5BKyF/7otdBwadQ8QpCiv8Kj6GyzyDOvnJDdrFmeK8eEEzduG/L13l +pJhQDBXd4Pqcfzho0LKmeqfRMb1+ilgnQ7O6M5HTp5gVXJrm0w912fxBmJc+qiXb +j5IusHsMX/FjqTf5m3VpTCgmJdrV8hJwRVXj33NeN/UhbJCONVrJ0yPr08C+eKxC +KFhmpUZtcALXEPlLVPxdhkqHz3/KRawRWrUgUY0viEeXOcDPusBCAUCZSCELa6fS +/ZbV0b5GnUngC6agIk440ME8MLxwjyx1zNDFjFE7PZQIZCZhfbnDZY8UnCHQqv0X +cgOPvZuM5l5Tnrmd74K74bzickFbIZTTRTeU0d8JOV3nI6qaHcptqAqGhYqCvkIH +1vI4gnPah1vlPNOePqc7nvQDs/nxfRN0Av+7oeX6AHkcpmZBiFxgV6YuCcS6/ZrP +px9Aw7vMWgpVSzs4dlG4Y4uElBbmVvMCAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB +/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFP6rAJCYniT8qcwaivsnuL8wbqg7 +MA0GCSqGSIb3DQEBCwUAA4ICAQDPdyxuVr5Os7aEAJSrR8kN0nbHhp8dB9O2tLsI +eK9p0gtJ3jPFrK3CiAJ9Brc1AsFgyb/E6JTe1NOpEyVa/m6irn0F3H3zbPB+po3u +2dfOWBfoqSmuc0iH55vKbimhZF8ZE/euBhD/UcabTVUlT5OZEAFTdfETzsemQUHS +v4ilf0X8rLiltTMMgsT7B/Zq5SWEXwbKwYY5EdtYzXc7LMJMD16a4/CrPmEbUCTC +wPTxGfARKbalGAKb12NMcIxHowNDXLldRqANb/9Zjr7dn3LDWyvfjFvO5QxGbJKy +CqNMVEIYFRIYvdr8unRu/8G2oGTYqV9Vrp9canaW2HNnh/tNf1zuacpzEPuKqf2e +vTY4SUmH9A4U8OmHuD+nT3pajnnUk+S7aFKErGzp85hwVXIy+TSrK0m1zSBi5Dp6 +Z2Orltxtrpfs/J92VoguZs9btsmksNcFuuEnL5O7Jiqik7Ab846+HUCjuTaPPoIa +Gl6I6lD4WeKDRikL40Rc4ZW2aZCaFG+XroHPaO+Zmr615+F/+PoTRxZMzG0IQOeL +eG9QgkRQP2YGiqtDhFZKDyAthg710tvSeopLzaXoTvFeJiUBWSOgftL2fiFX1ye8 +FVdMpEbB4IMeDExNH08GGeL5qPQ6gqGyeUN51q1veieQA6TqJIc/2b3Z6fJfUEkc +7uzXLg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIBADANBgkqhkiG9w0BAQsFADCBjzELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAMTKVN0YXJmaWVs +ZCBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5MDkwMTAwMDAw +MFoXDTM3MTIzMTIzNTk1OVowgY8xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdBcml6 +b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFyZmllbGQgVGVj +aG5vbG9naWVzLCBJbmMuMTIwMAYDVQQDEylTdGFyZmllbGQgUm9vdCBDZXJ0aWZp +Y2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAL3twQP89o/8ArFvW59I2Z154qK3A2FWGMNHttfKPTUuiUP3oWmb3ooa/RMg +nLRJdzIpVv257IzdIvpy3Cdhl+72WoTsbhm5iSzchFvVdPtrX8WJpRBSiUZV9Lh1 +HOZ/5FSuS/hVclcCGfgXcVnrHigHdMWdSL5stPSksPNkN3mSwOxGXn/hbVNMYq/N +Hwtjuzqd+/x5AJhhdM8mgkBj87JyahkNmcrUDnXMN/uLicFZ8WJ/X7NfZTD4p7dN +dloedl40wOiWVpmKs/B/pM293DIxfJHP4F8R+GuqSVzRmZTRouNjWwl2tVZi4Ut0 +HZbUJtQIBFnQmA4O5t78w+wfkPECAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFHwMMh+n2TB/xH1oo2Kooc6rB1snMA0G +CSqGSIb3DQEBCwUAA4IBAQARWfolTwNvlJk7mh+ChTnUdgWUXuEok21iXQnCoKjU +sHU48TRqneSfioYmUeYs0cYtbpUgSpIB7LiKZ3sx4mcujJUDJi5DnUox9g61DLu3 +4jd/IroAow57UvtruzvE03lRTs2Q9GcHGcg8RnoNAX3FWOdt5oUwF5okxBDgBPfg +8n/Uqgr/Qh037ZTlZFkSIHc40zI+OIF1lnP6aI+xy84fxez6nH7PfrHxBy22/L/K +pL/QlwVKvOoYKAKQvVR4CSFx09F9HdkWsKlhPdAKACL8x3vLCWRFCztAgfd9fDL1 +mMpYjn0q7pBZc2T5NnReJaH1ZgUufzkVqSr7UIuOhWn0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID7zCCAtegAwIBAgIBADANBgkqhkiG9w0BAQsFADCBmDELMAkGA1UEBhMCVVMx +EDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxJTAjBgNVBAoT +HFN0YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xOzA5BgNVBAMTMlN0YXJmaWVs +ZCBTZXJ2aWNlcyBSb290IENlcnRpZmljYXRlIEF1dGhvcml0eSAtIEcyMB4XDTA5 +MDkwMTAwMDAwMFoXDTM3MTIzMTIzNTk1OVowgZgxCzAJBgNVBAYTAlVTMRAwDgYD +VQQIEwdBcml6b25hMRMwEQYDVQQHEwpTY290dHNkYWxlMSUwIwYDVQQKExxTdGFy +ZmllbGQgVGVjaG5vbG9naWVzLCBJbmMuMTswOQYDVQQDEzJTdGFyZmllbGQgU2Vy +dmljZXMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkgLSBHMjCCASIwDQYJKoZI +hvcNAQEBBQADggEPADCCAQoCggEBANUMOsQq+U7i9b4Zl1+OiFOxHz/Lz58gE20p +OsgPfTz3a3Y4Y9k2YKibXlwAgLIvWX/2h/klQ4bnaRtSmpDhcePYLQ1Ob/bISdm2 +8xpWriu2dBTrz/sm4xq6HZYuajtYlIlHVv8loJNwU4PahHQUw2eeBGg6345AWh1K +Ts9DkTvnVtYAcMtS7nt9rjrnvDH5RfbCYM8TWQIrgMw0R9+53pBlbQLPLJGmpufe +hRhJfGZOozptqbXuNC66DQO4M99H67FrjSXZm86B0UVGMpZwh94CDklDhbZsc7tk +6mFBrMnUVN+HL8cisibMn1lUaJ/8viovxFUcdUBgF4UCVTmLfwUCAwEAAaNCMEAw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJxfAN+q +AdcwKziIorhtSpzyEZGDMA0GCSqGSIb3DQEBCwUAA4IBAQBLNqaEd2ndOxmfZyMI +bw5hyf2E3F/YNoHN2BtBLZ9g3ccaaNnRbobhiCPPE95Dz+I0swSdHynVv/heyNXB +ve6SbzJ08pGCL72CQnqtKrcgfU28elUSwhXqvfdqlS5sdJ/PHLTyxQGjhdByPq1z +qwubdQxtRbeOlKyWN7Wg0I8VRw7j6IPdj/3vQQF3zCepYoUz8jcI73HPdwbeyBkd +iEDPfUYd/x7H4c7/I9vG+o1VTqkC50cRRj70/b17KSa7qWFiNyi2LSr2EIZkyXCn +0q23KXB56jzaYyWf/Wi3MOxw+3WKt21gZ7IeyLnp2KhvAotnDU0mV3HaIPzBSlCN +sSi6 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYzCCA0ugAwIBAgIBOzANBgkqhkiG9w0BAQsFADBTMQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoGA1UEAxMjU3RhcnRDb20gQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkgRzIwHhcNMTAwMTAxMDEwMDAxWhcNMzkxMjMxMjM1 +OTAxWjBTMQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjEsMCoG +A1UEAxMjU3RhcnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgRzIwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC2iTZbB7cgNr2Cu+EWIAOVeq8Oo1XJ +JZlKxdBWQYeQTSFgpBSHO839sj60ZwNq7eEPS8CRhXBF4EKe3ikj1AENoBB5uNsD +vfOpL9HG4A/LnooUCri99lZi8cVytjIl2bLzvWXFDSxu1ZJvGIsAQRSCb0AgJnoo +D/Uefyf3lLE3PbfHkffiAez9lInhzG7TNtYKGXmu1zSCZf98Qru23QumNK9LYP5/ +Q0kGi4xDuFby2X8hQxfqp0iVAXV16iulQ5XqFYSdCI0mblWbq9zSOdIxHWDirMxW +RST1HFSr7obdljKF+ExP6JV2tgXdNiNnvP8V4so75qbsO+wmETRIjfaAKxojAuuK +HDp2KntWFhxyKrOq42ClAJ8Em+JvHhRYW6Vsi1g8w7pOOlz34ZYrPu8HvKTlXcxN +nw3h3Kq74W4a7I/htkxNeXJdFzULHdfBR9qWJODQcqhaX2YtENwvKhOuJv4KHBnM +0D4LnMgJLvlblnpHnOl68wVQdJVznjAJ85eCXuaPOQgeWeU1FEIT/wCc976qUM/i +UUjXuG+v+E5+M5iSFGI6dWPPe/regjupuznixL0sAA7IF6wT700ljtizkC+p2il9 +Ha90OrInwMEePnWjFqmveiJdnxMaz6eg6+OGCtP95paV1yPIN93EfKo2rJgaErHg +TuixO/XWb/Ew1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQE +AwIBBjAdBgNVHQ4EFgQUS8W0QGutHLOlHGVuRjaJhwUMDrYwDQYJKoZIhvcNAQEL +BQADggIBAHNXPyzVlTJ+N9uWkusZXn5T50HsEbZH77Xe7XRcxfGOSeD8bpkTzZ+K +2s06Ctg6Wgk/XzTQLwPSZh0avZyQN8gMjgdalEVGKua+etqhqaRpEpKwfTbURIfX +UfEpY9Z1zRbkJ4kd+MIySP3bmdCPX1R0zKxnNBFi2QwKN4fRoxdIjtIXHfbX/dtl +6/2o1PXWT6RbdejF0mCy2wl+JYt7ulKSnj7oxXehPOBKc2thz4bcQ///If4jXSRK +9dNtD2IEBVeC2m6kMyV5Sy5UGYvMLD0w6dEG/+gyRr61M3Z3qAFdlsHB1b6uJcDJ +HgoJIIihDsnzb02CVAAgp9KP5DlUFy6NHrgbuxu9mk47EDTcnIhT76IxW1hPkWLI +wpqazRVdOKnWvvgTtZ8SafJQYqz7Fzf07rh1Z2AQ+4NQ+US1dZxAF7L+/XldblhY +XzD8AK6vM8EOTmy6p6ahfzLbOOCxchcKK5HsamMm7YnUeMx0HgX4a/6ManY5Ka5l +IxKVCCIcl85bBu4M4ru8H0ST9tg4RQUh7eStqxK2A6RCLi3ECToDZ2mEmuFZkIoo +hdVddLHRDiBYmxOlsGOm7XtH/UVVMKTumtTm4ofvmMkyghEpIrwACjFeLQ/Ajulr +so8uBtjRkcfGEvRM/TAXw8HaOFvjqermobp573PYtlNXLfbQ4ddI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV +BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln +biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF +MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT +d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC +CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8 +76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+ +bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c +6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE +emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd +MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt +MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y +MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y +FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi +aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM +gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB +qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7 +lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn +8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov +L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6 +45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO +UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5 +O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC +bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv +GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a +77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC +hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3 +92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp +Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w +ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt +Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu +IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw +WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD +ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD +ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y +IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn +IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+ +6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob +jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw +izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl ++zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY +zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP +pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF +KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW +ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB +AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O +BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0 +ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW +IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA +A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0 +uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+ +FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7 +jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/ +u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D +YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1 +puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa +icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG +DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x +kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z +Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE +BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu +IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow +RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY +U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A +MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv +Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br +YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF +nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH +6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt +eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/ +c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ +MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH +HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf +jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6 +5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB +rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU +F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c +wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0 +cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB +AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp +WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9 +xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ +2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ +IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8 +aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X +em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR +dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/ +OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+ +hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy +tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQHp4o6Ejy5e/DfEoeWhhntjANBgkqhkiG9w0BAQsFADBk +MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 +YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg +Q0EgMjAeFw0xMTA2MjQwODM4MTRaFw0zMTA2MjUwNzM4MTRaMGQxCzAJBgNVBAYT +AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp +Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAyMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAlUJOhJ1R5tMJ6HJaI2nbeHCOFvEr +jw0DzpPMLgAIe6szjPTpQOYXTKueuEcUMncy3SgM3hhLX3af+Dk7/E6J2HzFZ++r +0rk0X2s682Q2zsKwzxNoysjL67XiPS4h3+os1OD5cJZM/2pYmLcX5BtS5X4HAB1f +2uY+lQS3aYg5oUFgJWFLlTloYhyxCwWJwDaCFCE/rtuh/bxvHGCGtlOUSbkrRsVP +ACu/obvLP+DHVxxX6NZp+MEkUp2IVd3Chy50I9AU/SpHWrumnf2U5NGKpV+GY3aF +y6//SSj8gO1MedK75MDvAe5QQQg1I3ArqRa0jG6F6bYRzzHdUyYb3y1aSgJA/MTA +tukxGggo5WDDH8SQjhBiYEQN7Aq+VRhxLKX0srwVYv8c474d2h5Xszx+zYIdkeNL +6yxSNLCK/RJOlrDrcH+eOfdmQrGrrFLadkBXeyq96G4DsguAhYidDMfCd7Camlf0 +uPoTXGiTOmekl9AbmbeGMktg2M7v0Ax/lZ9vh0+Hio5fCHyqW/xavqGRn1V9TrAL +acywlKinh/LTSlDcX3KwFnUey7QYYpqwpzmqm59m2I2mbJYV4+by+PGDYmy7Velh +k6M99bFXi08jsJvllGov34zflVEpYKELKeRcVVi3qPyZ7iVNTA6z00yPhOgpD/0Q +VAKFyPnlw4vP5w8CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw +FDASBgdghXQBUwIBBgdghXQBUwIBMBIGA1UdEwEB/wQIMAYBAf8CAQcwHQYDVR0O +BBYEFE0mICKJS9PVpAqhb97iEoHF8TwuMB8GA1UdIwQYMBaAFE0mICKJS9PVpAqh +b97iEoHF8TwuMA0GCSqGSIb3DQEBCwUAA4ICAQAyCrKkG8t9voJXiblqf/P0wS4R +fbgZPnm3qKhyN2abGu2sEzsOv2LwnN+ee6FTSA5BesogpxcbtnjsQJHzQq0Qw1zv +/2BZf82Fo4s9SBwlAjxnffUy6S8w5X2lejjQ82YqZh6NM4OKb3xuqFp1mrjX2lhI +REeoTPpMSQpKwhI3qEAMw8jh0FcNlzKVxzqfl9NX+Ave5XLzo9v/tdhZsnPdTSpx +srpJ9csc1fV5yJmz/MFMdOO0vSk3FQQoHt5FRnDsr7p4DooqzgB53MBfGWcsa0vv +aGgLQ+OswWIJ76bdZWGgr4RVSJFSHMYlkSrQwSIjYVmvRRGFHQEkNI/Ps/8XciAT +woCqISxxOQ7Qj1zB09GOInJGTB2Wrk9xseEFKZZZ9LuedT3PDTcNYtsmjGOpI99n +Bjx8Oto0QuFmtEYE3saWmA9LSHokMnWRn6z3aOkquVVlzl1h0ydw2Df+n7mvoC5W +t6NlUe07qxS/TFED6F+KBZvuim6c779o+sjaC+NCydAXFJy3SuCvkychVSa1ZC+N +8f+mQAWFBVzKBxlcCxMoTFh/wqXvRdpg065lYZ1Tg3TCrvJcwhbtkj6EPnNgiLx2 +9CzP0H1907he0ZESEOnN3col49XtmS++dYFLJPlFRpTJKSFTnCZFqhMX5OfNeOI5 +wSsSnqaeG8XmDtkx2Q== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF4DCCA8igAwIBAgIRAPL6ZOJ0Y9ON/RAdBB92ylgwDQYJKoZIhvcNAQELBQAw +ZzELMAkGA1UEBhMCY2gxETAPBgNVBAoTCFN3aXNzY29tMSUwIwYDVQQLExxEaWdp +dGFsIENlcnRpZmljYXRlIFNlcnZpY2VzMR4wHAYDVQQDExVTd2lzc2NvbSBSb290 +IEVWIENBIDIwHhcNMTEwNjI0MDk0NTA4WhcNMzEwNjI1MDg0NTA4WjBnMQswCQYD +VQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0YWwgQ2Vy +dGlmaWNhdGUgU2VydmljZXMxHjAcBgNVBAMTFVN3aXNzY29tIFJvb3QgRVYgQ0Eg +MjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMT3HS9X6lds93BdY7Bx +UglgRCgzo3pOCvrY6myLURYaVa5UJsTMRQdBTxB5f3HSek4/OE6zAMaVylvNwSqD +1ycfMQ4jFrclyxy0uYAyXhqdk/HoPGAsp15XGVhRXrwsVgu42O+LgrQ8uMIkqBPH +oCE2G3pXKSinLr9xJZDzRINpUKTk4RtiGZQJo/PDvO/0vezbE53PnUgJUmfANykR +HvvSEaeFGHR55E+FFOtSN+KxRdjMDUN/rhPSays/p8LiqG12W0OfvrSdsyaGOx9/ +5fLoZigWJdBLlzin5M8J0TbDC77aO0RYjb7xnglrPvMyxyuHxuxenPaHZa0zKcQv +idm5y8kDnftslFGXEBuGCxobP/YCfnvUxVFkKJ3106yDgYjTdLRZncHrYTNaRdHL +OdAGalNgHa/2+2m8atwBz735j9m9W8E6X47aD0upm50qKGsaCnw8qyIL5XctcfaC +NYGu+HuB5ur+rPQam3Rc6I8k9l2dRsQs0h4rIWqDJ2dVSqTjyDKXZpBy2uPUZC5f +46Fq9mDU5zXNysRojddxyNMkM3OxbPlq4SjbX8Y96L5V5jcb7STZDxmPX2MYWFCB +UWVv8p9+agTnNCRxunZLWB4ZvRVgRaoMEkABnRDixzgHcgplwLa7JSnaFp6LNYth +7eVxV4O1PHGf40+/fh6Bn0GXAgMBAAGjgYYwgYMwDgYDVR0PAQH/BAQDAgGGMB0G +A1UdIQQWMBQwEgYHYIV0AVMCAgYHYIV0AVMCAjASBgNVHRMBAf8ECDAGAQH/AgED +MB0GA1UdDgQWBBRF2aWBbj2ITY1x0kbBbkUe88SAnTAfBgNVHSMEGDAWgBRF2aWB +bj2ITY1x0kbBbkUe88SAnTANBgkqhkiG9w0BAQsFAAOCAgEAlDpzBp9SSzBc1P6x +XCX5145v9Ydkn+0UjrgEjihLj6p7jjm02Vj2e6E1CqGdivdj5eu9OYLU43otb98T +PLr+flaYC/NUn81ETm484T4VvwYmneTwkLbUwp4wLh/vx3rEUMfqe9pQy3omywC0 +Wqu1kx+AiYQElY2NfwmTv9SoqORjbdlk5LgpWgi/UOGED1V7XwgiG/W9mR4U9s70 +WBCCswo9GcG/W6uqmdjyMb3lOGbcWAXH7WMaLgqXfIeTK7KK4/HsGOV1timH59yL +Gn602MnTihdsfSlEvoqq9X46Lmgxk7lq2prg2+kupYTNHAq4Sgj5nPFhJpiTt3tm +7JFe3VE/23MPrQRYCd0EApUKPtN236YQHoA96M2kZNEzx5LH4k5E4wnJTsJdhw4S +nr8PyQUQ3nqjsTzyP6WqJ3mtMX0f/fwZacXduT98zca0wjAefm6S139hdlqP65VN +vBFuIXxZN5nQBrz5Bm0yFqXZaajh3DyAHmBR3NdUIR7KYndP+tiPsys6DXhyyWhB +WkdKwqPrGtcKqzwyVcgKEZzfdNbwQBUdyLmPtTbFr/giuMod89a2GQ+fYWVq6nTI +fI/DT11lgh/ZDYnadXL77/FHZxOzyNEZiCcmmpl5fx7kLD977vHeTYuWl8PVP3wb +I+2ksx0WckNLIOFZfsLorSa/ovc= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICqDCCAi2gAwIBAgIQIW4zpcvTiKRvKQe0JzzE2DAKBggqhkjOPQQDAzCBlDEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBD +bGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g +RzQwHhcNMTExMDA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBlDELMAkGA1UEBhMC +VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h +bnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAxIFB1 +YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATXZrUb266zYO5G6ohjdTsqlG3zXxL24w+etgoUU0hS +yNw6s8tIICYSTvqJhNTfkeQpfSgB2dsYQ2mhH7XThhbcx39nI9/fMTGDAzVwsUu3 +yBe7UcvclBfb6gk7dhLeqrWjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBRlwI0l9Qy6l3eQP54u4Fr1ztXh5DAKBggqhkjOPQQD +AwNpADBmAjEApa7jRlP4mDbjIvouKEkN7jB+M/PsP3FezFWJeJmssv3cHFwzjim5 +axfIEWi13IMHAjEAnMhE2mnCNsNUGRCFAtqdR+9B52wmnQk9922Q0QVEL7C8g5No +8gxFSTm/mQQc0xCg +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID9jCCAt6gAwIBAgIQJDJ18h0v0gkz97RqytDzmDANBgkqhkiG9w0BAQsFADCB +lDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w +HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRl +YyBDbGFzcyAxIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzYwHhcNMTExMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UE +BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +eW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAx +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzYwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDHOddJZKmZgiJM6kXZBxbje/SD +6Jlz+muxNuCad6BAwoGNAcfMjL2Pffd543pMA03Z+/2HOCgs3ZqLVAjbZ/sbjP4o +ki++t7JIp4Gh2F6Iw8w5QEFa0dzl2hCfL9oBTf0uRnz5LicKaTfukaMbasxEvxvH +w9QRslBglwm9LiL1QYRmn81ApqkAgMEflZKf3vNI79sdd2H8f9/ulqRy0LY+/3gn +r8uSFWkI22MQ4uaXrG7crPaizh5HmbmJtxLmodTNWRFnw2+F2EJOKL5ZVVkElauP +N4C/DfD8HzpkMViBeNfiNfYgPym4jxZuPkjctUwH4fIa6n4KedaovetdhitNAgMB +AAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBQzQejIORIVk0jyljIuWvXalF9TYDANBgkqhkiG9w0BAQsFAAOCAQEAFeNzV7EX +tl9JaUSm9l56Z6zS3nVJq/4lVcc6yUQVEG6/MWvL2QeTfxyFYwDjMhLgzMv7OWyP +4lPiPEAz2aSMR+atWPuJr+PehilWNCxFuBL6RIluLRQlKCQBZdbqUqwFblYSCT3Q +dPTXvQbKqDqNVkL6jXI+dPEDct+HG14OelWWLDi3mIXNTTNEyZSPWjEwN0ujOhKz +5zbRIWhLLTjmU64cJVYIVgNnhJ3Gw84kYsdMNs+wBkS39V8C3dlU6S+QTnrIToNA +DJqXPDe/v+z28LSFdyjBC8hnghAXOKK3Buqbvzr46SMHv3TgmDgVVXjucgBcGaP0 +0jPg/73RVDkpDw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICqDCCAi2gAwIBAgIQNBdlEkA7t1aALYDLeVWmHjAKBggqhkjOPQQDAzCBlDEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBD +bGFzcyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g +RzQwHhcNMTExMDA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCBlDELMAkGA1UEBhMC +VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h +bnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAyIFB1 +YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAATR2UqOTA2ESlG6fO/TzPo6mrWnYxM9AeBJPvrBR8mS +szrX/m+c95o6D/UOCgrDP8jnEhSO1dVtmCyzcTIK6yq99tdqIAtnRZzSsr9TImYJ +XdsR8/EFM1ij4rjPfM2Cm72jQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBQ9MvM6qQyQhPmijGkGYVQvh3L+BTAKBggqhkjOPQQD +AwNpADBmAjEAyKapr0F/tckRQhZoaUxcuCcYtpjxwH+QbYfTjEYX8D5P/OqwCMR6 +S7wIL8fip29lAjEA1lnehs5fDspU1cbQFQ78i5Ry1I4AWFPPfrFLDeVQhuuea9// +KabYR9mglhjb8kWz +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID9jCCAt6gAwIBAgIQZIKe/DcedF38l/+XyLH/QTANBgkqhkiG9w0BAQsFADCB +lDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w +HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRl +YyBDbGFzcyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzYwHhcNMTExMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UE +BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +eW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAy +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzYwggEi +MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDNzOkFyGOFyz9AYxe9GPo15gRn +V2WYKaRPyVyPDzTS+NqoE2KquB5QZ3iwFkygOakVeq7t0qLA8JA3KRgmXOgNPLZs +ST/B4NzZS7YUGQum05bh1gnjGSYc+R9lS/kaQxwAg9bQqkmi1NvmYji6UBRDbfkx ++FYW2TgCkc/rbN27OU6Z4TBnRfHU8I3D3/7yOAchfQBeVkSz5GC9kSucq1sEcg+y +KNlyqwUgQiWpWwNqIBDMMfAr2jUs0Pual07wgksr2F82owstr2MNHSV/oW5cYqGN +KD6h/Bwg+AEvulWaEbAZ0shQeWsOagXXqgQ2sqPy4V93p3ec5R7c6d9qwWVdAgMB +AAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW +BBSHjCCVyJhK0daABkqQNETfHE2/sDANBgkqhkiG9w0BAQsFAAOCAQEAgY6ypWaW +tyGltu9vI1pf24HFQqV4wWn99DzX+VxrcHIa/FqXTQCAiIiCisNxDY7FiZss7Y0L +0nJU9X3UXENX6fOupQIR9nYrgVfdfdp0MP1UR/bgFm6mtApI5ud1Bw8pGTnOefS2 +bMVfmdUfS/rfbSw8DVSAcPCIC4DPxmiiuB1w2XaM/O6lyc+tHc+ZJVdaYkXLFmu9 +Sc2lo4xpeSWuuExsi0BmSxY/zwIa3eFsawdhanYVKZl/G92IgMG/tY9zxaaWI4Sm +KIYkM2oBLldzJbZev4/mHWGoQClnHYebHX+bn5nNMdZUvmK7OaxoEkiRIKXLsd3+ +b/xa5IJVWa8xqQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICpzCCAi2gAwIBAgIQTHm1miicdjFk9YlE0JEC3jAKBggqhkjOPQQDAzCBlDEL +MAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYD +VQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBD +bGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0g +RzQwHhcNMTIxMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UEBhMC +VVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZTeW1h +bnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAzIFB1 +YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzQwdjAQBgcq +hkjOPQIBBgUrgQQAIgNiAARXz+qzOU0/oSHgbi84csaHl/OFC0fnD1HI0fSZm8pZ +Zf9M+eoLtyXV0vbsMS0yYhLXdoan+jjJZdT+c+KEOfhMSWIT3brViKBfPchPsD+P +oVAR5JNGrcNfy/GkapVW6MCjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E +BTADAQH/MB0GA1UdDgQWBBQknbzScfcdwiW+IvGJpSwVOzQeXjAKBggqhkjOPQQD +AwNoADBlAjEAuWZoZdsF0Dh9DvPIdWG40CjEsUozUVj78jwQyK5HeHbKZiQXhj5Q +Vm6lLZmIuL0kAjAD6qfnqDzqnWLGX1TamPR3vU+PGJyRXEdrQE0QHbPhicoLIsga +xcX+i93B3294n5E= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF9jCCA96gAwIBAgIQZWNxhdNvRcaPfzH5CYeSgjANBgkqhkiG9w0BAQwFADCB +lDELMAkGA1UEBhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8w +HQYDVQQLExZTeW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRl +YyBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzYwHhcNMTIxMDE4MDAwMDAwWhcNMzcxMjAxMjM1OTU5WjCBlDELMAkGA1UE +BhMCVVMxHTAbBgNVBAoTFFN5bWFudGVjIENvcnBvcmF0aW9uMR8wHQYDVQQLExZT +eW1hbnRlYyBUcnVzdCBOZXR3b3JrMUUwQwYDVQQDEzxTeW1hbnRlYyBDbGFzcyAz +IFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IC0gRzYwggIi +MA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQC3DrL6TbyachX7d1vb/UMPywv3 +YC6zK34Mu1PyzE5l8xm7/zUd99Opu0Attd141Kb5N+qFBXttt+YTSwZ8+3ZjjyAd +LTgrBIXy6LDRX01KIclq2JTqHgJQpqqQB6BHIepm+QSg5oPwxPVeluInTWHDs8GM +IrZmoQDRVin77cF/JMo9+lqUsITDx7pDHP1kDvEo+0dZ8ibhMblE+avd+76+LDfj +rAsY0/wBovGkCjWCR0yrvYpe3xOF/CDMSFmvr0FvyyPNypOn3dVfyGQ7/wEDoApP +LW49hL6vyDKyUymQFfewBZoKPPa5BpDJpeFdoDuw/qi2v/WJKFckOiGGceTciotB +VeweMCRZ0cBZuHivqlp03iWAMJjtMERvIXAc2xJTDtamKGaTLB/MTzwbgcW59nhv +0DI6CHLbaw5GF4WU87zvvPekXo7p6bVk5bdLRRIsTDe3YEMKTXEGAJQmNXQfu3o5 +XE475rgD4seTi4QsJUlF3X8jlGAfy+nN9quX92Hn+39igcjcCjBcGHzmzu/Hbh6H +fLPpysh7avRo/IOlDFa0urKNSgrHl5fFiDAVPRAIVBVycmczM/R8t84AJ1NlziTx +WmTnNi/yLgLCl99y6AIeoPc9tftoYAP6M6nmEm0G4amoXU48/tnnAGWsthlNe4N/ +NEfq4RhtsYsceavnnQIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zAdBgNVHQ4EFgQUOXEIAD7eyIbnkP/k/SEPziQZFvYwDQYJKoZIhvcN +AQEMBQADggIBAFBriE1gSM5a4yLOZ3yEp80c/ekMA4w2rwqHDmquV64B0Da78v25 +c8FftaiuTKL6ScsHRhY2vePIVzh+OOS/JTNgxtw3nGO7XpgeGrKC8K6mdxGAREeh +KcXwszrOmPC47NMOgAZ3IzBM/3lkYyJbd5NDS3Wz2ztuO0rd8ciutTeKlYg6EGhw +OLlbcH7VQ8n8X0/l5ns27vAg7UdXEyYQXhQGDXt2B8LGLRb0rqdsD7yID08sAraj +1yLmmUc12I2lT4ESOhF9s8wLdfMecKMbA+r6mujmLjY5zJnOOj8Mt674Q5mwk25v +qtkPajGRu5zTtCj7g0x6c4JQZ9IOrO1gxbJdNZjPh34eWR0kvFa62qRa2MzmvB4Q +jxuMjvPB27e+1LBbZY8WaPNWxSoZFk0PuGWHbSSDuGLc4EdhGoh7zk5//dzGDVqa +pPO1TPbdMaboHREhMzAEYX0c4D5PjT+1ixIAWn2poQDUg+twuxj4pNIcgS23CBHI +Jnu21OUPA0Zy1CVAHr5JXW2T8VyyO3VUaTqg7kwiuqya4gitRWMFSlI1dsQ09V4H +Mq3cfCbRW4+t5OaqG3Wf61206MCpFXxOSgdy30bJ1JGSdVaw4e43NmUoxRXIK3bM +bW8Zg/T92hXiQeczeUaDV/nxpbZt07zXU+fucW14qZen7iCcGRVyFT0E +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDIwHhcNMDgxMDAxMTA0MDE0WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDIwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqX9obX+hzkeXaXPSi5kfl82hVYAUd +AqSzm1nzHoqvNK38DcLZSBnuaY/JIPwhqgcZ7bBcrGXHX+0CfHt8LRvWurmAwhiC +FoT6ZrAIxlQjgeTNuUk/9k9uN0goOA/FvudocP05l03Sx5iRUKrERLMjfTlH6VJi +1hKTXrcxlkIF+3anHqP1wvzpesVsqXFP6st4vGCvx9702cu+fjOlbpSD8DT6Iavq +jnKgP6TeMFvvhk1qlVtDRKgQFRzlAVfFmPHmBiiRqiDFt1MmUUOyCxGVWOHAD3bZ +wI18gfNycJ5v/hqO2V81xrJvNHy+SE/iWjnX2J14np+GPgNeGYtEotXHAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS/ +WSA2AHmgoCJrjNXyYdK4LMuCSjANBgkqhkiG9w0BAQsFAAOCAQEAMQOiYQsfdOhy +NsZt+U2e+iKo4YFWz827n+qrkRk4r6p8FU3ztqONpfSO9kSpp+ghla0+AGIWiPAC +uvxhI+YzmzB6azZie60EI4RYZeLbK4rnJVM3YlNfvNoBYimipidx5joifsFvHZVw +IEoHNN/q/xWA5brXethbdXwFeilHfkCoMRN3zUA7tFFHei4R40cR3p1m0IvVVGb6 +g1XqfMIpiRvpb7PO4gWEyS8+eIVibslfwXhjdFjASBgMmTnrpMwatXlajRWc2BQN +9noHV8cigwUtPJslJj0Ys6lDfMjIq2SPDqO/nBudMNva0Bkuqjzx+zOAduTNrRlP +BSeOE6Fuwg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDwzCCAqugAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgjELMAkGA1UEBhMCREUx +KzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnByaXNlIFNlcnZpY2VzIEdtYkgxHzAd +BgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50ZXIxJTAjBgNVBAMMHFQtVGVsZVNl +YyBHbG9iYWxSb290IENsYXNzIDMwHhcNMDgxMDAxMTAyOTU2WhcNMzMxMDAxMjM1 +OTU5WjCBgjELMAkGA1UEBhMCREUxKzApBgNVBAoMIlQtU3lzdGVtcyBFbnRlcnBy +aXNlIFNlcnZpY2VzIEdtYkgxHzAdBgNVBAsMFlQtU3lzdGVtcyBUcnVzdCBDZW50 +ZXIxJTAjBgNVBAMMHFQtVGVsZVNlYyBHbG9iYWxSb290IENsYXNzIDMwggEiMA0G +CSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQC9dZPwYiJvJK7genasfb3ZJNW4t/zN +8ELg63iIVl6bmlQdTQyK9tPPcPRStdiTBONGhnFBSivwKixVA9ZIw+A5OO3yXDw/ +RLyTPWGrTs0NvvAgJ1gORH8EGoel15YUNpDQSXuhdfsaa3Ox+M6pCSzyU9XDFES4 +hqX2iys52qMzVNn6chr3IhUciJFrf2blw2qAsCTz34ZFiP0Zf3WHHx+xGwpzJFu5 +ZeAsVMhg02YXP+HMVDNzkQI6pn97djmiH5a2OK61yJN0HZ65tOVgnS9W0eDrXltM +EnAMbEQgqxHY9Bn20pxSN+f6tsIxO0rUFJmtxxr1XV/6B7h8DR/Wgx6zAgMBAAGj +QjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBS1 +A/d2O2GCahKqGFPrAyGUv/7OyjANBgkqhkiG9w0BAQsFAAOCAQEAVj3vlNW92nOy +WL6ukK2YJ5f+AbGwUgC4TeQbIXQbfsDuXmkqJa9c1h3a0nnJ85cp4IaH3gRZD/FZ +1GSFS5mvJQQeyUapl96Cshtwn5z2r3Ex3XsFpSzTucpH9sry9uetuUg/vBa3wW30 +6gmv7PO15wWeph6KU1HWk4HMdJP2udqmJQV0eVp+QD6CSyYRMG7hP0HHRwA11fXT +91Q+gT3aSWqas+8QPebrb9HIIkfLzM8BMZLZGOMivgkeGj5asuRrDFR6fUNOuIml +e9eiPZaGzPImNC1qkp2aGtAw4l1OBLBfiyB+d8E9lYLRRpo7PHi4b6HQDWSieB4p +TpPDpFQUWw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGHDCCBASgAwIBAgIES45gAzANBgkqhkiG9w0BAQsFADBFMQswCQYDVQQGEwJE +SzESMBAGA1UEChMJVFJVU1QyNDA4MSIwIAYDVQQDExlUUlVTVDI0MDggT0NFUyBQ +cmltYXJ5IENBMB4XDTEwMDMwMzEyNDEzNFoXDTM3MTIwMzEzMTEzNFowRTELMAkG +A1UEBhMCREsxEjAQBgNVBAoTCVRSVVNUMjQwODEiMCAGA1UEAxMZVFJVU1QyNDA4 +IE9DRVMgUHJpbWFyeSBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB +AJlJodr3U1Fa+v8HnyACHV81/wLevLS0KUk58VIABl6Wfs3LLNoj5soVAZv4LBi5 +gs7E8CZ9w0F2CopW8vzM8i5HLKE4eedPdnaFqHiBZ0q5aaaQArW+qKJx1rT/AaXt +alMB63/yvJcYlXS2lpexk5H/zDBUXeEQyvfmK+slAySWT6wKxIPDwVapauFY9QaG ++VBhCa5jBstWS7A5gQfEvYqn6csZ3jW472kW6OFNz6ftBcTwufomGJBMkonf4ZLr +6t0AdRi9jflBPz3MNNRGxyjIuAmFqGocYFA/OODBRjvSHB2DygqQ8k+9tlpvzMRr +kU7jq3RKL+83G1dJ3/LTjCLz4ryEMIC/OJ/gNZfE0qXddpPtzflIPtUFVffXdbFV +1t6XZFhJ+wBHQCpJobq/BjqLWUA86upsDbfwnePtmIPRCemeXkY0qabC+2Qmd2Fe +xyZphwTyMnbqy6FG1tB65dYf3mOqStmLa3RcHn9+2dwNfUkh0tjO2FXD7drWcU0O +I9DW8oAypiPhm/QCjMU6j6t+0pzqJ/S0tdAo+BeiXK5hwk6aR+sRb608QfBbRAs3 +U/q8jSPByenggac2BtTN6cl+AA1Mfcgl8iXWNFVGegzd/VS9vINClJCe3FNVoUnR +YCKkj+x0fqxvBLopOkJkmuZw/yhgMxljUi2qYYGn90OzAgMBAAGjggESMIIBDjAP +BgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjARBgNVHSAECjAIMAYGBFUd +IAAwgZcGA1UdHwSBjzCBjDAsoCqgKIYmaHR0cDovL2NybC5vY2VzLnRydXN0MjQw +OC5jb20vb2Nlcy5jcmwwXKBaoFikVjBUMQswCQYDVQQGEwJESzESMBAGA1UEChMJ +VFJVU1QyNDA4MSIwIAYDVQQDExlUUlVTVDI0MDggT0NFUyBQcmltYXJ5IENBMQ0w +CwYDVQQDEwRDUkwxMB8GA1UdIwQYMBaAFPZt+LFIs0FDAduGROUYBbdezAY3MB0G +A1UdDgQWBBT2bfixSLNBQwHbhkTlGAW3XswGNzANBgkqhkiG9w0BAQsFAAOCAgEA +VPAQGrT7dIjD3/sIbQW86f9CBPu0c7JKN6oUoRUtKqgJ2KCdcB5ANhCoyznHpu3m +/dUfVUI5hc31CaPgZyY37hch1q4/c9INcELGZVE/FWfehkH+acpdNr7j8UoRZlkN +15b/0UUBfGeiiJG/ugo4llfoPrp8bUmXEGggK3wyqIPcJatPtHwlb6ympfC2b/Ld +v/0IdIOzIOm+A89Q0utx+1cOBq72OHy8gpGb6MfncVFMoL2fjP652Ypgtr8qN9Ka +/XOazktiIf+2Pzp7hLi92hRc9QMYexrV/nnFSQoWdU8TqULFUoZ3zTEC3F/g2yj+ +FhbrgXHGo5/A4O74X+lpbY2XV47aSuw+DzcPt/EhMj2of7SA55WSgbjPMbmNX0rb +oenSIte2HRFW5Tr2W+qqkc/StixgkKdyzGLoFx/xeTWdJkZKwyjqge2wJqws2upY +EiThhC497+/mTiSuXd69eVUwKyqYp9SD2rTtNmF6TCghRM/dNsJOl+osxDVGcwvt +WIVFF/Onlu5fu1NHXdqNEfzldKDUvCfii3L2iATTZyHwU9CALE+2eIA+PIaLgnM1 +1oCfUnYBkQurTrihvzz9PryCVkLxiqRmBVvUz+D4N5G/wvvKDS6t6cPCS+hqM482 +cbBsn0R9fFLO4El62S9eH1tqOzO20OAOK65yJIsOpSE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFQTCCAymgAwIBAgICDL4wDQYJKoZIhvcNAQELBQAwUTELMAkGA1UEBhMCVFcx +EjAQBgNVBAoTCVRBSVdBTi1DQTEQMA4GA1UECxMHUm9vdCBDQTEcMBoGA1UEAxMT +VFdDQSBHbG9iYWwgUm9vdCBDQTAeFw0xMjA2MjcwNjI4MzNaFw0zMDEyMzExNTU5 +NTlaMFExCzAJBgNVBAYTAlRXMRIwEAYDVQQKEwlUQUlXQU4tQ0ExEDAOBgNVBAsT +B1Jvb3QgQ0ExHDAaBgNVBAMTE1RXQ0EgR2xvYmFsIFJvb3QgQ0EwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCwBdvI64zEbooh745NnHEKH1Jw7W2CnJfF +10xORUnLQEK1EjRsGcJ0pDFfhQKX7EMzClPSnIyOt7h52yvVavKOZsTuKwEHktSz +0ALfUPZVr2YOy+BHYC8rMjk1Ujoog/h7FsYYuGLWRyWRzvAZEk2tY/XTP3VfKfCh +MBwqoJimFb3u/Rk28OKRQ4/6ytYQJ0lM793B8YVwm8rqqFpD/G2Gb3PpN0Wp8DbH +zIh1HrtsBv+baz4X7GGqcXzGHaL3SekVtTzWoWH1EfcFbx39Eb7QMAfCKbAJTibc +46KokWofwpFFiFzlmLhxpRUZyXx1EcxwdE8tmx2RRP1WKKD+u4ZqyPpcC1jcxkt2 +yKsi2XMPpfRaAok/T54igu6idFMqPVMnaR1sjjIsZAAmY2E2TqNGtz99sy2sbZCi +laLOz9qC5wc0GZbpuCGqKX6mOL6OKUohZnkfs8O1CWfe1tQHRvMq2uYiN2DLgbYP +oA/pyJV/v1WRBXrPPRXAb94JlAGD1zQbzECl8LibZ9WYkTunhHiVJqRaCPgrdLQA +BDzfuBSO6N+pjWxnkjMdwLfS7JLIvgm/LCkFbwJrnu+8vyq8W8BQj0FwcYeyTbcE +qYSjMq+u7msXi7Kx/mzhkIyIqJdIzshNy/MGz19qCkKxHh53L46g5pIOBvwFItIm +4TFRfTLcDwIDAQABoyMwITAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB +/zANBgkqhkiG9w0BAQsFAAOCAgEAXzSBdu+WHdXltdkCY4QWwa6gcFGn90xHNcgL +1yg9iXHZqjNB6hQbbCEAwGxCGX6faVsgQt+i0trEfJdLjbDorMjupWkEmQqSpqsn +LhpNgb+E1HAerUf+/UqdM+DyucRFCCEK2mlpc3INvjT+lIutwx4116KD7+U4x6WF +H6vPNOw/KP4M8VeGTslV9xzU2KV9Bnpv1d8Q34FOIWWxtuEXeZVFBs5fzNxGiWNo +RI2T9GRwoD2dKAXDOXC4Ynsg/eTb6QihuJ49CcdP+yz4k3ZB3lLg4VfSnQO8d57+ +nile98FRYB/e2guyLXW3Q0iT5/Z5xoRdgFlglPx4mI88k1HtQJAH32RjJMtOcQWh +15QaiDLxInQirqWm2BJpTGCjAu4r7NRjkgtevi92a6O2JryPA9gK8kxkRr05YuWW +6zRjESjMlfGt7+/cgFhI6Uu46mWs6fyAtbXIRfmswZ/ZuepiiI7E8UuDEq3mi4TW +nsLrgxifarsbJGAzcMzs9zLzXNl5fe+epP7JI8Mk7hWSsT2RTyaGvWZzJBPqpK5j +wa19hAM8EHiGG3njxPPyBJUgriOCxLM6AGK/5jYk4Ve6xx6QddVfP5VhK8E7zeWz +aGHQRiapIVJpLesux+t3zqY6tQMzT3bR51xUAV3LePTJDL/PEo4XLSNolOer/qmy +KwbQBM0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFSzCCAzOgAwIBAgIRALZLiAfiI+7IXBKtpg4GofIwDQYJKoZIhvcNAQELBQAw +PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp +Y2F0aW9uIEF1dGhvcml0eTAeFw0xMjA5MjgwODU4NTFaFw0zNzEyMzExNTU5NTla +MD8xCzAJBgNVBAYTAlRXMTAwLgYDVQQKDCdHb3Zlcm5tZW50IFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC +AQC2/5c8gb4BWCQnr44BK9ZykjAyG1+bfNTUf+ihYHMwVxAA+lCWJP5Q5ow6ldFX +eYTVZ1MMKoI+GFy4MCYa1l7GLbIEUQ7v3wxjR+vEEghRK5lxXtVpe+FdyXcdIOxW +juVhYC386RyA3/pqg7sFtR4jEpyCygrzFB0g5AaPQySZn7YKk1pzGxY5vgW28Yyl +ZJKPBeRcdvc5w88tvQ7Yy6gOMZvJRg9nU0MEj8iyyIOAX7ryD6uBNaIgIZfOD4k0 +eA/PH07p+4woPN405+2f0mb1xcoxeNLOUNFggmOd4Ez3B66DNJ1JSUPUfr0t4urH +cWWACOQ2nnlwCjyHKenkkpTqBpIpJ3jmrdc96QoLXvTg1oadLXLLi2RW5vSueKWg +OTNYPNyoj420ai39iHPplVBzBN8RiD5C1gJ0+yzEb7xs1uCAb9GGpTJXA9ZN9E4K +mSJ2fkpAgvjJ5E7LUy3Hsbbi08J1J265DnGyNPy/HE7CPfg26QrMWJqhGIZO4uGq +s3NZbl6dtMIIr69c/aQCb/+4DbvVq9dunxpPkUDwH0ZVbaCSw4nNt7H/HLPLo5wK +4/7NqrwB7N1UypHdTxOHpPaY7/1J1lcqPKZc9mA3v9g+fk5oKiMyOr5u5CI9ByTP +isubXVGzMNJxbc5Gim18SjNE2hIvNkvy6fFRCW3bapcOFwIDAQABo0IwQDAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBTVZx3gnHosnMvFmOcdByYqhux0zTAOBgNV +HQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQELBQADggIBAJA75cJTQijq9TFOjj2Rnk0J +89ixUuZPrAwxIbvx6pnMg/y2KOTshAcOD06Xu29oRo8OURWV+Do7H1+CDgxxDryR +T64zLiNB9CZrTxOH+nj2LsIPkQWXqmrBap+8hJ4IKifd2ocXhuGzyl3tOKkpboTe +Rmv8JxlQpRJ6jH1i/NrnzLyfSa8GuCcn8on3Fj0Y5r3e9YwSkZ/jBI3+BxQaWqw5 +ghvxOBnhY+OvbLamURfr+kvriyL2l/4QOl+UoEtTcT9a4RD4co+WgN2NApgAYT2N +vC2xR8zaXeEgp4wxXPHj2rkKhkfIoT0Hozymc26Uke1uJDr5yTDRB6iBfSZ9fYTf +hsmL5a4NHr6JSFEVg5iWL0rrczTXdM3Jb9DCuiv2mv6Z3WAUjhv5nDk8f0OJU+jl +wqu+Iq0nOJt3KLejY2OngeepaUXrjnhWzAWEx/uttjB8YwWfLYwkf0uLkvw4Hp+g +pVezbp3YZLhwmmBScMip0P/GnO0QYV7Ngw5u6E0CQUridgR51lQ/ipgyFKDdLZzn +uoJxo4ZVKZnSKdt1OvfbQ/+2W/u3fjWAjg1srnm3Ni2XUqGwB5wH5Ss2zQOXlL0t +DjQG/MAWifw3VOTWzz0TBPKR2ck2Lj7FWtClTILD/y58Jnb38/1FoqVuVa4uzM8s +iTTa9g3nkagQ6hed8vbs +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFODCCAyCgAwIBAgIRAJW+FqD3LkbxezmCcvqLzZYwDQYJKoZIhvcNAQEFBQAw +NzEUMBIGA1UECgwLVGVsaWFTb25lcmExHzAdBgNVBAMMFlRlbGlhU29uZXJhIFJv +b3QgQ0EgdjEwHhcNMDcxMDE4MTIwMDUwWhcNMzIxMDE4MTIwMDUwWjA3MRQwEgYD +VQQKDAtUZWxpYVNvbmVyYTEfMB0GA1UEAwwWVGVsaWFTb25lcmEgUm9vdCBDQSB2 +MTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMK+6yfwIaPzaSZVfp3F +VRaRXP3vIb9TgHot0pGMYzHw7CTww6XScnwQbfQ3t+XmfHnqjLWCi65ItqwA3GV1 +7CpNX8GH9SBlK4GoRz6JI5UwFpB/6FcHSOcZrr9FZ7E3GwYq/t75rH2D+1665I+X +Z75Ljo1kB1c4VWk0Nj0TSO9P4tNmHqTPGrdeNjPUtAa9GAH9d4RQAEX1jF3oI7x+ +/jXh7VB7qTCNGdMJjmhnXb88lxhTuylixcpecsHHltTbLaC0H2kD7OriUPEMPPCs +81Mt8Bz17Ww5OXOAFshSsCPN4D7c3TxHoLs1iuKYaIu+5b9y7tL6pe0S7fyYGKkm +dtwoSxAgHNN/Fnct7W+A90m7UwW7XWjH1Mh1Fj+JWov3F0fUTPHSiXk+TT2YqGHe +Oh7S+F4D4MHJHIzTjU3TlTazN19jY5szFPAtJmtTfImMMsJu7D0hADnJoWjiUIMu +sDor8zagrC/kb2HCUQk5PotTubtn2txTuXZZNp1D5SDgPTJghSJRt8czu90VL6R4 +pgd7gUY2BIbdeTXHlSw7sKMXNeVzH7RcWe/a6hBle3rQf5+ztCo3O3CLm1u5K7fs +slESl1MpWtTwEhDcTwK7EpIvYtQ/aUN8Ddb8WHUBiJ1YFkveupD/RwGJBmr2X7KQ +arMCpgKIv7NHfirZ1fpoeDVNAgMBAAGjPzA9MA8GA1UdEwEB/wQFMAMBAf8wCwYD +VR0PBAQDAgEGMB0GA1UdDgQWBBTwj1k4ALP1j5qWDNXr+nuqF+gTEjANBgkqhkiG +9w0BAQUFAAOCAgEAvuRcYk4k9AwI//DTDGjkk0kiP0Qnb7tt3oNmzqjMDfz1mgbl +dxSR651Be5kqhOX//CHBXfDkH1e3damhXwIm/9fH907eT/j3HEbAek9ALCI18Bmx +0GtnLLCo4MBANzX2hFxc469CeP6nyQ1Q6g2EdvZR74NTxnr/DlZJLo961gzmJ1Tj +TQpgcmLNkQfWpb/ImWvtxBnmq0wROMVvMeJuScg/doAmAyYp4Db29iBT4xdwNBed +Y2gea+zDTYa4EzAvXUYNR0PVG6pZDrlcjQZIrXSHX8f8MVRBE+LHIQ6e4B4N4cB7 +Q4WQxYpYxmUKeFfyxiMPAdkgS94P+5KFdSpcc41teyWRyu5FrgZLAMzTsVlQ2jqI +OylDRl6XK1TOU2+NSueW+r9xDkKLfP0ooNBIytrEgUy7onOTJsjrDNYmiLbAJM+7 +vVvrdX3pCI6GMyx5dwlppYn8s3CQh3aP0yK7Qs69cwsgJirQmz1wHiRszYd2qReW +t88NkvuOGKmYSdGe/mBEciG5Ge3C9THxOUiIkCR1VBatzvT4aRRkOfujuLpwQMcn +HL/EVlP6Y2XQ8xwOFvVrhlhNGNTkDY6lnVuR3HYkUD/GKvvZt5y11ubQ2egZixVx +SK236thZiNSQvxaz2emsWWFUyBy6ysHK4bkgTI86k4mloMy/0/Z1pHWWbVY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDZzCCAk+gAwIBAgIQGx+ttiD5JNM2a/fH8YygWTANBgkqhkiG9w0BAQUFADBF +MQswCQYDVQQGEwJHQjEYMBYGA1UEChMPVHJ1c3RpcyBMaW1pdGVkMRwwGgYDVQQL +ExNUcnVzdGlzIEZQUyBSb290IENBMB4XDTAzMTIyMzEyMTQwNloXDTI0MDEyMTEx +MzY1NFowRTELMAkGA1UEBhMCR0IxGDAWBgNVBAoTD1RydXN0aXMgTGltaXRlZDEc +MBoGA1UECxMTVHJ1c3RpcyBGUFMgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAMVQe547NdDfxIzNjpvto8A2mfRC6qc+gIMPpqdZh8mQRUN+ +AOqGeSoDvT03mYlmt+WKVoaTnGhLaASMk5MCPjDSNzoiYYkchU59j9WvezX2fihH +iTHcDnlkH5nSW7r+f2C/revnPDgpai/lkQtV/+xvWNUtyd5MZnGPDNcE2gfmHhjj +vSkCqPoc4Vu5g6hBSLwacY3nYuUtsuvffM/bq1rKMfFMIvMFE/eC+XN5DL7XSxzA +0RU8k0Fk0ea+IxciAIleH2ulrG6nS4zto3Lmr2NNL4XSFDWaLk6M6jKYKIahkQlB +OrTh4/L68MkKokHdqeMDx4gVOxzUGpTXn2RZEm0CAwEAAaNTMFEwDwYDVR0TAQH/ +BAUwAwEB/zAfBgNVHSMEGDAWgBS6+nEleYtXQSUhhgtx67JkDoshZzAdBgNVHQ4E +FgQUuvpxJXmLV0ElIYYLceuyZA6LIWcwDQYJKoZIhvcNAQEFBQADggEBAH5Y//01 +GX2cGE+esCu8jowU/yyg2kdbw++BLa8F6nRIW/M+TgfHbcWzk88iNVy2P3UnXwmW +zaD+vkAMXBJV+JOCyinpXj9WV4s4NvdFGkwozZ5BuO1WTISkQMi4sKUraXAEasP4 +1BIy+Q7DsdwyhEQsb8tGD+pmQQ9P8Vilpg0ND2HepZ5dfWWhPBfnqFVO76DH7cZE +f1T1o+CP8HxVIo8ptoGj4W1OLBuAZ+ytIJ8MYmHVl/9D7S3B2l0pKoU/rGXuhg8F +jZBf3+6f9L/uHfuY5H+QK4R4EA5sSVPvFVtlRkpdr7r7OnIdzfYliB6XzCGcKQEN +ZetX2fNXlrtIzYE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx +MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg +Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ +iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa +/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ +jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI +HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7 +sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w +gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF +MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw +KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG +AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L +URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO +H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm +I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY +iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc +f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI +MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x +FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz +MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv +cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz +Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO +0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao +wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj +7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS +8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT +BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB +/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg +JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC +NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3 +6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/ +3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm +D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS +CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR +3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFFzCCA/+gAwIBAgIBETANBgkqhkiG9w0BAQUFADCCASsxCzAJBgNVBAYTAlRS +MRgwFgYDVQQHDA9HZWJ6ZSAtIEtvY2FlbGkxRzBFBgNVBAoMPlTDvHJraXllIEJp +bGltc2VsIHZlIFRla25vbG9qaWsgQXJhxZ90xLFybWEgS3VydW11IC0gVMOcQsSw +VEFLMUgwRgYDVQQLDD9VbHVzYWwgRWxla3Ryb25payB2ZSBLcmlwdG9sb2ppIEFy +YcWfdMSxcm1hIEVuc3RpdMO8c8O8IC0gVUVLQUUxIzAhBgNVBAsMGkthbXUgU2Vy +dGlmaWthc3lvbiBNZXJrZXppMUowSAYDVQQDDEFUw5xCxLBUQUsgVUVLQUUgS8O2 +ayBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsSAtIFPDvHLDvG0gMzAe +Fw0wNzA4MjQxMTM3MDdaFw0xNzA4MjExMTM3MDdaMIIBKzELMAkGA1UEBhMCVFIx +GDAWBgNVBAcMD0dlYnplIC0gS29jYWVsaTFHMEUGA1UECgw+VMO8cmtpeWUgQmls +aW1zZWwgdmUgVGVrbm9sb2ppayBBcmHFn3TEsXJtYSBLdXJ1bXUgLSBUw5xCxLBU +QUsxSDBGBgNVBAsMP1VsdXNhbCBFbGVrdHJvbmlrIHZlIEtyaXB0b2xvamkgQXJh +xZ90xLFybWEgRW5zdGl0w7xzw7wgLSBVRUtBRTEjMCEGA1UECwwaS2FtdSBTZXJ0 +aWZpa2FzeW9uIE1lcmtlemkxSjBIBgNVBAMMQVTDnELEsFRBSyBVRUtBRSBLw7Zr +IFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxIC0gU8O8csO8bSAzMIIB +IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAim1L/xCIOsP2fpTo6iBkcK4h +gb46ezzb8R1Sf1n68yJMlaCQvEhOEav7t7WNeoMojCZG2E6VQIdhn8WebYGHV2yK +O7Rm6sxA/OOqbLLLAdsyv9Lrhc+hDVXDWzhXcLh1xnnRFDDtG1hba+818qEhTsXO +fJlfbLm4IpNQp81McGq+agV/E5wrHur+R84EpW+sky58K5+eeROR6Oqeyjh1jmKw +lZMq5d/pXpduIF9fhHpEORlAHLpVK/swsoHvhOPc7Jg4OQOFCKlUAwUp8MmPi+oL +hmUZEdPpCSPeaJMDyTYcIW7OjGbxmTDY17PDHfiBLqi9ggtm/oLL4eAagsNAgQID +AQABo0IwQDAdBgNVHQ4EFgQUvYiHyY/2pAoLquvF/pEjnatKijIwDgYDVR0PAQH/ +BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAB18+kmP +NOm3JpIWmgV050vQbTlswyb2zrgxvMTfvCr4N5EY3ATIZJkrGG2AA1nJrvhY0D7t +wyOfaTyGOBye79oneNGEN3GKPEs5z35FBtYt2IpNeBLWrcLTy9LQQfMmNkqblWwM +7uXRQydmwYj3erMgbOqwaSvHIOgMA8RBBZniP+Rr+KCGgceExh/VS4ESshYhLBOh +gLJeDEoTniDYYkCrkOpkSi+sDQESeUWoL4cZaMjihccwsnX5OD+ywJO0a+IDRM5n +oN+J1q2MdqMTw5RhK2vZbMEHCiIHhWyFJEapvj+LeISCfiQMnf2BN+MlqO02TpUs +yZyQ2uypQjyttgI= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFkjCCA3qgAwIBAgIBCDANBgkqhkiG9w0BAQUFADA6MQswCQYDVQQGEwJDTjER +MA8GA1UEChMIVW5pVHJ1c3QxGDAWBgNVBAMTD1VDQSBHbG9iYWwgUm9vdDAeFw0w +ODAxMDEwMDAwMDBaFw0zNzEyMzEwMDAwMDBaMDoxCzAJBgNVBAYTAkNOMREwDwYD +VQQKEwhVbmlUcnVzdDEYMBYGA1UEAxMPVUNBIEdsb2JhbCBSb290MIICIjANBgkq +hkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA2rPlBlA/9nP3xDK/RqUlYjOHsGj+p9+I +A2N9Apb964fJ7uIIu527u+RBj8cwiQ9tJMAEbBSUgU2gDXRm8/CFr/hkGd656YGT +0CiFmUdCSiw8OCdKzP/5bBnXtfPvm65bNAbXj6ITBpyKhELVs6OQaG2BkO5NhOxM +cE4t3iQ5zhkAQ5N4+QiGHUPR9HK8BcBn+sBR0smFBySuOR56zUHSNqth6iur8CBV +mTxtLRwuLnWW2HKX4AzKaXPudSsVCeCObbvaE/9GqOgADKwHLx25urnRoPeZnnRc +GQVmMc8+KlL+b5/zub35wYH1N9ouTIElXfbZlJrTNYsgKDdfUet9Ysepk9H50DTL +qScmLCiQkjtVY7cXDlRzq6987DqrcDOsIfsiJrOGrCOp139tywgg8q9A9f9ER3Hd +J90TKKHqdjn5EKCgTUCkJ7JZFStsLSS3JGN490MYeg9NEePorIdCjedYcaSrbqLA +l3y74xNLytu7awj5abQEctXDRrl36v+6++nwOgw19o8PrgaEFt2UVdTvyie3AzzF +HCYq9TyopZWbhvGKiWf4xwxmse1Bv4KmAGg6IjTuHuvlb4l0T2qqaqhXZ1LUIGHB +zlPL/SR/XybfoQhplqCe/klD4tPq2sTxiDEhbhzhzfN1DiBEFsx9c3Q1RSw7gdQg +7LYJjD5IskkCAwEAAaOBojCBnzALBgNVHQ8EBAMCAQYwDAYDVR0TBAUwAwEB/zBj +BgNVHSUEXDBaBggrBgEFBQcDAQYIKwYBBQUHAwIGCCsGAQUFBwMDBggrBgEFBQcD +BAYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcDBwYIKwYBBQUHAwgGCCsGAQUF +BwMJMB0GA1UdDgQWBBTZw9P4gJJnzF3SOqLXcaK0xDiALTANBgkqhkiG9w0BAQUF +AAOCAgEA0Ih5ygiq9ws0oE4Jwul+NUiJcIQjL1HDKy9e21NrW3UIKlS6Mg7VxnGF +sZdJgPaE0PC6t3GUyHlrpsVE6EKirSUtVy/m1jEp+hmJVCl+t35HNmktbjK81HXa +QnO4TuWDQHOyXd/URHOmYgvbqm4FjMh/Rk85hZCdvBtUKayl1/7lWFZXbSyZoUkh +1WHGjGHhdSTBAd0tGzbDLxLMC9Z4i3WA6UG5iLHKPKkWxk4V43I29tSgQYWvimVw +TbVEEFDs7d9t5tnGwBLxSzovc+k8qe4bqi81pZufTcU0hF8mFGmzI7GJchT46U1R +IgP/SobEHOh7eQrbRyWBfvw0hKxZuFhD5D1DCVR0wtD92e9uWfdyYJl2b/Unp7uD +pEqB7CmB9HdL4UISVdSGKhK28FWbAS7d9qjjGcPORy/AeGEYWsdl/J1GW1fcfA67 +loMQfFUYCQSu0feLKj6g5lDWMDbX54s4U+xJRODPpN/xU3uLWrb2EZBL1nXz/gLz +Ka/wI3J9FO2pXd96gZ6bkiL8HvgBRUGXx2sBYb4zaPKgZYRmvOAqpGjTcezHCN6j +w8k2SjTxF+KAryAhk5Qe5hXTVGLxtTgv48y5ZwSpuuXu+RBuyy5+E6+SFP7zJ3N7 +OPxzbbm5iPZujAv1/P8JDrMtXnt145Ik4ubhWD5LKAN1axibRww= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDhDCCAmygAwIBAgIBCTANBgkqhkiG9w0BAQUFADAzMQswCQYDVQQGEwJDTjER +MA8GA1UEChMIVW5pVHJ1c3QxETAPBgNVBAMTCFVDQSBSb290MB4XDTA0MDEwMTAw +MDAwMFoXDTI5MTIzMTAwMDAwMFowMzELMAkGA1UEBhMCQ04xETAPBgNVBAoTCFVu +aVRydXN0MREwDwYDVQQDEwhVQ0EgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEP +ADCCAQoCggEBALNdB8qGJn1r4vs4CQ7MgsJqGgCiFV/W6dQBt1YDAVmP9ThpJHbC +XivF9iu/r/tB/Q9a/KvXg3BNMJjRnrJ2u5LWu+kQKGkoNkTo8SzXWHwk1n8COvCB +a2FgP/Qz3m3l6ihST/ypHWN8C7rqrsRoRuTej8GnsrZYWm0dLNmMOreIy4XU9+gD +Xv2yTVDo1h//rgI/i0+WITyb1yXJHT/7mLFZ5PCpO6+zzYUs4mBGzG+OoOvwNMXx +QhhgrhLtRnUc5dipllq+3lrWeGeWW5N3UPJuG96WUUqm1ktDdSFmjXfsAoR2XEQQ +th1hbOSjIH23jboPkXXHjd+8AmCoKai9PUMCAwEAAaOBojCBnzALBgNVHQ8EBAMC +AQYwDAYDVR0TBAUwAwEB/zBjBgNVHSUEXDBaBggrBgEFBQcDAQYIKwYBBQUHAwIG +CCsGAQUFBwMDBggrBgEFBQcDBAYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEFBQcD +BwYIKwYBBQUHAwgGCCsGAQUFBwMJMB0GA1UdDgQWBBTbHzXza0z/QjFkm827Wh4d +SBC37jANBgkqhkiG9w0BAQUFAAOCAQEAOGy3iPGt+lg3dNHocN6cJ1nL5BXXoMNg +14iABMUwTD3UGusGXllH5rxmy+AI/Og17GJ9ysDawXiv5UZv+4mCI4/211NmVaDe +JRI7cTYWVRJ2+z34VFsxugAG+H1V5ad2g6pcSpemKijfvcZsCyOVjjN/Hl5AHxNU +LJzltQ7dFyiuawHTUin1Ih+QOfTcYmjwPIZH7LgFRbu3DJaUxmfLI3HQjnQi1kHr +A6i26r7EARK1s11AdgYg1GS4KUYGis4fk5oQ7vuqWrTcL9Ury/bXBYSYBZELhPc9 ++tb5evosFeo2gkO3t7jj83EB7UNDogVFwygFBzXjAaU4HoDU18PZ3g== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB +rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt +Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa +Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV +BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l +dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE +AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B +YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9 +hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l +L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm +SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM +1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws +6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud +DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw +Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50 +aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH +AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u +7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0 +xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ +rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim +eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk +USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB +lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt +SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG +A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe +MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v +d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh +cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn +0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ +M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a +MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd +oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI +DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy +oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD +VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0 +dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy +bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF +BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM +//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli +CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE +CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t +3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS +KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB +ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt +TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1 +NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0 +IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD +VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS +Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB +DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2 +N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH +iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe +YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1 +axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g +yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD +AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh +ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V +VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB +BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y +IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs +QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4 +ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM +YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb +QErNaLly7HF27FSOH4UMAWr6pjisH8SE +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEZjCCA06gAwIBAgIQRL4Mi1AAJLQR0zYt4LNfGzANBgkqhkiG9w0BAQUFADCB +lTELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHTAbBgNVBAMTFFVUTi1VU0VSRmlyc3Qt +T2JqZWN0MB4XDTk5MDcwOTE4MzEyMFoXDTE5MDcwOTE4NDAzNlowgZUxCzAJBgNV +BAYTAlVTMQswCQYDVQQIEwJVVDEXMBUGA1UEBxMOU2FsdCBMYWtlIENpdHkxHjAc +BgNVBAoTFVRoZSBVU0VSVFJVU1QgTmV0d29yazEhMB8GA1UECxMYaHR0cDovL3d3 +dy51c2VydHJ1c3QuY29tMR0wGwYDVQQDExRVVE4tVVNFUkZpcnN0LU9iamVjdDCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6qgT+jo2F4qjEAVZURnicP +HxzfOpuCaDDASmEd8S8O+r5596Uj71VRloTN2+O5bj4x2AogZ8f02b+U60cEPgLO +KqJdhwQJ9jCdGIqXsqoc/EHSoTbL+z2RuufZcDX65OeQw5ujm9M89RKZd7G3CeBo +5hy485RjiGpq/gt2yb70IuRnuasaXnfBhQfdDWy/7gbHd2pBnqcP1/vulBe3/IW+ +pKvEHDHd17bR5PDv3xaPslKT16HUiaEHLr/hARJCHhrh2JU022R5KP+6LhHC5ehb +kkj7RwvCbNqtMoNB86XlQXD9ZZBt+vpRxPm9lisZBCzTbafc8H9vg2XiaquHhnUC +AwEAAaOBrzCBrDALBgNVHQ8EBAMCAcYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E +FgQU2u1kdBScFDyr3ZmpvVsoTYs8ydgwQgYDVR0fBDswOTA3oDWgM4YxaHR0cDov +L2NybC51c2VydHJ1c3QuY29tL1VUTi1VU0VSRmlyc3QtT2JqZWN0LmNybDApBgNV +HSUEIjAgBggrBgEFBQcDAwYIKwYBBQUHAwgGCisGAQQBgjcKAwQwDQYJKoZIhvcN +AQEFBQADggEBAAgfUrE3RHjb/c652pWWmKpVZIC1WkDdIaXFwfNfLEzIR1pp6ujw +NTX00CXzyKakh0q9G7FzCL3Uw8q2NbtZhncxzaeAFK4T7/yxSPlrJSUtUbYsbUXB +mMiKVl0+7kNOPmsnjtA6S4ULX9Ptaqd1y9Fahy85dRNacrACgZ++8A+EVCBibGnU +4U3GDZlDAQ0Slox4nb9QorFEqmrPF3rPbw/U+CRVX/A0FklmPlBGyWNxODFiuGK5 +81OtbLUrohKqGU8J2l7nk8aOFAj+8DCAGKCGhU3IfdeLA/5u1fedFqySLKAj5ZyR +Uh+U3xeUc8OzwcFxBSAAeL0TUh2oPs0AH8g= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB +kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug +Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho +dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw +IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG +EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD +VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu +dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN +BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6 +E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ +D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK +4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq +lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW +bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB +o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT +MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js +LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr +BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB +AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft +Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj +j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH +KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv +2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3 +mfnGV/TJVTl4uix5yaaIK/QI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM +MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD +QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E +jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo +ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI +ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu +Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg +AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7 +HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA +uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa +TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg +xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q +CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x +O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs +6GAqm4VKQPNriiTsBhYscw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDhDCCAwqgAwIBAgIQL4D+I4wOIg9IZxIokYesszAKBggqhkjOPQQDAzCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzQwHhcNMDcxMTA1MDAwMDAwWhcNMzgwMTE4MjM1OTU5WjCByjELMAkG +A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZWZXJp +U2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNyBWZXJpU2lnbiwg +SW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJpU2ln +biBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5 +IC0gRzQwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAASnVnp8Utpkmw4tXNherJI9/gHm +GUo9FANL+mAnINmDiWn6VMaaGF5VKmTeBvaNSjutEDxlPZCIBIngMGGzrl0Bp3ve +fLK+ymVhAIau2o970ImtTR1ZmkGxvEeA3J5iw/mjgbIwga8wDwYDVR0TAQH/BAUw +AwEB/zAOBgNVHQ8BAf8EBAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJ +aW1hZ2UvZ2lmMCEwHzAHBgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYj +aHR0cDovL2xvZ28udmVyaXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFLMW +kf3upm7ktS5Jj4d4gYDs5bG1MAoGCCqGSM49BAMDA2gAMGUCMGYhDBgmYFo4e1ZC +4Kf8NoRRkSAsdk1DPcQdhCPQrNZ8NQbOzWm9kA3bbEhCHQ6qQgIxAJw9SDkjOVga +FRJZap7v1VmyHVIsmXHNxynfGyphe3HR3vPA5Q06Sqotp9iGKt0uEA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEuTCCA6GgAwIBAgIQQBrEZCGzEyEDDrvkEhrFHTANBgkqhkiG9w0BAQsFADCB +vTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwOCBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MTgwNgYDVQQDEy9W +ZXJpU2lnbiBVbml2ZXJzYWwgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe +Fw0wODA0MDIwMDAwMDBaFw0zNzEyMDEyMzU5NTlaMIG9MQswCQYDVQQGEwJVUzEX +MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0 +IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAyMDA4IFZlcmlTaWduLCBJbmMuIC0gRm9y +IGF1dGhvcml6ZWQgdXNlIG9ubHkxODA2BgNVBAMTL1ZlcmlTaWduIFVuaXZlcnNh +bCBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEF +AAOCAQ8AMIIBCgKCAQEAx2E3XrEBNNti1xWb/1hajCMj1mCOkdeQmIN65lgZOIzF +9uVkhbSicfvtvbnazU0AtMgtc6XHaXGVHzk8skQHnOgO+k1KxCHfKWGPMiJhgsWH +H26MfF8WIFFE0XBPV+rjHOPMee5Y2A7Cs0WTwCznmhcrewA3ekEzeOEz4vMQGn+H +LL729fdC4uW/h2KJXwBL38Xd5HVEMkE6HnFuacsLdUYI0crSK5XQz/u5QGtkjFdN +/BMReYTtXlT2NJ8IAfMQJQYXStrxHXpma5hgZqTZ79IugvHw7wnqRMkVauIDbjPT +rJ9VAMf2CGqUuV/c4DPxhGD5WycRtPwW8rtWaoAljQIDAQABo4GyMIGvMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMG0GCCsGAQUFBwEMBGEwX6FdoFsw +WTBXMFUWCWltYWdlL2dpZjAhMB8wBwYFKw4DAhoEFI/l0xqGrI2Oa8PPgGrUSBgs +exkuMCUWI2h0dHA6Ly9sb2dvLnZlcmlzaWduLmNvbS92c2xvZ28uZ2lmMB0GA1Ud +DgQWBBS2d/ppSEefUxLVwuoHMnYH0ZcHGTANBgkqhkiG9w0BAQsFAAOCAQEASvj4 +sAPmLGd75JR3Y8xuTPl9Dg3cyLk1uXBPY/ok+myDjEedO2Pzmvl2MpWRsXe8rJq+ +seQxIcaBlVZaDrHC1LGmWazxY8u4TB1ZkErvkBYoH1quEPuBUDgMbMzxPcP1Y+Oz +4yHJJDnp/RVmRvQbEdBNc6N9Rvk97ahfYtTxP/jgdFcrGJ2BtMQo2pSXpXDrrB2+ +BxHw1dvd5Yzw1TKwg+ZX4o+/vqGqvz0dtdQ46tewXDpPaj+PwGZsY6rp2aQW9IHR +lRQOfc2VNNnSj3BzgXucfr2YYdhFh5iQxeuGMMY1v/D/w1WIg0vvBZIGcfK4mJO3 +7M2CYfE45k+XmCpajQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB +yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL +ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp +U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW +ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0 +aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL +MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW +ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln +biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp +U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y +aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1 +nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex +t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz +SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG +BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+ +rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/ +NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E +BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH +BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy +aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv +MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE +p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y +5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK +WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ +4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N +hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID+TCCAuGgAwIBAgIQW1fXqEywr9nTb0ugMbTW4jANBgkqhkiG9w0BAQUFADB5 +MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl +cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xKjAoBgNVBAMTIVZpc2EgSW5m +b3JtYXRpb24gRGVsaXZlcnkgUm9vdCBDQTAeFw0wNTA2MjcxNzQyNDJaFw0yNTA2 +MjkxNzQyNDJaMHkxCzAJBgNVBAYTAlVTMQ0wCwYDVQQKEwRWSVNBMS8wLQYDVQQL +EyZWaXNhIEludGVybmF0aW9uYWwgU2VydmljZSBBc3NvY2lhdGlvbjEqMCgGA1UE +AxMhVmlzYSBJbmZvcm1hdGlvbiBEZWxpdmVyeSBSb290IENBMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAyREA4R/QkkfpLx0cYjga/EhIPZpchH0MZsRZ +FfP6C2ITtf/Wc+MtgD4yTK0yoiXvni3d+aCtEgK3GDvkdgYrgF76ROJFZwUQjQ9l +x42gRT05DbXvWFoy7dTglCZ9z/Tt2Cnktv9oxKgmkeHY/CyfpCBg1S8xth2JlGMR +0ug/GMO5zANuegZOv438p5Lt5So+du2Gl+RMFQqEPwqN5uJSqAe0VtmB4gWdQ8on +Bj2ZAM2R73QW7UW0Igt2vA4JaSiNtaAG/Y/58VXWHGgbq7rDtNK1R30X0kJV0rGA +ib3RSwB3LpG7bOjbIucV5mQgJoVjoA1e05w6g1x/KmNTmOGRVwIDAQABo30wezAP +BgNVHRMBAf8EBTADAQH/MDkGA1UdIAQyMDAwLgYFZ4EDAgEwJTAVBggrBgEFBQcC +ARYJMS4yLjMuNC41MAwGCCsGAQUFBwICMAAwDgYDVR0PAQH/BAQDAgEGMB0GA1Ud +DgQWBBRPitp2/2d3I5qmgH1924h1hfeBejANBgkqhkiG9w0BAQUFAAOCAQEACUW1 +QdUHdDJydgDPmYt+telnG/Su+DPaf1cregzlN43bJaJosMP7NwjoJY/H2He4XLWb +5rXEkl+xH1UyUwF7mtaUoxbGxEvt8hPZSTB4da2mzXgwKvXuHyzF5Qjy1hOB0/pS +WaF9ARpVKJJ7TOJQdGKBsF2Ty4fSCLqZLgfxbqwMsd9sysXI3rDXjIhekqvbgeLz +PqZr+pfgFhwCCLSMQWl5Ll3u7Qk9wR094DZ6jj6+JCVCRUS3HyabH4OlM0Vc2K+j +INsF/64Or7GNtRf9HYEJvrPxHINxl3JVwhYj4ASeaO4KwhVbwtw94Tc/XrGcexDo +c5lC3rAi4/UZqweYCw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr +MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl +cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv +bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw +CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h +dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l +cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h +2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E +lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV +ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq +299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t +vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL +dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD +AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF +AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR +zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3 +LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd +7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw +++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt +398znM/jra6O1I7mT1GvFpLgXPYHDw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtTCCAp2gAwIBAgIQdrEgUnTwhYdGs/gjGvbCwDANBgkqhkiG9w0BAQsFADBt +MQswCQYDVQQGEwJDSDEQMA4GA1UEChMHV0lTZUtleTEiMCAGA1UECxMZT0lTVEUg +Rm91bmRhdGlvbiBFbmRvcnNlZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9i +YWwgUm9vdCBHQiBDQTAeFw0xNDEyMDExNTAwMzJaFw0zOTEyMDExNTEwMzFaMG0x +CzAJBgNVBAYTAkNIMRAwDgYDVQQKEwdXSVNlS2V5MSIwIAYDVQQLExlPSVNURSBG +b3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBXSVNlS2V5IEdsb2Jh +bCBSb290IEdCIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2Be3 +HEokKtaXscriHvt9OO+Y9bI5mE4nuBFde9IllIiCFSZqGzG7qFshISvYD06fWvGx +WuR51jIjK+FTzJlFXHtPrby/h0oLS5daqPZI7H17Dc0hBt+eFf1Biki3IPShehtX +1F1Q/7pn2COZH8g/497/b1t3sWtuuMlk9+HKQUYOKXHQuSP8yYFfTvdv37+ErXNk +u7dCjmn21HYdfp2nuFeKUWdy19SouJVUQHMD9ur06/4oQnc/nSMbsrY9gBQHTC5P +99UKFg29ZkM3fiNDecNAhvVMKdqOmq0NpQSHiB6F4+lT1ZvIiwNjeOvgGUpuuy9r +M2RYk61pv48b74JIxwIDAQABo1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUw +AwEB/zAdBgNVHQ4EFgQUNQ/INmNe4qPs+TtmFc5RUuORmj0wEAYJKwYBBAGCNxUB +BAMCAQAwDQYJKoZIhvcNAQELBQADggEBAEBM+4eymYGQfp3FsLAmzYh7KzKNbrgh +cViXfa43FK8+5/ea4n32cZiZBKpDdHij40lhPnOMTZTg+XHEthYOU3gf1qKHLwI5 +gSk8rxWYITD+KJAAjNHhy/peyP34EEY7onhCkRd0VQreUGdNZtGn//3ZwLWoo4rO +ZvUPQ82nK1d7Y0Zqqi5S2PTt4W2tKZB4SLrhI6qjiey1q5bAtEuiHZeeevJuQHHf +aPFlTc58Bd9TZaml8LGXBHAVRgOY1NK/VLSgWH1Sb9pWJmLU2NuJMW8c8CLC02Ic +Nc1MaRVUGpCY3useX8p3x8uOPUNpnJpY0CQ73xtAln41rYHHTnG6iBM= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID8TCCAtmgAwIBAgIQQT1yx/RrH4FDffHSKFTfmjANBgkqhkiG9w0BAQUFADCB +ijELMAkGA1UEBhMCQ0gxEDAOBgNVBAoTB1dJU2VLZXkxGzAZBgNVBAsTEkNvcHly +aWdodCAoYykgMjAwNTEiMCAGA1UECxMZT0lTVEUgRm91bmRhdGlvbiBFbmRvcnNl +ZDEoMCYGA1UEAxMfT0lTVEUgV0lTZUtleSBHbG9iYWwgUm9vdCBHQSBDQTAeFw0w +NTEyMTExNjAzNDRaFw0zNzEyMTExNjA5NTFaMIGKMQswCQYDVQQGEwJDSDEQMA4G +A1UEChMHV0lTZUtleTEbMBkGA1UECxMSQ29weXJpZ2h0IChjKSAyMDA1MSIwIAYD +VQQLExlPSVNURSBGb3VuZGF0aW9uIEVuZG9yc2VkMSgwJgYDVQQDEx9PSVNURSBX +SVNlS2V5IEdsb2JhbCBSb290IEdBIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A +MIIBCgKCAQEAy0+zAJs9Nt350UlqaxBJH+zYK7LG+DKBKUOVTJoZIyEVRd7jyBxR +VVuuk+g3/ytr6dTqvirdqFEr12bDYVxgAsj1znJ7O7jyTmUIms2kahnBAbtzptf2 +w93NvKSLtZlhuAGio9RN1AU9ka34tAhxZK9w8RxrfvbDd50kc3vkDIzh2TbhmYsF +mQvtRTEJysIA2/dyoJaqlYfQjse2YXMNdmaM3Bu0Y6Kff5MTMPGhJ9vZ/yxViJGg +4E8HsChWjBgbl0SOid3gF27nKu+POQoxhILYQBRJLnpB5Kf+42TMwVlxSywhp1t9 +4B3RLoGbw9ho972WG6xwsRYUC9tguSYBBQIDAQABo1EwTzALBgNVHQ8EBAMCAYYw +DwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUswN+rja8sHnR3JQmthG+IbJphpQw +EAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBAEuh/wuHbrP5wUOx +SPMowB0uyQlB+pQAHKSkq0lPjz0e701vvbyk9vImMMkQyh2I+3QZH4VFvbBsUfk2 +ftv1TDI6QU9bR8/oCy22xBmddMVHxjtqD6wU2zz0c5ypBd8A3HR4+vg1YFkCExh8 +vPtNsCBtQ7tgMHpnM1zFmdH4LTlSc/uMqpclXHLZCB6rTjzjgTGfA6b7wP4piFXa +hNVQA7bihKOmNqoROgHhGEvWRGizPflTdISzRpFGlgC3gCy24eMQ4tui5yiPAZZi +Fj4A4xylNoEYokxSdsARo27mHbrjWr42U8U+dY+GaSlYU7Wcu2+fXMUY7N0v4ZjJ +/L7fCg0= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx +IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs +cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v +dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0 +MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl +bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD +DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw +ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r +WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU +Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs +HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj +z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf +SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl +AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG +KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P +AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j +BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC +VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX +ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg +Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB +ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd +/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB +A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn +k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9 +iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv +2G0xffX8oRAHh84vWdw+WNs= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB +gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk +MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY +UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx +NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3 +dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy +dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB +dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6 +38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP +KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q +DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4 +qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa +JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi +PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P +BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs +jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0 +eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD +ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR +vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt +qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa +IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy +i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ +O+7ETPTsJ3xCwnR8gooJybQDJbw= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDjjCCAnagAwIBAgIIKv++n6Lw6YcwDQYJKoZIhvcNAQEFBQAwKDELMAkGA1UE +BhMCQkUxGTAXBgNVBAMTEEJlbGdpdW0gUm9vdCBDQTIwHhcNMDcxMDA0MTAwMDAw +WhcNMjExMjE1MDgwMDAwWjAoMQswCQYDVQQGEwJCRTEZMBcGA1UEAxMQQmVsZ2l1 +bSBSb290IENBMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMZzQh6S +/3UPi790hqc/7bIYLS2X+an7mEoj39WN4IzGMhwWLQdC1i22bi+n9fzGhYJdld61 +IgDMqFNAn68KNaJ6x+HK92AQZw6nUHMXU5WfIp8MXW+2QbyM69odRr2nlL/zGsvU ++40OHjPIltfsjFPekx40HopQcSZYtF3CiInaYNKJIT/e1wEYNm7hLHADBGXvmAYr +XR5i3FVr/mZkIV/4L+HXmymvb82fqgxG0YjFnaKVn6w/Fa7yYd/vw2uaItgscf1Y +HewApDgglVrH1Tdjuk+bqv5WRi5j2Qsj1Yr6tSPwiRuhFA0m2kHwOI8w7QUmecFL +TqG4flVSOmlGhHUCAwEAAaOBuzCBuDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/ +BAUwAwEB/zBCBgNVHSAEOzA5MDcGBWA4CQEBMC4wLAYIKwYBBQUHAgEWIGh0dHA6 +Ly9yZXBvc2l0b3J5LmVpZC5iZWxnaXVtLmJlMB0GA1UdDgQWBBSFiuv0xbu+DlkD +lN7WgAEV4xCcOTARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUhYrr9MW7 +vg5ZA5Te1oABFeMQnDkwDQYJKoZIhvcNAQEFBQADggEBAFHYhd27V2/MoGy1oyCc +UwnzSgEMdL8rs5qauhjyC4isHLMzr87lEwEnkoRYmhC598wUkmt0FoqW6FHvv/pK +JaeJtmMrXZRY0c8RcrYeuTlBFk0pvDVTC9rejg7NqZV3JcqUWumyaa7YwBO+mPyW +nIR/VRPmPIfjvCCkpDZoa01gZhz5v6yAlGYuuUGK02XThIAC71AdXkbc98m6tTR8 +KvPG2F9fVJ3bTc0R5/0UAoNmXsimABKgX77OFP67H6dh96tK8QYUn8pJQsKpvO2F +sauBQeYNxUJpU4c5nUwfAA4+Bw11V0SoU7Q2dmSZ3G7rPUZuFF1eR1ONeE3gJ7uO +hXY= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDODCCAiCgAwIBAgIGIAYFFnACMA0GCSqGSIb3DQEBBQUAMDsxCzAJBgNVBAYT +AlJPMREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBD +QTAeFw0wNjA3MDQxNzIwMDRaFw0zMTA3MDQxNzIwMDRaMDsxCzAJBgNVBAYTAlJP +MREwDwYDVQQKEwhjZXJ0U0lHTjEZMBcGA1UECxMQY2VydFNJR04gUk9PVCBDQTCC +ASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALczuX7IJUqOtdu0KBuqV5Do +0SLTZLrTk+jUrIZhQGpgV2hUhE28alQCBf/fm5oqrl0Hj0rDKH/v+yv6efHHrfAQ +UySQi2bJqIirr1qjAOm+ukbuW3N7LBeCgV5iLKECZbO9xSsAfsT8AzNXDe3i+s5d +RdY4zTW2ssHQnIFKquSyAVwdj1+ZxLGt24gh65AIgoDzMKND5pCCrlUoSe1b16kQ +OA7+j0xbm0bqQfWwCHTD0IgztnzXdN/chNFDDnU5oSVAKOp4yw4sLjmdjItuFhwv +JoIQ4uNllAoEwF73XVv4EOLQunpL+943AAAaWyjj0pxzPjKHmKHJUS/X3qwzs08C +AwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAcYwHQYDVR0O +BBYEFOCMm9slSbPxfIbWskKHC9BroNnkMA0GCSqGSIb3DQEBBQUAA4IBAQA+0hyJ +LjX8+HXd5n9liPRyTMks1zJO890ZeUe9jjtbkw9QSSQTaxQGcu8J06Gh40CEyecY +MnQ8SG4Pn0vU9x7Tk4ZkVJdjclDVVc/6IJMCopvDI5NOFlV2oHB5bc0hH88vLbwZ +44gx+FkagQnIl6Z0x2DEW8xXjrJ1/RsCCdtZb3KTafcxQdaIOL+Hsr0Wefmq5L6I +Jd1hJyMctTEHBDa0GpC9oHRxUIltvBTjD4au8as+x6AJzKNI0eDbZOeStc+vckNw +i/nDhDwTqn6Sm1dTk/pwwpEOMfmbZ13pljheX7NzTogVZ96edhBiIL5VaZVDADlN +9u6wWk5JRFRYX0KD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw +PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz +cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9 +MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz +IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ +ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR +VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL +kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd +EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas +H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0 +HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud +DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4 +QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu +Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/ +AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8 +yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR +FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA +ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB +kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7 +l7+ijrRU +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDQzCCAiugAwIBAgIQX/h7KCtU3I1CoxW1aMmt/zANBgkqhkiG9w0BAQUFADA1 +MRYwFAYDVQQKEw1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENB +IDIwNDgwHhcNMDQwNTE0MjAxNzEyWhcNMjkwNTE0MjAyNTQyWjA1MRYwFAYDVQQK +Ew1DaXNjbyBTeXN0ZW1zMRswGQYDVQQDExJDaXNjbyBSb290IENBIDIwNDgwggEg +MA0GCSqGSIb3DQEBAQUAA4IBDQAwggEIAoIBAQCwmrmrp68Kd6ficba0ZmKUeIhH +xmJVhEAyv8CrLqUccda8bnuoqrpu0hWISEWdovyD0My5jOAmaHBKeN8hF570YQXJ +FcjPFto1YYmUQ6iEqDGYeJu5Tm8sUxJszR2tKyS7McQr/4NEb7Y9JHcJ6r8qqB9q +VvYgDxFUl4F1pyXOWWqCZe+36ufijXWLbvLdT6ZeYpzPEApk0E5tzivMW/VgpSdH +jWn0f84bcN5wGyDWbs2mAag8EtKpP6BrXruOIIt6keO1aO6g58QBdKhTCytKmg9l +Eg6CTY5j/e/rmxrbU6YTYK/CfdfHbBcl1HP7R2RQgYCUTOG/rksc35LtLgXfAgED +o1EwTzALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUJ/PI +FR5umgIJFq0roIlgX9p7L6owEAYJKwYBBAGCNxUBBAMCAQAwDQYJKoZIhvcNAQEF +BQADggEBAJ2dhISjQal8dwy3U8pORFBi71R803UXHOjgxkhLtv5MOhmBVrBW7hmW +Yqpao2TB9k5UM8Z3/sUcuuVdJcr18JOagxEu5sv4dEX+5wW4q+ffy0vhN4TauYuX +cB7w4ovXsNgOnbFp1iqRe6lJT37mjpXYgyc81WhJDtSd9i7rp77rMKSsH0T8lasz +Bvt9YAretIpjsJyp8qS5UwGH0GikJ3+r/+n6yUA4iGe0OcaEb1fJU9u6ju7AQ7L4 +CYNu/2bPPu8Xs1gYJQk0XuPL1hS27PKSb3TkL4Eq1ZKR4OCXPDJoBYVL0fdX4lId +kxpUnwVwwEpxYB5DC2Ae/qPOgRnhCzU= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIEOGPe+DANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML +RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp +bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5 +IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0yOTA3 +MjQxNDE1MTJaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3 +LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp +YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG +A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq +K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe +sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX +MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT +XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/ +HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH +4QIDAQABo0IwQDAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNV +HQ4EFgQUVeSB0RGAvtiJuQijMfmhJAkWuXAwDQYJKoZIhvcNAQEFBQADggEBADub +j1abMOdTmXx6eadNl9cZlZD7Bh/KM3xGY4+WZiT6QBshJ8rmcnPyT/4xmf3IDExo +U8aAghOY+rat2l098c5u9hURlIIM7j+VrxGrD9cv3h8Dj1csHsm7mhpElesYT6Yf +zX1XEC+bBAlahLVu2B064dae0Wx5XnkcFMXj0EyTO2U87d89vqbllRrDtRnDvV5b +u/8j72gZyxKTJ1wDLW8w0B62GqzeWvfRqqgnpv55gcR5mTNXuhKwqeBCbJPKVt7+ +bYQLCIt+jerXmCHG8+c8eS9enNFMFY3h7CI3zJpDC5fcgJCNs2ebb0gIFVbPv/Er +fF6adulZkMV8gzURZVE= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY +MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo +R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx +MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK +Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp +ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC +AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9 +AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA +ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0 +7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W +kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI +mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G +A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ +KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1 +6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl +4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K +oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj +UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU +AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDczCCAlugAwIBAgIBBDANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJLUjEN +MAsGA1UECgwES0lTQTEuMCwGA1UECwwlS29yZWEgQ2VydGlmaWNhdGlvbiBBdXRo +b3JpdHkgQ2VudHJhbDEWMBQGA1UEAwwNS0lTQSBSb290Q0EgMTAeFw0wNTA4MjQw +ODA1NDZaFw0yNTA4MjQwODA1NDZaMGQxCzAJBgNVBAYTAktSMQ0wCwYDVQQKDARL +SVNBMS4wLAYDVQQLDCVLb3JlYSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBDZW50 +cmFsMRYwFAYDVQQDDA1LSVNBIFJvb3RDQSAxMIIBIDANBgkqhkiG9w0BAQEFAAOC +AQ0AMIIBCAKCAQEAvATk+hM58DSWIGtsaLv623f/J/es7C/n/fB/bW+MKs0lCVsk +9KFo/CjsySXirO3eyDOE9bClCTqnsUdIxcxPjHmc+QZXfd3uOPbPFLKc6tPAXXdi +8EcNuRpAU1xkcK8IWsD3z3X5bI1kKB4g/rcbGdNaZoNy4rCbvdMlFQ0yb2Q3lIVG +yHK+d9VuHygvx2nt54OJM1jT3qC/QOhDUO7cTWu8peqmyGGO9cNkrwYV3CmLP3WM +vHFE2/yttRcdbYmDz8Yzvb9Fov4Kn6MRXw+5H5wawkbMnChmn3AmPC7fqoD+jMUE +CSVPzZNHPDfqAmeS/vwiJFys0izgXAEzisEZ2wIBA6MyMDAwHQYDVR0OBBYEFL+2 +J9gDWnZlTGEBQVYx5Yt7OtnMMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEF +BQADggEBABOvUQveimpb5poKyLGQSk6hAp3MiNKrZr097LuxQpVqslxa/6FjZJap +aBV/JV6K+KRzwYCKhQoOUugy50X4TmWAkZl0Q+VFnUkq8JSV3enhMNITbslOsXfl +BM+tWh6UCVrXPAgcrnrpFDLBRa3SJkhyrKhB2vAhhzle3/xk/2F0KpzZm4tfwjeT +2KM3LzuTa7IbB6d/CVDv0zq+IWuKkDsnSlFOa56ch534eJAx7REnxqhZvvwYC/uO +fi5C4e3nCSG9uRPFVmf0JqZCQ5BEVLRxm3bkGhKsGigA35vB1fjbXKP4krG9tNT5 +UNkAAk/bg9ART6RCVmE6fhMy04Qfybo= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV +MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe +TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0 +dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB +KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0 +N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC +dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu +MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL +b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD +zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi +3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8 +WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY +Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi +NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC +ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4 +QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0 +YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz +aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu +IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm +ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg +ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs +amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv +IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3 +Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6 +ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1 +YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg +dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs +b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G +CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO +xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP +0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ +QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk +f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK +8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEGjCCAwKgAwIBAgIDAYagMA0GCSqGSIb3DQEBBQUAMIGjMQswCQYDVQQGEwJG +STEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0ZXJpa2Vz +a3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBTZXJ2aWNl +czEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJLIEdvdi4g +Um9vdCBDQTAeFw0wMjEyMTgxMzUzMDBaFw0yMzEyMTgxMzUxMDhaMIGjMQswCQYD +VQQGEwJGSTEQMA4GA1UECBMHRmlubGFuZDEhMB8GA1UEChMYVmFlc3RvcmVraXN0 +ZXJpa2Vza3VzIENBMSkwJwYDVQQLEyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSBT +ZXJ2aWNlczEZMBcGA1UECxMQVmFybWVubmVwYWx2ZWx1dDEZMBcGA1UEAxMQVlJL +IEdvdi4gUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALCF +FdrIAzfQo0Y3bBseljDCWoUSZyPyu5/nioFgJ/gTqTy894aqqvTzJSm0/nWuHoGG +igWyHWWyOOi0zCia+xc28ZPVec7Bg4shT8MNrUHfeJ1I4x9CRPw8bSEga60ihCRC +jxdNwlAfZM0tOSJWiP2yY51U2kJpwMhP1xjiPshphJQ9LIDGfM6911Mf64i5psu7 +hVfvV3ZdDIvTXhJBnyHAOfQmbQj6OLOhd7HuFtjQaNq0mKWgZUZKa41+qk1guPjI +DfxxPu45h4G02fhukO4/DmHXHSto5i7hQkQmeCxY8n0Wf2HASSQqiYe2XS8pGfim +545SnkFLWg6quMJmQlMCAwEAAaNVMFMwDwYDVR0TAQH/BAUwAwEB/zARBglghkgB +hvhCAQEEBAMCAAcwDgYDVR0PAQH/BAQDAgHGMB0GA1UdDgQWBBTb6eGb0tEkC/yr +46Bn6q6cS3f0sDANBgkqhkiG9w0BAQUFAAOCAQEArX1ID1QRnljurw2bEi8hpM2b +uoRH5sklVSPj3xhYKizbXvfNVPVRJHtiZ+GxH0mvNNDrsczZog1Sf0JLiGCXzyVy +t08pLWKfT6HAVVdWDsRol5EfnGTCKTIB6dTI2riBmCguGMcs/OubUpbf9MiQGS0j +8/G7cdqehSO9Gu8u5Hp5t8OdhkktY7ktdM9lDzJmid87Ie4pbzlj2RXBbvbfgD5Q +eBmK3QOjFKU3p7UsfLYRh+cF8ry23tT/l4EohP7+bEaFEEGfTXWMB9SZZ291im/k +UJL2mdUQuMSpe/cXjUu/15WfCdxEDx4yw8DP03kN5Mc7h/CQNIghYkmSBAQfvA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz +MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw +IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR +dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG +9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp +li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D +rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ +WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug +F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU +xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC +Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv +dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw +ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl +IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh +c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy +ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh +Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI +KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T +KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq +y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p +dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD +VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL +MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk +fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8 +7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R +cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y +mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW +xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK +SnQ2+Q== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIUeFhfLq0sGUvjNwc1NBMotZbUZZMwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMSBHMzAeFw0xMjAxMTIxNzI3NDRaFw00 +MjAxMTIxNzI3NDRaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDEgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCgvlAQjunybEC0BJyFuTHK3C3kEakEPBtV +wedYMB0ktMPvhd6MLOHBPd+C5k+tR4ds7FtJwUrVu4/sh6x/gpqG7D0DmVIB0jWe +rNrwU8lmPNSsAgHaJNM7qAJGr6Qc4/hzWHa39g6QDbXwz8z6+cZM5cOGMAqNF341 +68Xfuw6cwI2H44g4hWf6Pser4BOcBRiYz5P1sZK0/CPTz9XEJ0ngnjybCKOLXSoh +4Pw5qlPafX7PGglTvF0FBM+hSo+LdoINofjSxxR3W5A2B4GbPgb6Ul5jxaYA/qXp +UhtStZI5cgMJYr2wYBZupt0lwgNm3fME0UDiTouG9G/lg6AnhF4EwfWQvTA9xO+o +abw4m6SkltFi2mnAAZauy8RRNOoMqv8hjlmPSlzkYZqn0ukqeI1RPToV7qJZjqlc +3sX5kCLliEVx3ZGZbHqfPT2YfF72vhZooF6uCyP8Wg+qInYtyaEQHeTTRCOQiJ/G +KubX9ZqzWB4vMIkIG1SitZgj7Ah3HJVdYdHLiZxfokqRmu8hqkkWCKi9YSgxyXSt +hfbZxbGL0eUQMk1fiyA6PEkfM4VZDdvLCXVDaXP7a3F98N/ETH3Goy7IlXnLc6KO +Tk0k+17kBL5yG6YnLUlamXrXXAkgt3+UuU/xDRxeiEIbEbfnkduebPRq34wGmAOt +zCjvpUfzUwIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUo5fW816iEOGrRZ88F2Q87gFwnMwwDQYJKoZIhvcNAQELBQAD +ggIBABj6W3X8PnrHX3fHyt/PX8MSxEBd1DKquGrX1RUVRpgjpeaQWxiZTOOtQqOC +MTaIzen7xASWSIsBx40Bz1szBpZGZnQdT+3Btrm0DWHMY37XLneMlhwqI2hrhVd2 +cDMT/uFPpiN3GPoajOi9ZcnPP/TJF9zrx7zABC4tRi9pZsMbj/7sPtPKlL92CiUN +qXsCHKnQO18LwIE6PWThv6ctTr1NxNgpxiIY0MWscgKCP6o6ojoilzHdCGPDdRS5 +YCgtW2jgFqlmgiNR9etT2DGbe+m3nUvriBbP+V04ikkwj+3x6xn0dxoxGE1nVGwv +b2X52z3sIexe9PSLymBlVNFxZPT5pqOBMzYzcfCkeF9OrYMh3jRJjehZrJ3ydlo2 +8hP0r+AJx2EqbPfgna67hkooby7utHnNkDPDs3b69fBsnQGQ+p6Q9pxyz0fawx/k +NSBT8lTR32GDpgLiJTjehTItXnOQUl1CxM49S+H5GYQd1aJQzEH7QRTDvdbJWqNj +ZgKAvQU6O0ec7AAmTPWIUb+oI38YB7AL7YsmoWTTYUrrXJ/es69nA7Mf3W1daWhp +q1467HxpvMc7hU6eFbm0FU/DlXpY18ls6Wy58yljXrQs8C097Vpl4KlbQMJImYFt +nh8GKjwStIsPm6Ik8KaN1nrgS7ZklmOVhMJKzRwuJIczYOXD +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa +GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg +Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J +WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB +rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp ++ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1 +ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i +Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz +PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og +/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH +oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI +yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud +EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2 +A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL +MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT +ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f +BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn +g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl +fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K +WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha +B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc +hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR +TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD +mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z +ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y +4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza +8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIURFc0JFuBiZs18s64KztbpybwdSgwDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMiBHMzAeFw0xMjAxMTIxODU5MzJaFw00 +MjAxMTIxODU5MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDIgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQChriWyARjcV4g/Ruv5r+LrI3HimtFhZiFf +qq8nUeVuGxbULX1QsFN3vXg6YOJkApt8hpvWGo6t/x8Vf9WVHhLL5hSEBMHfNrMW +n4rjyduYNM7YMxcoRvynyfDStNVNCXJJ+fKH46nafaF9a7I6JaltUkSs+L5u+9ym +c5GQYaYDFCDy54ejiK2toIz/pgslUiXnFgHVy7g1gQyjO/Dh4fxaXc6AcW34Sas+ +O7q414AB+6XrW7PFXmAqMaCvN+ggOp+oMiwMzAkd056OXbxMmO7FGmh77FOm6RQ1 +o9/NgJ8MSPsc9PG/Srj61YxxSscfrf5BmrODXfKEVu+lV0POKa2Mq1W/xPtbAd0j +IaFYAI7D0GoT7RPjEiuA3GfmlbLNHiJuKvhB1PLKFAeNilUSxmn1uIZoL1NesNKq +IcGY5jDjZ1XHm26sGahVpkUG0CM62+tlXSoREfA7T8pt9DTEceT/AFr2XK4jYIVz +8eQQsSWu1ZK7E8EM4DnatDlXtas1qnIhO4M15zHfeiFuuDIIfR0ykRVKYnLP43eh +vNURG3YBZwjgQQvD6xVu+KQZ2aKrr+InUlYrAoosFCT5v0ICvybIxo/gbjh9Uy3l +7ZizlWNof/k19N+IxWA1ksB8aRxhlRbQ694Lrz4EEEVlWFA4r0jyWbYW8jwNkALG +cC4BrTwV1wIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQU7edvdlq/YOxJW8ald7tyFnGbxD0wDQYJKoZIhvcNAQELBQAD +ggIBAJHfgD9DCX5xwvfrs4iP4VGyvD11+ShdyLyZm3tdquXK4Qr36LLTn91nMX66 +AarHakE7kNQIXLJgapDwyM4DYvmL7ftuKtwGTTwpD4kWilhMSA/ohGHqPHKmd+RC +roijQ1h5fq7KpVMNqT1wvSAZYaRsOPxDMuHBR//47PERIjKWnML2W2mWeyAMQ0Ga +W/ZZGYjeVYg3UQt4XAoeo0L9x52ID8DyeAIkVJOviYeIyUqAHerQbj5hLja7NQ4n +lv1mNDthcnPxFlxHBlRJAHpYErAK74X9sbgzdWqTHBLmYF5vHX/JHyPLhGGfHoJE ++V+tYlUkmlKY7VHnoX6XOuYvHxHaU4AshZ6rNRDbIl9qxV6XU/IyAgkwo1jwDQHV +csaxfGl7w/U2Rcxhbl5MlMVerugOXou/983g7aEOGzPuVBj+D77vfoRrQ+NwmNtd +dbINWQeFFSM51vHfqSYP1kjHs6Yi9TM3WpVHn3u6GBVv/9YUZINJ0gpnIdsPNWNg +KCLjsZWDzYWm3S8P52dSbrsvhXz1SnPnxT7AvSESBT/8twNJAlvIJebiVDj1eYeM +HVOyToV7BjjHLPj4sHKNJeV3UvQDHEimUF+IIDBu8oJDqz2XhOdT+yHBTw8imoa4 +WSr2Rz0ZiC3oheGe7IUIarFsNMkd7EgrO3jtZsSOeWmD3n+M +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x +GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv +b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV +BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W +YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM +V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB +4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr +H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd +8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv +vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT +mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe +btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc +T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt +WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ +c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A +4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD +VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG +CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0 +aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0 +aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu +dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw +czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G +A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC +TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg +Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0 +7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem +d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd ++LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B +4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN +t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x +DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57 +k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s +zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j +Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT +mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK +4SVhM7JZG+Ju1zdXtg2pEto= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFYDCCA0igAwIBAgIULvWbAiin23r/1aOp7r0DoM8Sah0wDQYJKoZIhvcNAQEL +BQAwSDELMAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxHjAc +BgNVBAMTFVF1b1ZhZGlzIFJvb3QgQ0EgMyBHMzAeFw0xMjAxMTIyMDI2MzJaFw00 +MjAxMTIyMDI2MzJaMEgxCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBM +aW1pdGVkMR4wHAYDVQQDExVRdW9WYWRpcyBSb290IENBIDMgRzMwggIiMA0GCSqG +SIb3DQEBAQUAA4ICDwAwggIKAoICAQCzyw4QZ47qFJenMioKVjZ/aEzHs286IxSR +/xl/pcqs7rN2nXrpixurazHb+gtTTK/FpRp5PIpM/6zfJd5O2YIyC0TeytuMrKNu +FoM7pmRLMon7FhY4futD4tN0SsJiCnMK3UmzV9KwCoWdcTzeo8vAMvMBOSBDGzXR +U7Ox7sWTaYI+FrUoRqHe6okJ7UO4BUaKhvVZR74bbwEhELn9qdIoyhA5CcoTNs+c +ra1AdHkrAj80//ogaX3T7mH1urPnMNA3I4ZyYUUpSFlob3emLoG+B01vr87ERROR +FHAGjx+f+IdpsQ7vw4kZ6+ocYfx6bIrc1gMLnia6Et3UVDmrJqMz6nWB2i3ND0/k +A9HvFZcba5DFApCTZgIhsUfei5pKgLlVj7WiL8DWM2fafsSntARE60f75li59wzw +eyuxwHApw0BiLTtIadwjPEjrewl5qW3aqDCYz4ByA4imW0aucnl8CAMhZa634Ryl +sSqiMd5mBPfAdOhx3v89WcyWJhKLhZVXGqtrdQtEPREoPHtht+KPZ0/l7DxMYIBp +VzgeAVuNVejH38DMdyM0SXV89pgR6y3e7UEuFAUCf+D+IOs15xGsIs5XPd7JMG0Q +A4XN8f+MFrXBsj6IbGB/kE+V9/YtrQE5BwT6dYB9v0lQ7e/JxHwc64B+27bQ3RP+ +ydOc17KXqQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB +BjAdBgNVHQ4EFgQUxhfQvKjqAkPyGwaZXSuQILnXnOQwDQYJKoZIhvcNAQELBQAD +ggIBADRh2Va1EodVTd2jNTFGu6QHcrxfYWLopfsLN7E8trP6KZ1/AvWkyaiTt3px +KGmPc+FSkNrVvjrlt3ZqVoAh313m6Tqe5T72omnHKgqwGEfcIHB9UqM+WXzBusnI +FUBhynLWcKzSt/Ac5IYp8M7vaGPQtSCKFWGafoaYtMnCdvvMujAWzKNhxnQT5Wvv +oxXqA/4Ti2Tk08HS6IT7SdEQTXlm66r99I0xHnAUrdzeZxNMgRVhvLfZkXdxGYFg +u/BYpbWcC/ePIlUnwEsBbTuZDdQdm2NnL9DuDcpmvJRPpq3t/O5jrFc/ZSXPsoaP +0Aj/uHYUbt7lJ+yreLVTubY/6CD50qi+YUbKh4yE8/nxoGibIh6BJpsQBJFxwAYf +3KDTuVan45gtf4Od34wrnDKOMpTwATwiKp9Dwi7DmDkHOHv8XgBCH/MyJnmDhPbl +8MFREsALHgQjDFSlTC9JxUrRtm5gDWv8a4uFJGS3iQ6rJUdbPM9+Sb3H6QrG2vd+ +DhcI00iX0HGS8A85PjRqHH3Y8iKuu2n0M7SmSFXRDw4m6Oy2Cy2nhTXN/VnIn9HN +PlopNLk9hM6xZdRZkZFWdSHBd575euFgndOtBBj0fOtek49TSiIp+EgrPk2GrFt/ +ywaZWWDYWGWVjUTR939+J399roD1B0y2PpxxVJkES/1Y+Zj0 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHTzCCBTegAwIBAgIJAKPaQn6ksa7aMA0GCSqGSIb3DQEBBQUAMIGuMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xKTAnBgNVBAMTIENoYW1iZXJz +IG9mIENvbW1lcmNlIFJvb3QgLSAyMDA4MB4XDTA4MDgwMTEyMjk1MFoXDTM4MDcz +MTEyMjk1MFowga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpNYWRyaWQgKHNlZSBj +dXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29tL2FkZHJlc3MpMRIw +EAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVyZmlybWEgUy5BLjEp +MCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAtIDIwMDgwggIiMA0G +CSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCvAMtwNyuAWko6bHiUfaN/Gh/2NdW9 +28sNRHI+JrKQUrpjOyhYb6WzbZSm891kDFX29ufyIiKAXuFixrYp4YFs8r/lfTJq +VKAyGVn+H4vXPWCGhSRv4xGzdz4gljUha7MI2XAuZPeEklPWDrCQiorjh40G072Q +DuKZoRuGDtqaCrsLYVAGUvGef3bsyw/QHg3PmTA9HMRFEFis1tPo1+XqxQEHd9ZR +5gN/ikilTWh1uem8nk4ZcfUyS5xtYBkL+8ydddy/Js2Pk3g5eXNeJQ7KXOt3EgfL +ZEFHcpOrUMPrCXZkNNI5t3YRCQ12RcSprj1qr7V9ZS+UWBDsXHyvfuK2GNnQm05a +Sd+pZgvMPMZ4fKecHePOjlO+Bd5gD2vlGts/4+EhySnB8esHnFIbAURRPHsl18Tl +UlRdJQfKFiC4reRB7noI/plvg6aRArBsNlVq5331lubKgdaX8ZSD6e2wsWsSaR6s ++12pxZjptFtYer49okQ6Y1nUCyXeG0+95QGezdIp1Z8XGQpvvwyQ0wlf2eOKNcx5 +Wk0ZN5K3xMGtr/R5JJqyAQuxr1yW84Ay+1w9mPGgP0revq+ULtlVmhduYJ1jbLhj +ya6BXBg14JC7vjxPNyK5fuvPnnchpj04gftI2jE9K+OJ9dC1vX7gUMQSibMjmhAx +hduub+84Mxh2EQIDAQABo4IBbDCCAWgwEgYDVR0TAQH/BAgwBgEB/wIBDDAdBgNV +HQ4EFgQU+SSsD7K1+HnA+mCIG8TZTQKeFxkwgeMGA1UdIwSB2zCB2IAU+SSsD7K1 ++HnA+mCIG8TZTQKeFxmhgbSkgbEwga4xCzAJBgNVBAYTAkVVMUMwQQYDVQQHEzpN +YWRyaWQgKHNlZSBjdXJyZW50IGFkZHJlc3MgYXQgd3d3LmNhbWVyZmlybWEuY29t +L2FkZHJlc3MpMRIwEAYDVQQFEwlBODI3NDMyODcxGzAZBgNVBAoTEkFDIENhbWVy +ZmlybWEgUy5BLjEpMCcGA1UEAxMgQ2hhbWJlcnMgb2YgQ29tbWVyY2UgUm9vdCAt +IDIwMDiCCQCj2kJ+pLGu2jAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRV +HSAAMCowKAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20w +DQYJKoZIhvcNAQEFBQADggIBAJASryI1wqM58C7e6bXpeHxIvj99RZJe6dqxGfwW +PJ+0W2aeaufDuV2I6A+tzyMP3iU6XsxPpcG1Lawk0lgH3qLPaYRgM+gQDROpI9CF +5Y57pp49chNyM/WqfcZjHwj0/gF/JM8rLFQJ3uIrbZLGOU8W6jx+ekbURWpGqOt1 +glanq6B8aBMz9p0w8G8nOSQjKpD9kCk18pPfNKXG9/jvjA9iSnyu0/VU+I22mlaH +FoI6M6taIgj3grrqLuBHmrS1RaMFO9ncLkVAO+rcf+g769HsJtg1pDDFOqxXnrN2 +pSB7+R5KBWIBpih1YJeSDW4+TTdDDZIVnBgizVGZoCkaPF+KMjNbMMeJL0eYD6MD +xvbxrN8y8NmBGuScvfaAFPDRLLmF9dijscilIeUcE5fuDr3fKanvNFNb0+RqE4QG +tjICxFKuItLcsiFCGtpA8CnJ7AoMXOLQusxI0zcKzBIKinmwPQN/aUv0NCB9szTq +jktk9T79syNnFQ0EuPAtwQlRPLJsFfClI9eDdOTlLsn+mCdCxqvGnrDQWzilm1De +fhiYtUU79nm06PcaewaD+9CL2rvHvRirCG88gGtAPxkZumWK5r7VXNM21+9AUiRg +OGcEMeyP84LG3rlV8zsxkVrctQgVrXYlCg17LofiDKYGvCYQbTed7N14jHyAxfDZ +d0jQ +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHSTCCBTGgAwIBAgIJAMnN0+nVfSPOMA0GCSqGSIb3DQEBBQUAMIGsMQswCQYD +VQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3VycmVudCBhZGRyZXNzIGF0 +IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAGA1UEBRMJQTgyNzQzMjg3 +MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAlBgNVBAMTHkdsb2JhbCBD +aGFtYmVyc2lnbiBSb290IC0gMjAwODAeFw0wODA4MDExMjMxNDBaFw0zODA3MzEx +MjMxNDBaMIGsMQswCQYDVQQGEwJFVTFDMEEGA1UEBxM6TWFkcmlkIChzZWUgY3Vy +cmVudCBhZGRyZXNzIGF0IHd3dy5jYW1lcmZpcm1hLmNvbS9hZGRyZXNzKTESMBAG +A1UEBRMJQTgyNzQzMjg3MRswGQYDVQQKExJBQyBDYW1lcmZpcm1hIFMuQS4xJzAl +BgNVBAMTHkdsb2JhbCBDaGFtYmVyc2lnbiBSb290IC0gMjAwODCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAMDfVtPkOpt2RbQT2//BthmLN0EYlVJH6xed +KYiONWwGMi5HYvNJBL99RDaxccy9Wglz1dmFRP+RVyXfXjaOcNFccUMd2drvXNL7 +G706tcuto8xEpw2uIRU/uXpbknXYpBI4iRmKt4DS4jJvVpyR1ogQC7N0ZJJ0YPP2 +zxhPYLIj0Mc7zmFLmY/CDNBAspjcDahOo7kKrmCgrUVSY7pmvWjg+b4aqIG7HkF4 +ddPB/gBVsIdU6CeQNR1MM62X/JcumIS/LMmjv9GYERTtY/jKmIhYF5ntRQOXfjyG +HoiMvvKRhI9lNNgATH23MRdaKXoKGCQwoze1eqkBfSbW+Q6OWfH9GzO1KTsXO0G2 +Id3UwD2ln58fQ1DJu7xsepeY7s2MH/ucUa6LcL0nn3HAa6x9kGbo1106DbDVwo3V +yJ2dwW3Q0L9R5OP4wzg2rtandeavhENdk5IMagfeOx2YItaswTXbo6Al/3K1dh3e +beksZixShNBFks4c5eUzHdwHU1SjqoI7mjcv3N2gZOnm3b2u/GSFHTynyQbehP9r +6GsaPMWis0L7iwk+XwhSx2LE1AVxv8Rk5Pihg+g+EpuoHtQ2TS9x9o0o9oOpE9Jh +wZG7SMA0j0GMS0zbaRL/UJScIINZc+18ofLx/d33SdNDWKBWY8o9PeU1VlnpDsog +zCtLkykPAgMBAAGjggFqMIIBZjASBgNVHRMBAf8ECDAGAQH/AgEMMB0GA1UdDgQW +BBS5CcqcHtvTbDprru1U8VuTBjUuXjCB4QYDVR0jBIHZMIHWgBS5CcqcHtvTbDpr +ru1U8VuTBjUuXqGBsqSBrzCBrDELMAkGA1UEBhMCRVUxQzBBBgNVBAcTOk1hZHJp +ZCAoc2VlIGN1cnJlbnQgYWRkcmVzcyBhdCB3d3cuY2FtZXJmaXJtYS5jb20vYWRk +cmVzcykxEjAQBgNVBAUTCUE4Mjc0MzI4NzEbMBkGA1UEChMSQUMgQ2FtZXJmaXJt +YSBTLkEuMScwJQYDVQQDEx5HbG9iYWwgQ2hhbWJlcnNpZ24gUm9vdCAtIDIwMDiC +CQDJzdPp1X0jzjAOBgNVHQ8BAf8EBAMCAQYwPQYDVR0gBDYwNDAyBgRVHSAAMCow +KAYIKwYBBQUHAgEWHGh0dHA6Ly9wb2xpY3kuY2FtZXJmaXJtYS5jb20wDQYJKoZI +hvcNAQEFBQADggIBAICIf3DekijZBZRG/5BXqfEv3xoNa/p8DhxJJHkn2EaqbylZ +UohwEurdPfWbU1Rv4WCiqAm57OtZfMY18dwY6fFn5a+6ReAJ3spED8IXDneRRXoz +X1+WLGiLwUePmJs9wOzL9dWCkoQ10b42OFZyMVtHLaoXpGNR6woBrX/sdZ7LoR/x +fxKxueRkf2fWIyr0uDldmOghp+G9PUIadJpwr2hsUF1Jz//7Dl3mLEfXgTpZALVz +a2Mg9jFFCDkO9HB+QHBaP9BrQql0PSgvAm11cpUJjUhjxsYjV5KTXjXBjfkK9yyd +Yhz2rXzdpjEetrHHfoUm+qRqtdpjMNHvkzeyZi99Bffnt0uYlDXA2TopwZ2yUDMd +SqlapskD7+3056huirRXhOukP9DuqqqHW2Pok+JrqNS4cnhrG+055F3Lm6qH1U9O +AP7Zap88MQ8oAgF9mOinsKJknnn4SPIVqczmyETrP3iZ8ntxPjzxmKfFGBI/5rso +M0LpRQp8bfKGeS/Fghl9CYl8slR2iK7ewfPM4W7bMdaTrpmg7yVqc5iJWzouE4ge +v8CSlDQb4ye3ix5vQv/n6TebUB0tovkC7stYWDpxvGjjqsGvHCgfotwjZT+B6q6Z +09gwzxMNTxXJhLynSC34MCN32EZLeW32jO06f2ARePTpm67VVMB0gNELQp/B +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIFyjCCA7KgAwIBAgIEAJiWjDANBgkqhkiG9w0BAQsFADBaMQswCQYDVQQGEwJO +TDEeMBwGA1UECgwVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSswKQYDVQQDDCJTdGFh +dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQSAtIEcyMB4XDTA4MDMyNjExMTgxN1oX +DTIwMDMyNTExMDMxMFowWjELMAkGA1UEBhMCTkwxHjAcBgNVBAoMFVN0YWF0IGRl +ciBOZWRlcmxhbmRlbjErMCkGA1UEAwwiU3RhYXQgZGVyIE5lZGVybGFuZGVuIFJv +b3QgQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAMVZ5291 +qj5LnLW4rJ4L5PnZyqtdj7U5EILXr1HgO+EASGrP2uEGQxGZqhQlEq0i6ABtQ8Sp +uOUfiUtnvWFI7/3S4GCI5bkYYCjDdyutsDeqN95kWSpGV+RLufg3fNU254DBtvPU +Z5uW6M7XxgpT0GtJlvOjCwV3SPcl5XCsMBQgJeN/dVrlSPhOewMHBPqCYYdu8DvE +pMfQ9XQ+pV0aCPKbJdL2rAQmPlU6Yiile7Iwr/g3wtG61jj99O9JMDeZJiFIhQGp +5Rbn3JBV3w/oOM2ZNyFPXfUib2rFEhZgF1XyZWampzCROME4HYYEhLoaJXhena/M +UGDWE4dS7WMfbWV9whUYdMrhfmQpjHLYFhN9C0lK8SgbIHRrxT3dsKpICT0ugpTN +GmXZK4iambwYfp/ufWZ8Pr2UuIHOzZgweMFvZ9C+X+Bo7d7iscksWXiSqt8rYGPy +5V6548r6f1CGPqI0GAwJaCgRHOThuVw+R7oyPxjMW4T182t0xHJ04eOLoEq9jWYv +6q012iDTiIJh8BIitrzQ1aTsr1SIJSQ8p22xcik/Plemf1WvbibG/ufMQFxRRIEK +eN5KzlW/HdXZt1bv8Hb/C3m1r737qWmRRpdogBQ2HbN/uymYNqUg+oJgYjOk7Na6 +B6duxc8UpufWkjTYgfX8HV2qXB72o007uPc5AgMBAAGjgZcwgZQwDwYDVR0TAQH/ +BAUwAwEB/zBSBgNVHSAESzBJMEcGBFUdIAAwPzA9BggrBgEFBQcCARYxaHR0cDov +L3d3dy5wa2lvdmVyaGVpZC5ubC9wb2xpY2llcy9yb290LXBvbGljeS1HMjAOBgNV +HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFJFoMocVHYnitfGsNig0jQt8YojrMA0GCSqG +SIb3DQEBCwUAA4ICAQCoQUpnKpKBglBu4dfYszk78wIVCVBR7y29JHuIhjv5tLyS +CZa59sCrI2AGeYwRTlHSeYAz+51IvuxBQ4EffkdAHOV6CMqqi3WtFMTC6GY8ggen +5ieCWxjmD27ZUD6KQhgpxrRW/FYQoAUXvQwjf/ST7ZwaUb7dRUG/kSS0H4zpX897 +IZmflZ85OkYcbPnNe5yQzSipx6lVu6xiNGI1E0sUOlWDuYaNkqbG9AclVMwWVxJK +gnjIFNkXgiYtXSAfea7+1HAWFpWD2DU5/1JddRwWxRNVz0fMdWVSSt7wsKfkCpYL ++63C4iWEst3kvX5ZbJvw8NjnyvLplzh+ib7M+zkXYT9y2zqR2GUBGR2tUKRXCnxL +vJxxcypFURmFzI79R6d0lR2o0a9OF7FpJsKqeFdbxU2n5Z4FF5TKsl+gSRiNNOkm +bEgeqmiSBeGCc1qb3AdbCG19ndeNIdn8FCCqwkXfP+cAslHkwvgFuXkajDTznlvk +N1trSt8sV4pAWja63XVECDdCcAz+3F4hoKOKwJCcaNpQ5kUQR3i2TtJlycM33+FC +Y7BXN0Ute4qcvwXqZVUz9zkQxSgqIXobisQk+T8VyJoVIPVVYpbtbZNQvOSqeK3Z +ywplh6ZmwcSBo3c6WB4L7oOLnR7SUqTMHW+wmG2UMbX4cQrcufx9MmDm66+KAQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE +FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j +ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js +LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM +BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0 +Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy +dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh +cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh +YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg +dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp +bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ +YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT +TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ +9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8 +jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW +FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz +ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1 +ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L +EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu +L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq +yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC +O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V +um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh +NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIHhzCCBW+gAwIBAgIBLTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJJTDEW +MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg +Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh +dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM3WhcNMzYwOTE3MTk0NjM2WjB9 +MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi +U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh +cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA +A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk +pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf +OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C +Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT +Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi +HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM +Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w ++2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+ +Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3 +Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B +26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID +AQABo4ICEDCCAgwwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwHQYD +VR0OBBYEFE4L7xqkQFulF2mHMMo0aEPQQa7yMB8GA1UdIwQYMBaAFE4L7xqkQFul +F2mHMMo0aEPQQa7yMIIBWgYDVR0gBIIBUTCCAU0wggFJBgsrBgEEAYG1NwEBATCC +ATgwLgYIKwYBBQUHAgEWImh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL3BvbGljeS5w +ZGYwNAYIKwYBBQUHAgEWKGh0dHA6Ly93d3cuc3RhcnRzc2wuY29tL2ludGVybWVk +aWF0ZS5wZGYwgc8GCCsGAQUFBwICMIHCMCcWIFN0YXJ0IENvbW1lcmNpYWwgKFN0 +YXJ0Q29tKSBMdGQuMAMCAQEagZZMaW1pdGVkIExpYWJpbGl0eSwgcmVhZCB0aGUg +c2VjdGlvbiAqTGVnYWwgTGltaXRhdGlvbnMqIG9mIHRoZSBTdGFydENvbSBDZXJ0 +aWZpY2F0aW9uIEF1dGhvcml0eSBQb2xpY3kgYXZhaWxhYmxlIGF0IGh0dHA6Ly93 +d3cuc3RhcnRzc2wuY29tL3BvbGljeS5wZGYwEQYJYIZIAYb4QgEBBAQDAgAHMDgG +CWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1 +dGhvcml0eTANBgkqhkiG9w0BAQsFAAOCAgEAjo/n3JR5fPGFf59Jb2vKXfuM/gTF +wWLRfUKKvFO3lANmMD+x5wqnUCBVJX92ehQN6wQOQOY+2IirByeDqXWmN3PH/UvS +Ta0XQMhGvjt/UfzDtgUx3M2FIk5xt/JxXrAaxrqTi3iSSoX4eA+D/i+tLPfkpLst +0OcNOrg+zvZ49q5HJMqjNTbOx8aHmNrs++myziebiMMEofYLWWivydsQD032ZGNc +pRJvkrKTlMeIFw6Ttn5ii5B/q06f/ON1FE8qMt9bDeD1e5MNq6HPh+GlBEXoPBKl +CcWw0bdT82AUuoVpaiF8H3VhFyAXe2w7QSlc4axa0c2Mm+tgHRns9+Ww2vl5GKVF +P0lDV9LdJNUso/2RjSe15esUBppMeyG7Oq0wBhjA2MFrLH9ZXF2RsXAiV+uKa0hK +1Q8p7MZAwC+ITGgBF3f0JBlPvfrhsiAhS90a2Cl9qrjeVOwhVYBsHvUwyKMQ5bLm +KhQxw4UtjJixhlpPiVktucf3HMiKf8CdBUrmQk9io20ppB+Fq9vlgcitKj1MXVuE +JnHEhV5xJMqlG2zYYdMa4FTbzrqpMrUi9nNBCV24F10OD5mQ1kfabwo6YigUZ4LZ +8dCAWZvLMdibD4x3TrVoivJs9iQOLWxwxXPR3hTQcY+203sC9uO41Alua551hDnm +fyWl8kgAwKQB2j8= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk +MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0 +YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg +Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT +AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp +Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN +BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9 +m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih +FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/ +TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F +EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco +kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu +HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF +vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo +19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC +L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW +bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX +JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw +FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j +BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc +K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf +ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik +Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB +sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e +3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR +ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip +mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH +b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf +rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms +hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y +zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6 +MBr1mmz0DlP5OlvRHA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID3TCCAsWgAwIBAgIOHaIAAQAC7LdggHiNtgYwDQYJKoZIhvcNAQEFBQAweTEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEmMCQGA1UEAxMdVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIEkwHhcNMDYwMzIyMTU1NDI4WhcNMjUxMjMx +MjI1OTU5WjB5MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIg +R21iSDEkMCIGA1UECxMbVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBMSYwJAYD +VQQDEx1UQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0EgSTCCASIwDQYJKoZIhvcN +AQEBBQADggEPADCCAQoCggEBAKR3I5ZEr5D0MacQ9CaHnPM42Q9e3s9B6DGtxnSR +JJZ4Hgmgm5qVSkr1YnwCqMqs+1oEdjneX/H5s7/zA1hV0qq34wQi0fiU2iIIAI3T +fCZdzHd55yx4Oagmcw6iXSVphU9VDprvxrlE4Vc93x9UIuVvZaozhDrzznq+VZeu +jRIPFDPiUHDDSYcTvFHe15gSWu86gzOSBnWLknwSaHtwag+1m7Z3W0hZneTvWq3z +wZ7U10VOylY0Ibw+F1tvdwxIAUMpsN0/lm7mlaoMwCC2/T42J5zjXM9OgdwZu5GQ +fezmlwQek8wiSdeXhrYTCjxDI3d+8NzmzSQfO4ObNDqDNOMCAwEAAaNjMGEwHwYD +VR0jBBgwFoAUkqR1LKSevoFE63n8isWVpesQdXMwDwYDVR0TAQH/BAUwAwEB/zAO +BgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFJKkdSyknr6BROt5/IrFlaXrEHVzMA0G +CSqGSIb3DQEBBQUAA4IBAQAo0uCG1eb4e/CX3CJrO5UUVg8RMKWaTzqwOuAGy2X1 +7caXJ/4l8lfmXpWMPmRgFVp/Lw0BxbFg/UU1z/CyvwbZ71q+s2IhtNerNXxTPqYn +8aEt2hojnczd7Dwtnic0XQ/CNnm8yUpiLe1r2X1BQ3y2qsrtYbE3ghUJGooWMNjs +ydZHcnhLEEYUjl8Or+zHL6sQ17bxbuyGssLoDZJz3KL0Dzq/YSMQiZxIQG5wALPT +ujdEWBF6AmqI8Dc08BnprNRlc/ZpjGSUOnmFKbAWKwyCPwacx/0QK54PLLae4xW/ +2TYcuiUaUj0a7CIMHOCkoj3w6DnPgcB77V0fb8XQC9eY +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIF3zCCA8egAwIBAgIOGTMAAQACKBqaBLzyVUUwDQYJKoZIhvcNAQEFBQAwejEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUGA1UEAxMeVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMB4XDTA2MDMyMjE1NTgzNFoXDTMwMTIz +MTIyNTk1OVowejELMAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVy +IEdtYkgxJDAiBgNVBAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEnMCUG +A1UEAxMeVEMgVHJ1c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJMIICIjANBgkqhkiG +9w0BAQEFAAOCAg8AMIICCgKCAgEAi9R3azRs5TbYalxeOO781R15Azt7g2JEgk6I +7d6D/+7MUGIFBZWZdpj2ufJf2AaRksL2LWYXH/1TA+iojWOpbuHWG4y8mLOLO9Tk +Lsp9hUkmW3m4GotAnn+7yT9jLM/RWny6KCJBElpN+Rd3/IX9wkngKhh/6aAsnPlE +/AxoOUL1JwW+jhV6YJ3wO8c85j4WvK923mq3ouGrRkXrjGV90ZfzlxElq1nroCLZ +gt2Y7X7i+qBhCkoy3iwX921E6oFHWZdXNwM53V6CItQzuPomCba8OYgvURVOm8M7 +3xOCiN1LNPIz1pDp81PcNXzAw9l8eLPNcD+NauCjgUjkKa1juPD8KGQ7mbN9/pqd +iPaZIgiRRxaJNXhdd6HPv0nh/SSUK2k2e+gc5iqQilvVOzRZQtxtz7sPQRxVzfUN +Wy4WIibvYR6X/OJTyM9bo8ep8boOhhLLE8oVx+zkNo3aXBM9ZdIOXXB03L+PemrB +Lg/Txl4PK1lszGFs/sBhTtnmT0ayWuIZFHCE+CAA7QGnl37DvRJckiMXoKUdRRcV +I5qSCLUiiI3cKyTr4LEXaNOvYb3ZhXj2jbp4yjeNY77nrB/fpUcJucglMVRGURFV +DYlcjdrSGC1z8rjVJ/VIIjfRYvd7Dcg4i6FKsPzQ8eu3hmPn4A5zf/1yUbXpfeJV +BWR4Z38CAwEAAaNjMGEwHwYDVR0jBBgwFoAUzdeQoW6jv9sw1toyJZAM5jkegGUw +DwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFM3XkKFu +o7/bMNbaMiWQDOY5HoBlMA0GCSqGSIb3DQEBBQUAA4ICAQB+FojoEw42zG4qhQc4 +xlaJeuNHIWZMUAgxWlHQ/KZeFHXeTDvs8e3MfhEHSmHu6rOOOqQzxu2KQmZP8Tx7 +yaUFQZmx7Cxb7tyW0ohTS3g0uW7muw/FeqZ8Dhjfbw90TNGp8aHp2FRkzF6WeKJW +GsFzshXGVwXf2vdIJIqOf2qp+U3pPmrOYCx9LZAI9mOPFdAtnIz/8f38DBZQVhT7 +upeG7rRJA1TuG1l/MDoCgoYhrv7wFfLfToPmmcW6NfcgkIw47XXP4S73BDD7Ua2O +giRAyn0pXdXZ92Vk/KqfdLh9kl3ShCngE+qK99CrxK7vFcXCifJ7tjtJmGHzTnKR +N4xJkunI7Cqg90lufA0kxmts8jgvynAF5X/fxisrgIDV2m/LQLvYG/AkyRDIRAJ+ +LtOYqqIN8SvQ2vqOHP9U6OFKbt2o1ni1N6WsZNUUI8cOpevhCTjXwHxgpV2Yj4wC +1dxWqPNNWKkL1HxkdAEy8t8PSoqpAqKiHYR3wvHMl700GXRd4nQ+dSf3r7/ufA5t +VIimVuImrTESPB5BeW0X6hNeH/Vcn0lZo7Ivo0LD+qh+v6WfSMlgYmIK371F3uNC +tVGW/cT1Gpm4UqJEzS1hjBWPgdVdotSQPYxuQGHDWV3Y2eH2dEcieXR92sqjbzcV +NvAsGnE8EXbfXRo+VGN4a2V+Hw== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOLmoAAQACH9dSISwRXDswDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDIgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDIgQ0EgSUkwHhcNMDYwMTEyMTQzODQzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMiBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBAKuAh5uO8MN8h9foJIIRszzdQ2Lu+MNF2ujhoF/RKrLqk2jf +tMjWQ+nEdVl//OEd+DFwIxuInie5e/060smp6RQvkL4DUsFJzfb95AhmC1eKokKg +uNV/aVyQMrKXDcpK3EY+AlWJU+MaWss2xgdW94zPEfRMuzBwBJWl9jmM/XOBCH2J +XjIeIqkiRUuwZi4wzJ9l/fzLganx4Duvo4bRierERXlQXa7pIXSSTYtZgo+U4+lK +8edJsBTj9WLL1XK9H7nSn6DNqPoByNkN39r8R52zyFTfSUrxIan+GE7uSNQZu+99 +5OKdy1u2bv/jzVrndIIFuoAlOMvkaZ6vQaoahPUCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTjq1RMgKHbVkO3 +kUrL84J6E1wIqzCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18yX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMiUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEAjNfffu4bgBCzg/XbEeprS6iS +GNn3Bzn1LL4GdXpoUxUc6krtXvwjshOg0wn/9vYua0Fxec3ibf2uWWuFHbhOIprt +ZjluS5TmVfwLG4t3wVMTZonZKNaL80VKY7f9ewthXbhtvsPcW3nS7Yblok2+XnR8 +au0WOB9/WIFaGusyiC2y8zl3gK9etmF1KdsjTYjKUCjLhdLTEKJZbtOTVAB6okaV +hgWcqRmY5TFyDADiZ9lA4CQze28suVyrZZ0srHbqNZn1l7kPJOzHdiEoZa5X6AeI +dUpWoNIFOqTmjZKILPPy4cHGYdtBxceb9w4aUUXCYWvcZCcXjFq32nQozZfkvQ== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEqjCCA5KgAwIBAgIOSkcAAQAC5aBd1j8AUb8wDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDMgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDMgQ0EgSUkwHhcNMDYwMTEyMTQ0MTU3WhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgMyBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALTgu1G7OVyLBMVMeRwjhjEQY0NVJz/GRcekPewJDRoeIMJW +Ht4bNwcwIi9v8Qbxq63WyKthoy9DxLCyLfzDlml7forkzMA5EpBCYMnMNWju2l+Q +Vl/NHE1bWEnrDgFPZPosPIlY2C8u4rBo6SI7dYnWRBpl8huXJh0obazovVkdKyT2 +1oQDZogkAHhg8fir/gKya/si+zXmFtGt9i4S5Po1auUZuV3bOx4a+9P/FRQI2Alq +ukWdFHlgfa9Aigdzs5OW03Q0jTo3Kd5c7PXuLjHCINy+8U9/I1LZW+Jk2ZyqBwi1 +Rb3R0DHBq1SfqdLDYmAD8bs5SpJKPQq5ncWg/jcCAwEAAaOCATQwggEwMA8GA1Ud +EwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBTUovyfs8PYA9NX +XAek0CSnwPIA1DCB7QYDVR0fBIHlMIHiMIHfoIHcoIHZhjVodHRwOi8vd3d3LnRy +dXN0Y2VudGVyLmRlL2NybC92Mi90Y19jbGFzc18zX2NhX0lJLmNybIaBn2xkYXA6 +Ly93d3cudHJ1c3RjZW50ZXIuZGUvQ049VEMlMjBUcnVzdENlbnRlciUyMENsYXNz +JTIwMyUyMENBJTIwSUksTz1UQyUyMFRydXN0Q2VudGVyJTIwR21iSCxPVT1yb290 +Y2VydHMsREM9dHJ1c3RjZW50ZXIsREM9ZGU/Y2VydGlmaWNhdGVSZXZvY2F0aW9u +TGlzdD9iYXNlPzANBgkqhkiG9w0BAQUFAAOCAQEANmDkcPcGIEPZIxpC8vijsrlN +irTzwppVMXzEO2eatN9NDoqTSheLG43KieHPOh6sHfGcMrSOWXaiQYUlN6AT0PV8 +TtXqluJucsG7Kv5sbviRmEb8yRtXW+rIGjs/sFGYPAfaLFkB2otE6OF0/ado3VS6 +g0bsyEa1+K+XwDsJHI/OcpY9M1ZwvJbL2NV9IJqDnxrcOfHFcqMRA/07QlIp2+gB +95tejNaNhk4Z+rwcvsUhpYeeeC422wlxo3I0+GzjBgnyXlal092Y+tTmBvTwtiBj +S+opvaqCZh77gaqnN60TGOaSw4HBM7uIHqHn4rS9MWwOUT1v+5ZWgOI2F9Hc5A== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDtjCCAp6gAwIBAgIOBcAAAQACQdAGCk3OdRAwDQYJKoZIhvcNAQEFBQAwdjEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxIjAgBgNV +BAsTGVRDIFRydXN0Q2VudGVyIENsYXNzIDQgQ0ExJTAjBgNVBAMTHFRDIFRydXN0 +Q2VudGVyIENsYXNzIDQgQ0EgSUkwHhcNMDYwMzIzMTQxMDIzWhcNMjUxMjMxMjI1 +OTU5WjB2MQswCQYDVQQGEwJERTEcMBoGA1UEChMTVEMgVHJ1c3RDZW50ZXIgR21i +SDEiMCAGA1UECxMZVEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQTElMCMGA1UEAxMc +VEMgVHJ1c3RDZW50ZXIgQ2xhc3MgNCBDQSBJSTCCASIwDQYJKoZIhvcNAQEBBQAD +ggEPADCCAQoCggEBALXNTJytrlG7fEjFDSmGehSt2VA9CXIgDRS2Y8b+WJ7gIV7z +jyIZ3E6RIM1viCmis8GsKnK6i1S4QF/yqvhDhsIwXMynXX/GCEnkDjkvjhjWkd0j +FnmA22xIHbzB3ygQY9GB493fL3l1oht48pQB5hBiecugfQLANIJ7x8CtHUzXapZ2 +W78mhEj9h/aECqqSB5lIPGG8ToVYx5ct/YFKocabEvVCUNFkPologiJw3fX64yhC +L04y87OjNopq1mJcrPoBbbTgci6VaLTxkwzGioLSHVPqfOA/QrcSWrjN2qUGZ8uh +d32llvCSHmcOHUJG5vnt+0dTf1cERh9GX8eu4I8CAwEAAaNCMEAwDwYDVR0TAQH/ +BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0OBBYEFB/quz4lGwa9pd1iBX7G +TFq/6A9DMA0GCSqGSIb3DQEBBQUAA4IBAQBYpCubTPfkpJKknGWYGWIi/HIy6QRd +xMRwLVpG3kxHiiW5ot3u6hKvSI3vK2fbO8w0mCr3CEf/Iq978fTr4jgCMxh1KBue +dmWsiANy8jhHHYz1nwqIUxAUu4DlDLNdjRfuHhkcho0UZ3iMksseIUn3f9MYv5x5 ++F0IebWqak2SNmy8eesOPXmK2PajVnBd3ttPedJ60pVchidlvqDTB4FAVd0Qy+BL +iILAkH0457+W4Ze6mqtCD9Of2J4VMxHL94J59bXAQVaS4d9VA61Iz9PyLrHHLVZM +ZHQqMc7cdalUR6SnQnIJ5+ECpkeyBM1CE+FhDOB4OiIgohxgQoaH96Xm +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEKjCCAxKgAwIBAgIQYAGXt0an6rS0mtZLL/eQ+zANBgkqhkiG9w0BAQsFADCB +rjELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDggdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAiBgNV +BAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMzAeFw0wODA0MDIwMDAwMDBa +Fw0zNzEyMDEyMzU5NTlaMIGuMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhhd3Rl +LCBJbmMuMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9uIFNlcnZpY2VzIERpdmlzaW9u +MTgwNgYDVQQLEy8oYykgMjAwOCB0aGF3dGUsIEluYy4gLSBGb3IgYXV0aG9yaXpl +ZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9vdCBDQSAtIEcz +MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsr8nLPvb2FvdeHsbnndm +gcs+vHyu86YnmjSjaDFxODNi5PNxZnmxqWWjpYvVj2AtP0LMqmsywCPLLEHd5N/8 +YZzic7IilRFDGF/Eth9XbAoFWCLINkw6fKXRz4aviKdEAhN0cXMKQlkC+BsUa0Lf +b1+6a4KinVvnSr0eAXLbS3ToO39/fR8EtCab4LRarEc9VbjXsCZSKAExQGbY2SS9 +9irY7CFJXJv2eul/VTV+lmuNk5Mny5K76qxAwJ/C+IDPXfRa3M50hqY+bAtTyr2S +zhkGcuYMXDhpxwTWvGzOW/b3aJzcJRVIiKHpqfiYnODz1TEoYRFsZ5aNOZnLwkUk +OQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV +HQ4EFgQUrWyqlGCc7eT/+j4KdCtjA/e2Wb8wDQYJKoZIhvcNAQELBQADggEBABpA +2JVlrAmSicY59BDlqQ5mU1143vokkbvnRFHfxhY0Cu9qRFHqKweKA3rD6z8KLFIW +oCtDuSWQP3CpMyVtRRooOyfPqsMpQhvfO0zAMzRbQYi/aytlryjvsvXDqmbOe1bu +t8jLZ8HJnBoYuMTDSQPxYA5QzUbF83d597YV4Djbxy8ooAw/dyZ02SUS2jHaGh7c +KUGRIjxpp7sC8rZcJwOJ9Abqm+RyguOhCcHpABnTPtRwa7pxpqpYrvS76Wy274fM +m7v/OeZWYdMKp8RcTGB7BXcmer/YB1IsYvdwY9k5vG8cwnncdimvzsUsZAReiDZu +MdRAGmI0Nj81Aa6sY6A= +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB +qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf +Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw +MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV +BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw +NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j +LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG +A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl +IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs +W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta +3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk +6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 +Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J +NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA +MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP +r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU +DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz +YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX +xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 +/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ +LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 +jVaMaA== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIICiDCCAg2gAwIBAgIQNfwmXNmET8k9Jj1Xm67XVjAKBggqhkjOPQQDAzCBhDEL +MAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjE4MDYGA1UECxMvKGMp +IDIwMDcgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxJDAi +BgNVBAMTG3RoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EgLSBHMjAeFw0wNzExMDUwMDAw +MDBaFw0zODAxMTgyMzU5NTlaMIGEMQswCQYDVQQGEwJVUzEVMBMGA1UEChMMdGhh +d3RlLCBJbmMuMTgwNgYDVQQLEy8oYykgMjAwNyB0aGF3dGUsIEluYy4gLSBGb3Ig +YXV0aG9yaXplZCB1c2Ugb25seTEkMCIGA1UEAxMbdGhhd3RlIFByaW1hcnkgUm9v +dCBDQSAtIEcyMHYwEAYHKoZIzj0CAQYFK4EEACIDYgAEotWcgnuVnfFSeIf+iha/ +BebfowJPDQfGAFG6DAJSLSKkQjnE/o/qycG+1E3/n3qe4rF8mq2nhglzh9HnmuN6 +papu+7qzcMBniKI11KOasf2twu8x+qi58/sIxpHR+ymVo0IwQDAPBgNVHRMBAf8E +BTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQUmtgAMADna3+FGO6Lts6K +DPgR4bswCgYIKoZIzj0EAwMDaQAwZgIxAN344FdHW6fmCsO99YCKlzUNG4k8VIZ3 +KMqh9HneteY4sPBlcIx/AlTCv//YoT7ZzwIxAMSNlPzcU9LcnXgWHxUzI1NS41ox +XZ3Krr0TKUQNJ1uo52icEvdYPy5yAlejj6EULg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIID4TCCAsmgAwIBAgIOYyUAAQACFI0zFQLkbPQwDQYJKoZIhvcNAQEFBQAwezEL +MAkGA1UEBhMCREUxHDAaBgNVBAoTE1RDIFRydXN0Q2VudGVyIEdtYkgxJDAiBgNV +BAsTG1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQTEoMCYGA1UEAxMfVEMgVHJ1 +c3RDZW50ZXIgVW5pdmVyc2FsIENBIElJSTAeFw0wOTA5MDkwODE1MjdaFw0yOTEy +MzEyMzU5NTlaMHsxCzAJBgNVBAYTAkRFMRwwGgYDVQQKExNUQyBUcnVzdENlbnRl +ciBHbWJIMSQwIgYDVQQLExtUQyBUcnVzdENlbnRlciBVbml2ZXJzYWwgQ0ExKDAm +BgNVBAMTH1RDIFRydXN0Q2VudGVyIFVuaXZlcnNhbCBDQSBJSUkwggEiMA0GCSqG +SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDC2pxisLlxErALyBpXsq6DFJmzNEubkKLF +5+cvAqBNLaT6hdqbJYUtQCggbergvbFIgyIpRJ9Og+41URNzdNW88jBmlFPAQDYv +DIRlzg9uwliT6CwLOunBjvvya8o84pxOjuT5fdMnnxvVZ3iHLX8LR7PH6MlIfK8v +zArZQe+f/prhsq75U7Xl6UafYOPfjdN/+5Z+s7Vy+EutCHnNaYlAJ/Uqwa1D7KRT +yGG299J5KmcYdkhtWyUB0SbFt1dpIxVbYYqt8Bst2a9c8SaQaanVDED1M4BDj5yj +dipFtK+/fz6HP3bFzSreIMUWWMv5G/UPyw0RUmS40nZid4PxWJ//AgMBAAGjYzBh +MB8GA1UdIwQYMBaAFFbn4VslQ4Dg9ozhcbyO5YAvxEjiMA8GA1UdEwEB/wQFMAMB +Af8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBRW5+FbJUOA4PaM4XG8juWAL8RI +4jANBgkqhkiG9w0BAQUFAAOCAQEAg8ev6n9NCjw5sWi+e22JLumzCecYV42Fmhfz +dkJQEw/HkG8zrcVJYCtsSVgZ1OK+t7+rSbyUyKu+KGwWaODIl0YgoGhnYIg5IFHY +aAERzqf2EQf27OysGh+yZm5WZ2B6dF7AbZc2rrUNXWZzwCUyRdhKBgePxLcHsU0G +DeGl6/R1yrqc0L2z0zIkTO5+4nYES0lT2PLpVDP85XEfPRRclkvxOvIAu2y0+pZV +CIgJwcyRGSmwIC3/yzikQOEXvnlhgP8HA4ZMTnsGnxGGjYnuJ8Tb4rwZjgvDwxPH +LQNjO9Po5KIqwoIIlBZU8O8fJ5AluA0OKBtHd0e9HKgl8ZS0Zg== +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIEPTCCAyWgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvzE/MD0GA1UEAww2VMOc +UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx +c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV4wXAYDVQQKDFVUw5xS +S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg +SGl6bWV0bGVyaSBBLsWeLiAoYykgQXJhbMSxayAyMDA3MB4XDTA3MTIyNTE4Mzcx +OVoXDTE3MTIyMjE4MzcxOVowgb8xPzA9BgNVBAMMNlTDnFJLVFJVU1QgRWxla3Ry +b25payBTZXJ0aWZpa2EgSGl6bWV0IFNhxJ9sYXnEsWPEsXPEsTELMAkGA1UEBhMC +VFIxDzANBgNVBAcMBkFua2FyYTFeMFwGA1UECgxVVMOcUktUUlVTVCBCaWxnaSDE +sGxldGnFn2ltIHZlIEJpbGnFn2ltIEfDvHZlbmxpxJ9pIEhpem1ldGxlcmkgQS7F +ni4gKGMpIEFyYWzEsWsgMjAwNzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoC +ggEBAKu3PgqMyKVYFeaK7yc9SrToJdPNM8Ig3BnuiD9NYvDdE3ePYakqtdTyuTFY +KTsvP2qcb3N2Je40IIDu6rfwxArNK4aUyeNgsURSsloptJGXg9i3phQvKUmi8wUG ++7RP2qFsmmaf8EMJyupyj+sA1zU511YXRxcw9L6/P8JorzZAwan0qafoEGsIiveG +HtyaKhUG9qPw9ODHFNRRf8+0222vR5YXm3dx2KdxnSQM9pQ/hTEST7ruToK4uT6P +IzdezKKqdfcYbwnTrqdUKDT74eA7YH2gvnmJhsifLfkKS8RQouf9eRbHegsYz85M +733WB2+Y8a+xwXrXgTW4qhe04MsCAwEAAaNCMEAwHQYDVR0OBBYEFCnFkKslrxHk +Yb+j/4hhkeYO/pyBMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8EBTADAQH/MA0G +CSqGSIb3DQEBBQUAA4IBAQAQDdr4Ouwo0RSVgrESLFF6QSU2TJ/sPx+EnWVUXKgW +AkD6bho3hO9ynYYKVZ1WKKxmLNA6VpM0ByWtCLCPyA8JWcqdmBzlVPi5RX9ql2+I +aE1KBiY3iAIOtsbWcpnOa3faYjGkVh+uX4132l32iPwa2Z61gfAyuOOI0JzzaqC5 +mxRZNTZPz/OOXl0XrRWV2N2y1RVuAE6zS89mlOTgzbUF2mNXi+WzqtvALhyQRNsa +XRik7r4EW5nVcV9VZWRi1aKbBFmGyGJ353yCRWo9F7/snXUMrqNvWtMvmDb08PUZ +qxFdyKbjKlhqQgnDvZImZjINXQhVdP+MmNAKpoRq0Tl9 +-----END CERTIFICATE----- +-----BEGIN CERTIFICATE----- +MIIDezCCAmOgAwIBAgIBATANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJUVzES +MBAGA1UECgwJVEFJV0FOLUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFU +V0NBIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwODI4MDcyNDMz +WhcNMzAxMjMxMTU1OTU5WjBfMQswCQYDVQQGEwJUVzESMBAGA1UECgwJVEFJV0FO +LUNBMRAwDgYDVQQLDAdSb290IENBMSowKAYDVQQDDCFUV0NBIFJvb3QgQ2VydGlm +aWNhdGlvbiBBdXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCwfnK4pAOU5qfeCTiRShFAh6d8WWQUe7UREN3+v9XAu1bihSX0NXIP+FPQQeFE +AcK0HMMxQhZHhTMidrIKbw/lJVBPhYa+v5guEGcevhEFhgWQxFnQfHgQsIBct+HH +K3XLfJ+utdGdIzdjp9xCoi2SBBtQwXu4PhvJVgSLL1KbralW6cH/ralYhzC2gfeX +RfwZVzsrb+RH9JlF/h3x+JejiB03HFyP4HYlmlD4oFT/RJB2I9IyxsOrBr/8+7/z +rX2SYgJbKdM1o5OaQ2RgXbL6Mv87BK9NQGr5x+PvI/1ry+UPizgN7gr8/g+YnzAx +3WxSZfmLgb4i4RxYA7qRG4kHAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNV +HRMBAf8EBTADAQH/MB0GA1UdDgQWBBRqOFsmjd6LWvJPelSDGRjjCDWmujANBgkq +hkiG9w0BAQUFAAOCAQEAPNV3PdrfibqHDAhUaiBQkr6wQT25JmSDCi/oQMCXKCeC +MErJk/9q56YAf4lCmtYR5VPOL8zy2gXE/uJQxDqGfczafhAJO5I1KlOy/usrBdls +XebQ79NqZp4VKIV66IIArB6nCWlWQtNoURi+VJq/REG6Sb4gumlc7rh3zc5sH62D +lhh9DrUUOYTxKOkto557HnpyWoOzeW/vtPzQCqVYT0bf+215WfKEIlKuD8z7fDvn +aspHYcN6+NOSBB+4IIThNlQWx0DeO4pz3N/GCUzf7Nr/1FNCocnyYh0igzyXxfkZ +YiesZSLX0zzG5Y6yU8xJzrww/nsOM5D77dIUkR8Hrw== +-----END CERTIFICATE-----+ \ No newline at end of file diff --git a/.mutt/colors b/.mutt/colors @@ -0,0 +1,78 @@ +# -*- muttrc -*- +# +# Colour settings for mutt. +# +# $Id: colours 6 2007-03-02 17:36:39Z vdanen $ + +# Default colour definitions +color normal default default +color quoted yellow default +color quoted1 green default +color quoted2 white default +color quoted3 yellow default +color quoted4 green default +color quoted5 default default + +#color indicator white default +#color indicator blue default +#color indicator black gray +#color indicator white black +#color indicator yellow black +color indicator yellow color236 +#color message yellow black +color message yellow default +#color status white black +color status color250 color237 +#color status default default +color error black red +color attachment magenta default +color signature red default +color markers red yellow +#color tilde yellow black +color tilde blue default +color search white red +color tree green default +color bold brightyellow default + +color hdrdefault cyan default +color header green default '^From:' +color header red default '^Subject:' +color header yellow default '^(To|CC):.*vdanen' + +# Colours for items in the index +color index cyan default ~N +color index green default "~N (~x annvix\.org | ~h \"^In-[Rr]eply-[Tt]o: .*annvix\.org\")" +color index green default "~N (~x linsec\.ca | ~h \"^In-[Rr]eply-[Tt]o: .*linsec\.ca\")" +color index green default "~N (~x mandriva\.com | ~h \"^In-[Rr]eply-[Tt]o: .*mandriva\.com\")" +color index red default ~F +color index green default ~T +color index brightwhite default ~D +mono index bold ~N +mono index bold ~F +mono index bold ~T +mono index bold ~D + +# Highlights inside the body of a message. + +# URLs +color body brightgreen default "(http|https|ftp|news|telnet|finger)://[^ \">\t\r\n]*" +color body brightgreen default "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+" +color body brightgreen default "news:[^ \">\t\r\n]*" +mono body bold "(http|https|ftp|news|telnet|finger)://[^ \">\t\r\n]*" +mono body bold "mailto:[-a-z_0-9.]+@[-a-z_0-9.]+" +mono body bold "news:[^ \">\t\r\n]*" + +# email addresses +color body brightcyan default "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+" +mono body bold "[-a-z_0-9.%$]+@[-a-z_0-9.]+\\.[-a-z][-a-z]+" + +# Various smilies and the like +color body yellow default "(^|[[:space:]])\\*[^[:space:]]+\\*([[:space:]]|$)" # *Bold* text. +color body yellow default "(^|[[:space:]])_[^[:space:]]+_([[:space:]]|$)" # _Underlined_ text. +color body yellow default "(^|[[:space:]])/[^[:space:]]+/([[:space:]]|$)" # /Italic/ text. + +# Colour definitions when on a mono screen +mono bold bold +mono underline underline +mono indicator reverse +mono header bold "^(From|Subject|X-Junked-Because|X-Virus-hagbard):" diff --git a/.mutt/colors2 b/.mutt/colors2 @@ -0,0 +1,22 @@ +# -*-muttrc-*- + +# Palette for use with the Linux console. Black background. + +color hdrdefault blue black +color quoted blue black +color signature blue black +color attachment red black +color message brightred black +color error brightred black +color indicator black red +color status brightgreen blue +color tree white black +color normal white black +color markers red black +color search white black +color tilde brightmagenta black +color index blue black ~F +color index red black "~N|~O" + +# color body brightwhite black '\*+[^*]+\*+' +# color body brightwhite black '_+[^_]+_+' diff --git a/.mutt/muttrc b/.mutt/muttrc @@ -0,0 +1,198 @@ +# IMAP: offlineimap +set folder = "~/Mail" +source ~/.mutt/mailboxes # mailboxes generated by offlineimap +set spoolfile = "+riseup/INBOX" +set mbox_type=Maildir + +# Send mail settings +folder-hook riseup 'set \ + from="Anders Damsgaard <andersd@riseup.net> "\ + realname="Anders Damsgaard"\ + record=+riseup/Sent\ + postponed=+riseup/Drafts\ + sendmail = "msmtp -a riseup"' + +folder-hook geomail 'set \ + from="Anders Damsgaard <anders.damsgaard@geo.au.dk> "\ + realname="Anders Damsgaard"\ + record=+geomail/Sent\ + postponed=+geomail/Drafts\ + signature=~/.signature\ + sendmail = "msmtp -a geomail"' + +folder-hook ucsd 'set \ + from="Anders Damsgaard <adamsgaard@ucsd.edu> "\ + realname="Anders Damsgaard"\ + record=+ucsd/Sent\ Items\ + postponed=+ucsd/Drafts\ + signature=~/.signature\ + sendmail = "msmtp -a ucsd"' + +folder-hook gmail 'set \ + from="Anders Damsgaard <andersdc@gmail.com> "\ + realname="Anders Damsgaard"\ + record=+gmail/[Gmail].Sent\ Mail\ + postponed=+gmail/[Gmail].Drafts\ + sendmail = "msmtp -a gmail"' + +# ignore own e-mail addresses from group-reply +alternates adamsgaard@ucsd.edu|adamsgaard@mail.ucsd.edu|andersd@risuep.net|andersdc@gmail.com|adc@geo.au.dk|anders.damsgaard@geo.au.dk + +# Cache files +set header_cache=~/.mutt/cache/headers +set message_cachedir=~/.mutt/cache/bodies + +# Custom certificates +set certificate_file=~/.mutt/certificates + +# sort threads by date +set sort=threads +set sort_aux = reverse-last-date-received + +set charset=utf-8 +set config_charset=utf-8 +set noallow_8bit +set ascii_chars=no # set to yes if terminal cannot display thread symbols +set send_charset="utf-8" +set assumed_charset="iso-8859-1" +set meta_key=yes +set attribution="* %n <%a> [%{%Y-%m-%d %H:%M:%S %Z}]:\n" +set edit_headers # edit the message headers. +set fast_reply=yes # skip initial prompts when replying +set include=yes # include original mail in reply +set editor="vim +8 -c 'set ft=mail noautoindent spell spelllang=en_us,da'" +set nomark_old # Don't mark unread new msgs as old. +set nosmart_wrap # Don't want smart wrapping. +set nomarkers # Don't want any wrap markers. +set mime_forward # Forward message as MIME attachments. +set pager_context=3 # Display 3 lines of context in pager. +set nostrict_threads # Lets have some fuzzy threading. +set fcc_clear # Keep fcc's clear of signatues and encryption. +set nopipe_decode # Don't decode messages when piping. +set text_flowed # label messages as format-flowed +set sleep_time=0 # speed up IMAP folders switch + +set ispell="aspell -e -c" +set tilde # Fill out messages with '~'. +set read_inc=100 # Read counter ticks every 100 msgs. +set write_inc=100 # Write counter ticks every 100 msgs. +set noconfirmappend # Just append, don't hassle me. +set pager_stop=yes # Stop at end of mail instead of displaying next mail + +# What we consider to be a quote. +set quote_regexp="^( {0,4}[>|:#%]| {0,4}[a-z0-9]+[>|]+)+" +set to_chars=" +TCF " # Drop the "L". + +# Display download progress every 5K +set net_inc=5 + +# When viewing a message, show the pager in # lines above +set pager_index_lines=5 + +# Mail check interval +set timeout = 15 +set mail_check = 5 # how often (in seconds) mutt should look for new mail (default = 5 sec) + +set alias_file=~/.mutt/aliases # Save aliases here +set sort_alias = alias # sort alias list when displayed in mutt +set reverse_alias = yes # sort in reverse order +source ~/.mutt/aliases # Load in my aliases. + +source ~/.sec/gpg.rc # Use GPG +source ~/.mutt/colors # Define colours. +#source ~/.mutt/mutt-colors-solarized/mutt-colors-solarized-dark-16.muttrc + +auto_view text/html +# HTML is the last option. +alternative_order text/plain text/enriched text/html + +# attach multiple files from file browser with 't' (tag). To attach tagged +# files: ';<enter>' + +# show email in browser +macro attach V "<pipe-entry>cat >~/.mutt_mail.html && open ~/.mutt_mail.html<enter>" "show attachment in browser" + +# vi-like movement +bind attach,index gg first-entry +bind attach,index G last-entry +bind pager gg top +bind pager G bottom +bind attach,index,pager \CD next-page +bind attach,index,pager \CU previous-page + +bind index,pager R group-reply +bind index <tab> sync-mailbox + +macro index M "T~N<enter>;WNT~O<enter>;WO\CT~T<enter>" "Mark all messages as read" +macro index \ f "l~F<enter>" "Show only flagged messages" + +# Macros to change between inboxes (e.g. SPACE 1), use noop editor to accept +# IMAP folders with spaces +bind editor <space> noop +macro index \ 1 "<change-folder>=riseup/INBOX/<enter>" "Go to Riseup inbox" +macro index \ u "<change-folder>=riseup/Spam.unsure/<enter>" "Go to Riseup/Spam.unsure" +macro index \ s "<change-folder>=riseup/Spam/<enter>" "Go to Riseup/Spam" +macro index \ ! "<change-folder>=riseup/Sent/<enter>" "Go to Riseup sent" +macro index \ 2 "<change-folder>=geomail/INBOX/<enter>" "Go to Geomail inbox" +macro index \ @ "<change-folder>=geomail/Sent/<enter>" "Go to Geomail sent" +macro index \ 3 "<change-folder>=ucsd/INBOX/<enter>" "Go to UCSD inbox" +macro index \ \# "<change-folder>=ucsd/Sent Items/<enter>" "Go to UCSD sent" +macro index \ 4 "<change-folder>=gmail/INBOX/<enter>" "Go to Gmail inbox" +macro index \ $ "<change-folder>=gmail/[Gmail].Sent\ Mail/<enter>" "Go to Gmail sent" +macro index \ c "<change-folder>=geomail/INBOX.cryolist/<enter>" "Go to cryolist" + + +# mutt-sidebar +set sidebar_visible = no +macro index \ S '<enter-command>toggle sidebar_visible<enter><refresh>' +macro pager \ S '<enter-command>toggle sidebar_visible<enter><redraw-screen>' +bind index,pager \CP sidebar-prev +bind index,pager \CN sidebar-next +bind index,pager \CO sidebar-open +#set sidebar_sort = yes # fix order of sidebar entries + +# abook address book +set query_command= "abook --mutt-query '%s'" +#macro index,pager a "<pipe-message>abook --add-email-quiet<return>" "add the +#sender address to abook" +macro index,pager A "!$EDITOR ~/.mutt/aliases\n:source ~/.mutt/aliases\n" "Edit aliases file and reload it" +macro pager a "<create-alias>" "create an alias from the message sender" +macro index Y "<next-unread-mailbox>" "go to next mailbox with unread mails" + +# Sync email +#macro index O "<shell-escape>offlineimap -u blinkenlights<enter>" "run +#offlineimap to sync all mail" +#macro index o "<shell-escape>offlineimap -u blinkenlights -qf INBOX<enter>" +#"run offlineimap to sync inboxes" +macro index O "<shell-escape>offlineimap<enter>" "run offlineimap to sync all mail" +macro index o "<shell-escape>offlineimap -qf INBOX<enter>" "run offlineimap to sync inboxes" +macro index K "<shell-escape>kill -9 $(ps aux|grep offlineimap|grep python|awk ' {print $2} ')<enter>" "kill all offlineimap processes" + +macro index U "<limit>all\n" "show all messages (undo limit)" + +# notmuch-mutt integration, from `man notmuch-mutt` +macro index L "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter> <shell-escape>notmuch-mutt -r --prompt search<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter><enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" "notmuch: search all mail" + +macro index <F9> "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter><pipe-message>notmuch-mutt -r thread<enter><change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter><enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" "notmuch: reconstruct thread" + +macro index <F6> "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter><pipe-message>notmuch-mutt tag -- -inbox<enter><enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" "notmuch: remove message from inbox" + +# show recipient instead of sender in "Sent" folder view +set date_format='%b %d %k:%M' +set my_index_format_pre='set index_format="%3C %Z %D %-20.20' +set my_index_format_post=' (%4.4c) %?M?<%M> ?%s"' +folder-hook .*[sS]ent.* "$my_index_format_pre"t"$my_index_format_post" +folder-hook ! .*[sS]ent.* "$my_index_format_pre"F"$my_index_format_post" + +# mark as spam (S) or ham (H) +macro index,pager S "<enter-command>unset wait_key<enter>\ +<pipe-entry>bogofilter -l -s<enter>\ +<enter-command>set wait_key<enter>\ +<save-message>=riseup/Spam<enter>" "mark as spam" +macro index,pager H "<enter-command>unset wait_key<enter>\ +<pipe-entry>bogofilter -l -n<enter>\ +<enter-command>set wait_key<enter>\ +<save-message>=riseup/INBOX<enter>" "mark as ham (non-spam)" + +# Get mutt to display its version on startup. +push <show-version> diff --git a/.mutt/offlineimap.py b/.mutt/offlineimap.py @@ -0,0 +1,53 @@ +#!/usr/bin/python +import re +import subprocess +import getpass +import os +import sys +if sys.platform == 'linux2': + import gnomekeyring as gkey + + +user = getpass.getuser() +home = os.getenv('HOME') + + +def get_keychain_pass(account=None, server=None): + if sys.platform == 'darwin': + command = 'sudo -u ' + user + \ + ' /usr/bin/security -v find-internet-password -g -a ' + account +\ + ' -s ' + server + ' ' + home + '/Library/Keychains/login.keychain' + output = subprocess.check_output(command, shell=True, + stderr=subprocess.STDOUT) + outtext = [l for l in output.splitlines() + if l.startswith('password: ')][0] + + return re.match(r'password: "(.*)"', outtext).group(1) + + elif sys.platform == 'linux2': + + attrs = {'server': server, 'protocol': 'http'} + items = gkey.find_items_sync(gkey.ITEM_NETWORK_PASSWORD, attrs) + return (items[0].attributes['user'], items[0].secret)[1] + + else: + raise Exception('Platform "' + sys.platform + '" not supported.') + + +def set_keychain_pass(protocol, server, user, password): + if sys.platform != 'linux2': + raise Exception('Only Linux is supported for setting passwords.') + + attrs = {'user': user, + 'server': server, + 'protocol': protocol} + name = 'offlineimap ' + server + + gkey.item_create_sync(gkey.get_default_keyring_sync(), + gkey.ITEM_NETWORK_PASSWORD, + name, attrs, password, True) + +if __name__ == '__main__': + account = sys.argv[1] + server = sys.argv[2] + print(get_keychain_pass(account=account, server=server)) diff --git a/.mutt/view_attachment.sh b/.mutt/view_attachment.sh @@ -0,0 +1,134 @@ +#!/bin/bash +# +# Author: Eric Gebhart +# +# Purpose: To be called by mutt as indicated by .mailcap to handle mail attachments. +# +# Function: Copy the given file to a temporary directory so mutt +# Won't delete it before it is read by the application. +# +# Along the way, discern the file type or use the type +# That is given. +# +# Finally use 'open' or 'open -a' if the third argument is +# given. +# +# +# Arguments: +# +# $1 is the file +# $2 is the type - for those times when file magic isn't enough. +# I frequently get html mail that has no extension +# and file can't figure out what it is. +# +# Set to '-' if you don't want the type to be discerned. +# Many applications can sniff out the type on their own. +# And they do a better job of it too. +# +# Open Office and MS Office for example. +# +# $3 is open with. as in open -a 'open with this .app' foo.xls +# +# Examples: These are typical .mailcap entries which use this program. +# +# Image/JPEG; /Users/vdanen/.mutt/view_attachment %s +# Image/PNG; /Users/vdanen/.mutt/view_attachment %s +# Image/GIF; /Users/vdanen/.mutt/view_attachment %s +# +# Application/PDF; /Users/vdanen/.mutt/view_attachment %s +# +# #This HTML example passes the type because file doesn't always work and +# #there aren't always extensions. +# +# text/html; /Users/vdanen/.mutt/view_attachment %s html +# +# # If your Start OpenOffice.org.app is spelled with a space like this one, <-- +# # then you'll need to precede the space with a \ . I found that too painful +# # and renamed it with an _. +# +# Application/vnd.ms-excel; /Users/vdanen/.mutt/view_attachment %s "-" '/Applications/OpenOffice.org1.1.2/Start_OpenOffice.org.app' +# Application/msword; /Users/vdanen/.mutt/view_attachment %s "-" '/Applications/OpenOffice.org1.1.2/Start_OpenOffice.org.app' +# +# +# Debugging: If you have problems set debug to 'yes'. That will cause a debug file +# be written to /tmp/mutt_attach/debug so you can see what is going on. +# +# See Also: The man pages for open, file, basename +# + +# the tmp directory to use. +tmpdir="$HOME/.tmp/mutt_attach" + +# the name of the debug file if debugging is turned on. +debug_file=$tmpdir/debug + +# debug. yes or no. +#debug="no" +debug="yes" + +type=$2 +open_with=$3 + +# make sure the tmpdir exists. +mkdir -p $tmpdir + +# clean it out. Remove this if you want the directory +# to accumulate attachment files. +rm -f $tmpdir/* + +# Mutt puts everything in /tmp by default. +# This gets the basic filename from the full pathname. +filename=`basename $1` + +# get rid of the extenson and save the name for later. +file=`echo $filename | cut -d"." -f1` + +if [ $debug = "yes" ]; then + echo "1:" $1 " 2:" $2 " 3:" $3 > $debug_file + echo "Filename:"$filename >> $debug_file + echo "File:"$file >> $debug_file + echo "===========================" >> $debug_file +fi + +# if the type is empty then try to figure it out. +if [ -z $type ]; then + file $1 + type=`file -bi $1 | cut -d"/" -f2 | sed 's/;.*$//'` +fi + +# if the type is '-' then we don't want to mess with type. +# Otherwise we are rebuilding the name. Either from the +# type that was passed in or from the type we discerned. +if [ $type = "-" ]; then + newfile=$filename +else + newfile=$file.$type +fi + +newfile=$tmpdir/$newfile + +# Copy the file to our new spot so mutt can't delete it +# before the app has a chance to view it. +cp $1 $newfile + +if [ $debug = "yes" ]; then + echo "File:" $file "TYPE:" $type >> $debug_file + echo "Newfile:" $newfile >> $debug_file + echo "Open With:" $open_with >> $debug_file +fi + +# If there's no 'open with' then we can let preview do it's thing. +# Otherwise we've been told what to use. So do an open -a. +if [ `uname | grep -i Darwin` ]; then + opencmd=open +else + opencmd=xdg-open +fi + +if [ -z $open_with ]; then + echo $opencmd $newfile + $opencmd $newfile +else + echo $opencmd -a "$open_with" $newfile + $opencmd -a "$open_with" $newfile +fi diff --git a/.ncmpcpp/config b/.ncmpcpp/config @@ -0,0 +1,41 @@ +# +# ~/.ncmpcpp/config - My ncmpcpp preferences +# + +mpd_host = "localhost" +#mpd_host = "etlangtkodeord@192.168.2.7" +mpd_port = "6600" +mpd_music_dir = "/home/music" +mpd_crossfade_time = "1" +visualizer_in_stereo = "yes" +#visualizer_in_stereo = "no" +visualizer_fifo_path = "/tmp/mpd.fifo" +visualizer_output_name = "my_fifo" +visualizer_type = "spectrum" # spectrum/wave +#visualizer_type = "wave" # spectrum/wave +song_list_format = "$3{%A }|{%a }$7{%b }$0{%t}| $4$R{%7l}$9" +now_playing_prefix = "$r" +now_playing_suffix = "$/r" +song_columns_list_format = "(30)[green]{a} (40)[]{t|f} (30)[cyan]{b}" +playlist_display_mode = "columns" +browser_display_mode = "columns" +search_engine_display_mode = "columns" +autocenter_mode = "yes" +centered_cursor = "yes" +progressbar_look = " " +user_interface = "alternative" +default_space_mode = "select" +header_visibility = "no" +statusbar_visibility = "no" +titles_visibility = "no" +follow_now_playing_lyrics = "yes" +store_lyrics_in_song_dir = "yes" +screen_switcher_mode = "sequence: 2 -> 3" +ignore_leading_the = "yes" +mouse_support = "no" +empty_tag_marker = "[empty]" +allow_physical_files_deletion = "yes" +allow_physical_directories_deletion = "yes" +main_window_color = "default" +main_window_highlight_color = "default" +visualizer_color = "blue" diff --git a/.offlineimaprc b/.offlineimaprc @@ -0,0 +1,256 @@ +# Sample minimal config file. Copy this to ~/.offlineimaprc and edit to +# suit to get started fast. + +# passwords for offlineimap and msmtprc stored in OSX keychain +# http://stevelosh.com/blog/2012/10/the-homely-mutt/#getting-email + +[general] +# List of accounts to be synced, separated by a comma. +#accounts = riseup,geomail +accounts = riseup,geomail,ucsd,gmail +# Suppress nothing but errors +#ui = quiet +ui = ttyui +#ui = blinkenlights +pythonfile=~/.mutt/offlineimap.py +# Controls how many accounts may be synced simultaneously +maxsyncaccounts = 4 + +[mbnames] +# Generate a muttrc fragment containing the mailboxes offlineimap syncs +enabled = yes +filename = ~/.mutt/mailboxes +header = "mailboxes " +peritem = "+%(accountname)s/%(foldername)s" +sep = " " +footer = "\n" + +[Account riseup] +# Identifier for the local repository; e.g. the maildir to be synced via IMAP. +localrepository = riseup-local +# Identifier for the remote repository; i.e. the actual IMAP, usually non-local. +remoterepository = riseup-remote +# Status cache. Default is plain, which eventually becomes huge and slow. +status_backend = sqlite +#presynchook = imapfilter -c ~/.imapfilter/riseup.lua +#presynchook = imapfilter -t /usr/local/etc/openssl/cert.pem -c ~/.imapfilter/riseup.lua +presynchook = imapfilter -t ~/.mutt/cert.pem -c ~/.imapfilter/riseup.lua +postsynchook = notmuch new + +# Minutes between syncs +#autorefresh = 5 +# Number of quick-syncs between autorefreshes. Quick-syncs do not update if the +# only changes were to IMAP flags +#quick = 10 + +[Repository riseup-local] +# Currently, offlineimap only supports maildir and IMAP for local repositories. +type = Maildir +# Where should the mail be placed? +localfolders = ~/Mail/riseup + +[Repository riseup-remote] +# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP. +type = IMAP +remotehost = mail.riseup.net +remoteuser = andersd +remotepasseval = get_keychain_pass(account="andersd", server="mail.riseup.net") +ssl = yes +cert_fingerprint = 86a010ddba262196d7f6f1f47ae03032f9031c32 +#folderfilter = lambda folder: folder not in ['Drafts'] + +# Instead of closing the connection once a sync is complete, offlineimap will +# send empty data to the server to hold the connection open. A value of 60 +# attempts to hold the connection for a minute between syncs (both quick and +# autorefresh).This setting has no effect if autorefresh and holdconnectionopen +# are not both set. +#keepalive = 60 +# OfflineIMAP normally closes IMAP server connections between refreshes if +# the global option autorefresh is specified. If you wish it to keep the +# connection open, set this to true. This setting has no effect if autorefresh +# is not set. +#holdconnectionopen = yes + + +[Account geomail] +# Identifier for the local repository; e.g. the maildir to be synced via IMAP. +localrepository = geomail-local +# Identifier for the remote repository; i.e. the actual IMAP, usually non-local. +remoterepository = geomail-remote +# Status cache. Default is plain, which eventually becomes huge and slow. +status_backend = sqlite +postsynchook = notmuch new + +# Minutes between syncs +#autorefresh = 5 +# Number of quick-syncs between autorefreshes. Quick-syncs do not update if the +# only changes were to IMAP flags +#quick = 10 + +[Repository geomail-local] +# Currently, offlineimap only supports maildir and IMAP for local repositories. +type = Maildir +# Where should the mail be placed? +localfolders = ~/Mail/geomail + +[Repository geomail-remote] +# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP. +type = IMAP +remotehost = imap.au.dk +remoteuser = au217756 +remotepasseval = get_keychain_pass(account="au217756", server="imap.au.dk") +ssl = yes +cert_fingerprint = ae2c89d80632be3ec8a149225199e3cdcc88311f +folderfilter = lambda folder: not re.search('NFIT-Import|geo07kej|Suggested Contacts|Noter|Opgaver|Journal|Slettet post|archive|Kalender|Kontaktpersoner|RSS Feeds', folder) + +# Instead of closing the connection once a sync is complete, offlineimap will +# send empty data to the server to hold the connection open. A value of 60 +# attempts to hold the connection for a minute between syncs (both quick and +# autorefresh).This setting has no effect if autorefresh and holdconnectionopen +# are not both set. +#keepalive = 60 +# OfflineIMAP normally closes IMAP server connections between refreshes if +# the global option autorefresh is specified. If you wish it to keep the +# connection open, set this to true. This setting has no effect if autorefresh +# is not set. +#holdconnectionopen = yes + + +[Account ucsd] +# Identifier for the local repository; e.g. the maildir to be synced via IMAP. +localrepository = ucsd-local +# Identifier for the remote repository; i.e. the actual IMAP, usually non-local. +remoterepository = ucsd-remote +# Status cache. Default is plain, which eventually becomes huge and slow. +status_backend = sqlite +postsynchook = notmuch new + +# Minutes between syncs +#autorefresh = 5 +# Number of quick-syncs between autorefreshes. Quick-syncs do not update if the +# only changes were to IMAP flags +#quick = 10 + +[Repository ucsd-local] +# Currently, offlineimap only supports maildir and IMAP for local repositories. +type = Maildir +# Where should the mail be placed? +localfolders = ~/Mail/ucsd + +[Repository ucsd-remote] +# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP. +type = IMAP +remotehost = mail.ucsd.edu +remoteuser = adamsgaard +remotepasseval = get_keychain_pass(account="adamsgaard", server="mail.ucsd.edu") +ssl = yes +cert_fingerprint = ec083b38e0a1942725d301d120893c1014701062 +#folderfilter = lambda folder: folder not in ['Kalender','Kontaktpersoner','Slettet post','NFIT-Import-adc-2012-09-11-04:18'] + +# Instead of closing the connection once a sync is complete, offlineimap will +# send empty data to the server to hold the connection open. A value of 60 +# attempts to hold the connection for a minute between syncs (both quick and +# autorefresh).This setting has no effect if autorefresh and holdconnectionopen +# are not both set. +#keepalive = 60 +# OfflineIMAP normally closes IMAP server connections between refreshes if +# the global option autorefresh is specified. If you wish it to keep the +# connection open, set this to true. This setting has no effect if autorefresh +# is not set. +#holdconnectionopen = yes + + + +[Account gmail] +# Identifier for the local repository; e.g. the maildir to be synced via IMAP. +localrepository = gmail-local +# Identifier for the remote repository; i.e. the actual IMAP, usually non-local. +remoterepository = gmail-remote +# Status cache. Default is plain, which eventually becomes huge and slow. +status_backend = sqlite +postsynchook = notmuch new + +# Minutes between syncs +#autorefresh = 5 +# Number of quick-syncs between autorefreshes. Quick-syncs do not update if the +# only changes were to IMAP flags +#quick = 10 + +[Repository gmail-local] +# Currently, offlineimap only supports maildir and IMAP for local repositories. +type = Maildir +# Where should the mail be placed? +localfolders = ~/Mail/gmail +nametrans = lambda folder: {'drafts': '[Gmail]/Drafts', + 'sent': '[Gmail]/Sent Mail', + 'flagged': '[Gmail]/Starred', + 'trash': '[Gmail]/Trash', + 'archive': '[Gmail]/All Mail', + }.get(folder, folder) + +[Repository gmail-remote] +# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP. +type = Gmail +remoteuser = andersdc@gmail.com +remotepasseval = get_keychain_pass(account="andersdc@gmail.com", server="imap.gmail.com") +auth_mechanisms = LOGIN +realdelete = no +nametrans = lambda folder: {'drafts': '[Gmail]/Drafts', + 'sent': '[Gmail]/Sent Mail', + 'flagged': '[Gmail]/Starred', + 'trash': '[Gmail]/Trash', + 'archive': '[Gmail]/All Mail', + }.get(folder, folder) +#cert_fingerprint = c1a3bb1a8617af4a28ee2e0cd494533c3cd70bf8 +#cert_fingerprint = fc0a6ba4bf46851bcea02c6a438de63f6811165b,5f9f9598bf27cce4a97762336a753b8c07878564,f0b04600b419486538ace149e3615c7d94953c87 +ssl=true +# install openssl from homebrew +sslcacertfile=/usr/local/etc/openssl/cert.pem + +#folderfilter = lambda folder: folder not in ['Kalender','Kontaktpersoner','Slettet post','NFIT-Import-adc-2012-09-11-04:18'] + +# Instead of closing the connection once a sync is complete, offlineimap will +# send empty data to the server to hold the connection open. A value of 60 +# attempts to hold the connection for a minute between syncs (both quick and +# autorefresh).This setting has no effect if autorefresh and holdconnectionopen +# are not both set. +#keepalive = 60 +# OfflineIMAP normally closes IMAP server connections between refreshes if +# the global option autorefresh is specified. If you wish it to keep the +# connection open, set this to true. This setting has no effect if autorefresh +# is not set. +#holdconnectionopen = yes + + + +[Account icloud] +# Identifier for the local repository; e.g. the maildir to be synced via IMAP. +localrepository = icloud-local +# Identifier for the remote repository; i.e. the actual IMAP, usually non-local. +remoterepository = icloud-remote +# Status cache. Default is plain, which eventually becomes huge and slow. +status_backend = sqlite +postsynchook = notmuch new + +# Minutes between syncs +#autorefresh = 5 +# Number of quick-syncs between autorefreshes. Quick-syncs do not update if the +# only changes were to IMAP flags +#quick = 10 + +[Repository icloud-local] +# Currently, offlineimap only supports maildir and IMAP for local repositories. +type = Maildir +# Where should the mail be placed? +localfolders = ~/Mail/icloud + +[Repository icloud-remote] +# Remote repos can be IMAP or Gmail, the latter being a preconfigured IMAP. +type = IMAP +remotehost = imap.mail.me.com +remoteuser = a.damsgaard +remotepasseval = get_keychain_pass(account="a.damsgaard", server="imap.mail.me.com") +auth_mechanisms = PLAIN +ssl = yes +cert_fingerprint = 653087783af6e38b439b275bacba12777bdee9d1 +#folderfilter = lambda folder: folder not in ['Drafts'] diff --git a/.signature b/.signature @@ -0,0 +1,9 @@ +Anders Damsgaard, Ph.D. +https://adamsgaard.dk + +Institute of Geophysics and Planetary Physics +Scripps Institution of Oceanography +University of California, San Diego + +PGP public key: https://adamsgaard.dk/adc.gpg +Fingerprint: 4B20 FFE8 CE37 0CB5 4E2C 3282 7601 823F AC65 17CA diff --git a/.spacemacs b/.spacemacs @@ -0,0 +1,275 @@ +;; -*- mode: dotspacemacs -*- +;; This file is loaded by Spacemacs at startup. +;; It must be stored in your home directory. + +(defun dotspacemacs/layers () + "Configuration Layers declaration." + (setq-default + ;; List of additional paths where to look for configuration layers. + ;; Paths must have a trailing slash (ie. `~/.mycontribs/') + dotspacemacs-configuration-layer-path '() + ;; List of configuration layers to load. If it is the symbol `all' instead + ;; of a list then all discovered layers will be installed. + dotspacemacs-configuration-layers + '( + ;; -------------------------------------------------------- + ;; Example of useful layers you may want to use right away + ;; Uncomment a layer name and press SPC f e R to install it + ;; -------------------------------------------------------- + auto-completion + better-defaults + git + github + ;diff-hl + markdown + org + syntax-checking + latex + python + c-c++ + html + lua + shell + shell-scripts + ;yasnippet + osx + tmux + themes-megapack + ) + ;; A list of packages and/or extensions that will not be install and loaded. + dotspacemacs-excluded-packages '() + ;; If non-nil spacemacs will delete any orphan packages, i.e. packages that + ;; are declared in a layer which is not a member of + ;; the list `dotspacemacs-configuration-layers' + dotspacemacs-delete-orphan-packages t)) + + +(defun dotspacemacs/init () + "Initialization function. +This function is called at the very startup of Spacemacs initialization +before layers configuration." + ;; This setq-default sexp is an exhaustive list of all the supported + ;; spacemacs settings. + (setq-default + ;; Either `vim' or `emacs'. Evil is always enabled but if the variable + ;; is `emacs' then the `holy-mode' is enabled at startup. + dotspacemacs-editing-style 'vim + ;; If non nil output loading progess in `*Messages*' buffer. + dotspacemacs-verbose-loading nil + ;; Specify the startup banner. Default value is `official', it displays + ;; the official spacemacs logo. An integer value is the index of text + ;; banner, `random' chooses a random text banner in `core/banners' + ;; directory. A string value must be a path to a .PNG file. + ;; If the value is nil then no banner is displayed. + ;; dotspacemacs-startup-banner 'official + dotspacemacs-startup-banner 'official + ;; t if you always want to see the changelog at startup + dotspacemacs-always-show-changelog t + ;; List of items to show in the startup buffer. If nil it is disabled. + ;; Possible values are: `recents' `bookmarks' `projects'." + dotspacemacs-startup-lists '(recents projects) + ;; List of themes, the first of the list is loaded when spacemacs starts. + ;; Press <SPC> T n to cycle to the next theme in the list (works great + ;; with 2 themes variants, one dark and one light) + ;; see theme gallery at http://themegallery.robdor.com + dotspacemacs-themes '(spacemacs-dark + solarized-dark + solarized-light + spacemacs-light + leuven + ) + ;; If non nil the cursor color matches the state color. + dotspacemacs-colorize-cursor-according-to-state t + ;; Default font. `powerline-scale' allows to quickly tweak the mode-line + ;; size to make separators look not too crappy. + ;dotspacemacs-default-font '("Source Code Pro" + ; :size 13 + ; :weight normal + ; :width normal + ; :powerline-scale 1.1) + dotspacemacs-default-font '("PragmataPro" + :size 14 + :weight normal + :width normal + :powerline-scale 1.1) + ;; The leader key + dotspacemacs-leader-key "SPC" + ;; Escape sequence + evil-escape-key-sequence "jk" + ;; The leader key accessible in `emacs state' and `insert state' + dotspacemacs-emacs-leader-key "M-m" + ;; Major mode leader key is a shortcut key which is the equivalent of + ;; pressing `<leader> m`. Set it to `nil` to disable it. + dotspacemacs-major-mode-leader-key "," + ;; Major mode leader key accessible in `emacs state' and `insert state' + dotspacemacs-major-mode-emacs-leader-key "C-M-m" + ;; The command key used for Evil commands (ex-commands) and + ;; Emacs commands (M-x). + ;; By default the command key is `:' so ex-commands are executed like in Vim + ;; with `:' and Emacs commands are executed with `<leader> :'. + dotspacemacs-command-key ":" + ;; If non nil the paste micro-state is enabled. While enabled pressing `p` + ;; several times cycle between the kill ring content. + dotspacemacs-enable-paste-micro-state t + ;; Guide-key delay in seconds. The Guide-key is the popup buffer listing + ;; the commands bound to the current keystrokes. + dotspacemacs-guide-key-delay 0.4 + ;; If non nil a progress bar is displayed when spacemacs is loading. This + ;; may increase the boot time on some systems and emacs builds, set it to + ;; nil ;; to boost the loading time. + dotspacemacs-loading-progress-bar t + ;; If non nil the frame is fullscreen when Emacs starts up. + ;; (Emacs 24.4+ only) + dotspacemacs-fullscreen-at-startup nil + ;; If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. + ;; Use to disable fullscreen animations in OSX." + dotspacemacs-fullscreen-use-non-native nil + ;; If non nil the frame is maximized when Emacs starts up. + ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil. + ;; (Emacs 24.4+ only) + dotspacemacs-maximized-at-startup nil + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's active or selected. + ;; Transparency can be toggled through `toggle-transparency'. + dotspacemacs-active-transparency 90 + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's inactive or deselected. + ;; Transparency can be toggled through `toggle-transparency'. + dotspacemacs-inactive-transparency 90 + ;; If non nil unicode symbols are displayed in the mode line. + dotspacemacs-mode-line-unicode-symbols t + ;; If non nil smooth scrolling (native-scrolling) is enabled. Smooth + ;; scrolling overrides the default behavior of Emacs which recenters the + ;; point when it reaches the top or bottom of the screen. + dotspacemacs-smooth-scrolling t + ;; If non-nil smartparens-strict-mode will be enabled in programming modes. + dotspacemacs-smartparens-strict-mode nil + ;; If non nil advises quit functions to keep server open when quitting. + dotspacemacs-persistent-server nil + ;; List of search tool executable names. Spacemacs uses the first installed + ;; tool of the list. Supported tools are `ag', `pt', `ack' and `grep'. + dotspacemacs-search-tools '("ag" "pt" "ack" "grep") + ;; The default package repository used if no explicit repository has been + ;; specified with an installed package. + ;; Not used for now. + dotspacemacs-default-package-repository nil + ) + ;; User initialization goes here + (define-key global-map (kbd "RET") 'reindent-then-newline-and-indent) + ) + +(defun dotspacemacs/user-config () + "Configuration function. + This function is called at the very end of Spacemacs initialization after +layers configuration." + + ;; Scroll compile window + ;(setq compilation-scroll-output t) + ;; Scroll compile window until first error + (setq compilation-scroll-output 'first-error) + + ;; Indentation rules + (setq-default indent-tabs-mode nil) + (setq-default tab-width 4) + (setq c-default-style "linux" c-basic-offset 4) + + ;; disable background color in terminal + (custom-set-faces (if (not window-system) '(default ((t (:background "nil")))))) + + ;; text lines limit to 80 characters + (setq fill-column 80) + (add-hook 'text-mode-hook 'turn-on-auto-fill) + (setq-default fci-rule-column 80) + (setq fci-rule-width 1) ;; width in px + (setq fci-rule-color "#073642") ;; color + (defun sanityinc/fci-enabled-p () (symbol-value 'fci-mode)) + + ;; use latexmk for pdf export + ;(setq org-latex-to-pdf-process (list "latexmk -pdf %f")) + (setq org-latex-pdf-process + '("pdflatex -interaction nonstopmode -output-directory %o %f" + "bibtex %b" + "pdflatex -interaction nonstopmode -output-directory %o %f" + "pdflatex -interaction nonstopmode -output-directory %o %f")) + (setq reftex-default-bibliography + '("/home/ad/articles/own/BIBnew.bib")) + (add-hook 'LaTeX-mode-hook 'turn-on-reftex) ; with AUCTeX LaTeX mode + (add-hook 'latex-mode-hook 'turn-on-reftex) ; with Emacs latex mode + (add-hook 'org-mode-hook 'turn-on-reftex) ; with Org mode + (setq reftex-cite-format 'natbib) + + ;; set pdf viewer on OSX and Linux + (cond + ((string-equal system-type "darwin") + (progn (setq TeX-view-program-selection '((output-pdf "Skim"))))) + ((string-equal system-type "gnu/linux") + (progn (setq TeX-view-program-selection '((output-pdf "Okular")))))) + + ;; enable PDF-LaTeX synchronization + ;; press SPC m v to highlight line in PDF + ;; press shift cmd and click in PDF to show line in sourcecode + (setq TeX-source-correlate-mode t) + (setq TeX-source-correlate-start-server t) + (setq TeX-source-correlate-method 'synctex) + (setq TeX-view-program-list + '(("Okular" "okular --unique %o#src:%n%b") + ("Skim" "displayline -b -g %n %o %b"))) + + ;; control which languages are enabled for execution in org-mode with C-c C-c + ;; see http://orgmode.org/org.html#Languages + (require 'ob-C) + (require 'ob-gnuplot) + (require 'ob-octave) + (require 'ob-latex) + (require 'ob-python) + (require 'ob-sh) + ;(require 'ob-julia) + + ;; syntax highlighting in source code blocks + (setq org-src-fontify-natively t) + + ;; use python from anaconda + ;(setq python-shell-virtualenv-path "~/anaconda/bin") + + ;; always show battery info + ;(spacemacs/mode-line-battery-info-toggle) + (spacemacs/toggle-mode-line-battery) + + ;; always show line numbers + (spacemacs/toggle-line-numbers) + + + ;; always open spacemacs buffer, also with emacsclient + (setq initial-buffer-choice + (lambda () + (get-buffer "*spacemacs*"))) +) + + +;; Do not write anything past this comment. This is where Emacs will +;; auto-generate custom variable definitions. + +(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. + '(ahs-case-fold-search nil t) + '(ahs-default-range (quote ahs-range-whole-buffer) t) + '(ahs-idle-interval 0.25 t) + '(ahs-idle-timer 0 t) + '(ahs-inhibit-face-list nil t) + '(expand-region-contract-fast-key "V") + '(expand-region-reset-fast-key "r") + '(org-agenda-files (quote ("~/doc/org-mode-hints.org"))) + '(package-selected-packages + (quote + (yapfify uuidgen py-isort pug-mode osx-dictionary org-projectile org org-download mwim live-py-mode link-hint github-search eyebrowse evil-visual-mark-mode evil-unimpaired evil-ediff goto-chg undo-tree eshell-z dumb-jump diminish darkokai-theme company-shell column-enforce-mode auctex-latexmk zonokai-theme zenburn-theme zen-and-art-theme xterm-color ws-butler window-numbering web-mode volatile-highlights vi-tilde-fringe underwater-theme ujelly-theme twilight-theme twilight-bright-theme twilight-anti-bright-theme tronesque-theme toxi-theme toc-org tao-theme tangotango-theme tango-plus-theme tango-2-theme tagedit sunny-day-theme sublime-themes subatomic256-theme subatomic-theme stekene-theme spaceline powerline spacegray-theme soothe-theme soft-stone-theme soft-morning-theme soft-charcoal-theme smyx-theme smooth-scrolling smeargle slim-mode shell-pop seti-theme scss-mode sass-mode reverse-theme reveal-in-osx-finder restart-emacs rainbow-delimiters railscasts-theme pyvenv pytest pyenv-mode py-yapf purple-haze-theme professional-theme popwin planet-theme pip-requirements phoenix-dark-pink-theme phoenix-dark-mono-theme persp-mode pcre2el pbcopy pastels-on-dark-theme paradox hydra spinner page-break-lines osx-trash orgit organic-green-theme org-repo-todo org-present org-pomodoro alert log4e gntp org-plus-contrib org-bullets open-junk-file omtose-phellack-theme oldlace-theme occidental-theme obsidian-theme noctilux-theme niflheim-theme neotree naquadah-theme mustang-theme multi-term move-text monokai-theme monochrome-theme molokai-theme moe-theme mmm-mode minimal-theme material-theme markdown-toc markdown-mode majapahit-theme magit-gitflow magit-gh-pulls lush-theme lua-mode lorem-ipsum linum-relative light-soap-theme leuven-theme less-css-mode launchctl jbeans-theme jazz-theme jade-mode ir-black-theme inkpot-theme info+ indent-guide ido-vertical-mode hy-mode hungry-delete htmlize hl-todo highlight-parentheses highlight-numbers parent-mode highlight-indentation heroku-theme hemisu-theme help-fns+ helm-themes helm-swoop helm-pydoc helm-projectile helm-mode-manager helm-make projectile helm-gitignore request helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag hc-zenburn-theme haml-mode gruvbox-theme gruber-darker-theme grandshell-theme gotham-theme google-translate golden-ratio gnuplot gitignore-mode github-clone github-browse-file gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link gist gh marshal logito pcache ht gh-md gandalf-theme flycheck-pos-tip flycheck pkg-info epl flx-ido flx flatui-theme flatland-theme fish-mode firebelly-theme fill-column-indicator farmhouse-theme fancy-battery expand-region exec-path-from-shell evil-visualstar evil-tutor evil-surround evil-search-highlight-persist evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit magit magit-popup git-commit with-editor evil-lisp-state smartparens evil-indent-plus evil-iedit-state iedit evil-exchange evil-escape evil-args evil-anzu anzu eval-sexp-fu highlight espresso-theme eshell-prompt-extras esh-help emmet-mode dracula-theme django-theme disaster define-word darktooth-theme darkmine-theme darkburn-theme dakrone-theme cython-mode cyberpunk-theme company-web web-completion-data company-statistics company-quickhelp pos-tip company-c-headers company-auctex company-anaconda company colorsarenice-theme color-theme-sanityinc-tomorrow color-theme-sanityinc-solarized cmake-mode clues-theme clean-aindent-mode clang-format cherry-blossom-theme busybee-theme buffer-move bubbleberry-theme bracketed-paste birds-of-paradise-plus-theme badwolf-theme auto-yasnippet yasnippet auto-highlight-symbol auctex apropospriate-theme anti-zenburn-theme anaconda-mode pythonic f dash s ample-zen-theme ample-theme alect-themes aggressive-indent afternoon-theme adaptive-wrap ace-window ace-link ace-jump-helm-line helm avy helm-core async ac-ispell auto-complete popup quelpa package-build use-package which-key bind-key bind-map evil spacemacs-theme))) + '(ring-bell-function (quote ignore))) +(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. + ) + diff --git a/.tmuxinator/article2.yml b/.tmuxinator/article2.yml @@ -0,0 +1,23 @@ +# ~/.tmuxinator/article2.yml + +name: article2 +#root: ~/articles/own/2-org +root: ~/articles/own/2 + +# Optional tmux socket +# socket_name: foo + +# Runs before everything. Use it to start daemons etc. +# pre: sudo /etc/rc.d/mysqld start + +# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions. +# pre_window: rbenv shell 2.0.0-p247 + +# Pass command line options to tmux. Useful for specifying a different tmux.conf. +# tmux_options: -f ~/.tmux.mac.conf + +# Change the command to call tmux. This can be used by derivatives/wrappers like byobu. +# tmux_command: byobu + +windows: + - editor: make view &>/dev/null & ; make edit diff --git a/.tmuxinator/cosmo.yml b/.tmuxinator/cosmo.yml @@ -0,0 +1,37 @@ +# ~/.tmuxinator/cosmo.yml + +name: cosmo +root: ~/src/cosmo/ +#root: ~/Sites/cosmo/ + +# Optional tmux socket +# socket_name: foo + +# Runs before everything. Use it to start daemons etc. +# pre: sudo /etc/rc.d/mysqld start + +# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions. +# pre_window: rbenv shell 2.0.0-p247 + +# Pass command line options to tmux. Useful for specifying a different tmux.conf. +# tmux_options: -f ~/.tmux.mac.conf + +# Change the command to call tmux. This can be used by derivatives/wrappers like byobu. +# tmux_command: byobu + +# Specifies (by name or index) which window will be selected on project startup. If not set, the first window is used. +# startup_window: logs + +# Controls whether the tmux session should be attached to automatically. Defaults to true. +# attach: false + +# Runs after everything. Use it to attach to tmux with custom options etc. +# post: tmux -CC attach -t cosmo + +windows: + - editor: vim index.php + - server: bash ~/bin/cosmo-ssh + - git: tig + - backup: make && watch -n 60 rsync -rav ~/code/cosmo/ ~/src/cosmo-backup/ + #- /tmp: cd /tmp && ls -lahG cosmo_* + - utility: diff --git a/.tmuxinator/dev.yml b/.tmuxinator/dev.yml @@ -0,0 +1,40 @@ +# ~/.tmuxinator/dev.yml + +name: dev +root: ~/code/sphere-cfd + +# Optional tmux socket +# socket_name: foo + +# Runs before everything. Use it to start daemons etc. +# pre: sudo /etc/rc.d/mysqld start + +# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions. +# pre_window: rbenv shell 2.0.0-p247 + +# Pass command line options to tmux. Useful for specifying a different tmux.conf. +# tmux_options: -f ~/.tmux.mac.conf + +# Change the command to call tmux. This can be used by derivatives/wrappers like byobu. +# tmux_command: byobu + +windows: + - dev: vim + - debug: + layout: even-horizontal + panes: + - git pull && cmake . && make && make test + - watch nvidia-smi + - run: + layout: main-vertical + panes: + - cd python && ipython -i -c 'import numpy; import sphere' + - cd python + - cd python + - log: cd python + + - grendel: + layout: even-horizontal + panes: + - ssh grendel.cscaa.dk + - ssh grendel.cscaa.dk diff --git a/.tmuxinator/tmuxinator.bash b/.tmuxinator/tmuxinator.bash @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +_tmuxinator() { + COMPREPLY=() + local word="${COMP_WORDS[COMP_CWORD]}" + + if [ "$COMP_CWORD" -eq 1 ]; then + local commands="$(compgen -W "$(tmuxinator commands)" -- "$word")" + local projects="$(compgen -W "$(tmuxinator completions start)" -- "$word")" + + COMPREPLY=( $commands $projects ) + else + local words=("${COMP_WORDS[@]}") + unset words[0] + unset words[$COMP_CWORD] + local completions=$(tmuxinator completions "${words[@]}") + COMPREPLY=( $(compgen -W "$completions" -- "$word") ) + fi +} + +complete -F _tmuxinator tmuxinator mux diff --git a/.tmuxinator/tmuxinator.zsh b/.tmuxinator/tmuxinator.zsh @@ -0,0 +1,20 @@ +#!/usr/bin/env zsh + +if [[ ! -o interactive ]]; then + return +fi + +compctl -K _tmuxinator tmuxinator mux + +_tmuxinator() { + local words completions + read -cA words + + if [ "${#words}" -eq 2 ]; then + completions="$(tmuxinator commands)" + else + completions="$(tmuxinator completions ${words[2,-2]})" + fi + + reply=("${(ps:\n:)completions}") +} diff --git a/.tmuxinator/tutorial.yml b/.tmuxinator/tutorial.yml @@ -0,0 +1,28 @@ +# ~/.tmuxinator/tutorial.yml + +name: tutorial +root: ~/ + +# Optional tmux socket +# socket_name: foo + +# Runs before everything. Use it to start daemons etc. +# pre: sudo /etc/rc.d/mysqld start + +# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions. +# pre_window: rbenv shell 2.0.0-p247 + +# Pass command line options to tmux. Useful for specifying a different tmux.conf. +# tmux_options: -f ~/.tmux.mac.conf + +# Change the command to call tmux. This can be used by derivatives/wrappers like byobu. +# tmux_command: byobu + +windows: + - editor: + layout: main-vertical + panes: + - vim + - guard + - server: bundle exec rails s + - logs: tail -f log/development.log diff --git a/.tmuxinator/utility.yml b/.tmuxinator/utility.yml @@ -0,0 +1,54 @@ +# ~/.tmuxinator/utility.yml + +name: utility +root: ~/ +pre: bash ~/bin/export_x_info.sh && mpd + +# Optional tmux socket +# socket_name: foo + +# Runs before everything. Use it to start daemons etc. +# pre: sudo /etc/rc.d/mysqld start + +# Runs in each window and pane before window/pane specific commands. Useful for setting up interpreter versions. +# pre_window: rbenv shell 2.0.0-p247 + +# Pass command line options to tmux. Useful for specifying a different tmux.conf. +# tmux_options: -f ~/.tmux.mac.conf + +# Change the command to call tmux. This can be used by derivatives/wrappers like byobu. +# tmux_command: byobu + +windows: + - m&m: + layout: even-vertical + panes: + - mutt + - vimpc + - sphere: + layout: even-vertical + panes: + - cd ~/code/sphere/ && watch -n 10 nvidia-smi + - cd ~/code/sphere/python && ipython -i -c "import sphere, numpy" + #- cd ~/code/sphere/python && git log --oneline + - cd ~/code/sphere/python && tig + - iddqd: + panes: + - bash ~/bin/iddqd-ssh + - dotfiles: + layout: even-vertical + panes: + - cd ~/code/dotfiles + - cd ~/code/dotfiles + +# - sys: +# layout: main-vertical +# panes: +# - htop +# - zsh +# - twitter: rainbowstream #--image-on-term +# - audio: +# layout: main-vertical +# panes: +# - vimpc +# - alsamixer diff --git a/.vim/vimrc.tiny b/.vim/vimrc.tiny @@ -0,0 +1,13 @@ +" Vim configuration file, in effect when invoked as "vi". The aim of this +" configuration file is to provide a Vim environment as compatible with the +" original vi as possible. Note that ~/.vimrc configuration files as other +" configuration files in the runtimepath are still sourced. +" When Vim is invoked differently ("vim", "view", "evim", ...) this file is +" _not_ sourced; /etc/vim/vimrc and/or /etc/vim/gvimrc are. + +" Debian system-wide default configuration Vim +set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim74,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after + +set compatible + +" vim: set ft=vim: diff --git a/.vimpcrc b/.vimpcrc @@ -0,0 +1,56 @@ +" Configuration of vimpc is done using vimpc commands +" these can include commands which require an mpd connection +" +" NB: Comments are very basic and must be on their own line +echo Parsing config file + +" Set the default tab +set window playlist + +" Set the windows to show at startup +set windows library,playlist + +" Stop playing music when we quit +"set stoponquit + +" A silly example of an alias +"alias smiths deleteall; findartist! The Smiths; play 1 + +" Example maps +" map the F key to change to the browse window, go to the first line and enter search mode +"map F :browse<C-M>gg/ +" map @ to switch to add next, add a song, then change back +"map @ :set add next<C-M>a:set add end<C-M> + +" Connect to a specific host using the config file +"connect somehost someport + +" Turn consume on when we connect +"consume on + +" Ensure that the database is up to date each connect +"update + +" A more complex example, When we start vimpc +" - clear the playlist +" - add all songs +" - shuffle +" - start playling +"deleteall +"addall +"shuffle +"play 1 + +" Color the statusline and tabs +"highlight status blackbg +"highlight tab blackbg +highlight status default +highlight tab default + +" Case insensitive search +set ignorecase + +" Show albums in library by default +set expand-artists + +echo Config File Complete diff --git a/.vimperator/colors/darkness2.vimp b/.vimperator/colors/darkness2.vimp @@ -0,0 +1,68 @@ +" ==Vimperator_Color_Scheme== +" name: Darkness +" ==Darkness_Colorscheme_Settings== + +"StatusLine settings +"hi StatusLine color: #ffffff; background: #000000; "font-size: 8pt; +hi StatusLine color: #ffffff; background: #000000; font-size: 8pt; +"hi StatusLineBroken color: #000000; background: #afafff; "font-size: 8pt; +"hi StatusLineSecure color: #000000; background: #afffaf; "font-size: 8pt; + +"CmdLine settings excluding Gradient +hi Normal color: #afafaf; background: #222222; +hi CmdLine background: #222222; color: #afafaf; font-size: 9pt; +hi CompDesc color: #c6c6c6; width: 50%; font-size: 9pt; +hi CompIcon width: 16px; min-width: 16px; display: inline-block; margin-right: .5ex; +hi CompItem[selected] background: #666666; color: #afafaf; +"hi CompLess text-align: center; height: 0; line-height: .5ex; padding-top: 1ex; +"hi CompMore text-align: center; height: .5ex; line-height: .5ex; margin-bottom: -.5ex; +hi CompMsg font-style: italic; margin-left: 16px; +hi CompResult width: 45%; overflow: hidden;font-size: 10pt; font-family: monospace; font-weight: normal; +hi CompTitle color: #afafaf; background: #222222; font-weight: bold; +hi CompTitle>* padding: 0 .5ex; +hi Filter font-weight: bold;color: #afafaf; + +"When using tab complete in CmdLine, line separating Title from function and description +"hi Gradient height: 1px; margin-bottom: -1px; margin-top: -1px; +"hi GradientLeft background-color: #00bbff; +"hi GradientRight background-color: #222222; + +"Used with ]f and [f +hi FrameIndicator background-color: #222222; opacity: 0.5; z-index: 999; position: fixed; top: 0; bottom: 0; left: 0; right: 0; + +hi Bell border: 0 none; background-color: #222222; +hi ErrorMsg color: #ffffff; background: red; font-weight: bold; + + +"Hint section +"hi Hint font-family: Sans; font-size: 10px; font-weight: bold; color: #f6e9e9; background-color: red; border-color: ButtonShadow; border-width: 0px; border-style: solid; padding 0px 1px 0px 1px; +hi Hint font-family: Sans; font-size: 12px; font-weight: bold; color: white; background-color: rgba(0, 0, 0, 0.5); border: solid 1px LightGray; +hi Hint::after content: attr(number); +hi HintActive background: blue; color: #f6e9e9; +hi HintElem background-color: #222222; color: #f6e9e9; +hi HintImage opacity: .5; + +"Other important stuff +hi InfoMsg color: #afafaf; background: #222222; +hi Message white-space: normal; min-width: 100%; padding-left: 2em; text-indent: -2em; display: block; +hi WarningMsg color: red; background: #222222; +hi ModeMsg color: #afafaf; background: #222222; "CmdLine when Not in Use +hi MoreMsg color: #afafaf; background: #222222; +hi NonText color: lightblue; min-height: 16px; padding-left: 2px; +hi Question color: #ffffff; background: #222222; font-weight: bold; +"hi Search font-size: inherit; padding: 0; color: #222222; background-color: yellow; padding: 0; +hi Function color: lightgreen; background: #222222; +hi Number color: tan; background: #222222 +hi String color: #222222; background: #afafaf; +hi Tag color: #222222; background: #afafaf; +hi Title color: #222222; background: #afafaf; font-weight: bold; +hi URL text-decoration: none; color: lightblue; background: inherit; +hi URL:hover text-decoration: underline; cursor: pointer; +hi LineNr color: #afafaf; background: #222222; + +"style -name statusbar chrome://* <<EOM +"#status-bar statusbarpanel { padding: 0 1px !important; } +"statusbarpanel > * { margin: 0 !important; padding: 0 2px 0 0 !important; } +"EOM + +"For other descriptions of each item, please see ``Styling'' section included with Vimperator diff --git a/.vimperator/colors/phallus.vimp b/.vimperator/colors/phallus.vimp @@ -0,0 +1,75 @@ +" ==Vimperator_Color_Scheme== +" name: Darkness +" ==Darkness_Colorscheme_Settings== + +"StatusLine settings +hi StatusLine color: #9a875f; background: #181512; font-size: 8pt; +"hi StatusLineBroken color: #9a875f; background: #f9f9f9; "font-size: 8pt; +"hi StatusLineSecure color: #9a875f; background: #f9f9f9; "font-size: 8pt; + +"CmdLine settings excluding Gradient +hi Normal color: #9a875f; background: #181512; +hi CmdLine background: #181512; color: #9f7155; font-size: 9pt; +hi CompDesc color: #766782; width: 50%; font-size: 9pt; +hi CompIcon width: 0px; min-width: 0px; visibility: hidden; display: inline-block; margin-right: .5ex; +hi CompItem[selected] background: #181512; color: #D6C3B6; +"hi CompLess text-align: center; height: 0; line-height: .5ex; padding-top: 1ex; +"hi CompMore text-align: center; height: .5ex; line-height: .5ex; margin-bottom: -.5ex; +hi CompMsg font-style: italic; margin-left: 12px; +hi CompResult width: 45%; overflow: hidden;font-size: 10pt; font-family: lemon; font-weight: normal; +hi CompTitle color: #646a6d; background: #181512; +hi CompTitle>* padding: 0 .5ex; +hi Filter color: #afafaf; + +"When using tab complete in CmdLine, line separating Title from function and description +"hi Gradient height: 1px; margin-bottom: -1px; margin-top: -1px; +"hi GradientLeft background-color: #181512; +"hi GradientRight background-color: #181512; + +"Used with ]f and [f +hi FrameIndicator background-color: #3f3f3f; opacity: 0.5; z-index: 999; position: fixed; top: 0; bottom: 0; left: 0; right: 0; + +hi Bell border: 0 none; background-color: #181512; +hi ErrorMsg color: #1c1c1c; background: #181512; + + +"Hint section +"hi Hint font-family: Sans; font-size: 10px; color: #f6e9e9; background-color: red; border-color: ButtonShadow; border-width: 0px; border-style: solid; padding 0px 1px 0px 1px; +hi Hint font-family: lemon; font-size: 10px; color: white; background-color: rgba(0, 0, 0, 0.5); border: solid 1px black; +hi Hint::after content: attr(number); +hi HintActive background-color: rgba(0,0,0,0.5); +hi HintElem 0; +hi HintImage opacity: .5; + +"Other important stuff +hi InfoMsg color: #1c1c1c; background: #181512; +hi Message white-space: normal; min-width: 100%; padding-left: 2em; text-indent: -2em; display: block; +hi WarningMsg color: 1c1c1c; background: #181512; +hi ModeMsg color: #1c1c1c; background: #181512; "CmdLine when Not in Use +hi MoreMsg color: #1c1c1c; background: #181512; +hi NonText color: lightblue; min-height: 16px; padding-left: 2px; +hi Question color: #1c1c1c; background: #181512; +"hi Search font-size: inherit; padding: 0; color: #eab9d5; background-color: black; padding: 0; +hi Function color: #9a875f; background: #181512; +hi Number color: #9a875f; background: #181512; +hi String color: #9a875f; background: #181512; +hi Tag color: #9a875f; background: #181512; +hi Title color: #1c1c1c; background: #181512; +hi URL text-decoration: none; color: lightblue; background: inherit; +hi URL:hover text-decoration: underline; cursor: pointer; +hi LineNr color: #9a875f; background: #181512; + +"style -name statusbar chrome://* <<EOM +"#status-bar statusbarpanel { padding: 0 1px !important; } +"statusbarpanel > * { margin: 0 !important; padding: 0 2px 0 0 !important; } +"EOM + +hi ContentSeparator border-top: 0px; + +"For other descriptions of each item, please see ``Styling'' section included with Vimperator + +hi CmdLine>* font-family: lemon +hi CompDesc font-family: lemon +hi CompResult font-family: lemon +hi StatusLine font-family: lemon +hi PromptText width: 0px diff --git a/.vimperatorrc b/.vimperatorrc @@ -0,0 +1,47 @@ +""" VIMPERATOR Firefox plugin configuration +" see https://github.com/mashiro/dot-files/blob/master/.vimperatorrc + +"colors darkness2 + +highlight Bell display: none; + +""" What characters to use for labeling hints (f) +" Numbers only +"set hintchars=0123456789 +" Home row +"set hintchars=hjklasdf +" Smart row +set hintchars=hjklasdfgyuiopqwertnmzxcvb +"set hintchars=hutenosa + +" Define appearance of hints (CSS) +highlight Hint font-size:150%;color:black;background-color:yellow;padding:2px; + +""" Default search engine +" Manage search engines with `:dialog searchengine` +"set defsearch=startpage +set defsearch=duckduckgo + +""" General options +set complete=slS +set newtab=all +set popups=tab +set nohlsearch +set ignorecase +set incsearch +set smartcase +set focuscontent +set visualbell +set toolbars=noaddons,nobookmarks,nomenu,nonavigation,tabs + +""" about:config +"set! general.autoScroll=false +"set! browser.tabs.closeButtons=2 +"set! mousewheel.withnokey.numlines=6 + +""" Scrolling +nnoremap j 3j +nnoremap k 3k + + +" vim: ts=2 sw=2 sts=2 fdm=marker ft=vimperator diff --git a/.vimrc b/.vimrc @@ -0,0 +1,704 @@ +filetype off + +" terminal colors +"set t_Co=16 +"set t_Co=256 + +if has('vim_starting') + set nocompatible " Disable vi-compatibility + set runtimepath+=~/.vim/bundle/neobundle.vim/ +endif + +call neobundle#begin(expand('~/.vim/bundle/')) + +""" NeoBundle plugins +" By default fom github. +" Install and update with :NeoBundleInstall(!), see :h NeoBundle + +" let NeoBundle manage Vundle. Required! +NeoBundle 'Shougo/neobundle.vim' + +" more functional statusline +"NeoBundle 'Lokaltog/vim-powerline' +"NeoBundle 'Lokaltog/powerline' +NeoBundle 'bling/vim-airline' +NeoBundle 'vim-airline/vim-airline-themes' + +" file system browser +NeoBundle 'scrooloose/nerdtree' + +" syntax checking plugin +NeoBundle 'scrooloose/syntastic' + +" fuzzy file, buffer, and tag finder +NeoBundle 'kien/ctrlp.vim' + +" colorschemes +"NeoBundle 'altercation/vim-colors-solarized' +"NeoBundle 'chriskempson/vim-tomorrow-theme' +"NeoBundle 'tomasr/molokai' +NeoBundle 'jacoborus/tender' + +" modify surrounding characters in pairs +NeoBundle 'tpope/vim-surround' + +" git wrapper. Reset changes with :Gread, stage changes with :Gwrite +NeoBundle 'tpope/vim-fugitive' + +" Show which line changed since last git commit +NeoBundle 'airblade/vim-gitgutter' + +" dispatch.vim for :Make +NeoBundle 'tpope/vim-dispatch' + +" browse buffers (vim.org/scripts), \be, \bs, \bv +NeoBundle 'bufexplorer.zip' + +" Vim-LaTeX suite +"NeoBundle 'git://git.code.sf.net/p/vim-latex/vim-latex' +NeoBundle 'LaTeX-Box-Team/LaTeX-Box' + +" Use <Tab> to autocomplete in insert mode +NeoBundle 'ervandew/supertab' + +" Ack is a grep replacement. Debian pkg: ack-grep. Run from Vim: +" usage: :Ack [options] {pattern} [{directory}] +NeoBundle 'mileszs/ack.vim' + +" Rainbow parantheses +NeoBundle 'kien/rainbow_parentheses.vim' + +" Calendar +"NeoBundle 'itchyny/calendar.vim' +"let g:calendar_google_calendar = 1 +"let g:calendar_google_task = 1 + +" ctags list (:TlistOpen) +NeoBundle 'taglist.vim' + +" vim-OrgMode +NeoBundle 'jceb/vim-orgmode' + +" increment dates and times with Ctrl-a and Ctrl-x +NeoBundle 'tpope/vim-speeddating' + +" support for Julia +NeoBundle 'JuliaLang/julia-vim' + +" SnipMate for boilerplate code +NeoBundle 'msanders/snipmate.vim' + +" vim motion on speed +NeoBundle 'Lokaltog/vim-easymotion' + +" navigate between vim and tmux panes seamlessly +NeoBundle 'christoomey/vim-tmux-navigator' + +" Take notes in rst +"NeoBundle 'Rykka/clickable.vim' +"NeoBundle 'Rykka/riv.vim' +"NeoBundle 'Rykka/InstantRst' + +" add/remove bookmark: mm +" add/edit/remove annotation: mi +" next bookmark: mn +" previous bookmark: mn +" list of all bookmarks: ma +" clear all bookmarks in current buffer: mc +" clear all bookmarks in all buffers: mx +NeoBundle 'MattesGroeger/vim-bookmarks' + +" QC, QX, QV to copy, cut and paste from system clipboard +NeoBundle 'NLKNguyen/copy-cut-paste.vim' + +" Python mode +NeoBundle 'klen/python-mode' + +NeoBundle 'fatih/vim-go' + +" vimproc for asynchronous processes +NeoBundle 'Shougo/vimproc.vim', { + \ 'build' : { + \ 'wimdows' : 'tools\\update-dll-mingw', + \ 'cygwin' : 'make -f make_cygwin.mak', + \ 'mac' : 'make -f make_mac.mak', + \ 'unix' : 'make -f make_unix.mak', + \ }, + \ } +" Unite for search, uses ag (Debian package silversearch-ag) +NeoBundle 'Shougo/unite.vim' + +" insert unicode characters with latex code +"NeoBundle 'joom/latex-unicoder.vim' + +" search for text in files +NeoBundle 'rking/ag.vim' + +" Align things in columns (select, type Return then Space) +NeoBundle 'junegunn/vim-easy-align' + +" open file manager (gof) or tmux pane (got) at current dir +NeoBundle 'justinmk/vim-gtfo' + +" <C-y>, +" http://www.vim.org/scripts/script.php?script_id=2981 +" http://emmet.io +NeoBundle 'mattn/emmet-vim' + +" javascript plugins +NeoBundle 'pangloss/vim-javascript' +NeoBundle 'kchmck/vim-coffee-script' + +" spacemacs keybinds +"NeoBundle 'jimmay5469/vim-spacemacs' + +" Support mixed php and html +NeoBundle 'captbaritone/better-indent-support-for-php-with-html' + +" Line up text (req for vim-markdown) +NeoBundle 'godlygeek/tabular' + +" Markdown support +NeoBundle 'plasticboy/vim-markdown' + +" Startup screen +NeoBundle 'mhinz/vim-startify' + +" Show color table with :XtermColorTable +NeoBundle 'guns/xterm-color-table.vim' + +" Auto-complete mutt aliases according to ~/.mutt/aliases +"NeoBundle 'guanqun/vim-mutt-aliases-plugin' +NeoBundle 'vim-scripts/mutt-aliases' + +NeoBundle 'majutsushi/tagbar' + +" Control mpd by CtrlP +NeoBundle 'lucidstack/ctrlp-mpc.vim' + +" Show indentation levels with thin vertical lines +NeoBundle 'Yggdroot/indentLine' + +" Show command documentation in a scratch buffer, usage ":G <query" +NeoBundle 'evidanary/grepg.vim' + +call neobundle#end() + +filetype plugin indent on + +" If there are uninstalled bundles found on startup, this will prompt you to +" install them +NeoBundleCheck + +" Enable syntax highligting +syntax on + +" specify mutt aliases path, autocomplete aliases with @@ in insert mode +let g:mutt_aliases_file = '~/.mutt/aliases' + +" Select non-default syntax colorscheme. Found in /usr/share/vim/vim72/colors/ +"set background=dark " adjust colors for better contrast +"colorscheme desert +"colorscheme solarized +"colorscheme Tomorrow-Night-Eighties +"call togglebg#map("<F3>") +"let g:solarized_termtrans = 1 + +" If you have vim >=8.0 or Neovim >= 0.1.5 +"if (has("termguicolors")) + "set termguicolors +"endif +"" For Neovim 0.1.3 and 0.1.4 +let $NVIM_TUI_ENABLE_TRUE_COLOR=1 +colorscheme tender +let g:airline_theme = 'tender' + +"let g:airline_theme = 'ubaryd' +"let g:airline_theme = 'solarized' +"let g:airline_theme = 'tomorrow' +"let g:airline_theme = 'wombat' +"let g:airline_theme = 'powerlineish' +"let g:airline_theme = 'bubblegum' +highlight Search cterm=NONE ctermfg=black ctermbg=2 +highlight MatchParen cterm=NONE ctermfg=255 ctermbg=199 +highlight SpecialKey ctermfg=250 ctermbg=NONE cterm=NONE +highlight NonText ctermfg=250 ctermbg=NONE + +" hilight column 80 +set textwidth=80 +set colorcolumn=+1 +highlight ColorColumn ctermbg=237 +"highlight ColorColumn ctermbg=15 +"highlight OverLength ctermbg=red ctermfg=white guibg=#592929 +"match OverLength /\%81v.\+/ + +set autoindent +set autoread " reload files when changed on disk +set backspace=2 " fix broken backspace in some setups +set backupcopy=yes " see :help crontab +"set clipboard=unnamed " yank and paste with the system clipboard +set cursorline " highlight current line +"set encoding=utf-8 " Necessary to show unicode glyphs +set expandtab " convert tab char to spaces +set formatoptions=alw2qt " automatically reflow paragraphs to line width upon change +set lbr " break lines between words +set hlsearch " highlight search matches +set ignorecase " case-insensitive search +set incsearch " search as you type +set laststatus=2 " always show the statusline +set list " enable rendering of invisible characters +set listchars=tab:â–¸\ ,eol:¬ " Use symbols for tab and end-of-line +set number " set linenumbering ON as default +set relativenumber " set relative linenumbering ON as default +set pastetoggle=<F2> " toggle paste mode +set ruler " Enable bottom ruler +set scrolloff=3 " show context above-below cursorline +set shiftwidth=4 " width for autoindents +"set showcmd +set smartcase " case-sensitive search if any caps +set softtabstop=4 " makes the tab key indent by four spaces +set splitright " new vertical splits on the right side +set tabstop=4 " a tab is 4 characters wide +set wildmenu " show a navigable menu for tab completion +set wildmode=longest,list,full + +" enable basic mouse behavior +set mouse=a +if !has('nvim') + if exists('$TMUX') " support resizing in tmux + set ttymouse=xterm2 + endif +endif + +" fix cursor in tmux +if exists('$TMUX') + let &t_SI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=1\x7\<Esc>\\" + let &t_EI = "\<Esc>Ptmux;\<Esc>\<Esc>]50;CursorShape=0\x7\<Esc>\\" +else + let &t_SI = "\<Esc>]50;CursorShape=1\x7" + let &t_EI = "\<Esc>]50;CursorShape=0\x7" +endif + +" vim-airline symbols +if !exists('g:airline_symbols') + let g:airline_symbols = {} +endif + +" unicode symbols +"let g:airline_left_sep = '»' +"let g:airline_left_sep = 'â–¶' +"let g:airline_right_sep = '«' +"let g:airline_right_sep = 'â—€' +"let g:airline_symbols.linenr = 'âŠ' +"let g:airline_symbols.linenr = 'â¤' +"let g:airline_symbols.linenr = '¶' +"let g:airline_symbols.branch = '⎇' +"let g:airline_symbols.paste = 'Ï' +"let g:airline_symbols.paste = 'Þ' +"let g:airline_symbols.paste = '∥' +"let g:airline_symbols.whitespace = 'Ξ' + +" powerline symbols +let g:airline_left_sep = 'î‚°' +let g:airline_left_alt_sep = '' +let g:airline_right_sep = '' +let g:airline_right_alt_sep = '' +let g:airline_symbols.branch = 'î‚ ' +let g:airline_symbols.readonly = 'î‚¢' +let g:airline_symbols.linenr = 'î‚¡' + +" Powerline symbols, fancy needs a patched/edited font +"let g:Powerline_symbols = 'unicode' +"let g:Powerline_symbols = 'fancy' + +" use airline decorations for tab line +let g:airline#extensions#tabline#enabled = 1 +let g:airline#extensions#tabline#left_sep = 'î‚°' +let g:airline#extensions#tabline#left_alt_sep = '' +let g:airline#extensions#tabline#tab_min_count = 2 +let g:airline#extensions#tabline#buffer_min_count = 2 + +" Rainbow parantheses always on +au VimEnter * RainbowParenthesesToggle +au Syntax * RainbowParenthesesLoadRound +au Syntax * RainbowParenthesesLoadSquare +au Syntax * RainbowParenthesesLoadBraces + +" Dictionary word completion using Ctrl-x Ctrl-k +" File from wordlist- (debian) or word- (arch) package +set dictionary+=/usr/share/dict/words + +" Define other file types +autocmd! BufNewFile,BufRead *.pde setlocal ft=arduino +autocmd! BufNewFile,BufRead *.ino setlocal ft=arduino +autocmd! BufNewFile,BufRead *.cuh setlocal ft=cuda + +" Invisible character colors +" chose ctermfg=10 if Tab and EOL characters should be brighter +" chose ctermfg=0 if Tab and EOL characters should be darker +highlight NonText ctermfg=10 guifg=DarkGray +highlight SpecialKey ctermfg=10 guifg=DarkGray +"highlight NonText ctermfg=0 guifg=DarkGray +"highlight SpecialKey ctermfg=0 guifg=DarkGray + + +""" Keyboard shortcuts + +" Save with ZX +nmap ZX :w<CR> + +" use , instead of \ as leader +"let mapleader="," +" use space instead of \ as leader +let mapleader="\<Space>" + +" Shortcut to reload .vimrc +nmap <leader>R :source $MYVIMRC<CR> + +" List errors in split +nmap <leader>E :Errors<CR> + +" Shortcut to switch background color +"nmap <leader>W :ToggleBG<CR> + +" Save file +nmap <Leader>w :w<CR> +"nmap <Leader>fs :w<CR> + +" Quit +nmap <Leader>q :q<CR> + +" Native (fast) buffer switching +nnoremap ,b :ls<CR>:buffer<Space> + +" Close buffer +nmap <leader>Q :bd<CR> + +" Save and quit +nmap <Leader>x :x<CR> + +" Jump to previous buffer +nmap <leader><tab> <C-^> + +" Explore buffers +nmap <leader>b :BufExplorer<CR> + +" toggle spelling +nmap <leader>s :set spell!<CR> + +" toggle line numbering +nmap <leader>n :set number!<CR> + +" toggle relative line numbering +nmap <leader>N :set relativenumber!<CR> + +" NERD Tree short cut +nmap <leader>d :NERDTreeToggle<CR> + +" Toggle TAB and EOL symbols +nmap <leader>l :set list!<CR> + +nmap <leader>e :e +nmap <leader>% :vsplit +nmap <leader>" :split + +" shortcuts to commonly used files +nmap <leader>C :e $MYVIMRC<CR> +"nmap <leader>T :e ~/doc/todo.org<CR> +nmap <leader>T :e ~/doc/todo.md<CR> +nmap <leader>B :e ~/articles/own/BIBnew.bib<CR> +nmap <leader>A :e ~/articles/articles.rst<CR> + +nmap <leader>r :read !scholarref.py + +" insert date and time +nmap <leader>D :read !date<CR> + +" job execution +nmap <leader>m :Make +nmap <leader>E :VimProcRead +nmap <leader>! :Start! + + +" Switch split focus with leader+hjkl +nmap <leader>h <C-w>h +nmap <leader>j <C-w>j +nmap <leader>k <C-w>k +nmap <leader>l <C-w>l + +" toggle x mark in checklist fields +nmap <leader>X :s/\[[x ]\]/\=submatch(0) == '[x]' ? '[ ]': '[x]'/<CR>:noh<CR> + +" neovim-specific mappings +if has('nvim') + " escape from terminal mode + tnoremap <leader>e <C-\><C-n> + + " navigate away from terminals + tnoremap <C-h> <C-\><C-n><C-w>h + tnoremap <C-j> <C-\><C-n><C-w>j + tnoremap <C-k> <C-\><C-n><C-w>k + tnoremap <C-l> <C-\><C-n><C-w>l + + " launch terminal in current window + nmap <leader><CR> :terminal<CR> +endif + +" Switch split focus with Alt+{h,j,k,l} +"nnoremap <C-h> <C-w>h +"nnoremap <C-j> <C-w>j +"nnoremap <C-k> <C-w>k +"nnoremap <C-l> <C-w>l + +let g:tmux_navigator_no_mappings = 1 +nnoremap <silent> <C-h> :TmuxNavigateLeft<CR> +nnoremap <silent> <C-j> :TmuxNavigateDown<CR> +nnoremap <silent> <C-k> :TmuxNavigateUp<CR> +nnoremap <silent> <C-l> :TmuxNavigateRight<CR> + +" equal split size +nmap <leader>= <C-w>= + +" Commit all changes +"nmap <leader>g :Gcommit<CR> +nmap <leader>g :Start git commit -a -v -S<CR> +nmap <leader>G :Start git commit -a -v -S && git push<CR> + +" Toggle fold +"nmap <leader>f za +" Toggle all folds +nmap <leader>F zA +nmap <leader>Fa zR +nmap <leader>FA zM +" zc: close a fold +" zo: open a fold +" za: toggle a fold +" zM: close all folds +" zR: open all fol + +" Switch split focus with <C-h>, <C-j>, <C-k> and <C-l> +"map <C-h> <C-w>h +"map <C-j> <C-w>j +"map <C-k> <C-w>k +"map <C-l> <C-w>l + +" Use home row keys as Esc +inoremap jk <Esc> + +" Improve navigation on wrapped lines +nnoremap j gj +nnoremap k gk + +map <leader>E <Plug>(easymotion-prefix) + +" <Leader>f{char} to move to {char} +"map <leader>f <Plug>(easymotion-bd-f) +"nmap <leader>f <Plug>(easymotion-overwin-f) +map <leader><leader> <Plug>(easymotion-bd-f) +nmap <leader><leader> <Plug>(easymotion-overwin-f) + +" s{char}{char} to move to {char}{char} (conflicts with spell) +"nmap <leader>s <Plug>(easymotion-overwin-f2) + +" Move to line +map <leader>L <Plug>(easymotion-bd-jk) +nmap <leader>L <Plug>(easymotion-overwin-line) + +" Move to word +map <leader>W <Plug>(easymotion-bd-w) +nmap <leader>W <Plug>(easymotion-overwin-w) + +" Disable arrow keys +map <Left> <Nop> +map <Right> <Nop> +map <Up> <Nop> +map <Down> <Nop> +imap <Left> <Nop> +imap <Right> <Nop> +imap <Up> <Nop> +imap <Down> <Nop> + +" show/hide tagbar +nmap <leader>t :TagbarToggle<CR> + +" check current folder and all parent folders for tags files +set tags=tags;/ + +" Update ctags +nmap <leader>c :Start ctags -R --python-kinds=-i --langmap=c++:.cu,c++:.cuh .<CR> +" useful tags commands: +" :tag or :ta <function> Go to definition of the function +" :ts or :tselect Show the list of tags +" When the cursor is on a function call, press <Ctrl-[> to go to its definition. +" Press <Ctrl-t> to go back +" Use the Ctrl-P plugin to search the tags +nmap <leader>P :CtrlPTag<CR> +nmap <leader>p :CtrlPBuffer<CR> +nmap <leader>O :CtrlPMRUFiles<CR> +nmap <leader>o :CtrlP<CR> + +" use git or silver searcher (ag) for CtrlP autocompletion +let g:ctrlp_use_caching = 0 +if executable('ag') + set grepprg=ag\ --nogroup\ --nocolor + + let g:ctrlp_user_command = 'ag %s -l --nocolor -g ""' +else + let g:ctrlp_user_command = ['.git', 'cd %s && git ls-files . -co --exclude-standard', 'find %s -type f'] + let g:ctrlp_prompt_mappings = { + \ 'AcceptSelection("e")': ['<space>', '<cr>', '<2-LeftMouse>'], + \ } +endif + +" Copy and paste to system clipboard with <Space>v and <Space>y +vmap <Leader>y "+y +vmap <Leader>d "+d +nmap <Leader>v "+p +nmap <Leader>V "+P +vmap <Leader>v "+p +vmap <Leader>V "+P + + +" Launch Ack +"nmap <leader>a :Ack + +" syntastic configuration +set statusline+=%#warningmsg# +set statusline+=%{SyntasticStatuslineFlag()} +set statusline+=%* + +let g:syntastic_always_populate_loc_list = 1 +let g:syntastic_auto_loc_list = 1 +let g:syntastic_check_on_open = 1 +let g:syntastic_check_on_wq = 0 +let g:syntastic_python_checkers = ['python'] + +" adjust signcolumn appearance +let g:syntastic_error_symbol = 'e' +let g:syntastic_warning_symbol = 'w' +highlight clear SignColumn + +" LaTeX unicode symbols +"let g:unicoder_cancel_normal = 1 +"let g:unicoder_cancel_insert = 1 +"let g:unicoder_cancel_visual = 1 +"nnoremap <C-l> :call unicoder#start(0)<CR> +"inoremap <C-l> <Esc>:call unicoder#start(1)<CR> +"vnoremap <C-l> :<C-u>call unicoder#selection()<CR> + +" Search +let g:unite_source_history_yank_enable = 1 +try + let g:unite_source_rec_async_command='ag --nocolor --nogroup -g ""' + call unite#filters#matcher_default#use(['matcher_fuzzy']) +catch +endtry +" search a file in the filetree +nnoremap <leader>a :split<cr> :<C-u>Unite -start-insert file_rec/async<cr> +" reset not it is <C-l> normally +":nnoremap <leader>R <Plug>(unite_restart) + +" search for text in many files +nmap <leader>A :Ag <c-r>=expand("<cword>")<cr><cr> +" search for text in project files +nnoremap <space>/ :Ag + +" align things into columns interactively +vnoremap <silent> <Enter> :EasyAlign<cr> + +" Python mode +" Activate rope +" Keys: +" K Show python docs +" <Ctrl-Space> Rope autocomplete +" <Ctrl-c>g Rope goto definition +" <Ctrl-c>d Rope show documentation +" <Ctrl-c>f Rope find occurrences +" <Leader>b Set, unset breakpoint (g:pymode_breakpoint enabled) +" [[ Jump on previous class or function (normal, visual, operator modes) +" ]] Jump on next class or function (normal, visual, operator modes) +" [M Jump on previous class or method (normal, visual, operator modes) +" ]M Jump on next class or method (normal, visual, operator modes) +let g:pymode_rope = 1 + +" Documentation +let g:pymode_doc = 1 +let g:pymode_doc_key = 'K' + +"Linting +let g:pymode_lint = 0 +let g:pymode_lint_checker = "pyflakes,pep8" +" Auto check on save +let g:pymode_lint_write = 0 + +" Support virtualenv +let g:pymode_virtualenv = 1 + +" Enable breakpoints plugin +let g:pymode_breakpoint = 1 +let g:pymode_breakpoint_bind = '<leader>B' + +" syntax highlighting +let g:pymode_syntax = 0 +let g:pymode_syntax_all = 0 +let g:pymode_syntax_indent_errors = g:pymode_syntax_all +let g:pymode_syntax_space_errors = g:pymode_syntax_all + +" Don't autofold code +let g:pymode_folding = 0 + +" Enable emmet in all modes +let g:user_emmet_mode='n' +let g:user_emmet_mode='inv' +let g:user_emmet_mode='a' + + +" vim-markdown configuration +" navigate headers with ]] and [[ +" format a table with :TableFormat +" create a navigation table with :Toc, :Toch, :Tocv +let g:vim_markdown_folding_disabled=1 +let g:vim_markdown_math=1 + +nmap <leader>S :Startify<cr> +let g:startify_custom_header = + \ map(split(system('fortune -s | cowthink'), '\n'), '" ".v:val') + \ + ['',''] +"let g:startify_custom_header = + "\ map(split(system('figlet -f smslant neovim@flaptop'), '\n'), '" ".v:val') + "\ + ['',''] + + +"let g:startify_custom_header = [ + "\ ' ________ __ __ ', + "\ ' __ /\_____ \/\ \\ \ ', + "\ ' __ __ /\_\ ___ ___ \/___//''/''\ \ \\ \ ', + "\ ' /\ \/\ \\/\ \ /'' __` __`\ /'' /'' \ \ \\ \_ ', + "\ ' \ \ \_/ |\ \ \/\ \/\ \/\ \ /'' /''__ \ \__ ,__\', + "\ ' \ \___/ \ \_\ \_\ \_\ \_\ /\_/ /\_\ \/_/\_\_/ ', + "\ ' \/__/ \/_/\/_/\/_/\/_/ \// \/_/ \/_/ ', + "\ '', + "\ '', + "\ ] + +" Split divider appearance +set fillchars=vert:│,fold:- +"hi! VertSplit ctermfg=15 ctermbg=NONE term=NONE +hi! VertSplit ctermfg=238 ctermbg=NONE term=NONE + +" Control mpd by CtrlP +let g:ctrlp_extensions = ['buffertag', 'tag', 'line', 'dir', 'tmux', 'mpc'] +nnoremap <leader>M :CtrlPMpc<cr> + +" use improved encryption method by default +"set cm=blowfish + +" Indent guides color and character┆│¦⦙ +let g:indentLine_char = '¦' +" Vim +let g:indentLine_color_term = 238 +"GVim +let g:indentLine_color_gui = '#3A3A3A' + +" toggle autoformatting of text +nnoremap <leader>f :exe 'set fo'.(&fo=~'a'?'-':'+').'=a'<CR> diff --git a/.w3m/config b/.w3m/config @@ -0,0 +1,139 @@ +simple_preserve_space 0 +gb18030_as_ucs 0 +strict_iso2022 1 +use_jisx0213 0 +use_jisx0212 0 +use_jisx0201k 0 +use_jisc6226 0 +use_jisx0201 0 +use_gb12345_map 0 +fix_width_conv 1 +search_conv 1 +pre_conv 0 +ucs_conv 1 +use_language_tag 1 +east_asian_width 0 +use_combining 1 +use_wide 1 +ext_halfdump 0 +follow_locale 1 +system_charset UTF-8 +auto_detect 2 +document_charset UTF-8 +display_charset UTF-8 +cookie_avoid_wrong_number_of_dots +cookie_accept_domains +cookie_reject_domains +accept_bad_cookie 0 +accept_cookie 0 +show_cookie 1 +use_cookie 1 +ssl_ca_file +ssl_ca_path /etc/ssl/certs +ssl_key_file +ssl_cert_file +ssl_verify_server 1 +ssl_forbid_method 2 +no_cache 0 +noproxy_netaddr 0 +no_proxy +ftp_proxy +https_proxy +http_proxy +use_proxy 1 +max_news 50 +nntpmode +nntpserver +dns_order 0 +meta_refresh 1 +follow_redirection 10 +default_url 1 +retry_http 1 +argv_is_url 1 +accept_media text/html, text/*;q=0.5, image/*, application/*, video/*, audio/*, zz-application/*, message/*, x-scheme-handler/*, inode/* +accept_encoding gzip, compress, bzip, bzip2, deflate +accept_language en;q=1.0 +no_referer 0 +user_agent +pre_form_file ~/.w3m/pre_form +ftppass_hostnamegen 0 +ftppasswd anonymous@ +disable_secret_security_check 0 +passwd_file ~/.w3m/passwd +use_lessopen 0 +bgextviewer 1 +extbrowser3 +extbrowser2 /Applications/Safari.app +extbrowser /usr/bin/mozilla +mailer +mailto_options 1 +editor sensible-editor +urimethodmap ~/.w3m//urimethodmap, /etc/w3m/urimethodmap +mailcap ~/.w3m/mailcap, /etc/w3m/mailcap, /etc/mailcap +mime_types ~/.w3m/mime.types, /etc/mime.types +index_file +cgi_bin +personal_document_root +document_root +keymap_file keymap +preserve_timestamp 1 +auto_uncompress 0 +decode_cte 0 +clear_buffer 1 +fixed_wheel_scroll_count 5 +relative_wheel_scroll_ratio 30 +relative_wheel_scroll 0 +reverse_mouse 0 +use_mouse 1 +ignorecase_search 1 +wrap_search 1 +mark_all_pages 0 +vi_prec_num 1 +emacs_like_lineedit 0 +mark 0 +close_tab_back 0 +confirm_qq 1 +save_hist 1 +history 10000 +use_history 1 +pagerline 10000 +visited_color magenta +visited_anchor 0 +active_color cyan +active_style 0 +bg_color terminal +mark_color cyan +form_color red +image_color green +anchor_color blue +basic_color terminal +color 1 +nextpage_topline 0 +label_topline 0 +show_srch_str 1 +show_lnum 0 +fold_line 0 +pseudo_inlines 1 +display_image 0 +view_unseenobject 1 +ignore_null_img_alt 1 +display_ins_del 1 +fold_textarea 0 +graphic_char 0 +alt_entity 0 +multicol 0 +dictcommand file:///$LIB/w3mdict.cgi +use_dictcommand 0 +dirlist_cmd file:///$LIB/dirlist.cgi +ext_dirlist 1 +display_lineinfo 0 +decode_url 0 +display_link_number 1 +display_link 1 +open_tab_dl_list 1 +open_tab_blank 0 +target_self 0 +frame 0 +pixel_per_char 10 +indent_incr 4 +tabstop 8 diff --git a/.w3m/keymap b/.w3m/keymap @@ -0,0 +1,143 @@ +# A sample of ~/.w3m/keymap (default) +# +# Ctrl : C-, ^ +# Escape: ESC-, M-, ^[ +# Space : SPC, ' ' +# Tab : TAB, ^i, ^I +# Delete: DEL, ^? +# Up : UP, ^[[A +# Down : DOWN, ^[[B +# Right : RIGHT, ^[[C +# Left : LEFT, ^[[D + +keymap C-@ MARK +keymap C-a LINE_BEGIN +keymap C-b MOVE_LEFT +keymap C-e LINE_END +keymap C-f MOVE_RIGHT +keymap C-g LINE_INFO +keymap C-h HISTORY +keymap TAB NEXT_LINK +keymap C-j GOTO_LINK +keymap C-k COOKIE +keymap C-l REDRAW +keymap C-m GOTO_LINK +keymap C-n MOVE_DOWN +keymap C-p MOVE_UP +keymap C-q CLOSE_TAB +keymap C-r ISEARCH_BACK +keymap C-s ISEARCH +keymap C-t TAB_LINK +keymap C-u PREV_LINK +keymap C-v NEXT_PAGE +keymap C-w WRAP_TOGGLE +keymap C-z SUSPEND + +keymap SPC NEXT_PAGE +keymap ! SHELL +keymap \" REG_MARK +keymap # PIPE_SHELL +keymap $ LINE_END +keymap ( UNDO +keymap ) REDO +keymap + NEXT_PAGE +keymap , LEFT +keymap - PREV_PAGE +keymap . RIGHT +keymap / SEARCH +keymap : MARK_URL +keymap ";" MARK_WORD +keymap < SHIFT_LEFT +keymap = INFO +keymap > SHIFT_RIGHT +keymap ? SEARCH_BACK +keymap @ READ_SHELL +keymap B BACK +keymap D DOWNLOAD_LIST +keymap E EDIT +keymap F FRAME +keymap G END +keymap H HELP +keymap I VIEW_IMAGE +keymap J UP +keymap K DOWN +keymap L LIST +keymap M EXTERN +keymap N SEARCH_PREV +keymap Q EXIT +keymap R RELOAD +keymap S SAVE_SCREEN +keymap T NEW_TAB +keymap U GOTO +keymap V LOAD +keymap W PREV_WORD +keymap Z CENTER_H +keymap [ LINK_BEGIN +keymap ] LINK_END +keymap \^ LINE_BEGIN +keymap a SAVE_LINK +keymap b PREV_PAGE +keymap c PEEK +keymap g BEGIN +keymap h MOVE_LEFT +keymap i PEEK_IMG +keymap j MOVE_DOWN +keymap k MOVE_UP +keymap l MOVE_RIGHT +keymap m MOUSE_TOGGLE +keymap n SEARCH_NEXT +keymap o OPTIONS +keymap q QUIT +keymap r VERSION +keymap s SELECT_MENU +keymap u PEEK_LINK +keymap v VIEW +keymap w NEXT_WORD +keymap z CENTER_V +keymap { PREV_TAB +keymap | PIPE_BUF +keymap } NEXT_TAB + +keymap M-TAB PREV_LINK +keymap M-C-j SAVE_LINK +keymap M-C-m SAVE_LINK + +keymap M-: MARK_MID +keymap M-< BEGIN +keymap M-> END +keymap M-I SAVE_IMAGE +keymap M-M EXTERN_LINK +keymap M-W DICT_WORD_AT +keymap M-a ADD_BOOKMARK +keymap M-b BOOKMARK +keymap M-c COMMAND +keymap M-e EDIT_SCREEN +keymap M-g GOTO_LINE +keymap M-k DEFINE_KEY +keymap M-l LIST_MENU +keymap M-m MOVE_LIST_MENU +keymap M-n NEXT_MARK +keymap M-o SET_OPTION +keymap M-p PREV_MARK +keymap M-s SAVE +keymap M-t TAB_MENU +keymap M-u GOTO_RELATIVE +keymap M-v PREV_PAGE +keymap M-w DICT_WORD + +keymap UP MOVE_UP +keymap DOWN MOVE_DOWN +keymap RIGHT MOVE_RIGHT +keymap LEFT MOVE_LEFT + +keymap M-[E MENU +keymap M-[L MENU +keymap M-[Z PREV_LINK + +keymap M-[1~ BEGIN +keymap M-[2~ MENU +keymap M-[4~ END +keymap M-[5~ PREV_PAGE +keymap M-[6~ NEXT_PAGE +keymap M-[28~ MENU + diff --git a/.weechat/alias.conf b/.weechat/alias.conf @@ -0,0 +1,42 @@ +# +# alias.conf -- weechat v1.0.1 +# + +[cmd] +AAWAY = "allserv /away" +add = "toggletime /togglestr weechat.look.buffer_time_format!${color:240}%H${color:239}%M${color:236}%S!${color:238}%d${color:237}%m${color:240}%H${color:239}%M${color:236}%S" +AME = "allchan /me" +AMSG = "allchan /msg *" +ANICK = "allserv /nick" +BEEP = "print -beep" +BYE = "quit" +C = "buffer clear" +CHAT = "dcc chat" +CL = "buffer clear" +CLOSE = "buffer close" +EXIT = "quit" +IG = "ignore" +J = "join" +K = "kick" +KB = "kickban" +LEAVE = "part" +M = "msg" +MSGBUF = "command -buffer $1 * /input send $2-" +MUB = "unban *" +N = "names" +Q = "query" +REDRAW = "window refresh" +SAY = "msg *" +SIGNOFF = "quit" +T = "topic" +UB = "unban" +UMODE = "mode $nick" +V = "command core version" +W = "who" +WC = "window merge" +WI = "whois" +WII = "whois $1 $1" +WW = "whowas" + +[completion] +MSGBUF = "%(buffers_plugins_names)" diff --git a/.weechat/aspell.conf b/.weechat/aspell.conf @@ -0,0 +1,20 @@ +# +# aspell.conf -- weechat v1.0.1 +# + +[color] +misspelled = lightred +suggestions = *green + +[check] +commands = "ame,amsg,away,command,cycle,kick,kickban,me,msg,notice,part,query,quit,topic" +default_dict = "en" +during_search = off +enabled = on +real_time = off +suggestions = 3 +word_min_length = 2 + +[dict] + +[option] diff --git a/.weechat/autosort.conf b/.weechat/autosort.conf @@ -0,0 +1,11 @@ +# +# autosort.conf -- weechat v1.0.1 +# + +[sorting] +case_sensitive = off +group_irc = on +replacements = "[["##", "#"]]" +rules = "[["core", 0], ["irc", 2], ["*", 1], ["irc.irc_raw", 0], ["irc.server", 1], ["irc.server.*.&*", 0], ["irc.server.*.#*", 1], ["irc.server.*.\\*status", 2]]" +signals = "buffer_opened buffer_merged buffer_unmerged buffer_renamed" +sort_on_config_change = on diff --git a/.weechat/buffer_autoset.conf b/.weechat/buffer_autoset.conf @@ -0,0 +1,9 @@ +# +# buffer_autoset.conf -- weechat v1.0.1 +# + +[look] +instant = on +timer = 1 + +[buffer] diff --git a/.weechat/buffers.conf b/.weechat/buffers.conf @@ -0,0 +1,73 @@ +# +# buffers.conf -- weechat v1.0.1 +# + +[color] +current_bg = red +current_fg = lightcyan +default_bg = default +default_fg = default +hotlist_highlight_bg = default +hotlist_highlight_fg = magenta +hotlist_low_bg = default +hotlist_low_fg = white +hotlist_message_bg = default +hotlist_message_fg = yellow +hotlist_private_bg = default +hotlist_private_fg = lightgreen +none_channel_bg = default +none_channel_fg = default +number = lightgreen +number_char = lightgreen +prefix_bufname = default +queries_default_bg = default +queries_default_fg = default +queries_highlight_bg = default +queries_highlight_fg = default +queries_message_bg = default +queries_message_fg = default +suffix_bufname = default +whitelist_default_bg = default +whitelist_default_fg = default +whitelist_highlight_bg = default +whitelist_highlight_fg = default +whitelist_low_bg = default +whitelist_low_fg = default +whitelist_message_bg = default +whitelist_message_fg = default +whitelist_private_bg = default +whitelist_private_fg = default + +[look] +core_to_front = off +detach = 0 +detach_buffer_immediately = "" +detach_buffer_immediately_level = 2 +detach_display_window_number = off +detach_displayed_buffers = on +detach_free_content = off +detach_query = off +hide_merged_buffers = none +hotlist_counter = off +immune_detach_buffers = "" +indenting = off +indenting_amount = 2 +indenting_number = on +jump_prev_next_visited_buffer = off +mark_inactive = off +mouse_move_buffer = on +mouse_wheel = on +name_crop_suffix = "+" +name_size_max = 0 +number_char = "." +prefix = off +prefix_bufname = "" +prefix_empty = on +prefix_for_query = "" +short_names = on +show_lag = off +show_number = on +sort = number +suffix_bufname = "" +toggle_bar = on +whitelist_buffers = "" diff --git a/.weechat/charset.conf b/.weechat/charset.conf @@ -0,0 +1,11 @@ +# +# charset.conf -- weechat v1.0.1 +# + +[default] +decode = "iso-8859-1" +encode = "" + +[decode] + +[encode] diff --git a/.weechat/exec.conf b/.weechat/exec.conf @@ -0,0 +1,11 @@ +# +# exec.conf -- weechat v1.0.1 +# + +[command] +default_options = "" +purge_delay = 0 + +[color] +flag_finished = lightred +flag_running = lightgreen diff --git a/.weechat/irc.conf b/.weechat/irc.conf @@ -0,0 +1,327 @@ +# +# irc.conf -- weechat v1.0.1 +# + +[look] +buffer_switch_autojoin = on +buffer_switch_join = on +color_nicks_in_names = on +color_nicks_in_nicklist = on +color_nicks_in_server_messages = on +color_pv_nick_like_channel = on +ctcp_time_format = "%a, %d %b %Y %T %z" +display_away = local +display_ctcp_blocked = on +display_ctcp_reply = on +display_ctcp_unknown = on +display_host_join = on +display_host_join_local = on +display_host_quit = on +display_join_message = "329,332,333,366" +display_old_topic = on +display_pv_away_once = on +display_pv_back = on +highlight_channel = "$nick,Anders,DamsgaardAnders,Damsgaard,anders,damsgaard,anders.damsgaard" +highlight_pv = "$nick,Anders,DamsgaardAnders,Damsgaard,anders,damsgaard,anders.damsgaard" +highlight_server = "$nick,Anders,DamsgaardAnders,Damsgaard,anders,damsgaard,anders.damsgaard" +highlight_tags_restrict = "irc_privmsg,irc_notice" +item_away_message = on +item_channel_modes_hide_args = "k" +item_display_server = buffer_plugin +item_nick_modes = on +item_nick_prefix = on +join_auto_add_chantype = off +msgbuffer_fallback = current +new_channel_position = none +new_pv_position = none +nick_color_force = "" +nick_color_hash = sum +nick_color_stop_chars = "_|[" +nick_completion_smart = speakers +nick_mode = prefix +nick_mode_empty = off +nicks_hide_password = "nickserv" +notice_as_pv = auto +notice_welcome_redirect = on +notice_welcome_tags = "" +notify_tags_ison = "notify_message" +notify_tags_whois = "notify_message" +part_closes_buffer = off +pv_buffer = independent +pv_tags = "notify_private" +raw_messages = 256 +server_buffer = merge_with_core +smart_filter = on +smart_filter_delay = 5 +smart_filter_join = on +smart_filter_join_unmask = 30 +smart_filter_mode = "+" +smart_filter_nick = on +smart_filter_quit = on +topic_strip_colors = off + +[color] +input_nick = lightcyan +item_away = yellow +item_channel_modes = default +item_lag_counting = default +item_lag_finished = yellow +item_nick_modes = default +message_join = green +message_quit = red +mirc_remap = "1,-1:darkgray" +nick_prefixes = "q:lightred;a:lightcyan;o:lightgreen;h:lightmagenta;v:yellow;*:lightblue" +notice = green +reason_quit = 244 +topic_new = 36 +topic_old = 244 + +[network] +alternate_nick = on +autoreconnect_delay_growing = 2 +autoreconnect_delay_max = 600 +ban_mask_default = "*!$ident@$host" +colors_receive = on +colors_send = on +lag_check = 60 +lag_max = 1800 +lag_min_show = 500 +lag_reconnect = 0 +lag_refresh_interval = 1 +notify_check_ison = 1 +notify_check_whois = 5 +send_unknown_commands = off +whois_double_nick = off + +[msgbuffer] + +[ctcp] +clientinfo = "" +finger = "" +ping = "" +source = "" +time = "" +userinfo = "" +version = "" + +[ignore] + +[server_default] +addresses = "" +anti_flood_prio_high = 2 +anti_flood_prio_low = 2 +autoconnect = off +autojoin = "" +autoreconnect = on +autoreconnect_delay = 10 +autorejoin = off +autorejoin_delay = 30 +away_check = 5 +away_check_max_nicks = 25 +capabilities = "" +command = "" +command_delay = 0 +connection_timeout = 60 +default_msg_kick = "" +default_msg_part = "" +default_msg_quit = "" +ipv6 = on +local_hostname = "" +nicks = "ad,ad1,ad2,ad3,ad4" +notify = "" +password = "" +proxy = "" +realname = "" +sasl_mechanism = plain +sasl_password = "" +sasl_timeout = 15 +sasl_username = "" +ssl = off +ssl_cert = "" +ssl_dhkey_size = 2048 +ssl_fingerprint = "" +ssl_priorities = "NORMAL" +ssl_verify = on +username = "ad" + +[server] +freenode.addresses = "chat.freenode.net/6667" +freenode.proxy +freenode.ipv6 +freenode.ssl +freenode.ssl_cert +freenode.ssl_priorities +freenode.ssl_dhkey_size +freenode.ssl_fingerprint +freenode.ssl_verify +freenode.password +freenode.capabilities +freenode.sasl_mechanism +freenode.sasl_username = "${sec.data.freenode_username}" +freenode.sasl_password = "${sec.data.freenode_password}" +freenode.sasl_timeout +freenode.autoconnect +freenode.autoreconnect +freenode.autoreconnect_delay +freenode.nicks +freenode.username +freenode.realname +freenode.local_hostname +freenode.command +freenode.command_delay +freenode.autojoin +freenode.autorejoin +freenode.autorejoin_delay +freenode.connection_timeout +freenode.anti_flood_prio_high +freenode.anti_flood_prio_low +freenode.away_check +freenode.away_check_max_nicks +freenode.default_msg_kick +freenode.default_msg_part +freenode.default_msg_quit +freenode.notify +slack-sigma-stanford.addresses = "sigma-stanford.irc.slack.com/6667" +slack-sigma-stanford.proxy +slack-sigma-stanford.ipv6 +slack-sigma-stanford.ssl = on +slack-sigma-stanford.ssl_cert +slack-sigma-stanford.ssl_priorities +slack-sigma-stanford.ssl_dhkey_size = 512 +slack-sigma-stanford.ssl_fingerprint +slack-sigma-stanford.ssl_verify +slack-sigma-stanford.password = "${sec.data.slack-sigma-stanford_password}" +slack-sigma-stanford.capabilities +slack-sigma-stanford.sasl_mechanism +slack-sigma-stanford.sasl_username = "${sec.data.slack-sigma-stanford_username}" +slack-sigma-stanford.sasl_password = "${sec.data.slack-sigma-stanford_password}" +slack-sigma-stanford.sasl_timeout +slack-sigma-stanford.autoconnect = on +slack-sigma-stanford.autoreconnect +slack-sigma-stanford.autoreconnect_delay +slack-sigma-stanford.nicks = "anders.damsgaard" +slack-sigma-stanford.username = "${sec.data.slack-sigma-stanford_username}" +slack-sigma-stanford.realname +slack-sigma-stanford.local_hostname +slack-sigma-stanford.command +slack-sigma-stanford.command_delay +slack-sigma-stanford.autojoin +slack-sigma-stanford.autorejoin +slack-sigma-stanford.autorejoin_delay +slack-sigma-stanford.connection_timeout +slack-sigma-stanford.anti_flood_prio_high +slack-sigma-stanford.anti_flood_prio_low +slack-sigma-stanford.away_check +slack-sigma-stanford.away_check_max_nicks +slack-sigma-stanford.default_msg_kick +slack-sigma-stanford.default_msg_part +slack-sigma-stanford.default_msg_quit +slack-sigma-stanford.notify +bitlbee.addresses = "localhost/6667" +bitlbee.proxy +bitlbee.ipv6 +bitlbee.ssl +bitlbee.ssl_cert +bitlbee.ssl_priorities +bitlbee.ssl_dhkey_size +bitlbee.ssl_fingerprint +bitlbee.ssl_verify +bitlbee.password = "ad/bitlbee:${sec.data.bitlbee_password}" +bitlbee.capabilities +bitlbee.sasl_mechanism +bitlbee.sasl_username +bitlbee.sasl_password +bitlbee.sasl_timeout +bitlbee.autoconnect = on +bitlbee.autoreconnect +bitlbee.autoreconnect_delay +bitlbee.nicks +bitlbee.username +bitlbee.realname +bitlbee.local_hostname +bitlbee.command +bitlbee.command_delay +bitlbee.autojoin +bitlbee.autorejoin +bitlbee.autorejoin_delay +bitlbee.connection_timeout +bitlbee.anti_flood_prio_high +bitlbee.anti_flood_prio_low +bitlbee.away_check +bitlbee.away_check_max_nicks +bitlbee.default_msg_kick +bitlbee.default_msg_part +bitlbee.default_msg_quit +bitlbee.notify +gitter.addresses = "irc.gitter.im" +gitter.proxy +gitter.ipv6 +gitter.ssl = on +gitter.ssl_cert +gitter.ssl_priorities +gitter.ssl_dhkey_size = 1024 +gitter.ssl_fingerprint +gitter.ssl_verify = on +gitter.password = "${sec.data.gitterpass}" +gitter.capabilities +gitter.sasl_mechanism +gitter.sasl_username +gitter.sasl_password +gitter.sasl_timeout +gitter.autoconnect +gitter.autoreconnect +gitter.autoreconnect_delay +gitter.nicks = "anders-dc" +gitter.username +gitter.realname +gitter.local_hostname +gitter.command +gitter.command_delay +gitter.autojoin +gitter.autorejoin +gitter.autorejoin_delay +gitter.connection_timeout +gitter.anti_flood_prio_high +gitter.anti_flood_prio_low +gitter.away_check +gitter.away_check_max_nicks +gitter.default_msg_kick +gitter.default_msg_part +gitter.default_msg_quit +gitter.notify +slack-taku.addresses = "takuglacier.irc.slack.com/6667" +slack-taku.proxy +slack-taku.ipv6 +slack-taku.ssl = on +slack-taku.ssl_cert +slack-taku.ssl_priorities +slack-taku.ssl_dhkey_size +slack-taku.ssl_fingerprint +slack-taku.ssl_verify +slack-taku.password = "${sec.data.slack-taku_password}" +slack-taku.capabilities +slack-taku.sasl_mechanism +slack-taku.sasl_username = "${sec.data.slack-taku_username}" +slack-taku.sasl_password = "${sec.data.slack-taku_password}" +slack-taku.sasl_timeout +slack-taku.autoconnect = on +slack-taku.autoreconnect +slack-taku.autoreconnect_delay +slack-taku.nicks = "anders.damsgaard" +slack-taku.username = "${sec.data.slack-taku_username}" +slack-taku.realname +slack-taku.local_hostname +slack-taku.command +slack-taku.command_delay +slack-taku.autojoin +slack-taku.autorejoin +slack-taku.autorejoin_delay +slack-taku.connection_timeout +slack-taku.anti_flood_prio_high +slack-taku.anti_flood_prio_low +slack-taku.away_check +slack-taku.away_check_max_nicks +slack-taku.default_msg_kick +slack-taku.default_msg_part +slack-taku.default_msg_quit +slack-taku.notify diff --git a/.weechat/iset.conf b/.weechat/iset.conf @@ -0,0 +1,30 @@ +# +# iset.conf -- weechat v1.0.1 +# + +[color] +bg_selected = red +help_default_value = green +help_option_name = white +help_text = default +option = default +option_selected = white +type = brown +type_selected = yellow +value = cyan +value_diff = magenta +value_diff_selected = lightmagenta +value_selected = lightcyan +value_undef = green +value_undef_selected = lightgreen + +[help] +show_help_bar = on +show_help_extra_info = on +show_plugin_description = off + +[look] +scroll_horiz = 10 +show_current_line = on +use_mute = off +value_search_char = "=" diff --git a/.weechat/logger.conf b/.weechat/logger.conf @@ -0,0 +1,26 @@ +# +# logger.conf -- weechat v1.0.1 +# + +[look] +backlog = 20 + +[color] +backlog_end = default +backlog_line = default + +[file] +auto_log = on +flush_delay = 120 +info_lines = off +mask = "$plugin.$name.weechatlog" +name_lower_case = on +nick_prefix = "" +nick_suffix = "" +path = "%h/logs/" +replacement_char = "_" +time_format = "%Y-%m-%d %H:%M:%S" + +[level] + +[mask] diff --git a/.weechat/plugins.conf b/.weechat/plugins.conf @@ -0,0 +1,210 @@ +# +# plugins.conf -- weechat v1.0.1 +# + +[var] +fifo.fifo = "on" +guile.check_license = "off" +lua.check_license = "off" +perl.beep.beep_command_dcc = "$bell" +perl.beep.beep_command_highlight = "$bell" +perl.beep.beep_command_pv = "$bell" +perl.beep.beep_command_timeout = "30000" +perl.beep.beep_dcc = "on" +perl.beep.beep_highlight = "on" +perl.beep.beep_highlight_blacklist = "off" +perl.beep.beep_highlight_whitelist = "off" +perl.beep.beep_pv = "on" +perl.beep.beep_pv_blacklist = "off" +perl.beep.beep_pv_whitelist = "off" +perl.beep.beep_trigger_highlight = "" +perl.beep.beep_trigger_pv = "" +perl.beep.bell_always = "" +perl.beep.blacklist_nicks = "" +perl.beep.whitelist_channels = "" +perl.beep.whitelist_nicks = "" +perl.check_license = "off" +perl.highmon.alignment = "channel" +perl.highmon.away_only = "off" +perl.highmon.bitlbee.#twitter_damsgaardanders = "off" +perl.highmon.color_buf = "on" +perl.highmon.first_run = "true" +perl.highmon.hotlist_show = "off" +perl.highmon.logging = "off" +perl.highmon.merge_private = "off" +perl.highmon.nick_prefix = "<" +perl.highmon.nick_suffix = ">" +perl.highmon.output = "buffer" +perl.highmon.short_names = "off" +perl.pushover.blacklist = "#twitter_damsgaardanders" +perl.pushover.enabled = "on" +perl.pushover.nma_apikey = "" +perl.pushover.only_if_away = "off" +perl.pushover.only_if_inactive = "off" +perl.pushover.pb_apikey = "${sec.data.pushapikey}" +perl.pushover.pb_device_iden = "" +perl.pushover.priority = "" +perl.pushover.rate_limit = "0" +perl.pushover.redact_priv_msg = "off" +perl.pushover.service = "pushover" +perl.pushover.short_name = "off" +perl.pushover.show_highlights = "on" +perl.pushover.show_priv_msg = "on" +perl.pushover.sound = "" +perl.pushover.token = "aa8a7wor4p3o1uzihczzrxggnwntk2" +perl.pushover.user = "${sec.data.pushuserkey}" +perl.pushover.verbose = "1" +python.check_license = "off" +python.cmd_help.color_alias = "white" +python.cmd_help.color_alias_name = "green" +python.cmd_help.color_alias_value = "green" +python.cmd_help.color_arguments = "cyan" +python.cmd_help.color_delimiters = "lightgreen" +python.cmd_help.color_list = "green" +python.cmd_help.color_list_count = "white" +python.cmd_help.color_no_help = "red" +python.cmd_help.color_option_help = "brown" +python.cmd_help.color_option_name = "yellow" +python.cmd_help.display_no_help = "on" +python.cmd_help.format_option = "(${white:type}) ${description_nls}" +python.cmd_help.ignore_commands = "map,me,die,restart" +python.cmd_help.max_options = "5" +python.cmd_help.prefix = "[" +python.cmd_help.right_align = "off" +python.cmd_help.right_padding = "15" +python.cmd_help.space = "2" +python.cmd_help.start_on_load = "off" +python.cmd_help.stop_on_enter = "on" +python.cmd_help.suffix = "]" +python.cmd_help.timer = "0" +python.urlserver.buffer_short_name = "off" +python.urlserver.color = "darkgray" +python.urlserver.color_in_msg = "" +python.urlserver.debug = "off" +python.urlserver.display_urls = "on" +python.urlserver.display_urls_in_msg = "off" +python.urlserver.http_allowed_ips = "" +python.urlserver.http_auth = "" +python.urlserver.http_auth_redirect = "on" +python.urlserver.http_autostart = "on" +python.urlserver.http_bg_color = "#f4f4f4" +python.urlserver.http_css_url = "" +python.urlserver.http_embed_image = "off" +python.urlserver.http_embed_youtube = "off" +python.urlserver.http_embed_youtube_size = "480*350" +python.urlserver.http_fg_color = "#000" +python.urlserver.http_hostname = "" +python.urlserver.http_hostname_display = "" +python.urlserver.http_open_in_new_page = "on" +python.urlserver.http_port = "" +python.urlserver.http_port_display = "" +python.urlserver.http_prefix_suffix = " " +python.urlserver.http_scheme_display = "http" +python.urlserver.http_time_format = "%d/%m/%y %H:%M:%S" +python.urlserver.http_title = "WeeChat URLs" +python.urlserver.http_url_prefix = "" +python.urlserver.msg_ignore_buffers = "core.weechat,python.grep" +python.urlserver.msg_ignore_dup_urls = "off" +python.urlserver.msg_ignore_regex = "" +python.urlserver.msg_ignore_tags = "irc_quit,irc_part,notify_none" +python.urlserver.msg_require_tags = "nick_" +python.urlserver.separators = "[|]" +python.urlserver.url_min_length = "0" +python.urlserver.urls_amount = "100" +python.vimode.no_warn = "off" +ruby.check_license = "off" +tcl.check_license = "off" + +[desc] +perl.beep.beep_command_dcc = "command for beep on dcc, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")" +perl.beep.beep_command_highlight = "command for beep on highlight, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")" +perl.beep.beep_command_pv = "command for beep on private message, special value "$bell" is allowed, as well as "$bell;command" (default: "$bell")" +perl.beep.beep_command_timeout = "timeout for command run (in milliseconds, 0 = never kill (not recommended)) (default: "30000")" +perl.beep.beep_dcc = "beep on dcc (default: "on")" +perl.beep.beep_highlight = "beep on highlight (default: "on")" +perl.beep.beep_highlight_blacklist = "turn blacklist for highlights on or off (default: "off")" +perl.beep.beep_highlight_whitelist = "turn whitelist for highlights on or off (default: "off")" +perl.beep.beep_pv = "beep on private message (default: "on")" +perl.beep.beep_pv_blacklist = "turn blacklist for private messages on or off (default: "off")" +perl.beep.beep_pv_whitelist = "turn whitelist for private messages on or off (default: "off")" +perl.beep.beep_trigger_highlight = "word that will trigger execution of beep_command_highlight (if empty, anything will trigger) (default: "")" +perl.beep.beep_trigger_pv = "word that will trigger execution of beep_command_pv (it empty, anything will trigger) (default: "")" +perl.beep.bell_always = "use $bell on private messages and/or highlights regardless of trigger and whitelist settings (example: "pv,highlight") (default: "")" +perl.beep.blacklist_nicks = "comma-separated list of "server.nick": if not empty, these nicks will not be able to trigger execution of commands. Cannot be used in conjuction with whitelist (example: "freenode.nick1,freenode.nick2") (default: "")" +perl.beep.whitelist_channels = "comma-separated list of "server.#channel": if not empty, only these channels will trigger execution of commands (example: "freenode.#weechat,freenode.#channel2") (default: "")" +perl.beep.whitelist_nicks = "comma-separated list of "server.nick": if not empty, only these nicks will trigger execution of commands (example: "freenode.nick1,freenode.nick2") (default: "")" +perl.pushover.blacklist = "Comma separated list of buffers (full name) to blacklist for notifications (wildcard "*" is allowed, name beginning with "!" is excluded) (default: "")" +perl.pushover.enabled = "Turn script on or off (default: "on")" +perl.pushover.nma_apikey = "nma API key (default: "")" +perl.pushover.only_if_away = "Notify only if away status is active (default: "off")" +perl.pushover.only_if_inactive = "Notify only if buffer is not the active (current) buffer (default: "off")" +perl.pushover.pb_apikey = "Pushbullet API key (default: "")" +perl.pushover.pb_device_iden = "Device Iden of pushbullet device (default: "")" +perl.pushover.priority = "priority (empty for default) (default: "")" +perl.pushover.rate_limit = "Rate limit in seconds (0 = unlimited), will send a maximum of 1 notification per time limit (default: "0")" +perl.pushover.redact_priv_msg = "When receiving private message notifications, hide the actual message text (default: "off")" +perl.pushover.service = "Notification service to use. Multiple services may be supplied as comma separated list. (supported services: pushover, nma, pushbullet) (default: "pushover")" +perl.pushover.short_name = "Use short buffer name in notification (default: "off")" +perl.pushover.show_highlights = "Notify on highlights (default: "on")" +perl.pushover.show_priv_msg = "Notify on private messages (default: "on")" +perl.pushover.sound = "Sound (empty for default) (default: "")" +perl.pushover.token = "pushover API token/key (You may feel free to use your own token, so you get your own monthly quota of messages without being affected by other users. See also: https://pushover.net/faq#overview-distribution ) (default: "ajEX9RWhxs6NgeXFJxSK2jmpY54C9S")" +perl.pushover.user = "pushover user key (default: "")" +perl.pushover.verbose = "Verbosity level (0 = silently ignore any errors, 1 = display brief error, 2 = display full server response) (default: "1")" +python.cmd_help.color_alias = "color for text "Alias" (default: "white")" +python.cmd_help.color_alias_name = "color for alias name (default: "green")" +python.cmd_help.color_alias_value = "color for alias value (default: "green")" +python.cmd_help.color_arguments = "color for command arguments (default: "cyan")" +python.cmd_help.color_delimiters = "color for delimiters (default: "lightgreen")" +python.cmd_help.color_list = "color for list of commands/options (default: "green")" +python.cmd_help.color_list_count = "color for number of commands/options in list found (default: "white")" +python.cmd_help.color_no_help = "color for text "No help" (default: "red")" +python.cmd_help.color_option_help = "color for help on option (default: "brown")" +python.cmd_help.color_option_name = "color for name of option found (by adding "*" to option name) (default: "yellow")" +python.cmd_help.display_no_help = "display "No help" when command is not found (default: "on")" +python.cmd_help.format_option = "format of help for options: free text with identifiers using format: ${name} or ${color:name}: color is a WeeChat color (optional), name is a field of infolist "option": full_name, config_name, section_name, option_name, description, description_nls, string_values, min, max, null_value_allowed, value_is_null, default_value_is_null, type, value, default_value (default: "(${white:type}) ${description_nls}")" +python.cmd_help.ignore_commands = "comma-separated list of commands (without leading "/") to ignore (default: "map,me,die,restart")" +python.cmd_help.max_options = "max number of options displayed in list (default: "5")" +python.cmd_help.prefix = "string displayed before help (default: "[")" +python.cmd_help.right_align = "align help to right (default: "off")" +python.cmd_help.right_padding = "padding to right when aligned to right (default: "15")" +python.cmd_help.space = "minimum space before help (default: "2")" +python.cmd_help.start_on_load = "auto start help when script is loaded (default: "off")" +python.cmd_help.stop_on_enter = "enter key stop help (default: "on")" +python.cmd_help.suffix = "string displayed after help (default: "]")" +python.cmd_help.timer = "number of seconds help is displayed (0 = display until help is toggled) (default: "0")" +python.urlserver.buffer_short_name = "use buffer short name on dedicated buffer (default: "off")" +python.urlserver.color = "color for urls displayed after message (default: "darkgray")" +python.urlserver.color_in_msg = "color for urls displayed inside irc message: it is a number (irc color) between 00 and 15 (see doc for a list of irc colors) (default: "")" +python.urlserver.debug = "print some debug messages (default: "off")" +python.urlserver.display_urls = "display URLs below messages (default: "on")" +python.urlserver.display_urls_in_msg = "add shorten url next to the original url (only in IRC messages) (useful for urlserver behind relay/irc) (default: "off")" +python.urlserver.http_allowed_ips = "regex for IPs allowed to use server (example: "^(123.45.67.89|192.160.*)$") (default: "")" +python.urlserver.http_auth = "login and password (format: "login:password") required to access to page with list of URLs (note: content is evaluated, see /help eval) (default: "")" +python.urlserver.http_auth_redirect = "require the login/password (if option "http_auth" is set) for URLs redirections (default: "on")" +python.urlserver.http_autostart = "start the built-in HTTP server automatically) (default: "on")" +python.urlserver.http_bg_color = "background color for HTML page (default: "#f4f4f4")" +python.urlserver.http_css_url = "URL of external Cascading Style Sheet to add (BE CAREFUL: the HTTP referer will be sent to site hosting CSS file!) (empty value = use default embedded CSS) (default: "")" +python.urlserver.http_embed_image = "embed images in HTML page (BE CAREFUL: the HTTP referer will be sent to site hosting image!) (default: "off")" +python.urlserver.http_embed_youtube = "embed youtube videos in HTML page (BE CAREFUL: the HTTP referer will be sent to youtube!) (default: "off")" +python.urlserver.http_embed_youtube_size = "size for embedded youtube video, format is "xxx*yyy" (default: "480*350")" +python.urlserver.http_fg_color = "foreground color for HTML page (default: "#000")" +python.urlserver.http_hostname = "force hostname/IP in bind of socket (empty value = auto-detect current hostname) (default: "")" +python.urlserver.http_hostname_display = "display this hostname in shortened URLs (default: "")" +python.urlserver.http_open_in_new_page = "open links in new pages/tabs (default: "on")" +python.urlserver.http_port = "force port for listening (empty value = find a random free port) (default: "")" +python.urlserver.http_port_display = "display this port in shortened URLs. Useful if you forward a different external port to the internal port (default: "")" +python.urlserver.http_prefix_suffix = "suffix displayed between prefix and message in HTML page (default: " ")" +python.urlserver.http_scheme_display = "display this scheme in shortened URLs (default: "http")" +python.urlserver.http_time_format = "time format in the HTML page (default: "%d/%m/%y %H:%M:%S")" +python.urlserver.http_title = "title of the HTML page (default: "WeeChat URLs")" +python.urlserver.http_url_prefix = "prefix to add in URLs to prevent external people to scan your URLs (for example: prefix "xx" will give URL: http://host.com:1234/xx/8) (default: "")" +python.urlserver.msg_ignore_buffers = "comma-separated list (without spaces) of buffers to ignore (full name like "irc.freenode.#weechat") (default: "core.weechat,python.grep")" +python.urlserver.msg_ignore_dup_urls = "ignore duplicated URLs (do not add an URL in list if it is already) (default: "off")" +python.urlserver.msg_ignore_regex = "ignore messages matching this regex (default: "")" +python.urlserver.msg_ignore_tags = "comma-separated list (without spaces) of tags (or beginning of tags) to ignore (for example, use "notify_none" to ignore self messages or "nick_weebot" to ignore messages from nick "weebot") (default: "irc_quit,irc_part,notify_none")" +python.urlserver.msg_require_tags = "comma-separated list (without spaces) of tags (or beginning of tags) required to shorten URLs (for example "nick_" to shorten URLs only in messages from other users) (default: "nick_")" +python.urlserver.separators = "separators for short url list (string with exactly 3 chars) (default: "[|]")" +python.urlserver.url_min_length = "minimum length for an URL to be shortened (0 = shorten all URLs, -1 = detect length based on shorten URL) (default: "0")" +python.urlserver.urls_amount = "number of URLs to keep in memory (and in file when script is not loaded) (default: "100")" +python.vimode.no_warn = "don't warn about problematickeybindings and tmux/screen (default: "off")" diff --git a/.weechat/relay.conf b/.weechat/relay.conf @@ -0,0 +1,38 @@ +# +# relay.conf -- weechat v1.0.1 +# + +[look] +auto_open_buffer = on +raw_messages = 256 + +[color] +client = cyan +status_active = lightblue +status_auth_failed = lightred +status_connecting = yellow +status_disconnected = lightred +status_waiting_auth = brown +text = default +text_bg = default +text_selected = white + +[network] +allowed_ips = "" +bind_address = "" +clients_purge_delay = 0 +compression_level = 6 +ipv6 = on +max_clients = 5 +password = "" +ssl_cert_key = "%h/ssl/relay.pem" +websocket_allowed_origins = "" + +[irc] +backlog_max_minutes = 1440 +backlog_max_number = 256 +backlog_since_last_disconnect = on +backlog_tags = "irc_privmsg" +backlog_time_format = "[%H:%M] " + +[port] diff --git a/.weechat/script.conf b/.weechat/script.conf @@ -0,0 +1,48 @@ +# +# script.conf -- weechat v1.0.1 +# + +[look] +columns = "%s %n %V %v %u | %d | %t" +diff_color = on +diff_command = "auto" +display_source = on +quiet_actions = on +sort = "p,n" +translate_description = on +use_keys = on + +[color] +status_autoloaded = cyan +status_held = white +status_installed = lightcyan +status_obsolete = lightmagenta +status_popular = yellow +status_running = lightgreen +status_unknown = lightred +text = default +text_bg = default +text_bg_selected = red +text_date = default +text_date_selected = white +text_delimiters = default +text_description = default +text_description_selected = white +text_extension = default +text_extension_selected = white +text_name = cyan +text_name_selected = lightcyan +text_selected = white +text_tags = brown +text_tags_selected = yellow +text_version = magenta +text_version_loaded = default +text_version_loaded_selected = white +text_version_selected = lightmagenta + +[scripts] +autoload = on +cache_expire = 1440 +dir = "%h/script" +hold = "" +url = "http://weechat.org/files/plugins.xml.gz" diff --git a/.weechat/sec.conf b/.weechat/sec.conf @@ -0,0 +1,24 @@ +# +# sec.conf -- weechat v1.0.1 +# + +[crypt] +cipher = aes256 +hash_algo = sha256 +passphrase_file = "" +salt = on + +[data] +__passphrase__ = on +freenode_username = "F1A94392BFC1D9863FD866166BF6991A4B03FCB2912201BCC6AD75341CF45F79895845646680250CA8D86CD3" +gitterpass = "F47CD14BEA231FA4CA57CAFFCCBF26A68A33FFA7778450F4BD4EB619C7A4DD32C84FA49C328A3159FCF2AA9348DA84AF8C25540F80C8B703EC5952E7D53B37B5D4B5EB77DE83150060928E77D4FFD0CDEF" +takuglacierpass = "2DE68A94CBEF0EADBCA276A04B50B961530315E221D5FA9D1A477D83E1CEECB7B28A4C3103EBDD21F955F6C44069FECF9DFEA8783DE39DF0F5A70C16509E6651DA01C95B8152D4A556" +pushapikey = "F8716BDA34366E12595B039BF28D3E9B73C576FA605DA998DB6E7F9C8F0E1CC52B66DDF434E7BEBDA2FE5C6C4C032D5EB351E37CE288EF9CAE820ABC612E0EC015E7680B4BCB6E" +slack-sigma-stanford_password = "D985A8D17417F98F45CF5583137EA466B7A14536D0D36CC1A6175BCAA0E1DC3BD0792E519EA9F0E19E5D215701FFCCD0B619D0D61DCD2700C15AAB879936E1FAB1A012330939537F1CC63B65" +pushoverkey = "9230DF09FCB6012C602582283A4FE88876D6D98CC5A25C6122D5CA6A76E445BB6DBA7F077E8E9D43095F0537C9F034B39C0D4F379EE21235461688F2D8E19FD7D1074E58184615" +bitlbee_password = "9A392D6BC76A6D6EDCC56F167B9724C23FF1AC5CFD51285E0D36C61634C3FCA70FF7F4F9B954C84A6749CAA25D8988444D890B7C47DB5FAB5644849305E3" +pushuserkey = "09F9BF9B052D4C4D92E1B7F7BADFAD536BF63A255604FA750438B56C13C19F32AEF6FA9A5FF30190D22D5ECF6C6B81C760B19E842DCAEB18037C089A06F756E1D577BEFE5B5BEF" +freenode_password = "343D96DA4B1B6A74446A606559DF5324A34A81AB150001398F96B3CA72BE74D6950E89351A1FB56678916AD004D1B140F0EC2F3014A50F257DA5C2BA7AFCE7" +slack-taku_username = "C2CB96DC4EE1DA9FD9B280F01159973763083B72EBFEDDA3019E13E72C494DFEAC714129CEE2FFDE31911EBCBB659985E0CB8D16821DFC769A" +slack-sigma-stanford_username = "FCABEB95A7C59E948C5332DD7467A8377CA059EE1DE64D028B01288113FD9AFC9559EAAE09C2BD56DFDB65AC32ACDBE080A92F99471DA9D843" +slack-taku_password = "0733086C7260CB3976233A98B63CCBE5AC5A866BB651C496C514ED5EB21B083F61777614DD8A4B25D97C1123A97FC8AFE8713B7CCDC3B71B8924BA116D779230ACE84D908371B247F8" diff --git a/.weechat/trigger.conf b/.weechat/trigger.conf @@ -0,0 +1,47 @@ +# +# trigger.conf -- weechat v1.0.1 +# + +[look] +enabled = on +monitor_strip_colors = off + +[color] +flag_command = lightgreen +flag_conditions = yellow +flag_regex = lightcyan +flag_return_code = lightmagenta +regex = white +replace = cyan +trigger = green +trigger_disabled = red + +[trigger] +beep.arguments = "" +beep.command = "/print -beep" +beep.conditions = "${tg_highlight} || ${tg_msg_pv}" +beep.enabled = on +beep.hook = print +beep.regex = "" +beep.return_code = ok +cmd_pass.arguments = "5000|input_text_display;5000|history_add;5000|irc_command_auth" +cmd_pass.command = "" +cmd_pass.conditions = "" +cmd_pass.enabled = on +cmd_pass.hook = modifier +cmd_pass.regex = "==^((/(msg|quote) +nickserv +(id|identify|register|ghost +[^ ]+|release +[^ ]+|regain +[^ ]+) +)|/oper +[^ ]+ +|/quote +pass +|/set +[^ ]*password[^ ]* +|/secure +(passphrase|decrypt|set +[^ ]+) +)(.*)==$1$.*+" +cmd_pass.return_code = ok +msg_auth.arguments = "5000|irc_message_auth" +msg_auth.command = "" +msg_auth.conditions = "" +msg_auth.enabled = on +msg_auth.hook = modifier +msg_auth.regex = "==^(.*(id|identify|register|ghost +[^ ]+|release +[^ ]+) +)(.*)==$1$.*+" +msg_auth.return_code = ok +server_pass.arguments = "5000|input_text_display;5000|history_add" +server_pass.command = "" +server_pass.conditions = "" +server_pass.enabled = on +server_pass.hook = modifier +server_pass.regex = "==^(/(server|connect) .*-(sasl_)?password=)([^ ]+)(.*)==$1$.*4$5" +server_pass.return_code = ok diff --git a/.weechat/weechat.conf b/.weechat/weechat.conf @@ -0,0 +1,658 @@ +# +# weechat.conf -- weechat v1.0.1 +# + +[debug] + +[startup] +command_after_plugins = "" +command_before_plugins = "" +display_logo = on +display_version = on +sys_rlimit = "" + +[look] +align_end_of_lines = message +bar_more_down = "++" +bar_more_left = "<<" +bar_more_right = ">>" +bar_more_up = "--" +bare_display_exit_on_input = on +bare_display_time_format = "%H:%M" +buffer_auto_renumber = on +buffer_notify_default = all +buffer_position = end +buffer_search_case_sensitive = off +buffer_search_force_default = off +buffer_search_regex = off +buffer_search_where = prefix_message +buffer_time_format = "${color:245}%H${color:240}%M" +color_basic_force_bold = off +color_inactive_buffer = on +color_inactive_message = on +color_inactive_prefix = on +color_inactive_prefix_buffer = on +color_inactive_time = off +color_inactive_window = on +color_nick_offline = off +color_pairs_auto_reset = 5 +color_real_white = off +command_chars = "" +confirm_quit = off +day_change = on +day_change_message_1date = "-- %a, %d %b %Y --" +day_change_message_2dates = "-- %%a, %%d %%b %%Y (%a, %d %b %Y) --" +eat_newline_glitch = off +emphasized_attributes = "" +highlight = "" +highlight_regex = "" +highlight_tags = "" +hotlist_add_conditions = "${away} || ${buffer.num_displayed} == 0" +hotlist_buffer_separator = ", " +hotlist_count_max = 2 +hotlist_count_min_msg = 2 +hotlist_names_count = 3 +hotlist_names_length = 0 +hotlist_names_level = 12 +hotlist_names_merged_buffers = off +hotlist_prefix = "H: " +hotlist_remove = merged +hotlist_short_names = on +hotlist_sort = group_time_asc +hotlist_suffix = "" +hotlist_unique_numbers = on +input_cursor_scroll = 20 +input_share = all +input_share_overwrite = off +input_undo_max = 32 +item_buffer_filter = "*" +item_buffer_zoom = "!" +item_time_format = "%H:%M" +jump_current_to_previous_buffer = on +jump_previous_buffer_when_closing = on +jump_smart_back_to_buffer = on +key_bind_safe = on +mouse = on +mouse_timer_delay = 100 +nick_prefix = "" +nick_suffix = "" +paste_bracketed = on +paste_bracketed_timer_delay = 10 +paste_max_lines = 1 +prefix_action = " *" +prefix_align = right +prefix_align_max = 10 +prefix_align_min = 0 +prefix_align_more = "+" +prefix_align_more_after = on +prefix_buffer_align = right +prefix_buffer_align_max = 0 +prefix_buffer_align_more = "+" +prefix_buffer_align_more_after = on +prefix_error = "=!=" +prefix_join = "-->" +prefix_network = "--" +prefix_quit = "<--" +prefix_same_nick = "" +prefix_suffix = "|" +read_marker = line +read_marker_always_show = off +read_marker_string = "- " +save_config_on_exit = on +save_layout_on_exit = none +scroll_amount = 3 +scroll_bottom_after_switch = off +scroll_page_percent = 100 +search_text_not_found_alert = on +separator_horizontal = "-" +separator_vertical = "" +tab_width = 1 +time_format = "%a, %d %b %Y %T" +window_auto_zoom = off +window_separator_horizontal = on +window_separator_vertical = on +window_title = "WeeChat ${info:version}" + +[palette] + +[color] +bar_more = lightmagenta +chat = default +chat_bg = default +chat_buffer = white +chat_channel = white +chat_day_change = cyan +chat_delimiters = 29 +chat_highlight = yellow +chat_highlight_bg = magenta +chat_host = 24 +chat_inactive_buffer = default +chat_inactive_window = default +chat_nick = lightcyan +chat_nick_colors = "cyan,magenta,green,brown,lightblue,default,lightcyan,lightmagenta,lightgreen,blue,31,35,38,40,49,63,70,80,92,99,112,126,130,138,142,148,160,162,167,169,174,176,178,184,186,210,212,215,247" +chat_nick_offline = default +chat_nick_offline_highlight = default +chat_nick_offline_highlight_bg = blue +chat_nick_other = cyan +chat_nick_prefix = green +chat_nick_self = white +chat_nick_suffix = green +chat_prefix_action = white +chat_prefix_buffer = brown +chat_prefix_buffer_inactive_buffer = default +chat_prefix_error = yellow +chat_prefix_join = lightgreen +chat_prefix_more = lightmagenta +chat_prefix_network = magenta +chat_prefix_quit = lightred +chat_prefix_suffix = 24 +chat_read_marker = magenta +chat_read_marker_bg = default +chat_server = brown +chat_tags = red +chat_text_found = yellow +chat_text_found_bg = lightmagenta +chat_time = default +chat_time_delimiters = brown +chat_value = cyan +emphasized = yellow +emphasized_bg = magenta +input_actions = lightgreen +input_text_not_found = red +nicklist_away = 244 +nicklist_group = green +nicklist_offline = blue +separator = 0 +status_count_highlight = magenta +status_count_msg = brown +status_count_other = default +status_count_private = green +status_data_highlight = lightmagenta +status_data_msg = yellow +status_data_other = default +status_data_private = lightgreen +status_filter = green +status_more = yellow +status_name = white +status_name_ssl = lightgreen +status_nicklist_count = default +status_number = yellow +status_time = default + +[completion] +base_word_until_cursor = on +default_template = "%(nicks)|%(irc_channels)" +nick_add_space = on +nick_completer = ":" +nick_first_only = off +nick_ignore_chars = "[]`_-^" +partial_completion_alert = on +partial_completion_command = off +partial_completion_command_arg = off +partial_completion_count = on +partial_completion_other = off + +[history] +display_default = 5 +max_buffer_lines_minutes = 0 +max_buffer_lines_number = 4096 +max_commands = 100 +max_visited_buffers = 50 + +[proxy] + +[network] +connection_timeout = 60 +gnutls_ca_file = "/etc/ssl/certs/ca-certificates.crt" +gnutls_handshake_timeout = 30 +proxy_curl = "" + +[plugin] +autoload = "*,!xfer" +debug = off +extension = ".so,.dll" +path = "%h/plugins" +save_config_on_unload = on + +[bar] +buffers.color_bg = default +buffers.color_delim = default +buffers.color_fg = default +buffers.conditions = "" +buffers.filling_left_right = vertical +buffers.filling_top_bottom = columns_vertical +buffers.hidden = off +buffers.items = "buffers" +buffers.position = left +buffers.priority = 0 +buffers.separator = on +buffers.size = 14 +buffers.size_max = 14 +buffers.type = root +input.color_bg = default +input.color_delim = cyan +input.color_fg = default +input.conditions = "" +input.filling_left_right = vertical +input.filling_top_bottom = horizontal +input.hidden = off +input.items = "[mode_indicator]+[input_prompt]+(away),[input_search],[input_paste],input_text" +input.position = bottom +input.priority = 1000 +input.separator = off +input.size = 0 +input.size_max = 3 +input.type = window +isetbar.color_bg = default +isetbar.color_delim = cyan +isetbar.color_fg = default +isetbar.conditions = "" +isetbar.filling_left_right = vertical +isetbar.filling_top_bottom = horizontal +isetbar.hidden = on +isetbar.items = "isetbar_help" +isetbar.position = top +isetbar.priority = 0 +isetbar.separator = on +isetbar.size = 3 +isetbar.size_max = 3 +isetbar.type = window +nicklist.color_bg = default +nicklist.color_delim = cyan +nicklist.color_fg = default +nicklist.conditions = "${nicklist}" +nicklist.filling_left_right = vertical +nicklist.filling_top_bottom = columns_vertical +nicklist.hidden = off +nicklist.items = "buffer_nicklist" +nicklist.position = right +nicklist.priority = 200 +nicklist.separator = on +nicklist.size = 14 +nicklist.size_max = 14 +nicklist.type = window +status.color_bg = 0 +status.color_delim = cyan +status.color_fg = default +status.conditions = "" +status.filling_left_right = vertical +status.filling_top_bottom = horizontal +status.hidden = off +status.items = "[buffer_last_number],[buffer_plugin],buffer_number+:+buffer_name+(buffer_modes)+{buffer_nicklist_count}+buffer_zoom+buffer_filter,[lag],[hotlist],completion,scroll" +status.position = bottom +status.priority = 500 +status.separator = off +status.size = 1 +status.size_max = 0 +status.type = window +title.color_bg = 0 +title.color_delim = cyan +title.color_fg = default +title.conditions = "" +title.filling_left_right = vertical +title.filling_top_bottom = horizontal +title.hidden = off +title.items = "buffer_title" +title.position = top +title.priority = 500 +title.separator = off +title.size = 1 +title.size_max = 0 +title.type = window +vi_cmd.color_bg = default +vi_cmd.color_delim = default +vi_cmd.color_fg = default +vi_cmd.conditions = "" +vi_cmd.filling_left_right = vertical +vi_cmd.filling_top_bottom = vertical +vi_cmd.hidden = on +vi_cmd.items = "cmd_text" +vi_cmd.position = bottom +vi_cmd.priority = 0 +vi_cmd.separator = off +vi_cmd.size = 0 +vi_cmd.size_max = 0 +vi_cmd.type = root +vi_line_numbers.color_bg = default +vi_line_numbers.color_delim = default +vi_line_numbers.color_fg = default +vi_line_numbers.conditions = "" +vi_line_numbers.filling_left_right = vertical +vi_line_numbers.filling_top_bottom = vertical +vi_line_numbers.hidden = on +vi_line_numbers.items = "line_numbers" +vi_line_numbers.position = left +vi_line_numbers.priority = 0 +vi_line_numbers.separator = off +vi_line_numbers.size = 0 +vi_line_numbers.size_max = 0 +vi_line_numbers.type = window + +[layout] +highlight-minimal.buffer = "core;weechat;1" +highlight-minimal.buffer = "irc;server.freenode;1" +highlight-minimal.buffer = "irc;server.slack-sigma-stanford;1" +highlight-minimal.buffer = "perl;highmon;2" +highlight-minimal.buffer = "irc;freenode.#debian;3" +highlight-minimal.buffer = "irc;slack-sigma-stanford.#general;4" +highlight-minimal.buffer = "irc;slack-sigma-stanford.#random;5" +highlight-minimal.buffer = "irc;slack-sigma-stanford.#teamice;6" +highlight-minimal.buffer = "irc;slack-sigma-stanford.#tilliceinteractions;7" +highlight-minimal.window = "1;0;15;1;-;-" +highlight-minimal.window = "2;1;0;0;irc;slack-sigma-stanford.#tilliceinteractions" +highlight-minimal.window = "3;1;0;0;perl;highmon" +highlight-minimal.current = on + +[notify] + +[filter] +hidevoices = on;irc.slack-sigma-stanford.*;irc_mode;(\+|\-)v +irc_smart = on;*;irc_smart_filter;* +wholist = on;irc.*;*;of WHO list + +[key] +ctrl-? = "/input delete_previous_char" +ctrl-A = "/input move_beginning_of_line" +ctrl-B = "/input move_previous_char" +ctrl-C_ = "/input insert \x1F" +ctrl-Cb = "/input insert \x02" +ctrl-Cc = "/input insert \x03" +ctrl-Ci = "/input insert \x1D" +ctrl-Co = "/input insert \x0F" +ctrl-Cv = "/input insert \x16" +ctrl-D = "/input delete_next_char" +ctrl-E = "/input move_end_of_line" +ctrl-F = "/input move_next_char" +ctrl-H = "/input delete_previous_char" +ctrl-I = "/input complete_next" +ctrl-J = "/input return" +ctrl-K = "/input delete_end_of_line" +ctrl-L = "/window refresh" +ctrl-M = "/input return" +ctrl-N = "/buffer +1" +ctrl-P = "/buffer -1" +ctrl-R = "/input search_text" +ctrl-Sctrl-U = "/input set_unread" +ctrl-T = "/input transpose_chars" +ctrl-U = "/input delete_beginning_of_line" +ctrl-W = "/input delete_previous_word" +ctrl-X = "/input switch_active_buffer" +ctrl-Y = "/input clipboard_paste" +meta-meta2-1~ = "/window scroll_top" +meta-meta2-23~ = "/bar scroll nicklist * b" +meta-meta2-24~ = "/bar scroll nicklist * e" +meta-meta2-4~ = "/window scroll_bottom" +meta-meta2-5~ = "/window scroll_up" +meta-meta2-6~ = "/window scroll_down" +meta-meta2-7~ = "/window scroll_top" +meta-meta2-8~ = "/window scroll_bottom" +meta-meta2-A = "/buffer -1" +meta-meta2-B = "/buffer +1" +meta-meta2-C = "/buffer +1" +meta-meta2-D = "/buffer -1" +meta-- = "/filter toggle @" +meta-/ = "/input jump_last_buffer_displayed" +meta-0 = "/buffer *10" +meta-1 = "/buffer *1" +meta-2 = "/buffer *2" +meta-3 = "/buffer *3" +meta-4 = "/buffer *4" +meta-5 = "/buffer *5" +meta-6 = "/buffer *6" +meta-7 = "/buffer *7" +meta-8 = "/buffer *8" +meta-9 = "/buffer *9" +meta-< = "/input jump_previously_visited_buffer" +meta-= = "/filter toggle" +meta-> = "/input jump_next_visited_buffer" +meta-OA = "/input history_global_previous" +meta-OB = "/input history_global_next" +meta-OC = "/input move_next_word" +meta-OD = "/input move_previous_word" +meta-OF = "/input move_end_of_line" +meta-OH = "/input move_beginning_of_line" +meta-Oa = "/input history_global_previous" +meta-Ob = "/input history_global_next" +meta-Oc = "/input move_next_word" +meta-Od = "/input move_previous_word" +meta2-15~ = "/buffer -1" +meta2-17~ = "/buffer +1" +meta2-18~ = "/window -1" +meta2-19~ = "/window +1" +meta2-1;3A = "/buffer -1" +meta2-1;3B = "/buffer +1" +meta2-1;3C = "/buffer +1" +meta2-1;3D = "/buffer -1" +meta2-1;3F = "/window scroll_bottom" +meta2-1;3H = "/window scroll_top" +meta2-1;5A = "/input history_global_previous" +meta2-1;5B = "/input history_global_next" +meta2-1;5C = "/input move_next_word" +meta2-1;5D = "/input move_previous_word" +meta2-1~ = "/input move_beginning_of_line" +meta2-200~ = "/input paste_start" +meta2-201~ = "/input paste_stop" +meta2-20~ = "/bar scroll title * -30%" +meta2-21~ = "/bar scroll title * +30%" +meta2-23;3~ = "/bar scroll nicklist * b" +meta2-23~ = "/bar scroll nicklist * -100%" +meta2-24;3~ = "/bar scroll nicklist * e" +meta2-24~ = "/bar scroll nicklist * +100%" +meta2-3~ = "/input delete_next_char" +meta2-4~ = "/input move_end_of_line" +meta2-5;3~ = "/window scroll_up" +meta2-5~ = "/window page_up" +meta2-6;3~ = "/window scroll_down" +meta2-6~ = "/window page_down" +meta2-7~ = "/input move_beginning_of_line" +meta2-8~ = "/input move_end_of_line" +meta2-A = "/input history_previous" +meta2-B = "/input history_next" +meta2-C = "/input move_next_char" +meta2-D = "/input move_previous_char" +meta2-F = "/input move_end_of_line" +meta2-G = "/window page_down" +meta2-H = "/input move_beginning_of_line" +meta2-I = "/window page_up" +meta2-Z = "/input complete_previous" +meta2-[E = "/buffer -1" +meta-_ = "/input redo" +meta-a = "/input jump_smart" +meta-b = "/input move_previous_word" +meta-d = "/input delete_next_word" +meta-f = "/bar toggle nicklist;/bar toggle buffers" +meta-h = "/input hotlist_clear" +meta-jmeta-f = "/buffer -" +meta-jmeta-l = "/buffer +" +meta-jmeta-r = "/server raw" +meta-jmeta-s = "/server jump" +meta-j01 = "/buffer 1" +meta-j02 = "/buffer 2" +meta-j03 = "/buffer 3" +meta-j04 = "/buffer 4" +meta-j05 = "/buffer 5" +meta-j06 = "/buffer 6" +meta-j07 = "/buffer 7" +meta-j08 = "/buffer 8" +meta-j09 = "/buffer 9" +meta-j10 = "/buffer 10" +meta-j11 = "/buffer 11" +meta-j12 = "/buffer 12" +meta-j13 = "/buffer 13" +meta-j14 = "/buffer 14" +meta-j15 = "/buffer 15" +meta-j16 = "/buffer 16" +meta-j17 = "/buffer 17" +meta-j18 = "/buffer 18" +meta-j19 = "/buffer 19" +meta-j20 = "/buffer 20" +meta-j21 = "/buffer 21" +meta-j22 = "/buffer 22" +meta-j23 = "/buffer 23" +meta-j24 = "/buffer 24" +meta-j25 = "/buffer 25" +meta-j26 = "/buffer 26" +meta-j27 = "/buffer 27" +meta-j28 = "/buffer 28" +meta-j29 = "/buffer 29" +meta-j30 = "/buffer 30" +meta-j31 = "/buffer 31" +meta-j32 = "/buffer 32" +meta-j33 = "/buffer 33" +meta-j34 = "/buffer 34" +meta-j35 = "/buffer 35" +meta-j36 = "/buffer 36" +meta-j37 = "/buffer 37" +meta-j38 = "/buffer 38" +meta-j39 = "/buffer 39" +meta-j40 = "/buffer 40" +meta-j41 = "/buffer 41" +meta-j42 = "/buffer 42" +meta-j43 = "/buffer 43" +meta-j44 = "/buffer 44" +meta-j45 = "/buffer 45" +meta-j46 = "/buffer 46" +meta-j47 = "/buffer 47" +meta-j48 = "/buffer 48" +meta-j49 = "/buffer 49" +meta-j50 = "/buffer 50" +meta-j51 = "/buffer 51" +meta-j52 = "/buffer 52" +meta-j53 = "/buffer 53" +meta-j54 = "/buffer 54" +meta-j55 = "/buffer 55" +meta-j56 = "/buffer 56" +meta-j57 = "/buffer 57" +meta-j58 = "/buffer 58" +meta-j59 = "/buffer 59" +meta-j60 = "/buffer 60" +meta-j61 = "/buffer 61" +meta-j62 = "/buffer 62" +meta-j63 = "/buffer 63" +meta-j64 = "/buffer 64" +meta-j65 = "/buffer 65" +meta-j66 = "/buffer 66" +meta-j67 = "/buffer 67" +meta-j68 = "/buffer 68" +meta-j69 = "/buffer 69" +meta-j70 = "/buffer 70" +meta-j71 = "/buffer 71" +meta-j72 = "/buffer 72" +meta-j73 = "/buffer 73" +meta-j74 = "/buffer 74" +meta-j75 = "/buffer 75" +meta-j76 = "/buffer 76" +meta-j77 = "/buffer 77" +meta-j78 = "/buffer 78" +meta-j79 = "/buffer 79" +meta-j80 = "/buffer 80" +meta-j81 = "/buffer 81" +meta-j82 = "/buffer 82" +meta-j83 = "/buffer 83" +meta-j84 = "/buffer 84" +meta-j85 = "/buffer 85" +meta-j86 = "/buffer 86" +meta-j87 = "/buffer 87" +meta-j88 = "/buffer 88" +meta-j89 = "/buffer 89" +meta-j90 = "/buffer 90" +meta-j91 = "/buffer 91" +meta-j92 = "/buffer 92" +meta-j93 = "/buffer 93" +meta-j94 = "/buffer 94" +meta-j95 = "/buffer 95" +meta-j96 = "/buffer 96" +meta-j97 = "/buffer 97" +meta-j98 = "/buffer 98" +meta-j99 = "/buffer 99" +meta-k = "/input grab_key_command" +meta-l = "/window bare" +meta-m = "/mute mouse toggle" +meta-n = "/window scroll_next_highlight" +meta-p = "/window scroll_previous_highlight" +meta-r = "/input delete_line" +meta-s = "/mute aspell toggle" +meta-u = "/window scroll_unread" +meta-wmeta-meta2-A = "/window up" +meta-wmeta-meta2-B = "/window down" +meta-wmeta-meta2-C = "/window right" +meta-wmeta-meta2-D = "/window left" +meta-wmeta2-1;3A = "/window up" +meta-wmeta2-1;3B = "/window down" +meta-wmeta2-1;3C = "/window right" +meta-wmeta2-1;3D = "/window left" +meta-wmeta-b = "/window balance" +meta-wmeta-s = "/window swap" +meta-x = "/input zoom_merged_buffer" +meta-z = "/window zoom" +ctrl-_ = "/input undo" +ctrl-f = "/bar toggle nicklist" + +[key_search] +ctrl-I = "/input search_switch_where" +ctrl-J = "/input search_stop" +ctrl-M = "/input search_stop" +ctrl-R = "/input search_switch_regex" +meta2-A = "/input search_previous" +meta2-B = "/input search_next" +meta-c = "/input search_switch_case" + +[key_cursor] +ctrl-J = "/cursor stop" +ctrl-M = "/cursor stop" +meta-meta2-A = "/cursor move area_up" +meta-meta2-B = "/cursor move area_down" +meta-meta2-C = "/cursor move area_right" +meta-meta2-D = "/cursor move area_left" +meta2-1;3A = "/cursor move area_up" +meta2-1;3B = "/cursor move area_down" +meta2-1;3C = "/cursor move area_right" +meta2-1;3D = "/cursor move area_left" +meta2-A = "/cursor move up" +meta2-B = "/cursor move down" +meta2-C = "/cursor move right" +meta2-D = "/cursor move left" +@item(buffer_nicklist):K = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):b = "/window ${_window_number};/ban ${nick}" +@item(buffer_nicklist):k = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):q = "/window ${_window_number};/query ${nick};/cursor stop" +@item(buffer_nicklist):w = "/window ${_window_number};/whois ${nick}" +@chat:Q = "hsignal:chat_quote_time_prefix_message;/cursor stop" +@chat:m = "hsignal:chat_quote_message;/cursor stop" +@chat:q = "hsignal:chat_quote_prefix_message;/cursor stop" + +[key_mouse] +@bar(buffers):ctrl-wheeldown = "hsignal:buffers_mouse" +@bar(buffers):ctrl-wheelup = "hsignal:buffers_mouse" +@bar(input):button2 = "/input grab_mouse_area" +@bar(nicklist):button1-gesture-down = "/bar scroll nicklist ${_window_number} +100%" +@bar(nicklist):button1-gesture-down-long = "/bar scroll nicklist ${_window_number} e" +@bar(nicklist):button1-gesture-up = "/bar scroll nicklist ${_window_number} -100%" +@bar(nicklist):button1-gesture-up-long = "/bar scroll nicklist ${_window_number} b" +@chat(perl.iset):button1 = "hsignal:iset_mouse" +@chat(perl.iset):button2* = "hsignal:iset_mouse" +@chat(perl.iset):wheeldown = "/repeat 5 /iset **down" +@chat(perl.iset):wheelup = "/repeat 5 /iset **up" +@chat(script.scripts):button1 = "/window ${_window_number};/script go ${_chat_line_y}" +@chat(script.scripts):button2 = "/window ${_window_number};/script go ${_chat_line_y};/script installremove -q ${script_name_with_extension}" +@chat(script.scripts):wheeldown = "/script down 5" +@chat(script.scripts):wheelup = "/script up 5" +@item(buffer_nicklist):button1 = "/window ${_window_number};/query ${nick}" +@item(buffer_nicklist):button1-gesture-left = "/window ${_window_number};/kick ${nick}" +@item(buffer_nicklist):button1-gesture-left-long = "/window ${_window_number};/kickban ${nick}" +@item(buffer_nicklist):button2 = "/window ${_window_number};/whois ${nick}" +@item(buffer_nicklist):button2-gesture-left = "/window ${_window_number};/ban ${nick}" +@item(buffers):button1* = "hsignal:buffers_mouse" +@item(buffers):button2* = "hsignal:buffers_mouse" +@bar:wheeldown = "/bar scroll ${_bar_name} ${_window_number} +20%" +@bar:wheelup = "/bar scroll ${_bar_name} ${_window_number} -20%" +@chat:button1 = "/window ${_window_number}" +@chat:button1-gesture-left = "/window ${_window_number};/buffer -1" +@chat:button1-gesture-left-long = "/window ${_window_number};/buffer 1" +@chat:button1-gesture-right = "/window ${_window_number};/buffer +1" +@chat:button1-gesture-right-long = "/window ${_window_number};/input jump_last_buffer" +@chat:ctrl-wheeldown = "/window scroll_horiz -window ${_window_number} +10%" +@chat:ctrl-wheelup = "/window scroll_horiz -window ${_window_number} -10%" +@chat:wheeldown = "/window scroll_down -window ${_window_number}" +@chat:wheelup = "/window scroll_up -window ${_window_number}" +@*:button3 = "/cursor go ${_x},${_y}" diff --git a/.weechat/xfer.conf b/.weechat/xfer.conf @@ -0,0 +1,39 @@ +# +# xfer.conf -- weechat v1.0.1 +# + +[look] +auto_open_buffer = on +progress_bar_size = 20 +pv_tags = "notify_private" + +[color] +status_aborted = lightred +status_active = lightblue +status_connecting = yellow +status_done = lightgreen +status_failed = lightred +status_waiting = lightcyan +text = default +text_bg = default +text_selected = white + +[network] +blocksize = 65536 +fast_send = on +own_ip = "" +port_range = "" +speed_limit = 0 +timeout = 300 + +[file] +auto_accept_chats = off +auto_accept_files = off +auto_accept_nicks = "" +auto_check_crc32 = off +auto_rename = on +auto_resume = on +convert_spaces = on +download_path = "%h/xfer" +upload_path = "~" +use_nick_in_filename = on diff --git a/.xbindkeysrc b/.xbindkeysrc @@ -0,0 +1,45 @@ +"xbacklight -dec 10" + XF86MonBrightnessDown + +"xbacklight -inc 10" + XF86MonBrightnessUp + +"/home/ad/bin/display-switcher.sh" + XF86LaunchA + +"/home/ad/bin/display-ext.sh" + XF86LaunchB + +"/home/ad/bin/kbd_backlight.sh down" + XF86KbdBrightnessDown + +"/home/ad/bin/kbd_backlight.sh up" + XF86KbdBrightnessUp + +#"mpc prev" +# XF86AudioPrev + +#"mpc toggle" +# XF86AudioPlay + +#"mpc next" +# XF86AudioNext + +#"keyboard-layout-switch.sh" +# Mod1+Mod4 + l + +#"amixer set Master toggle" +# XF86AudioMute + +#"amixer set Master 5%-" +# XF86AudioLowerVolume + +#"amixer set Master 5%+" +# XF86AudioRaiseVolume + +## Mouse Buttons +#"xvkbd -xsendevent -text "\[XF86Back]"" +#m:0x0 + b:11 + +#"xvkbd -xsendevent -text "\[XF86Forward]"" +#m:0x0 + b:10 diff --git a/.xinitrc b/.xinitrc @@ -0,0 +1,135 @@ +#!/bin/sh + +HOSTNAME=`hostname` + +# Disable beeps +xset -b + +# Normal cursor +xsetroot -cursor_name left_ptr & + +# Set background color +#xsetroot -solid '#222222' & +#hsetroot -cover ~/wallpapers/blue-gradient.jpg +#hsetroot -tile ~/wallpapers/solarized-pattern.png +#hsetroot -fill ~/wallpapers/fall.jpg # single screen +$HOME/bin/wallpaper.sh +#if [ "$HOSTNAME" = "iddqd" ] +#then + #hsetroot -fill ~/wallpapers/octahedron-bg-gimp-double.png # dual screen + #hsetroot -fill ~/wallpapers/octahedron-bg-gimp.png # single screen + #hsetroot -fill ~/wallpapers/fall.jpg # single screen +#else + #hsetroot -cover ~/wallpapers/octahedron-bg-gimp.png +#fi + +# Hide mouse on inactivity. unclutter messes up i3lock +#unclutter -grab -noevents -root & + +# Add shadows +#compton & + +# Keyboard layout +#setxkbmap dk +setxkbmap us -option ctrl:nocaps +#setxkbmap us +#setxkbmap dvorak -option ctrl:nocaps + +# Set display color profile +#[ -f ~/doc/colorprofile.icc ] && xcalib ~/doc/colorprofile.icc + +# Load environment variable definitions +[ -f ~/.xprofile ] && . ~/.xprofile + +# X settings +xrdb ~/.Xresources + +# screen powersave +xset +dpms # Energy Star features on +xset dpms 300 600 900 # standby -> suspend -> off (seconds) + +# mouse acceleration (xset m <acceleration> <threshold>) +xset m 3/2 4 +#xset m 2/1 4 + +# Set dim LCD brightness +#xbacklight -set 30 & + +# Load local fonts +xset +fp ~/.fonts +xset +fp /usr/share/fonts/local +xset fp rehash +#fc-cache +#fc-cache -fv + +# Notification deamon +dunst & + +# Bluetooth applet +#blueman-applet & + +#if [ "$HOSTNAME" == "iddqd" ]; then + #gnome-settings-daemon & # handles themes, starts gnome-screensaver. You may have to use gconf to disable it setting the background. +#fi +#nm-applet & # assuming you're using Network Manager +#pidgin & # if you're using pidgin. You can really put any programs here. +#gnome-power-manager & # for laptops and stuff +#gnome-volume-manager & # for mounting CDs, USB sticks, and such +#eval `gnome-keyring-daemon --start --components=secrets` # possible components: gpg,pkcs11,secrets,ssh +eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) +export GPG_AGENT_INFO SSH_AUTH_SOCK +#eval $(ssh-agent) + +# Enable tap-to-click on touchpad +synclient TapButton1=1 TapButton2=2 TapButton3=3 + +# Automatically suspend system after 20 mins of inactivity +#xautolock -time 20 -locker "sudo pm-suspend" & +# Automatically lock the screen after 10 mins of inactivity +#xautolock -time 10 -locker "i3lock -c 1d1f21 && sleep 30; sudo pm-suspend" & +xautolock -time 10 -locker $HOME/bin/xlock & + +# Read .Xmodmap for modified keys +setxkbmap -option ctrl:nocaps +#xmodmap ~/.Xmodmap + +# Read .xbindkeysrc for special key-bindings +xbindkeys + +# cloud clients +#owncloud & +#seafile-applet & + +# Setup two monitors at iddqd +if [ "$HOSTNAME" = "iddqd" ]; then + + xrandr --output DVI-D-0 --primary + xrandr --output DP-1 --auto --left-of DVI-D-0 +fi + +if [ "$HOSTNAME" != "phony" ] +then + #redshift -l 56.09:10.12 & # Aarhus + redshift -l 32.84:-117.26 & # San Diego +fi + +# Start screensaver daemon +#/usr/bin/xscreensaver -no-splash & + +# Typing breaks (optionally add +lock) +xwrits breaktime=5:00 typetime=55:00 +clock +breakclock +mouse & +xset dpms 300 600 900 + +# Automatic display configuration script +nohup bash ~/code/dotfiles/bin/xrandr-auto.sh & + +#if [ "$HOSTNAME" == "flaptop" ]; then + #xrandr --dpi 135 +#fi + +exec i3 +#exec herbstluftwm --locked +#exec gnome-session + +#sxhkd & +#exec bspwm diff --git a/.xpdfrc b/.xpdfrc @@ -0,0 +1,10 @@ +# See `man xpdfrc` for examples + +# vi-like movement +bind h any scrollLeft(16) +bind l any scrollRight(16) +bind k any scrollUp(16) +bind j any scrollDown(16) + + +bind p any toggleOutline diff --git a/.xprofile b/.xprofile @@ -0,0 +1,4 @@ +#!/bin/sh +[ -f $HOME/.locale ] && $HOME/.locale +#export TERMINAL=xterm +export TERMINAL=urxvt diff --git a/.zshrc b/.zshrc @@ -0,0 +1,257 @@ +source ~/code/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh +source ~/code/zsh-git-prompt/zshrc.sh + +if command -v cabal &>/dev/null; then + if command -v stack &>/dev/null; then + GIT_PROMPT_EXECUTABLE='haskell' + fi +fi +ZSH_THEME_GIT_PROMPT_CACHE=true + +ARCH=$(uname) + +autoload -U compinit promptinit colors +compinit +promptinit +colors + +PROMPT=" +%{$fg[red]%} » %{$reset_color%}" +#PROMPT='%B%m%~%b$(git_super_status) %# ' +#PROMPT=' +#%b$(git_super_status) %{$fg[red]%}»%{$reset_color%} ' +RPROMPT='%B%{$fg[cyan]%}%~%{$reset_color%} $(git_super_status) %n@%m' + +setopt AUTO_CD +setopt CORRECT +setopt completealiases +setopt append_history +setopt share_history +setopt hist_verify +setopt hist_ignore_all_dups +export HISTFILE="${HOME}"/.zsh-history +export HISTSIZE=10000 +export SAVEHIST=$HISTSIZE + +zstyle ':completion:*' list-colors ${(s.:.)LS_COLORS} +zstyle ':completion:*' list-colors 'reply=( "=(#b)(*$VAR)(?)*=00=$color[green]=$color[bg-green]" )' +zstyle ':completion:*:*:*:*:hosts' list-colors '=*=30;41' +zstyle ':completion:*:*:*:*:users' list-colors '=*=$color[green]=$color[red]' +zstyle ':completion:*' menu select + +bindkey -v +bindkey '^R' history-incremental-search-backward +bindkey "^j" history-beginning-search-backward +bindkey "^k" history-beginning-search-forward + +if [[ "$ARCH" != 'Darwin' ]]; then + function open() { xdg-open $1 &> /dev/null &disown; } + function say() { echo "$@" | festival --tts; } +fi +function lt() { ls -ltrsa "$@" | tail -n $(( $LINES - 10 )); } +function lT() { ls -ltrsa "$@" | head -n $(( $LINES - 9 )); } +function psgrep() { ps axuf | grep -v grep | grep "$@" -i --color=auto; } +function cgrep() { egrep --color -i "$@|$"; } +function fname() { find . -iname "*$@*"; } +function sayfile() { festival --tts $@; } +function tnew { tmux new-session -As `basename $PWD` } +function w3mtor { torify w3m http://3g2upl4pq6kufc4m.onion/ } +#function weather { curl wttr.in/SanDiego; } +function weather { curl 'wttr.in/?m'; } + +# Start tmux on shell login +#[[ -z "$TMUX" ]] && exec tmux + +# Start emacs daemon if it is not running, then attach client +function e () { + if [ ! $(pgrep emacs --daemon) ]; then + echo starting emacs daemon + emacsdaemonlog=~/.emacs-daemon.log + [ -f ~/.emacs-daemon.log ] && rm $emacsdaemonlog # delete old logfile + emacs --daemon > $emacsdaemonlog 2>&1 + fi + emacsclient -t +} + +alias svim='sudoedit' +#alias e='emacs -nw' +#alias v='vim' +alias v='nvim' +alias f='fg' +alias vi='vim -u NONE' +#alias vi='nvim -u NONE' +alias gs='git status | less' +alias gl='git log --graph --oneline --decorate --all' +alias ga='git add' +alias gd='git diff --' +alias gc='git commit --verbose --gpg-sign' +alias gca='git commit --all --verbose --gpg-sign' +alias gp='git push' +alias gpu='git pull' +alias gcgp='git commit --verbose --gpg-sign && git push' +alias gcagp='git commit --all --verbose --gpg-sign && git push' +alias clear='clear && tmux clear-history' +alias ct='ctags -R .' +alias findgrep='find . | grep -i ' +alias lsgrep='ls -la | grep -in ' +alias fixdisplay='export DISPLAY=:0' + +alias zshreload="source ~/.zshrc" +alias dotfiles-update="cd ~/code/dotfiles && git pull ; zshreload ; cd -" +alias dotfiles-commit="cd ~/code/dotfiles && git commit -a -S -v ; git push ; cd -" + +alias m="make" +alias mc="make clean" +alias me="make edit" + +alias 2048='2048 bluered' + +#alias rm='rm -i' +alias rmi='rm -i' +#alias mv='mv -i' +alias c='xsel -ib' +alias h='history | tail' +alias hg='history | grep ' +alias ch='chmod 755 ' +alias ..='cd ..' +alias ...='cd ../..' +alias ....='cd ../../..' +alias .....='cd ../../../..' +alias ......='cd ../../../../..' +alias ']'='open' +#alias ll='ls -alFh' +alias l='ls -alFh' +alias la='ls -A' +alias lla='ls -lA' +#alias l='ls -CF' +alias ipython-prof='ipython -m cProfile -s time' +alias python-prof='python -m cProfile -s time' +alias pipupgrade='pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs sudo pip install -U' +alias denmark-date='TZ=Europe/Copenhagen date' +function define() { curl --silent dict://dict.org/d:$1 } + +# enable color support of ls and also add handy aliases +if [[ "$ARCH" != 'Darwin' ]]; then + alias ls='ls --color=auto -F' +else + alias ls='ls -G -F' +fi +#alias dir='dir --color=auto' +#alias vdir='vdir --color=auto' +alias grep='grep --color=auto' +alias fgrep='fgrep --color=auto' +alias egrep='egrep --color=auto' + +# use Ctrl-Z as fg +fancy-ctrl-z () { + if [[ $#BUFFER -eq 0 ]]; then + BUFFER="fg" + zle accept-line + else + zle push-input + zle clear-screen + fi +} +zle -N fancy-ctrl-z +bindkey '^Z' fancy-ctrl-z + +set -o noclobber +set -o vi + +# MUTT BG fix +COLORFGBG="default;default" + +pathdirs=( + ~/scripts +) +for dir in $pathdirs; do + if [ -d $dir ]; then + path+=$dir + fi +done + +export EDITOR="vim" +#export XDG_CONFIG_HOME="/home/ad/.config" + +# Environment variables +export PATH=/usr/local/bin:$PATH +export PATH=$HOME/bin:$PATH + +HOSTNAME=$(hostname) +if [[ "$HOSTNAME" == "iddqd" ]]; then + + # OpenFOAM from unofficial Ubuntu repositories + #if [ -f /opt/openfoam222/etc/bashrc ]; then + # . /opt/openfoam222/etc/bashrc + #fi + + # Manual OpenFOAM installation + export FOAM_INST_DIR=$HOME/OpenFOAM + #foamDotFile=$FOAM_INST_DIR/OpenFOAM-2.1.x/etc/bashrc + foamDotFile=$FOAM_INST_DIR/OpenFOAM-2.2.x/etc/bashrc + #[ -f $foamDotFile ] && . $foamDotFile + + # CFDEM vars + export CFDEM_VERSION=PUBLIC + export CFDEM_PROJECT_DIR=$HOME/CFDEM/CFDEMcoupling-$CFDEM_VERSION-$WM_PROJECT_VERSION + export CFDEM_SRC_DIR=$CFDEM_PROJECT_DIR/src + export CFDEM_SOLVER_DIR=$CFDEM_PROJECT_DIR/applications/solvers + export CFDEM_DOC_DIR=$CFDEM_PROJECT_DIR/doc + export CFDEM_UT_DIR=$CFDEM_PROJECT_DIR/applications/utilities + export CFDEM_TUT_DIR=$CFDEM_PROJECT_DIR/tutorials + export CFDEM_PROJECT_USER_DIR=$HOME/CFDEM/$LOGNAME-$CFDEM_VERSION-$WM_PROJECT_VERSION + export CFDEM_bashrc=$CFDEM_SRC_DIR/lagrangian/cfdemParticle/etc/bashrc + export CFDEM_LIGGGHTS_SRC_DIR=$HOME/LIGGGHTS/LIGGGHTS-PUBLIC/src + export CFDEM_LIGGGHTS_MAKEFILE_NAME=fedora_fpic + export CFDEM_LPP_DIR=$HOME/LIGGGHTS/mylpp/src + #export CFDEM_PIZZA_DIR=$HOME/LIGGGHTS/PIZZA/gran_pizza_17Aug10/src + export CFDEM_PIZZA_DIR=$CFDEM_LPP_DIR + #. $CFDEM_bashrc + + alias lpp="python $CFDEM_LPP_DIR/lpp.py" + alias pizza="python $CFDEM_LPP_DIR/pizza.py" + + # PETSc + + +fi + +[ -f $HOME/code/julia/julia ] && export PATH=$HOME/code/julia:$PATH + +[ -f $HOME/.locale ] && $HOME/.locale + +source ~/.tmuxinator/tmuxinator.zsh + +if [ $(echo $HOSTNAME | grep flaptop) ]; then + #source ~/.xsh + #export PATH=~/miniconda3/bin:$PATH + export PATH=/Library/TeX/Distributions/.DefaultTeX/Contents/Programs/texbin:$PATH +fi + +if [ $(echo $HOSTNAME | grep cosmo) ]; then + export PATH=/usr/local/MATLAB/R2015a/bin:$PATH +fi + +# Added by termtile (https://github.com/apaszke/termtile) +alias kl='osascript ~/.termtile/tile.scpt up left' +alias kh='osascript ~/.termtile/tile.scpt up right' +alias jh='osascript ~/.termtile/tile.scpt down left' +alias jl='osascript ~/.termtile/tile.scpt down right' +alias hh='osascript ~/.termtile/tile.scpt left' +alias ll='osascript ~/.termtile/tile.scpt right' +alias kk='osascript ~/.termtile/tile.scpt up' +alias jj='osascript ~/.termtile/tile.scpt down' +alias big='osascript ~/.termtile/resize.scpt ' +alias cen='osascript ~/.termtile/center.scpt ' +alias sha256sum='shasum -a 256' + +# calendar aliases +alias cala="gcalcli agenda" + +#. /Users/ad/torch/install/bin/torch-activate + +[ -f ~/.bash_profile ] && source ~/.bash_profile +[ -d /home/ad/pism ] && export PATH=/home/ad/pism/bin:$PATH +[ -d ~/code/issm/trunk ] && export ISSM_DIR=~/code/issm/trunk + +export GPG_TTY=`tty` diff --git a/README.rst b/README.rst @@ -0,0 +1,10 @@ +dotfiles +======== + +Configuration files for zsh, vim, tmux, X, etc. +Licensed under GPL v. 3. + +After cloning the repository, create symbolic links from the configuration files +of this repository to your home folder using:: + ./install.sh + diff --git a/bar/config.h b/bar/config.h @@ -0,0 +1,44 @@ +/* The height of the bar (in pixels) */ +#define BAR_HEIGHT 14 +/* The width of the bar. Set to -1 to fit screen */ +#define BAR_WIDTH -1 +/* Offset from the left. Set to 0 to have no effect */ +#define BAR_OFFSET 0 +/* Choose between an underline or an overline */ +#define BAR_UNDERLINE 1 +/* The thickness of the underline (in pixels). Set to 0 to disable. */ +#define BAR_UNDERLINE_HEIGHT 2 +/* Default bar position, overwritten by '-b' switch */ +#define BAR_BOTTOM 0 +/* The fonts used for the bar, comma separated. Only the first 2 will be used. */ +/*#define BAR_FONT "-*-terminus-medium-r-normal-*-12-*-*-*-c-*-*-1","fixed"*/ +#define BAR_FONT "-*-uushi-*-*-*-*-*-*-*-*-*-*-*-*","fixed" +/* Some fonts don't set the right width for some chars, pheex it */ +#define BAR_FONT_FALLBACK_WIDTH 6 +/* Define the opacity of the bar (requires a compositor such as compton) */ +#define BAR_OPACITY 1.0 /* 0 is invisible, 1 is opaque */ +/* Color palette */ +/*#define BACKGROUND 0x232c31 +#define COLOR0 0x2d3c46 +#define COLOR1 0xac4142 +#define COLOR2 0x90a959 +#define COLOR3 0xde935f +#define COLOR4 0x6a9fb5 +#define COLOR5 0xaa759f +#define COLOR6 0x75b5aa +#define COLOR7 0x6c7a80 +#define COLOR8 0x425059 +#define COLOR9 0xcc6666 +#define FOREGROUND 0xc5c8c6*/ +#define BACKGROUND 0x181512 /* background */ +#define FOREGROUND 0xd6c3b6 /* foreground */ +#define COLOR0 0x181512 /* background */ +#define COLOR1 0xd6c3b6 /* foreground */ +#define COLOR2 0x332d29 +#define COLOR3 0x8c644c +#define COLOR4 0x746c48 +#define COLOR5 0xbfba92 +#define COLOR6 0x646a6d +#define COLOR7 0x766782 +#define COLOR8 0x4b5c5e +#define COLOR9 0x9a875f diff --git a/bin/battery-linux b/bin/battery-linux @@ -0,0 +1,2 @@ +#!/bin/sh +acpi | sed 's/Battery//; s/0://; s/Discharging//; s/Full, //; s/remaining//; s/ , //; s/Charging, /+/; s/ until charged/ /; s/, / /; s/Unknown //; s/ $//;' diff --git a/bin/battery-osx b/bin/battery-osx @@ -0,0 +1,30 @@ +#!/bin/bash -e +pmset -g batt | head -n 2 | tail -n 1 |\ + awk '{ print $3 $4 $5 }' |\ + sed 's/;/ /g' |\ + sed 's/(no//' |\ + sed 's/ discharging//' |\ + sed 's/ charged//' |\ + sed 's/ 0:00//' |\ + sed 's/ charging/ ☇/' |\ + sed 's/ACattached/☇/' |\ + sed 's/finishingcharge/☇/' |\ + sed 's/ $//' |\ + sed "s/drawingfrom'AC//" |\ + sed "s/from'ACPower'//" |\ + sed 's/failure.*/batt fail/' + +# El Capitan and prior +#pmset -g batt | head -n 2 | tail -n 1 |\ +# awk '{ print $2 $3 $4 }' |\ +# sed 's/;/ /g' |\ +# sed 's/(no//' |\ +# sed 's/ discharging//' |\ +# sed 's/ charged//' |\ +# sed 's/ 0:00//' |\ +# sed 's/ charging/ ☇/' |\ +# sed 's/ACattached/☇/' |\ +# sed 's/finishingcharge/☇/' |\ +# sed 's/ $//' |\ +# sed "s/drawingfrom'AC//" |\ +# sed 's/failure.*/batt fail/' diff --git a/bin/citeparse.sh b/bin/citeparse.sh @@ -0,0 +1,19 @@ +#!/bin/bash +input=$(cat -) # read stdin as a single line +echo $input +echo + +# Work in progress. +# +# This script should: +# - remove the word after year in the keyword +# - capitalize the keyword +# - put double brackets around the title string to preserve case +# - fix author firstnames to be initial(s) with spacing and dot(s) appended + +output=$(echo $input |\ + sed -e 's/[a-z]*,/,/' |\ # Remove word after year in keyword + ) + + +echo $output diff --git a/bin/comet-ssh b/bin/comet-ssh @@ -0,0 +1,4 @@ +#!/bin/sh +pass Uni/xsede-adc-adamsgaard@ucsd.edu -c +echo "Paste password from clipboard." +ssh adc@login.xsede.org -t 'gsissh comet.sdsc.xsede.org' diff --git a/bin/crun b/bin/crun @@ -0,0 +1,39 @@ +#!/bin/bash + +# CRUN compiles C/C++ code to a temporary file, and executes it. +# Author: Anders Damsgaard, andersd@risup.net +# License: GNU Public License, v. 3+ + +# Define compilers and the common compiler flags +CC=gcc +CXX=g++ +CFLAGS="-g -Wall -Wextra " + +fullfilename=$(basename $1) +extension="${fullfilename##*.}" +filename="${fullfilename%.*}" +tmpname=/tmp/$filename + +# Check if the corresponding file is older than the source +# and recompile it if that's the case. +# arg 1: compiler, arg 2: source code file +function compile { + if [ -e $tmpname ]; then + if [[ $2 -nt $tmpname ]]; then + $1 $2 -o $tmpname $CFLAGS $3 $4 $5 $6 $7 $8 $9 + fi + else + $1 $2 -o $tmpname $CFLAGS $3 $4 $5 $6 $7 $8 $9 + fi +} + +# Compile source to file in /tmp +if [ "$extension" == "c" ]; then + compile $CC $1 $2 $3 $4 $5 $6 $7 $8 $9 +fi + +if [ "$extension" == "cpp" ]; then + compile $CXX $1 $2 $3 $4 $5 $6 $7 $8 $9 +fi + +$tmpname diff --git a/bin/currency b/bin/currency @@ -0,0 +1,29 @@ +#!/bin/bash -e + +if [ $# -lt 1 ]; then + echo -e "Usage: $0 [amount] [currency1] [currency2]\n" + echo "If currency1 and currency2 and are not defined they default to USD and DKK, respectively." + echo -e "Currency strings are not case sensitive. The amount defaults to 1.\n" + echo "Example 1: $0 USD GBP" + echo "Example 2: $0 42" + echo "Example 3: $0 GBP EUR 14" + exit 0 +fi + +toUpper() { + echo $@ | tr "[:lower:]" "[:upper:]" +} + +if [ -n "$1" ]; then A=$1; else A=1; fi +if [ -n "$2" ]; then FROM=$(toUpper "$2"); else FROM=USD; fi +if [ -n "$3" ]; then TO=$(toUpper "$3"); else TO=DKK; fi +if [ $TO == $FROM ]; then echo "Nothing to do!"; exit 2; fi + +CONVERTER="http://www.google.com/finance/converter?a=$A&from=$FROM&to=$TO" +#echo $CONVERTER + +RESULT=`wget -nv -O - "$CONVERTER" 2>&1 | \ + LC_ALL=C sed -n -e 's/.*<span class=bld>\(.*\)<\/span>.*/\1/p'` + +#echo "Result: $A $FROM = $RESULT" +echo $RESULT diff --git a/bin/dark.sh b/bin/dark.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrdb ~/.Xdefaults diff --git a/bin/democracy-now-dl b/bin/democracy-now-dl @@ -0,0 +1,54 @@ +#!/bin/bash +#set -e + +# get today's show if nothing else is specified +DATE=$(date +%Y-%m%d) + +function help { + echo "Democracy Now! downloader." + echo "When called without any options, this script downloads today's " + echo "episode of the daily independent news program 'Democracy Now!'." + echo "Please consider donating to the show at http://democracynow.org." + echo "" + echo "Usage: $0 [OPTION]" + echo "" + echo "Options:" + echo " -y Download the episode from yesterday instead of today" + echo " -h Show this help" + echo "" + echo "Author: Anders Damsgaard, andersd@riseup.net" + + exit +} + +while getopts ":yh" opt; do + case $opt in + y) + DATE=$(date -v -1d +%Y-%m%d) + ;; + h) + help + ;; + \?) + echo "Invalid option: -$OPTARG" >&2 + help + ;; + esac +done + + +BASEURL=http://publish.dvlabs.com/democracynow/ipod/dn +SUFFIX=.mp4 +OUTNAME=democracy_now + +echo "Downloading Democracy Now! episode for `date +'%a %b %d, %Y'`" +wget --quiet --output-document="$OUTNAME$SUFFIX" "$BASEURL$DATE$SUFFIX" +if [ $? == 0 ]; then + echo "Saved as $OUTNAME$SUFFIX" +else + rm $OUTNAME$SUFFIX + echo "Error: Download failed." + echo "Try downloading the episode from yesterday by invoking:" + echo " $0 -y" + exit 1 +fi diff --git a/bin/ffmpeg-to-mp4.sh b/bin/ffmpeg-to-mp4.sh @@ -0,0 +1,6 @@ +#!/bin/bash +output=$(echo $1 | sed 's/\..*$/.mp4/') +ffmpeg -i $1 \ + -acodec libfaac -b:a 128k -vcodec mpeg4 -b:v 1200k -flags +aic+mv4 \ + $output +echo $output diff --git a/bin/fsize.sh b/bin/fsize.sh @@ -0,0 +1,6 @@ +#!/bin/bash +#FONT=uushi +#FONT=Terminus +#FONT=lemon +FONT="Monaco for Powerline" +printf '\33]50;%s%d\007' "xft:$FONT:pixelsize=" $1 diff --git a/bin/hardwareinfo.sh b/bin/hardwareinfo.sh @@ -0,0 +1,34 @@ +#!/bin/sh +c="sudo dmidecode -s" + +echo "# bios" +$c bios-vendor +$c bios-version +$c bios-release-date + +echo "# system" +$c system-manufacturer +$c system-product-name +$c system-version +$c system-serial-number +$c system-uuid + +echo "# baseboard" +$c baseboard-manufacturer +$c baseboard-product-name +$c baseboard-version +$c baseboard-serial-number +$c baseboard-asset-tag + +echo "# chassis" +$c chassis-manufacturer +$c chassis-type +$c chassis-version +$c chassis-serial-number +$c chassis-asset-tag + +echo "# processor" +$c processor-family +$c processor-manufacturer +$c processor-version +$c processor-frequency diff --git a/bin/i3status-mpc.sh b/bin/i3status-mpc.sh @@ -0,0 +1,26 @@ +#!/bin/bash +mpdcolor="#81a2be" + +i3status --config ~/.i3/status | (read line && echo $line && read line && echo $line && while : +do + read line + dat="" + if [[ -n $(mpc | grep playing) ]] + then + dat="$(mpc current -f '[%artist%]'): $(mpc current -f '[%title%]')" + fi + newmails=$(find ~/Mail/*/INBOX/new -type f | wc -l) + kbdlayout=$(cat ~/.kbd-layout) + mailcolor="#859900" + if [ "$newmails" -gt 0 ]; then + mailcolor="#cb4b16" + fi + + dat="["\ +"{\"full_text\":\"${dat}\",\"color\":\"${mpdcolor}\"},"\ +"{\"full_text\":\"M: ${newmails}\",\"color\":\"${mailcolor}\"},"\ +"{\"full_text\":\"${kbdlayout}\"}," + + #dat="[{\"name\":\"mpd\",\"full_text\":\"asdf\"}," + echo "${line/[/$dat}" || exit 1 +done) diff --git a/bin/icme1-gpu-modules.sh b/bin/icme1-gpu-modules.sh @@ -0,0 +1,4 @@ +#!/bin/bash -e +module load cuda65/toolkit/6.5.14 +module load python2.7/2.7.9 +module load slurm diff --git a/bin/iddqd-ssh b/bin/iddqd-ssh @@ -0,0 +1,17 @@ +#!/bin/bash + +#if [[ "$(ip addr | grep 10.17.8)" ]]; then +if [[ "$(ifconfig | grep 10.17.8)" ]]; then + echo "On geo lan. Mounting sshfs and connecting directly..." + sshfs-iddqd.sh + #sshfs-iddqd-fix.sh + ssh adc@iddqd.st.client.au.dk -t 'bin/tmux-dev.sh' +#elif [[ "$(ip addr | grep 10.17.2)" ]]; then +# echo "On geo VPN. Mounting sshfs and connecting directly..." + #sshfs-iddqd.sh + #sshfs-iddqd-fix.sh +# ssh adc@iddqd.nfit.au.dk -t 'bin/tmux-dev.sh' +else + echo "Outside geo lan, connecting through fresh-horse..." + ssh adc@fh.cs.au.dk -t 'ssh iddqd.st.client.au.dk -t "bin/tmux-dev.sh"' +fi diff --git a/bin/iddqd-ssh-X.sh b/bin/iddqd-ssh-X.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ssh -X fh.cs.au.dk -t 'ssh -X iddqd.st.client.au.dk' diff --git a/bin/iddqd-ssh-poster.sh b/bin/iddqd-ssh-poster.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +if [[ "$(ifconfig | grep 10.17.8)" ]]; then + echo "On geo lan, connecting directly..." + ssh -X iddqd.st.client.au.dk -t 'tmuxinator poster' +elif [[ "$(ifconfig | grep 10.17.2)" ]]; then + echo "On geo VPN, connecting directly..." + ssh -X iddqd.st.client.au.dk -t 'tmuxinator poster' +else + echo "Outside geo lan, connecting through fresh-horse..." + ssh -X fh.cs.au.dk -t 'ssh -X iddqd.st.client.au.dk -t "tmuxinator poster"' +fi diff --git a/bin/iddqd-ssh-sphere.sh b/bin/iddqd-ssh-sphere.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ssh adc@fh.cs.au.dk -t 'ssh adc@iddqd.st.client.au.dk -t "bin/tmux-dev.sh"' diff --git a/bin/iddqd-ssh-vpn.sh b/bin/iddqd-ssh-vpn.sh @@ -0,0 +1,2 @@ +#!/bin/sh +ssh adc@iddqd.st.client.au.dk diff --git a/bin/idkfa-ssh b/bin/idkfa-ssh @@ -0,0 +1,6 @@ +#!/bin/sh +#ssh ad@172.16.154.22 +#ssh ad@132.239.153.219 +#ssh ad@idkfa.ucsd.edu +tmux rename-window idkfa +mosh ad@idkfa.ucsd.edu diff --git a/bin/idkfa-sshfs b/bin/idkfa-sshfs @@ -0,0 +1,5 @@ +#!/bin/sh +mount=~/idkfa +mkdir -p $mount +#ssh ad@132.239.153.219 +sshfs ad@idkfa.ucsd.edu:/home/ad/ $mount diff --git a/bin/in.txt b/bin/in.txt @@ -0,0 +1,10 @@ +@article{mahadevan2012flow, + title={Flow-induced channelization in a porous medium}, + author={Mahadevan, Amala and Orpe, AV and Kudrolli, A and Mahadevan, L}, + journal={EPL (Europhysics Letters)}, + volume={98}, + number={5}, + pages={58003}, + year={2012}, + publisher={IOP Publishing} +}+ \ No newline at end of file diff --git a/bin/install_bspwm.sh b/bin/install_bspwm.sh @@ -0,0 +1,46 @@ +#!/bin/sh + +# Using the guide from +# https://github.com/windelicato/dotfiles/wiki/bspwm-for-dummies + +# Debian dependencies +sudo apt-get install xcb libxcb-util0-dev libxcb-ewmh-dev libxcb-randr0-dev \ + libxcb-icccm4-dev libxcb-keysyms1-dev libxcb-xinerama0-dev xfonts-terminus \ + hsetroot compton unclutter zathura conky + +# Fonts: search for artwiz-aleczapka fonts, download from sourceforce. +# Extract fonts to /home/adc/.fonts +# Run `sudo rm /etc/fonts/conf.d/70-no-bitmaps.conf +# Clear the font cache: +# sudo fc-cache -f -v +# fc-cache -f -v + +# Core folder +FOLDER=~/code + +cd $FOLDER && \ +git clone git@github.com:baskerville/bspwm.git && \ +cd bspwm && make && sudo make install + +cd $FOLDER && \ +git clone git@github.com:baskerville/sxhkd.git && \ +cd sxhkd && make && sudo make install + +# Panel +cd $FOLDER && \ +git clone git@github.com:baskerville/sutils.git && \ +cd sutils && make && sudo make install + +cd $FOLDER && \ +git clone git@github.com:baskerville/xtitle.git && \ +cd xtitle && make && sudo make install + +cd $FOLDER && \ +git clone git@github.com:LemonBoy/bar.git && \ +cp ~/code/dotfiles/bar/config.h $FOLDER/bar/ && +cd bar && make && sudo make install + +# Panel configuration +# Execute the following as root: +# echo 'export PANEL_FIFO="/tmp/panel-fifo"' >> /etc/profile +# echo 'export PANEL_FIFO="/tmp/panel-fifo"' >> /etc/zsh/zprofile diff --git a/bin/irc.sh b/bin/irc.sh @@ -0,0 +1,23 @@ +#!/bin/bash + +#USER=ircuser +#USER=adc +USER=ad +#HOST=susanoganders.dk +HOST=adamsgaard.dk +#PORT=12344 +PORT=22 +#POSTCMD=\'bin/tmux-irc.sh\' +POSTCMD= + +UNAMESTR=`uname` +if [[ "$UNAMESTR" == 'Linux' ]]; then + autossh -t -p $PORT $USER@$HOST $POSTCMD +elif [[ "$UNAMESTR" == 'Darwin' ]]; then + #ssh -t -p $PORT $USER@$HOST $POSTCMD + mosh $USER@$HOST $POSTCMD +else + echo "Platform not supported" + exit 1 +fi + diff --git a/bin/kbd_backlight.sh b/bin/kbd_backlight.sh @@ -0,0 +1,38 @@ +#!/bin/bash + +# Define the increment between adjustments +#INC=5 + +# Define the brightness increment factor between adjustments +INC=3 + +# The folder containing keyboard backlight files +CTRLDIR=/sys/class/leds/smc::kbd_backlight + +# The current brightness file +CTRLF=$CTRLDIR/brightness + +# The current brightness value +V=`cat $CTRLF` + +# The max. brightness value +MAXV=`cat $CTRLDIR/max_brightness` +MINV=0 + +if [[ "$1" == "up" ]]; then + #NEWV=$((V+INC)) + NEWV=$(((2+V)*INC)) + if (( "$NEWV" <= "$MAXV" )); then + echo $NEWV > $CTRLF + else + echo $MAXV > $CTRLF + fi +elif [[ "$1" == "down" ]]; then + #NEWV=$((V-INC)) + NEWV=$((V/INC-2)) + if (( "$NEWV" >= "$MINV" )); then + echo $NEWV > $CTRLF + else + echo $MINV > $CTRLF + fi +fi diff --git a/bin/keyboard-layout-switch.sh b/bin/keyboard-layout-switch.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +# the language is written to ./.kbd-layout +LAYOUTFILE="$HOME/.kbd-layout" + +# define two languages +LANG1="us" +LANG2="dk" + +# make the caps lock key a ctrl key +#OPTS="-option ctrl:nocaps,altwin:swap_lalt_lwin" +OPTS="-option ctrl:nocaps" + +# write the file if it doesn't exist +if [ ! -f $LAYOUTFILE ]; then + echo 'echo "us" > $LAYOUTFILE' + echo "us" > $LAYOUTFILE + setxkbmap $LANG1 $OPTS + xmodmap ~/.Xmodmap + notify-send $LANG1 + exit +fi + +# read the language file, and switch to the other language +CURRLANG="`cat $LAYOUTFILE`" + +if [ "$CURRLANG" == "$LANG1" ]; then + echo $LANG2 > $LAYOUTFILE + setxkbmap $LANG2 $OPTS + notify-send $LANG2 + xmodmap ~/.Xmodmap +else + echo $LANG1 > $LAYOUTFILE + setxkbmap $LANG1 $OPTS + notify-send $LANG1 + xmodmap ~/.Xmodmap +fi diff --git a/bin/light.sh b/bin/light.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrdb ~/.Xdefaults-light diff --git a/bin/mailcheck.sh b/bin/mailcheck.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash + +# add to crontab with: +# */3 * * * * ~/bin/mailcheck.sh + +# Check every ten seconds if the process identified as $1 is still running. +# After 5 checks (~60 seconds), kill it. Return non-zero to +# indicate something was killed. +monitor() { + local pid=$1 i=0 + + while ps $pid &>/dev/null; do + if (( i++ > 5 )); then + echo "Max checks reached. Sending SIGKILL to + ${pid}..." >&2 + kill -9 $pid; return 1 + fi + + sleep 10 + done + + return 0 +} + +read -r pid < ~/.offlineimap/pid + +if ps $pid &>/dev/null; then + echo "Process $pid already + running. Exiting..." >&2 + exit 1 +fi + +# count new mail for every maildir +maildirnew="$HOME/Mail/*/INBOX/new/" +new="$(find $maildirnew -type f | wc -l | sed 's/ //g')" +mailboxes="$(find $maildirnew -type f | sed 's/.*Mail\///' | sed 's/\/INBOX.*//')" +if [ $new -gt 0 ]; then + + UNAMESTR=`uname` + announcement="New mail: $new\nIn $mailboxes" + if [[ "$UNAMESTR" == 'Darwin' ]]; then + osascript -e "display notification \"$announcement\" with title \"offlineimap\"" + + # Linux + elif [[ "$UNAMESTR" == 'Linux' ]]; then + export DISPLAY=:0; export XAUTHORITY=~/.Xauthority + notify-send "$announcement" + fi +fi + + + +#/usr/local/bin/offlineimap -o -u quiet & monitor $! + +# sync INBOXes only +/usr/local/bin/offlineimap -qf INBOX -o -u quiet & monitor $! diff --git a/bin/mount-usb.sh b/bin/mount-usb.sh @@ -0,0 +1,2 @@ +#!/bin/sh +sudo mount /dev/sdb1 /media/usb && echo 'mounted in /media/usb. Umount with umount-usb.sh' diff --git a/bin/notmuch-mutt b/bin/notmuch-mutt @@ -0,0 +1,292 @@ +#!/usr/bin/env perl +# +# notmuch-mutt - notmuch (of a) helper for Mutt +# +# Copyright: © 2011-2015 Stefano Zacchiroli <zack@upsilon.cc> +# License: GNU General Public License (GPL), version 3 or above +# +# See the bottom of this file for more documentation. +# A manpage can be obtained by running "pod2man notmuch-mutt > notmuch-mutt.1" + +use strict; +use warnings; + +use File::Path; +use Getopt::Long qw(:config no_getopt_compat); +use Mail::Header; +use Mail::Box::Maildir; +use Pod::Usage; +use String::ShellQuote; +use Term::ReadLine; +use Digest::SHA; + + +my $xdg_cache_dir = "$ENV{HOME}/.cache"; +$xdg_cache_dir = $ENV{XDG_CACHE_HOME} if $ENV{XDG_CACHE_HOME}; +my $cache_dir = "$xdg_cache_dir/notmuch/mutt"; + + +# create an empty maildir (if missing) or empty an existing maildir" +sub empty_maildir($) { + my ($maildir) = (@_); + rmtree($maildir) if (-d $maildir); + my $folder = new Mail::Box::Maildir(folder => $maildir, + create => 1); + $folder->close(); +} + +# search($maildir, $remove_dups, $query) +# search mails according to $query with notmuch; store results in $maildir +sub search($$$) { + my ($maildir, $remove_dups, $query) = @_; + my $dup_option = ""; + + $query = shell_quote($query); + + if ($remove_dups) { + $dup_option = "--duplicate=1"; + } + + empty_maildir($maildir); + #system("notmuch search --output=files $dup_option $query" + #. " | sed -e 's: :\\\\ :g'" + #. " | xargs -r -I searchoutput ln -s searchoutput $maildir/cur/"); + system("notmuch search --output=files $dup_option $query" + . " | sed -e 's: :\\\\ :g'" + . " | xargs -I searchoutput ln -s searchoutput $maildir/cur/"); +} + +sub prompt($$) { + my ($text, $default) = @_; + my $query = ""; + my $term = Term::ReadLine->new( "notmuch-mutt" ); + my $histfile = "$cache_dir/history"; + + $term->ornaments( 0 ); + $term->unbind_key( ord( "\t" ) ); + $term->MinLine( 3 ); + $histfile = $ENV{MUTT_NOTMUCH_HISTFILE} if $ENV{MUTT_NOTMUCH_HISTFILE}; + $term->ReadHistory($histfile) if (-r $histfile); + while (1) { + chomp($query = $term->readline($text, $default)); + if ($query eq "?") { + system("man", "notmuch-search-terms"); + } else { + $term->WriteHistory($histfile); + return $query; + } + } +} + +sub get_message_id() { + my $mid = undef; + my @headers = (); + + while (<STDIN>) { # collect header lines in @headers + push(@headers, $_); + last if $_ =~ /^$/; + } + my $head = Mail::Header->new(\@headers); + $mid = $head->get("message-id") or undef; + + if ($mid) { # Message-ID header found + $mid =~ /^<(.*)>$/; # extract message id + $mid = $1; + } else { # Message-ID header not found, synthesize a message id + # based on SHA1, as notmuch would do. See: + # https://git.notmuchmail.org/git/notmuch/blob/HEAD:/lib/sha1.c + my $sha = Digest::SHA->new(1); + $sha->add($_) foreach(@headers); + $sha->addfile(\*STDIN); + $mid = 'notmuch-sha1-' . $sha->hexdigest; + } + + return $mid; +} + +sub search_action($$$@) { + my ($interactive, $results_dir, $remove_dups, @params) = @_; + + if (! $interactive) { + search($results_dir, $remove_dups, join(' ', @params)); + } else { + my $query = prompt("search ('?' for man): ", join(' ', @params)); + if ($query ne "") { + search($results_dir, $remove_dups, $query); + } + } +} + +sub thread_action($$@) { + my ($results_dir, $remove_dups, @params) = @_; + + my $mid = get_message_id(); + if (! defined $mid) { + empty_maildir($results_dir); + die "notmuch-mutt: cannot find Message-Id, abort.\n"; + } + my $search_cmd = 'notmuch search --output=threads ' . shell_quote("id:$mid"); + my $tid = `$search_cmd`; # get thread id + chomp($tid); + + search($results_dir, $remove_dups, $tid); +} + +sub tag_action(@) { + my $mid = get_message_id(); + defined $mid or die "notmuch-mutt: cannot find Message-Id, abort.\n"; + + system("notmuch", "tag", @_, "--", "id:$mid"); +} + +sub die_usage() { + my %podflags = ( "verbose" => 1, + "exitval" => 2 ); + pod2usage(%podflags); +} + +sub main() { + mkpath($cache_dir) unless (-d $cache_dir); + + my $results_dir = "$cache_dir/results"; + my $interactive = 0; + my $help_needed = 0; + my $remove_dups = 0; + + my $getopt = GetOptions( + "h|help" => \$help_needed, + "o|output-dir=s" => \$results_dir, + "p|prompt" => \$interactive, + "r|remove-dups" => \$remove_dups); + if (! $getopt || $#ARGV < 0) { die_usage() }; + my ($action, @params) = ($ARGV[0], @ARGV[1..$#ARGV]); + + foreach my $param (@params) { + $param =~ s/folder:=/folder:/g; + } + + if ($help_needed) { + die_usage(); + } elsif ($action eq "search" && $#ARGV == 0 && ! $interactive) { + print STDERR "Error: no search term provided\n\n"; + die_usage(); + } elsif ($action eq "search") { + search_action($interactive, $results_dir, $remove_dups, @params); + } elsif ($action eq "thread") { + thread_action($results_dir, $remove_dups, @params); + } elsif ($action eq "tag") { + tag_action(@params); + } else { + die_usage(); + } +} + +main(); + +__END__ + +=head1 NAME + +notmuch-mutt - notmuch (of a) helper for Mutt + +=head1 SYNOPSIS + +=over + +=item B<notmuch-mutt> [I<OPTION>]... search [I<SEARCH-TERM>]... + +=item B<notmuch-mutt> [I<OPTION>]... thread < I<MAIL> + +=item B<notmuch-mutt> [I<OPTION>]... tag [I<TAGS>]... < I<MAIL> + +=back + +=head1 DESCRIPTION + +notmuch-mutt is a frontend to the notmuch mail indexer capable of populating +a maildir with search results. + +=head1 OPTIONS + +=over 4 + +=item -o DIR + +=item --output-dir DIR + +Store search results as (symlink) messages under maildir DIR. Beware: DIR will +be overwritten. (Default: F<~/.cache/notmuch/mutt/results/>) + +=item -p + +=item --prompt + +Instead of using command line search terms, prompt the user for them (only for +"search"). + +=item -r + +=item --remove-dups + +Remove emails with duplicate message-ids from search results. (Passes +--duplicate=1 to notmuch search command.) Note this can hide search +results if an email accidentally or maliciously uses the same message-id +as a different email. + +=item -h + +=item --help + +Show usage information and exit. + +=back + +=head1 INTEGRATION WITH MUTT + +notmuch-mutt can be used to integrate notmuch with the Mutt mail user agent +(unsurprisingly, given the name). To that end, you should define macros like +the following in your Mutt configuration (usually one of: F<~/.muttrc>, +F</etc/Muttrc>, or a configuration snippet under F</etc/Muttrc.d/>): + + macro index <F8> \ + "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\ + <shell-escape>notmuch-mutt -r --prompt search<enter>\ + <change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>\ + <enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" \ + "notmuch: search mail" + + macro index <F9> \ + "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\ + <pipe-message>notmuch-mutt -r thread<enter>\ + <change-folder-readonly>`echo ${XDG_CACHE_HOME:-$HOME/.cache}/notmuch/mutt/results`<enter>\ + <enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" \ + "notmuch: reconstruct thread" + + macro index <F6> \ + "<enter-command>set my_old_pipe_decode=\$pipe_decode my_old_wait_key=\$wait_key nopipe_decode nowait_key<enter>\ + <pipe-message>notmuch-mutt tag -- -inbox<enter>\ + <enter-command>set pipe_decode=\$my_old_pipe_decode wait_key=\$my_old_wait_key<enter>" \ + "notmuch: remove message from inbox" + +The first macro (activated by <F8>) prompts the user for notmuch search terms +and then jump to a temporary maildir showing search results. The second macro +(activated by <F9>) reconstructs the thread corresponding to the current mail +and show it as search results. The third macro (activated by <F6>) removes the +tag C<inbox> from the current message; by changing C<-inbox> this macro may be +customised to add or remove tags appropriate to the users notmuch work-flow. + +To keep notmuch index current you should then periodically run C<notmuch +new>. Depending on your local mail setup, you might want to do that via cron, +as a hook triggered by mail retrieval, etc. + +=head1 SEE ALSO + +mutt(1), notmuch(1) + +=head1 AUTHOR + +Copyright: (C) 2011-2012 Stefano Zacchiroli <zack@upsilon.cc> + +License: GNU General Public License (GPL), version 3 or higher + +=cut diff --git a/bin/photo-drive-sync.sh b/bin/photo-drive-sync.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +diskA=/Volumes/ANDERS +diskB=/Volumes/SUSAN +#diskC=/Volumes/misc + +echo "Copying from local drive to first external drive ($diskA)" + +# Lightroom +echo "Copying Lightroom files to first external drive ($diskA)" +rsync -rav --progress ~/Pictures/Lightroom $diskA/Anders\ flaptop/ +rsync -rav --progress ~/iCloud/Lightroom-exports $diskA/Anders\ flaptop/ + +# Capture One +echo "Copying Capture One files to first external drive ($diskA)" +rsync -rav --progress ~/Pictures/Capture\ One\ Catalog.cocatalog $diskA/Anders\ flaptop/ +rsync -rav --progress ~/Pictures/CaptureOne\ exports $diskA/Anders\ flaptop/ + +# Photos.app +echo "Copying Photos.app files to first external drive ($diskA)" +rsync -rav --progress ~/Pictures/Photos\ Library.photoslibrary $diskA/Anders\ flaptop/ +rsync -rav --progress ~/Pictures/Photos\ exports $diskA/Anders\ flaptop/ + +if [ -d $diskB ]; then + echo "Mirroring external drives ($diskA -> $diskB)" + rsync -rav --delete --exclude="/.*" --progress $diskA/ $diskB +fi + +read -p "Unmount external drive $diskA? [y/N] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + diskutil eject $diskA +fi + +if [ -d $diskB ]; then + read -p "Unmount external drive $diskB? [y/N] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + diskutil eject $diskB + fi +fi + +#if [ -d $diskC ]; then +# read -p "Unmount external drive $diskC? [y/N] " -n 1 -r +# echo +# if [[ $REPLY =~ ^[Yy]$ ]]; then +# diskutil eject $diskC +# fi +#fi diff --git a/bin/sastrugi-ssh b/bin/sastrugi-ssh @@ -0,0 +1,3 @@ +#!/bin/sh +#ssh adamsgaard@137.110.73.38 +ssh adamsgaard@sastrugi.ucsd.edu diff --git a/bin/scale.sh b/bin/scale.sh @@ -0,0 +1,13 @@ +#!/bin/bash +if [[ "$1" == "-h" || "$1" == "--help" ]]; then + echo "Scale image sizes using Imagemagick's convert command." + echo "Usage: $0 <PERCENTAGE>% <FILE[S]>" + exit 0 +fi + +for f in "$@"; do + if [[ "$f" != *% ]]; then + echo $f + convert $f -resize $1 scaled-$f + fi +done diff --git a/bin/solarized-dark.sh b/bin/solarized-dark.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrdb -merge $HOME/.colors/solarized diff --git a/bin/solarized-light.sh b/bin/solarized-light.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrdb -merge $HOME/.colors/solarized_light diff --git a/bin/sync-music-idkfa.sh b/bin/sync-music-idkfa.sh @@ -0,0 +1,8 @@ +#!/bin/bash +host=ad@idkfa.ucsd.edu:/home/ad/music/ + +echo "syncing new music from $host" +rsync -rav --progress -e "ssh" $host /Users/ad/Music/iTunes/Music/ + +echo "syncing new music to $host" +rsync -rav --progress -e "ssh" /Users/ad/Music/iTunes/Music/ $host diff --git a/bin/tmux-utility.sh b/bin/tmux-utility.sh @@ -0,0 +1,42 @@ +#!/bin/sh +SESSION=utility +echo "starting $SESSION tmux session" + +tmux has-session -t $SESSION +if [ $? != 0 ] +then + # Create new session, name it, name the window, detach + tmux new-session -s $SESSION -n misc -d + + tmux send-keys -t $SESSION 'echo $PWD' C-m + tmux send-keys -t $SESSION 'mutt' C-m + + tmux split-window -h -t $SESSION + tmux send-keys -t $SESSION 'fortune' C-m + + tmux select-pane -t $SESSION:1.1 + tmux split-window -v -t $SESSION + tmux send-keys -t $SESSION 'vimpc' C-m + + tmux select-pane -t $SESSION:1.3 + tmux split-window -v -t $SESSION + tmux send-keys -t $SESSION 'mosh ad@idkfa.ucsd.edu' C-m + + #tmux select-layout tiled + tmux select-pane -t $SESSION:1.1 + + #tmux send-keys -t $SESSION 'irc.sh' C-m # process in first pane + #tmux split-window -h -p 65 -t $SESSION # horizontal split + #tmux split-window -v -p 10 -t $SESSION # bottom right + #tmux send-keys -t $SESSION 'htop' C-m + #tmux select-pane -t $SESSION:1.1 # select first pane + #tmux split-window -v -p 60 -t $SESSION # create a pane below first pane + #tmux split-window -v -p 56 -t $SESSION # create a pane below first pane + #tmux send-keys -t $SESSION 'htop' C-m # process in third pane + #tmux split-window -v -p 75 -t $SESSION # create a pane below second pane + #tmux send-keys -t $SESSION 'irc.sh' C-m # process in fourth pane + #tmux send-keys -t $SESSION 'ncmpcpp' C-m # process in fourth pane + #tmux send-keys -t $SESSION 'mpd; vimpc' C-m # process in fourth pane + #tmux select-pane -t $SESSION:1.1 # select first pane +fi +tmux attach -t $SESSION diff --git a/bin/todo.sh b/bin/todo.sh @@ -0,0 +1,8 @@ +#!/bin/sh + +# Edit central todo-file by ssh +#ssh -t -p 12344 adc@susanoganders.dk 'screen -rd todo' + +# Edit local todo-file +#vim ~/doc/todo.md +vim ~/iawriter/todo.md diff --git a/bin/tor-browser-update.sh b/bin/tor-browser-update.sh @@ -0,0 +1,88 @@ +#!/bin/bash + +# stop on error +set -e + +# Gets latest Tor Browser Bundle (TBB) stable version for Linux x86_64, +# downloads it, verifies it, and extracts it. +# The scripts downloads the files using "torify", if available. + +# To import the signing key to Debian run: +# $ gpg --keyserver keys.gnupg.net --recv 886DDD89 +# $ gpg --export A3C4F0F979CAA22CDBA8F512EE8CBC9E886DDD89 | sudo apt-key add - +# $ sudo apt-get update +# $ sudo apt-get install deb.torproject.org-keyring + +# Folder where to download and extract the archives +TORFOLDER=~/tor + +# Remote folder containing the TBB archives +UNAMESTR=`uname` +if [[ "$UNAMESTR" == 'Linux' ]]; then + DIR="https://www.torproject.org/dist/torbrowser/4.0/" +elif [[ "$UNAMESTR" == 'Darwin' ]]; then + DIR="https://www.torproject.org/dist/torbrowser/osx/" +else + echo "Platform not supported" + exit 1 +fi + +# Check if torify is installed +GETCMD="wget --no-verbose" +if command -v torify 2>/dev/null; then + TORIFY="yes" + DOWNLOADCMD="torify $GETCMD" +else + DOWNLOADCMD=$GETCMD +fi + +# Find latest TBB version +echo "Determining latest Tor Browser Bundle stable version" +TMPFILENAME=/tmp/tordownloadpage.html +$DOWNLOADCMD https://www.torproject.org/projects/torbrowser.html.en#downloads -O $TMPFILENAME && \ +LATESTTBB=`grep '_en-US.tar.xz">64-bit' $TMPFILENAME | head -n 1 | sed 's/.*tor-browser/tor-browser/' | sed 's/tar.xz.*/tar.xz/'` && \ +echo "Latest Tor Browser Bundle stable version is $LATESTTBB" +#rm $TMPFILENAME + +# Check if the TBB version is already downloaded +if [ -e "$TORFOLDER/$LATESTTBB" ]; then + echo "The installed TBB version is up to date." + exit +fi + +# Download compressed file and signature, and verify +mkdir -p $TORFOLDER +cd $TORFOLDER &&\ +echo "Attempting to download Tor Browser Bundle and signature" +TARGET=$DIR$LATESTTBB.asc +echo $TARGET +$DOWNLOADCMD $TARGET &&\ +if [[ -z "$TORIFY" ]]; then + $GETCMD $TARGET -O $TARGET.notor +fi +TARGET=$DIR$LATESTTBB +echo $TARGET +$DOWNLOADCMD $TARGET &&\ +gpg --verify $LATESTTBB{.asc,} &&\ +if [[ -z "$TORIFY" ]]; then + gpg --verify $LATESTTBB{.asc.notor,} +fi + +# Save the Tor data directory, if it exists +BACKUPDATA=0 +DATAFOLDER=$TORFOLDER/tor-browser_en-US/Data/Tor +if [ -e $DATAFOLDER ]; then + rm -r $TORFOLDER/Tor + cp -r $DATAFOLDER $TORFOLDER + BACKUPDATA=1 +fi + +# Unpack the TBB +tar -xJf $LATESTTBB &&\ +echo "Installation complete. Start with $TORFOLDER/tor-browser_en-US/start-tor-browser" + +# Copy the old Data folder to the new TBB +if [ $BACKUPDATA == 1 ]; then + cp $TORFOLDER/Tor/* $DATAFOLDER +fi +cd - diff --git a/bin/tor-browser.sh b/bin/tor-browser.sh @@ -0,0 +1,2 @@ +#!/bin/sh +cd ~/tor/tor-browser_en-US && ./start-tor-browser.desktop diff --git a/bin/umount-usb.sh b/bin/umount-usb.sh @@ -0,0 +1,2 @@ +#!/bin/sh +sudo umount /media/usb && echo "/media/usb unmounted" diff --git a/bin/uu b/bin/uu @@ -0,0 +1,53 @@ +#!/bin/bash +set -e +UNAMESTR=`uname` + +if [[ "$UNAMESTR" == 'Darwin' ]]; then + echo "## OSX-specific packages" + read -p "Do you want to force a neovim upgrade? [y/N] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + brew reinstall --HEAD neovim + fi + + #read -p "Do you want to update KWM? [y/N] " -n 1 -r + #echo + #if [[ $REPLY =~ ^[Yy]$ ]]; then + #echo "Updating kwm" + #cd ~/code/kwm && git pull && make ; cd - + #fi +fi + +echo "## Updating package manager lists and installed packages" +if [[ "$UNAMESTR" == 'Linux' ]]; then + sudo apt-get update && \ + sudo apt-get upgrade && \ + sudo apt-get dist-upgrade && \ + sudo apt-get autoremove && \ + sudo apt-get clean +elif [[ "$UNAMESTR" == 'Darwin' ]]; then + echo "Fetching updates..." + brew analytics off + brew update && \ + brew upgrade && \ + brew cleanup + #conda update --all +else + echo "Platform not supported" + exit 1 +fi + +echo "## Updating dotfiles" +cd ~/code/dotfiles && \ + git pull; cd - + +#echo "## Updating spacemacs" +##git pull --rebase && \ +#cd ~/.emacs.d && \ +#git pull && \ +#git submodule sync; git submodule update + +echo "## Updating pip" +pip install --upgrade pip +echo "## Updating pip packages" +pip freeze --local | grep -v '^\-e' | cut -d = -f 1 | xargs pip install -U diff --git a/bin/wallpaper.sh b/bin/wallpaper.sh @@ -0,0 +1,5 @@ +#!/bin/sh +#hsetroot -fill ~/wallpapers/fall.jpg # single screen +#hsetroot -full ~/wallpapers/hackingtheloop_1920.jpg # single screen +#hsetroot -fill ~/wallpapers/polygon-art-17498.jpg +hsetroot -fill ~/photos/wallpapers/current_wallpapers/overdeepenings-Edit-Edit.jpg diff --git a/bin/xlock b/bin/xlock @@ -0,0 +1,6 @@ +#!/bin/bash +mpc stop +img=/tmp/screenshot.png +scrot $img +convert $img -blur 0x5 $img +i3lock -i $img diff --git a/bin/xrandr-auto.sh b/bin/xrandr-auto.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +LAPTOPSCR=eDP1 +EXTSCR=DP1 +#PROJECTOR= + +# default monitor is LVDS1 +MONITOR=$LAPTOPSCR + +# functions to switch from LVDS1 to VGA and vice versa +function ActivateEXT { + #echo "Switching to EXTSCR" + xrandr --output $EXTSCR --auto --output $LAPTOPSCR --off + ~/bin/wallpaper.sh + MONITOR=$EXTSCR + #notify-send "Activating $EXTSCR" +} +function DeactivateEXT { + #echo "Switching to $LAPTOPSCR" + #xrandr --output $EXTSCR --off --output $LAPTOPSCR --auto + xrandr --auto + ~/bin/wallpaper.sh + MONITOR=$LAPTOPSCR + #notify-send "Activating $LAPTOPSCR" +} + +# functions to check if EXT is connected and in use +function EXTActive { + [ $MONITOR = "$EXTSCR" ] +} +function EXTConnected { + ! xrandr | grep "^$EXTSCR" | grep disconnected +} + +#while true +#do +if ! EXTActive && EXTConnected +then + ActivateEXT +fi + +if EXTActive && ! EXTConnected +then + DeactivateEXT +fi + +#sleep 5s +#done diff --git a/bin/youtube-dl-music-playlist.sh b/bin/youtube-dl-music-playlist.sh @@ -0,0 +1,78 @@ +#!/bin/bash +set -e +set -u + +read -p "torify? [Y/n] " -n 1 -r +echo +if [[ $REPLY =~ ^[Nn]$ ]]; then + prefix="" +else + prefix="torify" +fi + +outputdir=$TMPDIR/ytdl-playlist +mkdir -p $outputdir +cd $outputdir + +$prefix youtube-dl \ + --format bestaudio \ + --extract-audio \ + --audio-quality 0 \ + --audio-format mp3 \ + $1 + +read -p "add metadata? [y/N] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + + artist="Unknown Artist" + album="Unknown Album" + track=1 + + # Loop over files with spaces + SAVEIFS=$IFS + IFS=$(echo -en "\n\b") + for f in *.mp3; do + + echo "$f" + + read -p "artist [$artist]: " input + artist="${input:-$artist}" + + read -p "album [$album]: " input + album="${input:-$album}" + + read -p "song: " song + + read -p "track [$track]: " input + track="${input:-$track}" + + id3v2 --artist "$artist" --album "$album" \ + --song "$song" --track "$track" \ + "$f" + (( track += 1 )) + done + # Revert default behavior + IFS=$SAVEIFS + + read -p "move to music folder? [y/N] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + + if [[ "$(uname)" == 'Darwin' ]]; then + musicroot="$HOME/Music/iTunes/iTunes Media/Music/" + else + musicroot="$HOME/music/" + fi + + outdir="$musicroot/$artist/$album" + mkdir -p "$outdir" + mv *.mp3 "$outdir" + + echo "updating mpd" + mpc update > /dev/null + + rmdir $outputdir + cd - + fi +fi diff --git a/bin/youtube-dl-music.sh b/bin/youtube-dl-music.sh @@ -0,0 +1,58 @@ +#!/bin/bash +set -e +set -u + +read -p "torify? [Y/n] " -n 1 -r +echo +if [[ $REPLY =~ ^[Nn]$ ]]; then + prefix="" +else + prefix="torify" +fi + +$prefix youtube-dl \ + --format bestaudio \ + --extract-audio \ + --audio-quality 0 \ + --audio-format mp3 \ + $1 + +read -p "add metadata? [y/N] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + + filename=$(youtube-dl \ + --get-filename \ + --format bestaudio \ + --extract-audio \ + --audio-quality 0 \ + --audio-format mp3 \ + $1) + filename=$(echo $filename | sed "s/\..*$/.mp3/") + + read -p "artist: " artist + read -p "album: " album + read -p "song: " song + read -p "track [e.g. 01]: " track + + id3v2 --artist "$artist" --album "$album" --song "$song" --track "$track" \ + "$filename" + + read -p "move to music folder? [y/N] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + + if [[ "$(uname)" == 'Darwin' ]]; then + musicroot="$HOME/Music/iTunes/iTunes Media/Music/" + else + musicroot="$HOME/music/" + fi + + outdir="$musicroot/$artist/$album" + mkdir -p "$outdir" + mv "$filename" "$outdir/$song.mp3" + + echo "updating mpd" + mpc update > /dev/null + fi +fi diff --git a/bin/zzz b/bin/zzz @@ -0,0 +1,18 @@ +#!/bin/bash + +# Screen locking and power suspending script. +# The laptop should be locked and suspended, while the desktop should only be +# locked. + +HOSTNAME=`hostname` + +#if [[ "$HOSTNAME" == 'flaptop' ]]; then + #killall ssh +#fi +mpc stop +#i3lock -c 1d1f21 +$HOME/bin/xlock + +if [[ "$HOSTNAME" == 'flaptop' ]]; then + sudo pm-suspend-hybrid +fi diff --git a/bitbar-plugins/batt.10s.sh b/bitbar-plugins/batt.10s.sh @@ -0,0 +1,6 @@ +#!/bin/bash +#color="#81a2be" +color="#126c8c" +echo "$(bash ~/bin/battery-osx) | color=${color}" +echo "---" +pmset -g batt diff --git a/bitbar-plugins/calendar.30s.sh b/bitbar-plugins/calendar.30s.sh @@ -0,0 +1,2 @@ +#!/bin/bash +echo "$(date +'%Y-%m-%d') | color=#666666" diff --git a/bitbar-plugins/clock.5s.sh b/bitbar-plugins/clock.5s.sh @@ -0,0 +1,2 @@ +#!/bin/bash +date +'%H:%M:%S' diff --git a/bitbar-plugins/kwm.2s.sh b/bitbar-plugins/kwm.2s.sh @@ -0,0 +1,77 @@ +#!/bin/bash + +color="#f0c674" + +#kwmc=$HOME/code/kwm/bin/kwmc +kwmc=/usr/local/bin/kwmc + +currentFocus=$($kwmc query focus) +currentMouse=$($kwmc query mouse-follows) +tag=$($kwmc query tag) + +if [ "$1" = 'quit' ]; then + killall kwm + exit +fi + +if [ "$1" = 'reload' ]; then + $kwmc config reload + exit +fi + +if [ "$1" = 'refresh' ]; then + $kwmc tree -c refresh + exit +fi + +if [ "$1" = 'bsp' ]; then + $kwmc space -t bsp + exit +fi + +if [ "$1" = 'monocle' ]; then + $kwmc space -t monocle + exit +fi + +if [ "$1" = 'float' ]; then + $kwmc space -t float + exit +fi + +if [ "$1" = 'toggle-autoraise' ]; then + [[ $currentFocus = "autoraise" ]] && value="disabled" || value="autoraise" + $kwmc config focus $value + exit +fi + +if [ "$1" = 'toggle-mouse-follows' ]; then + [[ $currentMouse = "enabled" ]] && value="disable" || value="enable" + $kwmc config focus mouse-follows $value + exit +fi + +echo "$(echo kwm $tag | sed 's/kwm Connection failed!//') | dropdown=false color=${color}" + +echo "---"; + +echo "BSP | bash=$0 param1=bsp terminal=false" +echo "Monocle | bash=$0 param1=monocle terminal=false" +echo "Floating | bash=$0 param1=float terminal=false" + +echo "---" + +[[ $currentFocus = "autoraise" ]] && focus="Disable" || focus="Enable" + +echo "$focus Focus Follows Mouse | bash=$0 param1=toggle-autoraise terminal=false" + +[[ $currentMouse = "enabled" ]] && mouse="Disable" || mouse="Enable" + +echo "$mouse Mouse Follows Focus | bash=$0 param1=toggle-mouse-follows terminal=false" + +echo "---" + +echo "Refresh kwm | bash=$0 param1=refresh terminal=false" +echo "Reload kwm | bash=$0 param1=reload terminal=false" +echo "Quit kwm | bash=$0 param1=quit terminal=false" + diff --git a/bitbar-plugins/load.10s.sh b/bitbar-plugins/load.10s.sh @@ -0,0 +1,4 @@ +#!/bin/sh +color="#eebf36" +out=$(uptime|sed 's/.* //') +echo "$out | color=$color" diff --git a/bitbar-plugins/mail.5s.sh b/bitbar-plugins/mail.5s.sh @@ -0,0 +1,55 @@ +#!/bin/bash +newmails=$(find ~/Mail/*/INBOX/new -type f) +numbernewmails=$(echo $newmails | wc -w | sed 's/ *//') +mailboxes="$(echo $newmails | tr ' ' '\n' | sed 's/.*Mail\///' | sed 's/\/INBOX.*//')" + +mailcolor="#859900" +debug=false +#debug=true +offlineimap=/usr/local/bin/offlineimap + +accounts="" +if [[ $mailboxes == *"riseup"* ]]; then + accounts="${accounts}r" +fi +if [[ $mailboxes == *"geomail"* ]]; then + accounts="${accounts}a" +fi +if [[ $mailboxes == *"ucsd"* ]]; then + accounts="${accounts}u" +fi +if [[ $mailboxes == *"gmail"* ]]; then + accounts="${accounts}g" +fi + +if [ "$numbernewmails" -gt 0 ]; then + mailcolor="#cb4b16" + echo "M: ${numbernewmails} (${accounts}) | color=${mailcolor}" +else + echo "M: ${numbernewmails} | color=${mailcolor}" +fi + +# everything below in drop down menu +echo "---" + +echo $mailboxes + +echo "---" + +from="$(cat $newmails | grep 'From: ' | sed 's/From: //')" +printf "$from\n" + +echo "---" + +echo "Sync inboxes | bash=\"$offlineimap\" param1=-qf param2=INBOX terminal=$debug" +echo "Sync all | bash=\"$offlineimap\" terminal=$debug" + + +if [[ $debug == "true" ]]; then + echo "---" + + echo "newmails: $newmails" + echo "numbernewmails: $numbernewmails" + echo "mailboxes: $mailboxes" +fi + diff --git a/bitbar-plugins/mpd.3s.sh b/bitbar-plugins/mpd.3s.sh @@ -0,0 +1,18 @@ +#!/bin/bash +color="#81a2be" +mpcpath=/usr/local/bin/mpc +debug=false + +echo "$($mpcpath | head -n 1 | sed 's/volume.*$//') | color=${color}" + +echo "---" + +echo "$($mpcpath | tail -n 2 | sed 's/volume.*$//')" + +echo "---" + +echo "Play/Pause | bash=\"$mpcpath\" param1=toggle terminal=$debug" +echo "Previous | bash=\"$mpcpath\" param1=prev terminal=$debug" +echo "Next | bash=\"$mpcpath\" param1=next terminal=$debug" +echo "Stop | bash=\"$mpcpath\" param1=stop terminal=$debug" + diff --git a/create_symlinks.sh b/create_symlinks.sh @@ -0,0 +1,63 @@ +#!/bin/bash + +# Home folder dotfiles +for F in .bashrc .vimrc .inputrc .tmux.conf .xpdfrc .signature .Xresources \ + .Xmodmap .xinitrc .xprofile .zshrc .conkyrc .xbindkeysrc .gitconfig \ + .vimperatorrc .vimpcrc .compton.conf .locale .ctags .spacemacs \ + .juliarc.jl .mailcap .offlineimaprc .msmtprc .notmuch-config; do + SOURCE=$PWD/$F + TARGET=~/$F + + # Check if file exists, rename if so + [ -f $TARGET ] && mv $TARGET ${TARGET}_bck + rm $TARGET + + echo "Symlink: $SOURCE -> $TARGET" + ln -s $SOURCE $TARGET +done + +# Home folder dotfolders +for F in .colors .config/uzbl .config/awesome .config/dwb .config/bspwm \ + .config/sxhkd .config/luakit .config/openbox .config/zathura .tmuxinator \ + .i3 .mutt .ncmpcpp .vim .vimperrator .w3m wallpapers .kwm .mpd \ + .imapfilter .weechat; do + SOURCE=$PWD/$F + TARGET=~/$F + + # Check if file exists, rename if so + [ -f $TARGET ] && mv $TARGET ${TARGET}_bck + rm -rf $TARGET + + echo "Symlink: $SOURCE -> $TARGET" + ln -s $SOURCE $TARGET +done + +mkdir -p ~/bin +# Home folder bin directory +for F in `ls bin/`; do + SOURCE=$PWD/bin/$F + TARGET=~/bin/$F + + # Check if file exists, rename if so + [ -f $TARGET ] && mv $TARGET ${TARGET}_bck + rm -rf $TARGET + + echo "Symlink: $SOURCE -> $TARGET" + ln -s $SOURCE $TARGET +done + +# .xinitrc doesn't work with XQuartz +if [[ "$UNAMESTR" == 'Darwin' ]]; then + rm ~/.xinitrc +fi + +# Neovim configuration symlinks +cd $HOME +mkdir -p ${XDG_CONFIG_HOME:=$HOME/.config} +ln -s ~/.vim $XDG_CONFIG_HOME/nvim +ln -s ~/.vimrc $XDG_CONFIG_HOME/nvim/init.vim +cd - + +# Mutt cache folder +mkdir -p ~/.mutt/cache +chmod 0700 ~/.mutt/cache diff --git a/debian-install.sh b/debian-install.sh @@ -0,0 +1,87 @@ +#!/bin/bash +set -e +sudo apt-get update + +sudo apt-get install \ + autossh \ + bogofilter \ + build-essential \ + cmake \ + curl \ + dict \ + dict-gcide \ + dictd \ + dunst \ + elinks \ + exuberant-ctags \ + ffmpeg \ + git \ + haskell-platform \ + hsetroot \ + htop \ + i3 \ + i3blocks \ + i3lock \ + imagemagick \ + imapfilter \ + ipython \ + latexmk \ + libnotify-bin \ + locate \ + mpc \ + mpd \ + mplayer \ + msmtp \ + msmtp-gnome \ + mutt \ + ncmpcpp \ + notmuch \ + notmuch-mutt \ + ntp \ + offlineimap \ + okular \ + paraview \ + pass \ + python-ipdb \ + python-matplotlib \ + python-numpy \ + python-pip \ + python-scipy \ + redshift \ + ruby \ + rxvt-unicode-256color \ + screenfetch \ + scrot \ + sshfs \ + texlive \ + texlive-full \ + tig \ + tmux \ + tor \ + torbrowser-launcher \ + urlview \ + vim \ + vim-nox \ + w3m \ + weechat \ + weechat-plugins \ + weechat-scripts \ + wordnet \ + xautolock \ + xbacklight \ + xbindkeys \ + youtube-dl + zathura \ + zsh \ + + +sudo gem install tmuxinator + +# configure xdg-open with `mimeopen -d <file>` +# set zathura as default pdf viewer +xdg-mime default zathura.desktop application/pdf +xdg-mime default files.desktop inode/directory # nautilus +xdg-mime default eog.desktop image/jpeg +xdg-mime default eog.desktop image/png +xdg-mime default eog.desktop image/gif +xdg-mime default eog.desktop image/bmp diff --git a/install.sh b/install.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +# Create symlinks +mkdir -p ./.vim/bundle +./create_symlinks.sh + +# Clone zsh syntax highlighting and git prompt +mkdir -p $HOME/code && cd $HOME/code && \ +git clone https://github.com/zsh-users/zsh-syntax-highlighting.git +git clone https://github.com/olivierverdier/zsh-git-prompt.git + +# Install fonts +git clone https://github.com/phallus/fonts ~/code/phallus-fonts && + cd ~/code/phallus-fonts && ./install + +mkdir -p ~/.vim/bundle +mkdir -p ~/.config/nvim/bundle + +cd ~/bin && curl -OL https://raw.github.com/richo/battery/master/bin/battery &&\ + chmod +x ~/bin/battery + +# Install Vundle +#git clone https://github.com/gmarik/vundle.git ~/.vim/bundle/vundle + +# Install NeoBundle +git clone https://github.com/Shougo/neobundle.vim ~/.vim/bundle/neobundle.vim +git clone https://github.com/Shougo/neobundle.vim ~/.config/nvim/bundle/neobundle.vim + +# Install Spacemacs +git clone --recursive http://github.com/syl20bnr/spacemacs ~/.emacs.d + +# Install font +#cd /tmp &&\ +# wget http://susanoganders.dk/termsyn-1.8.7.tar.gz &&\ +# tar xvfz termsyn-*.tar.gz &&\ +# sudo mkdir -p /usr/share/fonts/local +# sudo cp termsyn-*/*.pcf /usr/share/fonts/local/ &&\ +# sudo fc-cache -f &&\ +# sudo mkfontscale /usr/share/fonts/local/ +# sudo mkfontdir /usr/share/fonts/local/ + +# Install tmuxinator +sudo gem install tmuxinator + +# Install Python GDB configuration +curl -OL git.io/.gdbinit + +# Set GPG signing key for git commits +git config --global user.signkey AC6517CA diff --git a/osx-install.sh b/osx-install.sh @@ -0,0 +1,162 @@ +#!/bin/bash + +# install homebrew +ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" + +#brew tap railwaycat/emacsmacport +brew tap d12frosted/emacs-plus + +# launch and monitor services with `brew services list`, `brew services start +# offlineimap`, etc. +# If "Operation not permitted" errors are encountered, try outside tmux +brew tap gapple/services +brew tap homebrew/games + +# from `brew list` +brews=( \ + "abook"\ + "asciinema"\ + "aspell"\ + "autoconf"\ + "automake"\ + "autossh"\ + "c2048"\ + "caskroom/cask/brew-cask"\ + "catimg"\ + "cmake"\ + "ctags-exuberant"\ + "emacs-plus"\ + "exiftool"\ + "ffmpeg"\ + "fortune"\ + "gdbm"\ + "gettext"\ + "git"\ + "gnu-getopt"\ + "gnupg"\ + "htop-osx"\ + "id3v2"\ + "imagemagick"\ + "imapfilter"\ + "libav"\ + "libevent"\ + "lua"\ + "mobile-shell"\ + "mpc"\ + "mpd"\ + "msmtp"\ + "mutt"\ + "--HEAD neovim/neovim/neovim"\ + "nmap"\ + "notmuch"\ + "homebrew/binary/kwm"\ + "homebrew/science/octave"\ + "offlineimap"\ + "openssl"\ + "pass"\ + "pcre"\ + "pkg-config"\ + "pwgen"\ + "qrencode"\ + "reattach-to-user-namespace"\ + "tmux"\ + "the_silver_searcher"\ + "tig"\ + "tor"\ + "torsocks"\ + "tree"\ + "urlview"\ + "vim"\ + "vimpc"\ + "vtk --with-tcl --with-qt --with-python --with-matplotlib --with-examples"\ + "w3m"\ + "watch"\ + "wget"\ + "youtube-dl"\ + "zsh" ) + +for brew in "${brews[@]}"; do + brew install $brew + if [[ "$brew" == "emacs-plus" ]]; then + brew linkapps emacs-plus + fi +done + + +# from `brew cask list` +casks=("adobe-reader"\ + "alfred"\ + "amethyst"\ + "android-studio"\ + "battle-net"\ + "bitbar"\ + "disk-inventory-x"\ + "duet"\ + "firefox"\ + "flux"\ + "google-chrome"\ + "inkscape"\ + "julia"\ + "karabiner"\ + "libreoffice"\ + "mactex"\ + "minecraft"\ + "osxfuse"\ + "paraview"\ + "processing"\ + "smoothmouse"\ + "skim"\ + "skype"\ + "steam"\ + "sshfs"\ + "torbrowser"\ + "transmission"\ + "virtualbox"\ + "vlc"\ + "w3m"\ + "xquartz" ) + +read -p "Do you want to install brew casks? [y/n] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + for cask in "${casks[@]}"; do + read -p "Do you want to install $cask? [y/n] " -n 1 -r + echo + if [[ $REPLY =~ ^[Yy]$ ]]; then + brew cask install $cask + fi + done +fi + +read -p "Do you want to clone terminal.app themes? [y/n] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + git clone https://github.com/tomislav/osx-terminal.app-colors-solarized \ + ~/code/dotfiles/osx-terminal.app-colors-solarized + wget https://raw.githubusercontent.com/altercation/solarized/master/iterm2-colors-solarized/Solarized%20Light.itermcolors + wget https://raw.githubusercontent.com/altercation/solarized/master/iterm2-colors-solarized/Solarized%20Dark.itermcolors +fi + +read -p "Do you want to create symlinks in the home folder? [y/n] " -n 1 -r +echo +if [[ $REPLY =~ ^[Yy]$ ]]; then + ln -s ~/Library/Mobile\ Documents/com\~apple\~CloudDocs ~/iCloud + ln -s ~/iCloud/articles ~/articles + ln -s ~/iCloud/src ~/src + ln -s ~/iCloud/doc ~/doc + ln -s ~/doc/.password-store ~/.password-store + ln -s ~/iCloud/uni ~/uni + ln -s ~/iCloud/videos ~/videos + ln -s ~/Library/Mobile\ Documents/27N4MQEA55~pro~writer/Documents/ ~/iawriter +fi + +mkdir -p ~/tmp + +# notmuch-mutt requirements +brew install cpanminus +cpanm Digest::SHA\ + Mail::Box\ + Mail::Header\ + Mail::Box::Maildir\ + String::ShellQuote\ + Term::ReadLine::Gnu diff --git a/userChrome.css b/userChrome.css @@ -0,0 +1,145 @@ +/* AGENT_SHEET */ +@namespace url(http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul); +#appcontent, +#appcontent > #content, +#appcontent > #content > tabbox > tabpanels { +background: #181818 !important; +} + + +tabs#tabbrowser-tabs, tabs#tabbrowser-tabs * { +-moz-appearance: none !important; +border-radius: 0px !important; +border: none !important; +border-bottom: none !important; +background-image: none !important; +margin-top: 0px !important; +margin-bottom: 0px !important; +max-height: 18px !important; +min-height: 18px !important; +} + +tabs#tabbrowser-tabs { +background: #181818 !important; +font-weight: normal !important; +text-align: center !important; +padding-top: 0px !important; +margin-left: 0px !important; +padding-top: 0px !important; +border-bottom: 0px !important; +} + +.tabbrowser-tab { +color: #839496 !important; +background: #2d2d2d !important; +margin-left: 0px !important; +border-bottom: 0px !important; +} + +.tabbrowser-tab[selected=true] { +/*color: #232323 !important;*/ +color: #ffffff !important; +background: #6a6a6a !important; /*#202020*/ +border-bottom: 0px !important; +box-shadow: none !important; +} + +.tabbrowser-tab .tab-text { +margin-left: 3px !important; +margin-right: 3px !important; +margin-top: 2px !important; +padding-top: 2px !important; +/*font-family: "terminus" !important; +font-size: 11px !important;*/ +font-family: "PragmataPro" !important; +font-size: 10px !important; +} + +.tabbrowser-tabs:not([drag=detach]) > .tabbrowser-tab:not([pinned])[fadein] { +min-width: 30px !important; +max-width: 100% !important; +} + +/* HIDE */ +toolbarbutton#appmenu-toolbar-button, +toolbarbutton#alltabs-button, +toolbarbutton#new-tab-button, +#urlbar dropmarker, +#identity-box, +.tabbrowser-arrowscrollbox > .scrollbutton-up, +.tabbrowser-arrowscrollbox > .scrollbutton-down, +.tabs-closebutton-box, +.tabs-border-bottom, +.tab-throbber, +.tabs-newtab-button, +.tab-throbber[progress], +.tabbrowser-tab:not([pinned]) .tab-icon-image, +#liberator-separator, +#sidebar-search-container, +#nav-bar, +.notificationbox-stack, +.tab-background-start, +.tab-background-end { +display: none !important; +} + +#TabsToolbar::after { display: none !important; } +#navigator-toolbox { border: 0 !important; margin-bottom: -1px !important; } +.tabbrowser-tab::before, .tabbrowser-tab::after { background: url(none) !important; } + +.tabbrowser-tab * { +background: url(none) !important; list-style-image: none !important; +margin: 0 0 0 0 !important; padding: 0 0 0 0 !important; -moz-appearance: none !important; +} + +#TabsToolbar, #tabbrowser-tabs { +-moz-appearance: none !important; +margin-left: -15px !important; margin-right: -8px !important; +} + +/* vimperator */ +/* AGENT_SHEET */ +#liberator-statusline { +min-height: 13px !important; +max-height: 13px !important; +} + +/* scrollbar */ +scrollbar { +-moz-appearance: none !important; +position: relative; +background: none transparent; +z-index: 2147483647; +padding: 0px 0px 0px 0px!important; +} + +scrollbar[orient="vertical"] { +-moz-margin-start: -3px; +min-width: 3px; +max-width: 3px; +padding: 0px 0px 0px 0px!important; +} + +scrollbar[orient="horizontal"] { +margin-top: -3px; +min-height: 3px; +max-height: 3px; +} + +scrollbar thumb { +-moz-appearance: none !important; +border: none !important; +border-radius: 0 !important; +background: #3C3748!important; +} + +scrollbar[orient="vertical"] thumb{ +min-height: 100px!important; +} + +scrollbar[orient="horizontal"] thumb{ +min-width: 100px!important; +} +scrollbar scrollbarbutton{ +visibility: collapse!important; +}