pax_global_header00006660000000000000000000000064133374213370014520gustar00rootroot0000000000000052 comment=4bd2e659ad7255592923c5544f683a0ab9e46774 BOSSA-1.9.1/000077500000000000000000000000001333742133700123775ustar00rootroot00000000000000BOSSA-1.9.1/.gitignore000066400000000000000000000001211333742133700143610ustar00rootroot00000000000000*.bin obj *.exe *~ bossa bossac bin *.swp tags *.bak install/*.crt install/*.p12 BOSSA-1.9.1/LICENSE000066400000000000000000000027351333742133700134130ustar00rootroot00000000000000Copyright (c) 2011-2016, ShumaTech All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. BOSSA-1.9.1/Makefile000066400000000000000000000227361333742133700140510ustar00rootroot00000000000000.DEFAULT_GOAL := all # # Version # VERSION=$(shell git describe --tags --dirty) WXVERSION=3.0 # # Source files # COMMON_SRCS=Samba.cpp Flash.cpp D5xNvmFlash.cpp D2xNvmFlash.cpp EfcFlash.cpp EefcFlash.cpp Applet.cpp WordCopyApplet.cpp Flasher.cpp Device.cpp APPLET_SRCS=WordCopyArm.asm BOSSA_SRCS=BossaForm.cpp BossaWindow.cpp BossaAbout.cpp BossaApp.cpp BossaBitmaps.cpp BossaInfo.cpp BossaThread.cpp BossaProgress.cpp BOSSA_BMPS=BossaLogo.bmp BossaIcon.bmp ShumaTechLogo.bmp BOSSAC_SRCS=bossac.cpp CmdOpts.cpp BOSSASH_SRCS=bossash.cpp Shell.cpp Command.cpp # # Build directories # BINDIR=bin OBJDIR=obj SRCDIR=src RESDIR=res INSTALLDIR=install # # Determine OS # OS:=$(shell uname -s | cut -c -7) # # Windows rules # ifeq ($(OS),MINGW32) # Use wxWindows development branch to work around font scaling issues on Windows WXVERSION=3.1 EXE=.exe COMMON_SRCS+=WinSerialPort.cpp WinPortFactory.cpp COMMON_LDFLAGS=-Wl,--enable-auto-import -static -static-libstdc++ -static-libgcc COMMON_LIBS=-ltermcap -Wl,--as-needed -lsetupapi BOSSA_RC=BossaRes.rc WIXDIR="C:\Program Files (x86)\WiX Toolset v3.11\bin" CODE_SIGN=$(INSTALLDIR)\\code_sign.p12 TIMESTAMP=http://timestamp.comodoca.com/authenticode SIGNTOOL="C:\Program Files (x86)\Windows Kits\10\bin\x64\signtool.exe" INF2CAT="C:\Program Files (x86)\Windows Kits\10\bin\x86\Inf2Cat.exe" WINVER=$(shell echo $(VERSION) | cut -d - -f 1) define bossa_msi $(OBJDIR)\\bossa-$(1)-$(VERSION).wixobj: $(INSTALLDIR)\\bossa.wxs $(WIXDIR)\\candle.exe -dVersion=$(WINVER) -arch $(1) -out $$@ -ext $(WIXDIR)\\WixUIExtension.dll -ext $(WIXDIR)\\WixDifxAppExtension.dll $$< $(BINDIR)\\bossa-$(1)-$(VERSION).msi: $(OBJDIR)\\bossa-$(1)-$(VERSION).wixobj $(WIXDIR)\\light.exe -cultures:null -out $$@ -pdbout $(OBJDIR)\\bossa.wixpdb -sice:ICE57 -ext $(WIXDIR)\\WixUIExtension.dll -ext $(WIXDIR)\\WixDifxAppExtension.dll $(WIXDIR)\\difxapp_$(1).wixlib $$< $$(Q)read -p "Password:" -rs PASSWORD; \ cmd /C '$(SIGNTOOL) sign /v /fd sha256 /f $(CODE_SIGN) -t $(TIMESTAMP) /p '$$$$PASSWORD' $$@' endef $(eval $(call bossa_msi,x86)) $(eval $(call bossa_msi,x64)) $(INSTALLDIR)\\bossa.cat: $(INSTALLDIR)\\bossa.inf export TMP=$$(mktemp -d); \ cp $< $$TMP; \ cmd /C '$(INF2CAT) /v /driver:'$$(cygpath -w $$TMP)' /os:XP_X86,Vista_X86,Vista_X64,7_X86,7_X64,8_X86,8_X64,6_3_X86,6_3_X64,10_x86,10_x64'; \ mv $$TMP/bossa.cat $@; \ rm -rf $$TMP; \ read -p "Password:" -rs PASSWORD; \ cmd /C '$(SIGNTOOL) sign /v /fd sha256 /f $(CODE_SIGN) -t $(TIMESTAMP) /p '$$PASSWORD' $@' bossa.cat: $(INSTALLDIR)\\bossa.cat install32: $(BINDIR)\\bossa-x86-$(VERSION).msi install64: $(BINDIR)\\bossa-x64-$(VERSION).msi .PHONY: install install: strip install32 install64 endif # # Linux rules # ifeq ($(OS),Linux) COMMON_SRCS+=PosixSerialPort.cpp LinuxPortFactory.cpp COMMON_LIBS=-Wl,--as-needed COMMON_CXXFLAGS=-std=c++11 WX_LIBS+=-lX11 MACHINE:=$(shell uname -m) install: strip tar cvzf $(BINDIR)/bossa-$(MACHINE)-$(VERSION).tgz -C $(BINDIR) bossa$(EXE) bossac$(EXE) bossash$(EXE) endif # # OS X rules # ifeq ($(OS),Darwin) COMMON_SRCS+=PosixSerialPort.cpp OSXPortFactory.cpp COMMON_CXXFLAGS=-arch x86_64 -mmacosx-version-min=10.9 COMMON_LDFLAGS=-arch x86_64 -mmacosx-version-min=10.9 APP=BOSSA.app DMG=bossa-$(VERSION).dmg VOLUME=BOSSA BACKGROUND=$(INSTALLDIR)/background.png .PHONY: install app: mkdir -p $(BINDIR)/$(APP)/Contents/MacOS mkdir -p $(BINDIR)/$(APP)/Contents/Resources cp -f $(INSTALLDIR)/Info.plist $(BINDIR)/$(APP)/Contents echo -n "APPL????" > $(BINDIR)/$(APP)/Contents/PkgInfo ln -f $(BINDIR)/bossa $(BINDIR)/$(APP)/Contents/MacOS/bossa cp -f $(RESDIR)/BossaIcon.icns $(BINDIR)/$(APP)/Contents/Resources install: strip app hdiutil create -ov -megabytes 5 -fs HFS+ -volname $(VOLUME) $(BINDIR)/$(DMG) hdiutil attach -noautoopen $(BINDIR)/$(DMG) cp -R $(BINDIR)/$(APP) /Volumes/$(VOLUME)/ cp $(BINDIR)/bossac$(EXE) /Volumes/$(VOLUME)/ cp $(BINDIR)/bossash$(EXE) /Volumes/$(VOLUME)/ ln -s /Applications /Volumes/$(VOLUME)/Applications ln -s /usr/local/bin /Volumes/$(VOLUME)/bin mkdir /Volumes/$(VOLUME)/.background cp $(BACKGROUND) /Volumes/$(VOLUME)/.background osascript < $(INSTALLDIR)/dmgwin.osa hdiutil detach /Volumes/$(VOLUME)/ hdiutil convert -format UDBZ -o $(BINDIR)/tmp$(DMG) $(BINDIR)/$(DMG) mv -f $(BINDIR)/tmp$(DMG) $(BINDIR)/$(DMG) endif # # OpenBSD rules # (This is likely to work without changes, but not tested, on other BSDs) # ifeq ($(OS),OpenBSD) COMMON_SRCS+=PosixSerialPort.cpp BSDPortFactory.cpp # This is only needed for bossash, but we can't add it to BOSSASH_LIBS here # because that one is redefined later. COMMON_LIBS+=-ltermcap # As of 5.7, OpenBSD packages WxWidgets 2.8 # bossa builds, runs, and appears to play nicely with this version, # but fails to do anything useful on systems that don't have hardware # serial ports because of USB detection problems. # (The SAM's USB programming port doesn't get recognized as a ucom # device, and a USB serial adaptor attached to the UART gets detected # by bossa as a USB interface and doesn't fall back to the serial # programming protocol.) WXVERSION=2.8 endif ifeq (${OS},FreeBSD) # This is only needed for bossash, but we can't add it to BOSSASH_LIBS here # because that one is redefined later. COMMON_SRCS+=PosixSerialPort.cpp BSDPortFactory.cpp endif # # Object files # COMMON_OBJS=$(foreach src,$(COMMON_SRCS),$(OBJDIR)/$(src:%.cpp=%.o)) APPLET_OBJS=$(foreach src,$(APPLET_SRCS),$(OBJDIR)/$(src:%.asm=%.o)) BOSSA_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSA_SRCS),$(OBJDIR)/$(src:%.cpp=%.o)) ifdef BOSSA_RC BOSSA_OBJS+=$(OBJDIR)/$(BOSSA_RC:%.rc=%.o) endif BOSSAC_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSAC_SRCS),$(OBJDIR)/$(src:%.cpp=%.o)) BOSSASH_OBJS=$(APPLET_OBJS) $(COMMON_OBJS) $(foreach src,$(BOSSASH_SRCS),$(OBJDIR)/$(src:%.cpp=%.o)) # # Dependencies # DEPENDS=$(COMMON_SRCS:%.cpp=$(OBJDIR)/%.d) DEPENDS+=$(APPLET_SRCS:%.asm=$(OBJDIR)/%.d) DEPENDS+=$(BOSSA_SRCS:%.cpp=$(OBJDIR)/%.d) DEPENDS+=$(BOSSAC_SRCS:%.cpp=$(OBJDIR)/%.d) DEPENDS+=$(BOSSASH_SRCS:%.cpp=$(OBJDIR)/%.d) # # Tools # Q?=@ CXX?=g++ ARM=arm-none-eabi- ARMAS=$(ARM)as ARMOBJCOPY=$(ARM)objcopy # # CXX Flags # COMMON_CXXFLAGS+=-Wall -Werror -MT $@ -MD -MP -MF $(@:%.o=%.d) -DVERSION=\"$(VERSION)\" -g -O2 $(CXXFLAGS) WX_CXXFLAGS:=$(shell wx-config --cxxflags --version=$(WXVERSION)) -DWX_PRECOMP -Wno-ctor-dtor-privacy -O2 -fno-strict-aliasing BOSSA_CXXFLAGS=$(COMMON_CXXFLAGS) $(WX_CXXFLAGS) BOSSAC_CXXFLAGS=$(COMMON_CXXFLAGS) BOSSASH_CXXFLAGS=$(COMMON_CXXFLAGS) # # LD Flags # COMMON_LDFLAGS+=-g $(LDFLAGS) BOSSA_LDFLAGS=$(COMMON_LDFLAGS) BOSSAC_LDFLAGS=$(COMMON_LDFLAGS) BOSSASH_LDFLAGS=$(COMMON_LDFLAGS) # # Libs # COMMON_LIBS+= WX_LIBS:=$(shell wx-config --libs --version=$(WXVERSION)) $(WX_LIBS) BOSSA_LIBS=$(COMMON_LIBS) $(WX_LIBS) BOSSAC_LIBS=$(COMMON_LIBS) BOSSASH_LIBS=-lreadline $(COMMON_LIBS) # # Main targets # all: $(BINDIR)/bossa$(EXE) $(BINDIR)/bossac$(EXE) $(BINDIR)/bossash$(EXE) # # Common rules # define common_obj $(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1) @echo CPP COMMON $$< $$(Q)$$(CXX) $$(COMMON_CXXFLAGS) -c -o $$@ $$< endef $(foreach src,$(COMMON_SRCS),$(eval $(call common_obj,$(src)))) # # Applet rules # define applet_obj $(SRCDIR)/$(1:%.asm=%.cpp): $(SRCDIR)/$(1) @echo APPLET $(1:%.asm=%) $$(Q)$$(ARMAS) -o $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.obj) $$< $$(Q)$$(ARMOBJCOPY) -O binary $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.obj) $$(@:$(SRCDIR)/%.cpp=$(OBJDIR)/%.bin) $$(Q)./appletgen $(1:%.asm=%) $(SRCDIR) $(OBJDIR) $(OBJDIR)/$(1:%.asm=%.o): $(SRCDIR)/$(1:%.asm=%.cpp) @echo CPP APPLET $$< $$(Q)$$(CXX) $$(COMMON_CXXFLAGS) -c -o $$(@) $$(<:%.asm=%.cpp) endef $(foreach src,$(APPLET_SRCS),$(eval $(call applet_obj,$(src)))) # # BOSSA rules # define bossa_obj $(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1) @echo CPP BOSSA $$< $$(Q)$$(CXX) $$(BOSSA_CXXFLAGS) -c -o $$@ $$< endef $(foreach src,$(BOSSA_SRCS),$(eval $(call bossa_obj,$(src)))) # # Resource rules # ifeq ($(OS),MINGW32) $(OBJDIR)/$(BOSSA_RC:%.rc=%.o): $(RESDIR)/$(BOSSA_RC) @echo RC $< $(Q)`wx-config --rescomp --version=$(WXVERSION)` -o $@ $< endif # # BOSSAC rules # define bossac_obj $(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1) @echo CPP BOSSAC $$< $$(Q)$$(CXX) $$(BOSSAC_CXXFLAGS) -c -o $$@ $$< endef $(foreach src,$(BOSSAC_SRCS),$(eval $(call bossac_obj,$(src)))) # # BOSSASH rules # define bossash_obj $(OBJDIR)/$(1:%.cpp=%.o): $(SRCDIR)/$(1) @echo CPP BOSSASH $$< $$(Q)$$(CXX) $$(BOSSASH_CXXFLAGS) -c -o $$@ $$< endef $(foreach src,$(BOSSASH_SRCS),$(eval $(call bossash_obj,$(src)))) # # BMP rules # define bossa_bmp $(SRCDIR)/$(1:%.bmp=%.cpp): $(RESDIR)/$(1) @echo BIN2C $$< $(Q)bin2c $$< $$@ endef $(foreach bmp,$(BOSSA_BMPS),$(eval $(call bossa_bmp,$(bmp)))) # # Directory rules # $(OBJDIR): @mkdir $@ $(BINDIR): @mkdir $@ # # Target rules # $(BOSSA_OBJS): | $(OBJDIR) $(BINDIR)/bossa$(EXE): $(foreach bmp,$(BOSSA_BMPS),$(SRCDIR)/$(bmp:%.bmp=%.cpp)) $(BOSSA_OBJS) | $(BINDIR) @echo LD $@ $(Q)$(CXX) $(BOSSA_LDFLAGS) -o $@ $(BOSSA_OBJS) $(BOSSA_LIBS) $(BOSSAC_OBJS): | $(OBJDIR) $(BINDIR)/bossac$(EXE): $(BOSSAC_OBJS) | $(BINDIR) @echo LD $@ $(Q)$(CXX) $(BOSSAC_LDFLAGS) -o $@ $(BOSSAC_OBJS) $(BOSSAC_LIBS) $(BOSSASH_OBJS): | $(OBJDIR) $(BINDIR)/bossash$(EXE): $(BOSSASH_OBJS) | $(BINDIR) @echo LD $@ $(Q)$(CXX) $(BOSSASH_LDFLAGS) -o $@ $(BOSSASH_OBJS) $(BOSSASH_LIBS) strip-bossa: $(BINDIR)/bossa$(EXE) @echo STRIP $^ $(Q)strip $^ strip-bossac: $(BINDIR)/bossac$(EXE) @echo STRIP $^ $(Q)strip $^ strip-bossash: $(BINDIR)/bossash$(EXE) @echo STRIP $^ $(Q)strip $^ strip: strip-bossa strip-bossac strip-bossash clean: @echo CLEAN $(Q)rm -rf $(BINDIR) $(OBJDIR) # # Include dependencies # -include $(DEPENDS) BOSSA-1.9.1/README.md000066400000000000000000000026761333742133700136710ustar00rootroot00000000000000BOSSA 1.9 --------- BOSSA is a flash programming utility for Atmel's SAM family of flash-based ARM microcontrollers. The motivation behind BOSSA is to create a simple, easy-to-use, open source utility to replace Atmel's SAM-BA software. BOSSA is an acronym for Basic Open Source SAM-BA Application to reflect that goal. The software was created by Scott Shumate with contributions from several [contributors](https://github.com/shumatech/BOSSA/graphs/contributors). The software is released under the terms of the BSD license as specified in the LICENSE file. Supported Device Families ------------------------- * SAM7S * SAM7SE * SAM7X * SAM7XC * SAM3N * SAM3S * SAM3U * SAM4E * SAM4S * SAMD21 * SAMD51 * SAM3X\* * SAM3A\* * SAM7L\* * SAM9XE\* * SAMR21\* * SAML21\* * SAME51\* * SAME53\* * SAME54\* * SAME70\* * SAMS70\* * SAMV70\* * SAMV71\* \* Device families which are not tested for each release and could stop working. Do you want to help make sure a device family is tested or do you want to see a new device family added? Then contribute a development board with a device from that family to the BOSSA project to make it happen. Contact scott at shumatech.com if you are interested in helping the project. The following individuals and companies graciously provided development boards to assist the BOSSA project. * Atmel Corporation (SAM3N, SAM3S, SAM3U) * David Crocker (SAM4E, SAM4S) * Adafruit Industries (SAMD21, SAMD51) BOSSA-1.9.1/appletgen000077500000000000000000000022521333742133700143050ustar00rootroot00000000000000#!/bin/bash if [ $# -ne 3 ]; then echo "Usage: $0 " exit 1; fi ARM=$1 SRCDIR=$2 OBJDIR=$3 APPLET=${ARM/%Arm/Applet} BINFILE=$OBJDIR/$ARM.bin OBJFILE=$OBJDIR/$ARM.obj CPPFILE=$SRCDIR/$ARM.cpp HFILE=$SRCDIR/$ARM.h SIZE=$(stat -c%s $BINFILE) if [ ! -f $BINFILE ]; then echo "$BINFILE does not exist" exit -1 fi if [ ! -f $OBJFILE ]; then echo "$OBJFILE does not exist" exit -1 fi # Generate the header file DEFINE=_$(echo $1 | tr '[:lower:]' '[:upper:]')_H cat > $HFILE << EOF // WARNING!!! DO NOT EDIT - FILE GENERATED BY APPLETGEN #ifndef $DEFINE #define $DEFINE #include typedef struct { EOF nm -g $OBJFILE | awk '{print " uint32_t "$3";"}' >> $HFILE cat >> $HFILE << EOF uint8_t code[$SIZE]; } $1; #endif // $DEFINE EOF # Generate the C file cat > $CPPFILE << EOF // WARNING!!! DO NOT EDIT - FILE GENERATED BY APPLETGEN #include "$ARM.h" #include "$APPLET.h" $ARM $APPLET::applet = { EOF nm -g $OBJFILE | awk '{print "// "$3"\n0x"$1","}' >> $CPPFILE cat >> $CPPFILE << EOF // code { EOF od -t x1 $BINFILE | awk '{for(n=2;n<=NF;n++){printf("0x"$n", ")}if(NF>1)print""}' >> $CPPFILE cat >> $CPPFILE << EOF } }; EOF BOSSA-1.9.1/install/000077500000000000000000000000001333742133700140455ustar00rootroot00000000000000BOSSA-1.9.1/install/Info.plist000066400000000000000000000023311333742133700160140ustar00rootroot00000000000000 CFBundleDevelopmentRegion en CFBundleExecutable bossa CFBundleIconFile BossaIcon.icns CFBundleIdentifier ShumaTech.BOSSA CFBundleInfoDictionaryVersion 6.0 CFBundleName BOSSA CFBundlePackageType APPL CFBundleShortVersionString 1.0 CFBundleSignature ???? CFBundleVersion 1.1 LSMinimumSystemVersion 10.6 NSPrincipalClass NSApplication CFBundleGetInfoString BOSSA version 1.1, (c) 2011-2012 ShumaTech CFBundleLongVersionString 1.1, (c) 2011-2012 ShumaTech NSHumanReadableCopyright Copyright 20011-2012 ShumaTech LSRequiresCarbon BOSSA-1.9.1/install/background.png000066400000000000000000001760161333742133700167050ustar00rootroot00000000000000PNG  IHDR8vGg CiCCPICC profilexڝSwX>eVBl"#Ya@Ņ VHUĂ H(gAZU\8ܧ}zy&j9R<:OHɽH gyx~t?op.$P&W " R.TSd ly|B" I>ةآ(G$@`UR,@".Y2GvX@`B, 8C L0ҿ_pH˕͗K3w!lBa)f "#HL 8?flŢko">!N_puk[Vh]3 Z zy8@P< %b0>3o~@zq@qanvRB1n#Dž)4\,XP"MyRD!ɕ2 w ONl~Xv@~- g42y@+͗\LD*A aD@ $<B AT:18 \p` Aa!:b""aH4 Q"rBj]H#-r9\@ 2G1Qu@Ơst4]k=Kut}c1fa\E`X&cX5V5cX7va$^lGXLXC%#W 1'"O%zxb:XF&!!%^'_H$ɒN !%2I IkHH-S>iL&m O:ňL $RJ5e?2BQͩ:ZImvP/S4u%͛Cˤ-Кigih/t ݃EЗkw Hb(k{/LӗT02goUX**|:V~TUsU?y TU^V}FUP թU6RwRPQ__c FHTc!2eXBrV,kMb[Lvv/{LSCsfffqƱ9ٜJ! {--?-jf~7zھbrup@,:m:u 6Qu>cy Gm7046l18c̐ckihhI'&g5x>fob4ekVyVV׬I\,mWlPW :˶vm))Sn1 9a%m;t;|rtuvlp4éĩWggs5KvSmnz˕ҵܭm=}M.]=AXq㝧/^v^Y^O&0m[{`:>=e>>z"=#~~~;yN`k5/ >B Yroc3g,Z0&L~oL̶Gli})*2.QStqt,֬Yg񏩌;jrvgjlRlc웸xEt$ =sl3Ttcܢ˞w|/9%bKGD pHYs  tIME 9;6&i IDATxy$u;7޾2=0\.EJ&%$9,[bI99$Kd%?I%²hYmRaII(l;0!f33^{GfʺU=rW,ߑ?k(??L=)m4}׮c_V9ʃ f j5˺@2w/JT;Q$wBŗ@LXMu~U^xXC,%k|*-_ {SxH "7JUl\ KZ81!DW ysVQu) 5{d"7#m\ݫ PKn""X80!}-s59IF΅r d.EvXx4e1trE4DdBx@"Xq(dYWeЫfךEꏣu碋/\TԮ[6 Ȧ5G57H_ jYzxxxx+XCAص*Nq&5W.t7 |!WVϫJNj}A3. {ZVTWUU\~HC*~UeuJWة0,aTlCt]5]V))WUU4w jIzaBBO̽~|;^Ofk<<<<<>Zvt.Q":@HҬ,JuԄ|ϳ,ޯ3UvENjՎ6=hĜkrx]CFeeU\+:\+ Pʓ긏^=]jWVB>A4'iAҖr2Y]Z,23\dCC"YmܸsaS^ T T) ~T)Geo~NJlTy)-!l( w FRcmZRWJ?H剹ycu /[D,;+7]^;IN|LRuMp9qYT"Kn߸ z\uh5'׽Xh@g]&/u|ZPnXX X ""&+x4.^ZnM#*c-B<<<<<2i;[d-֗ W":m>uŪdtegΰwt9ٟHL,UһS]Ҿ9Hk^Rs l \WOk8".Gq 5X.4OZ&ĖWU^Iq(ڦk] j@Vwܥrީ]d.+f=<<<>ilWPe\ڙ60©URpcQ%,=7RjΩNMK}AWXXeD=EXzxxxx<`vj4= .qSI|Cε{ -Eƅ8laɭrIPwń4eڀ}#[}tzumrٯ_oںB 0@dL,">BMNB0Ҩ5m %jyb_-8ˢEyGQ>c/IdPdz7:87L4Mm0+3[=*LR~}?Olf7 i/%E'ڥ^mmU-`UҗEr\̵XXx~Ѧ M9ݴI^0Bք{IbpZuQ[1{EKM b@>R'nl#M+)cYH.8]ڗbcJxmAXZMT0hfhjA-]s8 eB,Ct>)dfkhε =U(?k?S??.7_' C8& C1=m^ D`ҠCm6ՑSWYMK?pUjwUK_o E7tZeBJde,33f,0#jGh!vF:c}dRC"2">FHkOHxg{hZ=mҖjU :G2c:5UѮ6eMsHqܗ<>TY$4fR]M-مEGOr(O_P{PP+cԜ3 {h^/&m$/q"9_;GTiw)ܾ3[w=>qL=MҮ| WfCH~t|/׻QWz\"uj6Vщeɫ'mdzYV]-\,"ZPH#'DQb n{k[޹F$[!@(Vfﳯx$)[3Z{ˋ%|R^_vT-Ofɰrp5*5^ŭl9i n[?mPTk^:x0;OC!ye䵌 A, Y۩%s\rDƭrcTGSBLaAK]'mmoڧ}5Ab FfDx'ySG@ł5+-<{xl1\ۏ1_i=f¯ۿ}<_|wȒ2QY5 S&e-bMdVvP|QӐZv xaEײ}m&o(]eBBvb,v'E"Y\4T&77Gج Em6A{NECKI :y˗R4y%'3|xxI$R+k]\2{N淯wS J,:-+.^0yQHo -ti[sRi\P2^"ۈb-}ee H{DMµ׶׷ vzya Chj r,޶XAEBe0 b|N ~G+?S7~O(iXDD6zfR. Py y%ʼ5=9gؓ5t\*]*?-%Li>Fvs37/"aDYscн+D v1aD FfzŔW{< 焢HsҎN$1H d$r cs#,@pڵjWdU {|#~>ƏW i]9m!=6VJ: C; N Shdg_`]25O.wQJv$Gsu˩tRt%Zߦ{ ]VE~Y| !xJB3%rU6(at 9IcC GM,A n \*idjaH/o2 k {0G{=q{<"haږKe:4cQ.;iYU^gʼ^rylCHnLnCBUC`:o_YJB|D&dz@M({$*·)Q=DDk=}Z;׈׮a؂sw|6 [°q|xCW3'4񐔶:e1p4[w&loEݦ*{9z~1+s`<Ȫ>sZjr+P$ SHїqD:(@LpQ ؂M&&یHff~mT0Џ=-b QCоrg7#MvHnQu*Ty[ 'siS&jW(3f֒a(&S&2 91*r΄ݠo-X2{ p`p_1=%v!=- S%d͊65Y(E m#)ɫ &hr4)+`m$ %&EƓ"Gd1HV A[F-y fϮ%o'0!أ$Iqq1b9Mi7=<k[&`e21 0$!l"ex$@TDQE]=i{+nG]ʺ.0zssBMUWM5 CM,Υxrey`r6W%٩ZAUPMI 'dwH/c4KPɉX\Ddq]Z]Wl.Fz #Lmn$uSR6AR̢f1<^"z:p"c2QƉ)W,Ř|x$U&2.M&pr7+5kK^~~yOc\,ZUĢ=̮~Uկc`s .smE@Miz'- bY?= ?B|I:]YZ0 b$-DM&hw =agN huI,t(Q,6,LsTЖu12S/䭥/)m6([% ,Vju:0=N4Szk7[ygnT~5G'M'|+_駃y|I{oww 2qVڵ.WUϹN/ :$@pH!>E/"v4f|_lk('0C[v+Hz A{ OA}7}4iBn#~sV1"ƭsom24o?H&[v+wO~:h0lTK`d}^Ay Fh2Gj.?3%"Cuȉx80̣Af*BYd"$<= 28'9Y9a[ YLN㜰+k]㡑vpqfT~nUٮiUdhpױűЖZ V-F V-j0Xc=!֢ #+]t`S[ě[D=+ DoZ.C3!^j#IGL6&BR[" Z/ 8H|o0٧Z)^z#0'쒰8Y[[cgg=vvvzDQU7]jSJLep^{4ΧI^+'rպ-iI3]Abi{`J<"mnk)1! η TF0F? C^i("m%!`\K"d\&Dyg*<$q+L !B Z$J*yf6/,T$p80ܸ*vC۷bHX;٫ܬvbssWOSOqu666xfIIf*Y5vz|m'#.QZ=u I + 킰gAggɍ R^"@/bF3he ?a vO}OHuLM`Th;"S{^DG&}m1aq-z٧%IsR8)rx(b;'plILC7V\RG $p,|镄^g_Ͽ˄}I׮]駟g婧b^G=]nۚTBu*VMBhq:|mLYZB$]]ފJ v`nuHO{o%-N~,A w ?C:8C7;_(8}cEʅh~87-}vFO bY C]!FPEcrk),f*E%υE6G\|hH|yiHX36k_^xg?%TM8fRi 3*xS Yd"(a*f43LR! # %΋oܺΕݐO0eda{74Ҟl{UOԥ$ GW_Z"OM/|㻘5v0^#ff h^6Tf7 XXLnuX9dwGCknZ{RHM&X 1gdsd a<Ջm̼9Q]"r*!K-|e%']մogſdPlў='W $ټq~vO+zxINusڪ*4iRV *>A-F.~w27iϬsn) w\/R@m?j99Ѯe1H11شLb2$1*;pLU3MQvboo!I\VԶO@ho7 i ΨeHWN2Jy}EN%UԽAPLm $ ěO29=d|QF`8y]!:w AVsU„a N+*nJ\QDa0~ڎ#9]oG+cUǃFYpMDә}*Տ^?۾uxd8=a{|svr*r+Բ561uruIWjZ֒֔p"Kiqo>$'w%9=drN?&oIv~%!H|))Z*I0Rl0ERx[Aqm`bJ?/ t:p8$˲_`>Og8*>nllx$nH8nu4sn:vU\w1#!AÐ%^$es񝜼/^i m6͟'v.B$t`@`AQ^Ù; Jd*R.EC D=?SAiL Z-Htu|Lo//8>>&26W^MF+LʚJ86Dbvv\DS\>%P.h-Ndkt댎0>9`|z@r;zbd!Zw6KM1`S͉zVs0#J~˖]zzBJ$OzEg΢4yZ׊i_$ɘ#儵O='lo2fb+]Ue[5mu)Z50ףΰX51 )ym2إsGh$2O`RU"aV#DAu cPP6`/sv߲5kyqeR{{<(y;cz \- BW~qI!gw4L̏5vEYkq럺՘ݷnp]iG j,XP[T+, ,I6 ư^|>6"j:NYB1ݐk]{\'nG3=B&ӓǣk-Z$xaHDŽa GXk*Z؏NmDW!UJ*Ub{rR65YҔFVZ$?1UŘ EZ۠Ko C'wet|}/ɟ#61Zun<>ǐ~&MIIxH N!Mw0hĭ"l&l3aKWH}A; j`VSXtZ ]nGUIO! u"睿 aHnݭzv1w7ܻ6_dE681E:03T@ꆅ S˪4.{Vv]%xu!P eXv}u%8HF-^;-zۻvoߦ6N1>?sdɷ;0r Tο $gA{u00AE L&XY10[- $0&Ii %'s53VU @epIBw ׬/E4䫹sg8-RvVw&k{ 28C]w1>@,a}ۀ)BY?Z!LBDK` q:k[oYߤA1!#+NWbuۘ՚UEE1cQؚedYUu߲V&c0_YE <I130nYbmg!Gw08LG΋ʈ]* i_|.`ƧdY@Ft7ڿl]V`.IYJEܷSWT:+pY*/S40By'RTwϏs0Om:uzیv]|]LJ Oq9 !*қQ΍ze4|T voͽk>;o{vo其C"ڲf=V%))k&j|6XU5mUךʂ#rkBݩ.n*nU2//8LqQb5BVCgmds=?>AH̴[ C>O2#G\.2<0Y=> :͒,}ًd m}{7bojwrGuDڸLv]{0&NȨYMJEhˈvb\M򺺪sgxqTfFĭ6Ywk{l_.p~p; O?dg`,{@ >xa[W\^(īloi/u1ܤ瞯TCegiPH *JA覮oF1,S?icE(A0$ #ݡ1dmk.vp~x>M4}(_##lLhu{lsyNw(/إ(jڙ^b}V /,t~2aWIsfRB$W,AB._qٚ1,*Ϯ:.Ř7B3QEۣ6;l]6w89dpIhv&z[;a?5z`Zxf <<<<<0i7ukvީhV!N*$ KLiԀYr2>?suJӊj󎣘VKom6wؿ.rq|l zl_}n}1ַvhu<,gmGګ䗫h"w<',*fRuz65dZcvRK%W^NtJܗ,0PjwMeZ/Z#^ j Qb[-.kﲹw`~Ab ۻx7ݣQ/'mCen4CFrU<-!Zg;h660P8B5j_sB$FTSԎ\Ixy:-!rn[۵nj4IAޘ?% CVv {W8G6;naM8!i{xxxxbLbxx]f< G;8ȉ YQ<cŀj،4$ Fg$>f=6wX٥DA`.ē~4Wbw9+w6Bl5"Bnn YR7G?2{ocmQ_lPSA۟V|hʓو1S2õ\1W-% SuvuxcԨAA/Qr(4Lr!K$y1Ͽ2>nMʇ}̯BT,rN|?a`|tֻCj-/y+ӻ gwFi(SЬ8Ov浘Ovx7lF @ \L=#HLYٝ:/Y\V%N I mWF|(iHjX[)!^buo5LDaqR5C ^|Ž0ˇbPZ6U&y 5\wm-]&Wb{U##Ąsjh[[41_Fh/Va(U|U2v*\ &+:-uiV9f_+#:7>D>kLGL! BK+ Wdu_2@! LY&Ì_ &#.))J_) O_e|1{tz]L1bZԼ^e{xxx  *B1kb8y?ۤj׉]M؎ 1 A3$5Z.˴ZY|=Z>'1p IDATn$ݏc6iC 8Y)Ki^%#+kKsyЪh%Ne3ӽ+ abgi?N pQAD_e"gp|t4 w6Z`B;o L|@:08;RX2k6hw:h"ug _|Cs"~eYb2>od',fk ApٚV^i{xxx<<Ҧ=Sڍd6+m#ͳkKK uS\ۛyҙ^lsK[hXm C7N7 ]LYEz6.^Y-?EsF~i*Y.u.os>-F܀O_'gBhOǦ ;,9̼^tJs|c 0!0mDS=<<BAU,(nU$ K *QJк8(%ß'vr|jw عcmk,SD N9wc$W0q3ڜ)9(=KyEڐ%W>ɷLQD` a]#qv xxxxx<`ҮskFV:}ťwv ;Ȣ:ԥL.wL)odh*ԠɋLFG,e~c̏%}Dg+{k~>`ꈸeF}T%>cGح]PˇwŽ6Q?z)]"}`ҐOpkt]ZqLa8`ߧpITrZ\^+q80KըC;g9b¢MiH!Xگ%#(}6I,[?Ž>Ƿ^fu+DV, )a&|y )"rJtoUltJ|Ӈox譯v(0J3KmDں\υԅuQeTTT.CD\KYmx0ȻD1]._->li^#'5Q0w!j3P%Ɉ/¯ұjyJOYvV`kd|%Qx$x I#"H8❑hM!8,H[6Uih!~ʏCu̟or|Iuu 28z!)*7K8sd=~|d1<;F҄`*1brsRa+_ 9?yۖtVeE@dg@^-<ҷ} ߁[@C̑u~#istuwܢ@^Z>pnҞv U,Q &B([u*nH"6\j~5kԂʄdSfA@!2ĕl19?N&cWz@V\LPc w2˽W6x6kN+bP ` ~,Fi;p(]L[]+6'}HF1ncvIB\V{񐔶no.Wɺg4ǪѮٞ+VKגTWAłZ0&t"B0lG&-hn֕hwr8ĠYN6%^865n :kQu.Ŕ11'd|Lb.0b1aHEaDǘ ܦΨ"IJi齔Ogmm GTx8J[ ˵MEXPe_թ6z6U3+ʠjQWY-h+0$nwX[sZF2i\AG0[mv>Fdp78Rķ Z/# \| gw ߹"E;oS2*o`EL@FDNvwNovG9ɧ)xxc^ɵ4k3+NH}Ib0kx3"0 WL+Χ#N.hn"b mPMXQ~-μ8M rEf/|!Bvvw-6vg̓$*WGFYu!:Ё@ 2̮13ڰ찳ڬf,k6,ذ1 1$IHnutuwu]gdGGVK3eiUYx\X`;9Gס{pWJ (ǎZ[}Iۦ>d|5"U2dȐ.Fi,StoLUĔD}3ۏJ# 32a`&o_Q)[}|n h>H*2y}aB w>lG*{8v7@n"Ĵl\RF9"3sԚT3el*AKý-;7rh/.^^M] DLegȐ!#,R&tJFvJH׵FyB=}Lo+e'A'}0ZJνm/A-A#1!@H=+(T-TtkP0, 1{.*;PH)ՋxWAMX:Ӥ1*s˫H9ǥrlj _uxX\m}Y&Zk]h{>R!C NʸɈL)U:q;)c;"`ZN0fIH$O| ALScZPK!**@/S!hp)R_,3m{p_ĎZ/\  !ve;9fVY< 2d-N('scwlUNO#Sz9T~E2GZʼn:ohǫS~; \@c96? O[㸺-| O m_w?{y **G]*ӿ bcDإJ +,g]/)Q iS(_\T*s>;[P < <|?id!2dpH{I}xxBxgzJ|"OQ2vi.p}EA&- 6/htc_sh~|AX"J/pps 8i`a`#kvzAW.Eb =)(8˶)U-vs,Zo>U.=À@i|X_zKOmR#WS)4R(R ܂E3dȐ!T'L1O$IT'eT2 bB)(2λCPHw +s"[ z<>Rj6Or'[EU-P@Aq(*gY8u3zu^Eɿ>'9&>rR&GΫ(_'RKbʐLZk  X0ZcNw`6BZs5VNciʵ9GF"}?|\awkޣ6[!l\Kx+iyXV/rT; ΐ!CHIgԔWS&tJZĈ65[ =*~NXo`= 1"2|6Gc 3="z'}Q oЏ٢QwCZnPqkBSןBJiY E& +X^?:zy6k)8\};xGiq )ǚa]0 ÐC 2dx)՘$~R\iuN 44hx!-UJfٿZCO\hb6JyzCAݍ 7.~{ >pJ|wd'Paa Ej3MOvSi-P*W( +l^ފ[G+B il4k[M4Qa`eb&i`2T2S2dpHW16͝Fү&[;M͓NrLs:T)Հ0Uͻ[v4QB!gt-kV fy <5|FC\#>\掻)R׿;W(Ri00DV%g;h= g{WhҰ쟋5EMۓloMKQeYض|R[fȐ!Cז, YL825=$d&5qf/C>L }\N#p$RbZo"P% \?_yGecףՄxc7R/PϰY2;DVqra6=~''NݭԬݥ1 ۷rGH#C/[t94M,# ɐ!C 12dJ{ fJH2CP{̆@ T fDm iH" Z|>Z|#ULKsk(`HI.X,R(-+$m&3dȐ!kID+'IH FD'8&!]P$ ?v)v1!)V ]ǖVy/ H*BG}l"Xu+^ ^@J..~,hR(1MC%j f,ޟr =Z`(eؖnٽ} A|˲(JT*mhR^ 2dL$W9).'Ng=uζSٔni$7Yv- ӡs8{3 aZVc KD'_?q#'-+4X\] {e5$B˶B c)wiW-Z ۷4.p2W_^dD)=qk4g6Z)"jJFXcJJ+4ZQ|eM`~!%rzbeQ[!Bː!C ]OExYzHnFZxxa]OGCǿ&{񏱞MEc _hBڶ*EyK{P~['dPg0|Db_`(>pB;R3VϜcieR)' )|ަ_@7^% ܺ\~P?)^ AT>Gτ?Z-srPaγ,97ORrL_Œ<ë rg-_7O 6Biɦ{nw(]np{siR0(!8 Ou-<40ML"/Ri.,ruWTb1a1ێi`[6JysGqI f  +=Nn!7ߣiZ K++4gg)X9Rɋ 2dW1AiC_'N$/X#ELJBWihIwꒌ MJ +:c۶M.gP ѧG(KGVRFRbv.GT:Ӡ9*sKaT 4s2k -pgvp}N2*BU8X|4Mj33,~4˅RŧfȐ!CLf*eS51"Չm*,QrR<Ŕ/XgZ^8SJau,q "j[7insڧ ~Hk!aJZ-,ј\)%FtR'|F=ؖMZ }:(&T jVVX][g)&bXe/DF2dpwI)k_LU)֥̮&HORcMSIsGOTR2Q8MPRQorEkov^Hqa:\ 9@cv9\ ƦS.^*RDX6RA 0Mb@Rew>nuqmzyWX\Z٘\.vx S2dpH[J_M{Z|ڠW1⁞T10Q(web^,~?yBҥt0 ۱)KT3th>j=:d{.JQ vrJLzARX.89lƈCgidzO|&!lJ4)kuvi趏 \RDVlh6Výl'R+f? 2dpIs''lB ]IUfMM^'z3}!0hŠ jAsAˠ P'E4)#/P((8N˲0-AhS Szpat,|ΡR*h6u: =<־ϕ{pǕ=.oskE)灦Xx%ț,#gr m-v 2?h9I!)D:~\ÿ廊"d|J}[rB!C"f|c!qS~QkF8N3-PBR=)ՎO?+_<ŋ=n "ѭ@5 */>0˅:.ӪH;C ^kcLӔLa͔9P(Q4SLZ;S|]7\GHv.zX7E FCh:b ggS*Wsh:W-'?sO8] R8U</w]ۉNy2dȐ.d ʹl}ry=͚=$>5SLG;e+t[/'Z@ Gv e~ %xA pb,AHq4A V7갴FNe4>-6oz@RN\'X\37?dsB2AiӲ·GUΐ!CDS&|\-JLSHfKw-ξw*t ([깇ϲ{na6p e<lC/>ssXƐ4r9@cprDUn :aNq?|a{s_+w{bp|B [˃ 2d&ӦIB& XzI,OzEד Crf!׫X}n , qӴBT~y h}+8MqB?si#8pP! uX=}'y#>W_ο.;OR̅e{#h 8,gH2dȐ.H$ SH>LwS+θN1vLj~mZ?T+M`JUQ? n/={CG][/qz>.׮a(JT%X&Bx+m~CcAx1C΍=u/=Mw{ѣR@.#Q 2dpw=j^E:qay:~W0Y"3$3\.nIЯ42]^̈٣\K:m2RcZ!J#P'۴ZX֋<ې0A^hP)WȮw|$|a"&R8 ;^2d;Gi듼Ój2e+չW$?bs|jIeԿZ;&\6ACR(":JHa x:#VOu =mGKK8emvI~i!hz:'u*E"zOGbXRT q3Y !}5rː  Bw2SC1>Z2-dq ?XƔsH/v복  +uT#[{ p7,g7'b)e;{a3SbR}DI-ǿWUz<*ǎرGf\svbJ%@P38:o cJضo)MpSޣ(5@lڤ}sхϰ!b0u}n^ԣӎ_=&9"9>>f^qc&;;PmzlO;kGBykptԝPCxޫ_?O>?4ZkRAR u3d2IN3I kaɔT(sYOD)O$NQ%C+!?&=~ƍkloݢӮ<}R-%W }אBt XJhĦb1UoPPpryv֣5# @Ϳ{wXZ~T*< f]wjᛠ!%R׀tzO:|qh^92ئ9EcvBaePnow-aǗilT<>Po{fGkYr?"~M<?xKIǶݕv׻Ҟ0QIqB,i|Hi!$'Xy.kℐ]F5*2Q @#DK10MFMsnB!|S1\m"pni4h%Rx9vv Ft*I)@3@ F DiaYV"}sz GF2w5`a6 r"9ӌ<Yu1÷O]xD o,>ztٹ}ȣOcڊ[\oi5֚/"fe^>s}e=W%SVj832ϐEɽl9L5-rp DRO'Sve\$RNH4AP 'M$c=\@ B zE?gXZYX(J^ȓpKR\QXeuέ1 <?|52KKKXaY<\i'2/ @%%^E=rNjioIAdUm%LS8En7W^۫0l.+e^D2X_s/sB1 "vO`ȿE`&iQ(T*gfh43TU\!t888`~q^ڵ7٤cl=!GGmj;-CoAp}ZN`S9%{.q{.ׯrϽWǿTsX]>MPxN}<|ʰDnfSmh9&U4iRvjw&Y O+JFgffb8H![v9u=sύ7ӾJ۶)El ej;뎴k+ZZNؽۡr&u7;m-'2OH#ys~nH*f5&P!P ŭ$Mc.Dib01DBGgq#n>>z0jd `irg/,*^'qr%}Is^viSi~Z#g4 `0t <@pF/KmhZ"F%;!i SkZ WL% skJ pLrwq}2O=uZHVZP(FigxݐvZ WBIOLjSSO q1.NDdX1Wtmˡ -[ 4*hPdεĶn#m3p'_ W(svQ@Uy}\ː[&wg(UfrHL)0 e N;+4JAhjryK<t=lQthTgԣt7+7Y|fffT#w #Ƹ=dI˘ vi)c'q{Ѥ)6R$,Tck8>鶪qj|O BtG{fa!&h#-ZkM?F/s{`^iFYLƮdh!Gq(ͳ~{{ﻟOfO|vݎ5A{=ǿ ~wn`Y6j߾3:A%%5=ty,je$vge]h-"=+>ZVS%}NpЪ&-枤^@kMf0:yZLTO!kZ0'QdgY[[s毿PGq$i;=K+%J"J]HC!B = P#re61]|oyCۀW$χ^n*\u 4HQ)muh@JF,78qFc#L٫TrH) Ҟ؞25" %1/rL?wX˚nvv<*4j.8>pW^(Z:c` G)_Bubg{^7`UkԪUy [{=A'Q~>/(#;ҫ:n[D+@0<4Ey}:}j(AX6P0 4A9< /.J6QRÏ<(PVN˗͈Xސ3|76WMN}t'$ k1bR' QֽA2qqjœ%k5#pf=s2^ДJEx vwQ 4M0M WWY?}gXX\+7n)+t&5/FJE \Rƈ *|`hOk%=M&Z-[ T% ud%A$, ?u-lʚ{9::rB >462 ]|0LrR\){-Hd@3n1%|Y>{G=MQOCgMtzyhV4H1Dr8i}ą σ#|l'^(hαz*t;[^]ќP,aZ6Ȱ@4=Esl xJ9~з"V|ak6'FSyuCTRTq ˎzǖ2|mO\sBvОteugCžP*c9hwP~.Goa5*ȳqc'><|/mt!ÄjMh3omK3u|aa(gՍ-IwP͔4q礯'wU.\"O?:݇ےsщfVOQ`&eQ*iͱrj-a9@\m#^4U،_bwo?W{n`0zdޢtޔt.] _xG}+\YB dpfVaV(~ x{++k.g!_8u6} T\Xbnq,b)b~:Bm"h˱zBТTd Z0P bm69s_4p &9 !Wl؇A{78^ZlQ) "b^|qF2|Wvr>9M;W4xù3w;w龽T~TST_Q8pR]uN=<, ;49?r>p4!&nw 8.S6nWJr~1L|Hkcbuz͢ǥZtYbw66Z FL<3W3&Vt[C`mcS1= ׫b;R*n)8j&;{vk;{TKPJ"RF-0R0L2pk댢`kƈ.aV 7/XoQ}F&2(ph6μ5>.Q#9)ѐd)xVnviuMjܶVʊ@ɨ q=B"XGEnF!#>( c5ץZohuhmZ۠Pձ\7Qŋ3ԁ,K6ն5'jJe:2Uv^iѨO_a^ l#- o~wu9# [hʦR[sښuZŶʴě[iBa}ntϪVQg禀L K䝷VвφL=^Ϣf)IU*lףVꬱ>1 LEm ϣZSk4Tkx v79/s Ba- |f3*tb;ja6nUUy߇Z]t;u{[Tㅏ2 ̃ K/>SO=ɍ7F&έӪK*m93Nh j]2^VE*qc׎sx#rvY摬)" ׂ.듉wb=W>?AkD)cpmYg)HSAFC4:4UkMmUEda,?7}aSV%3aDEXVylll6t:ڶrn]-NY"M^ Õl^DR/=e#2bRO~^gUŪZT %kg/ ^$H*i,q$7&"!fNLce.I呎"?c"@'q ۷_S︈Dd6OJVe_'n/%h Ðh͛7g0`YfN3[;Sp᪴ve&r宀M^}[hvsUTr~[d*r#(NSL._guf,4Ͼ&/>;Wy[G|vRY%EsRFsx+T"0u]:eQT]ͧ!:9o_|b]<]1R.gUٯ}?%Z!dLԱ\8cP5G뇈1!@I+  1a Jm#k8WxSi+ ( qa&1Nrj<T.ѿiUjHˎr/OQD%^cVirMvZNHQ*3sܴTDN!yl.2Y#r^U9{K|4 "iuw|a +XA:! @!H)Ʋmlq=tٺ6Rm4llhwq BJ0FX2Qtx/~ ^ nc<4}t\]GfG$%Jx+1/)iZ<1I6,60 L SFH0qygַwiװ]0 hSk`Ҳͻ?߄AUitoërgnH~y<͍W*vAZ|m#(QD=iϒd%ie9 vf~p_&=R!g9jIAN~bf;F']LȗGM4g}.?"AI z^{¶QljzKkmeT-*rBhrk115Zkw0s{<8v} s3ɿѕ*WRiq ,o,d%Jx*k҅ʹ(űF{~w$kf3=%PIMl=Eՙ+=Ej!@L|y{< @?EH,vHOM&>O糖xPUitCømnVj!" 5..?KOUl\4:G<~z/ICLN9z5.N]H%E|%i(QTioMj/Ƚ,\V[fOƊz^%Rc|b3W=gy;:?#ezF(6si'!C56V?ft<՗ JƳ:|q8BY(BX(T4O\eq+Cc9R>?݌C }ޠe- IDATqEVqEHM%Jx=H[(%'O;UfxEe(63u4l46tD~G6Dv- ;jVEh:\`cZ??d:fpj!lV6TM,/ϵ"2ѢC+#}?wIڀag<o08=F&mZ iK+`)_%J(=݄y^5P՞m<-%(,o\QA=1iI}UW'fqg@$G1nm}\|V0 9=:h:L#"1avplA<#B)QowQKXG>ip{] {9z LJL}@Pkwq+!ᴖ 3?CQG;5aE%J(Q5&tL"_Qe+m2 PS`}zi\_^"^M<\ޙ݁c"rjlc66vo`YY>'G(«7=!B%'*1B !Q]HCkT ?#s՗8qq0QGWo"57/Sa:2<=a?e2Bb[/J(QPiSn"=,+Z䴰9e.͊JY,' ۊ|Ds NW` q<*t *lVh>QkǢ3, =52?\\yKl.-фtxg?%NʢhQmר(cp}.c!,S?wZNjCH^1bY>FUPWoF)lSkw6xRڬ` }F(1a`E%UrD%JMJ\Yem:UnATx8#tԹ9VCL gR=6)$?[s\dǭnbj]s% WZԖ,r!%rjKjFw#Fﻜ:.Bjr|-;2'0D31v%J-X X fL~NoYgvQ`+_ c8<InjeRK$Zkzx>veƞ5tw"/jxp$qq AY(U51qF [k\~X!CGiBMd+4( S' F3PJ(QkLښsvM:EZ}[f<;ޕs0Hg1tj wY8hq~-2vmD%Ӵmvq:2Nr\j6zfM# BR(S#'D& Μш"IF'ALQE:DڠHx%JzfY&I'繣98.eE 2+ҿЯ,vf}F?FyRm߆Sh|֛DZcUJ-)Q襯ǖB l{Lzc7' NL11(bu5Q,D%Jx-IW o3B.D$pQf Hv<#4> _e 7|g{zqkV_' ᇘM`Ŋp &2r=Jgs+׆^}Zt/V &:jѼ0 _,}#6:;g#[]D/iwgwu~5&<9@..}5 B"i-@v]+ a#ܺsXK%ğl2_CHU] nF١꠼ (EkڹvG"<\ td0|g<?9:'W*Lzw,\{eL27sj:ij%J(:Tڬ06KgH0ќO-rZKkWb䤋Et-MKz|3Rg,ǂ|5 R:D'B*jfwZ[j^Rë7p*5]Ҽz锷?Xk/Xՙɵi E2N.XPqU-r1` B* - HK(Qu$ubڒ9 XAcRd1j(4[j%[~Y= ;7ٲQ):Urcma5o`ٟYgm6kW91^y&K=dg1ÿ\⻫ żz,cήu{痙|?p b[mPn8xnʤg!^Te";޶] ^D%^'69M1JM"gIZhMTi[E8SPg\¬ KJi4\B%bE ;w]kbdzZv)y _!ƥ't;]m)dw4-gzD0|{#؞P6NIöʷn $wBjQnRC9$k}D%^gҎN]sD`+i]ό(DTFqbgf힝Όg4Z|O$mrΚĄ=+%COޜX[B`)YN?qrxdkWp*ҲcJa{6H=?K}?;$;t *v؀& _|um x]cyURi(QQig8VܢY&_|e)^{95 ! D^!im:Sj%.2|&2 %G*s޽ek }BqOq+!WMԉ?;flSkO?z }t:pn&@yoi/x8&Nt+#N]D?iakc3%ν!|t (ir+(cQUZ]j;ַ]W$*bxD78#h!D,̿V5iÊt"<"]W9"GiW}: dKm1SfEhoz6 ,k+,k\ΐh؟T'%d1&` BxSпĩ PC-AmBDJ wy<8x3 1`^Kcc*-Td4 g{%Jјs=ɝOf)+?Ĥb:"6wF\@Efs^0m笘}.(o,6y_+eTj4SBu{DIDn]'Qx jRXn٥Gc" .NLUX]dte{ě/_ŷ1>_}9FJ̻i/l9Xt-Wabnv^1VdtYȽMu!0Bb9z=4qkǟD ZA|;s*i ^"bLlB> Xυe"8 !+r+TZk4owT[X:v4xɱ-Q@Dض΋56v㏾x|΃{.e!%y"x^45,+y QKTګ+p]L_Ei+ h5MsV<g+c]b87>G?nm(*ɻ[5DfRr8.\a+:Kҫ+,vV-F,dFv-I[:WŪɍO18hB#)jLrkԉկBf \iFh3BDH$%iLkÅU]jq{ T:ص&ʝyjCYex#%*4aOS|qa)-TX+{r7W#?(k?uuk$o%g{Ƭt !zy Y֪ݬhgm -q})X"lOC^5gٿ<2iǟ89ɵW8 'ׯ0<.Ҽ)H=y+S =vakiC+L7~v/ulF)8PAOS5U1+b}F㱱UgsFѬ :nj" ñfx"M a2M:00c G0S7Ad*9M$f2+أo_)ۀۼ$o(^mzzzJ"^_\g^`e*ȩoIm6IU*Z]*1x?LFLCɘ`2& AhܖTUٶ][r+Xn˫bUjXnVP@Y1Q 9 M!$/Q/0XRW_w<-ZՐzU%$cp\H)A)$ T( (Abajē%"P^djW1.>j8{qo,i̶ EQ ɋeC<5re m.{Q/E ^\3"&5ˊbF8Rǭ (ģ'DA@(J^+sX )vI{|&RvL҉0AbՊ^!.7-Z^WT=gq$RB!a4*&p%F C4( R mЕ \ KFg%ƽm}ZFċ/nz8q۲Ko>f(uը%wgDmE[Yp +*lyœsxY|22&oAtMFD:BGb\ǭ5 FdE"T*\vfPdts~D=xzN|:,Ը \G`Yѩa06#m øoIb&7Ha0F"Ǐa掻4 |Ivwpafw7WY浭&]%*O:t,YvO ۿHQ|pY:XfX/?~4խҊ[AF:I~(JzIt1~DsJBy UW8-娹6SRj>c_9f({ IDATpT Kh,%PJA[ l+"TbrALP"&r42`np=Up%z( QJa6m#\.Qo)5m]$D3c19 s-iϻ߬u%c6UQzB5x8gE,>UkpڄMM"b[S#b45ݱViݠZ3>#9A۞\'DFJ&kqmHu> әRG7T+Q2n{K B b6MDc))&?=~Vk@h|GJIVv۶_`7Ē%-sf)H;gej.@V~X:#2> <{Tb-{8oT;`çƌn(E:vI CH}n|lF*հT]Zw:o}Dgt]ZA;{kx)^"m`mCB 4!͚^pl$eE5.aqa7_j]Q}1cF.$JeH1oWLsP:S͝ג#a.~l]TU;+\V 䀗|@00Qb2/!crn(حmz3=p;w߁*7 V>ץ1)K6] y ͚4 UkC7!$@FcCi5TضDi R  XF_Ú>I;F0oKeYTU:jq6ek_ilM;Konmji^;l9;,tK0'|uF(u./ 큲(v3.%=-̿;;.ӏ!00 œ(6F0jNtnGaXE.d*XEzeWiz7WxjX__g}}VUJ9g?W7LVLV-*B;mq(U1!$W m0O4W$2Z{M]rvHI!E<¯/ 8K( ̭u(@ֱlq)w޵EWiC!0Ɗ o7ֆlA;&l ~'|V{8M^g}}r<]i( E7+1pfzIɭ:\+ZV4=Ug|C)Ro\L_#DX(s30㜠;_$WЁDwFdygW|_髟z`4eP:8s-(1-Q"fʽwWx'fU$>-"Z\q똼87Ԅgl0-Om|gjΔT*t:vvvemmZmv7*"2O{%W4 l0df D,[UЯ:@lVsQ$Td> eӯ[P[XB0ˆ1a.OGnǪ6s.#sx4q@ɿ@d_48# #" w :Kμǽ o*L1ۻCdkk=677i6%޴x"W@>αD]g.j%K/VF%rL]9*xQjv^E^V_%˩aȳ0Y2y9B1QfՋ15 e <ޙ z(9MdP{A9^܊wWoJA 4Jw엹qOIiv(QL0w"T "ւ=aaiT%zac+΄gkkk창jTYex(\ò~8R|%6+˳XM f_[eR^g*: $sh)ϸ{ HŮq+w 7>#I@>OS: 0D6'݀ Vt*b3<1kبDrM%md|B` mI=U޾ay6_Cm# } ce#m}gx|;W'פXe9D+{wK_<8R(+mG޶_㇊_d\4ˏ$u#pfHʔ R,2dAy!B^7{[, ِHILI| wDEDdFDވ&fBeeFFFfWwsWxd̓ .A>GgS7EѦ޽{ܽ{>azI{W֞pnaWϷ>oٳU>׶qCa~04k&3[w #CkB K&$cu9f&G10-%J"NcFxz cAD02GzkOڹV#~)Ik^ L!I2VY2X$e2djr0y1Y ?V>0[ )Acܹý{qƺ \'@YC!m6"7yjvӲPmiiXsm+ӒŶuu8fHWy osy &r1Uov?kR8 -V5?%Eń1=z'OX$|:o1#d eKՀ, X&0.X\>a1yjѳ?bQ#ӻb_x̭[wo^e{v6(oyWw:JhPۢsWySRM^YM-2j, ZW4[e~9"o<ɇQ2ڕDžZTWXs2:EuU*bbl>~= #gO>wI@ͺmE1}C J<< }lo}Aor PCFDj-Y,f,XY͞32я0<Ħ ]Ƭ`o-o8=oF!p.}OV msF)A뙶t;^cW*Ֆs-(K-Z}“߲BD߂H8Nxgs>s./hW-J2;>$Ӈ Ɇ1Ҷ3v%rW#݉:zB2|gPު3>F1&0`˰j@,jDLޱ+XC1O${_$@bL En4|dۘQNfr!A:MKrQ+#RYT!f0cq&4RD^K_?!`r1hmoȱPƅ ϻ,sw?)$0abL#zH#&Ip0AeN}`Of_&>o<oAzuAv"ِ2i<#Vwn FO"Bdw͛/< ]r>V/jE0$B(b0~|Se\[n1ǧHinm s[\3۶{dt/}ڶtI[ܝ*O*p[|XPQZXRl\&}Dsz!pX| Fa]RdEZ'$%a&_(2V2D&,?.N/0AˎvODwp~ᇆ4Z {qD !p!Il:~ ySF7o\/OikMZ;ŭҵq};>MUZG?o]k^[F`z]f3U~kE*sZv)s韓gbx|D|xFtxpDX6A%+jI:.I&/H\C$"BN g/xjgHpB'!ҫs 4 q-Z—npq)#^>F-#]#rġ&&kw|fMmNbAiVfKQS-LpOɻ (FG W,6px@ӻ o},{ 0A{+udiR() g$OY< ({l9&KL"=k%mc9bMWyY^O׮EgwD?[n)Ţs]tK=/0x9}nܸkƝ;w8::/Oiwd8.P󭣬- ][h.j+-|_ۇߘa](o\ig74Qd.mUi]j7~297 {&Ӈ;Nrk-,&+tz)#3jDzC .21;`Sc z6C=e0`{$KƤiJ[x]/:"0\+"u&ٔb͛7wV'mOGyV,j%Z+AWK W6+)Kêل&U&74.l7-' ?:!u] /f3E ?e&5YZP;bP0>< :z ~xt*S/sF;aϒG^htD)wDӟ#0nav)GdW^IA|עKܹCEܽ{U-I:" Xo9eZ1IpvvVS~SF`Btz3=ab] SYk)F4hAzdgm %R(Y+F)\0[E5j@ s<ݤ66E8XKWYng$\-suWKm$ͽœ6͋*j2OY"1µLr+5AHc]ٿ->?ŏ= Ac$ÜL?~bt!,a9G_E9Bma ƨZF?H1% +Zb%%hn|'L޿9Gv[Ub?ʵRn:m%duT8<Λ h8REpQ!wg?  {$InB XLaX_2 BL!a:{DDO01D1ш4ED_!xEP^Y.9\rޠw07i);`p@8e)_Rlo!l ;Yipv鞸=>(#@=i{|Ill6ήfxH㶤/tۭ֔z#,D*ŵ_S؍\XMI,SCL s_ B8 c /<N B ]IG;o`$j{}VO zLo@ XI$=|/cRG_{xbDLn28`[\CvAEiWwlkrU#>c+=]ȴ- J-ўmڜՌƨv]QbVV~M+/z6Kb1SzO~NfC&!*f!AaB(Ʋck,(_fOOnOH;#\ sys0;F?}[/8 _ItG8>b1oNrg6LEY$mfy;[uHK܁kL˞EZHK8\Z2kjjݚ%)˧)jͭ` `̐%O {Hh |o;2HM4>&CG?"^~&C.O?zO97}&ϟ0椘#œ7Tu6=<<<>nzt+Y;[Ǿ춂;yKӸe{`bqJ²xl!SD||jp0Ȟ* 3d'7`,kb f`_T.ߙ(%D?CrqeGq\<%F0ggCeތ#Cxw|x)s9#TGd&K[`@x?ŀXӼLe?-XojA"<gEFDY}/ܑM3sN0!qxFxx lJ:,M1fx 3nk=<<<ۚPZ\)\8]!#[]*Rˎk:Bos6 UUw.snW :lV~($V!^nb"6z@(4"C A!=ܼ^2Ī%DŽ2I; vSJ͡d; m{[ԳA9::i!yUu[q6zp3:ڥU'5Lcŀ=:k./ĸP ,zUb]ť2q}ans`Lm"=<<. F:FXK\qӮ;U2PIPX$%Ř^Nؽ[0Xixxxxx\io)іIGYh]UgטSKLZZ]Z U+u-IDv FuGJ1bY@+sl62 cegeF eȟ˼h(+!z+DHRYxxxxx\VGiCѺ^+Qk[󵛳"_7[+$jQ|B妨-Hܮ4y-, )I2d+.ЂXQ3)VX2STeA~&  GDŽ# uySxlڇgF5V׮rs)pe8E˶׷j9/* 9ˋ$lKPVgٚh-^_wq аxJhd+f}_IkTPΦo1ylD=Sgw# +J㚕vSB[XxMh[f]h%k5V?ZReJK҃W /[aY-e$/IV*[ll W R:-r3r0? ֤k/_!A#?gyԄ7W~]%MՎ,iGfmO R)N;lLukAR!fwFL# cj+[Qk"v)Ĥݨ*1,ɷT&nV%Ѯ-ɸ 7A~9'A~lFGyCZq}$2GښǠ՚-eeym#3[:ä 1f<:n.MWk] dr,H}M%y`0B.~~sx]x(yQJT |6;0F%%mNyfReIp+KVʝHlTkQ ˪ 9>Xs O:<~IuR1-窪-D[-{JTUvA)Tuh xEEq?_syP^׈Ujjc󚇇OAڙv؃V,f[d+u,h|ڮ xɸW"F@^"3jYtY.UM)Tk4 NM.Yq$`mnVH_UFwro97Y7GD[s\\lv(}H#cyhd`٪[D\%\#x|MiW5w\lUcӺi{xxx\i׈!4Q XrGY6_Mۻ84JofqhTk!VޗJSZm]vY{6%jVmFcT@\JRU+ۍֈQ[!ߖ}<7GVm -A$˚[ekмFk7;{y[oJH=.EKuxmq;=<<<<^v6ǰ|u nsX:-ĮI_UgO̵lZ: Q𭋃wն-sU٪۪T.+Z*{qi; ||Mm[m1G@mu[1oSɈ~mWMcF9>uK ZvNP'y\UNjl'zxxxx\ފ%RwvUyoMc4J6YL+Z:Zl^"AueOۢgso#mKO+겡Nv5 N|ij -U nnU; we봲&՗:8ύ{1(, jmʲnSڡԡI~NuxO[UK[BcTvOu}A[6=<<u@kZƵT筪N{Ӗ=Nvnv>~QSqFa[šImsWE-Nh][ Ti\{T[K& ?ӹ㻺x: g[N3IZUw}eq/{xxx| cM p)fɼkݵ[Szx.cE{,vqcF] WC*ˆM.{ܲ] ] \f4:T8Tdݲ6f ÎǮ$WuPu97鰶on'rRڴ4Uɥmєf_<ۢ[~7l""m /MdY:.zNREuuqB r8Sݏq).in⑆yr5AC;s۾ػ!}At巎<<<<uSJw޼QTKBBjTzϣ\ϹFeh虫qqJ!! dzf Am*Zф= `nj!ɽx_dY#Zx--նn.kԩkE 6زA؝%{M d=r[kUQ1w~nhVUnЬ(ιܶFiCŠE<*ٗlFXxT䥠s:`BPZ,iɕ+zna(˭:2iIyȎ][]]lskŎvS\[~8=<<<>]Qj}YUbP*n+x?@˽%Bj}[~{/ Y~;Tώynޚ k"Z9Rh6z:ZaLO( ]f䥥$[;^ܟ/ l۵+m dUmu-?̱pUWh#nϭvJZ;ח٪W"no[=<<< eUIENDB`BOSSA-1.9.1/install/background.xcf000066400000000000000000005053571333742133700167050ustar00rootroot00000000000000gimp xcf file8BBeEUnnamedCC | icc-profile H HLinomntrRGB XYZ  1acspMSFTIEC sRGB-HP cprtP3desclwtptbkptrXYZgXYZ,bXYZ@dmndTpdmddvuedLview$lumimeas $tech0 rTRC< gTRC< bTRC< textCopyright (c) 1998 Hewlett-Packard CompanydescsRGB IEC61966-2.1sRGB IEC61966-2.1XYZ QXYZ XYZ o8XYZ bXYZ $descIEC http://www.iec.chIEC http://www.iec.chdesc.IEC 61966-2.1 Default RGB colour space - sRGB.IEC 61966-2.1 Default RGB colour space - sRGBdesc,Reference Viewing Condition in IEC61966-2.1,Reference Viewing Condition in IEC61966-2.1view_. \XYZ L VPWmeassig CRT curv #(-27;@EJOTY^chmrw| %+28>ELRY`gnu| &/8AKT]gqz !-8COZfr~ -;HUcq~ +:IXgw'7HYj{+=Oat 2FZn  % : O d y  ' = T j " 9 Q i  * C \ u & @ Z t .Id %A^z &Ca~1Om&Ed#Cc'Ij4Vx&IlAe@e Ek*Qw;c*R{Gp@j>i  A l !!H!u!!!"'"U"""# #8#f###$$M$|$$% %8%h%%%&'&W&&&''I'z''( (?(q(())8)k))**5*h**++6+i++,,9,n,,- -A-v--..L.../$/Z///050l0011J1112*2c223 3F3334+4e4455M555676r667$7`7788P8899B999:6:t::;-;k;;<' >`>>?!?a??@#@d@@A)AjAAB0BrBBC:C}CDDGDDEEUEEF"FgFFG5G{GHHKHHIIcIIJ7J}JK KSKKL*LrLMMJMMN%NnNOOIOOP'PqPQQPQQR1R|RSS_SSTBTTU(UuUVV\VVWDWWX/X}XYYiYZZVZZ[E[[\5\\]']x]^^l^__a_``W``aOaabIbbcCccd@dde=eef=ffg=ggh?hhiCiijHjjkOkklWlmm`mnnknooxop+ppq:qqrKrss]sttptu(uuv>vvwVwxxnxy*yyzFz{{c{|!||}A}~~b~#G k͂0WGrׇ;iΉ3dʋ0cʍ1fΏ6n֑?zM _ɖ4 uL$h՛BdҞ@iءG&vVǥ8nRĩ7u\ЭD-u`ֲK³8%yhYѹJº;.! zpg_XQKFAǿ=ȼ:ɹ8ʷ6˶5̵5͵6ζ7ϸ9к<Ѿ?DINU\dlvۀ܊ݖޢ)߯6DScs 2F[p(@Xr4Pm8Ww)Kmgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) T*P!Ze8 Clipboard#1      88!&&&&&&&JZ[[[&[6[F[V}{&6FVfɎ϶~):'&7*(*)5**3*)**+*+/+%*++,+*+0)+,-.--,++,+*++/+,.,-.-,--,++,+*+$(%--..-/./.--.--,++,+*+!C,/.//0-/.--.--,++,+*+##.//0100/0-/.--.--,++,+*+**/112110/0-/.--.-,++,+*+*!-223210010//0-/.--,+,*,++*++,022343223210010//0-/.-++*/,,+*)++%/-../13443212210010/../.-**)*+**+&'-.00/144334433210//+-//.,+*)*+**+ Y-0/011443443210/.*,//.--+)*+**+ >'/0/12234434434343322/./,+/..,+%)*+**+ 1323343343432120/0,!+*..-,*'*+**+ 2344334434432011.//&*,-/.-,-.)%*+**+ /2343443420//.-0(*),/.--+**+**+ /234431-+,/.--,+*+**+ -23441/-/(--..--,&++**+ ,2344301//,, ,-.--+*+ *234434334432100.%( +-.--+(**+)234434434332100)+-.-,+++*+ %23443433200-,*+,..-,))*++2344344344343211/*,&,-..--)**++24434344344344344322321/,),--*++**+'.123433432232120/.,,+,-.-+-()*+) +(/123433443443223210010/--,+,-.-,+)()*+*~,:+&7.+--5-./-..2.-../-/.).//.-.0+/0122/0//./+3/12013211010//.%,)01223210/./!G-323434433221121//./-/#$3354242110/.//....3556654142210//./--.$16677655454542321220//.//.-.//37788767765543433220/.--.//../(513324899887655434332122/./.--..**225446998879887765443/221210.-./.. #`/3355688988767665332.02210/-./.. E*446898778987765434-/22120/(,./..656788788987787565431!/.21220//*./..787898898755214(-0122100.)././. 4789887787896434314,--0221/. .//.. 278988789861/0220/./..178987896316,02110110(//.-. 16897788532.0 01211/./-. /6798788788766342), /12102/)..-6887879877545.01//..)6979887887887750..0110+--..67887988788787763,/$/12101-.-./.789899889887789889887765530-011011.,-./.+36778798987889787765543200/1/011/ ,-./. /+4677887887889877645531120.01211..,-./.~:752/0+$!y#ߪ؎  _֫ ߠ  [        R )- ;/a9! Y\1P ITy#<I[BO6<~; 2 -F' d-ÊYN*)Ƞ92#߇I ) B( hZ'9'('&%0(*+''&%&&%2'(('('&&%%.()(()&'&&%#/)()&'&&%0)*)(()&'&&%&/)*)(()&'&&'&%&/)*)(()&'&&'&%&/)*)(()&'&%3)*)((&(&2)(('(5)(%(7)((9)=()<(=()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<*9*,)()0,(,**)())2,+,++)**))(..,,+,)**))&/-,-,++**))(/-,*)*))/-,+**)*))/-,-,*+**))*)(/,-,,-,,)*)+3-,+,,)++2,++5,-(+7-.*9-.<,.<-.<.-<.=.=.=.=.=.=.=.=.=-=,=-=-,<,=,+<.=902./////325κ79<<<<<<<<<<<<<<<<<<<<_6342 "<0%W/2//v/=/[ 3ԇ6ミF9 ;<<<<<<<<<<<<<<<<<<<<< @ @ @ @*+0133443443443223210010/00.--,-.-,++')*+).0223343443223210010//0/..--,+)*+)-)//123343223210010//0/..--,-+*)*+*.+./02343443212210010//0//.--.-,,+**+*,..034432210010//0//.--.-,,++*)**-1443221010//0//.--.-,,++*+*)8-3221010//0//.--.-,,*++**+*$/122110010//0//.-,--,,++*+*"*/011/00//0//.--+*+* (-.00/0//.-,,)*++*+*"+$/.//0//.--+*'**%,+--../0//.--,++**))',,3+-//..--,+**)$.((),*,-.--,+,+**(,++.--,+,+**)1+,,-,+,+**+*/+)++,,+,+**+*0#<*++*+*2(*+**5(!**<'(*:(&<(1( ,-B#/..023210.-0-*)!./1344100(-'((*.03443443431/++ ('+*))+-1334344344221/, -!**+**)!)13342121.) )*++*+**C133102210144220/,+++,*,+**+** *.243320/-./--0/332322.-,)+,,-*,+**+**#1442/+-233220/+,-,,-*,+**+**.24342/$)-020.++-23212-*+,--,,-*,+**+** "134430,.01210/*+.2212.&,--,-*,+**+** &-24432.-134430/-/0211/,,--,-*,+**+** 123432""13244342/-12110)*-.-.-,,-*,+** %03342/,23321123.02211-.--.-,,-*,+**)* *03342,02432),13.221,-./--.-,,-*,+**+)* /13442(1232/.1/-12110)+-./--.-,,-*,+**)* /134421232.--%.1212/7%././--.-,,-*++*)**' 02344202321,+,/1211.-././--.-,,-*+**))123442.2432',02210-,.//./--.-,,-*+*))123442+23420)".01221/1--/0/./--.-,,-**(0( 123442&023312013220.,'-//./--.-,,-***/23442,+-3343321/.).//0/./--.-,,+**.13442./434421.,0//0/./--.--+**)( -134421044211-+10//0/./--.-+*() (033432,.8/2210((00/0/./--.,+)*)* 0344320-)+/122.)!/100//0/./--,+))** +/234331.*+.(.110//0/./-,,'*)* ,234330,9(/12110//0/-/-,),')*(*234330)-".110/.//..,$,)**)* +.244332,+0112110//,)+*+*)*144321.+$(,/2212110//,+,+*)* %-23344344132112100//,+**+*)*-0343433434413211211//.-, )**)*(133434413211210/.., ()*)*+-133 413211211/.,+ )*(*/1343344132110.,- ())* .023344344132112..*+ ()*//4677878898764544331012100/+-..046688789887765745443432211/1/-..0-33668898878766745443342210/--..2/2456988776543433212110//..-.."12247978876656455443211211/0.0/.--.15987677674543443211/./...<0776765744313210101.//..(36766745544343110/.#/456655443422101//.!-1354553343223210-.//.-.".'3143442312210/.+.-..-.$0-212343412211/.--.-&0.4/1241211210/..-'7,(,0.0121011./0/.--,,/.21121/0//..-1/00/0//..-.//+//00/..1(;.//./..2,./..4-%.-..<-+.:-*<+4- /-N#4235677643251--2468988998635,0+.+35897788789763.. -+.--.,/268878797763/ !1)-..-%-678898988653, -./..-.,G58878875577546878677540///0.//.., .2698864312411438776210,0101./.-..--&6998863-177643/01101.0/..-.2778874''246530.1776671./0110/0/..-. %788774/256765401366562*0110./..-. )27787721598854'3566300120101//.-588786%$5886325665..12110./..-., %588784078775568256651211/1.0..- /5887157977,14827765500232101100..-..-. 357897-5787326426675-.223110/.-,. 4788976773223&256563=)2343110/1./../..+ 577865775/,/35766212343110/.--787836886-056641123321100./.-,678987/79875/%246635023321001/..-=) 678977*58977677558766520,03433231101.,.368966001887887787867642-243223210110/,,3689773498987898665305433223110/0/.,,, 158997659987787651.53343121/.,- -58898602@37787764.*45344331/.-.-- 5788751,/36762-(345334322100.*-,- /379798610/2,2554334313110+/,.,, /78787751A)4564534433221/.0+,--,786884,2&3566453443320(/- 037788761/5667654430-.,-7877898752/(+1277667544343230/0/.--)/78878988998789877667654431./,-1478878898796676544310 -.-.-,5887988796656644320 ,-.-/0588787967665420/ ,-.-368998778868676654201 ,,,.-,25797887632/0 ,--o" "ؾ$&г(,1/024;:< -   N       K    : j ۴  ػ      : օ 7  ( Oi iߓ]y  #"xr$!k'+f&\wJ'Ar!:)7h-K[/Z|1Z2M5>6 2}8;=d0$'An.UlwzC3n*s 1sm+ c( %  `b ~))(W} D,}U[CDNp D(# YѤ %j|{o 12TV: 5Q 8  6~+YSe7tB&7G ._7#vjdC@6Yh*24!+@H , C( D J;\ b? qM D }  %yE1S6 2% +$ ; M @ pR/?d9)(<*(<)(<)(<)*'9)('(:)('&#&1*)('(('&&%$3*)(()(''&&%&-*)(()('(&&%&%+)()(''&&%&&))()('(&&%&%*)('((''%&&%%&&%-*0&(&&'&%%&&%&&&))((%'&%%&&%&&*)(''&%&%%$&+*)(('&%&%%.*)(('&&'&%%&&%,*)(('&'&%%&&-*)(('&'&%%&.*)(('&'&%%&0)(()(''&&'&%%2'('&'&%5)('(&&'&%%1("((&&%%4'(&&''6('&'<&9&7)((%%5)(('&4)(('(&%&2)(('&%%%1)(()('&'&&%"%0)(()(''&%'1)(()('(%'&%%&&0)('(('(%'&%%&&%.)(('(%'&%%&&0)(('(%'&%%&&%&-)(('(%'&%%&%&&.)(('(%'&%%&%&%&,)(('(%'&%%&&%-)(('(%'&%%&&%&-'&'((&'&%%&&%3$'&&%%&&%&1&&&%%&&%&&5&%%&&%&%3&%&%%&&%3&$&%&&%&,())(''%%&&%&,()(''(%&-()(''(%&&%&&%&,('(%''%&&%&%,(''(%'&&%&%%&,(''(%&%&%&%$&,(('''%&&%%&%%&,'('&''&&'$%%&%%/&''(''&$%&&%%&.('(''&%%&%&-'''%&%%&$&,('%$%&&/)''&'&%%&&-)''(''&%%&%&/('(''&%$%&&&..=.=.=.-<-.+9-,+*:-,,+**+))1,+,++)'3-,,+*)()--,,+*)())(+,+,++*)()(' )),+*)())(()(()*,+,++*))()()('1*%)*))*)(()()))),++.)()())*,+,++)*)(()(')+,+*)(**)(()).,+,,++)*)(())),,-,++*))*)(())-,+,,++*))*)(((.+-,++,+*))*)('0,+,+*))(3,+*))(5*,**)((1*.)**)()(4,,))*6+(+*<*9+7+-++,(5,+*+)4,+,++)((2,+*)()1,-,++)+)()/'0+-,++)*))(&1+-,,+**))*)(()0+,++*))*)(()).+,,++*))*)(()/,-,++*))*)(('()-,-,+*+*))*)(()/+,,++*)())(())),+,,++*))('())(-,+,+*))*)(())()-*,+*)+))*)(())(3+))()())()1+*)(())(5)(())()3)(())()3+)))())(,*+,+***))--,++*+)())-,+*()()((),,+*(*(())(',+*)*())(-,++**()))()(,,)(++))()((*,**++**)()'(())(/*++*))((())).)*+()(())(-**(()(()((,,#+)(()/,+*+)()(()-,++,+*+))(()0,+*++*+()(((.<<<<9:13-+)**)Ǭ*+.,-.025146<97Ŀ5421010./-.,-¿-32644-ÿ,¾-¿,¿-¿,¾,¾,¾/¾.-,ɉ.ſ-/.<<<<<:;6n<3g01ЗU%/I,b*-]/Y+590,o: 3Z-ٰI).ȥ .!/G0 0"2&N536+v9[<<9|zsaD 7߼G5=4f2n1 Q0 .0/ p/ . . - _-2 Y34K-56E6QV6 `,$Ě2Ve,'a,X,0P,ۆesi>,EG}%, 9y,#F/EZ0zz-:2..~"2/ogo /(0 @ @ @ @B"./14434413220.-,+ )()*,144132/,)&,)-/011/.*+&$:%*;,,.23210.+.)-+.13441.)Q-'**).023434432/-)) (&+))*(,-1343343443220., +)**))033432210.( (**+*))*5/33132124332110/,*++*+*))* )-243321/.11-.0033211-++&+,,+,**+*))*1332/.,%..210102(+,-,++**+*))*.2442/,-21121,+,--,++**+*))*124431...020..-/1121.#,-,,-,++**+*))* #,24432/+04420/D/0221/,,,-,,-,++*)**))023432)03244342/-02210))--,-,++**)*( 033420+23323//110-.--,,-,++**)( )03342,/2432..13.110,,-..-,,-,++**)*) .13442)12321.1/.12110**-..-,,-,++**)*( /134421232.//-0211/-./..-,,-,+,**)*) 0234420232/,,*,/0211.,-./..-,,-,+**+*)(# 123442/2432-/1210-,-..-,+,,+*))*123442,2342/&..011/0*-../..-,,+*+))') 123442$"12332/020011.-',./../..-,,*++)%)123442*,.332311/-(-//../..-,,+*).13442- /424432110.',/0/../..-,,+*)) .134421,--0433433210."'/.//../..-,,+*))(( )034432)-/344310+.//0/../..--+*() %134432/,-,/122.,.0/.//../.-,++)* ')) ,1234331,)+--00//./.-,+)+,())-2344320*./00/./.,,++()*) #2343320',.0101//.,++) J/2443320+))/110/.,*,())*) &344321-(+.1101100//.,+0)*)-4344323212112100//.,+#$*)**).04334434432112100//.-, )*))*133434432112100//-, (),/233432110/.., , ()()02334321101..,* ((())*/133434432110/.,* )()(//24434432110/./+ (-')*-0.144321/--+'('(,-./1122/-,)1+ ,|+)"-,-/.,--..-,,+**+))%!-+.././0/0/../.-,,-,++,)*))((*)..001./..-.,,-,++,)**))()7//1101./..,-,++,)**))+)/122101./..-.,,-,++,)+*))*)),12231121001./../.-.,,-,++,)+*))*))--133231121001./../.-.,,-,++,)+*))*))-2443231121001./../.-.,,-,++,)+*))*))--23344323112100/.-..-.++**)*)())')-/33434323110/..,-.--(*))()K#3359978788764220. +,-)168789967630-)/-24456541.0)$>)-;/13687641/2--/2689878778861-r-*++-24799778897631-. ,(.,,0257887867642, /--.--,-57877899878988776642+ ./..-,-738878868776797766420/..//..-,0688754255225578656520/-.//.-677886421)4327655646,/00/./-.--,-269886302765660/0110-//.--689765223475331377661*0110/./-/.-,,- '1798864159988753/4565530.01100/.-..--479787,487887964 146554--021100/..- 58875/77876678335655412100/0/..-,- .5879614687711582665664-01100/.-..- 26886.67874263366554-+122010010/.-..-,- 468977 5773123#146562232300//00/..-.-, 5667975796300.03566521232110/0-..--* 67889746797 1456551/1332200//00./..-,78797/78874'!23565636.1332230100/./--++ 78797'&587874574466520*0233220100.//-)-67797.0288987787676642,23321010//.,268871(39889887653+03310100.- -+ 257760205887887653%+3432232210/0/.,,,* .589986-137998765/2543321/.,- %589876511146762/243432322100//*.),-- .67878861/01155443312010,.,,,- 168875/325654432232100./,-+- %67988764)235565433210/0,-,- S37877650,-4565543320.0-,- )8778751,03657654534330/4.-,+-1968878878765565534330/'(.-,-2598878898788786565455433421 ,--,-/688788787865654453220 +,-,-13788788787877665432// ,-,-368877878766545330/ +,,--46778788787766565532/. +,--446988988664323/ +,+,0233698878765321/++,+01245677420-10 0|.+" 0/03201122310/./..-+,!10223454232112100/0/-.-,,0-334454323211200/.-,*);33656655443320/0/..--,++.)3667665423320/00//-.-,,04778566445433432210//0/..-,-1157887856654533233220/../.--,-168998785665543323220010//.--,-3-17987887766543321122/./--,+2%4887887857655433221122,-,-* $;-  {i  ܆     u ̻ 9 иV0     k   xٶ  n X   1 |"(!i-.G-ʝ4rp޷C2 r-"C+9AC$eDxW Yϥ ;fY/!@Zg tufg $ S Ni I+j#6/ G !tyC!P 0>Xh% 4S*1  69(Q> 7x Y,7Vkj7 G;i}0f6L N3KzB-\*Hy 6> ] nmѶWx e/ p ; N [  j Q(/涁6 \6# 3 : -< U u _ ||Q0g/[4^ Y-n#KQ 'ʟ[%6dU+ p \( ur%CT#u֨2c('(''&%%&&1)(''(''&%$%3 &'((''&%%1)&t('&5('&&4('%&%$2'((''&%&1')(''&%%$&0')(''&%%?1')(''&%&%&1')(''&%&1'((''&%&%&/'(''&%&%&&&-('('&&%%&&%&&.)(''('&&%%&%&%&%&,)(''('&&%%&&%&&%-('&''&&%%&&%&-('&%&%&&1%&%%&&%&&2&%%&6&%%&4&%%&&%3&$&&%&&%&,%&'(('&%&&%&%%&,'('&&%$%&&%%$,)(''('&%$&&-('&''&%$&&%&%&&,(''(&&%%&&&%&&,'$%&%%&&&%-(*&'&%%&&&%$,((('&'%%&&&%&%&/&''&&%$$%&&&.('&%%#%&%&&%-&(&%%&&&,('$%&&%&&.('&)%&%&&&-(''&''%%&%&&/(''&%&&.(''('&&%$%%&%0(''('&&%%2%''&%$&>&)?';'':'&(8'&'&7'('&'6'('&%&7'('&&'$&%3'('&&'$&&3,++,+*+(*)(('0,++,+*+()(()3+,+**+(*((1,)t,+*)**5,+**()4,++*)''2,++*()((1,++*)+()('(0,++*()(()31,++*)()(1,++*)(())1,++*)()(()/+*)()())(-+*()()%.+*+**)(()'((),+*)(()())(-+,+**)('()()).+*++**)(()))1()(()(())('*1((()(())(5)())()(()3((()()3)')(())(,*,+**)())()()),+*())())(',+*+*)())-*++**)(')()'(),+*))('))(,+*))()(')())((,+*+))('())(',*+**))('(())()/)*+*()())())).*+*)*''())((-*+())())),+*())()).+**&('()(()))-+*+*)(()())0*+**+*))('())).+*+*))('())1+,+**)(()2(*+**)(')>()+?*;**:*(*8*)*7*+***6*+**)8+*)**))'))3,+**)'))3031t54210z110/-/,--1󽼻154Ÿ3,,,-,-,,/.-,/ò-0.01>?;:876733/03`˰pCB>3! 7č]$5u4C3O281 0 / J/ . u. -O-Q!?x3)4k(5NA6gS6^,fmbd,0a,Z,R,_C,mbz+,*|,5rrT/;h0-k!-%#. z/.Q k/^@8@`/C0M0,2֐0%=h;/:S9f765 @ @ @ @, /243434432310110/..+-.-.&()(*.133434432311/.-*-.()*))()-133432311.+,,-.)*)*))).0233434432311/-*,..*))**)('*.1433443232110/-*-*+,+*')**)*-13443433//100,-+*+)*)&)/1334431*-0010-,&+()''))/3343443431-,//00, (#(('),04344300*!-//- )(''((+24434434420,,,--& (,334431.$)))'()-4344320+,)(()14431.02442/-*.,-/.-,'2442/.--/0//0.,'344343011001100-,'244320./-,'144310-/.',&044344200-'*(/4434430-'++ ,43434431/"*,++ ()'+243443/,.0,,++))(%,/3344322/+.,--,+')()'.244344322.-.!,-..-+((/143434432210*0-..,*))('(()/0334322110/+-..,+$+**)'().13344322010.*../..-*()**)''(+/24432210010//.-)()**+(./13434433210010//.''()*)(+''0-13434432210010//-,-,-)!*)()((.133432232210010/0..-,++,+,**)()%-133232210010//../.--,+)*))()%-02432232210010//../.--+,++,+*+))*)(()'./132232210010/0../.--,,+,+**))*)(()'+.02332210010/.-./.--,-,++,+**))*)((),&.11010//.-..--,++,+**))*)((',)/0010/00/../.--,++,+)+))(&++/0/00/./.--.-,,++,+**)((!-)../.-.-,,++*)((,.-,--,--,++**))('(#!<%*+,--,+**'&)( #,:*'((**)(()(1%))*)((.)**)())(()(+*),++*)*)(()((,)+-,++,+**))*)(()(',,,-,++,+**)(()(),--.,-,++,+*+)(&'(('++-.-.,-,++,+**(()(')-..--,++,+**('(&,-..-,++,+**()()($+,.-..--,++,+**)(&'())(%*../.--.--,++,+**))*)(()(,,/./1121/-,.//./.--.--,++,+**))*)('(( :,/10112210.//.-.0-/.--.,,++*++*))())((!P*/123323220//0-/.--,++)("'))(('013443322322100/0-..-,,&(#)''((02334322322100.0-..,+'*('('034334322322100/0-.,+))''1477879887676655322/122'+,--,+-3688765432.122,,--,+,16788798988675652.//121---.--,,35778788778875531.121--,.--,),258996978876776554100,/0/,,-.-,+158878787788435565400.-,-.-,,359978788774,1456551/'-,-$++,3889887887630343440 -+-+,/39788742.(12431 *+-+,+/798878797787401211' ,+09987878862),,-+-,+188788787500,,,+4989989975206878878878641/113210'788987988743124434520'898878978875655655410'688788787765532210'678878756422*0&4889889877551)-(39987889841'// 0988787788764&$1//. +**/7887889877878403600/+++049878898788773120121/,+,,+3887887887763.201221/-(+,,3588787787877663.61220-,,,3478789887787857530223320/+-.-,+,3688978976756554.23221.,-.-,,*,-47987788787675566545232-,-.-,+12578988997676754544522+(,-.-,',,43678788776545445221101,%,-.-,++36887675754544524211/0--/,,+,&267887654453523221/./--,-,,'2478877545445232212/0//.-,-,+,*1468776544523212212//./0/..-.-,++,*02478775543522112212/0/.//.-,,0*25565543212/0//.--,,-,+0044554421211200/.//.-,-,,*,2.3343212112/0//.--,++ 0,232331211/.--,,(/2001011200//.-,,*,#L)./001//./--+)), '0:-+,.-,,-,,)1"--,.-,,*--../--,+,.-10//.-.,.-,,+,(/.1//././,.-,,+,'//00110//0/./,,+,).01101//./..,,*-,++,&-.1221010//./-,),,()12321010//./-+-++,%01221/./..,*+,,$//22121121/.//../,,+**+*,%.23221010//./,-,,-,,+104245566210433221011//.//..,,*,>%0365563203412110/..//.-,,+,'R-35688776765433212110//-+*+,++,+4679776757554210.$*'*,++/46799887674554432321.*,+-*)368778987765544321/--+(͹Ӱ   0''''&(  tWвԺռ '{#) :1-+(')˾&'%$%Cޫͽֲǵsb9kTXH_1#NK3ONZP8xdqEax  S)'s Z ts' [ KHOhiX%|?u$ 0  'b$( 'Ma'ȗ '꽢yC-'׉uQ *l -/@   :u* =7 AE 7]|S $n2ZwwX-"%#-S"~!+ *;, wF F Cu@qR1##ib<ľ' t ? : N?ŏJ#IuǯO''":b|{eA&-  '9CJLHC6#1M|Ӿ0.y-3* s) E($k'='&&&A%@&))' QtTiѷNϋU2  'Go u{1 B B Ja''('&&'$&%%2'('&&'$%&!&1'('&&'$%%&&0&''&'$%$%&&3'&&'$&%%&1(''&&'$&%&&%1'&'$&&%&0'&%'$&&1'&%'%&&%&&%0'&&%%&%%&0'&(&%&%0''&$%%&%8&1(&%%&&%1)'&&'&#$&%%&%1('&&'&%%&&%0#''&&'&&%&%&0'('&&%&%&%0('&&'&%%&%0'('&''&%%&%&0'&&&%%&&%1&&%%&&%%1&'$%%&&1&'$&&%%&&1&'&%%&&%%&&1'&'%&&%&&%2&''&%&&%&3('&&'&&4'('&%&&$&&&2'('&&%&5&('&&%&&3&('&&%4&('&&%%5&''&&(&6&'&%:&&;&;''<&%9&&7'&%6('&&'&%%5('&&'&%&&3('&&%$&%&2'&%&&%'%1'&$&&%&0(&&%&%3'& $&%&%&&%1&&%&%0(&1&&1'&#)$%&&%&&&.'&%&&$%&&%&/'&&%&%0'&&'&%%&&%&&0'&&'&%%&&%&%&&&-,+**)*')()2+*)*'()()1+*)*'(()(0-**)*')(())3+*)*')(())1**+*)*'))(2*+**)*'))(()(0+*)*')())()0,**)*(()()0+**+*))())(0*)()()(0++))(()()8)(0*()(())1&**))*'(())()1)**))*'))())1(**)*'))())0*+*))*')(())1+*))()(()()0+*(*(()(()()0,('(()(1*'(())(()0'**)())(('0*(*(()(())1+*)*)'))(2,**+())()()(&1*)**))()2+*))4*+*))()))2*)*)()5*))3*))4*)**)(((5*)')6*+(:*)););,*<()9*)))7*)((6)**))()5)*)())())3)**))()()2)**))())(*(1)**))()()0)+))'())((2)+.)()(())(1))())1+)())1))())()0)+#/(()()())().)*))*)'))())(()/*)*)()()(())0*)()()0+*))()())()))-2103120111181220000011011223253456:;;<976532102¿1011¿.000- 43HW3z5Ry2&1gb00ߚK%0BV07 g0 ,88s3Z1 Jibaa`_2,171 0=D\{507RC70y 0z WO0O1]X12<3ja45z6h6E7&8n:  =w;;?97(6R5[4K3WAY)21e\=19/ 0f\+00WAX/@/루/(G/ @ @ @ @+/143344322322100/0--+.$((*((,/43443443223220010//0-.-*+*+*)(5-3343443223220010//0-..-**++*)(,"'043443221010//0-/.-,(*++*)((,/3344322110/.-,+**++**((%24332120//..--./--..-,,+*+((%(( ".243200/..-/1..,+*#,.-,+()*+()(('1242-/-,+& ,,-.--.+))*)(()2341%,--.,())(()(( (.234/& ),-.--+!('())(' 2334+7-*( ,,,--,,,')('& 1334110//./11.-+( )&,--+,&(#&' *0344332232200//.00.-,*',-,,*') -03443210//..-,*,-,-*(( /134434322321200/.-,-+**)('0234434432232120010//0-..--,-+*++*)*()(()(&( 0234432232120/00//.--.-,-++,+**+())('(( 12344322321200/.--.-,-++,+**+())('(( 12344322321200/0//.--.-,-++,+**+())(('( 12344322321200/0//.--.-,-++,+**()((&( 12344322321200/0//.--.-,-++,+**))()('( 02344322321200/0//.--.-,-++,+**)*)(()('( /2344322321200/0//.--.-,-+*++**)*)((' /2344322321200/0//.--.-,-++*)()(''( -12 212/..--,++*)(,010//.--+)'$$.q/5688788764554432/2#,,-+*03977898774545441421./-.-,-718877898876545443433210--.//.-,0&)488788788776554332210,.//..-,,03889887654232210/.././.,,,)788766566432211321221/-./.-,,+6+ !177875543322136210.+(/122110/.,-..--,+,6771411.*" 0/12210/..--,++*-7796)012110-,++,+ +27893) -01211. -+,,++* 6788/70.+%"0001/0,*+,* 58975544345441.+!-*00110'+',+ .5896876776776654325420/.+010-++ 25897987887887766564433210./11.++ 36798898876767443211011/..--++466798878788767655443412101211.//.-..,,+*++ 468897889898776564432100/.-.,,-,,+* 677987787676554544342211211//./.-,+,,+ 6788987887887676654332322110/.-..-,,+,++ 7879788767675543433221/.--,+,++ 678878767675543433210/.-..,+ 47797889887645434324121101//./.-,,+ 4677878988987676554323110101//.-,,+* 3689987899787765432321101.0//.-.+,++,+*+ 1477677676566432110//.-*%04554433211//-,+&'2qN ̶Ǚ    ˦ Șۿ Ȁ           ĥŭq$g  3jh:aa % X,վ}m\H1 zy$~cyj[\TL@3" f9  z~Lf5  YWS* lb  K pZ>'$!a I ¹y\LG@5'k +ð|oe1 qW95ѵ|[ 6 7& 7, 7, 7, 6! 5 1 õvfV +Žp`P=+xvl`SF6%%&'&%%#&%%&&.&''&%%$%&&0''&%$%&&%&%0'&%%&&%%&&4&%&%&&2%&%&&%2&&&/(&%%&6&$.&%&%&&/'&%&'@&%&&/'&&&&/&%&&%&&0%'&%$#%&&2%$%&&%&&/&%&%%&&/&'&%%&%%&&%&&%&.&'&%%&%%&&%&%&-&'&%%&%&&%&/&'&%%&&%&/&'&%%&&%&&0&'&%%&%&&%0&%&&%%&%&.%''&>'*))(&())/***)((('())/**)(()(())1*)('('(()())3)(()2(())()3)))())()).+())())6)(())'.*))())())/*))())/*)*)))/+))))())0())((&(()2(&(()/*))(())/*))*)(()())().*)())(()()')-*))()()())('/*))()()((/*))()())(()/*)())(()())(0*))('(()())).)*)),>*.00423.5./x//02//.-//0/.>t0OyE1%s2E\//p3|349554. .{.y.M@.3k,/P6u1Y.;3.ۼe.// }/3//̿0D4$:    {N='00Dropped Buffer#2     #B0000u"$( &'-$m$% 6""#* 3`N(  8hfW=  &Oic\VE'   &04+' (+i~uk_RL^pmbUI>5.( R~wnf[PC@QheUI?86  ?z}uog_TJA41Ma[IA=5  0g}}ysmg`XNE=2%%E\MBA$ #Pustutqoke_WOG?6-# ANI:    >fiijifeaZTLF@6.&BR&  /U^]^^\ZUOIC>81( !4  $DSRRPMJGB<5-#    4FGHGDB@=7.#    (;>?<960*"  +1.*%         %  - "      )u"$( &'$  $%! ""!(&0;,-IT>% !N~oR5!!PudH+#%*8h~xqiV:$$ !0=L^k{{rjdWD2"$ "3ASg|~ulc\WM<+(*"3ARfxog_YSK>2'$&&6L]tǾxrh`YSNG?7/$$ 'Vytj`XSOJE?94.$T~vmcZTPKFA<75#$Cvne[UQMGC=6,$@5wwnf]URNHE;2 #%fÿzph^UROKE8)#T{ri_WROMA0# CxtzqibZSRJ7&#03wwmhw}sjaZUR@-&#!^}tnc`oukaZYM6""K}vojbWUm}xjc^X@**";z~xqke^TJLgxlcbO3!%,c|wqlf`XQH;Hdni^A'. N~}|xtokf`YRKC82@coS1( =mxuvvtrolfc`ZSNE:4--IZC#'!/[oknmjihga^YTLB6*%)03:0$ #!#$Kheggddc`\UJ<0( ,21! "=]``_ZRH=4*! &4, !0PWPKC7.& $1  =%68/*#!&  "&  @  $*#  *"$( u('${$&_s"w~v"wvmu{jŕvizepkjz絆ogpjhc^ޥxc_cf_\[\Zʎia_^bZdzbUQYU4؞mUY{VTN᎘ɊcQHSLzUFK]UlXPWVK։OL}SUMXVkLLLGK]Mҵ~_HONUԲJfLgUհWLGSUկsJQUWRRQYUUgKR\UO\PXU}`METVUvENkTpU٥ZQVX[UsOUU ښwʴ`VXRfUU ܗ0λ}iR'wiOUY[ 옞ïxdKeR_T`[ {Ӻua>RgMQZ[[ vtXusqwGzyZ[Y[[ ~*Ӂ~{yvb[aZXYZ][a^X{[_T[ad_[c[_ca^B[U(na+(((b &MG"),$w"}Z8>l(!Oo Bv V 5g8$\ $&j R<tB%mgN5 5  X *c     G V )/Νi!7{{٫uAL鸄N[ƒ\+Q /4!AQK)+40Drop Shadow#1     $I4040&   .*  ''*# % 3LVL9% # #IqkN4  ! %RfH/ #Pκ}]@) $MʹuU9$   4YȭlM3  ",8G\|dF-   )5AP`pҹ{[?(   &1>L[l|̲sS8# $5FVgxƪiK1(Gf׿^=! =l дd:  IֳM#  I⿉P$ A{ݳ{D 5l˚a1*\۱zE  !MŒZ-?x֩q> 2h㾉R''WСi7  I޷J"  ;tʘ`1 0dٯxC   %U ÐX,  Gԧo< :rἇP&.bĻΞf5 $Rƹٴ~H!  C|ɼ}l\NFNl•^/3dþq`PB5*"+Ms@  #GnueUF9-# 7fR))AOPH<0& %IioW4 ## +?B2      -00Dropped Buffer#1     !A0000,&$   $# >OC5(  1,dugSB1  7tdH4%  -GiL6'3^: "_ø|bG07VkV j ^2uojkd]<   @ymb[Q  Pĺ}sjaXQ7 &_zph_TH@ 2nxnf]RE>,  =vvldZOD91Fw|~|riaWLB7/"  & $Prv|~unyog_TH>4*# +Timsx}{umdquld[PE;/&"  0S^djnqvwvutpke\_|~qiaVLB6+$    3NSZ`dgklkkifa[SNi{ne\RG>2)#   $5FIPUZ^aa`_\WQJAXulaXND9/'"  1>BGJNQTTUURPLHB9Ejk^SJ?4+%!   )%18=@CGIIHHFEA>:05_gYNE;2)#   %+18=:63/('NaSH>6.'$ #(-0220-)%=^NC;5/)    *TIA>8)  "  IJE;!  IK1   U! ,%                             "   ! %! ,&$$ "$$ $# $0$*!$!+$   "$%L^N?1&1" $95tt^K9% .?* #BqU@. 6U<*#Sx[E4(L|a- #$(jøx^FLquH! #k:yc3 #K}woM! "]ú}uob6"&.m|sidL% !<~zqg_U6*!J}vof]XH)'( W{tlc]XP9$", .czri_YTOA+!7kz~vof]VRNE5"""@mw{|tw|skcZTPLF<.!"Ikmrx{~|ytojzph_WSPJF?6%L+Rgflpsuxyyxwtqniar|ume\URNHC?700T`bghjkoppnljgb[eypjaXSQMGB>75) /LV\abdfhhfggeb_\SY}wnf_WROLGA:50# %/6BNV\`ba_`^\XVRLLn}sja[UQOKB92' $+2;ENVYXVTPNJD>azme]XVSJ=4* $*4;@DHHD?95Tric_ZRE7," ^ "&+/014.Bjje]M=0$ ! +,=hjYE3' $ %08UR:*,%1293!)40% .+!$$!!%$,$v,u  ðGúXqǺujܚs| ˼y'{}z{| п{YsIJ~qu ocw dm ihuij bij멬jek `\d蘦lS`cWXbW[󝢲mTY\XYsUtOVrYB`ZQiQaNqV.XJTwYOMS{Ɉ[HDVTL~^p}٘dLKOL(WhvoPIYKMW)M`q}WKTGPWQS -Xώ`MOOSJUU~{ywmޟjQNkOSXUUusqn?߰wVN]USXWUUPƄ]PUAVUYUUggQRSVUUahae`MfVU`]UUc^X[OY\\VU`[V[[["`_\W][!no`_\\[[$reUb[,Uv+ 6Q1 iΖ`0" 齈S$P>ޯyE~9qҡk( V K o (  )A X Z@wq/"EL e%X@ 1c [ =q { K/SGc J 5!N  m$|#%')40Drop Shadow#2     "L4040        $9@5  7HMF<0%  =_m];  8_}ueUF9-" ,W[0&RqaQC6*!%Aq~J# 4hʽ}m\NDG`ɠj8A{ǹ~|޾S( "OĹ֫s? ,_Ɠ[.8p۲|F   E̜d4  %SไM$  /cҤl9 ;tU)  Jجu@  )YǕ]/4jݴ}H A{Ξf5 "OỆO% ,^Ӧm:6m㾈O$ >wʘ]->u޿Z,5b ׾qE! "Ab}ȬiG)!3EUfwεuU9# &1>K[k|Լ~^A*   )5AO_pæfH0  ",8FXuʯoP5!  /OжxX<&  Axս`C+ B{èhJ1  EyqR7"  >huY>' !-HWSA,# &,' &  )+&&Dropped Buffer     (#<&&&&8$"!  "" )dB Af[D Mfinqrttqlid^VQGAAdg^SAc{zti`VK6g~ujbWK?-g~tjbWK?6r~tjbWL?6+uƽtjbWLA6+# tý~tjbWLA6+# t~tjbWK?6(# oy~riaVK@3(# j|si|rg`SH>3(# g~vled{qg^SH>2(# `y~|vnf\Tgznf\QG:0'# Xouy|~~|vslf_UMFqnf[OE:0'! Qfjnqssolic^UME>MkdYMC70'! H[_efggifc_ZTME>7/`bWJ?70'! BQUX[^^YXTNID>7/'9^SH?70' 9EJMPQQNKGCA:3,'URF?70  2=ADCEEDB>:60+# +OE?7  '2699::973/+'  JE?  "#'&'((&" /E        !68$"!  3#;<"CH9!Hc:  $#"!! ]ye8 $avy~|ztokgb]]|{qb4$t|sj]2$x~ukeV0#x~ukaYK0#~uleYUH0#Žzulb^UO?0#½zulbYUOI70#~ukaYSOID50"ysjbWSOID?30"z|qi`WSOID?920"{|{{qi`VSOID?920!u}unypg]UROID?20*!n}wolbtnf]URMID30&!h}zvole_lwmd_URMI40&!`tw|}~~}zwsnke_YS~unaZURM40!Zknqtvvrtnmhd_YRL[{qiaZUR40 Weelkkmfgda\VPLDBspgaZT70 Q^addeedb_\XSOID=6UnfaZ80HUX[[\\[YVSPLG@6522jfa;0:CCGKGHHEHEA984/,,00Sf>0/05@0)00)00)0) !$58"! 񗆆|||ys 伹vs qsnjjj~fc{ccya[v\[sYUqWUnSnRnSUoTUoUUoUUoVUpWUpXUrXUrYU~|ywsromjjsZUgsZ[fs[[dt\[cv][bo^[ a^[!nU58""!" """" " """"""" "!"!! """"""""""""""" "!5.,Drop Shadow#3     ($OS.,g.,wC($  " /4+ !5UcV9   Jye>   &Xh?  0ci?    %&'')0Hv˜i?   8LX\]]^dv˜i?  8b˜i?  M˜i?  %X ˜i?  '\ ˜i?  ']˜i?  ']˜i?  ']˜i?  ']˜i>  ']—f:  ']߾Y, ']Ԩo9 '^Ԩo9 (^߾Y, (_—f:  )`˜i>  *a˜i?  *a˜i?  *a˜i?  *` ˜i?  (\ ˜i?  "P˜i? :d˜i? !9NY]^^_ew˜i?   %' ')1Hv˜i?   0ci?   &Xh?  Jye> 5UcV9   /4+ "  $&A8 Drop Shadow     308PZZZ8 @ *(0f0v00000;ATAdAtAAAAKhPPPPQQQ&W3ZZZZZ ?:7 4 $02 $1ARe/ "/@Rfz+ +;Odz( *8I^t% !,:J\p" ".y˖X*7m 6nֺy]E2$ 2j֦g4!5i 3iǫv^J9+  )\޵xA'5f /dϼkXG7*  !NÊO.6c *^ȸmZH7) B}М`78b %VɺnZG6( 7oڭqC.   0Id|xbJ3  !<]ŵdE) ",!AhкwO- .>O^ ?kʩ}P*0G_v7dϩxF 'A_~+Wíʝf4 -Mr Dyҳwe[Y^j}߼L!  0T~._ӰeQJIJJLSfѡd0/VBz۸cNNYdhbVJI]޶{@,S 'VǚlQTk~_FEcƍN %K|3hٲYSmɾ~U?M{ϙW$  Ar?y̝kQ`ǵeABiҞ[& 6d K\PnλkE=_Ӡ](*T %U۴|RQyѶeC;]ҟ]*"Ex *]֩oJP~ɡubfgT;4AnɓV11T .cϜ`=I{ǛfB6305QݽP8HuԹ .cΛ^:CsΫyP:48JnԫuLFe˪ .dОa9!  (YȒW.#6^Ͷr\aƛj?   "Pզl: !8\hUXtʠpB! FἇP*1KdvueSHNiͥuG$ ! ;sҦqB#$2=DFE?:9D`ѪzK'3 /cėg?% #&.@]ӭ~O* D #P߿mK3$$2GeհS- $R=u¢eO?64:H^yشV/)[+[иznls۸Y1 +_ AwŸ޽^4 *]*Vd9  &W‡H4‡H4H4H4H4I4ÉL 3ǑV)1ҤoC' .ῖpQ;* +çrZE4% )­hS@0" &˹xbM;+ %Ųq[G3" $咠ϿdF*$tvɳlB #{mfho{ҰM$ #塉ug_]ahr~֮yE $͸zj_XVX^iŖ`2$пtf\W[oѦrA $ʹzwسN&%ɼݾZ/&Ǜf8 &聟ѨtC 'Ie۶P(( 3KgĔ_2) !4Lg̣o? ) !4Jd{K%+ !3H`xvR--  /AORE. , $&  ,  - .4;@BBA>80' .lu{~~}yqeWF4$ -쪳gN4+ɸdB&*ѹrJ(*ǣvI%)ˣrC ( țf7( ᾌV+' ٯyD '˚`/&߶}E &˗[*%ڬo8%˴tjhn|企E%{`J:1/5ARkȐR# %bE.&8SvЛ]*$4 ,Hq֤f0$ *Jyګm5$ />HLI@2Zܯq8$ ,FaxycH2.Fxܰs9$0TzxR9?hڰr9$,T£vMA^حo7$H{ѾbJ\Ԩj3$dʱɥrR^ϡc.$}ίlh}ȫyXaɘZ) %ӿeOVsåvYfP" %Ѳ|PDW|jWmԷD%ϪqE=V{wXVxΨn7%ΫqB4EavzlVL^ÕZ*%д~L32?JKEBOrβ}E & @ @ @ @7fܿh=  K @n׺h? ;#Doίa= )$Bh׿{V6  :Z|īiH,   -Fb~źqS7!  0DYl}}jS;'   (5AJPSSQKA4%) "##! )  )"%%$" *+;IRWXVPF8) )A[tpZB,    4SvʿzZ;"  " 8^˲kE&%3BP 7`žrF$ ';Qg{1[ǟn>  7Ro&OʷÕ_0'Df>rֻoeciu۵G *Ks*YطmWMJJLPYn͛_-)Nz=t޾iQLT]`\RHKbܳv=&Kz $Q̠qSPd}vYDGhÊK !Dt0d۶\QgźxP>P͖U#  :j=uϢoR\ʵb@Clҝ[& /\ IÏ_PkøkD>`Ӡ](&M $SܷTQwԼhD<]ҟ])>p  )[׫rKP}˥|konX=<`М[+2^ ,`ҢgDN~řhONOB5?k˕W/-M .bϜa?J|ƙdB8613L}Q6Cm .cΛ^;Eu̦rJ603BfְxLC_ӵ .dН`9>iռiPHPhɛhLV̪\ .cԤg;6YҸ|ճ\UrȣyQ1 .c٭q?.EwǹmZjǠsJ* ,`~G*2Xğw_dɠrG&  )[ŎT,$:dӽy__{̤tG%  $SҢg7#=cƻoYWpШxJ'  I߸K&!7TpoZKLdԮ~O)  =vΟi; ):GOROH?:AYײT-/ 2gྎ^8!#%&',:U|ٶY1A &UٶaA, !,>Z~ڸ\4  "PBz׹uZF80.4@Smݻ_6  (Y/aƭpfcjy࿓b8 +^ G~ʼĘg; +].]ǝm@  'X =nǠqD" !M #HxÝrG%>)MzչlE%,*LtǪa># 'Ce˳tR45Okz]@(   $7K`trZC-  ,:HRY[\YSH9) ' "%&&%"+ 0 +   # "%&''%#    "+5ALTY\]^]]ZVOF;1' %2AP_n~vhZK=/ -?Sg|vb0E^v² *C_|7Uw$Ae煹˜gE5358=Li™b1&pζnWLJO[rȫyE 'T̹ʳV+'7dȿʴ_5(=eìa9 ( 9YzzX7 ) ,C[os^E, **8CKNMF;,, / .12 0*035541-& .]flnnmibWI9* -휦pYB+ ,˽wW9 +ƭf@"*׽lA )Ùh; ) ^1( ܷO&' Ԩq>'ƓZ+&۰w?&ǒV' %Ǻרk5%ӽ|rpw~C%楅hQA866+"#6`ܮp7$ '>Vjw|xlXA/.J|ܰr9$,MqnK7@j۰r9$)O|̼oIA`حp7$Cuк^G\թl4$_κǢoP]Уe0$xеvqȪxV`˚\*$拾˜kSWsħwXdÏR# %ѴSDUxkVjԹG%ϫqF=TyzZUtϬr:%ΩoA4FczpXKZƚ_-%ϱzH02@LNF@JlϷJ &爼ѿ_=/.148D`Ơh5&t̯aK@>BOf˱K" &ZȰrns̹^1'=lʿ˺i< (#DnƲjA! ($@bľ`>")2Jbx|fL2*  />KSWUNA2" , "$# . 2q; 9" 7N;* 5rZB.4y\A) 3ȱuT71ǬeB%0 @ @ @ @(Hp+Mw+O|Ը*O|ǵּlYTWbv$Iyɮ{jeuȫwG-%'4Nx ?o˥~]E78P}l8#Ev2`ᾏ`;#9ie2 *T #Lb9*S~U* :jx6i̫S0:XfY; DtyO "M˿|R/!070 Ah|rQ/2eձtG# .HRF.C~่]INeS) %*" &VΜd8#$5NioI%  2i㻂I!%9KSH1 ?{ةl6 $)$ KϚ]-     "TɓY0&)'   %YʘeE;?HRUL8   &\ӪmipynO,  ']çrP,  &\ԻykV;   %Zظ{gXJ=/ #U֬}V<,! MثtD$   A}ṃM& #("  3kϡk< !8MSF.  &W_6 &CenH# %C}ܹ\6+JqT) $..&"01cٶa@29Sy{K# )G[ZF22 Jٹsck¯]4 ?kf@.3cê̷d;  $Q{H( FzɣtG' -^O+,WǜnG-9kú\<6bѭhRC81/7Q~šyc =h̴|pfbg{ս ?gø;` 5V} -Ko$>^0Kh "6Me}Ź "2DWj{~mZ '4AN[gr{􇅂|sh\PC6)  !)19@EHIJJHEA:2*##  &  * 4 1  '-033/ %3@MX`fjk.,@Thz, +B]x+";Yy* +Il) 2T{Խ( 6\ٴ{' 6^ʚjPX3]Ƒ^CK,VΠrZa  $J}ں %+./0/,& %@n̼ %5FU`fhhfaXLDJf"7Qj}ֽrK*/ȥ{P. .ΫT0 -үV0-԰S,,쪒Ӭ{J$+{\PZt͢n= +N1&.Dg‘Z-*,-NzڰyD * 6Wɖ\,))?\|ڰv>)2OnÍQ# )+Ov~ѡc.(5_iSGPqڰs:(0UvyeM7'!,NݽE( 9MQF5$6iƎO (%% +Y˗V# (  1XϜZ& ( $07:?MkП\' ))D[gmq{ҟ\& *8\{ќY% ) 7[y͕T" ('AVep~ŌL( !,5?Qoݺ~B(  7^լo6(+?D9& 9i˛^+(EfsfJ-,SڼK )S~wS5(0MzҨo9)NzbR[zU();`Ѩq=*(BnþܺR'*#5[ƙe6+6Fe̤rB +ctͨyK&,ʦzN*-ßvL*-ֺmG(.̮b?#/սyU51fF* 2nQ6 3iQ:& 4G5$ 6 8 9<<7 420,& 3if_VK>/" 1񨤞wcM7# 0jL0 /Ѿ^956A[ɜc40Jh !M̹gL?:62.)$!2WԴ~F!#9Tq +]ǦrE*  5aǘ], )@\y 5lĝi@)  CwѮu=/He ?yɦ{[J@93.*(%" 2^ԿP#  "6N  I׿yqha\XTOIB<730-($!$4V̢f4  &  #Rļ}vpkfaZSMJQg׶N-  (Z̢vXG?82-)&% +_ÿƨzrkc]XS -bǾ .c  .d /d /d# .d .c ,` )X  !Iy{wsniea^\[YVTQNKG 2So~}zwtpkga]YVUTRQOMKHEB?<840-*('&%#"!  ,;CFFDCA?<:730,(&$""!!        葦~ʗZ) 'WnӪo7'(:RoɵҸG'(@`ίqsU$ '7[ŻfHJkŞb-& 5\X<>aʩn5& 7_fORrҳy>& =dzܼE& #FoĊK&4-VɏO &aC*  =o̒Q! &qS7" )U͓R! &碖cH1>t̓R! &璛sZB,.]ˑP &g|}hL1 &KȎN &9NctybB'"=tĉJ&,;L\hk^C(5gE&&(.5?IOI9&1_|@&OKGEEGHE;0,;ct9&率ysnjf^VS\zܫj2&¼ףa+'ЙX% 'ƌM '|A'Ϥi3'íQ% (龻yZ5(}yuplgda^][YVRMB0 (D@=:63/,*('&%#! ) *,9    {N='8Line     [8[dee8\j\z\]]]^^^(^8^H_______`aTadataaaaacc"c2cBcRcbcrcddddd===============================================================' @ @ @ @===============================================================' @ @ @ @===============================================================' @ @ @ @===============================================================' @ @ @ @======================================================='    {N='8 Background     e8e8fv9 %1sϫϷ' Ww3P\h\t\\\\sJKJJKJKJJKJKKJJKJ JKJ JKJKJJKJKJJKJJKJJKJKJKJJKJKJJKJJKJJKJKJJKJKJJKJJKJJKJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJKKJ JKJKJ JKJJKJJKJJKJKJJKJJKJKJKJKJKJJK JKJJKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKKJJKJ JKJJKJJKJJKKJJKJJKJJKJJKJJKJKJKJJKJ JKJJKJJKJKKJJKJJKJJKJKKJJKJJKJKJKJ JKJKJJKJJKJJKJJKJKJ JKJJKJKJJKKJJKJJKJ JKJJKJJKJKJKJKKJJKJJKJK JKJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJKJJKJKJJKJKJJKJJKKJJKJJKJJKJJKJJKJJKJKJKJJKJKJJKJJKKJKKJKJKJJKJJKJJKJJKJKJJKJKJJKJJKJKKJ JKJKJ JKJJK JKJJKJKJJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJKJJKJKJJKJKJJKJKKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJKJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKJKK JKJJKJKJKJJKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJKJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJKJ JKJ JKJ JKJKKJJKJJKJKJJKJJKJJKJKJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJKJJKJKJ JKJJKKJJKJJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKKJJKJJKJKJJKJKJJKJKKJ JKJJKJ JKJKJJKJJKJ JKJKJJKJJKJKKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJKKJJKJJKJKJJKJKJJKJJKJJKJKJJKJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKKJJKJKJKJ JKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJKKJKKJJKJJKJJKJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJKJJK JKJJKJJKJKJKKJKJKJJKJKJKKJ JKJKKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKKJJKJKJJKJJKJKJJKJJKJJKKJJKJJKJJKJKJJKJJKJJKJJKKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJ JKJKJJKJJKJJKJJKJKKJJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJKJKJKKJKJJKJJKJKJ JKJJKJJKJJKJJKJJKJKJKKJKJJKJJKJJKKJJKJJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKJJKJKJKJKJJKJKKJJKJJKJJKJJKKJJKJJKJJKJJKJJKJKJJKJ JKJJKJJKJJKJJKJJKJJKKJJKJJKJJKJJKJJK JKJKJJKJKJJKKJJKJKKJJKJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJKKJJKJJKJJKJKJJKJJKJ JKJKKJKJJKJJKJJKJJKJKJKKJJKJKJJKJJKJKJJKJKJJKJKJJKJKJJKJJKJKJKKJJKJJKJKJJKJJKJKJKJJKJ JKJKJJKJKJJKJ JKJKJJKJJKJJKJKJKJJKJJKJKJJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJKJKJKKJJKJKJJKJJKJJKJJKKJKJJKJJKJJKJKJKKJJKJ JKJKJ JKJJKJJKJKJJKJJKJJKJJKJKJJKJKJKJJKJJKJKJJKJJKJ ?5( 2-# # 7 @ (, 4 /  `$  #   *    .2 ).$ (5 6"  JKJKJJKJKJ JKJJKJKKJJKJJKJJKJJKJKJJKJJK JKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKKJJKJJKJ JKJJKJJKJJKJJKJJKKJJKJJKJKJJKJJKJJKJJKJJKKJJKJJKJJKJKJKKJJKJKJJKJJKJ JKJJKJJKJKJJKJJKJJKJJKJJKJKJKJJKJKJ JKJKJJKJKJJKJJKJKJKJJKJKJKJJKJKJJKJKJJKJJKJKJJKJ JK JKJJKJJKJKJJKJKJJKJJKJKJJKJKJJKJJKJJKJKJJKJKJKJKJJKJKJ JKJKJJKJKJJKJKKJJKJJKJKKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJ JKJJKJJKJKJKJ JKJJKJKKJKJ JKJJKJJKJJKJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJKJ JKJ JKJKJKJKJJKJJKJJKJKJKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJKJJKJJKJKJJKJJKJKJJKJKJ JKJJKJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKJJKJJKJ JKJKJJKJJKJJKJ JKJJKJKJJKJJKJJKJJKJJKJJKKJKJJKJJKJJKJ JKJJKJJKJJKJJKJKJJKJJKJKKJKJJKJKJJKJKKJJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKKJJKJKJJKJJKJJKJJKJJKJJK JKJKJJKJJKJ JKJJKJKJKJJKJKJJKJJKJJKJJK JKJKJKJJKJJKJJKJJKKJKJJKJKJJKJJKJKJJKJJKJKJJKJJKKJJKJJKJJKJKJKJJKJKJJKJKJKJJKJJKJ JKJ JKJJKJJKKJJKJJKJKJJKJKJJKJJKJKJ JKJJKJJKJ JKJKJJKK JKJK JKJKKJJKJ JKJJK JKJKJJKKJJKJJKJKJJKJ JKJJKJ JKJJKJKJJKJJKJJKJJKJ JKJJKJJKJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJJKKJJKJKJ JKJKJJKJKJJKJJKJKKJ JKJJKJJKJJKJJKJKKJ JKJKJKJJKJJKJJKJ JKJKJJKJKJJKJJKJJKJ JKJJKJJKJKJ JKJJKJKJ JKJJKJ JKJKJJKJJKJJKJJKJ JKJJKJJKJ JKJJKJJKJJKJJKJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJKKJJKJKJKJJKJJKJJK JKJJKJKKJKJJKJKJ JKJKJJKJKJJKJJKJJKJKJJKJKKJJKJKJJKJJKJJKJJKJJKJJKJ JKJKJJKKJJKKJJKJKKJJKJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJJKJJKJJKLMJ JKJKJ JKJJKJJKJKJKJJKJJKLLMNOJKJKJJKJJKJJKJJKJJKJKJKKLMMNOOPJJKJJKJKJJKJJKJJKKJJKJJKJJKMLMNOPPQSJJKJJKJKJJKJKKJKJJKJ JKJJKMMNOOPQQRSUJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJKLMMNOOPQRSTTUVJJKJKJJKJJKJKJKKJKLMMNOPPQRSTUUVWWJJKJJKJ JKJKJJKJJKJJKMMOPRSTVVWXXYJJKKJJKJKJJKJKJLMMNOOQQRRSTTVVWXXYZ[KJJKJKK JKJ JKJJKLLMNOPQQRTTUVVWXYYZ[\\JJKJJKJJKJKJJKJJKLNNOOPRRSSTUVWXXYY[[\]^_JJKJJKJJKJKJKLMNNOPQRRSSUUVVXXYZ[[]]^_``KJJKJJKJKKJKLMOPRSTUVWXXYZ[[]^^_`aabJJKJJKJJKJKKJJKJLMMNOOPQRSSTUVWWXXY[[\\^^_`aabcdJ JKJKJKJJKJKKLNNOPPRRSTTUVWWXYZZ[\]^^_`aabcdee    % [  -!.     <   % %-  ! , #     . 'k9  $ #" ½  Ž Ž  JKJJKJJKJJKJK'KJJKJJKJKJJKJ(JKJJKJJ(JKJKJKJJKJKJJ'JKJKJJKJJ(KJJKJKJ J(KJKJKJJKJJ(KJJKJJKJKKJJKJ'JKJJKJJKJK'JKJKJ JKJJKJ'JKJKJKKJKJJKJJKJ'JKJKKJJKJKJKKJJKJ'JKJKJJKJKJJKJJK(JKJKJKJJKJJ'JKJ JKJKJJK'JKJJKJKJJKJKJJK'JKJKJJKJJKJJ(JKJJKJKKJKJJ(KJJKJKJKJKJJKJJKJ'JKJJKJ(JKJ JKJ'JKJJ(JKJJ(JKJJKJKJJK'JKJJKJJKJJ(JKJJKJJ(JKJJKJKJJKJJ(JKJKJJKJKJ(JKJJKJJKJJKKJJKJJ'JKJJKJJKJJ(JKJJKJKJJKJJK(KJJKJJKJJK'JKJKJKJJKKJJ(JKJJKJJ( JKJJKJJ( JKJJKJJ'JKJJKJKJJ'JKJKJJKJJKJ(JKJJKJJKJKL'JKJJKJJKJKLMN'KJJKJJKJJKLLMNOP'JKKJKJKJJKLLMNOPPQ'JKJJKJJKLMNNOPPQSS'JKJJLMOPPRSTU'JKJJKLMNOOPQQSSTUUV'JKLLMNNOPQRSTTUVVWX'JKJKLLNNOPQQRSSUUVVWYYZ'KLMNOOQRRSSTUVWWYYZZ\'LMNNPPQRSSTTUVWWYYZ[[]^'MOPPQRSSTUUWXXYZZ[\]^^_'PQQRSTTUUWXXYZ[\\]^__`'QRSSUVVXYZ[[\]^^_`abb'STTUVWWXZZ[\^^_aabbdd'UVWWXXZZ[\\^^_`aabcceef'WXXYZZ[\]]^_``bbcddefgg'XYZZ[]]^__`aabcddffghhj'Z[\]^__`aaccdefghhijkk'\^_``aacddeegghijkllm'^_`abccdefghhijkllmno'_`aabcdeffggiijklmmnopp'acdefgghijjklmmnoppqr'cdefghhiijklmnnopqqrst'defghhijjklmnoopqqrstuv'fgghjjklmmnoopqrrttuww' (( '( ('((((( ( (( (((('( ('( ( (( ( '(( ((( (( (((( ('(( (((('''((('''''(('('( @ @ @KJKJJKJJKKJJKJ JKJKJJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKJ JKJKJJKJ JKJJKJKJJKJJKJJKJKJ JKJJKJJKJKKJKJ JKJJKJJKJJKJKJJKJKJJKJKJJKJKJJKJJKJJK JKJKJJKJJKJJKKJKJKJJKJJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJKJKJJKJKJKJJKJKJJKJJKJJKJJKJKJJKKJKJJKJKJJKJJKJJKJ JKJ JKJJKJ JKJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKKJJKJJKJJKJJKJJKJKJKKJJKJJKJJKJ JKJKJKKJKKJJKJJKJKKJKJJKJJKJJKJJKJKLKJKKJKKJJKJJKJKJJKJJKJKJJKJKKLMNJJKJJKJJKJJKJKJJKJ JKJJKJJKJJKJKMMNNPKJJKJJKJJKJ JKJKJ JKJJKJKLLNOOPQQJJKJKJKJKJJKJKJKJJKJJKJKJJKJJKJJKKMMNOPPQRSKJKJJKJJKJJKJJKJJKJKJKJJKJKKJJKJKJJKJKJKJKKLMNNOPQRRSTUJJKJJKJKJJKJJKJJKJKKJJKJJKJJKJJKJKLLMNOPPQRSSTTVVJJKJKKJKJKJ JKJJKJJK JLMMNOOPQRRTUUVWWXKJJKJJKKJJKJKJKJJKJKJJKJJKJJKJJKLLNNOPQQRSSTVVWWYYZJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKKLLMNPPQSSTVVWWYYZZ\JJKJJKJJKJKJJKJJKJJKJJKLMNOPPQSSTUUVWWXZZ[[]^JJKJJKJJKJKJJKKJJKJJKJJKLLMNOOQQSUVWXYY[[\\]^_KJJKJJKJJKJKJJKJJKLMMNOPQQRSSTUVVWXYZZ[\]]^_``KJJKJ JKJKJKJJKLNOQRRTVWXXZZ[\\]]^_a`bcJJKJJKJJKLMOOPQQRSTUUVWXYYZ[[]]^^``abccdKJJKJKJKKJJKJJKJJKKMNOPQRSSTUUVXXYYZ[[]]^_`aabcceefKJJKJJKJJKJ JKLNOPQRSTTUVVWYYZ[[\]]^_`aabcddefghKJJKJJKLMMNOPPQRSSTVVWXXYZZ[\]]__`aacceffgghjJKKJJKJJKJJLMNOOPQRRSTTVVWWXYZ[\\^^_`abccdefghhijkkJJKJKKJJKJKJLMNNPPQQSSTUUVWXYZ[[\]^__`aabcdeefgghijjklmJKJ JKLLMNOOPQRRTTUVWXXYYZ[\\]__``abcceffghhijjlmmnoKJ JKLMNOOPPQRRTTUVWXXYZZ[\]^__`aaccddefggiijkllmnnopJJKJJKJKLMNOOPQQSSTUVVXYYZ[\\]^__`abcddeffghijjklmmnopqqrJJKJKLMMNPPQQRSTUVVWXYZZ[[]]^^_`abcddeegghijkkllnnooqqrstJKJKJJKLMNOOQQRSSTUVVXXZ[\\]^^`aabcddefghhijkklmnoopqrrsttuJJKLMMNOPQQRRTTUVVXXZ[\\]]__`abbcddffghhijklmmnnopqqsstuvwwJJKMNNOPPQRSTUVVWXXYZ[[\]]__`abbcdeffghiijkllmnopqqrsstuuwwxyJJKLMMNOPQQSSTUUVWXYZZ[[]]^__aacefghhijjklmmoopqrsstuvwwyyz{KLMNOOPQQRSTUVVXXYZZ\\]^_``bbceefghhijkklmnnopqqrsstuvwxxzz{|}MOOPPQRSTTUVVXXYZ[[\]^^_`aabcddefghiijjklmmoopqqrttuvvwwyyz{|}~~OPPQRSTUUVVWXYZZ[\]^_``abbcdeefggiikkmnoppqrsstuvwwxyzz{|}~QRRSTUVVWWYYZ[\]^^__`abbddfgghijkklmmnoopqssuvvwxxyy{{}}~RTTUUWWYZZ[\\^^__`abcddeffghijkkllnnopqqrtsuuvwwyyzz||}~TUVVXXYZ[[\\^^_`abbcdeefgghijjlmmnnopqqssttuvwxyyz{||}~UVXXYZ[[\]^__`abbcceffghiijjllmnoopqqsttvwwxyz{{|}}XYYZZ\\]^__`abbcdeffghiijkkmnnopprrstuuvvxxyzz{|}}ȅZZ[\]^^_``abbcdefgghijjklmnnopqqrstuuvwxyyz{||}~[\]]__abcddefgghijkllmnnopqrsstuvvwxxzz{|}}~~]]__``acddeefgghijjkmnnoopqrsstuuvwxyy{{|}}~ݍ__`abbcddegghhikklmmnoopqrrttuvwxyyz{||~~`abbcdeffghiijkllnnopqrrsttuvwwxyz{{|}~bbcdeffghijkklmnoopprrstuvvwxxyz{{|}~deefghhijkklnnoopqrsstuvwwxyz{{|}}~efghhijkllmnoopqrssuuvwwxyy{{||~~ghhjjllmnnopqqrsttuuvwxyzz{|}~ijjklmnnopqqssttuvwxyyz{||}~މjkmmnnopqrsttvwxyyz{|}}~~씖lmnoopqrsttuwwxyzz{|}}~nnpqqrsstuvvwxyz{{|}~pqrrsttvvwxyyzz{|}~qrstuuvwxyz{{||}~ ? #   %     '   # ½½ ýĽ$Ľ  ŽȾ Ƚɽ ʾʽ ̽ͽξJKJ JKJJKJKKLNOOPPQSSTTUVVWXZZ\]^``aabcdeefhJJKJKJKJKJJKJJKLMMOOPQQRSTUUVWXYYZ[\]^^_aabcedfgghiKJJKJKJJKJJKKJKLLMMOPPQRSSTUVVXXYY[[\\]^__`abcdeeffgiijkJKJJKJKJJKJJLMNNPQQSTUUVXXYZZ[\]]^__`bccdeeffhhijjllJJKJJKJJKJKJJKKMNOPPRRSTTUVWXXYZZ\\]^^_`abbcdefgghijjkkmmnJJKJKJJKJKLLNOOQRRSTUVVWXYYZ[[\]]__`abbcddffghhjjklmmnopJJKJJKJKJKLMNNOPQRSSTTUWWXYYZ[\]]^_`aabccdefgghiijllmmnopqqJJKJJKJKLMMNOOPQRRSUUVVWXYZ[[\]^^`_`bbccdffgghijkklmnnppqrssJJKLMMNOOPQRSTUVVWWXYZZ[\]^^_`aabcdefgghijjkllmnopqqrrsuuKJKJJKLMNOOPPQRSTUUVWXXYY[[]]^^``abbcdeegghijkklmnnoppqrrttuvvJJKLMMNPPQQRSSUUVWXYZZ[\]]^__`bbcddeffghijjklmmnopprrsstuvwxxJJKKLMNOOPQQRSTUVWWXYYZ[\\^^_`aabbdeeffhhijkllmnnopqrrsttuwwxyyzKLLMNOPPQQSTTUVVWXYZZ[\]]^_`abbcddefghhjjkllmnooqqrssutuwwxyz{{|MNOOPPRRSTTUVWWXYZ[\\]^__`aaccdeefghhijkkmmonppqrsttuvwwyyzz{|}}OPPRSSTUVWWYZZ[\]]^__`abcdeeffghiijklmmnopqqssttuvwxxyzz{|}}PQQSSTUVVWXYY[[]^^__`bbcddeffhhijjklmnnopqrrttuuwwxyyz{|}~~RSTTUVVWXYYZ\\]]__`abbcceefggiijkllmnoopqrrttuuvwwyy{{|}~~TTUVWWXYZ[\\]]__`aabddfgghijjkllmnooqqsttuvwxxyy{{||}~VWWXYZ[[\]^^``abccdeefghhjjklmmnnppqrsttuvwxxyy{||}~~WXXYZ[\]^^_``abccdeffhhiijklmmnoppqrstuuvwxxyz{{}}~XZ[[\]]^_`abbcceefggiijkklmnooppqrstuuwwyz{|}}~[[\]]__`abccdeeggijkklmnoopqrsstuvwxxyy{||}~]]^__`abbddeffghijjklmmnopqqrsttvvwwxyyz||}~~^^_aabcddeeghhiikklmnnoppqrsttvvwxyyz{||}~`aabccdeffhhijjllmnoppqqssuvwxyyz{{}~~bbcceefghhijklmmnoppqrsstuvwwxyy{{|}~~cdeefghhikklmmnoopqrsstuuvxyxz{{|}}efgghiikllmnnoopqsrsuuvwxyyz{||}}~ggiijkklmnnppqrrstuvvwxxyz{|}}~~hijjlmmnoppqrrsttvvwwyyz{||}jklmmnopqqrrtuuvwxxyzz{|}}~llnnopqrrsstvvwwxyz{{|}~mnopqrrsttvwwxyyz{||}~~opqrsstuvvwxyyzz|}}~qqsttuvwwxyzz||}}~sttuvwxxyzz{|}~~uuvwxxyzz{|}~vwxyzz{||}~xyyz{|}~~zz{|}~~||}~~⧩}~~󒓔.ѣ𴶷ǒվÔĕƗșɛ̜͞ϟҫѢҤȽɽ  ˽ ̽ ͽϽϾопhjklmmnoopqrssuuvvxxy'jkkllmnopqrrsttvvwxyyz{'klmmooppqsttuvwwyyzz||'moppqrrstuvvwxyzz{||}'opqrstuuvxxyy{{|}}'qrstuvvwxyz{{|}}~'stuvwxxyz{{}}~'tuuwwxyzz{||~~'vwxyyz{|}~'wyxz{||}~~'yz{|}}~'{|~~'}~'쁂''ꃄ'胄'ꇈ'臈'ꊋ'ꌍ'򌍎'󎏏'쏑'葒'蓔''ꘙ''蚛'뛝(꟠'蟠'衢''ꦧ'򦧨'觩'詪'諬'󶷷''겳'貳'贵'그''蹺'軼'''''''''''''''''(((''''''((('('(('''(''(''(((('('''(''''''('(('''''''((('''''(' @ @ @suuvwxxyz{{}}。uvvwxyzz||}}~wwxyz{||}~xyz{|}}~͟{{||~~|}~}~󞟟ݫ᚛赶祧纻ס“ÔŖǘəʛĠ̝עĝ͞Ϡ´ѢҵӤզרˀبګܭƈޮ߰ދᲳⴴ䵶ݜ淸縹꺻Ӛ뼼֧󷸸بϬ٪۬ݮ߯౱⳴䴶嶷縹鹺ڀ뻼콾֍Ӌٔߨݩ̀'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(''껹'󲱱'(('('('''''((*)(''''''*((('((''(((('(((('''''''(((((('(''(''('(( @ @ @ ҉΀мǀ͒ǡʩڜĝ񯮭Ҧî~~.ȱŸ웚ݚ̭㳱֛ק״֟譬~~~}ݒ~~}||~}||zzy~~}|{zzyyxކ~}|{zzyywwv~}|{{zyxxvuut~}}|{zyxxwwvuttrߞ~}}{{zyywwvutsrqq~~}||zzyywwvuussrqqpo}|}|zzyxwvvutssrqpoom~~}|{{yyxwvuutsrrqpponmml~~|{zzyxwwuutsrqqponmmlkjj솅~~}|{{zyxxvvtssrrpponmmlkjjii˃}}|{{zyxwwvutssrqpoonnmlljjhhgg~}}|{{zyxwvvuttsrqpoonnmlkjiihgfee~}}{{zzyxwvuttrqponmmlkjihggffdcb~}}|{zzxwwvvutssrqponnmlkjjihggfeddcba~~}|{zzyxxwuutssqponmllkjjihgffedcbba`_~~}{{zzyxwvvutssrqqponnmlkkiihggeddcbaa``_^~}}|{zzyxwvuttrqpponmlkkjiiggfeddcbba`__^]\~}}|{zzxxwvuttsrqpponnmlkjjihhgfeddcbaa`_^]\\[[}}{zzyxwwvutssqpoomllkjjihggeedcbbaa`_^]][[ZYY~}}|{{yyxxvvuttsrqpponmllkkiihgfeedcbba`__^]]\[ZYXXW~~}||{zzyxwwuutssrqqponnllkjjhhgfeeccbba`_^]]\[[ZYXXWVU~~}}{{zzxxwvuutssqqponnmlljjihhgfeddcbaa`_^]]\[ZYXXVUUTS~~||{zzxxwvuutsrqqoonnmlkkjihgffeddcba``_^]\[[ZYYXWVVTTSSR~}}{{zyywvvutssrrqponmmkkjihhggeeddbba`__^]\\[ZYYXVVTSRRQP~~}|{{yyxwwuutsrrponmllkjiihgffedcbaa`__^]\[ZZYXWWVUUSSRRQPON~}|{{yxxwvvttssrpqonnmmkjiihhffedcba``_^^]\[ZZYXWVUUTSRRQPPONML蹸'跶'곲'겱'貱'谯'꭬'񭬫'ꩨ'즥'訧'覥'ꢡ'򛙙'꟞'蟞'蝜'蜚'ꘗ'암'쓒'''葐'菎~'荌~}|'ꊉ~~}}{z'芉~~}|{{zy'與~}}|{zzywx'膅~~}|{{zyxxwvu'~}}|{zyxwwvuut'胂~~}||{zyxxwvuttrr'}|{{yxxwvvutssrqq'~}|{{zyxwwvvutsrrqppn'~}|{zzyxwvvussrrqpoonm'}{{yyxxwvuttsrqpoonmllk'{zyxwvvuttsrqqponmmlkji'xwwuttsrqpponnmmkjjiih'wvuutsrrpponmllkjjihggf'utsrrqqpnnmllkjiihhgfed'tsrqpoonmmlkjjiggfeeddc'rpponmmkjjiihgfeedcbba'poonllkkjihggfedccba``_'nmlkjjihgffedccaa`__^]'mlkjiihgfeedccaa`_^]]\'kjihhgffedcba``_^^]\[ZZ'ihhgfeeccbaa`_^^]\[ZYYX'gffedccbb`__^]][[ZYYXWV'edcba`__]]\\[ZYYXWVVT'dcbba`__^]][[ZYYWWVUTSS'baa`_^]\\[ZYYXXVVUTSRRQ'a__^]\\[ZYYXWVUTTSRQQPO'_^]\\[ZYYXWWVUTSRRQPONN']\\ZZYXWVVUTTSRQQOONNLL'[ZYXXVUUTSSRQPPONMLLKJ'ZXXWVUUTSRRQPONMMLLKJJ(WVTTRQQPONNMLKKJJKJ'VUTSSRRPPOOMLLKJJKJJ(UTSRQQOONNLLKJJKJJ(RQPONNL J(QPONNMLKKJJKJK'ONNMLKKJKJKKJKJJ'MLLKJKKJJKJJKJKJJ(LKJKJKKJKJ('('('('((((''('(('(('(''''((''(''('((('''((''('('('(((((((( ((((( @ @ @ﭬ~}|~~}}{{~}}|{{zy~}|{zyxxw˘~}||{zyxxwvu㍌~}}|{{zyxxvvus~~||{zyyxwwuvtssrڅ~~||{{yyxxvuutsrrqp~~}{{zyxxwvvutsrrqpoo~}}{{zyyxwvuttsrqqpponm~~}|{{zyxxwuuttrrqppnonmkk~}}||zzyxwwuutsrrqppnmmlkkjj~~}|{zyyxwvvutsrrqponnmlkkjihgɌ~~}|{{zyyxwvuussrqqpoonllkkiihggfߏ}}||zzyywvvussrqqponnlkkjjihgffed̂~}}|{zyyxwvvuttrrqpponmmkkjihhgfeeddb~}}|{zzyxwvuuttrrqponnmlkkjiihgfeddcbaa}}|{{zzxxwwuttsrrqppommkjjihggfedccba``_~~}|{{zyxwwvutssrrqponnmlkkjihhgeedcbba`__^]~}|{{zyxxwvutsrrqpoonnllkjiihgffedcbba``^^]\\~}}|{{yyxwwvuttsrqpoonnllkjiihggfedcbaa__^\\[[Y~~}}{{zzyxwvvutsrrqponnmlkkjihgffeedcbaa`_^]][[ZYYX~~}||zzyyxwvvttsrrpoonnmlkkiihggfeddcba``^^]]\[ZYXXWV~~}||{zyxwwvuttsrqpponmmlkjjihggeedcbba``^]]\\[ZYYXWVUT~}||{zzyxwwvuttrrqqpnnmllkjihhggfedccaa`__^]\\ZZYYWWVUUTS~}||{zzyxwvuttsqqponnmlljjihhgfedccbb``_^]\\[[ZYXWWUUSRQ~}||{zzxxwvvttssqqponmmlljjihgffeddcbaa`_^]\[[ZYXXWWVUTSSRQPO~~}|{{zyxwwvvttrrqpponnmlkjiihggeeddbaa`_^]^\\[ZZYXWWVTSSRQQPONN||{{zyxwvvutssrqpponnmlkjiihgffedcbba`_^^]]\ZZYXXWVUTTSRQPPONNML{zzyxwvvutsrrqpoonmmlkjiihgffedcbb``_^]\\[YYXWWVUUSSRQQOONNMKKJzyxwwvutssqpponmmkkiihhgfeedcba``_^]][[ZYYXWVUTTRQQPNNMLLKKJJwvvuttsrrppoonmlkjjihggfeddbaa`__^^][ZZYXWVUUTTSRQPOOMLLKJJKvuussrqpoonmmlkjihhgffddcbba`__^]\\[ZYYXVVUUSSRRPPONNMLKJJtssrqpoommlljjhgffddccaa`__^\\[ZZYYWWVUTSSRQPPONNLKKJJKJKJrrpponnmmkkiihggfeedcbb``_^^\\[ZYXXWVVUTSRQQPOONMLLKJJKJqponnlljiihgffedcbbaa`^^\[ZZYXWVVTTSRRQPPNMMLKKJKJJKJJKJonnllkjjhhggfedccba`__]]\\[ZYYXVVUUSRRQQPONNMLLKJJKJKnllkjjhhgffedcbb``__^]\[ZZYXXWVUTSSRQPPONNLLKJJKJ Jkjjiihgfedccb``_^]]\[ZZYXWVVUUSSQQPOONMMKKJKJKJJKJKJJjihhffeedbba``_^]\[[YXXWWVUTSRQPPOMMLKKJKJKJJKJJKJhgfeddccba`__^]][[ZYXXWWVUTSSQQPONNMLKKJKJ JKJJgfddcbba``_^]\\[ZYXXWVUUTSRQPOONNLLJKJJKJKJJKJeccbaa``_^]\\[YYXWWUUSRQQPPONNLLKKJJKJKJJKJ Jcba`__^]][[ZZXXWVVTTRQPONMMLKKJKKJJKJJKJ JKJJa`_^]\\[[YXXWVUTSSRQQPOONMLLKJKJJKJJKJKJJKJKJJ`_^]]\ZZYXXVWUUTSRRQPONNLLKKJ JKJJKJKJ JKJKJJ^]\[ZZYYXWUUTSRRQQPONMMLKKJJKJJKJJKKJJKJJK\[ZZYXWVVUTSSRQPPONMLKJJKJJKJJKJJKJJKKJKJJKJKJJZYWWVVUTSRRPQPOMMLKJJKJJKJJKJKJ JXWVVTTSRQQPOOMMLKKJJKJKJJKJJKJKJKJJKJJKJJKJKJVVUTSSRQPPONNLLKJJKJKJJKKJJKJKJJKJJKJ JUTSRRQQPONMMLKJJKJJKJJKJJKJJKJKKJKJJKSRQQPOONMLKKJJKKJKJJKJKJJKJJKJJKJQQPONNMLKJKJKJJKJKJ JKJJKJKJKJKJJKJPOONMLKJJKJJKJKJJKJJKJ JKJKJJKJNMLLKJJKJ JKJJKJJKJJK JKJJKJKJJKJJ          $#)+    |zzyxxwwvussrqqponmmlkkjihhgfedccbb``_^^]\[ZZYXWVVUTSRQQPOOMMLKJzyxxwvuttsrqqpoomllkkjhhgffedcbba`__^]\[ZZYXXWVUTSSRQPPONNLLJKxwwvutssrqpponmmlkjiihgfeedccba``^^]\\[ZYXWWVVTTSRQQPONNLKLJJKJJwvuttrrqpponmmkkjiihgfedcca`_^]]\[ZZYXXWUUTTSRQPPONMMKKJJussrrqppommlljjihggfeddcbba`^^]\[[YYXWVUUTSRRQPOONMLKKJJKJJsrqqpoonmlkjiihgffedccbaa__^]]\[ZYXXWVUUTSRQQPOONLLKKJ Jqonmmlkjjhhgffedccaa``_^]\[ZZYYWWVUTSSRRPPONMMLKKJKJponmlkkjjhgffdccbaa``^^]\[[ZYXXWVUTSRRQQPONMLLKJJKKJJKJJKJJmlkjiigffeedcba``_^^]\[[YYXWWVUTSRRQPPOMMKJKlkjihhgffedccbba_^^]]\[ZYYXWVUUTSRQQPPONMLKKJKJJKJKJJKjiihggeedccba`__^]\[ZZYXXWVUUSSRQQPONMMLKKJJK JKJJKJhggffecdcba`__]\\[ZZYXXWVUTTRRQPPOOMLKKJJKJJKJJKJgfeddcbaa`__]\\[ZZYXXWVUTSRQRPOONMMLKJJKJKJJKJJKeddcbaa_^^\[ZYYWXVVUTSSRQPONNMLKKJJKJcba``_^]]\[ZYYXWVUTTSRQQPONNLLKKJKJ JKJJKJKJJa_^^]\\[ZYXXWVUTTSRRPPOOMLLKKJJKJJKJKJJKJJKJJK`_^]]\[ZZYXXVVUTTSRQPPNNMLKJJKJJKJKJ JKJJ^]\\[ZZXXWVVUTSSQQPOONNLLKJ JKJJKJJKJJKJJKJ\[ZZYXWVVUTSSQQPOOMMLKKJJKJKJJKJJKJKZYXWWVUTTSSRQPONMLLKKJKJ JKJ JKJYXWWVUTSRRQPOONMMLKKJJKJJKJJKJJKJJKJJKJJKJJKJKJKJJWVVUTSSRQQONNMLLJJKJJKJJKJKKJKJJKJVTTRQQPOONMLLKJJKJJKJJKJ JKJ JKJJTSRQPPONNLLKJJK JKJJKJJKJJKJJKJJKJRQQPNNMMLKKJKJ JKJKJJKJJKJKJJKJJKJJQPNNLKJKJKJKKJKJ JKJJKJJNMMLKKJKJKKJJKJKJJKJKJJKJJKJJKJJKJJKJKJJMLLKJJKJKJ JK JKJKKJJKJJKJJKJJKJJK JKJJKJKJKJ JKJJKJJKKJKJ JKJJKJJKJJKJJKJJKJKJJKJKJJKJ JKJJKJKJJKJJKKJJKJKJKJJKJJKJJKJJKJKJJKJKJKJJKJ JKJJKJJKJJKJKJJKJJKKJJKJJKJKJKJJKJKJ JKJJKJJKJJKJJKJJKJKJKKJJKJJKJJKJJKJJKJJKJJKJKKJ JKJJKJ JKJJKJKKJJKJJKJJKJKJKJKKJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKJKJJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKKJKJJKJJKJJKJJKJKJJKKJKJKKJJKKJJKJ JKJJKJKJJKJ JKJJKJJKJKJ JKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJJKJJKJJKJKJJKJKJJKJJKJKJKJJKJKJKJKJJKJJKJJKJKJJKJKJKJKJJKJ JKJKKJJKJJKJKJJKJJKJJKJJKKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKKJKJJKJK JKJJKJJKJJKJJKJJKJJKJ JKJKJJKJJKJKJKK JKJJKJKJKJ JKJKJJKJJKJJKJJKJKJKKJJKJJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJKJJKJJKJKJJKJJKJJKJKJKJKJKJKJJKJJKJJKJJKJJKKJJKJ JKJJKJJKJJKKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJ JKJJKJJKJJKJKJ JKJJKJJKKJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJ JKJJKKJJKJKJKJJKKJJKJJKJKJKJJ    &0%  %  3           %  $ *.  i%JKJJKKJJKJJK'JKJ JKJJ(JKJJKJKJJKJKJJKJJ(JKJJKJ(JKJJKJJKJJKJKJJ(JKJJKJJKJJK'JKJKJJKJKJJ(KJJKJJKJJKJJ(KJKJKJJK'KJKJJKJKJJKJJ(KJJKJJKJJKJJKJJK'JKJKJKJKJJKJKKJ(JKJJKJJKJJ(JKJJKJ J(KJKKJJK JK'JKJKJJKJJ(KJJKJJKJJKJJ(JKKJJKKJKJJKJKJJ(KJJKJJKJKJKJJKJJ(JKJJKJJKJJ(JKJJKJJKJJ(KJJKKJJKJJKJKJ'JKJKJJKJJKJKKJ'JKJKJKKJKJJKJJ(JKJKJJKJJKJKJJK'JKJJKJJKJJKJKKJ'JKJKJKKJ'KJJKJJKJKJKJJKJJ(JKJKJJKJKKJK'JKJJKJJKJJ'JKKJJKJKJJKJJKJKJ'JKJJKJJKJJ(JKJKJJKJJ( JKJJKJJK'JKKJKJKJJKJK(JKJJKJJKJKKJJKJJ'KJJKJKJJKJJ(JKJJKJJKJKJK'JKJKKJKKJJKJ(JKJJKJJKJ( JKJJKJJ(JKJJKJKKJKJJKJJ(JKJJKJJKJJKJJKJJ(KJKJJKJJKJJKJ'KJK JKJ'JKJJKJJKJJ(JKJJKJJ(KJJKJJKJJKJKJJ(JKJJKJJKJJ( JKJKJJKJJ(JKJKKJKJJKJJK'JKJKJ J(KJJKKJKJJKJKJJ(JKJKJJKJJKJJKJJ(JKJKKJKJJKJJ(JKJJKJKKJJKJJKJJ'((((( ((( ('((('( (('' ( (('('(( ( ((( ((((((( ((((((( (' ( (( ((((' (   {N='BOSSA-1.9.1/install/banner.bmp000066400000000000000000002476061333742133700160310ustar00rootroot00000000000000BMO6(:PO  ]]]cccpppxxxiiivvvNNNpppVVVvvvccc\\\tttKKKPPP}}}~~~]]]䀀λPPPLLLsss𽽽ZZZTTTжOOO]]]KKKuuujjjVVVeeeooorrrmmmJJJϲNNNoooPPPSSSGGGSSSIIIaaaSSSmmmmmmYYY```{{{ϭJJJDDDLLLaaaTTTNNN>>>BBBHHHooosss\\\___׃ˇŻfffggg̪>>>???bbbRRRJJJ000:::І\\\___ơaaaaaaOOOdddVVVWWWQQQdddQQQDDD???aaa϶ģOOO]]]kkk___bbbYYYkkkooolllKKKuuużcccNNNYYY___ppp^^^IIIIIIEEEBBBXXXKKK[[[bbb]]]jjjlll^^^}}}MMMlllзhhh===QQQ}}}ppp___~~~{{{YYYJKKEFFBBBFFFIIIHHHIIIsssuuuJJJ===]]]\\\MMMuuu˴MMMyyyԵppp>>>llluuuVWWQPPKLLFFGAAA======GGFIIIJJJKKK333nnn͹gggHHH̖}}}ҰLLL±kkk|||gghWVVOPOIIICCC>>>:::666323111:::EEEJJJCCCkkkǰ~~~GGG\\\ѬKKKnnneeebbbQQQDDD<<<555///+++('(%%%$$$$$$$$$('(999DDDHHHMMMcccEEEooo雛̧aaaAAAZZZggg̲}}}lllWWW<;;=.,K+(S+&T)#S&!O#H 5''';;;HHHIII^^^LLL;;;YYY͋ӴƵPPP՟zzzcYU@P7Q6Q7P7O7M7K6H5D4=11)J222GGGQQQEEEVVVϵǧwwwzzzǓ|||^C]:[9Y9W8U8S8Q8N7I6@2F5F6C52)7(((EEESSSIIIvvvŸcccVVVlllppp檪aB`:^:Q5R7U8V9S8Q8y:2---7/I6G6E6@3i$ """???VVVUUURRR```@@@kkkvvvʢdBc;a:n4)<21^HDMCP;S8F;E;:>2L7H6E5E6B4_!'''666PPP\\\UUUWWWjjj666mmm䳳iDf;d;:+0/0FFFIIIIGGLDQ9O8P7J5Y+&C)(<1F6?2)"""+++000DDD\\\ccchhh444kkkĩmCiZCEEE>>>FGGQQQRCY9Q6<.E2P8M7K '''...000+*+\\\WWWu?u>r=c8+**JJJ`Nf;sPH?>>>>>JJJlPKZ9C2!"!F%!S8Q7N")))+,,777vvvfffx?x>u>k:5,*GGGjb`gBa>PGE;;;CCCXMLZ;N5H'"3&V9S7K#""""""___SSS{?{?x?p??YGB_=VJYYYbVTa}?|?t>Xk<\;0D.q=p=n=ls=p=x`ǟBBBAf4QQQzzzrW~?}?z?x>o=p_ƝCCBBz>GGG***222rG3@@}?r<^JDƜ}DCCB@TTTƞ@@@}?mM@uuuɟ|DDCCBTPM•A@@@Y>sssxDDDCCdPHɿtAAA@d@zzzjEEDDDqRB}}}ϓnBBAAhE_EEEDDyXAuuu\BBBAmVWFFEEEa@jjjLCBBDOFFFEEk?[[[DCCBhKGGFFExA\[[ynhCCCʎgHGGGFFߓG~LFDJHHHGGGFH^ĥűBOSSA-1.9.1/install/bossa-difx.wxs000066400000000000000000000074731333742133700166620ustar00rootroot00000000000000 BOSSA-1.9.1/install/bossa-dpinst.wxs000066400000000000000000000124161333742133700172220ustar00rootroot00000000000000 NOT VersionNT64 VersionNT64 NOT VersionNT64 VersionNT64 NOT Installed Installed BOSSA-1.9.1/install/bossa.cat000066400000000000000000000211611333742133700156460ustar00rootroot000000000000000"m *H "^0"Z10  `He0+ +7 00  +7 D!~ 170302011822Z0 +7 00REFE4CD8E9E6B518EE8E3CCECD74BA8BBFC46A76E1o06 +7 1(0&Filebossa.inf0a +71S0Q0, +7<<<Obsolete>>>0!0 +͎kQKFn0b +7 1T0RL{DE351A42-8E59-11D0-8C47-00C04FC295EE}0n +7 1`0^ OSAttrH2:5.1,2:6.0,2:6.1,2:6.2,2:6.3,2:6.400 +7 0OSXPX86,VistaX86,VistaX64,7X86,7X64,8X86,8X64,_v63,_v63_X64,10X86,10X640P +7 B0@ HWID1,usb\vid_03eb&pid_6124009%^ci93 0  *H 01 0 UUS1 0 UUT10USalt Lake City10U The USERTRUST Network1!0U http://www.usertrust.com10UUTN-USERFirst-Object0 151231000000Z 190709184036Z01 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1*0(U!COMODO SHA-1 Time Stamping Signer0"0  *H 0 =78RSBm"ktPC}ƠNq&C؃Hzަ;DuxiI\N*TzP̑yyז3"c,(==HEheYi"1 bn\e!c"'=G.V]%nDͷۥWvBohWL"!"+ BB?[T< jGzū0?UM 4u)iP 00U#0dt<ݙ[(M<0Uk-3k3 5j0U0 U00U% 0 +0BU;0907531http://crl.usertrust.com/UTN-USERFirst-Object.crl05+)0'0%+0http://ocsp.usertrust.com0  *H 3$@@|X`1nP 恭&s)>kR+Ĭ9'øHA=\M 1eiS=6 @0 KU >.vBvW @X]qqeosَo O%uhр9ɞltٗOš ^य़!-y%":W:c]0@0(\*3̘}r0  *H  0}1 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1#0!UCOMODO RSA Code Signing CA0 170131000000Z 180131235959Z01 0 UUS10 U 787301 0 U TX10 U Austin10U 7300 Turnbuoy Dr10U Scott Shumate10U Scott Shumate0"0  *H 0 M'Z|M'ar,9 7@Ilrs ҃O\()=w՗W]\Œ\/ȟ+knOO"s>" ,omq7-LGܮvpTXJA_4V#w4L_ETzhupwlڼXJ7Oޢ“Qx"O⃃"'}˭!wHLքrMFmK00U#0)`MjKI0Ubanebw*7E0U0 U00U% 0 +0 `HB0FU ?0=0; +10+0)+https://secure.comodo.net/CPS0CU<0:08642http://crl.comodoca.com/COMODORSACodeSigningCA.crl0t+h0f0>+02http://crt.comodoca.com/COMODORSACodeSigningCA.crt0$+0http://ocsp.comodoca.com0 U0support@shumatech.com0  *H  ;JLg 4[)j~!J.QМj&Њdb~{z.(CrHoM_-©%u,wit2NXm`TY H0p!FHncuq(9^Сu@Hp!8@6vz*ӾD2 c+`y`=2%3l KU?ݡh l9WNhȄP{KޮR*HEF5. ]#=0L0435Y[qA+50  *H 01 0 UUS10U Washington10URedmond10U Microsoft Corporation1)0'U Microsoft Code Verification Root0 130815202630Z 230815203630Z0o1 0 USE10U  AddTrust AB1&0$U AddTrust External TTP Network1"0 UAddTrust External CA Root0"0  *H 0 3-9N[l͵#ޛ3)L}JmPZ֗)ZIz.ʿ78->ApVO?2tȐT_x@<a^jPךNqqP` 8i&LO#:OΟioBkDǭmA_rZq7yeY7/ ’r8rE]*}D+C%aijX#3VuY)F +eBo{]S4Z'00U% 0 +0U00Uz4&&T$T0 U0U#0b ![Cn TPkҖq0UUN0L0JHFDhttp://crl.microsoft.com/pki/crl/products/MicrosoftCodeVerifRoot.crl0  *H 6+3idɛc/p7{BFjN4i6UzB%&|[(wǛ:{ӂN+յH@+%S4CO,NZ;$Px#A07JWDߙDtd .2Axǡ6Tb ЄkV_ݷv)J%Ʉ}6):mlFK׫p$($<9Ԩi: Y36A#,"+P(FYIN9 mL0_t[YSb5uH}zHwR%;zNjoDOO'y'=PsALA>) sv ePAI}6Doi}M@:~1ҵS?P^;m]|??%XIȞ7wmq[4]TGm[(@*#eZC?FU&⑚- ެgpqy1a)0t0\'fVIp"0  *H  0o1 0 USE10U  AddTrust AB1&0$U AddTrust External TTP Network1"0 UAddTrust External CA Root0 000530104838Z 200530104838Z01 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1+0)U"COMODO RSA Certification Authority0"0  *H 0 T V $Dgt+7}#pqS*KVpraK=a> >\4zk眳zvq l߰~Ħ/OgCr ։k,폘~nب$CkbUllixH0Eխ |3WAvnRp\.HMȩs{#ޢMUzaEh^@k#yzkoF{=KؓYZA$`XGnF_ظ@͗9܇Ѧ;o8o00Ƞ.|JR40  *H  01 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1+0)U"COMODO RSA Certification Authority0 130509000000Z 280508235959Z0}1 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1#0!UCOMODO RSA Code Signing CA0"0  *H 0 cw4g11bW?[$2'kQϞ%_ 0a{ h,ru5#Ɋ dB{RK:#KKc"7{y Q,?aa 0(uHyZͻUv:3FPs\Jk^ֽ/%x׍_DU<<1Fp o#_8]GA.7yR͇{b)~0rH!^Lby Q0M0U#0~=<8220U)`MjKI0U0U00U% 0 +0U  00U 0LUE0C0A?=;http://crl.comodoca.com/COMODORSACertificationAuthority.crl0q+e0c0;+0/http://crt.comodoca.com/COMODORSAAddTrustCA.crt0$+0http://ocsp.comodoca.com0  *H  ?9; mMNO8,c c?o=%ة+"Q: $t{1n#TQ-RuLQQƇlDvWjXk!I|7NuT@6WgOue #ICW~ waMeMEzi'e)@{:Q9pymB lLsZ:|c:RG2dGѪSN20sox\Fk" 4e1W16GˋXwKQLJzR⎎&8¨Ɓ5kXaJ KBUpmYm* `_ l0R + ʉ(~2{H3ev}dЎξ5}r1Ml/ P'v4⌇!aUt!w hlɩY%|Eyfh"͸M< ((jT\eH[Ե7FA|Cga}I0}\9K10~00}1 0 UGB10UGreater Manchester10USalford10U COMODO CA Limited1#0!UCOMODO RSA Code Signing CA\*3̘}r0  `He{0 +7 100 *H  1  +7 0 +7 10  +70/ *H  1" Kz*+"ɡ|f[6OL([/ XD0  *H ɟ,y5FkPݤsr)UU3NV;i<ųȕ"?wm01Z:z`J[p4RHlI n 3J(rV;oWW6pXv$ Ѱ8rI+B8]/t?-fSTI*=Cz*j/{@p[TH CgGbmh JFkrx31 XC0? *H  100,001 0 UUS1 0 UUT10USalt Lake City10U The USERTRUST Network1!0U http://www.usertrust.com10UUTN-USERFirst-Object9%^ci93 0 +]0 *H  1  *H 0 *H  1 170302011811Z0# *H  1]j-?,C}LӇlmDA0  *H I9Jn6iX\@{ch?\3p&/a$)$Y,.fn0yVDOv mU;~|*٠ŝso FGQmLVV5@ ~FwZ6dOZQ €QXēHNBOSSA-1.9.1/install/bossa.inf000066400000000000000000000071361333742133700156610ustar00rootroot00000000000000[Version] ; Version section Signature="$Chicago$" ; All Windows versions Class=Ports ; This is a serial port driver ClassGuid={4D36E978-E325-11CE-BFC1-08002BE10318} ; Associated GUID Provider=%SHUMATECH% ; Driver is provided by SHUMATECH DriverVer=05/18/2011,1.0 ; Driver version CatalogFile=bossa.cat ; Catalog file DriverPackageDisplayName=%BOSSA% ; Driver display name [DestinationDirs] ; DestinationDirs section DefaultDestDir=12 ; Default install directory is \drivers or \IOSubSys [Manufacturer] ; Manufacturer section %SHUMATECH%=ShumaTech,NTamd64 ; Only one manufacturer (SHUMATECH), models section is named ; ShumaTech [ShumaTech] ; Models section corresponding to SHUMATECH %BOSSA%=BOSSA.Install,USB\VID_03EB&PID_6124 ; Identifies a device with Vendor ID (03EBh) and ; Product ID equal to 6124h. Corresponding Install section ; is named BOSSA.Install [ShumaTech.NTamd64] ; Models section corresponding to SHUMATECH %BOSSA%=BOSSA.Install,USB\VID_03EB&PID_6124 ; Identifies a device with Vendor ID (03EBh) and ; Product ID equal to 6124h. Corresponding Install section ; is named BOSSA.Install [BOSSA.Install] ; Install section include=mdmcpq.inf CopyFiles=FakeModemCopyFileSection AddReg=BOSSA.AddReg ; Registry keys to add are listed in BOSSA.AddReg [BOSSA.AddReg] ; AddReg section HKR,,DevLoader,,*ntkern HKR,,NTMPDriver,,usbser.sys HKR,,EnumPropPages32,,"MsPorts.dll,SerialPortPropPageProvider" [BOSSA.Install.Services] ; Services section AddService=usbser,0x00000002,BOSSA.AddService ; Assign usbser as the PnP driver for the device [BOSSA.AddService] ; Service install section DisplayName=%USBSer% ; Name of the serial driver ServiceType=1 ; Service kernel driver StartType=3 ; Driver is started by the PnP manager ErrorControl=1 ; Warn about errors ServiceBinary=%12%\usbser.sys ; Driver filename [Strings] ; Strings section SHUMATECH="ShumaTech" ; String value for the SHUMATECH symbol BOSSA="BOSSA Program Port" ; String value for the BOSSA symbol USBSer="USB Serial Driver" ; String value for the USBSer symbol BOSSA-1.9.1/install/bossa.wxs000066400000000000000000000107731333742133700157270ustar00rootroot00000000000000 NOT VersionNT64 BOSSA-1.9.1/install/dialog.bmp000066400000000000000000016057661333742133700160310ustar00rootroot00000000000000BM 6(8   NMLLKJJJKJJJJJJJJJJJKJJKJJJJKJJJJJJKKJJJJJJJJJJKJJJJJJJKJKJJKJJJJKKJJJKKJJJJJJKKJJKJJKKJJJKJJJJJJJJJKKJJJKKJJJJJJJJJJJJJJJJKJJJJJKJJJJKJKKJJJKJJJJJJKJPOONMLKJJJJJJJJJKJJJJJKJKJJJKJJJJJJKJJJJJJJJJJJJKKJJJJKJJJJJKKJJJJJJJJJJKJJJKJJJKJKJJJJKJJJJJKJJJKJJJJJJJKJKJJJJJJKJJJJJJJJJJJKJJKJKKKJJKJJJJJJJKJJJJJQQPONNMLKJKJKJJJJKJKJJJJJJJJJJJJJJJKJJJJJKKJJJJJKJKJKJJJJJJJKKJJJJJJJJJJJJJKJJJKJJJJJKJJJJKJKJJJJJJJJJJJKJJKJJKKKJJJJKJJJJJJJJJJJJJJJJJKJKJJKJJJKJJKJJSRQQPOONMLKKJJKKKKJJJJJJJJJJJJJJJKJJJKJKJJJJJJJJKJJJJJJJJJJKJJKJJJJJJJJJJKJJJJJKKJKJJJJKJJJJJJKJJJJJJJJJJKJJJKKJJJJKJJJJJJJKJJJKKJJKKKKJKJJJJJKJKJJJJJUTSRRQQPONMMLKJJJKJJJJKJJJJKJJJKJJKJKKJKJJJJJJJJJJJJJJJJJJJJJJKKKJJJKJJKJJKKJJJJKJJJJJJJJJJJJJKJJJKJJJJJKJJKKJJJJJJKJJKJJJJJJJJJJJJJJJJJKJKJJJJJJJJJJJVVUTSSRQPPONNLLKJJJJJJKJKJJKKJJJJJJJKJKJJJJJJJKJJKJJJJJJJJJJJJJJJJJJJJJJJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKJJKKJJJKJKJKJKJJKJJJJJJJJKKJKKKJJKJJKJJJJXXWVVTTSRQQPOOMMLKKJJJJJJJKJKJJJKJJJKKJJKJKJJJJKJJJKJJJJJJJJKJKJJJJJJJJJKJJJJJJJJJJJJJJJJJKJKJJJJJJJJKJJJKJKJJJJJJJJJJJJJJJJJJKJJJJJJJJJJJKJKJJJJJKJJJZZYWWVVUTSRRPQPOMMLKJJJJKJJKJJJJJJJJJJJJJJJJJJJJKJKJJJJJJJJJJJJJJJKJKKJJJKJJKJJKJJJJJJKJJKJJJJJJJKJJJJJJKJJJJJJJJJKJJJJJJJJJJJKJJJJKJJJJKJJJJJJKJJJJJJ\[ZZYXWVVUTSSRQPPONMLKJJJJJKJJJJKJJJKJJKJJKKKJKJJJJKJKJJJJJJJJJJJKJKJKJJJJJJJJJJJJJKJKJJJJJJJKJJJKJJKJJJJJJJJJJJJJJJJJJJJJKKJJJJKJJJJJJJKJJJKJJJJKJKJJ^]\[ZZYYXWUUTSRRQQPONMMLKKJJJJJJKJJJJKJJKKJJJKJJJJJJJJJJJJJJJJJKJJJKJJJJJJJKJJJJJJJJJJJKKKJKJJJJJJJJJKJJKJKJKKKJJJJJJJJJJJKJJJJJJJKJJJJJJJJJJJJJJJJKJJ`_^]]\ZZYXXVWUUTSRRQPONNLLKKJJJJJJJJJJJKJJKJKJJJJJJJJJJJJJJKJKJJJJJJJJKJJKJJKKKJKJJJJJJKKJJKKKJJJJJJJJJJJJJKJJJJJJJKJJJKJJKJJKJJJJJJJJJKJJKJJJKJJJJJJJaa`_^]\\[[YXXWVUTSSRQQPOONMLLKJKJJJKJJJKJKJJJJJJJKKJJJJJJJKJJJJJJJJJKJJKJJKKKKJJJKJJJJJJJJJKJJJKJJJJJKJJJJJJJJKJJJJJJKJJJJJJKJJJKKJJJJJJKKJJJJJJJJJJJKcba`__^]][[ZZXXWVVTTTRRQPONMMMLKKKJKKJJJJJKJJJJKJJJJJJJJJJJJKJJJJJJJJJJJJJJJJJKKJKKJJJJJJJKJJJJJJJJJJJJJJJJJJJKKJJJJJJKJJJJJJJJKKJKJJJJJJJKJJJJJKJJJJKeccbaa``_^]\\[YYXWWUUUSRQQPPONNLLKKJJJJKKJJJJKJJJJKJJJJJJJJJJJJJJJJKKJJKJKJKJJJJJKJJJJJJJJKJJJJJJKJKJJJJJKKJJJKKJJJJJJJJKJKJJJJKJJKJJKJJJKJJJJJKJJJKJJgfddcbba``_^]\\[ZYXXWVUUTSRQPOONNLLLJJJJJJKJJJJJJJKKJJJJKJJJJJKJKJJJJJJJJJJJJJJJJJKKJKJJJJJJJKJKJJJJJJJJJJKJJJJKKJJJKKJJJJJJJJKJJKJJJJJKKJKKJKJJJKJJJJhgfeddccba`__^]][[ZYXXWWVUTSSQQPONNMLKKKJJJJKJJJJJJJJJJJJJKJJJJJJKJJJJJKJKJJJJKJJJJJJJJJKJKJJKJJJJKKKJJJJJJJJJKJJJJJJKJJJJJJJJJJJJJJJJJJJJJJKJJJJJJKJJjihhffeedbba``_^]\[[[YXXWWVUTSRQPPPOMMLKKJKJKJJJJJKJJJJJKKJJJJJJJJJJKJJJJKJKJJKJJJJJJJJJJJJJKJJJKJJKJKJJJJJJJJJJJJJJKJJJKJJJJJKJJJJKJJJJJJJKJJJJJKKKJJkjjiihgfedcccb``_^]]\[ZZYXWVVUUSSQQPOONMMKKJKJKJJJJJJJJKJKJJJJJJJJJJJJJJJJKJJKKJKJJJKJJKJJJJKJJJKKJJKJJKKJKJKKJJKKJJJKJJJJJJJJJJJKJKKKJKKJJJJJJJJJJKKJnllkjjhhgffedcbb``__^]\[ZZYXXWVUTSSRQPPONNLLKJJJJKJJJJJJJJJJJJJJKKJJJJKJJJKJJJJKJJJJJKKKJKJJKJJJKJJJJJJJJKJJJJKJJJJJJJJKJJJKJJJJJJJJJJKJJJJKJJJJJJKJKJonnllkjjhhggfedccba`__]]\\[ZYYXVVUUSRRQQPONNMLLKJJJJJJJJJJKKJJJKJJKJJJKJJJKJKJJJJJJJJJKJJJJJJJJJJKJJJJJJJJKJJJJJJJJKJJJJKJKJKJJJKJJJJJJKJKJJJKJJJJJJJJqponnllljiihgffedcbbaa`^^^\\[ZZYXWVVTTSRRQPPNMMLKKKJKJJJJKJJJJKJJJJJJJJKJJJJKJJJJJJJJJJJKJJJJKJKKJJJKJJKJJJKKJJJJKJKJKKKJJKJKJJJJKJJJKJJJJJJJJKJKKJJKJrrpponnmmkkiihggfeedcbb``_^^\\[ZYXXWVVUTSRQQPOONMLLKJJJJJJJKKKJJJJJJJKJKKJJJJKIIJIIIIIJIIIIIIKJJJJJKJJJJJJJJKJJJJJJJJKJKKJJJJJJJJKKKJJJKJKJJJJKKJJJJJKtssrqpoommlljjjhhgffddccaa`__^\\[ZZYYWWVUTSSRQPPONNLKKJJJJJJKJKJJJJJJJJJJJJJIIHHHHHHHHHHHHIJIIIIIJIIIJIIIIJJIIIJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKJJKJJJJvuussrqpoonmmlkjihhgffddcbba`__^]\\[ZYYXVVUUSSRRPPONNMLKJJJJJJJJKJJKKJJJJJKIHGEDCCDCDDEDEEEFFGGGGGGGGGHHHHHHIIJIIIIIIIIIIIJIIIJIIIJJJJJKJKJJJJJJJJKJJJwvvuttsrrppoonmlkjjihggfeddbaa`__^^][ZZZYXWVUUTTSRQPOOMLLKJJJJJKJKJKJKJJJJJIGCܣ?К<ɔ:Ǔ9Ǔ9ɔ:ɔ:˖:͗;ϙ<њ<Ӝ=֞>٠>ܣ?ߥ@AABBBBBBCCCDDDEEFFHGGHGGGGGIIHHIHHIIIIIIIIJIIIIJJJJJKJJJzyxwwvutssqppponmmkkiihhgfeedcba``_^]][[ZYYXWVUTTTRQQQPNNMLLKKJJJJJJJJJJJKIHDנ?7{0r,o,o+o+q-r,t-v/x/z/}124555666778Ð9Œ9Ȕ:ʕ:͗;Ϛ<Ҝ<՝=٠>ۢ@ݣ@ߥ@AAABBBCCDCDDEEEGGGGGGGGGGIHJIJKJJKJK{zzyxwvvutsrrqpoonmmlkjiihgffedcbb``_^]\\\[YYXWWVUUSSRQQOONNMKKJJJJJJJJJJJIGBŒ9u.^$mPgLfKgLiMjNlPnQ qS tU!wX"zZ#}\$_%a&b&d'd'e'f(g(i)l*l*o,q,t-v.x/{0~12444455678Ð8ƒ9ɔ:̗;Θ<њ<ԝ=֞>٠>ܣ?ݣ@ߥ@AAAACBCEGIIKJJJKJ||{{zyxwvvutssrqpponnmlkjiihgffedcbba`_^^]]\ZZYXXWVUTTSRQPPONNMLKKJJJJJJJIIFޤ@5f(eJP;H5F3G4H5I6I6K7M9N9P;Q<T>U?W@YAYAZB[C\D]D_FaGcIeJhMjNmPpS sU!vW"yY#|[#}\$^$_%a&b&d'f(h)k*m*p,s-u.w.z0}12234455668ʕ;٠>DHJIJJJJJ~~}|{{zyxwwvvttrrqpponnmlkjiihggeeddbaa`_^]^\\[ZZYXWWVTSSRQQPONNMLLKJJKJKIIFܣ?3_%YAB0:*9*8)9*9*9*9*:*;+<,=-=->-?.?.@/@/A0A0A0B0C1E3E3G4H5I6K7M9N9P;Q<R<S=U?V?XAZB]E_FaGdJgLiMmPoR rT!uV"wX"zZ#|[$}\$^$_%a&b'e'j*u-5՝=EHIJJJJJр~}||{zzxxwvvttssqqponmmlljjihgffeddcbaa`_^]\[[ZYXXWWVUTSSRQPONMMLKKJKJJGw;^6S1D*8%0!-++|*r)i(_'U(I'>&4&5'5'5'5'5'5'6(6(6(6(7(7(8)8)9*9*9*:*:*;+;+<,=-=-=-?.@/A0B0D2E3F3H5I6J6L8M9O:P;Q<R<S=U?V?YA\DcIuV!n+7AHIKKKKKтссЀ~}||{zzyxwvutttsqqponnmlljjihhgfedccbb``_^]\\[[ZYXWWUUUSSRQQPNNNLLKKIDM57282617161616060604/4/5.5.4-3,2+3+3+1(0'/&.$-#,!+**{)p)e(X'M'A&6%4&5'5'5'5'5'5'5'5'6(6(7(7(8)9*9*9*9*:*;+<,<,=-=-=->-@/A0H5YA|[#1֞>EHIKJKK҄҃тср~}||{zzyxwwvuttrrqqpnnmllkjihhggfedccaa`__^]\\ZZYYWWVUUTSRQQPNNMMLJDK58394949484748494949474837272736261625050404/4/303/2/3.2-1-1.1-0,1-.+/*.*.(-'+&,$)") (()w(m'c'Y'P'H'@'7'6(6(7(8)9*9*9*9*9*<,K7lPs-˖:DHJJKJJӅ҄҄у҂ҁсрЀ~~}||{zyxwwvuttsrqpponmmlkjjihggeedcbba``^]]\\[ZYYXWVUTTSRQPPONNKEJ57374847484948484848494837262736251525040404/4/302/3/1.1-1-0.1-0,1-.*.)/+.+.*.*.*-),*,),(+(+(+'*'*&)%)&)&(%'%(%(%($*#*"* *~)9*D2aGi)8BHIJJJJӇӇӆ҅҄҄усср~~}||zzyyxwvvttsrrpoonnmlkkiihggfeddcba``^^]]\[ZYXXWVVTTTRQQPONFJ57394748484948484848484837272736261624050403/4/302/4/1.2-1-1.1-0,1-/+/+.+.+.*/*.)-*,),(,(+)+(+'+(*&)&(')%)$($(&)%(&)&)&)%(%(%=*A0YAb'5AGIKJKKԉԉӇӇӆ҅҄҃҃тсрЀ~~}}{{zzyxwvvutsrrqponnmlkkjihgffeedcbaa`_^]][[ZYYXWVVUTSSRQPGJ58384848484848484847474837262736271525050403/4/303/3/2.2-1-1.1-0,0-/+/+/,.+-*.*.).),),(,(+)+(+'+(*&)&)&)&)%($(&)&)&(&)%)&(%(&W-?.S=}\$3ݣ@GJKJJKԋԊԉԈԈӇӆӅ҅҄у҂тсЀ~}}|{{yyxwwvuttsrqpoonnllkjiihggfedcbaa___^\\[[YYXWWVUTSRQIJ58374947484848484848484737262736271525050403/4/303/2/2.2-1-1.1-1,/-/+/+/,.+-*-*-*-(,),(,(+(,(+&+(*&)&)')&)%(%(&)&)&)&)&(&)%(%{,>-O:vW"~1ן>EIJJJJ֍ՌԋՊԉӈӈӇӆӅӅ҄у҂ссЀр~}|{{zyxxwvutsrrqpoonnllkjiihgffedcbba``^^]\\ZZYXWWVUTSJJ68384948474848484847484837262736261625050403/3/302/3/2.2-1-1.1-0,0-/+/+/,.+-*.*.+-(,),),(+(,(+'+(*&)&)')&)%(%(%)&(&)%(&)&)&(%)!=-L8pS x/њ=EHIJJJՎՍ֌ՋՋՊԊԉӈӇӆӆ҅҄҃утср~~}|{{zyxwwvutssrrqponnmlkkjihhgeedcbba`__^]\\[ZZYXWVVLJ67374948474747484848474736262736251524050404/4/3/3/4/2.2-1-1.2-1,1-/+/+/,.+.*/*.+-(,)+),(,',(+(+(*&)&(')&)%(%(&(%)%)&)&)&(%)&'#<,I6jNs-̗(K+^/s5U0)&(%)&)&($<)F3eJo,Ȕ:CHIJJJבבא֐Տ֍ՌՍՌԋԉԉԉԇӇӆ҅҅҄҃҂ср~}}|{zzyxwvuuttrrqponnmlkkjiihgfeddcbaa`_^]]\[ZZYNJ7637494848474847483848483727273627162505041404/3/401-2.1.0-1-2-1+1-.*/)/*/+0*3*4+4*5+9+D-R1_3j3s4w3y1x/q,o,u-3ʕ:ޢ@b2(%)&)&)%)&R)D2bHk*đ8CHIJJJؓדבבא֏֏֎֍ՍՋՋԊԉӈԇӇӆӆ҄҃҃҃҂р~}}|{zyyxwvvuttrrqpponmmkkjihhgfeeddbaaa_^^]\\[PL7739484848494848484838483727263726172404040404/4/5.5.5-7.:.6-1-1,1-0)7%D)Y0q6@W0(&)%)&)&)&d)B0_Fh(8BGIKJJٕؔؓؓבבב֏֎֎֍ՍՌԋՊԉӉӇӇӆӅ҅҃у҂҂сЀ}}||zzyywvvvussrqqponnlkkjjihgffedccba``_^]]SQ883947494837484848473838372726281:2?2@2A1D2J2R4\6f8s:v:{;x8K02-1,1-4$tU!w.ΘŒ92q,f(a&b%e)_,r1ɔ9ܣ@D?G,(&)&)&)&)&r(A0]Dg(7BGIJJJٕٗؖؔؔדגגב׏֏֏ՍՍՌԋԊՊԉӈӇӆ҆҅҄҃утссЀ~~}|{{zyyxwvuussrqqpoonllkkiihggfeddcbaa_^^W]<8394648373627292>3G6P7Q7S6W7`8j:w=@BBABDEGHGDՑ;E-1-1+0,Ò=œ=Ǖ>ʖ>͙?ћ?՞?ԝ>˖;3E+0-0-1,2(`%3՝=CC٠>đ81m*`%wX"J$='3',&*'0'm5AFHGBc1)&)%)&)&)&)&) A0\Df(7BHJKKJۜۛښښٖٖٙ٘ٗؕؔהؒגב֑֏֏֎֍֍ՋԋՊԉԉԇӇӇӅ҅҄҃утсЀ~~}|{{zyxxwuuttrrqppnonmkkjiihggeedccOA58394K4f1aJ#Q>S?^G!hO$mS&qU&tX(y[)`*d,h.k.m/o/p/s0w1z2}3~3v/T*2,2.1,1-F#q-đ9ޤ@AӜ=5t-b&vW"M!8&0(,)+(*'f3BHIJHEٝ>8()%(%)&)&)&)&)!D2^Eh(8BGJJJJ۝۝ۜڛښښٙژٕٗؗؕٔؓדגב֐׏֏ՎՍՌՌԋՋԉԉӈԇӆӆ҅҄҃усср~}}{{zyyxwvuttsrqqpponmlkjihhgffedVO:7394C4q7mS(Q>E5E5H7J8L:N;Q=UAYC]FaI cJ!eL!fL!iO!mR"rU$wY%xY%|O$7)2-1-1.0+d'3՝=A٠?6r,^$rR ?%-(,(+(+)E-@GHJJIFB}5(&(&)&)&)&)&)&) I6bHk*Ð9CHJJJJݟܞܞ۝ۜڛۚښڙڙٕٕٗٗؗؔؓؒב֑׏֏֏Վ֍ՌՋԋՊԈԈӇӆӅӅ҄҄҂тср~~}{{zyxxwvvutsrrqpoommllkjiigffejC827492W6e1]F"F4<.9+9*:,;-=.>/A1B2D3E4E4F4H6J7M9Q<T;5"2.2,1,0.C&w/ɔ;ACԝ=3c(J$0(-*,),(8*v7FHIIIJHCΘ;@))%)%(%)&)&)&)&,#O:iMp+Ȕ:CHIJJJݡܡܟܟܞ۝۝ۜڛښڙژٖٖ٘ٗؕؔדגבב֐֏֎֎ՍՌՋԊԊԉԈӇԆӆ҆҅҃утсрр~~||{{yyxxvuutsrrqpponmlkkjjhgfK<47483F6\7J,9$v0k,a*X*L)B(>(>)>)<)<*:*9)9+9+;,?-}/2.1-0,1-1,d+8ݤAFEל=r1@*.+-(-)4)W0@GHJIIIGDӜ=o0)&)&(&)&)&)&(&)&.#W@pS u-͗;DIIJJJݣݢݢݠܠܟܞ۞ۜۜڛۚښڙ٘ٗؖؖؕؔؓדגבאא֎֎ՍՌՋԋԊԉԉӈӇӆӆӄ҄уутср~~||{zyyxwwuvtssrqqoonmmlkjjhaG884838383726261503.3,2*0&/%.#."-!,+r*e)W*K),2-1-1-2-1,D(w2͙?GIDk66+/*.+-(B,w8CHIJJJHGC՝=35%)&)&)&(&(&(&)&)&0#]DxX"{0՝>EHIJJJޥݣݣݢݡݡܟܟܟܝ۝ۜۛښښڙژٗٗؖؕؔהדגבב׏֎֎֎ՍՌԋԊԉӉԈӇӇӆӄ҄҃тссЀр~}}|{{zyxxvvvussrqqpoonmlkjioF838384848494848484847372726161514/4.2-2+1)/'2/3.1-1-1-3(W(~5ќBG?R30+.*/*2*[1>GHIIIIHFCӜ=4K((&($/#3&+&(%(&)&)&3#aG_%3ۢ?GIIKJJߧަޥޤݤݣݡݡݠܠܞܞ۝ۜۜښښښٖ٘ٗٗؖؔؔדؓגב֐֏֎֍ՌՌՋՋԊӉԈԇӇ҅ӄ҄҃т҂сс~}||{zyxxwvuussrrqppommlle40848374848474848474626172726162515051504/3/301,1.2.0+8!tV&v3’>ܝDU4/+.+.+?.~;EHIIIHIFDߥ@̗;3Y(,$($v4k=L!M'1')&(&)&4 eJf(6AHIKJJJߨߧߧߦߥݤޤݣݢݡܠܟܞܞ۝ۜڜۚۚڙژٗڗٖؕؕהؓגؒבא֏֎Վ֍ՌՋՋՊԉԈӇӆӆӅ҄҃у҂тс~}|{zyxxwwvuttrrqpponmmQ838374737484948483837261636252405041402.3.2/3-1-0-.#R5_G`*y5=p:/+/+L1CIJJJHGECߥ@њ<6{0_(4%(%3S=T>^ErN;$(%)%)&5lPo+ƒ9CHIKKJJߩߩߧߧߦޥޥޤݢݢݡܠܠܟ۞۞۝ۜۛښڙ٘٘ڗٕؖؔؔדؒגבב׏֎֍ՍՌՋԋԊԉԉӈԇӆ҅҄҃уу҂ср~}}|{{zyxwwvutssrqpponlC594737474838484948372727372425040513/4/4/104,2.0(X+=.J8`I y[(q2y6G0H0֔AߧFHHGFDܣAԝ>ɔ;5{0l+Z%9%)%(%E!iM_FXAV?4'$(&)&p9wX"{0Ӝ=EHIKJJJߩߧߦߦߥޥݣޣݢݡܡܟܟܞ۝۝ۜۛۚښٙژٖٖٕ٘ؔؔדגב֐֐֎֎֍֌ՋՋԊԉԉԈӇӆӆ҅҄у҂ссЀ~~}}{{zyxxwvuttsrqqpoe6184938384748484837272736262415050404/4/4/3-2,09+8*=.H6WBjP$^)f/v48<=’=‘<<97}3s.g)zZ$qM8")')&(%P(k*}\$dJR:-)$)%)%dAc&5ޤ@GIIJKJJߩߧަަޤޤޣݢܢܠܠܠܟܞܝۜۜۛڙٖ֑ٙ٘ٗٗؕؕؓؓؒ֒א֏֏ՎՌՌԋՊԉԉԈԇӇӅӅӄ҃утср~}||zzyxxwwvussrqqoW63847373839484737272737262515/40404/4/303-2-4'U/7*6):,A1K9XBeL"rV&}_*f-j.m/m.k-h,c)}]&qT#dId?2 )&)&)&)%1&z3p-}V#r:*!(&)&*$jNq,Ǔ:CHIJJJJJߩߨߧߦަޥޤݤޢݢݡܠܠܞܞ۝ۜڛڛښښژٖ٘ٗؕؔؔؓגבבאא֏Վ֌ՌՋԊԊԉԉӈӆӆӅ҅҃уссЀ~~~}|{{yxxwvvttssrl}O;4739393848483727273627241505040404.302-3.2.2'c,9(5(7*;-A1G6N;U@[E_GaI cJ eL fL gM!eK aCr7-"*&)&)')&)%(%1'K+>'+$(%)%)&1!}\$2֞>FIJJJJJJߩߩߧߧߦޥޤޤݢݢݡܡܟܞ۞۝۝ۛڛښڙڙٖٖ٘ٗٔؔؓדגב֐֐֎֎֍ՌՌԋՊԉԈԈԆӆ҅҄҄т҂трр~~}|{{yyxwwuutsrnSF77394747373726273527251505040404/202-2.1.1-0)- S)6&5(6)9+;,>/A1C2E4I7P<\EpK"H$9$-&*'*&+%2&0')%(%)&(&)&(&(%)$)%|Cm*8CGIJKJKJJߩߨߧަߦޤݤޣݢݡܠܠܟ۞ܞ۝ۜۛڛښڙژٖٖٕٗؔؓגגב֐֏֏Վ֍ՍՋԊՊԉԈӈԇӆӆ҄҄҃҂ссЀ~}}{{zyywvvutsq]lH62838373727273627262504/V*U0r8?%=)4)+(,()&/#@!Y*h2J,'%)&)&(&)%)&(%)$[%2ԝ>EHIJJJJKJߩߧާߦߥޥޤݣݢܢܡܠܟܞܝܝۜڜڛښٙژٖٗٗؕؕؔדגבב֏׏֎֎ՍՌՋՋԊԉԈԇӇӆ҅҄҃҂ҁсЀ~~||{zzxxwvuusm\SG8515162626130B4oFUaO<1401-2/1.1-1,1.0,/+.),&,#,"+!+ * +"-$/'.),(+(+(,(1&bB_G{\'w28<))&(&)&(&)$)&<#q,Ð8BHJIJJJJJJߨߨߧާޥޥޤݣݢݢݠݠܟܞܞܝۜۜڛښٙڙٖٕ٘ؖؕהדגג֑א֏֎ՎՍՌՋԋԊӈӈӇӇӆ҅҄҃҃тсЁр~~}}{{zzxxwvuusqkgfedccdhjjjW=3/2.2/2.2-1-0-1-1-/,.*-*.+.*-)-)+(,(,*,),(,'*(,(G'ZDR=aI{\'m.X,(&)&)&)&(&(%[(4٠>EHIJJJJJJJߪߨߧߦަޥޤݤޢݢݡݠܠܟܞܝ۝ڜڛښڙ٘ژٖٗؕؕؓؓגؒאא֏֏ՎՍՌԌԋԉԊԈԈӆӆӅ҄҄҃тҁрЀ~~}||{zzyxwwuutssrqqponnllZ903.2/2.2-2-1.0-1-0,/+/+/,.+.*/*,)-),*,)-(,(,)+(M'T?F4K8YCeL!yH"(&)&)&)&)&@&z3Ϛ=EHIJJJJKJJJߨߨަߦޥޥޤݣݢݡݠܟܟܞ۝۝ۜڛښښڙ٘ڗٖٖٕؕדגב֑֐׏֏֍Ս֌ՋԋԊԉԈӇӇӆ҅ӄ҄҃ттрЀ~}}|{{yyxxvvuttsrqpponmloF2.2-1.2.1-1-2-1-/,.+/+/,.+.*/*+'-b;J'=+-)*),(<"I7=.=.B1H6s3(&)&)%)&-%h/ɖ>FIKKKJJJKJJJߨާߦޥޥޣޣݢݢܡݠܟܟܝܝۜڛۚښڙٖ٘ٗٗؕؔؔדבבא׏֏֎ՍՌՌԋԊԉӉԈӇӇӅӅ҄҃ттсс}}}{zzyxwwvutsssqqpoom^?2.2.2.2-1-1-1-/,/+/+.,/+.*.**:,E5UAuJ&3(,(,(,$H/8*7)9+F-)#)%(%(%)&O-Ő=GKMMNMLKKJJJKߧߧߦߦޤݣޣݣݢݡܠܟܞ۞۝۝ڜۛښٙژٗٗؖؕؔؓדؒבא֐֏Վ֍ՍՌՋԋԊӉԈӇӆ҆Ӆ҄҃҃тсрЀ~}}|{zzxxwvuttsrqppoi[?2.3.2-1-0-1-0,/+/+/,.+/*-*\,;->/E5P:0$+',()'+!f*Z*i,+ '%(%)%)&>)ƅ=IMPPPONMMLLKJJߨߧߧޥޥޤݣޣݢݡݠܟܞ۞ܝ۝ۜڛښڙژژٗؖؖؔؔדؓג֑֐א֎֎ՍՌՋԊԊԉԈԇӆӅӅӄ҄҂тсЁЀ~}}|{zzyxwvutttrrqpfaA2.2-1.0,1-0,/+/+/,.+/*-*4!F6D4C4P3.$,(,()'*'*%*$*%)&($(&)&4(y;LPRRSRQPPONMLLKߨߧߧަޥޤݤޢݢݡݠܟܟܞ۞۝ۜۛښښڙژٖٕٗؕؔؓדגא֐א֎֎ՍՌՋԋԊԉԈӇԇӆ҅҅҄҃ттрЀ~~}{{zzyxwvvutssrqhnG2-1.0,1-/,/+/+.,/+.*.+2)D'cF$eA"6$,'+(,()&*'*&)&)&)&(%)&-'x=PSTUUTTSRQQOONNLߨߨߧަߥޤޤݣݢݢݡܠܟܟ۝۝ۜڛښښڙژڗٖٖؕؔؓؓגבא֏֏֎֍ՍՌՋԊԊԈԈԇӆ҆҅҃҃ттсрЀ~~}|{zzyxxwuutsssmQ3-1-1-0,/+/+0,/+.*/*,)3)8*5).(+(+),()(*'*&)&)&)%($)&ԂBUWWXXWWVUTSRRQPONߪߩߨާަަޥݤݣݣݢݡܠܟܞܞܝۜۛښښڙژڗٖٖؖٔؔؓגבב֏֏֎ՍՍՌՋՊԊԈԈӇӇӆ҅҄҄҃тссЀ~}}|{zzxwwvvutsscD51-/,/+/+.,/+.*/*,).)-*,),(,(+),()(*')&(&)')&2(OYZ[ZZYYXWVUTTSRQQPߨߧߦަޥݤݣݣݢܡݠݟܞ۞۞۝ڜڛٖۚٙ٘٘ٗؕؕؓדגבבא׏֏֎ՍՌՋՊԊԉԈӇӇӆӅ҅҄҃҂срЀ~}}{{zzyxwvutttrO=13,0+/+.+-*.*,).)-*,),(,(+),()(*'*&*&*']9[^^]]\\[ZYYXXVVUTSRRߧާަަޤޣޣݢݡܠܟܞ۞۞۝ڛۛښښٖٖٙ٘ٗؕؔؓؓגב֐֏֏֍ՍՌՋՊԊԊԈӈӆӆ҅҅҄҃тссЀ~}}|{{zyxwvvutts{MQ:=02,0*-*-)-(-),),(,(+)+(,'/)<-U7Raaa``__^]][[ZYYWWVUTSާߦޥޤޤޣݢݢܡܠܟܞ۞۝ۜۜۛښڙژٖٗؖؕؔؓדגבא׏֎Վ֍ՌՋՋՊԉӉԈӆӆ҆ӄ҄҃҂тср}}|{{zxwvvutsrq[}MdAP9F3>0;0;/<.>/F3Q8b=|HWfddddcba`__]]\\[ZYYXWVVߨߨߧަޥޤޤޣݣݡܡܠܟܟ۝۝ۜۜۛښڙژٖٕ٘ؕؕؓדגגא֐֏ՎՍՍՌԋՊԊԈӇԇӇ҆Ӆӄ҃҃тсрЀ~}|{zywvuurrrpopkd]\YXXZ]`fiiigffedccbb`__^]][[ZYYXWߨߧާߥޥޤݣݣݢݡܠݠ۞ܝ۝۝ۜۛښښژٗڗٖٕؕؔדגבב֐֏֏ՎՍՌՋՊԊԈԈԇӇӆӅ҄ф҃с}{yxurponmlkkijiiijllllllkkjjihhgfeeccbaa`_^^]\[ZYYߪߨߧߧߦޥޤޣޣݢݡܠܟܟ۞۞ۜڜۛۚڙڙ٘ٗؗؕؕؔהדגב֐׏֎֎ՍՌԌՋԊԉӈԇӇ҅҄Ђ΁|zur޵mذjѪg̥dȢaş_ş_Ğ]Ğ]ĝ\Ğ[Ş[Ƞ[ˢ]ѧ_׬`ݰbeghkkkllkkjihhgffedcba``_^^]\[Zߨߦߦަޤޤݣݢݡݡܟܞܟܝۜۜۛښښڙژژؖؖؕؔؓגגב֐֏֏֎֍ՌՌԋԊԉӈх΄ˁ~ysկm˦gb[VQN{JyHwHvFuEvEvEwFyF~HKNRVɠZԩ^ްbehjllllkjiihgfeedccaa`_^]]]ߧߦަޥޤޤޣޢݡݡܠܠܞܝ۝ۜۛڛښڙٖٙٗٗؕؔؓגגבא֐֎֎֎ՍԋӉψ˄yױqɦj`XQvImC|e?s^:lX6hU4eR1dQ1cP0cP0cP0dP/eQ0gS0lW3r\5zb8i$SC'YG)aN-kV1x`7l=zEMTѦ\chkmmklkkjihggfedccba``ߪߨߨߧߦޥޤޤݣݢܡܠܟܞܞ۝۝ۛڛښٙٙژٗؖؖؕؔדג֑Տҍ̈Áٵxãk^{QjEmZ:_N3TE,L?(F8$E4"B1B0@.A.@.?-?-=->-<-:,9.9.;/=1A4E7 J;"RB&]J+jU1|c8sAKTԨ^dimnmmmkjjiihgfeedcbbߪߨߧާߦޥޥݤݣݡݢݠܠܟ۞۝ۜۛڛۛښڙژٖٕ٘ؖדՒяʈ⽀ͬseU~iEhW9XI0L>(R7%T2"`0"x.".$-%.%.%.%-%-%,$,#,#+!r+\*L+C+8*6+8-:/=1C6J;"UD'eQ.y`7tBNǞYݰbilmnnmmlkjjiggfeeddߨߧߦޥޥޤݣޢݢݡܟܟܞ۞۝ۜۛۚڙڙ٘٘ؕՔЏȉ۹äo_sMm[=YJ2Y:(p4&1&0(1*1,2-2-1.1.2-1-1.1-/,/,/+.*.*-',&,$+!c*K+5+6+8-;/@3H:!UD'hS0g;~GTժ_glnonnmllkjiihhgfeߧߧߦߥޥޣޣݢݢݠܠܟܞ۞۝۝ڛښڙؗՕВƉյ}lZ|iGaR7o=+4)2+2-3/40404/3/3.2/0-2-1-1.2-.+0,/+/+/,/+.*-*-(,&+$+!a,8-8-9.;/@3J;"\I*t]5tBQͤ]fkoooonmllkjjihggߧߧޥޥޤޤݣݢݡܡܠ۞۞ܝۜښטГĊб{j{Ur`CtD17,3.4/40403.3/403.2.2.2/1.2-1-1-2-0-0,/+.+/,/+.)-+,)-),(,(,'-%h2!=1;/:.=1E7 TC'jU1m?MƟZ߳elopoponnmmkjjiiߪߨߧߧަޥޤޣޣݢݡܠܠܟ۝ٛҕČͰ{huRoX=:/5040406140504/30404/3/3.2-2.2.1-1-2-/-0,/+/+/,.+-*-*,(,),)-(-(,(,'0&W7#A4<0<0A4N?%cO.f;J›YݰelqrqqqponmmlkjߩߧަޥޥޤޣݣݡܠٞӘǏαirQN:607272627252514/5041305/2.2-1.1/2.2-1-2,/-0,/+.+/,/+.*-*,),),*,),(,(,)*&,'9(I8"=1;/>2J;#]K,zb9~IZݱfnqssrqpoonmllߩߨߧަޥޥޤޣ۠מ˕ԶoqQG76183616173726251404041505/203.1-1/2.2-1-2,/,/,.+/+0,/+.*.*-).)-*,)+(+(,)*&*'*'4'W5";/9.=1H:"[I+yb9JÜ[hottssrrqpoonߨߧߧߦޤڡњܿtqSC7728472727262725251405041405/2/3.2.2.2.2-1-2-/+0,/+/+/,/+.*.+-)-),*-),(+(,)*&)(*'*&-&b1!>0<0?3H:"\J,|d;Mʣ_kruuutsrrqppߩߨަݥנȔǭsWA673727283617273626251404051305/2/3.2.2/2.1-3.<3G:R@T@XCG91,/)-*0*.),)-),(,(,)*&*(*'*&)&+&x4$G8"C6!B5 J<$aN/k@Sԫdouvvvutssrqߨڥќֻ`A78382728472726273527251405041405/204.2.1.8/C4U@rQіhw|ƒc:1/*-)E5N7E4C42++(,)*&*(*'*&)&)&+%=+UE*I;$E8"O@'jV3vF[ltwwxwvuttrީؤȗʖrF;738362847373727262626251405041405/2/?5YCW?tQ:iS9u_ByShճzȇэr?5.*/*V?zPxOWˇ[vQ>2*'*(*')&)&*&)%+&E0]L.K=%H;#XG+yb;PΧdqxyyxwwvuuݩԢٱTF73848284739393736272627251405041405/2/H;e^mLm\@iY>{hH[åqύxC6.*/*[CeeǦn׳vְsa]A*(+'*&)%)&)&($/)N4]L/L>&M>&eR2sE\ߵmvyzzyxxwvܩȚs\7294847474848474837262725251606051405/2/4.VDŗlctQweF|iIXn޼͍H9.*.+]Gڷ{ڶz}~ٵw`-)+(+'*&)&)')&)&)&6,T7YI-L>&WG,yb'N@)jW7Pʦiỳт҂сррݲ<59383748484849484747383617291zdLg|ϵȕ̙ќ՞QC2-UDٞ۞ڝ۝۞ۜڛڛۛښ٘٘C76/kяԑҏʈ˫rh`D(%)&)&(&5)L9&I<'aP4vL fýЃ҄҂тссơ728483748484948474748462834.`E5l_Hw[it{ĬδٽɖҜkڡܡܡݡܠܟܞܞۜۜۛښښژ}֕ؕ֓ҏņӱxhYrL7-)&)&(%*%Q7%E9%[K1qIex̂ф҅҄҄҃уk94838473847474848484846261n9.UK:i]G{mSuZ|_dip{жȕ՟آޥޥݤݣݣݡݡܠܟܞ۞ۜۜۛۚٙڙژڗוҒƈұyhYvPZ@(%(%)&)&g8'F:&XI0lFcx̃҅ӇӇ҅҅҄UI9494837484848494949473834.XA4cXEykSw]z_z^x]y]amҟۥަߦߥޥޤݣݣݢݡܠܟܟܝ۝۝ۛښښؘؗԓ̎޼ȩugbzT7-(%)&(%8*J>)WI0jFczͅӈԈԉӇӆӆ>88484948484848494828474727.\K;ygRgtvqlhgqӠܧߨߨߧߦަޥޤޣݣݢܢܠܟܞ۞۝۝ٛٙΒ﵁xpԉcsT_GM<3,(%)&(&3)NA,YJ1kGd{͇ӊՋՊԉӈӇ8374848484747484848472727350C8WHyaˡѰ̱ů«Һʜإݨߩߨߨߧߦߥޥޣݣݢܡܡܠ۞ڜךԘ}C7*&)&)&*&'&)%(%(&)%)&-&OB-YJ2mIf~͈ԋՍՋԋԊԉ73848484748484847474627272727262>6YKkYk棃ᭉ™ƛ̞ӤکުߨߧߦޥޥݤޣݢݡڟלїɐۧxK=.)3-4.5-3-5.1+*&(&)%)&NB,]N5pLi㿀ϋԌ֎֍ՍՌԋ8394848474849474847284623.70;461506151;4G>XJ΢ԦҥԦק۪߫ߩߨߧާߦޥޤݢڡԚƐѴt^uX_ӇdڍgݏhݑjnR/*)&)&)%MA-aR8wQnэԏ֏֏֎֍Ս9384848484948474948484722+I6,hE8YJq]r^D<4/50wbӧХʞśɝѢک߬ߧݦݥݣؠϙټve]bjuҲ߾χc/))%(&)%NB.hX=XȩtŇя֒בב֐֏֎:684748484847484847484622+>2*IA6i]Lmƫ优}뼘ʠѺîůҤܬߩݧܦܥܥآΙչs]nQ}kOuU_juŧxlP(%(&)&)%QE0raC`ѱzɋԒדؓגבבאA<94849494949494849494732,?1)A;0ZQCu`ҽ̥ˤտ{mkuŰɝ٪߯ݩڥ֢Ԡע֠ћ|huVyhMscIxhKqR}Z}\J:)&)&)&)&XK5~kKiڹ͏ٕ֔ؔٔؔؒב\Q84838484748484847462833-C0';5,LE8k`OlŲmu^xlV~qZmƝتޮޮޮޮ߫٦РƗÔȘ鿑݅g䴈ֶ}l}]}lPpaHj[Cm^D|W@/)(%)&(&-&cU3TL?e[LmcQh^MiSDE:M@|p[rÝөիͤšӼ™͢٪ݭګ̠˳vjdG;,(+(+'92nWϔptbufLaH6+&)%(%)%)%|C3uTpܽϕ؛ښۛښڙٙٗٗ<894738484848484848473732.;.'50(94+A;1HA6ND8x?5825083p]ßӬׯϧѻ|йΤڬګ͢ɲpw]qXmVVG2-,'*'*'<4[IlTycJ6,(&(%)%)&(&|YBcɮ~ȑ՚ٜܞۜۜڛښڙ٘8383849384847484837362610)3.'50(72*Q3+4.4/304040VIѽҫ۲ذǢp|dnŝثۮХѺww]vhQrYh}bUF+'*'*'+&1+:1'$)&(%)&)&6.sUt۽Й؞۟ܠܞ۝۝ۜۛڛи51939394947484747383627330J.'3.'/*3.4/605150I?}нͪԯѫѽ~wathTwa}׭蝀[L۾guhRnaLqYksv]60*'*&)&*''$)&)&(&(&R@kγʕ֞ۡݡݡܡܟܟ۞۝ۜ{8384847484748474738472833.2-40505/4/40B9|n]uȶӿҿruiVh]L}p\{ҽᜀ820+^NȲrzmVdYFeYFwiSz_coWC7+&)&*''$)&)%)&6/z]īŔԞۣݣޣޣݢݡݠݟܞܞ?9849393649474848473735173725040504/{5.KD:^VHtjY}hwxNCEaVDeYF_TAv?3,')&*''$)&(%(%XF{Ҟڤݥަަޤޤݣݢܡܠܠ7273837483847474847282735151512.k0*72+=7/F@6RK?`XJndTaR;42.1.>5TL?i_N}g}xc.*-*1,WHj^KQH:E=1C;/F=0Q=13+*'*&)&*''$)%($?5rٿОڦާߨާߦޥޤޤݣݢݡʵ^T73838374948494848362734061510+@.(40)61*94,>90E?5MF;}C94.2-1.o90G@6UM@lbQ~r^ze|fC9.*-)0+~@5E=2;4*A2(`0'-'*(*'*&)&*''$(%2,zaٿѠ٧ުߩާߦަޤޤݣF?839484838484747372636161403.1,e/)C.(40)51)83,;6.z6.2-2-2.U2+<6-D>3NG;WOA[RD[RDhK>/+-)-).)f1)`.'-'+&+'*'*'*&)&*''$)&hTپҢ۪߬ߩߨߧާߦޥ:574837493848473627361604051502.1,x0*W/(40)50)~0*1-1,2.=/(50(94+=7.@:0A;1A;1@:0m4,-)-)-),(,'+(,'+'*(*'*&)&*''$_N۽Ԧܬߨߧߦ839473848384737283517161514/402.2-1-0+0*0+1-2-1,3.(4/(4/(50(50(61)S0(p.(.)-(-)-(,)-(*),'+'*(*'*&)&)'cR׫ޯ72:48374848372736161625150504/3/2.1-0,0-1-2-1-/*/*.).).)/)-)-(-)-(-(-),),'+)+'*')(*'*&)&p]Ƞڮ߳62849494837283516162515050413.3/3.2.2/3.2-2.0,0,1-0,/+/+/,/).+-*-)-),*,)-)*'+'*(*'*&щpҫݲ@;8483837283516162514050313.2/3.3.2/2.2-2.0,0,0-0,/+.+.,/).+-*-)-),*,)-)*'+'*(;4ۛ۳jb@:727283516162414050413.3/4.3.2/2.2-2.1,0,/-/,0+/+.,.).+-*-)-),*,)-)*'3/_Q躚]T9572626161615050412.3/3.3.2.2.2-2.0,0,/-0,0+/+/,-).+-*,),),*,)3/QG}Բf]516161515040413.3/3.3.2.2.2.2.0,0,/-/,0+/+.,.)-*-*-)-)2.[Pzɪxo62405051414.3/2.3.2.1.1-2.0,0,0-0,/+/+.,.).*-*>7uf袍Ӵʹ]U3/405/402/3.2.1/1.2-1,0,0-0,/+0+/,93qcʰ펂_VHB732.2.3.1-0,2/@;VMuiۼնӳбвӳ׶ݻžžȺԸɯ;ô˻ƨѱ۹ý~}w{u{t}v{ؾȰĶun|k}lq{²ŧԴ߽}xqnieb^[XTVSOTQMTQMURMZWRea[snhyĶӻ̿|yjsj]ibUc\PaZNbZNg_RqiYvfwͽҲ޼zxsfd`WURMKHEC@A?<=;8=;8=;8=;8@>:EB?OLH]ZTplezͿտɽqph\b[Q]WL\UK\UK\UK[TIYRG[TIaZMqhZ~m˻Ӵ¿~igdUSQHFD@><:87864642531531531531641863<:7C@=NKG`\WwrkŸ¯{nhaW\VL]WMf`Tph\vnaypcum_nfYe^Q]VK]VJjbU|jϿ׷zxw_^\MJHn:8304/415161613/1-h0.40.420531863=;8EC?URMkga{мws\R?9400,,'-*:4YPs|}mqi\`YM\UJkcVoǫ޿Ÿ~trtRP8461948484848462837362512/1.D1.51/531974A?;NKGc_Z|uƿ}@;,'+'*(*'*&)&(%(%(%RJ{xum__XM]VKqi[zõӶͧnl@=6294747384848494838362616161402/t1.<2/531864=;8JGD`]X{t¶Ćz/,+(+'*'*(+'*&)&)%($'%(%<6rvnfZ[TJaZOvgŬصfd:673737374848384748473736261516151503/2/R1/420642=;8IFC`]X|vźؘ/*-)*(+'*'2.=7B<=84/(%'%)&)%94qzlb[QYSImeYzĶոge84838373737474848474847363626161615140513.2.i1.420642<:8IGCb_Z{ɾƸG@,)-)+(.)FAsițЦėwlLE.+)%)&)%<7sng[YSIaZP{m̳vr8383838384748484748474847373626161615150504/3.2.r0.410642=;9LJFfc^~ፃ2.,(-)-*{GAyldǾijujRK0+(&)%)&NGyqf[ULYSJumaị̀728383837483848484747474847383625161524140405/3/2/2-l1.421753><:NLIifbf_-),)-)@;XTNojbɿyonbYIB,))&(%+(k`_YPUPGkdY~ƹ=8948383748484838494847484847383625161524150504/3/3/4.2-Y1/542865@>b\SSNFc]SvԽni946384847483838372:5?:D>F@C?=983525151625150503/3/4/3.3.0,I1/542865@>10543:97EDB\ZX|zv»މ2.+*-)62}w{wqRM*()%*'YTûf_)')&)&0,X=8PLFrmcƵ?98374838395]X˹ifdRPNIGFJHGMLJONLMLJIHGIHGA?72504/4/3/3.3.3.1/2.0-1,0.;21543;:9HGE^\Z}z½۴FB,)-)+(73XS_ZTP62)&)%1-~xķib*')&)%-*a95OKErmdǶz;694847362C>urlȾûVQ;695;6=9A>WTige][ZQPNJIG;8403/4.3/2/3.2.2/1.0-0,/+0.621543<;:IHF`^\}{~x/+-)*(+(,(,(+(*'*&)%B=c])&)&'%*(g73OKFtnfɺg_8394948384pJF|xrʿż9573949494837361C>liljhVTSMLJ625/4/303/3.3.2/2.2.1-1-/+n0/522654=<;IHG_]\}{yhc-)+)+(+'*'*(+'*&.)ӇùUP)&)&)&*'i51QNHwrj̽пVP73747462<7YVP|uʿϷ50848373848383737261<7kfmjgTSQaED3/4.3/2/2.3.2/2.1.0-/,0,/+`0/522655<;;HGF\[Ywvs{?;62/+-*-+40=;׊Ƚ=9)&)&)%)&l41URM}xpߨߨߩʺRK83848472<7ZVQ~vĺ>99482849484848373726161?:kga^[MKIA>3/303/3.3.1/1.0.1-0,0,0,.+\1/433655;::EDCVUTnmkΏzvuq}xڗje.*(%)&(%)%o62ZWRyަަߨߨߩȷQJ73749494r>:YUO|uxp9383938373?;GA@;6273616161HC}daQOMMKI@;3/3/3.3.2/1.0.1-0,/,/,/+.+c10433554988BAAPONcb`{zxy?<(&)%)&)&)&o95a^YݤޥߦߦާߧߩȶQJ837494:5UA==CBBIHGLKJLKJJIHEDCt53)&)%(%(%)&)&)&.+mUQܞܟܠݡݡޢޣޤޤޥަߧDzQJ637494=8MIBKGAc^V]U:59373ID_[TQMHuKFuWQlg`toiyw50626151<8IFCVSP|wGB3.2/1.1.1-0,0,0-/,0+-*.*.+-*-)/,411322444555776988988988N54,)(%(%)&(&(&)%)&(&21tli۝ܞܟܟܟݡݡݢޣޤޥߦߦߧߧߩɳSJ839474=8TIBIE>YTMUN947383SLqlcYUND?30tRMnib}LG62516140HFBWTP}w~:52/3.0.0-/,/,0-0,/+.,.*.*-*-).)-*.,b/.D10F22W10v.-+)*&*&)%(%(&)&)&)&)&)%?<ۛۜ۝ܝܟܟܟݠݡݢݣޣޤޥߦߧߨ˳WN838484<7uJAHD=PKDNF948383VP}tnePJ61PJzq«c\62515140GDA[XS|ù]W2.2.0.1-0,0,1-0,/+.+-*.*.*.)-),*-(+(+(,'+&*'*'*&)&(%'%(&)&(&)&)&,(^[ڙښڛۜ۝۝ܞܟܠܠݢݢݣޣޤޥߦަߨߨֽg[83739494IAKF?IE>E?848473HB{{UN83NH˹ia51616140IFBc_Zýﵫ>91.0.0-0,0,0-0,/+.+-*.*.*.)-)-*-)+)+(+'+'*(*'*&)&(%(%(&)&)%(&)&41٘ٙٙښۛۛۜܝܞܞܟݡܡݢݢޣޤޥߦަߨߨv<6838483LDSNEFB;tA::5738373B=OI:583neŻƯ\U61515140OLGpleƻ슁2.2.0-0,0,/-0,/+.+.*.*-*-*-),)-(+)+(*'+'*(*'*&)&(%(%(&)%)&'%(&[Zٖٖڗژڙښۚۜۜܝܞܞܟݠݠݡݢޣޤޤަަߧߧ?9937483F?pTKJE=E@9;683728484739462ʜC>62525140[WQ}u[V2-1-1,0,0-0,/+.+.*.*-*-)-)-*-(+(+(+'+'*(*'*&*&(%(%(&)&)&(%41ؔؕؖؗٗ٘ژښڛۛۜ۝ܝܞܟܠܡݡݢޢޣޥߦަߧߩJB948483;7WNXRIGB;W?8729494848472_V~d[506252513/niaƾ0,1-1,0,0-0,/+.+-*.).*-*-)-)-)+'+(+'+'*'*'*&)&)%(%(&)%(&)&דדؔؕؖؗٗ٘ٙڙښڛۜۜ۝ܞܟܟܠݢݢݣޣޤߦަߧߨߩߩoa93947463HA`TSMDE@9T>7:4407250OGujxlundn_V<771716261:6x1-1,1,0-/,.+/+-*/*.+-*,),)-*,'+(+(+'*'*'*&)&)%(%(&)&(%^\אגגדٖٖؔؔٗژ٘ڙښڛۜ۝۞۞ܞܠݠܡݢݢޣޤߥߦߦߧߨ{<794848462SKq`TRLCE@9B=6FA:MH@TOFYSJZTKWRIQLD<67261516261[Tó1-1-1-0,0+-+/*/*.+-*-)-)-*,'+)+(+'*'*'*&*&)%(%(&)&A>ξ֏֐בבؒדٖؔؔؕٗڗڙڙۚۛۛۜܜ۞ܞܟݠݡݢݢޤޤޤޥߧߧߨߩUK7384838362ZOuaUVNDGB:A<5@;4A<6C>7C>7M<561726251506140ǽ횐730-/,.+/+-*.*-+-*-),)-*,'+)+(+'*'*'*&)&)%(%(&:6ԲՍՎ֏֏בבגؓהؔؕؖٗڗڙڙښۚۛڜ۝۞ܟݟܠݡݡݣݣޤޥߦަߧߧ848483838372RIXMwPGZH?QA9X<5j939361738362516151bXȹKF0-/+/,.*.*.+-*-)-)-*,'+)+(+'*'*'*'(&)%(%B?٫Ջ֌Ս֎֏֐אבבגٖٖؓؔؔ٘٘ژښښۛۜܜܝܞܟܠݠݡݢޣޣޤޥަߧߨߨse83947383938361C?88272947373626161D>ӱƸog@;/+.*.*.+-*-)-)-*,'+)+(+'*')'+'(&0,\X㺳ՊԊՌ֌Ս֍֏֏אאגؒؓؔؕؕٗٗڗڙٙښڛڜۜܝܞܟܠܠݡݡޢޤޤޥߦߦߨߨڹ`T7394737383949484748494848473726261=8ߙﯢneFA.*.+-*-),)-*,'+(+(+'*'*'1-XTܖӈԉԉՊՋՌՍ֍Վ֏֏אבٖؒؓؓؔؕٗ٘ڙٙښښڜۜܝܝܟܟݠݡݡݣݣޤޤߥߦߧߨߨЯaU738483838483848484847484637262<7藆闋rjHC/+-),),(+(+(83XSۄ}櫢ӆӇӈԈԉԊՋՌՌՍ֎֎֏בבؒדٕٖؓؕٗٗژڙښڛڜۜ۝ܝ۟ܠܠݡݡݢޣޣޥޥަߧߧߩߩаk]72939473748484848484947362G@ﳞȺø҅҅ӆӇӇԉՉՊՋԋՌ֍Ս֏֐֑בؒדٖؓؔؕؖٗژژښڛۛۜ۝ܝܞܟݟݡݡݢݢޤޤޥߦާߨ>783948474847474848461wу҃ӄӅӆԇԇӈԉՊԋՋՍ֍֍֎֏ב֐בؒדٖؔؕؖٗ٘ڙښڛۛۛ۝۝ܞܟܟܡݡݢޣޣޤޥޥާߨߨߨXMF?E>D=D=IB`U⨑ӵҵҶԸֻڽҁ҂҃҃҄ӅӆӇӇӈԉՉԊԋՌ֍֎֎֏֐֑בגדٖؔؔؕٗژژڙښۛۜۜ۝ܞܟݟܠܡݢޢޣޤޥަާߧߪݹմ̭æ˻Ĵô˼ŬѶɼüɾрст҂҄҅҅ӅӇӇԈԉԊՊՋՌՌ֍֏֏֐אבגٕٕٖؓؓؔٗ٘ٙڙۚۜۜ۝۝ܞܟܠݡݢݣݣݤߥަߦߧߨߨܶүƥɸxqm~k~lms{¨е}~Ѐст҂҃҄ӄ҅ӆԇӈӉԊԊՋՌ֍֍֎֏אא֑גؒؓؔؕؖٗٗژڙښڛڛۜ۝۞۞ܟݠܡݢݢޣޤޥޥߦߦߨ޶հǤǵuzfvkZjaQbYK]UH[SFZRF\THaYLjbSyo`pĩոǶxwrimhagb[eaZeaZkg`upiy|}~рсс҂҃҄҄҅ӆӇӈԈԉԊՊՋ֌֍Ս֎֏֐֑בؓדٖؔؔؖٗ٘ٙښڛڛۜ۝ܞ۞ܞܠݡݡݢޣޤޤޥަߧܳΩѽtu`lbQ[SDPI4A;1@:1@:1A;2D>5IC9SLAbZMvm]sŶ̱۾ò{uofd_W\WPYUNXTMXTMWSMXTNZVPc_Yupiʾ{{||~~сҁ҂҃҄҄ӅӆӇԇԈԉՊԋԌՍՌ֎֎֏אבגדדٖٖؔؔؖ٘٘ڙښۛۜ۝ܝܞܟܟܠݡݢޣޣޤޤަߦߧߨٯʤʶ~~gpeSZQCKD8A;0<6-93+72)61)50(50(61)72*94,>80F@6SLAf^Pud|Ū׻Ǵulf\]XPZUN_ZRfaYlg^mh_kf^e`Y^ZSYUO]YSokcxyz{|}}~рссту҃҄҅ӆӇӇԈӈԊԊՋՌՍՍ֎֏א֐בؒדٕٖؔؕٗ٘٘ڙڙۛڛ۝۝ܝ۟ܠܠݡݢݢޣݤޥߦߦߧߨۯˣɴxv_e[IPH:Z8.3,3-3.3/4/3/2-/*S.'4/'4/(50)94,>90IB9ZRFsjZrξԸѻ{neZF>;68484=7GCc[yz{ulid]]YR]YRpkdwwxyz{||}~ррт҃҃҄҅Ӆ҆ӇԈԉԊՋՋՌՌ֍֎֏֏֑בגٖٖؓؔؕؖژ٘ڙښۚۛۜ۝ܝܞܟܠܠܡݣޣޤޤަަߧߧߨۭΣ̶ws\cUD8060847484949494946173622-b.(4-'4/(61);6-D>4SL@jaS~kͼӷîJC,*+(,'+'*(+'(')&-)aXxoja]XR_[Tvqiuvvwxyzz||}}~Ѐртту҄ӅӅӆԇӇӉԊԊՋՌՌ֍֍֏֐ב֑גٖؒؓؔؕؖٗ٘ڙڙۚڛڜ۝۞۞ܟܟݠݡޢޣޤݤޥަާߨߨߩܭҤӻzqZD95194946284748484847471625162400+R.'5/'50(94+@:1OH=f^P|iνշֽĝ61,(+(+(,'+'*(+'('+')%(%HCwje][WPd`Xvsuuuvwxxyz{{}}ртт҃҄Ӆ҅ӆԇӈԉԉՊՋՋՌՍՎ֏֏אאבגדؔؕؕؗٗڗٙڙڛۛۜۜܝܞܟݠݠܡݢݣޣޤޥަާߧߨ֧߬ękU<472936284847284847474747173626050623.z/)@.'4/'72*>8/MF;e\N}jָܬ4/-*,(+(*(-)1,2/1-,*)&(%)%(%GB}~xma\TZUOqkcqrstuuvwxyz{{||}~Ѐсҁтт҃҅҅҆ӇԇӈԉՊԋՋՌՍ֍֎֏֐אבגדٕٖؔؔٗ٘٘ڙۚۛڛۜ۝ܞܟܟܠܡݢݢݤݤޥޥߧߧߨ߫ۨΟ˳pY;483838283637484848484648461736261615051400+Q.'4/'72*>8/MF;h_PlħٹδME.)-*,),(;5]R~o͈y|o`W>8*'(%)%(&LEyke\XSLc^Vvpqrrsttvvwxyyzz{|}~рс҂у҃҄҅҆ӆӇԈԉԊԊՌՌ֍Ս֎֏א֐גؒדדٖؔؕٗ٘ژڙښۚۛۜۜܝܟܟݠܡݢݢݣޤޤޥߦާߩިբÕ~d:48382728484847474747484749461736261615250404/1,].'4/'72)?90PI=lcSpƨڹ50.(-*-*?7eYȻk_IA+'(%*&(&^VwpfZUMZUNysiɹnnpqqrsstuvvwxyz{{|}~ЀЀрст҃҄ӅӆӆӇӈԉԉՋՋՌՌ֍֍֏֏֐בגגٖؓؔؕٗڗ٘ژښۚڛۜۜ۝ܞܟܟܡݢݢޣޤޤޥަߧߧߨ٦ϝΠ{<6838372747274948484847474749461636251616241404/3.1,Z.'50'83*A;1RJ>oeUrǨٸغi\.+.)-*:4XRGqi[ɼ}ugq]SA:)&(&(&.*qf^YPUPImg^ɿlmnoopqrstttuwwxyzz{|}}~рЁт҃҂҄҅ӅӆӇԈԈԉՊԊՋՌՍ֎֎֐֐בגٕٖؓؓؔؕڗ٘ژښۚۛۛ۝۝ܞܟܟݠܡݢݣޣޤޥަݥעƕJ>73848284628384838484849484749461636261716251414/3.3.0+K.&50'93+B<1UM@rhVsȩ۹ɬRH-*.)-*{QFVOEf^RpykhaVtQI83(%(%)&KDa[RSNFe_Vyjkmmnnopqrstttvvwxyyz{|}}~~рст҂у҃҄ӅӅӆӈԈԉԊԊՋՍՍՎ֏֏א֑בדٖؓؓؔؖٗژژښښۛۜۜ۞ܞܟܟܠݠݡޢޣݣۢҜt\728383748494848394949484748494847173626171625140404/2.3/0*=.&50'93*C<2VNAujYuɩܹåKD-*-)-*pgYXQFZSH|bVNF73;4^T~ugd]R_YNMD+((%)&50iXOQLD^XO}qҾijjklmnnopqqssttuvwxyyz{||}~рс҂҃҃҄҅ӅӆӈӈԈԉԊՋՌՌ֍Վ֏אבבגٕٖٖؓؔؔ٘٘ڙښۛۜۜ۝۞۟ܟܠܡݢܢٟ͘G<8474737482938393@9cQyƘțլs\D;;572626171524141304/3/1.3//)6.%50'93*D=2XPAwlZwò̫ݸIB-*-)-*wfaYL\KA<4+'*()')'>8\UK^WM]S61)&)&/*KBOJBYSK~wjκghhjjllmnnopqqrsttuuvwxyzz{|}~рстт҃҄ӅӆӆԇԇԉԉՊՊՋՍ֎֎֏֐אבגדדٖؔؕؖٗژڙڙڛڛۜۜ۞ܞܟܠ۟ם~a;4748482828373A9oWΝ˚ؾìwnimVD:826171625141404/4/3.2.3//)5-%50'93*E>3[RD{o\yƴͫ޹LE-*-)-*ouk[hQE92802.*')&+)sF>g`SwhG@)%)&*&<6MH@UPGyreʴefghhijkllmnoopqrssuuvwwxyy{{||~~ррс҂҃҄ӄ҅ӆӇԈԈՊՊՋՋՌՍ֎֎֏אבٖٖؒؓؔؔؕٗ٘ڙښښڛۜۜܝ۞ڝ՚aN738483628383C8fѶɖɗҸyepVqcLi\GgZFl[FG;8361614151304/4.3/3.2-2./(6-$5/&:4*G@4]TEs_|ʷѭäXM-*-)-*fWtxjZeVJXQElF<,()%*'C<}sdVL)&)&(%50MD7QKBrj^íbbcdeffghijkklmnoopprrstuvvwxxyz{{|}~Ѐрстт҃ӄ҅҅ӇӇӈԉԊԋՋՌՍՍ֎֏אבגגؓהٖؔؕٗٗٙڙښڙٚm>69374938370P=`ū}ݿٽz`m_GUJ8JA1I@0JA1KB2I@1H?0L?0<2515141303/3/403/1.3/1-0+}.(5-%60'=7,KC7dZIyb͹ޞ?6,),*+(A9l\racU<6+(*%/+paŶƫeY*&)&)%-)`92OI@rj]ì`abbcdeffghiijkllnnopqrrsttuvwwxyz{{|}~Ѐсту҃҄҄҆ӆӇԈԈԉՊՋՌՌ֎֎׎֐בבגדٕٖؓؔٗٗ٘٘ԕ}^;584848371=0rbGf̰۾˯iXC=3:1<2?5B6}M<_S?VK9MC3M@0804150303/4/302/2.2/1,1-/,n.&4.%60&=7,ME8e[Jzc~˸hX,*-*,(,(/+2.0+*'*(*%;6ѨϰѲ`T)')&)%*'f5/OI?sj]Ĭ__`abbcddegghhikklmmnoopqrrttuvwxyyyz{||~~ррст҃҄҄҅ӆԇӈԈԉԊՋՌՌ֍֍֏֏֐בגדהٕٖؔؖؖĉdN9383948361xB1zhKjдոvC8927272827293<5H=_HdWBRH6RA15050304/4/303/3.1/0,0,1..+^-%4.%71'>7,ME8e[Iwa{ƯPE-*-),(+)+(+'*'+)*%k]׶յˬUJ(%)&(&)&h4-QKAvm^Ŭ]]__``acddeefgghijjkmnnoopqrsstuuvwxyy{{|}}~рс҂у҃ӄӅӆӆԇӈԉԊԋՌՌՌ֍֎׏אבגؒؔؔؕؔSD839494728/YL6nOmѴϱ81949494847474847261@8cLgZDQG5t=151303/3/404/3.3/1-1-2.1-.*N-%4.%71'>7,LD6bXGr\ucT-(,(+)+(+'*'*(jY۷ճɩÞ?9)&)&)&)&m3-TMB|rcɯ[\]]___aabcddefgghijkllmnnopqrsstuvvwxxzz{|}}~~рсту҃҄҅ӆӇӈԈԉՊԊՋՋՌ֎֎֏֐אבדؓ֓~N@839474728,ZL6pOmѳE:9483948474849484626262D;cL]Q=MC390504/3/302/2.3/1-1-0..,0-.)G-$4.$71'=6+IA4]SCwjVkǡl\SHLASGp^嶗Ӱͫҿo^/+)&)&)%)%o3-YRFyg̯ZZ[\]^^_``abbcdefgghijjklmnnopqqrstuuvwxyyz{||}~ЀЀрҁ҂у҄҅҅ӇԇӈԈԉՊՋՌՌ֍֏֏֏֑ב֑|M@83946472{9+YL5oNk|\948373848394;5:47383628261L>uZDQF5ND3714/3/202/2.3/2-1-0-1-0+0,.)M,$4.$60&<5*E=1UL=k`Mv_qıѼàĠ˸jD:(&)&)&)%)%o5._WJmҲXYYZZ\\]^__`abbcdeffghiijkkmnnopprrstuuvvxxyzz{|}}ррссу҃҃҅ӆ҇ӇԈԈԉՊՋՌՍՎՎ֏֐ՐzM?83947492Y;)XJ4lKgM?82937373>3WBmSeOI>:472626250S@VI6KA0H8504/3/3/2.3/1-1-1.0-/+/+1--(Z,$4.$5/%92(A:.MD6]SBocPu^kv|~{sizn[L@,()%)%)&(&(&n91i`QvȸֶUVXXYZ[[\]^__`abbcceffghiijjllmnoopqqstttvwwxyz{{|}}рст҂уӄӅ҅ӆԆӇԉԉՊՊՋՍ֍֎ՎyM?839484:2G<)TG1xfFrRC9938472<1kL7~kMci_\H61626261:3^N9KA0]L8P@3/303/3.3/2-2-1.0,0,/+0,/*-(n-%6-$5/%71&<5*C*PC.o^@_F:48483=5dF2XJ5m]AsQ}Y|XxWUC62626140~G6KA/WK7eLI=3/3/3.3/2-1-1.0-0+0,/,-)/+-)-&@,#4.$5/%70&;4)@9-E=1KC5NF7OF9ME7IA5f6-+'(%(%)&)&)&)%,(mL@yeʩ߼RTTUUWWWYZZ[\\^^__`abcddeffghijkkllnnopqqrtsuuvwwyyzz||}~рЀстт҄҄ӅӆӆӇӈԉԊԊՋvN?737484:3L?*L@+eU:WA:37372E8]O6RE0pG3pU=sbEygItRpS51726161;1J@.VJ6nPy\=53/4.3/1-1-1.1-0,/+/-.).*.*-)-'o-%3-#4.$5/$60%82'92(:3):3)D3(-')&)&(%(%)%(&)&)&0*q_OuȶӰQRRSTUVVWWYYZ[\]^^__`abbdddfgghijkklmmnoopqsssuvvwxxyy{{}}~Ѐс҂҂҄҄҅҆ӆԇԈԈԉvN>838494<3OA+I=(\M3P<937382L;m\?WJ2>/5-qM7n^BuR\E;6251624/H>,WK6oQomU614.3/1-1-1.1-0,/,0,.*.*-*-).(-)-)+%P,#3-#4-#E-$e,%*'+')%)'*%)%(%(&)&)&)&80wbţ۶OPPQRSTUUVVWXYZZ[\]^_``abbcdeefggiikkkmmnoppqrsstuvwwxyzz{|}~Ѐсст҃҄ӄӅ҆ӆԈvO?738494;3mA-H<(QC-I7928382P>sNm[?F461K7{hH[hYG62617150G<+YL7rRsߡvK>2.3/1-1-1.1-0,0,0-.)/,.+.*.*-),).*,),(+(+(,'+'*()%)'*&)%($(%)&)&*&OBtɶҬMOOPPQRSTTUVVXXYZ[[\]^^_`aabcddefghiijjklmmoopqqrttuvvwwyyz{|}~~Ѐсҁту҄҄Ӆӆw[D838384:3C0I=(J>(B2829473J83H9ZiɢqaK62515151H=+aS;zWwƎk923/2-1-0.1-1,0,0-.*.,-+.*-).+-).*+),(,(+(+'+'*()%)')&(%'%(&)&)&0+zcȢڲKLMNOOPQQRSTUVVXXYZZ\\\]^_``bbbceefghhijkklmnnopqqrsstuvwxxzz{|}}~~рс҂҂҄ӄsQ:4837492E4QC+E9%;+92837372H;YD;583[EkĦqǞnZF62616151MA.m]A`̯|ʐךfP2.2-1-1.1-1,/,1-.*0,.+.*.*.*-)-*+),(,(+(+'+'*()%(')&)%(%(&)%)&H<|ӾԬJJKLMMNOPQQSSTUUVWXYZZ[[]]^__aaacceefghhijjklmmooopqrsstuvwwyyz{||}~~Ѐрт҃҃^>5837483D7cK0I<'J9$9083828484838462Ά]£ol[E962616050XJ4~kKiٺΒؚŒE:2.1-1.1-1,0,0-.*/,.+.*.*-*.*,*,)-(,(+(*'+'*()%)'*&)%(%(&(%-)nɴΥܰJJJKKKMNNOPPQRSTUVVWXXYZ[[\]]__`abbcdeffghiijkllmnopqqrsstuuwwxyzz{|}~~ЀЁсeD8748473=4N7SE,E9%p9'509384848483M=``X_D506261613/iY>~X¥sÉғؘڛy1-2-0-1-0,1,/-/*/,.+.*.*.+-*-*,)-(,(+(+(+'*()%)'*&)%(%(&'&aOŰɟڭJJJJJKKLMMNOPQQRRTTUVVXXXZ[\\]]__`abbcddffghhijklmmnnopqqsstuvwwxyyz{|}~~{_E83847473G7sR5OA)D8$q7'8/617261E7kIqKjGr\=>0626151625.mJeմ~ʌՔٗڙڙd1-2-1-1,1,0-.*/,.+.*.*.+-*.*+),(,(+(+(+'*()%)'*&)%(%(&E:èƜ֩߰JKJKJJJJKKLMNOOQQRSSTUVVXXXZZ[\\]^^`aabcddefghhijkklmnoopqrrsttuvwxyzz{||}~vQ9374838492Q:fR3N@(D8$Q6#d:'l@,rH0kM3bP4_O4WI0;+7273516072K8[Ǩsяוؖ٘ژѓ~^1-1-1,0,0-/*0,/+.*.*.+-*.*+),(+'+(+(*')()%)'*&)%(%1,ƚwǚէܭJJJKKJJJJJJKLMMNPPQQRSTUVVWXYZZ[[]]^^_`abcddeegghijkkllnnooqqrstuuvwxxyzz{|}vI:9494848483W(G8#H4"P4#Z4$3+837271737262L;h۷zȆэՐؓؔؕؔؖٗВ{[810,1-.*/,.+-*.*.+-*-*+)-(,(+)+(+')'*')&)&0*Ёe͜إݩ߫KJJJJJJJJJJJJJJKLMNOOPPQRRTTUVWXXYZZ[\]^__`aaccddefggiijkllmnnopqqsttuvwwxyzz|U@83937383837351D5I4D1=/6/6184748262727281Γc޹zDŽЊԍ֏אגגהٕؔؕؖmM>5/.*/,/+.*.*.+.*,*,)-(,(+)+(+')&+'*'>5ڍlԟڥާߩJKJJJJJJJJJJJJJJJKLLMNOOPQRRTTUVWXXYYZ[\\]__``abcceffghhijjlmmnoopqrsstuvvwxyylF9739383839394848484849484848482616261xSzȃψԋԌ֎֏אאבגؓؔؔؕ^J<70.+.*.*-+.*,*,),(,(+(+(+'+(>4gP謁ؠڢܥަߨߩJJKJKKJJJJJJKKJJKKJJLLMNNPPQQSSTUUVWXYZ[[\]^__`aabcdeefgghijjklmmnopqrrsttvwwxyeI:83838383848374748484837494727272rPȳІ҈ӊՌ֍Ս֎֏׏אבגؓؓؔ֓gfNP?91.*.*-),)+(,(/*@6XEw\|˕מ՝ԝןآݥާߨJKKJJJJKJJJJJJJJKJJJJJLLMNOOPQRRSTTVVWWXYZ[\\^^^_`abccdefghhijkkllnnopqrrsstvvwweP=83947473848484848474839473<4[zσ҅҇ԈԉԊՊՋՍՍ֎֏֏א֑גדדؔ֓ʌrhdcbcgn|Í͕әϗɓÏÏǓКנܥަߨߩKJJJJJKJJJJJJJJJJJJJJJJKKLMMNOPPQRSSTVVWXXYZZ[\]]__`aaccceffgghjjklmmnopqqrrtuuvwmrL6183948484949494948461iKs~Ђфф҆ӇӈӉԉԊԋՌՌ֍֎֎֏֐בבדדؔؕו֔֔ՕՖԖՖ֗Ֆӗ͓ōٻ˯ywȭڼΘנܣߦߧߨߨKJJKJJJKJJJKJJJJJJJJJJJJKKKLLNNNOPQRSTTUVVWYYZ[[\]]^_`aabcddefghhijjlmmnoppqrrsttvuovMA56273726140J9^x|Ѐт҂҄ӅӅ҆ӇӇԈԉԊԊՋՌ֍֍֎֏אאגגٖؓؔؕؖؖؕՖғ͐Ëֶũymb}Z|Yew۽ЙٟܢޥަߧߧߨߩKJJJJJJJKJKJKKJJJKJJJJJJKJJKKKMMMNOPQRSSTUUVXXYYZ[[]]^_`aabcceefggiijkklmnnppqrrstuvvwxxyz{|}}~~рЀсҁу҃҄Ӆ҆ӆӇӈԉԊԋԋՌ֌Ս֏֏֐בבגؓד֒Ӓѐˍˆյħui]qPq`EeV>gX?ziLaèzÎӚڠݢޣޥަߧߧߧJJJJJJJJJJJJJJJJJJJJJJKJJKJJJKKKLLMOOPQQRSTUUVWXYYZ[[]]^^``abccdefgghiikllmnnoopqsrsuuvwxyyz{||}}~рстту҃҅ӆӆӇԈԉՉԊԋՌ֍֍֎֏֏ՏԐԏύʉմ|¤rfXmLm]A\L5OB.H=+K@-\O8}kLfͰɒ֛۠ܡݣݤޤޥާߧKJJJJJJKJJJJJJJJJJJJKJKJKJJJJJKKKKLLNNOOQRRRTTVVWXXZZ[\\]]^_a`bccdeefghhikklmmnoopqrsstuuvxyxz{{|}}рр҂҂у҄ӅӆӆӇӇԈԊՊՋԌՋԋӋьωʇֵzäoc~V~jIjZ=[J3Z=,o3&[0$:1"=4$I>,bT;uTn׹͔לڞݡݢޢޤޤޥKJJJKJJJJJJJKJJJJJJJJJKKJJKJJJKJJJKKLMMNOPQQRSSTUVVWXYZZ[\]]^_``bbcceefghhijklmmnoppqrsstuvwwxyy{{|}~~рЀсту҄҄ӅӆӇӈԈӈӈ҈ψ͇Ȅ״xťnb~U~jGiX+E:(J>+`Q9oNhҴȏԗٛڝܟܟݟJKJJJJJKJJJKJKJKJJKJJJKJJJJJJKJJJJJKJJKJJKKLLMNPPPQSSSTVVWWYYZZ\]]^__`abbddeffghijjklmmnopqqrsttvvwwxyyz||}~~~}|ysѬlcY{NiCkX9YI/S=(0',','+)+','+'*&)&)')&6,lL5PC.G<)NB.gW=wTmٹ̐՗ؚ۝۝ܞKJJJJJKJJKKJJKJKJKJJJJJJKJKJJJJKJJJJKJJJJKJJKLLNNOPQQRSSTVVWWYYZ[[\]]__`abccdeegggiijkklmnoopqrsstuvwxxyy{|{{{{yu߶pϩh`UwJ}f@iV7YI.S>'0&.)+*-),(+(+(,'+'*&)&)'*&)%G5_L4I=*E:(RE0p^BZrῇϑ֗ٚۜ۝JJJJKJKKKJJKJKJJJJJJJJJJJKJJKJJJKKJJJJJJJJJJJJJLMMNOOPQRRTUUVWWXXZ[[\]]^_`abbcceefggiijkklmnooppqrstuuwwwxxxxvs޴lΨe\RtGyc=fS3YF+[;&2%.).*.*,)+),(,(+(+'+'*&)&)'*&)%(%|H3J>*?5$D9'XJ3zgG`ˬxĉѓؘٙڛJJJJJJJKJJJKJKJJJJJKJJJKJJKJKKJJJKJJJJKJJJKJJJKJKLLMNOPPQRSSTTVVWXXYZ[\]^^_``abccdeffhhiijklmmnoppqrstutuuusoߵjΧcYOqDv`:dQ1ZD*d8%2%.).*/*.).*,*,)-(,(+(+'+'*&*&)'*&)%(%,&U8'<2"<2"H<)aR7rNh׶}ʍԔؗڙKJKJJJJKJJKJJKJJJKJJKJKJKJJJJKJKKJJJKJKJJJJJKJKJKJKKLMNNOPQRRSTUVWWWXYZ[[\]^^``abccdeefghhjjklmmnnppqqrrqomhШaWLoAt]7aN/[A(j7$1&/)/+.+.)/*.+.*,*+),(,(+(-(5+=0G56-*&)%(%(&,%>. 9/ A6%TF0tbB[ȩt†ё֔٘JJJKJKJKJKJJJJJJJJJKKJJKJKJJJKJJJJKJKJJJJJJJJKJJJJKJJKKMMNOPPQRSTTUVWWXYZ[\\]]__`aabdddfgghijjkllmnnnomkieЧ^VLqAu^7aM-X?&q5#0&0)0,/+.+.+.*.*.+.*,*,),(9.E5O9Z=Z;uV8>-*&)%(%(%)%~,">4"F:'WI1r`@Wn⿂ώ֓ؕKJJJJJJJKJJKJJJJJJKJJJJJJJJJJJKJKJJJJJJJJJJJJJKJJJJJJKJKLLNOOPQQRSTTUVVWXYYZ\\]]__`abbcceefggiijkkkkjieݯaΣ[SIq@w_6aM,QA%y4#0&/*/+/-0,/*/,.+.*.*-+.*,)C3T9Z;zY9iR3\L/RC+L>']6%,%)%($(%)%)%u9)^N3p]>rL_ʪrЌ֑דJJJJKJJJJKJJJJKJJKJKJJJJJKJJJJJJJJJJJJKJJKJJJKJJJJJJJJJKKJKMMNNPPQQSSTUVVWXYY[[[]^^__`bbcddeffhghhfebܮ^̡XOGo=w^4cO,RA$x4#1)0+0,2-0+/+0+/+/,.+.*.*5,O6[:zW6fQ1YI-OA(H;$B6!>3 =2Y/ +$)%(%(&)&)&2)aBT`ǧnݹ{ɆэՐגKJKKKJKKJJJJJKJJJJKKJJJKJJKJJJJJJJJJJJJJJJJJJJJJJJKKJKJJJKJKKLMNOPPPRSSTUVWWWYZZ[\]]^__`abcdededcb_٫YɝSK~Cl:u\2bN*SA$o4!0)0,1-1-/,0,1,1+.*/+0,/+4,Q5yY6gQ0ZI,P@'G9#A5 E0j, *#+$)%)&*&)%(%(&)&(%*&S<Ŝfֲu}ȄϊԍՏבKKJJJJJKJKKJKKJJJJJJKJJKJKKJKJJJJJJJJKJJJJJJJKJJJKJJJJKKJJJJJJKLMNOOPPRRSTTUVWWXYZ[\\]^__`a`baa_[٩VǛPI{@j7rY/aK(R?"e5 0)2/4/0-2.0,0,2-0+0,/*.*4+G/iS0]K,RB'L:"I4U0,",%+(,(+'+'*%)&)&)%(%(&)&(&)%2+Ո\Ɓ̅ЈӊՌ֍֏JJKJJJJJJKJKJKKJJJJJJKJJJJJJJJJJJJJJJJJJJKJJJJJJJJJKJJJJJJJJJJJJKLLMNOPPQQSTTUVVWXYZZ[\]]]^^^\Y٨TƙMExc51!3(6283727283948484738272636271405041403/3.304/2.2.2-1-1-1-0,0,/){;#}a2`82+.+.*.(1#I9eP*t>ŜTemoqrrstuvvwxyzz{||}JJJKJJJJJJJJJJJJKKJJJJJJKJJKJJJJJJJJJJJJJKJJJJJJJKKJJKJJKJJJKJJJKJJJKJKJJJJIHDК={0}\$]Dk41"3*62837272838463839484837272635271405040404/3/304/3.2.3-4-1-1-/+1+0&^H$j6[71+.+.).)1#I9dN)s=ŜScjnoppqstttuvwwyyzz|JJJJJJJJJKJJJJJJJKJJJKJJJJJJJKJJJJJJJJJKJJJKJJJKJJJJJKJJJKJKJJJJJJJKKJJJJJJIHBÐ9m*F 5%4+627373638384738384949484837272736261404051404/30303.F3sAk><02.1-0,0*3$iQ'r9Y70*.+.).(1#I9dN)s=śRaikmnopqrrsttvvwxyyzKJKJJJJJJJJJKJJKKJJJJJJJKJJJJJJJJJJJJJKJKJJJJJJJJJJJJJJJJJKJKJJKJJJJKJJJJJJIGAy2B,7.6173847262847383748484849494837272736161405051503/4-m=JQUC6.2.1,1,.*}8!uZ,zGIJKLNNOPQQPC1,1.1.1,0,g;z\*<ԏEI2.+.+.+-'."G6dM%r7ŘJZ`cefgghijjklmmnoppqJJJKJKJJJJJJJKJJJJJJJJJJJJJKJKJJKJJJKJJKJKJKJJJJKJJKJKJJKJKJJJJJJJJJJJJJJKIBN58384847474628484736393837372@1I1b4݁:ߓ=CEFGHIJJKMNONM?1-1-1.1-/+]Ff.?ےFF1.+.*.+,'-"G6dM%q6ŘJX^acdeffggiijklmmnopKKJKJJJKJJJJJJJJJJJJJJJJJJKKJJJJKKJJJKJJJJJJJKJJJJJJJJJJJJKJKJJJKJJJKJKKKJI@H473948474728472628484736/:)A'S&b)s-36ʕ:՝=ޤ@CDEGHIKKLMJ`72.1-0,2-1%fM!p1ŕBEC0.*.+.+-'.!G6dL$p6ŘHV\_abccdefghhijkllmnJJKJJJJJJJKKJKJJJJJKKJKJJKJKJJKJKJJKJJKJKJKKJJJKJJJJJJJJJJJJJJJJJJKKJJJJJJIAD48394747484727283502'}.j.R2P8W@cIpS ~]$h(s-}15đ9ϙ<٠>ACEFGJKE>/2.1,1,1-x7qU$y4ϛDDB//*-*.+.'.!F5dL#p5ŗGU[^``aacddeegghijkllJJJJKJKKKJJJKJJJJKJJJJJJKJJJJKJJJJJJJJJKKJKJKKJJJJJJJJKKJJJJJJJKJJJJKJJJJJJ?B3839484748494617"U5D0=-<,;+=-@/E3M9U?`GlPyY#c&m*w.26Ȕ:Ӝ>ݤ@BDE@1.1.0-1-1-_=|]&7סED?/.*-*.+.'.!F5dL"o3ŖESY\^__`aaccdefghhijkJJJJJJJKJJJKJJJJJKJJJJJKJKKJJJJJJKJJJJJKJJJJJKJKJJJJJKJJKJJJJJJJJJJKJKJJKJJ?@38394848474849483606&k9I6B0=-;+;+<,?.D2J6R<[CfKqT ~]$g(q,|048͗;ԝ=x62/2.2-2-0(bCe):ަEA<..*.*.+.'. F4dL"o2ŕDRWZ]]^__`aabcddffghhJJKJKKJJJJJJJJKJKJJJJKJKJJJJJJKJJJJJJJKJJJJJJKJJJJJJJJJJJJJKJJJKJJKJJJJJKJJ?>38394838474748372849462408'v9\3J0>-:*:*;+>-B0G4N:V?`GkOwX"a&k*v.}1H-2/2.2,1-2 gJl,;F>9-/*.*.+.'- F4dK!o2ŕCPVYZ[\]]^_``bbcddefgJJKJJJJJJJJJKJJKJJJJJJJJJKKJJJJJJJJJJJJJKJKJJJJJJJJJKKJKJJKKJJJJJJKJJJJJJJJ@?383848483737484849483839483725/9(7 t2S.B,<)9*:*=-@/D2J6Q<ZBeKoR yY#3,2/2.2-1,r5jNq,Œ;C|;7,.*/*.+.'- E3dK!o1ŕBOTWXZZ[\\^^_`aabcceeJJJJJJKJJKJJJJJJJJJJJJJJJJJKJJJJJKJJKJJJJJJJJJJKJJKKJJJJJKJJJJJJJJJJJJJKJJJEk;N5D5828383847383839484737373848372508*5#3_.M,<)9*9*;+=-A0F4M9\;2.1-2-2./+g4hMl*6؝>q84+.*.*.+.'- E3dK n/Ŕ@LSUWWXZZZ[\^^^_aabbdJKKJJJKJJJJKJJJKJJKKJJKJJJJJKJJJJJJJJKJJJKJJJJJJJKJKJJKJJJJJJJJJJKJKJJJJJJJKGEAi9X7>3628384948374747473748394837372706-5'3 q0Y-:)9*9*9*;+}-2/1-0-2..$T2]D^$w/5`12+.*.*.+.'- E3dKn.Ŕ?KQTVVVXXYZ[[\]^^_`abJJJJJJJJJJJKJJJJKJJJJJJJKJJJJJJJKJJJJJJKJJJKJJJJKKJJJKJKJKJJJJKKJJJJJJJJJJJJJKKHGAxIPRTTUUWXXYZ[\\]^___KJJJJJJJJJJKJJKKJJJJKJJJJJJJKJJKJJJJJJJJKJJJJJKJJJJJJJKJKJKJJJJJJJJKJJJJJJJJKJJJJIJFE}==0619494938374948383737272626151404.4-4+3(/1+2/1/2.1,y*:)>-I6U?jH=%/+.*.*.+-',E3aHj+;GLPQRSTUUWXXYZZ[\]^^KJJJJJJJJJKJJJJJJKJJJJKJJJJJJJJJJJJJJJJJJJKJJJKJKJKKJKJJJJJJJJJJJJKJJJJJJKKKJJJKJJJJJIHEd8418394948484838372717262515/5/413/4.3-3-2.1/2.0(^)6(7(:*@/O22"-+-*.*.+-'+B0]Ec'6נAGLNOQRRTTUVWWYYZ[[]JKKKJJJJJJJJJJJJJJJJJJJJJJJKJKJKKJKJJKJJJJJJJJJKKJJJKJJJJJJJJJJJJJJJKJJJKJKJJJJJKJJKJJJKJJ?O5?3:28384736272736251505051403.4/303,2/2.2)q/E,<*8)8)D*-"/+/*.).+,'+?.S=uV"s-7ћ?ߦDHJLOQQRSTUVWWYYZZJJKJJKJJJJJJJJKJJJJJJJKJJJKJJJJJJJJKJJJJJKJJJJJJJKJJJKJJJJJKKKKJJJJJJKJJJKJJJJKJJKJJKJJJKJJJFr:Y8G5;28272736251504051405/4/203-2/1-2-2-0+0!c.O+I*,"/+-*-*.++'+:*G4]DyY#k*|17ɕ;֟AEHKNOQRRUUVVWYYJJJJKJJJKJJKJKKJJJJKJJJJJJJJJJKJJJKJJJJJKJJJJJJJJJJJJJJKJJKJJJJJKJJJJJJJJJJJJJJKJKJJJKKJKJJJJJJB{=c9I4>36161515050404/4/104-2/2.2,1,1.1-0,0&0 .&.,/+,)-+,(+7(=-H5W@gLwX"d'q-28͘=ڢBFILOQRTTUVVWKJJKJJJJKJJJJJKJJJJJJKJJJJJJJJJJJJKJJJJJKJJJJJJJJJJJJJJKJKJJJKJJJJJJKJJJJJJJJJKJJJJJJJJJJJJJJJJJJHD@b8R5=25050404/4/204-2/1.1-1-1.1,0-0,/+.+/+/*.*.+,(+6(8);+A0I6Q<]DjNzZ#h(u.4Ñ:ҝ@EIMPPSSTUUKJJKKJJJJJJJKJJJJJJKJJJKKJJJJKJJKJJJKJJKJJKKJJJKKJKJJJJJKJJJJJJJJJKKJKJJJJJJJJKJJJJKKKJJJJJJKJJJJKJJGE?m:T53/4/40303-2/2.1-1-2.1-/-/,/+.*.+/*-*/+,(-!A+9*9*9*:*=-B0I6S=`GoR ^%l+|29֟@HMOPRRSTJJKJKJJKJJJKJJKKJJJJJJJJJJKKJJJJJJJJJJJJJJJJKJJJKJJKJKJJJJJKJJJJJJJJKJJJJJJJJJJJJJJKJJJKJJKJJJJJJKJJJJJIEAv;C03/3.2/2.1-1-1.1-0-0,/+/+/,.+.)/+,(-'/#.e.=-:*9*9*;+>-D2L8W@gL}\$r-8ޥCJMNPPQSKKJKJJJJJJKJKJKKJJJJJJJJJJJJJKJKKJJJJJJJKJJJKJJJJJJJJKJJKJJKJJKJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKJJJJJKJJKIFEi85-3.2-1,1-0-1-0,/+/+/,/+.*.+-)-),)+(-&.%.P/=-:*9*9*<,A0K7`G`%2ן?GJLNOPPJJJKKJJJJJJJKJJJJKKJJJJJJJJJJJJJJKJJJJKJJJJKKJJJJJJJJJKJKKKJJJJJKKJJKJJJJJJJJJJJJJJJKJJKJKJJJJJJJJJJJJJJJKJJJKIAS35-2.2-/-0,/+/+/,.+.*/+,)-),*,)-(,(,))%-#r0E/=-:+;+B0XA~]$3٠>EJKLMNOJJJJJJJKJJJJJJJJKJJJJJJJKJJJJJKJKJJJKJKJJJJJJJKJJJJJJJKJJJJJJJJKJJJKKJJJJKJJJJJJJJJJKJJJJJJJJJJJJJJJJJKJJJJKJJJJJH{;O2=.4,0+/+/,.+-*.+-)-),*,)-(,(*)+&*'*&)%/ b1O0L5_Fe(5AGIJKKLMKJJJJJJKJJJJKJJJJJJJJJJKKJJKJJJKJKJJJJKJKJJJKJJJJJJJJKJJJJJJJJJKJJJJJJJJJJJJJJJJJKJKKJJJJJJJJJJJJJKJKJKJJJKJJKJJKJJJDv:[4C.5,/+/*-+-)-),*,),(,(+)*&*'*&)&)'*&-#8 tU!s-Ȕ:CHJKJJJKJJJJJJJJJKJJJJJJJKKJJJKJJJJKJJJJJJJJJKJJKJJJJKJKJJJJJJJJKJKKKKJKJJJKJJJJJJJKKJJJJJKJJJJKJJJJJKJKKJJJJJJJJJJJKJJJJJJJJKJB<`5G/8,-)-),*,),(,(,)*&*'*&)&)&*&)%9&n+5ؠ>EHIKKJJJJKKJJJJJJJJKKJJJJJKJKJJJJJJJJJJJJJJJKJJJJJJJJKJJJJJJJJJJJJJJJJKJJJJJJJJJJKJJJKJJJJJJJJJJKJJKJJKKJJJJJKKKKKKKJJJKJJJJJJJJJGD=f6N03*,)-(,(+)+&*'*&)&)&)&)%q06њ=DHIJJJJKJJJJJJJKJJJJKJKJKJJJJJJJJJJKJJJJKJJJKJJKJJJJJKJJJJJJJKJJJJJJKJJKJJJJJJJJJKJJJJKJJJKJKJKJJKJJJJJJJJJKJJJJJJJJJJKJJJJJJJJJKKJJJGE>p8J.,(+),&)'*&*&)&)&4'١?ݣ@CFHIJJJJKJJJJJJJJJJKJJKJKKJJJKJJJJJKJKJJJJJJJKKJJJKJJJJJJJJJJKJJJKJJJJKKJJKJJJJJJJJJJJJKJJJJJJJJJJKJJJJJJJJJJJJJJJKJJKJKJJKJJKJJJKJJKJJJIHEBo8<+)(*'*&)&)&h4GFGHJJJJJJJJJJJJJKJJJJJJJJJJKJKKJJJJJJJJKJJKJJJKJJJJJJJJKKJJJKKJJJKJJKJJJJJKJJKJKKJJJJKJJJJJJJJJJJJJKJJJKKJJJJJJJJJJJJJKJKJJKKJJKJJKJKJJJJJJJJIHC^2.&(&)&AIIIJJJJJJJJJJJKJKKJJJJJJJJJJJKJJJJKJJJJJJJJJJJJJJKKJKJJKJJKJJJJJJJJJJJJJKJKJJJKJJJJJJJJJJJJJJJKJKJJKKKKJJJJJJJJJJJJJJKKJJJJJJJJJKKJJJJJJJJJJJJJJJJI<\2FKJKJJKKJJJJJKJJJKJJJJJJJJJJJKJJJKJJKJJKJKJJKJJKKJJJKJJJJJJJJJJKJKJJJJJJKJKJJJKJJJJJJJJKJKJJJJJJKKJJJJKJJKJJJKKJJJKJJJJJJJJJJJKJJJJJJJJKJJJJJKJJJJJJKJJJJJJJJJJKJJJKJJKKJJKJJJJKJJJJJJJKJJJJJJJJJJKJKJJJKJKJJJJKJJJJJJJJJKJKJJJKJJJKJJJJJJJKKJJJJKJKJJJKJJJJJJKJJJJJJJJJJJKJJJJJJJJJJJJJKJJKJJKKJJJJKJJKJKJJJJKJJJJJJJJJKJKJJJJJJKJJJJJJJKJJJJJJJJJJJKJJJJJJKJKJJJJKKJJJJJJJJKJJJJJJJJJJJJJJJKKKJJKJJJJJKJJKKJJJJKJJJJKJJJKKJJKKKJJJJJKJJJJJJJJJKKJJJJJJJJJJJKJJJJJJJJKJJJJKJJJJJJKJJJJJJJJJKJJJKJJJJJJJKKJKJKJJJJJJJJJJKJJJJKJJJJJJJJJJKJJKJKJJJJJJJKJJKJJKKKJKJJJJKJKJJJJJJJJJJJJJJJJJJJKJJJKKJJJJJJKJJJJKJJJJJJKJJKJJKJJKKJJJJJJKJKJJJJJJJJJJJJJKJJJJJJJJJJJKJKKJJJJKJJJJJJJJJJJJJJJJJJJJJJKKJJJJJKKKJJJJJKJJJJJKKJJJKJJJJKJJJJKJJJKJJJKKJJJJJJJJJJJJKKJJKKJKJJKJJJJJKJKJJJJJJJJJKKJJKKJJJJKKJJKJJKJJJJJJJKJJJJJJKJJJJJJJJJJJJKJJJKKJJJJJKJJJJJJJJJJJJJJJJJJJJJJJJJJJKKJJJJJKJJKJJJJJJJKJJJJJJJJJJJJJJKJJJKKKKKJJJJJJJJJJJJKJJJJKKJJKJJJKJJJJJKKJJKJJJJJJJJJJJJJJJJJJJJJJJJKJJJJJJJJKKJKJJJJKJJJJKJKJKJKJJKJJKJJKJJJJJKJJJJJJJKJKKJJJJKJKJJKJJJJJJJKJJJJJJJKJJJKJJKJJJJJJJJJKKJJJJKJJJJJJJJKJJJJJJJJJJJJJJJJJKJJJJJKJKJKJJKJJJJJJJJJJKJJJJJKJJJJJJJJJJJJJJJJJKJJJJJJJJKJKKJJJJKJKJJJJJJJJJJJJJJJJJJJKJJKJJJJKKJJJJJJJJKJJJKJJJJJJKJJJJJJKJJJJKJJJJJJJJKJJJJKJJKJJJJJJJJJJJJJKJJJJJJJJJJKJJJJJJJKJJJKJKJJJJJJJKJJKJKKKJJJJJJJJJJJKJJJJJJKJJJJJJJJKJJJKJJJJJJKKJKJJJJJKJJJJJKJKKKJJJKJJJKJKJJKJJJJJJJKKJJJJJJKJJJJKJJJJJKJJJJJJJJJKJJJJJJJJJJJJJJJJKJKJJJJJJJKJJJJJJKJJJJJJJKJJKJJKKJJJJJJJKJJJKJJJJKJJJJJKJJJJJJJJJKJJJJKJJKKJKJJJJJKJJKJJJKJJJJJJJJJJJJJJJJJJJJJKJJJJJJJJJJJJKKKJJJJJKJJJJJJJJKJJJJJKJJJJJJKJJKJJJKJJJJJJKKJJJJJJJKJKJJJJJKJJJKJJJJJJJJJJJJKKJJKJJJJJJJJKJJJJJKJJJKJJJJJJJJJJJJJJKJJJKJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKJKJJKJKJJJJJJJJKJKJJJKJKKJJKJJJJJKJJJJJJKKJJJKJJJJJKJJJJJJKJJJJJJJJKJJJJJJJJJKJKJJJJJJJJJJJJJJJJJJKJJJJJJJKJJJJJJJJJJJJJJKJJJJJJJJJJJJKKJJJJJJJJJJJJJJJJJJJJKJJKJJJKJJJKKJJKJKJJKJJJJJKJJJJKJJJJJKJJJJJJJJJJJJJKJJJJKKJKJJJJJJJJJKJJJJJJJJJJJJJJJJJJKJJJJJJJKJJJJJJJJJJJJJKJJJJJJJJKKJJJJJJJJJJJJKKJJJJJJJJJJJJJJJJJJKJJJJJJJJJJJKJJJJKKJJJJJJJJJJKJJJJKKJKJJJJJJJKJKJJKJJJJJKKKJJJJJJJJJJJJJJJKJJJJJJKJJJJJKJKJJJKKKJKJJJJJJKJJKJKJKJKJJKJJJJJJJJKJJJKJKJJJJKJJJKJJJJKJJJJJKKJJJKJJJJKJKJJJJKJJJJJJJJJKJKKJJJJJJJJJJJJKJJKJJKJJKJJJJKKJJJJJJJJJJJJJJJJJJKJJJJKJJJJJJJJKJJKJJJJJJJJJJJJJJKJJJJKJKKKJJJKJJJJKJJKKJJJJJKJJKJJKJJJKJJJJKJJJKKJJJJJJJKJKJJJJKKJJKJJJKJJKKJKKKJJJJJJJJJJJJJJJKJJJKKJKJKJJJJKJJKJJJJJJJJJJKJKJJJJJJJJJJKJKJJKJJJJJKKJJJKJJJKJJKJJJJJJJJJKKJKJJJJJJJJKJJJJJJJJKJKJJJKJJJJJJJKKJKJKJJJJKJKJJKJKJJJJJJJJJJJJJJJJKJJJJJJJJJJJKKJJJJJJJJJJJJJJJKKJJJKKJJJJJJJKJJJJJJJJJKJJJKJJJKJKJJJJJJJKKJKJJJJKJJJJJKJJJJJJJJJJJJJJJJKKJKJJJJJKJKJJJJJJJJKJJKJKJJJJJJJJJJKJJKJJJJKJJJJJJJKJJJJJJJJJKJJKJJKJKJJKJJJJJJKJJJJKJJJJKJKJJJKKKJKJJJJJJJKJJJJJJJJJJJKJKJJJJJKJJJJJJJKKJJJJKJJJJJJJJJJKJJJJJJJKJJJJJKJJJJJJJJJJJKJJJJKJJKJJKJJJJKJKKKJKJJJJJJJJJJJJKJJJJJJJKJJJJKJJJJJJJKKJJKJJJKJJJJKKJJJJJJJJJKKKKKJJJKKJJKJJKJJJJJJJKKKJJJJJJJJJJJJKJKJJJKJJJKJJJKKKKJJJJJJJKJJJJJJKJJJJJJJJKJJJJJJJJJKJJJJJJJJJJJJJJKJJJJJJJJJJJJJJJJKJJJJJJJKJKJKJJJJJJJJJJJJJJJKJKJJJKJKJJKJJJJJKJJJJKJKJJKKJJJJKJJJJJKJJJJJJJJJJJJJKJJKJJKJKJKJKKJJJJJJKJJJJKKJJJJJKJJKJJJKJJJJJJJKJJJKJJKJJJJJKJJJJKJJJJJKJJJKJJJJKJKJJKJKJJJJKJJJKJKKJJJKJKJKKJJJJJKJJJJJJJJKKJJJJJJJKJJKJJJJJJJJKJJJJJJJKJJJJJJJKJKJJJJJJJJJJJKJJJJJJJJJJJJJJJJJJKJKJJJJJJJJJJJJJJJJJJJJJJJJJJJJJKKJKKJJJKJJKJKKKJJJJJJKKKKJKJKKJKJJJKJJKKKJJKJJJKJJJJJKJKKJJJJJJJJJJJJJJJJJJJJKJJJKKJJJJJKKJJJJJKJJJJJJJJJKJKJJJJJJJKKJJJJKKJJJKKKJJJKJJJJJJKJKJJJJJJJJJJJJJKKJJJJJKJJJJJJKJKJJJJJJJJJJJJKJJJKJJKJJKKJJJJJKJJJJKJJJKJJJJKJJJJKKJJKJKJJKJJJJJJJJJJJJJJJKJJKJJKJKJJJJJJKJJJJJJJJKJKJJKJKJJJJJJJJKJJJJJJJKJKJJJJJKJKJJKJJJJJJJJKJJJJJKJJJJKJJJJJJJJKKJJJJJKJJJJKJJJKJJJJKJJJJKKJKJJKJJKJJKJJJJKJKKJJKJJJJJJJJJJJJKJJKJJKJKJKJJJJKJKJJKJKJJJKJJJJKKJJJJJJJJJKJJKJJJJJJJJJJJJKKJJJJJJJJJJKJJJJJJJJKJJJJKJKKJJJKJJJJJJJJJJJJJJJJJKKJJJJJJKKJJJKJJJJJKKJJJJJJJJJJKJJKJKJJJKJJJJJKJJJJKJKJJJJJJJJJJJJKJKJJJJKKJKJJJJKJJJJJKJKJKJJJJJJJJJJJJJJJJJJJKKJJJJKKJJJJJJKJJJJKJJJJJJJJKJJJKJJJJJJJJJJKJJJJJKKJJJJJJKJJKJJJJKKJJJJJJJJJJJJJJJKKKJJKJJJKJJJJJJJJJJJJJJJJJKKJKJJJJJJJJJKJJJJJJKJJJJJJKJJJJJKJJKJKJKKJJJJJJJKJKJJJJJJJJJJJJJKJJJKJJKJJKJJJKJJJJJJJJJJJKJJJKJJJJJJKKJKKJJJJJJJJJJJJKJKJJJJJJJJKJJKJJKKJJJJJJKJJJJJJKJJJJKJKJKKJJJKKJKJJKJJJJJJJKJJJJJJJJJJJJJJJJJJJJKKJJJJKJJKJJJJJJJJJJKJJJKJJJJJJJJKKJKJJJJKJJJJJJJJJKJJJJJJJKJJJKJKJKJJJJJJJJKJJJJJJJKJJJJJJKJJJJKJJKJJJJKJJKKJJJJKJJJKKJJJJJJJJKJJJJJJJJJKJJKJJJJJJJKJKJKJJJJJJKJKJJKJJJJJJJJJKJJJJJKKJJJJJJJJKJJJKJKJJJJJKJJJJJJKJJJJKJKJKJJJJJJKJKJJJJJKJJJJJKJJJJJKJJKJJKJJJJJJJJKKJKJJKJJJJJJKJJKKJJJJKJJJKJJJJJJKJJJJJJJJJJKJJJJJJJJKJJJKJJKJJJJJJJJKJJJJJJJKKJJJJJJJJJJJJJJJKJKJJJJJJJKKJJJJJJKJJJJJKJJJJJKKJJJJKJJJJKJJJJJJJJJKKKKKJJJJJJJJJJJJKKJJJJJJKJJJJJJJJJJKJJJJJKJJJKJKJJJKKJJJJJJJKJJJKJKJJJJJJJJJKKKJKKJJJKJJJJJJJJJJJKJJJJJJJJJJJJJKKKJJKJJJKJJJJJJJJKJKJJJJJJJKJKJJJJJJJJJJJJKJJJJJKKJKKJJJJJJJJKJJJJJJJKJJJJJKJJJJJJJKJJJJKJJJJKJBOSSA-1.9.1/install/dialog.xcf000066400000000000000000005233341333742133700160200ustar00rootroot00000000000000gimp xcf file8BB:EUnnamedCCgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) ö3v 8 Clipboard#1      8ÒÞê8Td#3CScs=NNNNNNNqC~~~'~7~G~W~gBRbrÂ~):'&7*(*)5**3*)**+*+/+%*++,+*+0)+,-.--,++,+*++/+,.,-.-,--,++,+*+$(%--..-/./.--.--,++,+*+!C,/.//0-/.--.--,++,+*+##.//0100/0-/.--.--,++,+*+**/112110/0-/.--.-,++,+*+*!-223210010//0-/.--,+,*,++*++,022343223210010//0-/.-++*/,,+*)++%/-../13443212210010/../.-**)*+**+&'-.00/144334433210//+-//.,+*)*+**+ Y-0/011443443210/.*,//.--+)*+**+ >'/0/12234434434343322/./,+/..,+%)*+**+ 1323343343432120/0,!+*..-,*'*+**+ 2344334434432011.//&*,-/.-,-.)%*+**+ /2343443420//.-0(*),/.--+**+**+ /234431-+,/.--,+*+**+ -23441/-/(--..--,&++**+ ,2344301//,, ,-.--+*+ *234434334432100.%( +-.--+(**+)234434434332100)+-.-,+++*+ %23443433200-,*+,..-,))*++2344344344343211/*,&,-..--)**++24434344344344344322321/,),--*++**+'.123433432232120/.,,+,-.-+-()*+) +(/123433443443223210010/--,+,-.-,+)()*+*~,:+&7.+--5-./-..2.-../-/.).//.-.0+/0122/0//./+3/12013211010//.%,)01223210/./!G-323434433221121//./-/#$3354242110/.//....3556654142210//./--.$16677655454542321220//.//.-.//37788767765543433220/.--.//../(513324899887655434332122/./.--..**225446998879887765443/221210.-./.. #`/3355688988767665332.02210/-./.. E*446898778987765434-/22120/(,./..656788788987787565431!/.21220//*./..787898898755214(-0122100.)././. 4789887787896434314,--0221/. .//.. 278988789861/0220/./..178987896316,02110110(//.-. 16897788532.0 01211/./-. /6798788788766342), /12102/)..-6887879877545.01//..)6979887887887750..0110+--..67887988788787763,/$/12101-.-./.789899889887789889887765530-011011.,-./.+36778798987889787765543200/1/011/ ,-./. /+4677887887889877645531120.01211..,-./.~:752/0+$!y#ߪ؎  _֫ ߠ  [        R )- ;/a9! Y\1P ITy#<I[BO6<~; 2 -F' d-ÊYN*)Ƞ92#߇I ) B( hZ'9'('&%0(*+''&%&&%2'(('('&&%%.()(()&'&&%#/)()&'&&%0)*)(()&'&&%&/)*)(()&'&&'&%&/)*)(()&'&&'&%&/)*)(()&'&%3)*)((&(&2)(('(5)(%(7)((9)=()<(=()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<()<*9*,)()0,(,**)())2,+,++)**))(..,,+,)**))&/-,-,++**))(/-,*)*))/-,+**)*))/-,-,*+**))*)(/,-,,-,,)*)+3-,+,,)++2,++5,-(+7-.*9-.<,.<-.<.-<.=.=.=.=.=.=.=.=.=-=,=-=-,<,=,+<.=902./////325κ79<<<<<<<<<<<<<<<<<<<<_6342 "<0%W/2//v/=/[ 3ԇ6ミF9 ;<<<<<<<<<<<<<<<<<<<<< @ @ @ @*+0133443443443223210010/00.--,-.-,++')*+).0223343443223210010//0/..--,+)*+)-)//123343223210010//0/..--,-+*)*+*.+./02343443212210010//0//.--.-,,+**+*,..034432210010//0//.--.-,,++*)**-1443221010//0//.--.-,,++*+*)8-3221010//0//.--.-,,*++**+*$/122110010//0//.-,--,,++*+*"*/011/00//0//.--+*+* (-.00/0//.-,,)*++*+*"+$/.//0//.--+*'**%,+--../0//.--,++**))',,3+-//..--,+**)$.((),*,-.--,+,+**(,++.--,+,+**)1+,,-,+,+**+*/+)++,,+,+**+*0#<*++*+*2(*+**5(!**<'(*:(&<(1( ,-B#/..023210.-0-*)!./1344100(-'((*.03443443431/++ ('+*))+-1334344344221/, -!**+**)!)13342121.) )*++*+**C133102210144220/,+++,*,+**+** *.243320/-./--0/332322.-,)+,,-*,+**+**#1442/+-233220/+,-,,-*,+**+**.24342/$)-020.++-23212-*+,--,,-*,+**+** "134430,.01210/*+.2212.&,--,-*,+**+** &-24432.-134430/-/0211/,,--,-*,+**+** 123432""13244342/-12110)*-.-.-,,-*,+** %03342/,23321123.02211-.--.-,,-*,+**)* *03342,02432),13.221,-./--.-,,-*,+**+)* /13442(1232/.1/-12110)+-./--.-,,-*,+**)* /134421232.--%.1212/7%././--.-,,-*++*)**' 02344202321,+,/1211.-././--.-,,-*+**))123442.2432',02210-,.//./--.-,,-*+*))123442+23420)".01221/1--/0/./--.-,,-**(0( 123442&023312013220.,'-//./--.-,,-***/23442,+-3343321/.).//0/./--.-,,+**.13442./434421.,0//0/./--.--+**)( -134421044211-+10//0/./--.-+*() (033432,.8/2210((00/0/./--.,+)*)* 0344320-)+/122.)!/100//0/./--,+))** +/234331.*+.(.110//0/./-,,'*)* ,234330,9(/12110//0/-/-,),')*(*234330)-".110/.//..,$,)**)* +.244332,+0112110//,)+*+*)*144321.+$(,/2212110//,+,+*)* %-23344344132112100//,+**+*)*-0343433434413211211//.-, )**)*(133434413211210/.., ()*)*+-133 413211211/.,+ )*(*/1343344132110.,- ())* .023344344132112..*+ ()*//4677878898764544331012100/+-..046688789887765745443432211/1/-..0-33668898878766745443342210/--..2/2456988776543433212110//..-.."12247978876656455443211211/0.0/.--.15987677674543443211/./...<0776765744313210101.//..(36766745544343110/.#/456655443422101//.!-1354553343223210-.//.-.".'3143442312210/.+.-..-.$0-212343412211/.--.-&0.4/1241211210/..-'7,(,0.0121011./0/.--,,/.21121/0//..-1/00/0//..-.//+//00/..1(;.//./..2,./..4-%.-..<-+.:-*<+4- /-N#4235677643251--2468988998635,0+.+35897788789763.. -+.--.,/268878797763/ !1)-..-%-678898988653, -./..-.,G58878875577546878677540///0.//.., .2698864312411438776210,0101./.-..--&6998863-177643/01101.0/..-.2778874''246530.1776671./0110/0/..-. %788774/256765401366562*0110./..-. )27787721598854'3566300120101//.-588786%$5886325665..12110./..-., %588784078775568256651211/1.0..- /5887157977,14827765500232101100..-..-. 357897-5787326426675-.223110/.-,. 4788976773223&256563=)2343110/1./../..+ 577865775/,/35766212343110/.--787836886-056641123321100./.-,678987/79875/%246635023321001/..-=) 678977*58977677558766520,03433231101.,.368966001887887787867642-243223210110/,,3689773498987898665305433223110/0/.,,, 158997659987787651.53343121/.,- -58898602@37787764.*45344331/.-.-- 5788751,/36762-(345334322100.*-,- /379798610/2,2554334313110+/,.,, /78787751A)4564534433221/.0+,--,786884,2&3566453443320(/- 037788761/5667654430-.,-7877898752/(+1277667544343230/0/.--)/78878988998789877667654431./,-1478878898796676544310 -.-.-,5887988796656644320 ,-.-/0588787967665420/ ,-.-368998778868676654201 ,,,.-,25797887632/0 ,--o" "ؾ$&г(,1/024;:< -   N       K    : j ۴  ػ      : օ 7  ( Oi iߓ]y  #"xr$!k'+f&\wJ'Ar!:)7h-K[/Z|1Z2M5>6 2}8;=d0$'An.UlwzC3n*s 1sm+ c( %  `b ~))(W} D,}U[CDNp D(# YѤ %j|{o 12TV: 5Q 8  6~+YSe7tB&7G ._7#vjdC@6Yh*24!+@H , C( D J;\ b? qM D }  %yE1S6 2% +$ ; M @ pR/?d9)(<*(<)(<)(<)*'9)('(:)('&#&1*)('(('&&%$3*)(()(''&&%&-*)(()('(&&%&%+)()(''&&%&&))()('(&&%&%*)('((''%&&%%&&%-*0&(&&'&%%&&%&&&))((%'&%%&&%&&*)(''&%&%%$&+*)(('&%&%%.*)(('&&'&%%&&%,*)(('&'&%%&&-*)(('&'&%%&.*)(('&'&%%&0)(()(''&&'&%%2'('&'&%5)('(&&'&%%1("((&&%%4'(&&''6('&'<&9&7)((%%5)(('&4)(('(&%&2)(('&%%%1)(()('&'&&%"%0)(()(''&%'1)(()('(%'&%%&&0)('(('(%'&%%&&%.)(('(%'&%%&&0)(('(%'&%%&&%&-)(('(%'&%%&%&&.)(('(%'&%%&%&%&,)(('(%'&%%&&%-)(('(%'&%%&&%&-'&'((&'&%%&&%3$'&&%%&&%&1&&&%%&&%&&5&%%&&%&%3&%&%%&&%3&$&%&&%&,())(''%%&&%&,()(''(%&-()(''(%&&%&&%&,('(%''%&&%&%,(''(%'&&%&%%&,(''(%&%&%&%$&,(('''%&&%%&%%&,'('&''&&'$%%&%%/&''(''&$%&&%%&.('(''&%%&%&-'''%&%%&$&,('%$%&&/)''&'&%%&&-)''(''&%%&%&/('(''&%$%&&&..=.=.=.-<-.+9-,+*:-,,+**+))1,+,++)'3-,,+*)()--,,+*)())(+,+,++*)()(' )),+*)())(()(()*,+,++*))()()('1*%)*))*)(()()))),++.)()())*,+,++)*)(()(')+,+*)(**)(()).,+,,++)*)(())),,-,++*))*)(())-,+,,++*))*)(((.+-,++,+*))*)('0,+,+*))(3,+*))(5*,**)((1*.)**)()(4,,))*6+(+*<*9+7+-++,(5,+*+)4,+,++)((2,+*)()1,-,++)+)()/'0+-,++)*))(&1+-,,+**))*)(()0+,++*))*)(()).+,,++*))*)(()/,-,++*))*)(('()-,-,+*+*))*)(()/+,,++*)())(())),+,,++*))('())(-,+,+*))*)(())()-*,+*)+))*)(())(3+))()())()1+*)(())(5)(())()3)(())()3+)))())(,*+,+***))--,++*+)())-,+*()()((),,+*(*(())(',+*)*())(-,++**()))()(,,)(++))()((*,**++**)()'(())(/*++*))((())).)*+()(())(-**(()(()((,,#+)(()/,+*+)()(()-,++,+*+))(()0,+*++*+()(((.<<<<9:13-+)**)Ǭ*+.,-.025146<97Ŀ5421010./-.,-¿-32644-ÿ,¾-¿,¿-¿,¾,¾,¾/¾.-,ɉ.ſ-/.<<<<<:;6n<3g01ЗU%/I,b*-]/Y+590,o: 3Z-ٰI).ȥ .!/G0 0"2&N536+v9[<<9|zsaD 7߼G5=4f2n1 Q0 .0/ p/ . . - _-2 Y34K-56E6QV6 `,$Ě2Ve,'a,X,0P,ۆesi>,EG}%, 9y,#F/EZ0zz-:2..~"2/ogo /(0 @ @ @ @B"./14434413220.-,+ )()*,144132/,)&,)-/011/.*+&$:%*;,,.23210.+.)-+.13441.)Q-'**).023434432/-)) (&+))*(,-1343343443220., +)**))033432210.( (**+*))*5/33132124332110/,*++*+*))* )-243321/.11-.0033211-++&+,,+,**+*))*1332/.,%..210102(+,-,++**+*))*.2442/,-21121,+,--,++**+*))*124431...020..-/1121.#,-,,-,++**+*))* #,24432/+04420/D/0221/,,,-,,-,++*)**))023432)03244342/-02210))--,-,++**)*( 033420+23323//110-.--,,-,++**)( )03342,/2432..13.110,,-..-,,-,++**)*) .13442)12321.1/.12110**-..-,,-,++**)*( /134421232.//-0211/-./..-,,-,+,**)*) 0234420232/,,*,/0211.,-./..-,,-,+**+*)(# 123442/2432-/1210-,-..-,+,,+*))*123442,2342/&..011/0*-../..-,,+*+))') 123442$"12332/020011.-',./../..-,,*++)%)123442*,.332311/-(-//../..-,,+*).13442- /424432110.',/0/../..-,,+*)) .134421,--0433433210."'/.//../..-,,+*))(( )034432)-/344310+.//0/../..--+*() %134432/,-,/122.,.0/.//../.-,++)* ')) ,1234331,)+--00//./.-,+)+,())-2344320*./00/./.,,++()*) #2343320',.0101//.,++) J/2443320+))/110/.,*,())*) &344321-(+.1101100//.,+0)*)-4344323212112100//.,+#$*)**).04334434432112100//.-, )*))*133434432112100//-, (),/233432110/.., , ()()02334321101..,* ((())*/133434432110/.,* )()(//24434432110/./+ (-')*-0.144321/--+'('(,-./1122/-,)1+ ,|+)"-,-/.,--..-,,+**+))%!-+.././0/0/../.-,,-,++,)*))((*)..001./..-.,,-,++,)**))()7//1101./..,-,++,)**))+)/122101./..-.,,-,++,)+*))*)),12231121001./../.-.,,-,++,)+*))*))--133231121001./../.-.,,-,++,)+*))*))-2443231121001./../.-.,,-,++,)+*))*))--23344323112100/.-..-.++**)*)())')-/33434323110/..,-.--(*))()K#3359978788764220. +,-)168789967630-)/-24456541.0)$>)-;/13687641/2--/2689878778861-r-*++-24799778897631-. ,(.,,0257887867642, /--.--,-57877899878988776642+ ./..-,-738878868776797766420/..//..-,0688754255225578656520/-.//.-677886421)4327655646,/00/./-.--,-269886302765660/0110-//.--689765223475331377661*0110/./-/.-,,- '1798864159988753/4565530.01100/.-..--479787,487887964 146554--021100/..- 58875/77876678335655412100/0/..-,- .5879614687711582665664-01100/.-..- 26886.67874263366554-+122010010/.-..-,- 468977 5773123#146562232300//00/..-.-, 5667975796300.03566521232110/0-..--* 67889746797 1456551/1332200//00./..-,78797/78874'!23565636.1332230100/./--++ 78797'&587874574466520*0233220100.//-)-67797.0288987787676642,23321010//.,268871(39889887653+03310100.- -+ 257760205887887653%+3432232210/0/.,,,* .589986-137998765/2543321/.,- %589876511146762/243432322100//*.),-- .67878861/01155443312010,.,,,- 168875/325654432232100./,-+- %67988764)235565433210/0,-,- S37877650,-4565543320.0-,- )8778751,03657654534330/4.-,+-1968878878765565534330/'(.-,-2598878898788786565455433421 ,--,-/688788787865654453220 +,-,-13788788787877665432// ,-,-368877878766545330/ +,,--46778788787766565532/. +,--446988988664323/ +,+,0233698878765321/++,+01245677420-10 0|.+" 0/03201122310/./..-+,!10223454232112100/0/-.-,,0-334454323211200/.-,*);33656655443320/0/..--,++.)3667665423320/00//-.-,,04778566445433432210//0/..-,-1157887856654533233220/../.--,-168998785665543323220010//.--,-3-17987887766543321122/./--,+2%4887887857655433221122,-,-* $;-  {i  ܆     u ̻ 9 иV0     k   xٶ  n X   1 |"(!i-.G-ʝ4rp޷C2 r-"C+9AC$eDxW Yϥ ;fY/!@Zg tufg $ S Ni I+j#6/ G !tyC!P 0>Xh% 4S*1  69(Q> 7x Y,7Vkj7 G;i}0f6L N3KzB-\*Hy 6> ] nmѶWx e/ p ; N [  j Q(/涁6 \6# 3 : -< U u _ ||Q0g/[4^ Y-n#KQ 'ʟ[%6dU+ p \( ur%CT#u֨2c('(''&%%&&1)(''(''&%$%3 &'((''&%%1)&t('&5('&&4('%&%$2'((''&%&1')(''&%%$&0')(''&%%?1')(''&%&%&1')(''&%&1'((''&%&%&/'(''&%&%&&&-('('&&%%&&%&&.)(''('&&%%&%&%&%&,)(''('&&%%&&%&&%-('&''&&%%&&%&-('&%&%&&1%&%%&&%&&2&%%&6&%%&4&%%&&%3&$&&%&&%&,%&'(('&%&&%&%%&,'('&&%$%&&%%$,)(''('&%$&&-('&''&%$&&%&%&&,(''(&&%%&&&%&&,'$%&%%&&&%-(*&'&%%&&&%$,((('&'%%&&&%&%&/&''&&%$$%&&&.('&%%#%&%&&%-&(&%%&&&,('$%&&%&&.('&)%&%&&&-(''&''%%&%&&/(''&%&&.(''('&&%$%%&%0(''('&&%%2%''&%$&>&)?';'':'&(8'&'&7'('&'6'('&%&7'('&&'$&%3'('&&'$&&3,++,+*+(*)(('0,++,+*+()(()3+,+**+(*((1,)t,+*)**5,+**()4,++*)''2,++*()((1,++*)+()('(0,++*()(()31,++*)()(1,++*)(())1,++*)()(()/+*)()())(-+*()()%.+*+**)(()'((),+*)(()())(-+,+**)('()()).+*++**)(()))1()(()(())('*1((()(())(5)())()(()3((()()3)')(())(,*,+**)())()()),+*())())(',+*+*)())-*++**)(')()'(),+*))('))(,+*))()(')())((,+*+))('())(',*+**))('(())()/)*+*()())())).*+*)*''())((-*+())())),+*())()).+**&('()(()))-+*+*)(()())0*+**+*))('())).+*+*))('())1+,+**)(()2(*+**)(')>()+?*;**:*(*8*)*7*+***6*+**)8+*)**))'))3,+**)'))3031t54210z110/-/,--1󽼻154Ÿ3,,,-,-,,/.-,/ò-0.01>?;:876733/03`˰pCB>3! 7č]$5u4C3O281 0 / J/ . u. -O-Q!?x3)4k(5NA6gS6^,fmbd,0a,Z,R,_C,mbz+,*|,5rrT/;h0-k!-%#. z/.Q k/^@8@`/C0M0,2֐0%=h;/:S9f765 @ @ @ @, /243434432310110/..+-.-.&()(*.133434432311/.-*-.()*))()-133432311.+,,-.)*)*))).0233434432311/-*,..*))**)('*.1433443232110/-*-*+,+*')**)*-13443433//100,-+*+)*)&)/1334431*-0010-,&+()''))/3343443431-,//00, (#(('),04344300*!-//- )(''((+24434434420,,,--& (,334431.$)))'()-4344320+,)(()14431.02442/-*.,-/.-,'2442/.--/0//0.,'344343011001100-,'244320./-,'144310-/.',&044344200-'*(/4434430-'++ ,43434431/"*,++ ()'+243443/,.0,,++))(%,/3344322/+.,--,+')()'.244344322.-.!,-..-+((/143434432210*0-..,*))('(()/0334322110/+-..,+$+**)'().13344322010.*../..-*()**)''(+/24432210010//.-)()**+(./13434433210010//.''()*)(+''0-13434432210010//-,-,-)!*)()((.133432232210010/0..-,++,+,**)()%-133232210010//../.--,+)*))()%-02432232210010//../.--+,++,+*+))*)(()'./132232210010/0../.--,,+,+**))*)(()'+.02332210010/.-./.--,-,++,+**))*)((),&.11010//.-..--,++,+**))*)((',)/0010/00/../.--,++,+)+))(&++/0/00/./.--.-,,++,+**)((!-)../.-.-,,++*)((,.-,--,--,++**))('(#!<%*+,--,+**'&)( #,:*'((**)(()(1%))*)((.)**)())(()(+*),++*)*)(()((,)+-,++,+**))*)(()(',,,-,++,+**)(()(),--.,-,++,+*+)(&'(('++-.-.,-,++,+**(()(')-..--,++,+**('(&,-..-,++,+**()()($+,.-..--,++,+**)(&'())(%*../.--.--,++,+**))*)(()(,,/./1121/-,.//./.--.--,++,+**))*)('(( :,/10112210.//.-.0-/.--.,,++*++*))())((!P*/123323220//0-/.--,++)("'))(('013443322322100/0-..-,,&(#)''((02334322322100.0-..,+'*('('034334322322100/0-.,+))''1477879887676655322/122'+,--,+-3688765432.122,,--,+,16788798988675652.//121---.--,,35778788778875531.121--,.--,),258996978876776554100,/0/,,-.-,+158878787788435565400.-,-.-,,359978788774,1456551/'-,-$++,3889887887630343440 -+-+,/39788742.(12431 *+-+,+/798878797787401211' ,+09987878862),,-+-,+188788787500,,,+4989989975206878878878641/113210'788987988743124434520'898878978875655655410'688788787765532210'678878756422*0&4889889877551)-(39987889841'// 0988787788764&$1//. +**/7887889877878403600/+++049878898788773120121/,+,,+3887887887763.201221/-(+,,3588787787877663.61220-,,,3478789887787857530223320/+-.-,+,3688978976756554.23221.,-.-,,*,-47987788787675566545232-,-.-,+12578988997676754544522+(,-.-,',,43678788776545445221101,%,-.-,++36887675754544524211/0--/,,+,&267887654453523221/./--,-,,'2478877545445232212/0//.-,-,+,*1468776544523212212//./0/..-.-,++,*02478775543522112212/0/.//.-,,0*25565543212/0//.--,,-,+0044554421211200/.//.-,-,,*,2.3343212112/0//.--,++ 0,232331211/.--,,(/2001011200//.-,,*,#L)./001//./--+)), '0:-+,.-,,-,,)1"--,.-,,*--../--,+,.-10//.-.,.-,,+,(/.1//././,.-,,+,'//00110//0/./,,+,).01101//./..,,*-,++,&-.1221010//./-,),,()12321010//./-+-++,%01221/./..,*+,,$//22121121/.//../,,+**+*,%.23221010//./,-,,-,,+104245566210433221011//.//..,,*,>%0365563203412110/..//.-,,+,'R-35688776765433212110//-+*+,++,+4679776757554210.$*'*,++/46799887674554432321.*,+-*)368778987765544321/--+(͹Ӱ   0''''&(  tWвԺռ '{#) :1-+(')˾&'%$%Cޫͽֲǵsb9kTXH_1#NK3ONZP8xdqEax  S)'s Z ts' [ KHOhiX%|?u$ 0  'b$( 'Ma'ȗ '꽢yC-'׉uQ *l -/@   :u* =7 AE 7]|S $n2ZwwX-"%#-S"~!+ *;, wF F Cu@qR1##ib<ľ' t ? : N?ŏJ#IuǯO''":b|{eA&-  '9CJLHC6#1M|Ӿ0.y-3* s) E($k'='&&&A%@&))' QtTiѷNϋU2  'Go u{1 B B Ja''('&&'$&%%2'('&&'$%&!&1'('&&'$%%&&0&''&'$%$%&&3'&&'$&%%&1(''&&'$&%&&%1'&'$&&%&0'&%'$&&1'&%'%&&%&&%0'&&%%&%%&0'&(&%&%0''&$%%&%8&1(&%%&&%1)'&&'&#$&%%&%1('&&'&%%&&%0#''&&'&&%&%&0'('&&%&%&%0('&&'&%%&%0'('&''&%%&%&0'&&&%%&&%1&&%%&&%%1&'$%%&&1&'$&&%%&&1&'&%%&&%%&&1'&'%&&%&&%2&''&%&&%&3('&&'&&4'('&%&&$&&&2'('&&%&5&('&&%&&3&('&&%4&('&&%%5&''&&(&6&'&%:&&;&;''<&%9&&7'&%6('&&'&%%5('&&'&%&&3('&&%$&%&2'&%&&%'%1'&$&&%&0(&&%&%3'& $&%&%&&%1&&%&%0(&1&&1'&#)$%&&%&&&.'&%&&$%&&%&/'&&%&%0'&&'&%%&&%&&0'&&'&%%&&%&%&&&-,+**)*')()2+*)*'()()1+*)*'(()(0-**)*')(())3+*)*')(())1**+*)*'))(2*+**)*'))(()(0+*)*')())()0,**)*(()()0+**+*))())(0*)()()(0++))(()()8)(0*()(())1&**))*'(())()1)**))*'))())1(**)*'))())0*+*))*')(())1+*))()(()()0+*(*(()(()()0,('(()(1*'(())(()0'**)())(('0*(*(()(())1+*)*)'))(2,**+())()()(&1*)**))()2+*))4*+*))()))2*)*)()5*))3*))4*)**)(((5*)')6*+(:*)););,*<()9*)))7*)((6)**))()5)*)())())3)**))()()2)**))())(*(1)**))()()0)+))'())((2)+.)()(())(1))())1+)())1))())()0)+#/(()()())().)*))*)'))())(()/*)*)()()(())0*)()()0+*))()())()))-2103120111181220000011011223253456:;;<976532102¿1011¿.000- 43HW3z5Ry2&1gb00ߚK%0BV07 g0 ,88s3Z1 Jibaa`_2,171 0=D\{507RC70y 0z WO0O1]X12<3ja45z6h6E7&8n:  =w;;?97(6R5[4K3WAY)21e\=19/ 0f\+00WAX/@/루/(G/ @ @ @ @+/143344322322100/0--+.$((*((,/43443443223220010//0-.-*+*+*)(5-3343443223220010//0-..-**++*)(,"'043443221010//0-/.-,(*++*)((,/3344322110/.-,+**++**((%24332120//..--./--..-,,+*+((%(( ".243200/..-/1..,+*#,.-,+()*+()(('1242-/-,+& ,,-.--.+))*)(()2341%,--.,())(()(( (.234/& ),-.--+!('())(' 2334+7-*( ,,,--,,,')('& 1334110//./11.-+( )&,--+,&(#&' *0344332232200//.00.-,*',-,,*') -03443210//..-,*,-,-*(( /134434322321200/.-,-+**)('0234434432232120010//0-..--,-+*++*)*()(()(&( 0234432232120/00//.--.-,-++,+**+())('(( 12344322321200/.--.-,-++,+**+())('(( 12344322321200/0//.--.-,-++,+**+())(('( 12344322321200/0//.--.-,-++,+**()((&( 12344322321200/0//.--.-,-++,+**))()('( 02344322321200/0//.--.-,-++,+**)*)(()('( /2344322321200/0//.--.-,-+*++**)*)((' /2344322321200/0//.--.-,-++*)()(''( -12 212/..--,++*)(,010//.--+)'$$.q/5688788764554432/2#,,-+*03977898774545441421./-.-,-718877898876545443433210--.//.-,0&)488788788776554332210,.//..-,,03889887654232210/.././.,,,)788766566432211321221/-./.-,,+6+ !177875543322136210.+(/122110/.,-..--,+,6771411.*" 0/12210/..--,++*-7796)012110-,++,+ +27893) -01211. -+,,++* 6788/70.+%"0001/0,*+,* 58975544345441.+!-*00110'+',+ .5896876776776654325420/.+010-++ 25897987887887766564433210./11.++ 36798898876767443211011/..--++466798878788767655443412101211.//.-..,,+*++ 468897889898776564432100/.-.,,-,,+* 677987787676554544342211211//./.-,+,,+ 6788987887887676654332322110/.-..-,,+,++ 7879788767675543433221/.--,+,++ 678878767675543433210/.-..,+ 47797889887645434324121101//./.-,,+ 4677878988987676554323110101//.-,,+* 3689987899787765432321101.0//.-.+,++,+*+ 1477677676566432110//.-*%04554433211//-,+&'2qN ̶Ǚ    ˦ Șۿ Ȁ           ĥŭq$g  3jh:aa % X,վ}m\H1 zy$~cyj[\TL@3" f9  z~Lf5  YWS* lb  K pZ>'$!a I ¹y\LG@5'k +ð|oe1 qW95ѵ|[ 6 7& 7, 7, 7, 6! 5 1 õvfV +Žp`P=+xvl`SF6%%&'&%%#&%%&&.&''&%%$%&&0''&%$%&&%&%0'&%%&&%%&&4&%&%&&2%&%&&%2&&&/(&%%&6&$.&%&%&&/'&%&'@&%&&/'&&&&/&%&&%&&0%'&%$#%&&2%$%&&%&&/&%&%%&&/&'&%%&%%&&%&&%&.&'&%%&%%&&%&%&-&'&%%&%&&%&/&'&%%&&%&/&'&%%&&%&&0&'&%%&%&&%0&%&&%%&%&.%''&>'*))(&())/***)((('())/**)(()(())1*)('('(()())3)(()2(())()3)))())()).+())())6)(())'.*))())())/*))())/*)*)))/+))))())0())((&(()2(&(()/*))(())/*))*)(()())().*)())(()()')-*))()()())('/*))()()((/*))()())(()/*)())(()())(0*))('(()())).)*)),>*.00423.5./x//02//.-//0/.>t0OyE1%s2E\//p3|349554. .{.y.M@.3k,/P6u1Y.;3.ۼe.// }/3//̿0D4$:    {N='8 Drop Shadow     3f8Ć'82Bv )9^ܜܬܼ ,<L\i ?:7 4 $02 $1ARe/ "/@Rfz+ +;Odz( *8I^t% !,:J\p" ".y˖X*7m 6nֺy]E2$ 2j֦g4!5i 3iǫv^J9+  )\޵xA'5f /dϼkXG7*  !NÊO.6c *^ȸmZH7) B}М`78b %VɺnZG6( 7oڭqC.   0Id|xbJ3  !<]ŵdE) ",!AhкwO- .>O^ ?kʩ}P*0G_v7dϩxF 'A_~+Wíʝf4 -Mr Dyҳwe[Y^j}߼L!  0T~._ӰeQJIJJLSfѡd0/VBz۸cNNYdhbVJI]޶{@,S 'VǚlQTk~_FEcƍN %K|3hٲYSmɾ~U?M{ϙW$  Ar?y̝kQ`ǵeABiҞ[& 6d K\PnλkE=_Ӡ](*T %U۴|RQyѶeC;]ҟ]*"Ex *]֩oJP~ɡubfgT;4AnɓV11T .cϜ`=I{ǛfB6305QݽP8HuԹ .cΛ^:CsΫyP:48JnԫuLFe˪ .dОa9!  (YȒW.#6^Ͷr\aƛj?   "Pզl: !8\hUXtʠpB! FἇP*1KdvueSHNiͥuG$ ! ;sҦqB#$2=DFE?:9D`ѪzK'3 /cėg?% #&.@]ӭ~O* D #P߿mK3$$2GeհS- $R=u¢eO?64:H^yشV/)[+[иznls۸Y1 +_ AwŸ޽^4 *]*Vd9  &W‡H4‡H4H4H4H4I4ÉL 3ǑV)1ҤoC' .ῖpQ;* +çrZE4% )­hS@0" &˹xbM;+ %Ųq[G3" $咠ϿdF*$tvɳlB #{mfho{ҰM$ #塉ug_]ahr~֮yE $͸zj_XVX^iŖ`2$пtf\W[oѦrA $ʹzwسN&%ɼݾZ/&Ǜf8 &聟ѨtC 'Ie۶P(( 3KgĔ_2) !4Lg̣o? ) !4Jd{K%+ !3H`xvR--  /AORE. , $&  ,  - .4;@BBA>80' .lu{~~}yqeWF4$ -쪳gN4+ɸdB&*ѹrJ(*ǣvI%)ˣrC ( țf7( ᾌV+' ٯyD '˚`/&߶}E &˗[*%ڬo8%˴tjhn|企E%{`J:1/5ARkȐR# %bE.&8SvЛ]*$4 ,Hq֤f0$ *Jyګm5$ />HLI@2Zܯq8$ ,FaxycH2.Fxܰs9$0TzxR9?hڰr9$,T£vMA^حo7$H{ѾbJ\Ԩj3$dʱɥrR^ϡc.$}ίlh}ȫyXaɘZ) %ӿeOVsåvYfP" %Ѳ|PDW|jWmԷD%ϪqE=V{wXVxΨn7%ΫqB4EavzlVL^ÕZ*%д~L32?JKEBOrβ}E & @ @ @ @7fܿh=  K @n׺h? ;#Doίa= )$Bh׿{V6  :Z|īiH,   -Fb~źqS7!  0DYl}}jS;'   (5AJPSSQKA4%) "##! )  )"%%$" *+;IRWXVPF8) )A[tpZB,    4SvʿzZ;"  " 8^˲kE&%3BP 7`žrF$ ';Qg{1[ǟn>  7Ro&OʷÕ_0'Df>rֻoeciu۵G *Ks*YطmWMJJLPYn͛_-)Nz=t޾iQLT]`\RHKbܳv=&Kz $Q̠qSPd}vYDGhÊK !Dt0d۶\QgźxP>P͖U#  :j=uϢoR\ʵb@Clҝ[& /\ IÏ_PkøkD>`Ӡ](&M $SܷTQwԼhD<]ҟ])>p  )[׫rKP}˥|konX=<`М[+2^ ,`ҢgDN~řhONOB5?k˕W/-M .bϜa?J|ƙdB8613L}Q6Cm .cΛ^;Eu̦rJ603BfְxLC_ӵ .dН`9>iռiPHPhɛhLV̪\ .cԤg;6YҸ|ճ\UrȣyQ1 .c٭q?.EwǹmZjǠsJ* ,`~G*2Xğw_dɠrG&  )[ŎT,$:dӽy__{̤tG%  $SҢg7#=cƻoYWpШxJ'  I߸K&!7TpoZKLdԮ~O)  =vΟi; ):GOROH?:AYײT-/ 2gྎ^8!#%&',:U|ٶY1A &UٶaA, !,>Z~ڸ\4  "PBz׹uZF80.4@Smݻ_6  (Y/aƭpfcjy࿓b8 +^ G~ʼĘg; +].]ǝm@  'X =nǠqD" !M #HxÝrG%>)MzչlE%,*LtǪa># 'Ce˳tR45Okz]@(   $7K`trZC-  ,:HRY[\YSH9) ' "%&&%"+ 0 +   # "%&''%#    "+5ALTY\]^]]ZVOF;1' %2AP_n~vhZK=/ -?Sg|vb0E^v² *C_|7Uw$Ae煹˜gE5358=Li™b1&pζnWLJO[rȫyE 'T̹ʳV+'7dȿʴ_5(=eìa9 ( 9YzzX7 ) ,C[os^E, **8CKNMF;,, / .12 0*035541-& .]flnnmibWI9* -휦pYB+ ,˽wW9 +ƭf@"*׽lA )Ùh; ) ^1( ܷO&' Ԩq>'ƓZ+&۰w?&ǒV' %Ǻרk5%ӽ|rpw~C%楅hQA866+"#6`ܮp7$ '>Vjw|xlXA/.J|ܰr9$,MqnK7@j۰r9$)O|̼oIA`حp7$Cuк^G\թl4$_κǢoP]Уe0$xеvqȪxV`˚\*$拾˜kSWsħwXdÏR# %ѴSDUxkVjԹG%ϫqF=TyzZUtϬr:%ΩoA4FczpXKZƚ_-%ϱzH02@LNF@JlϷJ &爼ѿ_=/.148D`Ơh5&t̯aK@>BOf˱K" &ZȰrns̹^1'=lʿ˺i< (#DnƲjA! ($@bľ`>")2Jbx|fL2*  />KSWUNA2" , "$# . 2q; 9" 7N;* 5rZB.4y\A) 3ȱuT71ǬeB%0 @ @ @ @(Hp+Mw+O|Ը*O|ǵּlYTWbv$Iyɮ{jeuȫwG-%'4Nx ?o˥~]E78P}l8#Ev2`ᾏ`;#9ie2 *T #Lb9*S~U* :jx6i̫S0:XfY; DtyO "M˿|R/!070 Ah|rQ/2eձtG# .HRF.C~่]INeS) %*" &VΜd8#$5NioI%  2i㻂I!%9KSH1 ?{ةl6 $)$ KϚ]-     "TɓY0&)'   %YʘeE;?HRUL8   &\ӪmipynO,  ']çrP,  &\ԻykV;   %Zظ{gXJ=/ #U֬}V<,! MثtD$   A}ṃM& #("  3kϡk< !8MSF.  &W_6 &CenH# %C}ܹ\6+JqT) $..&"01cٶa@29Sy{K# )G[ZF22 Jٹsck¯]4 ?kf@.3cê̷d;  $Q{H( FzɣtG' -^O+,WǜnG-9kú\<6bѭhRC81/7Q~šyc =h̴|pfbg{ս ?gø;` 5V} -Ko$>^0Kh "6Me}Ź "2DWj{~mZ '4AN[gr{􇅂|sh\PC6)  !)19@EHIJJHEA:2*##  &  * 4 1  '-033/ %3@MX`fjk.,@Thz, +B]x+";Yy* +Il) 2T{Խ( 6\ٴ{' 6^ʚjPX3]Ƒ^CK,VΠrZa  $J}ں %+./0/,& %@n̼ %5FU`fhhfaXLDJf"7Qj}ֽrK*/ȥ{P. .ΫT0 -үV0-԰S,,쪒Ӭ{J$+{\PZt͢n= +N1&.Dg‘Z-*,-NzڰyD * 6Wɖ\,))?\|ڰv>)2OnÍQ# )+Ov~ѡc.(5_iSGPqڰs:(0UvyeM7'!,NݽE( 9MQF5$6iƎO (%% +Y˗V# (  1XϜZ& ( $07:?MkП\' ))D[gmq{ҟ\& *8\{ќY% ) 7[y͕T" ('AVep~ŌL( !,5?Qoݺ~B(  7^լo6(+?D9& 9i˛^+(EfsfJ-,SڼK )S~wS5(0MzҨo9)NzbR[zU();`Ѩq=*(BnþܺR'*#5[ƙe6+6Fe̤rB +ctͨyK&,ʦzN*-ßvL*-ֺmG(.̮b?#/սyU51fF* 2nQ6 3iQ:& 4G5$ 6 8 9<<7 420,& 3if_VK>/" 1񨤞wcM7# 0jL0 /Ѿ^956A[ɜc40Jh !M̹gL?:62.)$!2WԴ~F!#9Tq +]ǦrE*  5aǘ], )@\y 5lĝi@)  CwѮu=/He ?yɦ{[J@93.*(%" 2^ԿP#  "6N  I׿yqha\XTOIB<730-($!$4V̢f4  &  #Rļ}vpkfaZSMJQg׶N-  (Z̢vXG?82-)&% +_ÿƨzrkc]XS -bǾ .c  .d /d /d# .d .c ,` )X  !Iy{wsniea^\[YVTQNKG 2So~}zwtpkga]YVUTRQOMKHEB?<840-*('&%#"!  ,;CFFDCA?<:730,(&$""!!        葦~ʗZ) 'WnӪo7'(:RoɵҸG'(@`ίqsU$ '7[ŻfHJkŞb-& 5\X<>aʩn5& 7_fORrҳy>& =dzܼE& #FoĊK&4-VɏO &aC*  =o̒Q! &qS7" )U͓R! &碖cH1>t̓R! &璛sZB,.]ˑP &g|}hL1 &KȎN &9NctybB'"=tĉJ&,;L\hk^C(5gE&&(.5?IOI9&1_|@&OKGEEGHE;0,;ct9&率ysnjf^VS\zܫj2&¼ףa+'ЙX% 'ƌM '|A'Ϥi3'íQ% (龻yZ5(}yuplgda^][YVRMB0 (D@=:63/,*('&%#! ) *,9    {N='8 Clipboard     8vvv8   % 5 E U e u           %"$%%%$%4%DJ&rvvvvvv @ @ @ @ @ @ @ @ @ @ @ @5 5 5 5 5 431 /.,%+ ) -( & 3% # M"   r #  -  0 7Y欩%g⭮~ +} ߭}{ /㬫}|z5 5 5 5 5 431 /.,%+ ) -( & 3% # M"   r #  -  0 7孬Y櫩%g} +| 㬪}{ /㭫}|z5 5 5 5 5 431 /.,%+ ) -( & 3% # M"   r #  -  0 誩7欫Y%g~ +~} ~{ /᭮~|z5 5 5 5 5 4'3o11/ } .9 ,  +G ) (O & %_ ## "k - w 5   ?  O  Y  g )" q# 5%  {&852BE1/ce.픒 ,듐~}r*꒐~{yw')萎~}{xwus '珍~|{ywvtrq.&厌~|zywusqoml$䌋}{ywutrpnlkh4 #⌊~}{zxvtspollihfc !኉~|zywusqonkihfecaC  ߊ~|{ywutrpnlkigedb`^\ ވ}|zxwtsqonljhfdb`^\[YO  ܇~}zyvusrpnljhgecb`]\ZYWU& چ}{yxusrpnlkjhedb`^][YWUTQM ل~{zxvtsqomlihfdb`_^[ZXVTRQOM, ׃~|zywusrpnmjigedb`^\ZXWUSROMLJH  ւ}{zwvtrpomkigedb`_]ZYWVTRPNLKIGF2 ԁ~|{xwtsqomljigdca_][ZXVURQONLIGFDCA  ؀~|{yxvtrpnljigeda`^]ZXWUSQONLKHGECA@=9 }|zxvtspomljhfdba_][ZXUTRQNMJIGFDB@>=:9~|{yvusqpnlkifdca_]\ZXVURQPMKJHGEB@?=<986= }{yxvtrqnmkigedb`^\[XWUTRPNMJHGECA@><:96531& |zxwtsqonljhgdba_]\YXVTRQOMKIHFDB@><;9864211< {ywusrpnmjhgeca_^\[YVUSQONLJHFDCA?=<:864211, yxvtrpomkihfdc`_\[XVUTRPNLJIGECB@><;9753211:ywusqonljhfdca_]\ZXVTSQOMKJHFDC@>=;9754311010852BE1/ce.퓒 ,듑~}r*ꑏ}{zx')萎~|zywus '珍}{ywvtrp.&厌}|zxvusqoml$䍋}{ywusqpnlji4 #⋊}|zwvtrqomkigfd !ኈ~|{xvtsqomljhfdbaC  ߉}{zwvsrpnmjigedb`^\ ވ~{zxvuspnmkjhfdb`_][YO  ܇~|zywusromljhgdca`][ZXWU& چ~}|ywutrpnlkigedb`^][YWUTRM م~|zxvtsqonlihfeba_][ZXVTSQOM, ׄ~|{xwutrpnljigeca`^\[YWUSQONLJH  ւ}|ywuurpomkjhfdba_\[YWVTRPNLKIGE2 Ԃ~|{xwtsqpmljhfeca_][ZXWURQOMKJHFEB@  ؁}{zwutrpnmjigfdb`^]ZXWUSQONLJHFECA@=9 ~{zxwtsqonkjhfdba_\[YXVTRPOMKIGFDBA><;9~|zxvusrpnljhgecb`]\ZXVURQONLJHFDCA?=<:86= }{yxvtspomkigfdb`^\ZYWUTQPNMJIGEDB?><:96532& |zxvtrqomkjhfdc`_][YXVURQNMKJHEDC@?=;9754211< {ywusrpnmjhgedb_^]ZXVTSQPNLJHFDBA?><:864311, zxvtsqomkihecba_][YWUTRPNLKIGEDB@>=;9763211:yvusrpmljhgdca_^\ZXVTSPOMKJHFDBA?=;98643110852BE1/be.퓑 ,뒐~}r*ꑏ}{zx')萏~}zywus '珍}{ywutrp.&厌~|zxvtsqomk$䍋~|zywusronmjh4 #⌉}{zwvtsqnmkihed !኉~|zxwusqpnljhgecaC  ߉}{ywvtrpnlkigeca__\ ވ}{yxvuspomkjgfdc`_][ZO  ܇~|zxwusrpmljhgeca_^[ZYVT& چ|{zwvtrpomkihedb`_\[YWUTRM م}|zxvtsqomljhgdb`_^[ZXVTRPOM, ׄ~|zxwutqpnljigeca`^\[XWUSQPNLJH  ւ}{zxutrqomkigfdb`^\ZYWUSRQNLKIGE2 Ԃ~|zxvtsqonkjifdba_]\YXVUSQOMKJGFDCA  ؀}{ywvtrpnmkigedb`^]ZXWUSRONMJHGDCA?=9 }|zxvtsqomkigfeb`_][YXUTRQNMKIGEDB@>=;9~}{xwusrpnljhgeca_^\ZXWUSQONLJHFDCA?=;:86= }{zwutspomkigfcb`^\[XWUSQPOLKHGECA@><:86531& |zxvusqomkjhgeba_][ZWVTRPNMKIHFDB@>=;:764210< {ywutrpnlkigfca_^\ZXVUSROMLJHGDCA?=<:874311, zxvtsqomkihfdba_][XVTTRPNLJIGECA@?<;87532110:xwusqpmljhfeca_]\ZXVTSPOMLJHFDBA?=;98642110[k7!A 5a2K 1 / Q . #,]*+)k'7 &s$; #!E  M ! W!)#g$/&q'5 ){+? , .K  / 1U 2#999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999 @ @ @ @  ~}{y4ᬪ~|zx#୫~|zyw?߭}{ywv9ڭ~|zxvt 8ޭ~|{ywus `螟ެ}|yxvts \Ǐݬ}|zywusr!]룜ݬ~}{ywvtrp"^͑ܭ}|zxwurqo#^񫛮~}{ywusqon$_ד}{yxvtrpnm$`~|zyvusqonl&`mHޗ~|{yxvtrpnlk'_SJLB_}|zxvtrqomkj'"OʂOP{jB@⚟~|{yvusqpnkjh!%>WS^O:R~|{yxvtrpnmkig']Ziq;8蟗}|zxvtsqnmkjhfYg˜ТN2Lˋ~}zxwusrpnlkhfeV[ܭz41r쥏~}{zwvtrqnmkigecTYպQ,_ˉ~|zxwtrqomlihfdcRXʹ57䥆}{ywutrpnljigedbMYʽߥk94Zȇ~{yxvtsqomlihfdbaFXr̿ďoE47X[HOڦ~~|zywutqpmljhfdca_/X_e>4;OQMZJCk{yxutrpolkigfda`^UYµp;6=STRuY?HϤxvusqomkjhfdca^]RXöm3EXķǑtH535KUJH]cXVTadĸo>38XŸiA744FPNeWDHiyUS\cqǺp@-&YǺ~H88?PUV|sD@Rr^Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|8Sb_j}|M@Xjʽ~K2C[{|=9Jertv6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjJ[Zj~iKE6 SX~L4*Zհو82@_:WU_r_KH)EXWµ~L5 XqϹI0C%KTRODW_[mö~L5SdõY0- =P8 $ab_Ǹ~M7 OXķ؟rE3/ aemƺ~M8GXƹoD530 ZctȽ~N8 :YǺd<792/ Sdh~Ͽ~M9 (Yzɼ~I9>C>:KcchyĶtC7Wkʽ~M9%;DF=W`aq~XA%W^̿R:0C E_\f{uUD@ TXS90TY]rkMG9QXµS: GWVfaMJ,ZWķT: 6RRPF__[vŸT: G> KdbcɺT;`elȼU;YcjʿU< McexµR=  ߭~}{y4ᬫ~{zx#᫪~}{yv?૪}{yxu9߭~{zxvu 8߬~|{ywus `螟ح}{zxvur \Ǐݭ~|{ywusq!]룝ݬ}{ywutrp"^͐ۮ}|yxvusqo#^񫜮~|{ywutrpm$_ד~}{yxvtrpnm$`}|zyvurqoml&`mHޘ~}zywusqpnmk'_SJLB_}{zwvtrpomki'"OʂOP{jB@⚞~|zywusqpmkjh!%>WS^O:RŽ}{ywvtrpomkig']Ziq;8螗~|zxvtrpomkihfYg˜ТN2Lˋ~|zywutrpmljigeV[ܭz41r쥏}{zwutrpomkihecTYպQ,_ˉ}|zxvtsqomljhfdcRXʹ57䥇}{ywusronlkigedaMYʽߥk94Zȇ}{zwvtrqnmkigfdb`FXr̿ďoE47X[HOڦ~|{xwusronljhfeca`/X_e>4;OQMZJCk{ywusrqolkigfcb`^UYµp;6=STRuY?HϤxvtsqomkihfdba_]RXöm3EXķǑtH535KUJH]cWVTadĸo>38XŸiA744FPNeWDHiyUR\cqǺp@-&YǺ~H88?PUV|sD@Rr^Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|8Sb_j}|M@Xjʽ~K2C[{|=9Jertv6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjJ[Zj~iKE6 SX~L4*Zհو82@_:WU_r_KH)EXWµ~L5 XqϹI0C%KTRODW_[mö~L5SdõY0- =P8 $ab_Ǹ~M7 OXķ؟rE3/ aemƺ~M8GXƹoD530 ZctȽ~N8 :YǺd<792/ Sdh~Ͽ~M9 (Yzɼ~I9>C>:KcchyĶtC7Wkʽ~M9%;DF=W`aq~XA%W^̿R:0C E_\f{uUD@ TXS90TY]rkMG9QXµS: GWVfaMJ,ZWķT: 6RRPF__[vŸT: G> KdbcɺT;`elȼU;YcjʿU< McexµR=  ߮~}{y4ݭ}{zx#ۭ~|zyw?ପ|{ywv9߬~|zyvt 8ޭ~|{yxut `螟ެ~}{zxvts \Ǐ׭~|zxwtsq!]룝ݬ|{ywvtrp"^͑}|zxvurqo#^񫜭~|zxwusrpn$_ד}|ywvtrqnm$`~|zxwtsqomk&`mHޘ~}{xwusqpnlj'_SJLB_~{zwvtrpnmki'"OʂOP{jB@⚞~|zxwusrpmkjh!%>WS^O:RŽ~|{yxusrpolkih']Ziq;8螗}|zxvtrpomkihfYg˜ТN2Lˋ|zywusrpmljhfeV[ܭz41r쥏}{yxutrpomkjgfcTYպQ,_ˉ}{{xwusqpnkihfdcRXʹ57䥆~|{ywusrpnljhgecaMYʽߥk94Zȇ}{zxvtrpomkihfdb`FXr̿ďoE47X[HOڦ}|zyvusqpmkjhfdca`/X_e>4;OQMZJCk{yxusrpnmjigeca`^UYµp;6=STRuY?HϤxvusqomljhfdba_]RXöm3EXķǑtH535KUJH]cWUTadĸo>38XŸiA744FPNeWDHiyUS\cqǺp@-&YǺ~H88?PUV|sD@Rr^Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|8Sb_j}|M@Xjʽ~K2C[{|=9Jertv6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjJ[Zj~iKE6 SX~L4*Zհو82@_:WU_r_KH)EXWµ~L5 XqϹI0C%KTRODW_[mö~L5SdõY0- =P8 $ab_Ǹ~M7 OXķ؟rE3/ aemƺ~M8GXƹoD530 ZctȽ~N8 :YǺd<792/ Sdh~Ͽ~M9 (Yzɼ~I9>C>:KcchyĶtC7Wkʽ~M9%;DF=W`aq~XA%W^̿R:0C E_\f{uUD@ TXS90TY]rkMG9QXµS: GWVfaMJ,ZWķT: 6RRPF__[vŸT: G> KdbcɺT;`elȼU;YcjʿU< McexµR= =(  ) G+ , Q. / / / / / / / / / / / }. {. %- - - - ]- -, , , , q, K+ + +  a       ߽  ߣ k ۉ   k  % I  !ao'  9ۣq7+   'wő_+_  K}I)  /y}e5O  + A  - c  K Q }/ C _ S; /7 C]ݧw?7 C 7ɕa/u C  %q㯁M C Cga91 C   # C   C wvtrpoljigeda`^\[YWUSRPNLJIFDCA?><:96531 15 vtsqomkihfdba_][ZWVTSQNMKJGEDB@>=;975421 16 utrpmljigeca`]\ZYVUSQOMLJHFEC@?=<:86521 13#trpnmkigfcb`_\ZYWVTQPOLJHGEDA?>=:86531101 1: sqpmkihfdca_][ZXVTSPOMKJHFDB@>=;9764211(rpnlkhgeca`^\ZXWUSQPMKJHFEBA@=;:865311;,polkjgfdba^\[YWVSRPOMJIHEDB@><:9753113Re3pmkjhfeba_^[ZXVTRQOMKJHFECA?=;:854211011A_bb3nmkigecb`^\[XWUSRPNLJHGECA?><:8753115Va`ce4mkihfdba_][YXVTRPNMKIGFCB@><;975421 1011Fa_adff5 ljhgecb_^\ZYVUSQOMLIHFDCA?=;:7643110118Y_^adegh7!kigfdb`^\[YWUSRPNLJHGECB?=<:965311K`\_cdfgij8" jhfdca_][ZXVTSQOMKJHEDBA><;:86421 1010<[]\`caehhkl8" igfcb_^\ZYVUSQPMLJHFECA@=;:8643110112P^Z]abXKSelmn:$"gfdb`^][YWUSRPNLKIHEDB@><:97531 1@^ZZ^a\MGILRcpq<$#fdca_^[ZXWURQONLJHFDBA>=;9864211011014T]X[_`TDC[qORal7&$ecb`^][YWUSRPNLJIFECA?=<:974311011D^WX\`YG>Dz~XVT6$dca^][YWUTRPNMKJGFCB@><;97532117W[VY^]N<;[aZZcb_^\ZYVUSQPMKIHFDBA?=<9764311I^UVZ^VA7=ʾjXb`_\ZYWVSRPNLJHGECB@=<;975411:ZXSW[ZH44]ƽ`P`_][ZWVURPOMKIGFDB@>=;9754211N\STWZ`D2BƽYD`^\ZYVUSROMLJIFEBA@=;:864211=[VRUX[]R42ƾX8_][YXVTRPNMKIGFDB@><:97532113QZPSVYXXV0.5OƲX*^\ZXVTSQOMKJHFDB@?>;9764311B\RPTVYTKLL3/5=JxţzX\[YWUSRPNMJHFECB@><:9753115UWNQTWVMEIQNM=36=KafT\YXVTRPNMKIGFDB@>=;9763211F[ONRUWPDBNmQRG87=PiYJZXVUSQOMLJHFDBA?=;:765318XTLOSVSH>@l|YWR><;97532KZLLPTUL=:Lżd\G;QoW1XVTSPOMKIHFDC@>=;9854<:866OWIJNQSH73Mº[G;99TTGILOQSP:0CĸuS==SvmXO.SRPNMKIGEDA?><:HYJFJMONNV=)3:PηaN7=SwӺy]_JRQOMKIGFDBA>048>MeY1.@TycHPNMKIGEDB?DYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;sMLJGFDB@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2{yZHGECIYIADHJH@:-1N³cM8E^`[S2.JOTTP%7`cbdTEIKL-*36=LlX6 ;F^»١he4'6_cbdUGJMK*',79;E_wY=G_ѫh` TacbdVKNQSKBE;&:F_hS >D[{ü|kc^ CJ[cdWMQOGDD+;F`\K8BPfxtc`X%0LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeYwvsrpnljigecb_^]ZYWUTQONLKHGECB@=;:86531 15 wtspomkjhfdba^][ZXUTRPNMKIGEDBA?=:985321 106 usqonlkhgeca`]\ZXWUSQOMKJHGECA?><:86431 13#trqolkigfdb`_][YWUTRPNLKIGEDB@><;97531 1011: sqonkihfeb`_]\YXVTRQOMKJHFDB@><;9754211(rpnmkigfda`^\ZXWTSRONLJIFECA?><:865311;,pomkihfdb`_][YWVTRPOLKIGFDB@><;9753110113Re3omljhfeba_]\YXVTSQOMKIHFDB@?=;9764211A_bb3olkigedb`^]ZYWUSRPMLJHGECA@=<:8753115Ua`ce4mkjgfdc`_][YXVTRQOMKIGFDB@><:9753211Fa_adff5 lkigeca_^\ZXVTSQOMLJHFECA?=;:8643118Y_^adegh7!kjgedb`^]ZYWUTRPNLKIGEDA@><:875321 101K`\_cdfgij8" jhfeca_]\ZXVTRQOMKJHFDBA>=;:85421 1<[]\`caehhkl8" ifeca`^\ZYVUSRONLJIGECA?=;:86431101101P^Z]abXKSelmn:$"hfdba_][ZXVTRQNLKIGECB@><;9753210011@^ZZ^a\MGILRcpq<$#geca`]\ZYWTRQPMKIHFDBA?=;9864210114T]X[_`TDC[qORal7&$eca`_\ZXWUTRPNLKIGECA?=<:86531 1D^WX\`YG>Dz~XVT6$dca_][ZXVTRQOMKIGFCB@><;9754116W[VY^]N<;[aZZca_^\ZXVUSQOMLJHFDCA?><:864211I^UVZ^VA7=ʾjXb`^]ZYWUSQPOLJHGECA@><:8653211011:ZXSW[ZH44]ƽ`Pa_][ZWVTRQOMKIHFDBA?<;:763211N\STWZ`D2BƽYD`^]ZXWUSQPNLJIGECB?><:8653011=[VRUX[]R42ƾX8_][YWUTRPNLJIGEDB@><;97532113QZPSVYXXV0.5OƲX*]\ZXWTRQOMLJHFDBA>=<9764211B\RPTVYTKLL3/5=JxţzX\ZYWVSQPNMJIGEDB@><:8653115UWNQTWVMEIQNM=36=KafT[YXVTRPOMKJHFDB@?<;8753211F[ONRUWPDBNmQRG87=PiYJZXVUSQONLJHGEBA?=;:864208XTLOSVSH>@l|YWR><:97531KZLLPTUL=:Lżd\G;QoW1WVTRQOMKIGFDB@><;9764=:97B[LHLNPTP26ºXD<:HYJFJMONNV=)3:PηaN7=SwӺy]_JRPOMKJGFDB@>=?WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdLQPNLJHGDCA?=NYGEHKMKEER_NN>048>MeY1.@TycHPNLJIGECB@DYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;sMKIHFDC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2{yZIGECIYIADHJH@:-1N³cM8E^`[S2.JOTTP%7`cbdTEIKL-*36=LlX6 ;F^»١he4'6_cbdUGJMK*',79;E_wY=G_ѫh` TacbdVKNQSKBE;&:F_hS >D[{ü|kc^ CJ[cdWMQOGDD+;F`\K8BPfxtc`X%0LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeYwusqpnmjigedb`^\ZXWUSRPNLJHGECA@><:9743110115 vtrqomkigfdb`^][ZXUTRPOLKIHFCB@>=;9753110116 utqpnljigdca_^\ZXWUSQPMLJHGDBA?><986431 13#trpnmkigfcba^\[YWUSRPNLKIGECA@><:974421101 1: sqomkjhfdca_][YXVUSPOMKJHFCB@?=;:864211011011(qpnmkigecb`^\ZYWUSQONLJHFECA?=<:874311;,qomkigfdba_][YWUTRPNLKHHECB@><;97531 10110113Re3onljhfeca_]\ZXVTSQOMKJHFDC@>=;9864211A_bb3oljigecb`^\[XWUSRPNLJHGDCA?>;:8753110115Va`ce4mljhfdc`_][ZXUTRPOMKJGFCBA?<;98642110 1Fa_adff5 ljigdca`^\ZXVTSQPMLJHFDBA?>;:8643110118Y_^adegh7!kigedb`_\[YXUTRPNLJHGECB@><:965311K`\_cdfgij8" jhfdba_]\YXVTRQOMLIHFDB@?=;:864211011<[]\`caehhkl8" hgeda`^\ZXWUSRONLJHFECA?><:86531 12P^Z]abXKSelmn:$"gfdb`^][ZXUSRPOLKIGEDB@><;87631 1@^ZZ^a\MGILRcpq<$#geca_]\ZXWTRPOMLIGFDBA?=;:86421 14T]X[_`TDC[qORal7&$edb`^\ZYWVTQPNLJIGECB@=<:9743110D^WX\`YG>Dz~XVT6$db`_][YXVTRPOLKIHFCBA>=;97532117W[VY^]N<;[aZZcb_^\ZXVUSQOMKJHFEBA?=<:864311I^UVZ^VA7=ʾjXba_\[YWUTRPNLKHGEDA@><:875311:ZXSW[ZH44]ƽ`Pa_^\ZWVTSPOMKJGFDB@?=;9853211M\STWZ`D2BƽYD`^\ZXWUSQONLJHFECA?=<:875311=[VRUX[]R42ƾX8^][YXUTRPOMKIHFDB@>=:8753113QZPSVYXXV0.5OƲX*]\ZXVUSQOMLIHFDBA?=;97643011B\RPTVYTKLL3/5=JxţzX\[YWUSROMLKHFECA?><:8753115UWNQTWVMEIQNM=36=KafT[YXVTRQOMKIGFDB@?=:9763211F[ONRUWPDBNmQRG87=PiYJ[XWTSQPNLJHGDBA?=<9764217XTLOSVSH>@l|YWR><:87532JZLLPTUL=:Lżd\G;QoW1XVTRPNMKIHFDC@>=;9764<:97B[LHLNPTP26ºXD<:HYJFJMONNV=)3:PηaN7=SwӺy]_JRPNMKIHECB@>=>WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdLQOMKIHFDCA@=MYGEHKMKEER_NN>048>MeY1.@TycHPNMJIGECB@CYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;sMKJGFDC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2{yZHFECJYIADHJH@:-1N³cM8E^`[S2.JOTTP%7`cbdTEIKL-*36=LlX6 ;F^»١he4'6_cbdUGJMK*',79;E_wY=G_ѫh` TacbdVKNQSKBE;&:F_hS >D[{ü|kc^ CJ[cdWMQOGDD+;F`\K8BPfxtc`X%0LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeY4a5)7k83 :s:E:q#:):':':':':':':':)9u#9͏M8[898+9q!9a8Q8A 818y%8g8Y7I * ;* k* !) #) O) c ] M I ۣk+ y+eÑ]+  u!S{G ]7͗e3 !'w糅O# } } Ok;m ; +7# a A  M 9  ߫ 5 y) Óci y'M EQݧyIG i yћk7/}a1A u_빉U% GӡuEA y9ۡs? +_oY- A % '{]+ !A sOyqI"A 1###C 399999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999999    {N='8Line     w8w8xWxgxwyyyyzzz%z5{{{{{{{{}A}Q}a}q}}}}~/?O_o===============================================================' @ @ @ @===============================================================' @ @ @ @===============================================================' @ @ @ @===============================================================' @ @ @ @======================================================='    {N='8 Background     88|&µ` &D2d2p2|222OlxUxaxmxyxxx|JKJJKJKJJKJKKJJKJ JKJ JKJKJJKJKJJKJJKJJKJKJKJJKJKJJKJJKJJKJKJJKJKJJKJJKJJKJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJKKJ JKJKJ JKJJKJJKJJKJKJJKJJKJKJKJKJKJJK JKJJKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKKJJKJ JKJJKJJKJJKKJJKJJKJJKJJKJJKJKJKJJKJ JKJJKJJKJKKJJKJJKJJKJKKJJKJJKJKJKJ JKJKJJKJJKJJKJJKJKJ JKJJKJKJJKKJJKJJKJ JKJJKJJKJKJKJKKJJKJJKJK JKJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJKJJKJKJJKJKJJKJJKKJJKJJKJJKJJKJJKJJKJKJKJJKJKJJKJJKKJKKJKJKJJKJJKJJKJJKJKJJKJKJJKJJKJKKJ JKJKJ JKJJK JKJJKJKJJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJKJJKJKJJKJKJJKJKKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJKJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKJKK JKJJKJKJKJJKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJKJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJKJ JKJ JKJ JKJKKJJKJJKJKJJKJJKJJKJKJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJJKJKJJKJKJ JKJJKKJJKJJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKKJJKJJKJKJJKJKJJKJKKJ JKJJKJ JKJKJJKJJKJ JKJKJJKJJKJKKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJKKJJKJJKJKJJKJKJJKJJKJJKJKJJKJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKKJJKJKJKJ JKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJKKJKKJJKJJKJJKJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJKJJK JKJJKJJKJKJKKJKJKJJKJKJKKJ JKJKKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKKJJKJKJJKJJKJKJJKJJKJJKKJJKJJKJJKJKJJKJJKJJKJJKKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKJ JKJKJJKJJKJJKJJKJKKJJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJKJKJKKJKJJKJJKJKJ JKJJKJJKJJKJJKJJKJKJKKJKJJKJJKJJKKJJKJJKJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKJJKJKJKJKJJKJKKJJKJJKJJKJJKKJJKJJKJJKJJKJJKJKJJKJ JKJJKJJKJJKJJKJJKJJKKJJKJJKJJKJJKJJK JKJKJJKJKJJKKJJKJKKJJKJKJJKJKJJKJJKJJKJ JKJJKJJKJJKJJKJJKJKKJJKJJKJJKJKJJKJJKJ JKJKKJKJJKJJKJJKJJKJKJKKJJKJKJJKJJKJKJJKJKJJKJKJJKJKJJKJJKJKJKKJJKJJKJKJJKJJKJKJKJJKJ JKJKJJKJKJJKJ JKJKJJKJJKJJKJKJKJJKJJKJKJJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJKJKJKKJJKJKJJKJJKJJKJJKKJKJJKJJKJJKJKJKKJJKJ JKJKJ JKJJKJJKJKJJKJJKJJKJJKJKJJKJKJKJJKJJKJKJJKJJKJ ?5( 2-# # 7 @ (, 4 /  `$  #   *    .2 ).$ (5 6"  JKJKJJKJKJ JKJJKJKKJJKJJKJJKJJKJKJJKJJK JKJKJJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKKJJKJJKJ JKJJKJJKJJKJJKJJKKJJKJJKJKJJKJJKJJKJJKJJKKJJKJJKJJKJKJKKJJKJKJJKJJKJ JKJJKJJKJKJJKJJKJJKJJKJJKJKJKJJKJKJ JKJKJJKJKJJKJJKJKJKJJKJKJKJJKJKJJKJKJJKJJKJKJJKJ JK JKJJKJJKJKJJKJKJJKJJKJKJJKJKJJKJJKJJKJKJJKJKJKJKJJKJKJ JKJKJJKJKJJKJKKJJKJJKJKKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKJKJJKJJKJ JKJJKJJKJKJKJ JKJJKJKKJKJ JKJJKJJKJJKJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJKJ JKJ JKJKJKJKJJKJJKJJKJKJKJJKJJKJJKJKJJKJKJJKJJKJJKJJKJJKJJKJKJJKJJKJJKJ JKJKJJKJJKJKJJKJJKJKJJKJKJ JKJJKJKJJKJJKJJKJ JKJJKJJKJJKJKJJKJJKJJKJJKJ JKJKJJKJJKJJKJ JKJJKJKJJKJJKJJKJJKJJKJJKKJKJJKJJKJJKJ JKJJKJJKJJKJJKJKJJKJJKJKKJKJJKJKJJKJKKJJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKKJJKJKJJKJJKJJKJJKJJKJJK JKJKJJKJJKJ JKJJKJKJKJJKJKJJKJJKJJKJJK JKJKJKJJKJJKJJKJJKKJKJJKJKJJKJJKJKJJKJJKJKJJKJJKKJJKJJKJJKJKJKJJKJKJJKJKJKJJKJJKJ JKJ JKJJKJJKKJJKJJKJKJJKJKJJKJJKJKJ JKJJKJJKJ JKJKJJKK JKJK JKJKKJJKJ JKJJK JKJKJJKKJJKJJKJKJJKJ JKJJKJ JKJJKJKJJKJJKJJKJJKJ JKJJKJJKJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJJKKJJKJKJ JKJKJJKJKJJKJJKJKKJ JKJJKJJKJJKJJKJKKJ JKJKJKJJKJJKJJKJ JKJKJJKJKJJKJJKJJKJ JKJJKJJKJKJ JKJJKJKJ JKJJKJ JKJKJJKJJKJJKJJKJ JKJJKJJKJ JKJJKJJKJJKJJKJKJJKJJKJKJJKJKJJKJJKJKJJKJJKJKKJJKJKJKJJKJJKJJK JKJJKJKKJKJJKJKJ JKJKJJKJKJJKJJKJJKJKJJKJKKJJKJKJJKJJKJJKJJKJJKJJKJ JKJKJJKKJJKKJJKJKKJJKJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJJKJJKJJKLMJ JKJKJ JKJJKJJKJKJKJJKJJKLLMNOJKJKJJKJJKJJKJJKJJKJKJKKLMMNOOPJJKJJKJKJJKJJKJJKKJJKJJKJJKMLMNOPPQSJJKJJKJKJJKJKKJKJJKJ JKJJKMMNOOPQQRSUJJKJJKJJKJJKJKJKJJKJJKJJKJJKJJKJKLMMNOOPQRSTTUVJJKJKJJKJJKJKJKKJKLMMNOPPQRSTUUVWWJJKJJKJ JKJKJJKJJKJJKMMOPRSTVVWXXYJJKKJJKJKJJKJKJLMMNOOQQRRSTTVVWXXYZ[KJJKJKK JKJ JKJJKLLMNOPQQRTTUVVWXYYZ[\\JJKJJKJJKJKJJKJJKLNNOOPRRSSTUVWXXYY[[\]^_JJKJJKJJKJKJKLMNNOPQRRSSUUVVXXYZ[[]]^_``KJJKJJKJKKJKLMOPRSTUVWXXYZ[[]^^_`aabJJKJJKJJKJKKJJKJLMMNOOPQRSSTUVWWXXY[[\\^^_`aabcdJ JKJKJKJJKJKKLNNOPPRRSTTUVWWXYZZ[\]^^_`aabcdee    % [  -!.     <   % %-  ! , #     . 'k9  $ #" ½  Ž Ž  JKJJKJJKJJKJK'KJJKJJKJKJJKJ(JKJJKJJ(JKJKJKJJKJKJJ'JKJKJJKJJ(KJJKJKJ J(KJKJKJJKJJ(KJJKJJKJKKJJKJ'JKJJKJJKJK'JKJKJ JKJJKJ'JKJKJKKJKJJKJJKJ'JKJKKJJKJKJKKJJKJ'JKJKJJKJKJJKJJK(JKJKJKJJKJJ'JKJ JKJKJJK'JKJJKJKJJKJKJJK'JKJKJJKJJKJJ(JKJJKJKKJKJJ(KJJKJKJKJKJJKJJKJ'JKJJKJ(JKJ JKJ'JKJJ(JKJJ(JKJJKJKJJK'JKJJKJJKJJ(JKJJKJJ(JKJJKJKJJKJJ(JKJKJJKJKJ(JKJJKJJKJJKKJJKJJ'JKJJKJJKJJ(JKJJKJKJJKJJK(KJJKJJKJJK'JKJKJKJJKKJJ(JKJJKJJ( JKJJKJJ( JKJJKJJ'JKJJKJKJJ'JKJKJJKJJKJ(JKJJKJJKJKL'JKJJKJJKJKLMN'KJJKJJKJJKLLMNOP'JKKJKJKJJKLLMNOPPQ'JKJJKJJKLMNNOPPQSS'JKJJLMOPPRSTU'JKJJKLMNOOPQQSSTUUV'JKLLMNNOPQRSTTUVVWX'JKJKLLNNOPQQRSSUUVVWYYZ'KLMNOOQRRSSTUVWWYYZZ\'LMNNPPQRSSTTUVWWYYZ[[]^'MOPPQRSSTUUWXXYZZ[\]^^_'PQQRSTTUUWXXYZ[\\]^__`'QRSSUVVXYZ[[\]^^_`abb'STTUVWWXZZ[\^^_aabbdd'UVWWXXZZ[\\^^_`aabcceef'WXXYZZ[\]]^_``bbcddefgg'XYZZ[]]^__`aabcddffghhj'Z[\]^__`aaccdefghhijkk'\^_``aacddeegghijkllm'^_`abccdefghhijkllmno'_`aabcdeffggiijklmmnopp'acdefgghijjklmmnoppqr'cdefghhiijklmnnopqqrst'defghhijjklmnoopqqrstuv'fgghjjklmmnoopqrrttuww' (( '( ('((((( ( (( (((('( ('( ( (( ( '(( ((( (( (((( ('(( (((('''((('''''(('('( @ @ @KJKJJKJJKKJJKJ JKJKJJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKJ JKJKJJKJ JKJJKJKJJKJJKJJKJKJ JKJJKJJKJKKJKJ JKJJKJJKJJKJKJJKJKJJKJKJJKJKJJKJJKJJK JKJKJJKJJKJJKKJKJKJJKJJKJKJJKJJKJJKJJKJKJ JKJJKJJKJJKJKJKJJKJKJKJJKJKJJKJJKJJKJJKJKJJKKJKJJKJKJJKJJKJJKJ JKJ JKJJKJ JKJKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJJKJKJJKKJJKJJKJJKJJKJJKJKJKKJJKJJKJJKJ JKJKJKKJKKJJKJJKJKKJKJJKJJKJJKJJKJKLKJKKJKKJJKJJKJKJJKJJKJKJJKJKKLMNJJKJJKJJKJJKJKJJKJ JKJJKJJKJJKJKMMNNPKJJKJJKJJKJ JKJKJ JKJJKJKLLNOOPQQJJKJKJKJKJJKJKJKJJKJJKJKJJKJJKJJKKMMNOPPQRSKJKJJKJJKJJKJJKJJKJKJKJJKJKKJJKJKJJKJKJKJKKLMNNOPQRRSTUJJKJJKJKJJKJJKJJKJKKJJKJJKJJKJJKJKLLMNOPPQRSSTTVVJJKJKKJKJKJ JKJJKJJK JLMMNOOPQRRTUUVWWXKJJKJJKKJJKJKJKJJKJKJJKJJKJJKJJKLLNNOPQQRSSTVVWWYYZJKJJKJJKJKJKJJKJJKJJKJJKJJKJJKKLLMNPPQSSTVVWWYYZZ\JJKJJKJJKJKJJKJJKJJKJJKLMNOPPQSSTUUVWWXZZ[[]^JJKJJKJJKJKJJKKJJKJJKJJKLLMNOOQQSUVWXYY[[\\]^_KJJKJJKJJKJKJJKJJKLMMNOPQQRSSTUVVWXYZZ[\]]^_``KJJKJ JKJKJKJJKLNOQRRTVWXXZZ[\\]]^_a`bcJJKJJKJJKLMOOPQQRSTUUVWXYYZ[[]]^^``abccdKJJKJKJKKJJKJJKJJKKMNOPQRSSTUUVXXYYZ[[]]^_`aabcceefKJJKJJKJJKJ JKLNOPQRSTTUVVWYYZ[[\]]^_`aabcddefghKJJKJJKLMMNOPPQRSSTVVWXXYZZ[\]]__`aacceffgghjJKKJJKJJKJJLMNOOPQRRSTTVVWWXYZ[\\^^_`abccdefghhijkkJJKJKKJJKJKJLMNNPPQQSSTUUVWXYZ[[\]^__`aabcdeefgghijjklmJKJ JKLLMNOOPQRRTTUVWXXYYZ[\\]__``abcceffghhijjlmmnoKJ JKLMNOOPPQRRTTUVWXXYZZ[\]^__`aaccddefggiijkllmnnopJJKJJKJKLMNOOPQQSSTUVVXYYZ[\\]^__`abcddeffghijjklmmnopqqrJJKJKLMMNPPQQRSTUVVWXYZZ[[]]^^_`abcddeegghijkkllnnooqqrstJKJKJJKLMNOOQQRSSTUVVXXZ[\\]^^`aabcddefghhijkklmnoopqrrsttuJJKLMMNOPQQRRTTUVVXXZ[\\]]__`abbcddffghhijklmmnnopqqsstuvwwJJKMNNOPPQRSTUVVWXXYZ[[\]]__`abbcdeffghiijkllmnopqqrsstuuwwxyJJKLMMNOPQQSSTUUVWXYZZ[[]]^__aacefghhijjklmmoopqrsstuvwwyyz{KLMNOOPQQRSTUVVXXYZZ\\]^_``bbceefghhijkklmnnopqqrsstuvwxxzz{|}MOOPPQRSTTUVVXXYZ[[\]^^_`aabcddefghiijjklmmoopqqrttuvvwwyyz{|}~~OPPQRSTUUVVWXYZZ[\]^_``abbcdeefggiikkmnoppqrsstuvwwxyzz{|}~QRRSTUVVWWYYZ[\]^^__`abbddfgghijkklmmnoopqssuvvwxxyy{{}}~RTTUUWWYZZ[\\^^__`abcddeffghijkkllnnopqqrtsuuvwwyyzz||}~TUVVXXYZ[[\\^^_`abbcdeefgghijjlmmnnopqqssttuvwxyyz{||}~UVXXYZ[[\]^__`abbcceffghiijjllmnoopqqsttvwwxyz{{|}}XYYZZ\\]^__`abbcdeffghiijkkmnnopprrstuuvvxxyzz{|}}ȅZZ[\]^^_``abbcdefgghijjklmnnopqqrstuuvwxyyz{||}~[\]]__abcddefgghijkllmnnopqrsstuvvwxxzz{|}}~~]]__``acddeefgghijjkmnnoopqrsstuuvwxyy{{|}}~ݍ__`abbcddegghhikklmmnoopqrrttuvwxyyz{||~~`abbcdeffghiijkllnnopqrrsttuvwwxyz{{|}~bbcdeffghijkklmnoopprrstuvvwxxyz{{|}~deefghhijkklnnoopqrsstuvwwxyz{{|}}~efghhijkllmnoopqrssuuvwwxyy{{||~~ghhjjllmnnopqqrsttuuvwxyzz{|}~ijjklmnnopqqssttuvwxyyz{||}~މjkmmnnopqrsttvwxyyz{|}}~~씖lmnoopqrsttuwwxyzz{|}}~nnpqqrsstuvvwxyz{{|}~pqrrsttvvwxyyzz{|}~qrstuuvwxyz{{||}~ ? #   %     '   # ½½ ýĽ$Ľ  ŽȾ Ƚɽ ʾʽ ̽ͽξJKJ JKJJKJKKLNOOPPQSSTTUVVWXZZ\]^``aabcdeefhJJKJKJKJKJJKJJKLMMOOPQQRSTUUVWXYYZ[\]^^_aabcedfgghiKJJKJKJJKJJKKJKLLMMOPPQRSSTUVVXXYY[[\\]^__`abcdeeffgiijkJKJJKJKJJKJJLMNNPQQSTUUVXXYZZ[\]]^__`bccdeeffhhijjllJJKJJKJJKJKJJKKMNOPPRRSTTUVWXXYZZ\\]^^_`abbcdefgghijjkkmmnJJKJKJJKJKLLNOOQRRSTUVVWXYYZ[[\]]__`abbcddffghhjjklmmnopJJKJJKJKJKLMNNOPQRSSTTUWWXYYZ[\]]^_`aabccdefgghiijllmmnopqqJJKJJKJKLMMNOOPQRRSUUVVWXYZ[[\]^^`_`bbccdffgghijkklmnnppqrssJJKLMMNOOPQRSTUVVWWXYZZ[\]^^_`aabcdefgghijjkllmnopqqrrsuuKJKJJKLMNOOPPQRSTUUVWXXYY[[]]^^``abbcdeegghijkklmnnoppqrrttuvvJJKLMMNPPQQRSSUUVWXYZZ[\]]^__`bbcddeffghijjklmmnopprrsstuvwxxJJKKLMNOOPQQRSTUVWWXYYZ[\\^^_`aabbdeeffhhijkllmnnopqrrsttuwwxyyzKLLMNOPPQQSTTUVVWXYZZ[\]]^_`abbcddefghhjjkllmnooqqrssutuwwxyz{{|MNOOPPRRSTTUVWWXYZ[\\]^__`aaccdeefghhijkkmmonppqrsttuvwwyyzz{|}}OPPRSSTUVWWYZZ[\]]^__`abcdeeffghiijklmmnopqqssttuvwxxyzz{|}}PQQSSTUVVWXYY[[]^^__`bbcddeffhhijjklmnnopqrrttuuwwxyyz{|}~~RSTTUVVWXYYZ\\]]__`abbcceefggiijkllmnoopqrrttuuvwwyy{{|}~~TTUVWWXYZ[\\]]__`aabddfgghijjkllmnooqqsttuvwxxyy{{||}~VWWXYZ[[\]^^``abccdeefghhjjklmmnnppqrsttuvwxxyy{||}~~WXXYZ[\]^^_``abccdeffhhiijklmmnoppqrstuuvwxxyz{{}}~XZ[[\]]^_`abbcceefggiijkklmnooppqrstuuwwyz{|}}~[[\]]__`abccdeeggijkklmnoopqrsstuvwxxyy{||}~]]^__`abbddeffghijjklmmnopqqrsttvvwwxyyz||}~~^^_aabcddeeghhiikklmnnoppqrsttvvwxyyz{||}~`aabccdeffhhijjllmnoppqqssuvwxyyz{{}~~bbcceefghhijklmmnoppqrsstuvwwxyy{{|}~~cdeefghhikklmmnoopqrsstuuvxyxz{{|}}efgghiikllmnnoopqsrsuuvwxyyz{||}}~ggiijkklmnnppqrrstuvvwxxyz{|}}~~hijjlmmnoppqrrsttvvwwyyz{||}jklmmnopqqrrtuuvwxxyzz{|}}~llnnopqrrsstvvwwxyz{{|}~mnopqrrsttvwwxyyz{||}~~opqrsstuvvwxyyzz|}}~qqsttuvwwxyzz||}}~sttuvwxxyzz{|}~~uuvwxxyzz{|}~vwxyzz{||}~xyyz{|}~~zz{|}~~||}~~⧩}~~󒓔.ѣ𴶷ǒվÔĕƗșɛ̜͞ϟҫѢҤȽɽ  ˽ ̽ ͽϽϾопhjklmmnoopqrssuuvvxxy'jkkllmnopqrrsttvvwxyyz{'klmmooppqsttuvwwyyzz||'moppqrrstuvvwxyzz{||}'opqrstuuvxxyy{{|}}'qrstuvvwxyz{{|}}~'stuvwxxyz{{}}~'tuuwwxyzz{||~~'vwxyyz{|}~'wyxz{||}~~'yz{|}}~'{|~~'}~'쁂''ꃄ'胄'ꇈ'臈'ꊋ'ꌍ'򌍎'󎏏'쏑'葒'蓔''ꘙ''蚛'뛝(꟠'蟠'衢''ꦧ'򦧨'觩'詪'諬'󶷷''겳'貳'贵'그''蹺'軼'''''''''''''''''(((''''''((('('(('''(''(''(((('('''(''''''('(('''''''((('''''(' @ @ @suuvwxxyz{{}}。uvvwxyzz||}}~wwxyz{||}~xyz{|}}~͟{{||~~|}~}~󞟟ݫ᚛赶祧纻ס“ÔŖǘəʛĠ̝עĝ͞Ϡ´ѢҵӤզרˀبګܭƈޮ߰ދᲳⴴ䵶ݜ淸縹꺻Ӛ뼼֧󷸸بϬ٪۬ݮ߯౱⳴䴶嶷縹鹺ڀ뻼콾֍Ӌٔߨݩ̀'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''(''껹'󲱱'(('('('''''((*)(''''''*((('((''(((('(((('''''''(((((('(''(''('(( @ @ @ ҉΀мǀ͒ǡʩڜĝ񯮭Ҧî~~.ȱŸ웚ݚ̭㳱֛ק״֟譬~~~}ݒ~~}||~}||zzy~~}|{zzyyxކ~}|{zzyywwv~}|{{zyxxvuut~}}|{zyxxwwvuttrߞ~}}{{zyywwvutsrqq~~}||zzyywwvuussrqqpo}|}|zzyxwvvutssrqpoom~~}|{{yyxwvuutsrrqpponmml~~|{zzyxwwuutsrqqponmmlkjj솅~~}|{{zyxxvvtssrrpponmmlkjjii˃}}|{{zyxwwvutssrqpoonnmlljjhhgg~}}|{{zyxwvvuttsrqpoonnmlkjiihgfee~}}{{zzyxwvuttrqponmmlkjihggffdcb~}}|{zzxwwvvutssrqponnmlkjjihggfeddcba~~}|{zzyxxwuutssqponmllkjjihgffedcbba`_~~}{{zzyxwvvutssrqqponnmlkkiihggeddcbaa``_^~}}|{zzyxwvuttrqpponmlkkjiiggfeddcbba`__^]\~}}|{zzxxwvuttsrqpponnmlkjjihhgfeddcbaa`_^]\\[[}}{zzyxwwvutssqpoomllkjjihggeedcbbaa`_^]][[ZYY~}}|{{yyxxvvuttsrqpponmllkkiihgfeedcbba`__^]]\[ZYXXW~~}||{zzyxwwuutssrqqponnllkjjhhgfeeccbba`_^]]\[[ZYXXWVU~~}}{{zzxxwvuutssqqponnmlljjihhgfeddcbaa`_^]]\[ZYXXVUUTS~~||{zzxxwvuutsrqqoonnmlkkjihgffeddcba``_^]\[[ZYYXWVVTTSSR~}}{{zyywvvutssrrqponmmkkjihhggeeddbba`__^]\\[ZYYXVVTSRRQP~~}|{{yyxwwuutsrrponmllkjiihgffedcbaa`__^]\[ZZYXWWVUUSSRRQPON~}|{{yxxwvvttssrpqonnmmkjiihhffedcba``_^^]\[ZZYXWVUUTSRRQPPONML蹸'跶'곲'겱'貱'谯'꭬'񭬫'ꩨ'즥'訧'覥'ꢡ'򛙙'꟞'蟞'蝜'蜚'ꘗ'암'쓒'''葐'菎~'荌~}|'ꊉ~~}}{z'芉~~}|{{zy'與~}}|{zzywx'膅~~}|{{zyxxwvu'~}}|{zyxwwvuut'胂~~}||{zyxxwvuttrr'}|{{yxxwvvutssrqq'~}|{{zyxwwvvutsrrqppn'~}|{zzyxwvvussrrqpoonm'}{{yyxxwvuttsrqpoonmllk'{zyxwvvuttsrqqponmmlkji'xwwuttsrqpponnmmkjjiih'wvuutsrrpponmllkjjihggf'utsrrqqpnnmllkjiihhgfed'tsrqpoonmmlkjjiggfeeddc'rpponmmkjjiihgfeedcbba'poonllkkjihggfedccba``_'nmlkjjihgffedccaa`__^]'mlkjiihgfeedccaa`_^]]\'kjihhgffedcba``_^^]\[ZZ'ihhgfeeccbaa`_^^]\[ZYYX'gffedccbb`__^]][[ZYYXWV'edcba`__]]\\[ZYYXWVVT'dcbba`__^]][[ZYYWWVUTSS'baa`_^]\\[ZYYXXVVUTSRRQ'a__^]\\[ZYYXWVUTTSRQQPO'_^]\\[ZYYXWWVUTSRRQPONN']\\ZZYXWVVUTTSRQQOONNLL'[ZYXXVUUTSSRQPPONMLLKJ'ZXXWVUUTSRRQPONMMLLKJJ(WVTTRQQPONNMLKKJJKJ'VUTSSRRPPOOMLLKJJKJJ(UTSRQQOONNLLKJJKJJ(RQPONNL J(QPONNMLKKJJKJK'ONNMLKKJKJKKJKJJ'MLLKJKKJJKJJKJKJJ(LKJKJKKJKJ('('('('((((''('(('(('(''''((''(''('((('''((''('('('(((((((( ((((( @ @ @ﭬ~}|~~}}{{~}}|{{zy~}|{zyxxw˘~}||{zyxxwvu㍌~}}|{{zyxxvvus~~||{zyyxwwuvtssrڅ~~||{{yyxxvuutsrrqp~~}{{zyxxwvvutsrrqpoo~}}{{zyyxwvuttsrqqpponm~~}|{{zyxxwuuttrrqppnonmkk~}}||zzyxwwuutsrrqppnmmlkkjj~~}|{zyyxwvvutsrrqponnmlkkjihgɌ~~}|{{zyyxwvuussrqqpoonllkkiihggfߏ}}||zzyywvvussrqqponnlkkjjihgffed̂~}}|{zyyxwvvuttrrqpponmmkkjihhgfeeddb~}}|{zzyxwvuuttrrqponnmlkkjiihgfeddcbaa}}|{{zzxxwwuttsrrqppommkjjihggfedccba``_~~}|{{zyxwwvutssrrqponnmlkkjihhgeedcbba`__^]~}|{{zyxxwvutsrrqpoonnllkjiihgffedcbba``^^]\\~}}|{{yyxwwvuttsrqpoonnllkjiihggfedcbaa__^\\[[Y~~}}{{zzyxwvvutsrrqponnmlkkjihgffeedcbaa`_^]][[ZYYX~~}||zzyyxwvvttsrrpoonnmlkkiihggfeddcba``^^]]\[ZYXXWV~~}||{zyxwwvuttsrqpponmmlkjjihggeedcbba``^]]\\[ZYYXWVUT~}||{zzyxwwvuttrrqqpnnmllkjihhggfedccaa`__^]\\ZZYYWWVUUTS~}||{zzyxwvuttsqqponnmlljjihhgfedccbb``_^]\\[[ZYXWWUUSRQ~}||{zzxxwvvttssqqponmmlljjihgffeddcbaa`_^]\[[ZYXXWWVUTSSRQPO~~}|{{zyxwwvvttrrqpponnmlkjiihggeeddbaa`_^]^\\[ZZYXWWVTSSRQQPONN||{{zyxwvvutssrqpponnmlkjiihgffedcbba`_^^]]\ZZYXXWVUTTSRQPPONNML{zzyxwvvutsrrqpoonmmlkjiihgffedcbb``_^]\\[YYXWWVUUSSRQQOONNMKKJzyxwwvutssqpponmmkkiihhgfeedcba``_^]][[ZYYXWVUTTRQQPNNMLLKKJJwvvuttsrrppoonmlkjjihggfeddbaa`__^^][ZZYXWVUUTTSRQPOOMLLKJJKvuussrqpoonmmlkjihhgffddcbba`__^]\\[ZYYXVVUUSSRRPPONNMLKJJtssrqpoommlljjhgffddccaa`__^\\[ZZYYWWVUTSSRQPPONNLKKJJKJKJrrpponnmmkkiihggfeedcbb``_^^\\[ZYXXWVVUTSRQQPOONMLLKJJKJqponnlljiihgffedcbbaa`^^\[ZZYXWVVTTSRRQPPNMMLKKJKJJKJJKJonnllkjjhhggfedccba`__]]\\[ZYYXVVUUSRRQQPONNMLLKJJKJKnllkjjhhgffedcbb``__^]\[ZZYXXWVUTSSRQPPONNLLKJJKJ Jkjjiihgfedccb``_^]]\[ZZYXWVVUUSSQQPOONMMKKJKJKJJKJKJJjihhffeedbba``_^]\[[YXXWWVUTSRQPPOMMLKKJKJKJJKJJKJhgfeddccba`__^]][[ZYXXWWVUTSSQQPONNMLKKJKJ JKJJgfddcbba``_^]\\[ZYXXWVUUTSRQPOONNLLJKJJKJKJJKJeccbaa``_^]\\[YYXWWUUSRQQPPONNLLKKJJKJKJJKJ Jcba`__^]][[ZZXXWVVTTRQPONMMLKKJKKJJKJJKJ JKJJa`_^]\\[[YXXWVUTSSRQQPOONMLLKJKJJKJJKJKJJKJKJJ`_^]]\ZZYXXVWUUTSRRQPONNLLKKJ JKJJKJKJ JKJKJJ^]\[ZZYYXWUUTSRRQQPONMMLKKJJKJJKJJKKJJKJJK\[ZZYXWVVUTSSRQPPONMLKJJKJJKJJKJJKJJKKJKJJKJKJJZYWWVVUTSRRPQPOMMLKJJKJJKJJKJKJ JXWVVTTSRQQPOOMMLKKJJKJKJJKJJKJKJKJJKJJKJJKJKJVVUTSSRQPPONNLLKJJKJKJJKKJJKJKJJKJJKJ JUTSRRQQPONMMLKJJKJJKJJKJJKJJKJKKJKJJKSRQQPOONMLKKJJKKJKJJKJKJJKJJKJJKJQQPONNMLKJKJKJJKJKJ JKJJKJKJKJKJJKJPOONMLKJJKJJKJKJJKJJKJ JKJKJJKJNMLLKJJKJ JKJJKJJKJJK JKJJKJKJJKJJ          $#)+    |zzyxxwwvussrqqponmmlkkjihhgfedccbb``_^^]\[ZZYXWVVUTSRQQPOOMMLKJzyxxwvuttsrqqpoomllkkjhhgffedcbba`__^]\[ZZYXXWVUTSSRQPPONNLLJKxwwvutssrqpponmmlkjiihgfeedccba``^^]\\[ZYXWWVVTTSRQQPONNLKLJJKJJwvuttrrqpponmmkkjiihgfedcca`_^]]\[ZZYXXWUUTTSRQPPONMMKKJJussrrqppommlljjihggfeddcbba`^^]\[[YYXWVUUTSRRQPOONMLKKJJKJJsrqqpoonmlkjiihgffedccbaa__^]]\[ZYXXWVUUTSRQQPOONLLKKJ Jqonmmlkjjhhgffedccaa``_^]\[ZZYYWWVUTSSRRPPONMMLKKJKJponmlkkjjhgffdccbaa``^^]\[[ZYXXWVUTSRRQQPONMLLKJJKKJJKJJKJJmlkjiigffeedcba``_^^]\[[YYXWWVUTSRRQPPOMMKJKlkjihhgffedccbba_^^]]\[ZYYXWVUUTSRQQPPONMLKKJKJJKJKJJKjiihggeedccba`__^]\[ZZYXXWVUUSSRQQPONMMLKKJJK JKJJKJhggffecdcba`__]\\[ZZYXXWVUTTRRQPPOOMLKKJJKJJKJJKJgfeddcbaa`__]\\[ZZYXXWVUTSRQRPOONMMLKJJKJKJJKJJKeddcbaa_^^\[ZYYWXVVUTSSRQPONNMLKKJJKJcba``_^]]\[ZYYXWVUTTSRQQPONNLLKKJKJ JKJJKJKJJa_^^]\\[ZYXXWVUTTSRRPPOOMLLKKJJKJJKJKJJKJJKJJK`_^]]\[ZZYXXVVUTTSRQPPNNMLKJJKJJKJKJ JKJJ^]\\[ZZXXWVVUTSSQQPOONNLLKJ JKJJKJJKJJKJJKJ\[ZZYXWVVUTSSQQPOOMMLKKJJKJKJJKJJKJKZYXWWVUTTSSRQPONMLLKKJKJ JKJ JKJYXWWVUTSRRQPOONMMLKKJJKJJKJJKJJKJJKJJKJJKJJKJKJKJJWVVUTSSRQQONNMLLJJKJJKJJKJKKJKJJKJVTTRQQPOONMLLKJJKJJKJJKJ JKJ JKJJTSRQPPONNLLKJJK JKJJKJJKJJKJJKJJKJRQQPNNMMLKKJKJ JKJKJJKJJKJKJJKJJKJJQPNNLKJKJKJKKJKJ JKJJKJJNMMLKKJKJKKJJKJKJJKJKJJKJJKJJKJJKJJKJKJJMLLKJJKJKJ JK JKJKKJJKJJKJJKJJKJJK JKJJKJKJKJ JKJJKJJKKJKJ JKJJKJJKJJKJJKJJKJKJJKJKJJKJ JKJJKJKJJKJJKKJJKJKJKJJKJJKJJKJJKJKJJKJKJKJJKJ JKJJKJJKJJKJKJJKJJKKJJKJJKJKJKJJKJKJ JKJJKJJKJJKJJKJJKJKJKKJJKJJKJJKJJKJJKJJKJJKJKKJ JKJJKJ JKJJKJKKJJKJJKJJKJKJKJKKJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJKJKJJKJKJJKJJKJJKJKJJKJJKJJKJJKJJKJJKJ JKJJKKJKJJKJJKJJKJJKJKJJKKJKJKKJJKKJJKJ JKJJKJKJJKJ JKJJKJJKJKJ JKJJKJJKJJKJJKJKJJKJJKJKJJKJJKJKJJKJJKJJKJKJJKJKJJKJJKJKJKJJKJKJKJKJJKJJKJJKJKJJKJKJKJKJJKJ JKJKKJJKJJKJKJJKJJKJJKJJKKJKJJKJJKJJKJJKJJKJJKJJKJJKJJKKJKJJKJK JKJJKJJKJJKJJKJJKJJKJ JKJKJJKJJKJKJKK JKJJKJKJKJ JKJKJJKJJKJJKJJKJKJKKJJKJJKJJKJJKJJKJJKJJKJJKJ JKJJKJJKJKJJKJJKJKJJKJJKJJKJKJKJKJKJKJJKJJKJJKJJKJJKKJJKJ JKJJKJJKJJKKJJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJJKJ JKJJKJJKJJKJKJ JKJJKJJKKJKJJKJJKJJKJKJJKJJKJJKJJKJKJJKJ JKJJKKJJKJKJKJJKKJJKJJKJKJKJJ    &0%  %  3           %  $ *.  i%JKJJKKJJKJJK'JKJ JKJJ(JKJJKJKJJKJKJJKJJ(JKJJKJ(JKJJKJJKJJKJKJJ(JKJJKJJKJJK'JKJKJJKJKJJ(KJJKJJKJJKJJ(KJKJKJJK'KJKJJKJKJJKJJ(KJJKJJKJJKJJKJJK'JKJKJKJKJJKJKKJ(JKJJKJJKJJ(JKJJKJ J(KJKKJJK JK'JKJKJJKJJ(KJJKJJKJJKJJ(JKKJJKKJKJJKJKJJ(KJJKJJKJKJKJJKJJ(JKJJKJJKJJ(JKJJKJJKJJ(KJJKKJJKJJKJKJ'JKJKJJKJJKJKKJ'JKJKJKKJKJJKJJ(JKJKJJKJJKJKJJK'JKJJKJJKJJKJKKJ'JKJKJKKJ'KJJKJJKJKJKJJKJJ(JKJKJJKJKKJK'JKJJKJJKJJ'JKKJJKJKJJKJJKJKJ'JKJJKJJKJJ(JKJKJJKJJ( JKJJKJJK'JKKJKJKJJKJK(JKJJKJJKJKKJJKJJ'KJJKJKJJKJJ(JKJJKJJKJKJK'JKJKKJKKJJKJ(JKJJKJJKJ( JKJJKJJ(JKJJKJKKJKJJKJJ(JKJJKJJKJJKJJKJJ(KJKJJKJJKJJKJ'KJK JKJ'JKJJKJJKJJ(JKJJKJJ(KJJKJJKJJKJKJJ(JKJJKJJKJJ( JKJKJJKJJ(JKJKKJKJJKJJK'JKJKJ J(KJJKKJKJJKJKJJ(JKJKJJKJJKJJKJJ(JKJKKJKJJKJJ(JKJJKJKKJJKJJKJJ'((((( ((( ('((('( (('' ( (('('(( ( ((( ((((((( ((((((( (' ( (( ((((' (   {N='BOSSA-1.9.1/install/dmgwin.osa000066400000000000000000000020411333742133700160330ustar00rootroot00000000000000tell application "Finder" tell disk "BOSSA" open set current view of container window to icon view set toolbar visible of container window to false set statusbar visible of container window to false set the bounds of container window to {400, 100, 893, 432} set theViewOptions to the icon view options of container window set arrangement of theViewOptions to not arranged set icon size of theViewOptions to 64 set text size of theViewOptions to 16 set background picture of theViewOptions to file ".background:background.png" set position of item "BOSSA" of container window to {220, 40} set position of item "bossac" of container window to {220, 150} set position of item "bossash" of container window to {220, 250} set position of item "Applications" of container window to {420, 40} set position of item "bin" of container window to {420, 200} update without registering applications delay 2 end tell end tell BOSSA-1.9.1/install/license.rtf000066400000000000000000000034141333742133700162060ustar00rootroot00000000000000{\rtf1\ansi\ansicpg1252\deff0\deflang1033\deflangfe1033{\fonttbl{\f0\fmodern\fprq1\fcharset0 Lucida Console;}{\f1\fswiss\fprq2\fcharset0 Arial;}} {\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\nowidctlpar\f0\fs18 BOSSA - Flash Programmer for Atmel SAM Devices\par Copyright (c) 2011-2017, ShumaTech\par All rights reserved.\par \par Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\par * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\par * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\par * Neither the name of the nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.\par \par THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\f1\fs20\par } BOSSA-1.9.1/res/000077500000000000000000000000001333742133700131705ustar00rootroot00000000000000BOSSA-1.9.1/res/BossaIcon.bmp000066400000000000000000000100661333742133700155530ustar00rootroot00000000000000BM66(    BBB;;;,,,LLL#[[[왙lll???xxxHHH27___/// GGGڦ444\&&&3(666MbbbVVVqjjj---1EEE333>EEEע000444keeePPPd[[[ZZZ4???ッ444GGGbbbNNN777<<<:::VVVyyy////DAAAqCCC❝;;;aaaEEE///dddVVVbbb)))ZEEE aOOO}}}UUU222GGG󐐐SSSqqqTUTGGGEEETTTrrrQQQ%%%aaappp+++wwwuuu[[[vvv:::fffzzz~~RQRJJJBBBCCCKKKDDDZZZ222555ꅅRRR###oooooommmhPMjIFfD@[<9=55111>>>MMMHHHTTTmmm>>>!nnnHHHnnnW;W9U8R8N7L7H6@3-(%$$@@@AAArrrvvv<<@A@_=b;]:X8GWWWO@@S0I=:][[qa^XXXOOOf;f;c;9%k E@@}>}?v=cI@OON^Kn=i;e:~'????AAM.@52x>|?]8t>r>n=3 > @CAW/<<7HGFG@E<% z?݋;?̍9Ȼ}4רf,]9- `E# *+' BOSSA-1.9.1/res/BossaIcon.icns000066400000000000000000001400511333742133700157270ustar00rootroot00000000000000icns)is32%N6, LK&#N؀VF"Ts\?%)N\e5EG4@c<7K+|TRM?9.mծtV8.'jv{j`BXfzy-UupT=u^6h==[Y=VېGV >ȩDѽsP2mT],SŮ?r^ݗKd=e‚aoPDķZxL+&*lկtf_SG gx{jU:Nl{y-UuoYAz]6h=D)&'$*)KAG7/N9 *%'&/OCK4*DF141L@J+'GA> 0L@I$!D@@a,J@HDA< O4F@G'=C.^4DADab:D=- H>D<8L@<2>B6.@A@><=52<:@-&ViA@=+8?=VL:t}P(U|>B3CAH9*71 po[=B/@GB?HH423/;P@>09DDCS<88:/(9&~TB=/4GDPB5'+<%.)/SzּD;+=KFA93#/8+@Is#dőD9,;A77256;$$@N]mqߡ}D7=98;5394*L\#_~ɯ{U<2231/.%2J?aѽ:ӖlSI60&",BB|H]ˇL_ljkqȲg`JH?7Is#dƑuhmU~)=O]mqߠc-K]#`~ɱxt 6I?aѽ:|ӖlSs8-0'! *G@|H]ˇLljkqȲgdLH@=FHH?s^vLĽyU˥9kmpbGBD7Fh9vQsMgOI±@}|b\JAq|7In  -  a{ q^x+ dD\8 _ɱ,^E JBr/  [&it'/r;nF9 S(uSb صP &t4KYXw2f?r~Vit32l>?ACDEGFEC@>:83'GIHGFFC=5'FIHGHG FGGFGFE?6 DIHIHGFD;(CIHGHGFGFED:"@HGGHG FGGFFC.?HGHHGFE;CEDEDA(>GHHGHGFGF7@EDA&=HGFGFEFE0=DCDCDCA?;GFGFEF)  3U?;GFE"9DC 4 ?U ?9GGFGFGFEEFEE6CDC A $U?9GFEFE4CDCBCBBC53U?7GFEFEEFEC1CDCBCB ? $?U$7FEDDED@/CBBCB A$ 3UU$6FEDD=,CBCB A0 $UU$5FEFED9 &CBCBCBABA8?U U$3FEFFEFEDED4CCBA < 3UU$2EFEFEDEDDC-ACBABBAA> $UU$0FEDEDCDC'>BBABA @ $UU*-EDEEDED  ?U3>DCBC70A@?3?U3=DCCDCBB1!A@??@ $UU?;DCBCBBC+m @@A@??; $UU?:CBCB$-pA@??@?@??:' $?UU?:CB Tcq{y??@@?> :  3UU?9CBCCBCB %EUdqzA?@?>??>>2  3U?8CB AA .9GVesz}B@?>?>?> 9 *UU?7BBCBAABAB?'/:GWfqp?@?@@?>?>=>>=><$ *UU?6CBCCBABAA<'/:HWeU=@@?7;>=>=>=>=<% *UU?6BABAABA9'0;HO>?@?>5*);>==>= <=>>= 9 *UU$4BBABBA5/9?@?@? 9:4-)'&0>>=<= <7 3UU$3BBABA@A@A@? >:<=61-,,-.8=< / 3UU$$AABA@A@?@@?@??<>;97667:>BFIKJ=<;;< ;;( 3U oAA@A@@A@@?@@;5/,.37998 9<>CGKPSSRM9=<;;<; 7 $U  "@@A@>!$(-1589;<:NWZ\\YV><;<; :5 $U  -?@A@?@@??8"'-3:?DGKNL:= @@?@? >3"'/8BKRY]_J= <9OQPQSUUO;::;:;;: 96?U >@?@?0$*4>IS[bea:=<=:IMKJKORSQ;:;;:9::9:  *U7=?>>-%,7BOYbgk?=<=?@@?+&.9FR^fk\;==<?CIMPI;::;:9 ,"  Y @?>?>('0;HU`hk;=<=9OHA<;>BGLPD;:4*#&29::9981 %0 %B??>"%(0=JWaiR==<;JKB<9;>DIMQ=::;4*!29895"&)"gD?> ==#(1>KXag9< ?OF>;:??>=>:"(2?LXbD<=<9SIA<:;?DJNRR6:2*##987#(+./+H>>=>==9")3?LX]:<<9NMD?;=>=7#)4@MYB< @QHA=<>BGLPRS;:93)$""#2889876"'+-/0/10 O>=4#*4AMV9;;9TLE?<>AFKOSTS792+'*298 75!&*-/015  4S>>=<=0$+5AM@<<:HPHB>=@EJORTS@99::98 73!&*-/016 #W=>=<<.#+5AL9<<9TLE@>@CIMQSUR698 78770!&*-/013#?[>=<+$,6B=<<:OPHB@?BGMPRTT;989989887 )!&*-/01: 9`=&<=<<($,6A7;;=<&%-7<;<9OOHC@ADINQSTO6944.&!-87 "'+-/001;, `螟i=<#%-77; PKEBACGKOSTQ69591+% 17 2"'+./0013Re3 \Ǐo==<; %-6:;9LMHDBBEJOQTQ69 55.(#!(78766&#(,..001A_bb3 !]룜=v<<==<;<<8 %-4;;:NJFCBEHMPSN69899830*&#""!'7675$(,./001 5Va`ce4"^͑|<#;;7!&.6:7HKIECDGKOQG69989980+'%#$%&+76,  %),/00/1 Fa_adff5 #^񫛮<;<;5!&.8AHKJHFEGIMP=889983'$#%'()2776765"&)-/018Y_^adegh7!$_1ד;<<;<;<;2!&.8AHJJIGGIKF6898,!!%'*/776(#(+./001K`\_cdfgij8" $`р9<;<;/!'/9BHKLJ8F88986:<64878871)(,26677662 %),-//;[]\`caehhkl8" &`mHޗ~:<<;<;-"'0:CIMNLD789985GD?;4388764"'+-/1O]Z]abXKSelmn:$" '_SJLB_À}8<;:;*"(09CIH;78998898A>940.87676 5# %),.>\YZ^a\MGILRcpq<$# '"OʂOP{jB@⚟{:;:;($*0456::99898988:741.+76776776!5##&*0P[WZ_`TDC[qORal7&$!%>WS^O:R{;:9 88988230.-,-76763"!%)=XTV[_YG>Dz~XVT6$']Ziq;8蟗z;;:;;:99:989 8873+)**,277650 $-MTRW]\N<;[aZZYg˜ТN2Lˋ~y<;;:98998782*),2676#55)#:QNRW]U@7=ʾjX&V[ܭz41r쥏|y>;:;:988987887676%/)GKKRXXG34]ƽ`P"TYպQ,_ˉ~|x@: 9:9:98998898788667676&08HFKQV^C1BƽYD$RXʹ57䥆~{wL89:98987887 6767663,!(BDELRW[Q31ƾX8)MYʽߥk94Zȇ}zvqiYC84589899876752,%"7C@GMSTVU/-5OƲX*>FXr̿ďoE47X[HOڦ~~{yvpiaUI<3*'(,-0244566765421-*&!#*A?AINSQIKK2/5=JxţzXE/X_e>4;OQMZJCkzxupjbXMB91,(%"! #!;@>DJOQJCHPMM=36=KafTAUYµp;6=STRuY?Hϣwtpkd\RIA:50-*(&%#! %0C>@GLPLB@MmQRG87=PiYJ8RXöm;742/-+)'&$#"!  !#(BB>DJONE<>k|YWR>;96420.,+*)('&%&%$:H?AGMPI;8KĻd\G;QoW1;KXƹn<:8674421<;:8FVHDHLNMMU<(3:PηaN7=SwӺy]_Jpdduõo>3EXķǑtH535KUJH]bWUSQPNLJHEDB@?=;>UPDFJLMIGKP<+36?MzӫY?/?Tyƽ՟hdLpadĸo>38XŸiA744FPNeWDHixTRPNLKIGEDB?>048>MeY1.@TycHp\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMKHFDCA>CXLBFILLEACkuTUM=8:BWxY!0@U{Ϟtc;pZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMLJGFDB@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2p8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHGECIYIADHJH@:-1N³cM8E^`[S2.JOTTP%b =P8 $ab_Ǹ~M7 OXķ؟rE3/Raemƺ~M8GXƹoD5307`cbdTEIKL-*36=LlX6 ;F^»١he4'VZctȽ~N8 :YǺd<792/6_cbdUGJMK*',79C>:XcbbdUILOO6.=C>;E_wY=G_ѫh`TKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQSKBE;&:F_hS >D[{ü|kc^ Q=W`aq~XA%W^̿R:0CCJ[cdWMQOGDD+;F`\K8BPfxtc`X%O E_\f{uUD@ TXS90LPST2 G> KdbcɺT;6=IcƉ_aO!GI`elȼU;6=Idgd" YcjʿU<6>Jdګi\McexµR=7?JcϿxeY#^dcruD:1?E]xtddLKa^h{zUA(:BPev|i^aA 1V\_rqPD= /BEPdvt`[V' HZXg~eLG4 #=HNbuwgXZE5TT]\MH% 5KN]\UT-!ISP@(HPSF;7A7vjNoMo= |NzA,_j &n8 0Kt I e9 ?U{ 3U?}Dtf ?U?z1m* $U?vff3U?s`  $?U$oXA 3UU$l P Z $UU$hvDn?UU$di+y 3UU$`Z} $UU$[L $UU*R< {|? U*A) tu?U*  mf?UU* hQ ?UU3 b4?UU3y ]~z?U3k V~~]?U3_ ;~}|* $UU?~Rm~}}{q $UU?zC-pA~}|{zzoB $?U6U?v0 Tcqz{~~~}|{{zyxxj5 3U6U?r%EUdq{k~}}|{{yxxwvuuW 3U&?o.9GVer{~k~}}{zzyywwu sse- *UU"?l'/:HWfqtn~~}{{zyywuutsrrql9 *UU9?hx'/:HWffw}}||{zy`pvvutssrqpook; *UU:?em(0;HWg~}|{zyxR*3ottssqqpponmi3 *U;Ubb'0Ba|~}|{{zypF0)$6rsrqqponnmlkd" *U-U$_]Gi~~}||{zy`?3-)'&Grqqoonmmkj \  3U<U$]~}}|{zymM=61-+,-.^poommlljiihgJ 3U U$?0~}}|{{zoSB<72001367>nnmmlkjiihggd. $?U= #~~||{ziPD?:742369 ,~~|{nWC>><97667:>BFJKJIlkkihhggeedcb; 3U o~s_K6.479$889;?CFKORSRMbjiihgfeddcbbZ  $UC "~~}y!$(-2589:IS[bedfmmlfQMJJLORSQdbba`__^^\[[ZYY"  *U7q~}||{y4xwE%,7COZbhj[mlkjQLGDDGKOQPbba`_^^]\[ZZYXW1 $UHn}|{zyxxwvv=&.9FS]fkdklljTMF@>?CIMONa`__^^]\ZZYXXWV="  YHl|{zyywwvvu4'0;HU`hk]kkj\OG@<;>CHLPL`__^O6,1KYXXVVUE %0 T%jzzyxxvvutt,(1=JWai_kkjfQKB<:;>DIMPL_^]M*!JWWUTTJ"&*"Wgizxxwvuutsr%(2=KXagajjiRNF>::<@FLOPM^]\>*"0VUTSSN %(,8 [+gyxvuutssrl"(2>LXbYjiiZSIA<:<@DJOQQS]\[9*#+UTTSRO#(+./+Qhwwuutssqpd")3?MX_dihbSMD?;;>DIMQRN\\[Z<*$ 3TSRQQN"'+./09/Whvvutsrqqo]")4@MXVihgRQHA=<>BGMPRSK[[YXJ)$""#GRRQPPL"'+-/0010 it8srqpooU#*4AMW`gf\TLE?<=AFKPRTSSZZYXWI5/4GSRPPONI!&*-/015 4itr pponnM$*5ANRgfeRPHB>=@EIORTTJZYYWVTSSRRPPONME!&*-/01006 #3ksrqpponmmE$+5AL^ffTTLD@>@CIMQSTSRYWUUTSRQQPOOMML?!&*-/013#?lrqo%nmll=$,6AMfe`RPHB@?BGMPSTTKYXVVUTTSRQPO MLKK5!&*-/01011: 9Mnqoonmmlkj6$,6BZedQRKEA@AEJORTTMVWVVL=57GQPPNNMLLJJ*!&*-/01( 8Qponnmllkji/%-7Ded]ROHCABDINQSTQPWVVD6.'!;ONMMLKKJH"'+-/001;, `螟Vsnmmlkkiih(%-7PcbOPJFBACGLPSTQNWVUJ92+% DMLLKJIHA"'+..0013Re3 \ǏQvmllkjiihe!%-8_b\OMHDBBEJNRSRLVUUT?5.(#!1LLKJIHG/#(,./001A_bb3!]룝9zlkjjihhg_ %-EaaLNJFCCEHMQRQMVUUTS:0*&#"-KJJIHGE$(,./001 5Ua`ce4"^͐P~kjihggfeZ!&.U]XJLHECDFKOQMQVUUSRQ:+'%$$%&3JIHGGF6  %),/01 Fa_adff5 #^U񫜮hiiggeedR!&.8@HKKHFEFIMPITUUTSRRQD'$#%'()@IHGFFD"&*-/018Y_^adegh7!$_CדfggffedcK!&.8AHKJHGGIKKMVUUTSRQQON8!"$(*8HGFE1#(+./0/1K`\_cdfgij8" $`р~bgfeec F!'/8BHKLKJJIHUJEB@GPONML@0-3?HGGE= %),./0;[]\`caehhkl8" &`mHbޘ}^feddbba>"'0:CILNLIISVUTJGD@:5DNNMLKJJHHGFEED@"'+-.0O]Z]abXKSelmn:$" '_SJLB_À;|[ddcbb``8"(09CJKINVWUTTSCB>:406MLLJJIIGF"EDB& %),.>\YZ^a\MGILRcpq<$# '"OʂOP{jB@_⚞{Zccba``_2'/:DJRXWWVUUTSR>:740-0LKJJHHGFEDDCB'#'*0P[WZ_`TDC[qORal7&$!%>WS^O:R>Ž{Xbba`_^^]\[[ZYXWWVUTSSQQ<30.--4KJIHGGFFDDC?%!%)=XTV[_YG>Dz~XVT6$']Ziq;8)螗{Wa`__^]\\[ZZYXWVUUTSRRQPD+*+?JIHGFFDB; $,MTRW]\N<;[aZZYg˜ТN2LWˋ~yV`__^]\[ZZYYWVVUTSSRRQPOOB1.2?IIHGFEEDCA0#:QNRW]U@7=ʾjXnV[ܭz41r쥏~}yU_^]]\[[ZXXWVVUTTSRQPPOMMLKKJIHGGFEECB9)GKKRXXG34]ƽ`PlTYպQ,_ˉ{xU^]\[ZZYYXWVUUTSRQQOONNLKKJJHHGGFEDC:!8HFKQV^C1BƽYDGRXʹ57䥇~{wYU[\ZYYXWVVUUSSRQPONNMLLKJIIHGFED@5 !(BDELRW[Q31ƾX8FMYʽߥk94Zȇ|zwpi[LGJPVVUTTSSQPPONMMLLKJIHGGD=5("7C@GMSTVU/-5OƲX*0FXr̿ďoE47X[HOڦ~{zupi`UH=3*,18<@DHJ LKKHFB?:4,%**A?AINSQIKK2/5=JxţzXD/X_e>4;OQMZJCkzxtpibYMB91,(%#! #!;@>DJOQJCHPMM=36=KafT6UYµp;6=STRuY?Hϣwtokd\RIA:50,*(&$#! %0C>@GLPLB@MmQRG87=PiYJ8RXöm;742/-+)'&$#"!  #(BB>DJONE<>k|YWR>;96420.,+*)('&%%$:H?AGMPI;8KĻd\G;QoW1=KXƹn<:8756OPDFIMORO9/BĸuS==SvmXO.ocb`^n=5N`µsE27Zes}[YWTSQOMKIHFDA@?<;:8FVHDHLNMMU<(3:PηaN7=SwӺy]_Jpdduõo>3EXķǑtH535KUJH]bVUSQONLJIEDB@>=<>UPDFJLMIGKP<+36?MzӫY?/?Tyƽ՟hdLpadĸo>38XŸiA744FPNeWDHixTQPOMKIGFCB@>048>MeY1.@TycHp\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNLJHFDBA?CXLBFILLEACkuTUM=8:BWxY!0@U{Ϟtc;pZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKIHFDC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2p8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZIGECIYIADHJH@:-1N³cM8E^`[S2.JOTTP%b =P8 $ab_Ǹ~M7 OXķ؟rE3/Raemƺ~M8GXƹoD5307`cbdTEIKL-*36=LlX6 ;F^»١he4'VZctȽ~N8 :YǺd<792/6_cbdUGJMK*',79C>:XcbbdUILOO6.=C>;E_wY=G_ѫh`TKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQSKBE;&:F_hS >D[{ü|kc^ Q=W`aq~XA%W^̿R:0CCJ[cdWMQOGDD+;F`\K8BPfxtc`X%O E_\f{uUD@ TXS90LPST2 G> KdbcɺT;6=IcƉ_aO!GI`elȼU;6=Idgd" YcjʿU<6>Jdګi\McexµR=7?JcϿxeY#^dcruD:1?E]xtddLKa^h{zUA(:BPev|i^aA 1V\_rqPD= /BEPdvt`[V' HZXg~eLG4 #=HNbuwgXZE5TT]\MH% 5KN]\UT-!ISP@(HPSF;7A7Ϣ֢؄\$P~gԃ? 1 3U?  ?U?iو b $U?ލ>҉ 3U?܌ ̉  $?U$،  3UU$֌  $UU$Ҍ߀ ?UU$̌π`  3UU$ƌ  $UU$  $UU* ?U*^ ?U*2 ?UU*  ?UU3 ݉?UU3 ׈?U3ـ̈؁?U3Ɇn $UU?m4  $UU?-qA  $?UU? q Tdq{  3UU? D$EUdqzތ 2 3U? .9GVer{ێ z *UU? '/9GVfq  *UU?'/:HWe  *UU?܉(0;Itۅ+b  *UUډ'0h0($s c *UU$׉ɕU3-)'&  3UU$Ԕ <61-+,-/  3UU$ E<72002357k  $?U PH?:743369=@BA؉  *U Om>><97667:>BFIKJ  3U o֨\.47998 9;?CFKORSQO  $U "!$(-1579:<>AyLORVXXWSӊ 3U !%*.38<>BEGoXZ[\YV  $U  - "'-39?DHKNbZZ\ZW b3U   %+2:BINRUYׁ߀WXXVk  $U 0 "'/8BKRY]`aQPRSUU] ?U  $*4>IS[aeq yMKJKNRSU J  *U7 %-7BOZbgjЀ LGDDGKOQ`  $U &.9FR^fk ME@>@CHMPl "  Y l'0;HV`hl TG@<;>BGMPm  %0 %N(0=JWbh yKB<::>DIMQ*" "&)"g܇/(1>KXaj NF>;:DIMQQg*# "'+.//9/͆"*4@LY QHA=<>BGLPRS)$""#߂"'+-/0010 dž#*4AM^WLE?<>AFKORSSߎq߃ !&)-/015 4†#*5AMPHA>=@DIORTT !&)-/016 ##+5APTLE@=@CHNQSTW !&*-/013#?$,6BnPHB@?BGLPSTT !&)-/01: 9$,6ARLEA?BFJORTT꧈ !&*-/0/0101( 8c%-7{`OHC@AEINQSUe7.&! 6"'+-/001;, `螟E%-7PJEBACGLPSTZ:2*%  "'+./0/1 0113Re3 \Ǐ%%-G\MHDBCEJNRT]5.(#! #(,./001A_bb3 !]룝 %-MJFCBEHMPSc0*&#""!w 0$(,-/001 5Va`ce4"^͑!&.YLIECDFKOQ,'%#$&&  %),/01 Fa_adff5 #^񫜭!&.8AHKKHEEFJMP'$#$'(* @"&*,/018Y_^adegh7!$_ד!&/8AHJJHGGILq!!%(*#(+./001K`\_cdfgij8" $`р~!'/8AHKLJIJ`碆ݏrރ  $),./0;[]\`caehhkl8" &`mHޘ~ "'0:BIMNMqID@:5I"'+-/1O]Z]abXKSelmn:$" '_SJLB_À} "(09CIjA>950 x %),.>\YZ^a\MGILRcpq<$# '"OʂOP{jB@⚞{}B^:640.m!{#'*0P[WZ_`TDC[qORal7&$!%>WS^O:RŽ|30.-,s!%(=XTV[_YG>Dz~XVT6$']Ziq;8螗z+*+܇B $-MTRW]\N<;[aZZYg˜ТN2Lˋ~zܕ߉j܆"#:QNRW]U@7=ʾjX#V[ܭz41r쥏}y֢%S)GKKRXXG34]ƽ`P"TYպQ,_ˉ~{wѠ&m7HFKQV^C1BƽYD$RXʹ57䥆}zwT!(BDELRW[Q31ƾX8)MYʽߥk94Zȇ|zwqilo"7C@GMSTVU/-5OƲX*EFXr̿ďoE47X[HOڦ}{yvoi`UI<2/WԹe'"*A?AINSQIKK2/5=JxţzX6/X_e>4;OQMZJCkzxupibXMC81,(%"! #!;@>DJOQJCHPMM=36=KafT@UYµp;6=STRuY?Hϣwtpkd\RJA:50,*(&$#! %0C>@GLPLB@MmQRG87=PiYJ8RXöm;741/-+)'&$#"!  $!'BB>DJONE<>k|YWR>;96420.-+*)('&%$9H?AGMPI;8KĻd\G;QoW1;KXƹn<:8765OPDFIMORO9/BĸuS==SvmXO.ocb`^n=5N`µsE27Zes}ZXVUSRPMKIGFCB@>=;:8FVHDHLNMMU<(3:PηaN7=SwӺy]_Jpdduõo>3EXķǑtH535KUJH]bVTSQOMLJHFCA@>=<=UPDFJLMIGKP<+36?MzӫY?/?Tyƽ՟hdLpadĸo>38XŸiA744FPNeWDHixTRPNLJHGECB@?048>MeY1.@TycHp\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMJHFDBA?BXLBFILLEACkuTUM=8:BWxY!0@U{Ϟtc;pZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKJGFDC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2p8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHFECJYIADHJH@:-1N³cM8E^`[S2.JOTTP%b =P8 $ab_Ǹ~M7 OXķ؟rE3/Raemƺ~M8GXƹoD5307`cbdTEIKL-*36=LlX6 ;F^»١he4'VZctȽ~N8 :YǺd<792/6_cbdUGJMK*',79C>:XcbbdUILOO6.=C>;E_wY=G_ѫh`TKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQSKBE;&:F_hS >D[{ü|kc^ Q=W`aq~XA%W^̿R:0CCJ[cdWMQOGDD+;F`\K8BPfxtc`X%O E_\f{uUD@ TXS90LPST2 G> KdbcɺT;6=IcƉ_aO!GI`elȼU;6=Idgd" YcjʿU<6>Jdګi\McexµR=7?JcϿxeY#^dcruD:1?E]xtddLKa^h{zUA(:BPev|i^aA 1V\_rqPD= /BEPdvt`[V' HZXg~eLG4 #=HNbuwgXZE5TT]\MH% 5KN]\UT-!ISP@(HPSF;7A7t8mk@ а|2 A 7 _ S 0! `*  2& :,  񺰣~@1#  뺮}qeE4%  㷩o`[G4$ٵxbR[F3" ͲoWEoXB. iO=jR;'dJ7{bI3  }`F2{qW>( xz]C/Z~cH0 fwZ?,7oS9# U𷦎sW<) w[@) B鶤qS:'cF..ഢnP7%hK2ղkM4#lO4  ʱgK2!oQ7!  dG/򵣋oR7!  aD-ൢoQ6!  {^B+ijmO4  y[y"iK2 ÏݼdH/ ź}`D, 笓z]B+ y]C,  qH3"  >,  <-  ?0# C3% ~G6' eH6& ]H5%\G3" %rYC/ lkS=* -eL7# wv\D/ 5mS;'  dG0 ?^<' g4O2 HYB g)K q5U  {#=a )Gk3 QsEq#)''''''')}u#{͏M%[9+q!]a-QA 1y%qgKYI +;ak!#߽Oߣckۉ]kM%IIۣk+!ao'y+eÑ]+ 9ۣq7+u!S{G 'wő_+_]7͗e3K}I)!'w糅O# /y}e5O}} Ok;+ Am; +7# -caA KM9Q}/߫5y)C_S;Óciy'ME /7 CQݧyIGi yћk7]ݧw?7C /}a1Au_빉U% 7ɕa/uC GӡuEAy9ۡs? %q㯁MC  +_oY- A% '{]+ Cga91C !AsOyqI  #C A1##C C3? %)%݁/a )aU˗e- [y5  e鵃O# 7՝m7I՝m; %oᅨY' /kY' CӡwC!aաwA +SU/9]W-  icnV BffBOSSA-1.9.1/res/BossaIcon.ico000066400000000000000000000537261333742133700155610ustar00rootroot0000000000000000f h00 %  B hnS(0`)7<5#$#('(+++2$#5,*=.,0/0222<21<<<JK!_!F%!H'"D,(K+(S&!S*$Y+&N1'T4'Y5.F:6E;:S51\;0i$ d,'n4):+y:2P@;mL?rF3{L9BAAEEEHFFIIIKLLMMMPGEYGB]HCSLK\NLOPOQQQTTSUUU[RQYYY]]]cOHwOElQLpRB{V@sPHbVTaaaeeejb`gghjjjmmmyngqqquuuzzz}}}+#3&7/1)<.>2:,2)<1=1?2D.A-O;C2F;X=I0E5[3X<Q2`?j>B2L3@0R=[9_=P6[6Q<]?\<K5O8C4E5H5K6R7P6Q9\=Z;Q6Q7V9S8\9f4b8b;k<b>`<l;c:k<s=z=p<s=z={>LDMCVJTDXG^SRCZC[@lVeYcYeB`Nw@}Lo_rWt[zpU@^CbCqAr\dBdBiDmBq@@x`??hsߒGL@CAEBDI[^EFMHGHV_ʍgϓm~ś|ȟ{iwƝÞĥʢ>FMOJN8M;NF>N08PP>P81M=;8>P1NJ;GMMK02M8:0:0F:KK=>P1.1F;8-0KN>FGI-F:0>FPFF2F;=9G9.-F8>JFF=JKK1NF8=FM>01.-=1>F>JJ>P2JI9PM>PO=1.-/000NN0>>1N1OMKN=910--/001KI0PP1JPI;90..0.JP/>1KGF9. .02F.MF-=JPK= 00>2=9Oz{yywvZT09.;NOPxiwwwX .:0NG;KMѬoz(Sywwv$ -;;:F-JNѭ&5q`!Vyyvww 9>;;JKӮ'/00||tYw[ .>GIJԯ]}6.07lc %ywQ 8G9ׯbs/-29ޒ->/.9r >߱0=:=rj-/߹ -4n=Eٕ^)-0@ﻹe md,#\񻻻d>񽽻9O0 +5;;ﹹ*Nξ9̻aNо?O¾BP˽¾CN¾gJh=¡>L÷` ???( @%3 &&&***---111555:99===Fd!o&C'$T%!^+#K2.Z8.N52@>>P?8x+$m3)h6/c8.d-<.4+>29.E/J.L3U;G3D1B1J9N=Z<U=U>a>d<i>L6B2K7Q<T5[6V=Y=A2A3B4J5O8C5L6J5H6W7R:V7P7U7W8T8]9m7f:h<c=n:b8e>a<e=a:e;j:m<h;k>n=l<|=p<r<s>v>v=x?y=z>~?RCPFSAV@RCZDYDV@\DbExMpE~GrPlarkuqtgz`ukym}m}k_A\@dHjHrVzD?jʉ\ґ_ٞ[@@A@ALBBBEDDYڢZڤ]DEGFGJRZ̉cÃjɉľlїgҝgДkĞ}ѕqЗvf/Pp!&,>X1qQq@C@@A=CF=GE@FC=2.'?3=FA>.)0$ ?CFC?@0C3/$.>A>AC3)ACA1'$$0GE'A0==F2)$ #$$3/3G/$ #).G.GD;! MLI #/'@ݦyxzwrklS#)G@ުtXfueRspQ.=G0A߫g+5\[nPNmH .3/>ଊh_*&odk '?ᭋ^7#)cZqr 'ⵐ6%#4iYMwI ђ-&OzJҖT$:){vGFӖU $0j}W ,ٻa~"V| #`]>ӹ]<кb9Ž8ȠBɣ·Ƹ????( 18&&&***333444999???qI8GGGKEBJEDJJJXFAZJGTUU[[[\\\aaakkkmmmssstttxxx|||/'9+3':->/<0K3I3F8I5I8U5Y;A.C0C3`6f<q=n=`:i>t?|>M@VKPAQDYGRBZAmPh]{v|HmTuU{T=܃PIIBDSVWTEGM/"P0p=LYgx1Qq&/@PZpt1Qq/&PAp[tϩ1Qq/P"p0>M[iy1Qqұ/Pp  >1\Qzq/Pp!+6@IZ1pQq/ P6pLbx1Qq,/KPip1Qq/-P?pRcv1Qqϑܱ/Pp!&,>X1qQq[MRU[ OONMSXTN RRMT_MXUM Z[]ZPW:#(^]T^YP=!2")S[YT> 4$\XW?%65'QG* 83.7A1+ &/H@ 0-IDF,LE;B<KJ9CV???(0` ___wwwwww000q444qWWW---L;;;(((1FFF ;;;gggvvvEEEwww!!!sMMMvvvaaa111Y ZZZׄ<<<> GGG}}}~~~OOO000;???9888-mmm/}}}HHHI KKKpppccc*GGGqqqmmm888TmmmFFF k***MMMSSSEEE!!!lHHHMMM IDDDmmmmmm??? n[[[___HHH777LLLaaaTTTNNN===555HHHggg\\\@@@???1112!!!<___eee+++>>>???bbbRRRJJJ000:::'''___III!)))mWWW ---pVVV```,,,mOOOccc999ڵWWWQQQdddQQQDDD???aaa333]]]666A;;;bbbTTT 7 @@@llllll+++;;;bbbDDD񚚚YYY___ppp^^^IIIIIIEEEBBBXXX@@@[[[///777jjjjjj777;2}}}DDDUUUhhh<<>>llluuuVWWQPPKLLFFGAAA======GGFIIIJJJKKK333nnnaaaCCCKKK\\\lllKKKkkk|||gghWVVOPOIIICCC>>>:::666323111:::EEEJJJCCCkkk}}}FFFMMM!!!6KKKnnneeebbbQQQDDD<<<555///+++('(%%%$$$$$$$$$('(999DDDHHHMMMcccEEEhhh&&&M>aaaAAAZZZggg}}}lllWWW<;;=.,K+(S+&T)#S&!O#H 5''';;;HHHIII^^^LLL;;;YYY qiPPPzzzcYU@P7Q6Q7P7O7M7K6H5D4=11)J222GGGQQQEEEVVVXXXzzz|||^C]:[9Y9W8U8S8Q8N7I6@2F5F6C52)7(((EEESSSIIIvvv,,,SSS*HHHlllpppaB`:^:Q5R7U8V9S8Q8y:2---7/I6G6E6@3i$ """???VVVUUURRR```333cRkkkvvvdBc;a:n4)<21^HDMCP;S8F;E;:>2L7H6E5E6B4_!'''666PPP\\\UUUWWWjjj555{SmmmiDf;d;:+0/0FFFIIIIGGLDQ9O8P7J5Y+&C)(<1F6?2)"""+++000DDD\\\ccchhh222{SkkkmCiZCEEE>>>FGGQQQRCY9Q6<.E2P8M7K '''...000('(\\\"VVVeCCC䒒u?u>r=c8+**JJJ`Nf;sPH?>>>>>JJJlPKZ9C2!"!F%!S8Q7N")))+,,222a "222fffx?x>u>k:5,*GGGjb`gBa>PGE;;;CCCXMLZ;N5H'"3&V9S7K#"""hhhoooV999ފ{?{?x?p??YGB_=VJYYYbVTa}?|?t>Xk<\;0D.q=p=n=l>>W0BBAA^3899_]\t[|?|?v=v=u>s=p=K+ 7:::iiiZ0BBBAd1QQQzzzrW~?}?z?x>l9z4B@@@mmm^0CCBBw9222b2@@}?p9+ :^^^b1DCCB?oTF%@@@}?J!BOOOj3DDCCB s0N)A@@@A"EmmmNNNށEEDDDL&>f1BBAAN&r0 KKK@EEEDD[3Gz:BBBA}=S 777CCBAFFEEExFY=CBB?0 }0bbb111BFFFEEZ)z@CCBO&5 ,,,DGGFFEk/& CCCc.4EGGGFF݌>>!!!^^^((([[[vvv000 SSSL]]]:::ǦNNNMMMWWWCCC777AAAsssaaa3332DDDP ___`^^^aaa&&&pppϿIII믯uuu]]]TTTDDDOOOXXXrrr%%%XXXnnn,,,aaa2|||몪SSSwww߿KKKssssssqqq[[[IJJDDDFFFVVV~~~wwwHHHppp???ጌ))) ^^^aaa{{|[\[LLLEEE===:9:AA@FFFDDD[[[PPPgggttt:`___}}}SSSEED999222,,,))))))///@@@NNNRRRKKKRRR~~~|ut{\Vs?68-6+3(/&x+$T%!3+++CCCSSSGGGmmmhhhӅ-rk\@W8U7R7P7K6C3A39.d!&&&AAANNN}}}}}}\\\G%ggguka2H6C54+%===PPPaaa|||SSS7yme=T5K2.TGEpJDN=J9J5<.6.B4)#'''666PPP]]]VVV6}mk>[6c8.U>RGELHHPFO8h6/C'$B2@1F ,,,111???III_^^}kn=b8Z8.U=~PEBBBNLLRCL6B1L6I5o&+++000///'''VVVO Xrrrٚjs>j:dp>MHGV@>-^+#T82%!!!pppK [lllȖɉl{?v>E/EEEp]We>RCMLLYD_:\9V7e( BBB&bbbxxx͍m?{>J.111CCCV@ZDYVV\Dc:`:P24 C`9@?{>f:U;P?8:98\GAc=h;e;2 5SSSd4A@n:dv=rBAE! .>>> QQQCFEEl? ACi0$ I gggEGFEm/](Cs3/ ? Ґ:Ӓ;ӏ:Ҋ:}5a*F'D N2() ,) ,( *?(  xxxt?yyyfrrrV3gggoFFF$ZZZOFRRRժ___NNN666拋pppԃooo{{{$yyy\\\䙙hhhUVVGGGqqq```PPP\\\???333888KKKwwwvvvwͩh]I5C0:-/'1???```qqqmTI3M@F8C3<08;;;ccc555uUK3PAZJGI8>/3'&&&444666{TU5YGXFAQD9+A."""jjjtSV`6JEDZAVK`:8%;;;0t;|>fn4(iiiEEoC>D%W&&&a'~~S"a<^AAAAAAAAAAAAAAA?ABOSSA-1.9.1/res/BossaIcon.xcf000066400000000000000000001275561333742133700155720ustar00rootroot00000000000000gimp xcf fileBB gimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) .>EDwB     !=gimp-text-layer!(text "B") (font "Jokerman") (font-size 95.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 0.147143 0.160659 0.721569)) (justify left) (box-mode fixed) (box-width 68.000000) (box-height 119.000000) (box-unit pixels) Dw.2Dw."G&>?ACDEGGFECA?<:86&+&GII HGFC>96&'&FIIHGHGGFGGFGFE@:6&$&DIHIHHGFD=6&"&CIHHGHGGFGGFED<6& &AHHGHGGFGGFFD7:?DFEEDC95&&@HHGFA&&7;DEEDD?5&&@HGHHGGFE?&&7CEDDEDA7&&?GHHGHGGFGFF=&&AEDDA6&&>HGGFGFFEFE;&&?DDCDCDCA5&&DCDDC?4&&&&6EEDEDDCDCD6&&;ABBABAA@A@=&&DEDDCDDCDC5&&:BAA@:&&CDDEEDDCDCCB4&&8BAA@A@A@@7&&ADEDDCDCC@&&7BAA@A@A@@4&&@DDCBC=&&6AA@A@@>2&&?DDCBC<&&5AA@?8&&>DDCDCCB9&&4AA@?@4&&;4&&:CCBCCBCBB4&&39?@@?>??>>72&&9CCBA3&&38@@?>?>?>>:2&&8BBCBBABAB?&&3:@?@@??>?>>=>>=><3& &G)슐{sj)+)豵vi)')嫵vf)$)򣳲h)")ힲ~f) )ߙjvsa))))i{c))퐯))hf))팮))f))z))b))􃬫t))򀙘\))퀪o)){p))}i))u^))ze))pp))wb))kY))t))gb))r))ci))o))`t))mx))_{))kq))񋎎~))il))񂌍))fg))|}))dc))uw))򛚙_))om))\))kc))𐛙))fZ))}))b~zS))u))_~~g))o))\~}|W))i))Y~}}{rR)){e))V~}|{zzp[P))x`))U~~~}|{{zyxxlU))t\))Ui~}}|{{yxxwvuu_O))qY))Uh~}}{zzyywwuusgP))n))Vm~~}{{zyywwutsrrqlQ) )Gܸ+ܸ'ܸ$޸"ݸ ۸ݸ޸۸ ߸ ޸ݸ  ۸ ۸               ߸  ݸ  ۸     ۸     ۸  ۸   ޸ ܸ ܸ޸  G̪s%+ݠ0'!$H"5 E<7PhkO g A:      b p > ]  K  8  #   Z .          ] m :    w } O  H k &)&8CBCCBBABAA=&&5=@@??9<>>=>=>=>=<3&&8BBABAABAA;&&39?@??>623<>>=>==<2&&7CBBA@:&&48?@@?<3&&3=>>=>>==:1&&6BBAABA95:?@@?@??82&&5>>==<==<81&&6BBABAA@A@A@@?>:3&&19==<5&&5AABAA@A@@?@@?@??<52&&2<==<;1& &4BAA@A@@?:52& &7=<==<<;<;;80& &4AA@?;73& &3<<;<;3& &4AA@A@@A@@?@@<853&&19=<<;<;;80& &4@@A@@>& &52&&6<<;<;;3& &3@@A@@?=& &3><61&&3<<;<;;:7& &?@A@@?@@??:& &1:==<2&&2<<;;:;;::1& &?@@?@??9& &6==61&&1;;:;::3& &=@@?@??>7&&3==<91&&0;;:;:;;::97& &<@?@??6&&1:=<=:1&&0;;:;;::9::9:0& &:??>5&&5=<=<3&&0;;:9:91& &9?@@??4&&2;==<5&&1;;:;::93& &9??>?>>3&&7=<=81&&1;;:521259::9984& &8??>>2&&3==<;1&&2::;5&&599896& &8?>>=2&&18<<3& &4::1&&19986& &7>??>>=>;&&3<=<7& &6::1&&09887& &6>>=>==:&&1:<<91& &09:991&&0889887& &5>>=>==9&&4<<3& &2::94&&4889877& &5>>=7&&19;;80& &7994101498876& &4>>==<=5&&3<<:1& &199::99874& &4=>==<4&&19<<5& &0699878773& &3>==<3&&2<<:0& &2998998988770& &3==<=<<2&&7;;3& &08:99520159788770& &2>==<2&&2;<90& &/6993/&&/2877.& &2==<1&&5;;3& &/5995/&&/3774& &2==<<;1&&0:;90&&04991&&0787760& &1<<==<;<<9&&3;;3&&05989980&&/77675.& &1<<;8&&6:70&&069989980&&07761& &<;<;7& &18899884&&3776765.& &;<<;<;<;5& &0589981&&177660&&9<;<;;4& &/389850048788730/036677663.&&9<<;<;;3&&0389984/&&4887765.&&7<;;:;2&&0168998890&&087767665/&&7;;:;;1001246::99898980&&/77677677665/&&7;;:989880&&07767664.&&5;:;;::9:9899874&&3776652.&&5;;::98987840/036676650.&&4;:;::989887887767662.&&4::9:9:989988988786767662.&&279::989887887767676640.&&/1346899898767530/.&#&/0022345567676653310/..&&)kz))[w}}||{zyfqvvutssrqpookP))ir))Xh~}|{zyx]PSpttssqqpponmiM))fk))Xg|~}|{{zyqV))SrsrqqponnmlkeK))di^n~~}||{zydQ))Xrqqoonmmkjj^H))b~}}|{zynV))MbpoommlljiihgS))`~}}|{{zpZP))PnnmmlkjiihggdJ) )]~~||{zkYP) )\mllkjihhgfeeZF) )\~~|{p`T) )OlkkihhggeedcbL) )Y~tg]U))Jcjiihgfeddcbb[D) )Y~~}y) )XP))Whhgffeddcba``J) )W}}s) )Sqo[L))Pggfeedcbaa`__V) )~~||{k) )MionmjN))Kffdccaa`__^]]E) ){~~}}{zze) )\onml\J))Ifedccba`__]]\[K) )w~~}|{{zya))RonnlaK))Gddcbba`_^]]\[ZS) )s~}||{zyyw]))MfmmlgL))Fdbba`__^^\[[ZYYA) )p~}||{yyxwY))XmlkjO))Gbba`_^^]\[ZZYXWD) )l}|{zyxxwvvV))NklljT))Ga`__^^]\ZZYXXWVG) )i|{zyywwvvuR))\kkj]I))G`__^RGEFOYXXVVUJ) )fzzyxxvvuttP))OkkjfK))J_^]P))NWWUTTL) )czxxwvuutsrM))JajjiP) )M^]\G))DVUTSSO) )`yxvuutssrm))RjiiZ) )T]\[D))BUTTSRO) )^wwuutssqpf))JdihcI) )D\\[ZE))CTSRQQN) )\vvutsrqqoa))QihgO) )I[[YXM))JRRQPPM) )Zttsrqpoo\))Iagf\G) )TZZYXWLCABJSRPPONJ) )XtrrponnX))PgfeK) )EZYYWVVTSSRRPPONMG) )VsrqpponmmT))H_ffT) )ASYWWUTSRQQPOOMMLD) )SrqoonmllQ))NfeaG) )HYXVVUTTSRQPOOMLKK?) )RqoonmmlkjN))[edO) )CVWVVMDABJQPPNNMLLJJ<) )PonnmllkjiL))Jed^F) )APWVVF>))));GMLLKJIHC) )MmllkjiiheG))G`b]F))@LVUUTB))?LLKJIHG<) )Llkjjihhg`))MaaL))@MVUUTS@))=KJJIHGE8) )Jkjihggfe\))W^YE))BQVUUSRQA))=JIHGGF=) )hiiggeedV) )ETUUTSRRQG))BIHGFFD7) )fggffedcR) )BMVUUTSRQQONA))=HGFFE;))bgfeeccP) )@HUUJB@AHPONMLD=;))FNNMLKJJHHGFEEDA6))[ddcbb``I))BFNVWUTTSA))?MLLJJIIGFFEDB7))Yccba``_GDDFILSXWWVUUTSR?))vF    _k 1 *     j h    .  s T bZ] !1 O1  < (qs, T  >  ? %kkA C3 z|,Mk_ } t:_#T!qOtj#Eǜb&)ܸ";Fb Drop Shadow     $.Fb.EFb/==E-G)$      !$')*++*)('%"   %.6=ADFGGFECA>;72.)$  (7FR[bfijjigeb^ZUOIB<5.(!  %8L`p}~wpiaYQI@8/' /F`x㲰wnf]SI>3)  !7RpüzqfZNA4(  $<[|ƻyl]N>0#  &@`}lZH7(  'Ab̻ydP=,   'AbůlU@-   &@aӼwps³pW@,   &?`γye[_nʹpV>)  %>_ȫlUKN_yϼmQ8$   $=]ĥbK?BSoϺeI0 #<\|[C7:Kg̵yZ>'  ":Z~׼wV=24EaƫkL1 !9X}չsR9-0A]Ӻ{Y;$   8W{ҶoN6*-=Y|ǪfF+  6UyϲkJ2'*:VyеqO2 5TxͯgG0%'7Su׾zV8! 4RvʬcC-"%5Prĥ]=$  2QtǨ_@* #2Moɪa@&  1OsĤ\=(!0JḽdC(   0Mq|X:%.Gi̮eC(  /LoؾxT7#+Df˭dB(   .JnֻtQ4!)Bcɫb@&   -IlԸpM1'?`Ŧ]=$   ,HjѵmJ/%=]|Y9"  +FiϲiG,$;Z~ּwT6  *EḫeD*"9X|ӸsQ5 )DfɪbA'!8VzҷsR6"  (Cdǧ^>&"8WzӹyY>)  'Acã[;$%;Y}ֿgL6%  &@a|X:$+B`ɰzaJ7'  %?`ؾyV:&%6Nl{dN;+  $>^ּxV<,%)4G_|iS?-  #<]ջyZC63:H\tIJoXB/ ";[ռ~bOFGQauɸrYB. ":Y~׿pa\`l|½μsYA- !8X|Ŭxv{ѾrW>) 7Vz͹|{ҾnR9% 6UyƷre]\duѼgK3  5Sw¸ueVIBBK\uͷ}^C+3RvƼxj[L?5./7H`~ȯrT9$ 2Ptui]RG<2)$#*8OmfH/1NryncYPHA<6/("#.B^϶xX;%  0Mqįug[PHA=;;<:60("")9RsũhI/ .Ko̴kXJ?72138?EGE=3)$&3IhҸwV9# -JmkS@2*%%)2>JUZWN@1'&/C`ŨdD+ ,IlҸwY@-" )8IZglh[J7*%,>Z|ϴqP3 +GjͰkL3"!0CXkx{tcO:*$):Ux׿}Z<$ *FhȪcC+(;QgywdM7(!&7RtƪdD* )Egť]>'!2H_ts]F1#$5Pr̲mL/ (Ce¡}Y;%*>Ul~{hQ:("4PqϸuS5 (BdٿyV8$$5KbvnYB."5Qqϼ|Y: 'Ab׼vS7%!.AXn}s_I4#"7Srξ^> &@aԹsP6&")9NdvvdO9'$;WvbA %>_ҶpO6)(2DYm{xiT>+ )A^{{eC $=]дmN7-/+ #6Mh¥^=5Tx¤iWQVajmgYF2!  0E]u𩮶վ|X94RviZV\dji^M:( -AWnѹtR43Qu־j\Z^egaTB/ ,>Tk{x}˱lJ.2OsԻj]Z^a`WH7',>Sjpd`fuçbB( 0Nqҹ~g[WYZVL>."".>RiwcTPVgθxW9" /Lpж{dVQQPKA5)! &1@Rg}u_OJPa{ëkK0 .Knͳw_PIGE@80*'(.8DSex{eUOVfǶ}\?' -Il˱sZJB><:6214:BMYfttf`fuŻlM3 ,Hk˰rYH?<;;=BHQ[emu}~z~xZ>(  +Gi˲v^NECDGKRZdnv}䃉eI0 *Ehηk\UTW]dnx{}¼lQ8$  )Dfsnot{ut|pV>) (Bd˸uqxżqYA-  &@aɽƵ~y~ȼpXB/  %=]ƹlVA/ "9Wy̻ȾzeQ>- 3Onķo\J9)  ,C_zŻsbQA2%  #6Mdy|oaSD6* (9K\kx~woeZOC7,"  '4@LV^ekqv{~xrle^WOF=3*!    )08>DINSW[^adfhijjhfd`\WRLF@93,%   !%)-148;>@BDFGGFEC@=951,'"   "$&()*++*(&$"       " / * ) ( ' $ !    c#1 Background     FXFpbF]s~;:7B64c21/%. , -+ ) 3( & M% # r! #~  } -~{ ~|z 0}{z ~|{x7~|{yx}|zxvY଩~|{yvu%}{yxvtgܭ~|zxwts+}{ywusr٭}{yxvtrp /ܬ}|zywusqo  ~}{ywvtrpo 4۬~|zxvtsqom #ڭ~|zywutrpml?٭}{ywvtrpnmk9ԭ~|zxvtsqpmki 8ح~|{ywusrpnlkh `螟ج}|yxvtspolkjg \Ǐ׬}|zywusrpmkjhf!]룜׬~}{ywvtrpnmkige"^֭͑}|zxwurqomkihfd#^񫛮~}{ywusqonljhgec$_ד}{yxvtrpnmkigfdb$`~|zyvusqonljhfdca&`mHޗ~|{yxvtrpnlkigfcb_'_SJLB_}|zxvtrqomkjgfdb`^'"OʂOP{jB@⚟~|{yvusqpnkjhfdca_^~;:7B64c21/%. , -+ ) 3( & M% # r! #~  ~} -~| ~|{ 0}|y ~|{x7}{zw߭~{zxwY૩~|zxvu%}{yxvtg}|zxvtr+|{ywusrݬ}{zxvtsq /ܭ}|zyvusrp  ٭~}{ywvsrpn 4۬~{zxwtspom #۫~}{yvusqonl?ګ}{yxutrqolk9٭~{zxvusqonki 8٬~|{ywusrpnmki `螟ҭ}{zxvurpomkih \Ǐ׭~|{ywusqomljhf!]룝׬}{ywutrpolkige"^͐ծ}|yxvusqomkjgfd#^񫜮~|{ywutrpmlkigec$_ד~}{yxvtrpnmkjgedb$`}|zyvurqomljhfeca&`mHޘ~}zywusqpnmkifeca`'_SJLB_}{zwvtrpomkihfdba_'"OʂOP{jB@⚞~|zywusqpmkjhgeca`]~;:7B64b21/%. , -+ ) 3( & M% # r! #~  | -}| ~|z 0}{z ⪩~|zx7}{ywଫ}|zxvY~}{xwu%}{zwutg~|zxvus+~}{ywutr~{zxvtsq /ڭ~|zxwusqp  ٮ~}{ywusqpn 4׭}{zxvtrqom #խ~|zywutqpnl?ڬ|{ywvtrpnmk9٬~|zyvtsqomkj 8ح~|{yxutqpnmki `螟ج~}{zxvtsqomkig \Ǐѭ~|zxwtsqonljhf!]룝׬|{ywvtrpoljige"^͑}|zxvurqomljhfd#^񫜭~|zxwusrpnljigdc$_ד}|ywvtrqnmkigedb$`~|zxwtsqomkjhfdba&`mHޘ~}{xwusqpnljhgeda`'_SJLB_~{zwvtrpnmkigfdb`^'"OʂOP{jB@⚞~|zxwusrpmkjhgeca_]~[:!9a8'7o513 }29 0 /G - ,O*)_'#&k$-"w!5 ?O !Y#%g&)(q)5+ {, =.  / G12Q455555555555@<:8E75e4󉇅 2񈆃~}r0~{yw'/~}{xwus -턃~|{ywvtrq.,냂~|zywusqoml*ꂀ}{ywutrpnlkh4 )~}{zxvtspollihfc '~|zywusqonkihfecaC &~|{ywutrpnlkigedb`^\ $}|zxwtsqonljhfdb`^\[YO  #}zyvusrpnljhgecb`]\ZYWU& !{yxusrpnlkjhedb`^][YWUTQM zxvtsqomlihfdb`_^[ZXVTRQOM, ywusrpnmjigedb`^\ZXWUSROMLJH  wvtrpomkigedb`_]ZYWVTRPNLKIGF2 wtsqomljigdca_][ZXVURQONLIGFDCA  vtrpnljigeda`^]ZXWUSQONLKHGECA@=9 tspomljhfdba_][ZXUTRQNMJIGFDB@>=:9sqpnlkifdca_]\ZXVURQPMKJHGEB@?=<986= rqnmkigedb`^\[XWUTRPNMJHGECA@><:96531&qonljhgdba_]\YXVTRQOMKIHFDB@><;9864211< pnmjhgeca_^\[YVUSQONLJHFDCA?=<:864211,omkihfdc`_\[XVUTRPNLJIGECB@><;9753211:nljhfdca_]\ZXVTSQOMKJHFDC@>=;9754311010 ljigeda`^\[YWUSRPNLJIFDCA?><:96531 15  kihfdba_][ZWVTSQNMKJGEDB@>=;975421 16 jigeca`]\ZYVUSQOMLJHFEC@?=<:86521 13#igfcb`_\ZYWVTQPOLJHGEDA?>=:86531101 1: hfdca_][ZXVTSPOMKJHFDB@>=;9764211(geca`^\ZXWUSQPMKJHFEBA@=;:865311;,fdba^\[YWVSRPOMJIHEDB@><:9753113Re3eba_^[ZXVTRQOMKJHFECA?=;:854211011A_bb3cb`^\[XWUSRPNLJHGECA?><:8753115Va`ce4ba_][YXVTRPNMKIGFCB@><;975421 1011Fa_adff5 b_^\ZYVUSQOMLIHFDCA?=;:7643110118Y_^adegh7!`^\[YWUSRPNLJHGECB?=<:965311K`\_cdfgij8" _][ZXVTSQOMKJHEDBA><;:86421 1010<[]\`caehhkl8" ^\ZYVUSQPMLJHFECA@=;:8643110112P^Z]abXKSelmn:$"][YWUSRPNLKIHEDB@><:97531 1@^ZZ^a\MGILRcpq<$#[ZXWURQONLJHFDBA>=;9864211011014T]X[_`TDC[qORal7&$@<:8E75e4󉆅 2񈆄~}r0}{zx'/~|zywus -턂}{ywvtrp.,냁}|zxvusqoml*ꁀ}{ywusqpnlji4 )}|zwvtrqomkigfd '~|{xvtsqomljhfdbaC &}{zwvsrpnmjigedb`^\ $~{zxvuspnmkjhfdb`_][YO  #|zywusromljhgdca`][ZXWU& !|ywutrpnlkigedb`^][YWUTRM zxvtsqonlihfeba_][ZXVTSQOM, xwutrpnljigeca`^\[YWUSQONLJH  wuurpomkjhfdba_\[YWVTRPNLKIGE2 wtsqpmljhfeca_][ZXWURQOMKJHFEB@  utrpnmjigfdb`^]ZXWUSQONLJHFECA@=9 tsqonkjhfdba_\[YXVTRPOMKIGFDBA><;9srpnljhgecb`]\ZXVURQONLJHFDCA?=<:86= spomkigfdb`^\ZYWUTQPNMJIGEDB?><:96532&qomkjhfdc`_][YXVURQNMKJHEDC@?=;9754211< pnmjhgedb_^]ZXVTSQPNLJHFDBA?><:864311,omkihecba_][YWUTRPNLKIGEDB@>=;9763211:mljhgdca_^\ZXVTSPOMKJHFDBA?=;98643110 ljigecb_^]ZYWUTQONLKHGECB@=;:86531 15  kjhfdba^][ZXUTRPNMKIGEDBA?=:985321 106 khgeca`]\ZXWUSQOMKJHGECA?><:86431 13#igfdb`_][YWUTRPNLKIGEDB@><;97531 1011: hfeb`_]\YXVTRQOMKJHFDB@><;9754211(gfda`^\ZXWTSRONLJIFECA?><:865311;,fdb`_][YWVTRPOLKIGFDB@><;9753110113Re3eba_]\YXVTSQOMKIHFDB@?=;9764211A_bb3db`^]ZYWUSRPMLJHGECA@=<:8753115Ua`ce4c`_][YXVTRQOMKIGFDB@><:9753211Fa_adff5 a_^\ZXVTSQOMLJHFECA?=;:8643118Y_^adegh7!`^]ZYWUTRPNLKIGEDA@><:875321 101K`\_cdfgij8" _]\ZXVTRQOMKJHFDBA>=;:85421 1<[]\`caehhkl8" ^\ZYVUSRONLJIGECA?=;:86431101101P^Z]abXKSelmn:$"][ZXVTRQNLKIGECB@><;9753210011@^ZZ^a\MGILRcpq<$#\ZYWTRQPMKIHFDBA?=;9864210114T]X[_`TDC[qORal7&$@<:8E75e4󉇅 2񈆄~}r0}{zx'/~}zywus -턂}{ywutrp.,냁~|zxvtsqomk*ꂀ~|zywusronmjh4 )}{zwvtsqnmkihed '~|zxwusqpnljhgecaC &}{ywvtrpnlkigeca__\ $}{yxvuspomkjgfdc`_][ZO  #|zxwusrpmljhgeca_^[ZYVT& !{zwvtrpomkihedb`_\[YWUTRM zxvtsqomljhgdb`_^[ZXVTRPOM, xwutqpnljigeca`^\[XWUSQPNLJH  xutrqomkigfdb`^\ZYWUSRQNLKIGE2 vtsqonkjifdba_]\YXVUSQOMKJGFDCA  vtrpnmkigedb`^]ZXWUSRONMJHGDCA?=9 tsqomkigfeb`_][YXUTRQNMKIGEDB@>=;9srpnljhgeca_^\ZXWUSQONLJHFDCA?=;:86= spomkigfcb`^\[XWUSQPOLKHGECA@><:86531&qomkjhgeba_][ZWVTRPNMKIHFDB@>=;:764210< pnlkigfca_^\ZXVUSROMLJHGDCA?=<:874311,omkihfdba_][XVTTRPNLJIGECA@?<;87532110:mljhfeca_]\ZXVTSPOMLJHFDBA?=;98642110 mjigedb`^\ZXWUSRPNLJHGECA@><:9743110115  kigfdb`^][ZXUTRPOLKIHFCB@>=;9753110116 jigdca_^\ZXWUSQPMLJHGDBA?><986431 13#igfcba^\[YWUSRPNLKIGECA@><:974421101 1: hfdca_][YXVUSPOMKJHFCB@?=;:864211011011(gecb`^\ZYWUSQONLJHFECA?=<:874311;,fdba_][YWUTRPNLKHHECB@><;97531 10110113Re3eca_]\ZXVTSQOMKJHFDC@>=;9864211A_bb3cb`^\[XWUSRPNLJHGDCA?>;:8753110115Va`ce4c`_][ZXUTRPOMKJGFCBA?<;98642110 1Fa_adff5 a`^\ZXVTSQPMLJHFDBA?>;:8643110118Y_^adegh7!`_\[YXUTRPNLJHGECB@><:965311K`\_cdfgij8" _]\YXVTRQOMLIHFDB@?=;:864211011<[]\`caehhkl8" ^\ZXWUSRONLJHFECA?><:86531 12P^Z]abXKSelmn:$"][ZXUSRPOLKIGEDB@><;87631 1@^ZZ^a\MGILRcpq<$#\ZXWTRPOMLIGFDBA?=;:86421 14T]X[_`TDC[qORal7&$@k;A :8K 75Q 4#2 ]0 +/ k-7 ,s*; )'E &$M #!!W)g/ q!5 #{%? &(K )+U ,# .a /) 1k23 4s5E5q#5)5'5'5'5'5'5'5'5)!%>WS^O:R~|{yxvtrpnmkigecb`^]']Ziq;8蟗}|zxvtsqnmkjhfdca^][Yg˜ТN2Lˋ~}zxwusrpnlkhfecb_^\ZV[ܭz41r쥏~}{zwvtrqnmkigecb`_\ZYTYպQ,_ˉ~|zxwtrqomlihfdc`_][ZWRXʹ57䥆}{ywutrpnljigedb`^\ZYVMYʽߥk94Zȇ~{yxvtsqomlihfdba_][YXVFXr̿ďoE47X[HOڦ~~|zywutqpmljhfdca_^\ZXVT/X_e>4;OQMZJCk{yxutrpolkigfda`^\[YWUS UYµp;6=STRuY?HϤxvusqomkjhfdca^]\YXVTR RXöm3EXķǑtH535KUJH]cXVTRQOMKIadĸo>38XŸiA744FPNeWDHiyUSQOMLJH\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMKIGZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMLJGF8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHGE6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukFCJ[Zj~iKE6 SX~L4*Zհو82@_edhln^:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ %KTRODW_[mö~L5SdõY0-DcbbdQ  =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUKcchyĶtC7Wkʽ~M9%;DFTacbdV=W`aq~XA%W^̿R:0CCJ[cdW E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;779!%>WS^O:RŽ}{ywvtrpomkigeca`_\']Ziq;8螗~|zxvtrpomkihfdca_][Yg˜ТN2Lˋ~|zywutrpmljigeca_^\ZV[ܭz41r쥏}{zwutrpomkihecb`^]ZYTYպQ,_ˉ}|zxvtsqomljhfdca_][ZWRXʹ57䥇}{ywusronlkigeda`^]ZXWMYʽߥk94Zȇ}{zwvtrqnmkigfdb`_][YWUFXr̿ďoE47X[HOڦ~|{xwusronljhfeca`]\ZXWT/X_e>4;OQMZJCk{ywusrqolkigfcb`^\ZYWVS UYµp;6=STRuY?HϤxvtsqomkihfdba_][YXVTR RXöm3EXķǑtH535KUJH]cWVTRPOMKJadĸo>38XŸiA744FPNeWDHiyURQPNLJH\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNLJIGZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKIHF8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZIGE6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukECJ[Zj~iKE6 SX~L4*Zհو82@_edhln^:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ %KTRODW_[mö~L5SdõY0-DcbbdQ  =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUKcchyĶtC7Wkʽ~M9%;DFTacbdV=W`aq~XA%W^̿R:0CCJ[cdW E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;779!%>WS^O:RŽ~|{yxusrpolkihedb`^\']Ziq;8螗}|zxvtrpomkihfdb`_][Yg˜ТN2Lˋ|zywusrpmljhfecb_^\ZV[ܭz41r쥏}{yxutrpomkjgfcba_\[YTYպQ,_ˉ}{{xwusqpnkihfdca_^\ZWRXʹ57䥆~|{ywusrpnljhgeca`^\ZXWMYʽߥk94Zȇ}{zxvtrpomkihfdb`^][YXUFXr̿ďoE47X[HOڦ}|zyvusqpmkjhfdca`]\ZXVU/X_e>4;OQMZJCk{yxusrpnmjigeca`^\[YWUS UYµp;6=STRuY?HϤxvusqomljhfdba_][YXVTR RXöm3EXķǑtH535KUJH]cWUTRPNMKIadĸo>38XŸiA744FPNeWDHiyUSQOMKIH\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMJIGZeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKJGF8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHFE6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukECJ[Zj~iKE6 SX~L4*Zհو82@_edhln^:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ %KTRODW_[mö~L5SdõY0-DcbbdQ  =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUKcchyĶtC7Wkʽ~M9%;DFTacbdV=W`aq~XA%W^̿R:0CCJ[cdW E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;779}4{4%33 3 3 ]3 -2 2 2 2 q2 K1 1 + $ a $ $ $ ߽$ ߣ$k ۉ  k % I !ao'  9ۣq7+   'wő_+_  K}I)  /y}e5O + A - c K Q }/ C _ S; /7 CQ]ݧw?7 C /}7ɕa/u C G %q㯁M C  +_Cga91 C   # C * C * ? +% ݁/+ )a-[y5 .7՝m71 %oᅨY' 3CӡwC6 +SU/8[YWUSRPNLJIFECA?=<:974311011D^WX\`YG>Dz~XVT6$YWUTRPNMKJGFCB@><;97532117W[VY^]N<;[aZZYVUSQPMKIHFDBA?=<9764311I^UVZ^VA7=ʾjXWVSRPNLJHGECB@=<;975411:ZXSW[ZH44]ƽ`PVURPOMKIGFDB@>=;9754211N\STWZ`D2BƽYDUSROMLJIFEBA@=;:864211=[VRUX[]R42ƾX8TRPNMKIGFDB@><:97532113QZPSVYXXV0.5OƲX*SQOMKJHFDB@?>;9764311B\RPTVYTKLL3/5=JxţzXRPNMJHFECB@><:9753115UWNQTWVMEIQNM=36=KafTPNMKIGFDB@>=;9763211F[ONRUWPDBNmQRG87=PiYJOMLJHFDBA?=;:765318XTLOSVSH>@l|YWR><;97532KZLLPTUL=:Lżd\G;QoW1MKIHFDC@>=;9854<:866OWIJNQSH73Mº[G;99TTGILOQSP:0CĸuS==SvmXO.IGEDA?><:HYJFJMONNV=)3:PηaN7=SwӺy]_JGFDBA>048>MeY1.@TycHEDB?DYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;DB@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2CIYIADHJH@:-1N³cM8E^`[S2.JOTTP% CGIK/*5;KƪXE :E^˺y]^J ES> EIKL-*36=LlX6 ;F^»١he4' GJMK*',79;E_wY=G_ѫh`KNQSKBE;&:F_hS >D[{ü|kc^ MQOGDD+;F`\K8BPfxtc`X%NKEE:";G`ߵW@-CERfx}j\_FHFE*00LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeY*1?E]xtddL+:BPev|i^aA ,/BEPdvt`[V'-#=HNbuwgXZE. 5KN]\UT-0(HPSF4A76:ZXWUTRPNLKIGECA?=<:86531 1D^WX\`YG>Dz~XVT6$ZXVTRQOMKIGFCB@><;9754116W[VY^]N<;[aZZXVUSQOMLJHFDCA?><:864211I^UVZ^VA7=ʾjXWUSQPOLJHGECA@><:8653211011:ZXSW[ZH44]ƽ`PVTRQOMKIHFDBA?<;:763211N\STWZ`D2BƽYDUSQPNLJIGECB?><:8653011=[VRUX[]R42ƾX8TRPNLJIGEDB@><;97532113QZPSVYXXV0.5OƲX*RQOMLJHFDBA>=<9764211B\RPTVYTKLL3/5=JxţzXQPNMJIGEDB@><:8653115UWNQTWVMEIQNM=36=KafTPOMKJHFDB@?<;8753211F[ONRUWPDBNmQRG87=PiYJONLJHGEBA?=;:864208XTLOSVSH>@l|YWR><:97531KZLLPTUL=:Lżd\G;QoW1MKIGFDB@><;9764=:97B[LHLNPTP26ºXD<:HYJFJMONNV=)3:PηaN7=SwӺy]_JGFDB@>=?WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdLGDCA?=NYGEHKMKEER_NN>048>MeY1.@TycHECB@DYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;DC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2CIYIADHJH@:-1N³cM8E^`[S2.JOTTP% CGIK/*5;KƪXE :E^˺y]^J ES> EIKL-*36=LlX6 ;F^»١he4' GJMK*',79;E_wY=G_ѫh`KNQSKBE;&:F_hS >D[{ü|kc^ MQOGDD+;F`\K8BPfxtc`X%NKEE:";G`ߵW@-CERfx}j\_FHFE*00LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeY*1?E]xtddL+:BPev|i^aA ,/BEPdvt`[V'-#=HNbuwgXZE. 5KN]\UT-0(HPSF4A76:ZYWVTQPNLJIGECB@=<:9743110D^WX\`YG>Dz~XVT6$YXVTRPOLKIHFCBA>=;97532117W[VY^]N<;[aZZXVUSQOMKJHFEBA?=<:864311I^UVZ^VA7=ʾjXWUTRPNLKHGEDA@><:875311:ZXSW[ZH44]ƽ`PVTSPOMKJGFDB@?=;9853211M\STWZ`D2BƽYDUSQONLJHFECA?=<:875311=[VRUX[]R42ƾX8TRPOMKIHFDB@>=:8753113QZPSVYXXV0.5OƲX*SQOMLIHFDBA?=;97643011B\RPTVYTKLL3/5=JxţzXROMLKHFECA?><:8753115UWNQTWVMEIQNM=36=KafTQOMKIGFDB@?=:9763211F[ONRUWPDBNmQRG87=PiYJPNLJHGDBA?=<9764217XTLOSVSH>@l|YWR><:87532JZLLPTUL=:Lżd\G;QoW1MKIHFDC@>=;9764<:97B[LHLNPTP26ºXD<:HYJFJMONNV=)3:PηaN7=SwӺy]_JHECB@>=>WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdLFDCA@=MYGEHKMKEER_NN>048>MeY1.@TycHECB@CYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;DC@RTDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2CJYIADHJH@:-1N³cM8E^`[S2.JOTTP% CGIK/*5;KƪXE :E^˺y]^J ES> EIKL-*36=LlX6 ;F^»١he4' GJMK*',79;E_wY=G_ѫh`KNQSKBE;&:F_hS >D[{ü|kc^ MQOGDD+;F`\K8BPfxtc`X%NKEE:";G`ߵW@-CERfx}j\_FHFE*00LPST26=IcƉ_aO!GI6=Idgd" #6>Jdګi\$7?JcϿxeY*1?E]xtddL+:BPev|i^aA ,/BEPdvt`[V'-#=HNbuwgXZE. 5KN]\UT-0(HPSF4A76:4u#4͏M3[393+3q!3a2Q2A 212y%2g2Y1I $ ;$ k$ !$ #$ O$ c ] M I ۣk+ y+eÑ]+  u!S{G ]7͗e3 !'w糅O#  } } Ok; m ; +7#  a A  M 9߫ 5 y)Óci y'M EݧyIG i yћk7a1A u_빉U% ӡuEA y9ۡs?oY- A % '{]+ !A sOyqI"A 1###C 3*% )+ a,U˗e- , e鵃O# -I՝m;//kY' 3!aաwA59]W- 9 @@BOSSA-1.9.1/res/BossaLogo.bmp000066400000000000000000000335261333742133700155710ustar00rootroot00000000000000BMV76(~ 7  BBB??? [UUU222iLLL@@@[[[LLL>888Wbbbwww;;;$= 5 6 *  d Z9` U WgU{KAS %#2 %^^^Xnnn`<<<!)"%"x$"߮&$'$'$'$'$&# < : ) {s{eI"$!w'$)&(&)&(&)&'%%"%#Ǵ(%)&)%(%)&)&(% S D(%)&$!;!?~F111Z^^^GGG s```lll^ 0CCC...4<<<&&&X555___HHH])&)&)&)&)&)&&"hͶ(%)&# 6 +$!N%")&)%)&)&)&" G0&$)&SYL\$!(%(%)&'%B &#ֹ(&nQgbJn'$(%($)%%!x# )&)&)&)&'$ֿ)&%"3XXXr|||CCCSSSggg(((PPP___NNN888333܂m___eee\)&)&T׏ $"ܷ)%i(%(&)&)&8 6$!(%(&'$B ɍ&$(%(%fM(%A# 4 '$)&)&)%'$'$;*&8 T0# Á b(%)&*')& L(%*'*'E&#*&R'$+(+([111NMkkkQQQ\\\@@@III___III(((YYY"""oooJ222fV(%)%(' '$ۗ!׺)&1 q(%(% &$*&)% )%')&)&*'^F*'C ͊6'#&$'$y )&+'+'+']')&V)%*'# +(!5*'I+(+(+(+(1 &$5+(,(Z̥$!|,()&X&#X,),)/ &&&FFFsssWWWVVVQQQtttRRRccccccAAABBB999kkk;;;oooaaaDB)&)&@ ת$"| '$|)')%j*&_)&;*'*'^)&3 (%%# )&*'* !*'\%.!q" z+'*&+'+(+(%"J)%I*'"9YO(%)&D,(,(+(,(a,(*(+' E Z+',(:  (%,)+(:aaaFFFlllQQQYYYZZZ~~~\\\GHGDDDLLLFFFLLLsssAAAaaa222aaa1.*'*'aB T&#v*&# f)%*&+'*'+(%!+(YF'$ +)*'A X&,(+'(%)'λ)%Ys*&&$^+',(-),),'R+(-)" V,)$& -*,)-)-)o+'\-*,(.),(*%&#&#&$&$&$&$&$&$'#.*.*ohhhLLL444kkk^^^QQQKLLEEE???DDDLLLJJJ???```GGGeee111-/,4,(,(O+(; ,+'+($",),) *&;,),)6 ōC,(w,()&E*&-)-*P#-(*(-*-*)&@ ,),)-*-*-*)&I*&B,(.*.*&"E*&t.*.+.+.+k,(.+j+(.+-*+(-).)/*/+/+/+/+.+/+-* [[[NNNooo___\]\VUVOOOIIICCC<<<;;;IIIPPPLLLjjjaaa&&&-+J-)-)"^-(G+'+)ɆW,).*" -)-*.* &(%,)-(-*"c+(/+/+/+/+( -).+/,0,/,I-*}/,+'A 0,0,.D $Q u"-)0,-(@UUU RRRPPP\\\rrrmmmggg```ZZZTTTNMMGGGAAA:::222@@@PPPJJJooovvvAAAddd<<</+]-),)$"r-(Ոb,)~,(-)-*-*.*-)-)*'*(-)+'; o-*.+.+*&/+.*/+.*.+ -)0,0,0,/+.*S/+0,@ -*0,.*+'# XC 0,0, PPP444~~~xwxqqqkkkeee^__WWWQQQKKKDDD>>>888111222PPPVVVIIIkkk___ /+n/+.+'%-+./+M>/+d/+/+.*/+.+"/+/+(%m!f++.*0,0,&*&0,1-1,1,0-")I,)0-1-1-0,1-P -)x2-/+.*1-2.2.2.2-2-($Ҧ$!2.2.<<<1ccc{{{uuunnohhhbbb\\\UUUOOOIIIBBB<;<555000///:::XXXRRRllllll:0,}0,0,+' ) .+" ".+0,0,0,y</,,1-0-%"mn %0,1-1-N+(1-2.1.0-1.)%@w.*1-2.2.1-2. ,+ 2.2.3/3/3.6 *&.+/,2.3/3/2.-(D///kkkyyyssslllfff`_`YYYRSSLLLFFF@?@999333111000222JJJ\\\XXXdddWWW1-1-1-1-0,'$ O/+2-1,.+2./2.2.-)!WJ0,2.2.2.2.Y? .*2/2/2/3/3/ +L1-3/3/2/4/2/g.*40403040< )%|2.40# ...~}}vvwpqpjjjcdd]]]WWWQQQJKJDDC>==777111000111000888ZZZfffZZZ/+1-1-0,2.1-'#"w1-1-2.h&1-.2.2.2.'%3.&,)/'#X1-3.3.W0+3.2.3/3/0,Ny 1.4/4/2.40($1 D2-503/50401-W*'V4050E+++z{zttunnnghgaaa[[[TTTNMNGHHAAA:;;554000111111111///HHHTTT0,3/3/2.@ &0-3/0,3.2.3/ 22-(3/3/4/)%4/h-*-\}50,2.3040< /+404/3/40# ,&#!3.50514150!&1-61516140 1.611,F |ppp~~xxxrrrkkkeee_^_XXXRRRLLLEFE???999222000111111000333$$$.2.404040+ .2.40401,}3/504/4/50!6*']2-x40+(515140/+t5161404.^wP,(5151.*NU0-626262/+@0,6150($0 /50617272o#,) 7273!.::;ݜ|||vvvpppiiiccc]]]VVVOOPIIICCB=<<666111000111(((2.414051_>3/4050wZ51505061'$y /+ 3/j402/626150*'R3/715072'u-)s727262627162 T1-(736252,'61-626382837283O$4083727261W,(08284Vkllzzztssmmmggg```YZZTTSMMMGGGAAA:;:444/0/"##@51516161N3/51612.3/61615061!}+'q-)?*'_72616272u727272E 514/9 ',(e8372 4/U7383731-,83-)0 J-2-833.}-* 839483941 .*8372D~~~xxwqqqkkkeed^^^WXXQQQKKKDDD>>>//. 51617272'$j627373726172837283,(,(T# 6272837250a83845083+' L1-0,3.94|640W8384,)J4/<949 ǍB2.ҷ($t6194= 40839483p%5094!|||]WWW||{uuuooohhhbbb\\[UUUOOOKKKWS728373831-y848484735094949494828394949472948284M 838450733/W50" $!_94$!<50J8494-)b40194'# yz83 5194i 3/.948494/+* m94722  yyysssllmfff_`_]]]+++ m###FB 7294949440-*.949482%!B728294949484949494849494628294+ 84/g94727294q-)94".3.9472945084727261F5094d40829494 9483G[DDD~}}wvwpppmmlOPP(DA 72949484610,G947284(/(61947284949494947283!4/\949450 <%"&/+S,(]>V;7294E509484+'".*5.*X,(\J($"8383X2019482846194($ttt||{qrr;;;vC? 7294948461, *&9472d 506283949494830,m50946283ZMl"8394+'4/6184943.qTRs(%94836194949483- 8+++ppp C>83949494948361.*%-*40-r1,v,(h3/f7283949494948361(%407283949494948351{a/+72728350@  fef&&&KPL401,1-/,+&o.i40.*/+|1,1-.)@j51 -).0+1-0,+(l'Z 61 '$$"":BOSSA-1.9.1/res/BossaLogo.xcf000066400000000000000000002524711333742133700155750ustar00rootroot00000000000000gimp xcf filedBBgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) eV_BOSSA     tBgimp-text-layer&(text "BOSSA") (font "Jokerman") (font-size 95.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 0.147143 0.160659 0.721569)) (justify left) (box-mode fixed) (box-width 385.000000) (box-height 119.000000) (box-unit pixels) V_AMYV_s2LcxKx[}G&/0112233210/..-&+&34420.-&'&24431.-&$&24430-&"&14430-& &1443-.13443/-&&1442&&-/3441-&&0441&&-3443-&&0440&&2443-&&044/&&1443-&&/44.&&0442-&&/44.&&04 4/&&/44-&&/4 43-&&.44-&&/4 40&&.4 43-&&.4 43-&&.4 43&&.4 4.&&.4 41&&-4 4/&&-3 30&&-4 41&&-3 3/&&-3 32&&-3 3/&& 32&&-3 3.&&13 3&,2 2-&&023 32&&,2 2-&&02 21&&2,&&/2 20&&12212 2-&&.2 2.&&01 10&&.112-&&01 1/&&-1 1,&&/1 1/&&-1 1/&&/001.&&,1 1-&&.0 0-&&,00100,&&.0 0-&&,0 0/-,&&.0 0,&&+0 0/,&&-//0/0,&&-.0 0.,&&-/ /+&&+-//,&&-/ /&+.//,&&,/ /.&&,.//-./ /,&&,../-&&+-//,-,./ /,&&,. .-&&+-..,&&,../.+&&+. .,-..-+&&,. .-+&&+..-+&&- .,&&+--.-,+&&+. .+& &+--,+*& &,--.--..-+& &+--,+& &+- -+& &*- -,+&-+& &*, , &+&+- -+& &), , &+,,+*&&+, ,-,& & ,+& &*,,*&&*, ,*& &+,,+& &+,,+&&*, ,+& & + &*++,++*&&*, ,+& & +*&&)++*&&)+ +*& &*++*&&*++*&&*+ +*& &*+*&&)++*&&)+ +*& & *)&&*(&&)++*)**++*& & *)&&)**)&&)**&* &)**)&&)**)& &)**)&&)** &)*))*)&&)**)& &*)&&)** & )&()) &)**)&&)** & )&) &)&) &())&()) &)())&G)345667887866554321)+)789899898988989987420)')7998998998521)$)799899898989989841)")68998998989741) )69989989713589899830))599898998988996))13889961))599894))1899862))49899899894))79989889982))499893))69971))49 9898993))49989898861))3998992))49989984))39989989989982))49989988971))289899898998899891))398994))289989989989971))298998998981))298998996))2998998998992))1998988998996))1899894))2887877885))0898998989895))188788787784))18878878876))1788788782))7887876))17 7872))6887887))077677671))477677)0776776760))4776776776))676676776770))3676676773))65665661))26672))56656656564))2665565661))46656653))1665660))45 52))166556656653))2554454552))05 51))3554551))/5545540))14 451))055455455310))2334343440))/34 4530))14433443440))02344334434410))1334434434/))/1443433/))13 3)/23343443430))0322332))0233123 3/))033231))/133201/3323233/))02 21))/122323322/))/32322332/))/21220/1221/))/2231.))/2212212212212211221/))0 20))/112122122121//))/21121221121/) )/110/.) )022120/) ).11011011/.) ).1 1/) ).011011010/..))01101 1.) ).0 0 )/.))/0110101101101/) )-0 0 ).00/.))/0 010) ) 0/) ).//00/.)).0 0.) ) / )/00/.))-0/00/00/00/00.) ) /.))-//-))-00//0/00/0/) ).//././/.))-.//-)),/ /.) )././-)).//-))-/ /.) ) .-))-..)-//./. )-..-)).,))-..-. )-.-..-,))-..-))-..). ) -,))-.-) )-.-))-.. ),--)- )-,))-..-) ),--,)),--,) ),--,))- ),-,--,)),-,, ),--,))- ) ,)+,, ),-,-)Gܸ+ܸ'ܸ$޸"ݸ ۸ݸ޸۸ ߸ ޸ݸ  ۸ ۸        ߸ ݸ  ڸ ۸  ޸  ٸ  ۸ ߸׸ܸ ׸ڸڸ ׸ظ ָ׸ ظ ظ߸ָܸ׸ Ը ӸѸոٸ Ը ո ϸ Ը Ҹ ո Ѹ Ѹ ڸ Ѹ Ը ׸ ϸ ظ ո и и Ӹ Ը Ӹ Ѹ͸ո ϸ͸θ θθ ϸ ̸θ ϸ ˸Ƹи ʸʸθϸ ɸ˸ ˸ ˸˸ ɸ͸ Ǹ ɸ ȸȸ ɸ Ǹ G̪s%+ݠ0'!$H"5 E<7PhkO g A:      b o > \  J  7  !   V  +     {   u  U d 4    j p E  ? ^ c f /H U ;g\ /s ~! ee TB X Ey  5< Y % ȏ8  C  i$|  LL M  " ^ 5 0 d w d3$ IGnNn +U1t  ~ cl { BK  `h }y  } eGe]&-./0123321/.--&+&-/14 420.-&&&.03442/-&"&-1443/-&&-/3442.&&-144/-&&-24 41-&&-34"42-&&-34$43-&&-34&43-&&-24(42-&&-04*42-&&.4,40-& &-34-4/& &-14.43-& &.3341//013441-&&-23321331&&-/23344.&&.331.--33-&&-.133&-1332/-&&-233-&&-.33&.2 232331-&&033.&&-13 3&0220,&&.220& &/3 3&-220,&&-22,&&-2 2&.2 20,&&122-&&-02 2&-01 10,&&/22.&&.22&-1 1-& &-11/&&,11.122&-1 1-& &,11,&&.11/-,011&/1 1,& &011,&&-110,&&-11&-00,& &-,&&+/110,&&-/11&,00/,&&-00,&&-0011&,00/,&&-00-&&,00&-//0/00/00.,&&,/-&&.00&-/ /,/-&,+&&,00&./ /.+&,//-&&,//&./ /-&&,//,&&.//&./,&&,//,&&+,-//& .+&&,..-+&&,-.//& .-&&,.-+&&-. .& .,&&-,+&&,. .&-.+&&+. .& -+&&+,++&-..& -*&&&-&,--(&,--& ,(&,--&+,,(&,--&+,,(&,&*,,+*&*,,&*++,*&&+*&&*,,&+*&&*++*&&*,,&*++*&&*++*&&*++&*++*+)&&*++*&++&)**&)&)++*++& *&)**+*++&)** &)* *&)**)&&)&)* *& )&()) &)(&&*)**])123466887643211)+)13699898998997321)&)25899899899899899731)")1589 989899830))13899899872))1598989988988998989989941))1789 98998998989989951))188998998989 989989971))18899889988989989989989 982))1899899899898998898898981))159989 98998989989989971))159898988998998998998988998961))39989989899898989989989989899851) )1889989898998998989899898998993) )15998998998998989889899899898989989981) )28878989989986344589989899899850))16878878787887874885))0137879 983))37887887887886211880))16878788787887))1677878878878878720))17871))13687887878878878))1677677676767751))4773))167788788788)47767767767750))2774) )4776677)0767767740))07670))1676767767766))256 640))5761))146767767677)1466566556650))3662))2667677)06556656565661) )1664))06626566566))15 561) )0660))366310566566))2554550) )3550))1556540))166566566)14545545540) )10))/445540))1455)045545 54/))1550))1455454))04430))14551))/45454544))1443443442/))031))244)1343443440434411))/)044)13 3/)0343340))/4344)23223232331))0330))23344)23233233/))033230))/133)232332/))0331/))/011233) 21))022/))133233)122/))10/))02 2)122/))/212 2)011.)).//.)121121))01.)&)1212))0110110)')011)/00()0110))/00()011011)).00/0/00/)')0).0/00/00/..)-00)-//.)).).00/0)).//-)).//.-)).//0)).//.//../-))-//.)).//)-..-))-//./.-).//)-..-))-)-../..-//).-.-))-. .)-.-.-))- .),--,)),)-.-))-,)),--,) ),-,)).--]۸+ ۸&ݸ"۸۸ ޸"߸$&߸(޸*ݸ,۸ - .߸ ۸  ۸۸߸ ݸ  ڸ  ٸٸ ظ޸ ڸ۸  ׸ڸ ڸٸٸ ظظ ׸ڸ ظܸ׸߸ ۸ԸԸݸ۸ڸ ָ׸ԸӸܸԸ  ׸Ը ԸҸѸϸ&۸'ڸ'ظ'׸'ڸϸθθ ͸͸׸̸ϸ˸͸̸͸ ͸ȸȸɸȸ Ƹ]<Ϣ]+J ܊&q("E(Z Aa"Wb$kE'b(C*(, E. /Y h]  o XQ ! UHg  p  'V U * 4 \ Pc > 8@&b  T o%i   V_R \#  A hi2gN3&''''mwcL512>=1v05r/T8?<&  </ ' H_&-..001233211/.--&(&-/134430.-&#&-/24430-&&-/34430-&&-2443.&&/34 4/-&&-04 430/.--./2440-&&-04 41.-& &-03440-&&/4 42.&&-144/&&.4 40-&&-/443-&&-244/-&&/440&&/440-&&-.0123320.-&&0443-&&-3442-&&-03443.&&-344.&&.44.&&-/34 4/&&/440&&1443-&&-044.&&.442& &-440&&/4431013440&&-443& &.44.&&-3443.-&&-0442&&-443& &/44-&&/443-&&-443&&-443& &044-&&144.&&-441&&-442& &244-&&244-&&/44.&&.441& &244-&&344-&&./01440-&&/440&-& &344-&&344-&&-/3443/-&&-344.&/& & 3.&&234434.&&-..--&&/44-&2-& &2330&&0330& &-331&&3.& &13 3-&&.33.& &-233.&&21-& &/2330&&,2332.-&&-.2331-&&22-& &.2 2.&&.221/--.1332-&&2/& &-2 2-&&-022.&&21,& &02 21-&&,022/&&1-& &-11 21-&&,/22.&&1.& &-01 1-&&-.1120-&&10& &-1 1.,&&,.01 10-,&&1,& &.1 10,&&+-./001100/.,& &0,& &,00101 1.,&&0-& &,00/,&&0-& &-00-,&&0/00.& &-00/,&&/.&&-//0/00/00-,&&/.&&*-//.,&&/.&&-//-+&&/.//.&&,//.,&&.&,..//-+& &.&+..,& &.-&&+..,+& &-&+-..-+& &-&+--.-+&&-,&&+,--,+&&-,&&+,--,&&,+&&+--+&&,+&&+,,-*&&,*&&+,,&,&+,,*&&+ &*,,+&&+*& &*++,*&&+*&!&*++&+*&"&)*++*&&*$&*++*&&*)&&)*) &*+*++*&&*&) *)&&*&_)1234467887654210)()1468998989989989987431)#)1378998998989899841))13899898989 9831))2799899899899899899872))3898988998998998998989940))14998898998989843211234799889989941))149899898899620) )1488940))4998972))15899889892))299898899851))13889989981))1799898940))2998994))3989989941))12467787521))49981))07988989871))1579989989873))17993))3993))138998998998993))4998995))699889989971))15998998992))2996) )1994))388998557898994))1998998) )298998992))179899831))148997))1998)499898991))39981))1997))18989898) )58899891))69982))188986))19987) )699891))6990))39983))29986) )799898990))899891))23469951))4998993)1) )7899891))7998991))14899730))189889983)3) )78783))6899882))1211)39981)71) )7887885))4778874) )177887886))73) )688788781))2882) )1788782))760) )476776774))0778878721))027887850))771) )2776776766772))27767753110112577861))73) )1676776771))157767767 76772))655/) )46676761))05776776776776672))6551) )1665661))0466767762))5662) )135665661))1256656656651))54) )166565665662/))025656566566420))50) )25 540))/122454654310) )4550) )044554554554552/))51) )0455454545540))41) )144 5451/))43432) )134430))43442))1443433441/))3).143443443434434430))23)13340/))32233))03223320))23))/3233223232231/) )21))/2232232233233231/) )2)/220/) )21221))/1212212121221/) )10)).12121221212121221.))0110)).01121210/))1/))/10))0/))/110110110/))0.))/00101101010.))/00.)).00)/0/)).00.))/ ).00/00/00/))/.) ).//0/-)).//-)!).//.)).#),.//.)).-)#)-../././/-)).-))-.-,))-..-))-),-.-..-..- ).-))_۸(ܸ#޸ݸ ۸ ۸ ݸ ۸  ܸ޸۸۸ݸܸܸ ۸  ۸ ޸޸ ܸ ۸ݸ ܸ۸۸ܸ ޸ݸ۸ ۸ݸ۸   ޸ ⸸۸ ۸۸߸ ޸ ݸ ׸ ܸ ޸ ܸ  ߸ ݸ ׸ ظظ ۸۸ ۸ ظ޸ ڸ߸ ָ  ٸָ ظ ո ׸ Ը  ָ ߸Ӹ ޸Ӹ ۸ ѸٸҸָظԸԸѸ иϸ׸ָѸҸ ոϸ ϸ͸! Ѹ# ϸ͸#͸ʸɸ͸̸˸ ͸_!zԢ_(d#F(k! ÃR7#:h   d U} !H3(0#\#  yv *, F OT>.C 3  % O.  &wd <  b R Q  {:&U^ 4 d W'} } a&  k f *  WnޮU k   ZW  Y[`u \c B , o13{]{ J@!!##J;vcyoW&-..001233211/.--&(&-/134430.-&#&-/24430-&&-/34430-&&-2443.&&/34 4/-&&-04 430/.--./2440-&&-04 41.-& &-03440-&&/4 42.&&-144/&&.4 40-&&-/443-&&-244/-&&/440&&/440-&&-.0123320.-&&0443-&&-3442-&&-03443.&&-344.&&.44.&&-/34 4/&&/440&&1443-&&-044.&&.442& &-440&&/4431013440&&-443& &.44.&&-3443.-&&-0442&&-443& &/44-&&/443-&&-443&&-443& &044-&&144.&&-441&&-442& &244-&&244-&&/44.&&.441& &244-&&344-&&./01440-&&/440& &344-&&344-&&-/3443/-&&-344.& &344.&&244.&&-..--&&/44-& &3441&&0440& &-3441&&13 3-&&.344.& &-244.&&03 30&&-233.-&&-.331-&&.3 3.&&.331/.--.133-&&-3 32-&&-033.&&02 2-&&-12233/&&-2 2-&&-022.&&-02 2-&&-.1221-&&-212 2/,&&,.12 20.,&&.1 10-&&-./0110/.-&&,011.,&+&,0110,&+&-001.,&*&-00/,&*&.00-,&(&*-00/,&)&-//0-+&(&,//,&(&,//-+&'&,.//.,&'&+.//-+&&&+-..-+&&&+-..-+&&&+-..-+&&&+,..,&(&,--+&(&+--+&(&+--,&)&+--+&)&+,,+&+,,*&*&+,,+&*&)++,,*&*&*++*&&)**++*)&&*++*&&)*++* &*++*& &W)123455787887654211)()01357998998998531)#)1379 989899841))02899899899899898989841))16998988998989989899872))27998998998988998941))1489989988989853211011234799851))14899898998989621) )14889941))3998998899862))15989988993))289989989941))139989981))17998941))398994))3998941))13467877531))489981))17998998971))1579989982))1799893))3998993))04889989899893))4998995))69989970))1598998998992))299896) )198998899894))39889857998995))1998898) )28898992))18998730))14996))098997) )48998991))39981))099898))1998998) )5988991))5993))18996))1997) )6998981))799891))3993))28996) )6998991))89890))1446898951))3998994) )7998898891))898990))148998731))18988993) )899893))6992))1211)389981) )798989984))4989984) )18896))6878877878871))2898992) )1799892))388785))167787830))0278778860))288782))38788778631101358878877881))17 71))148788787882))47 761))15766767 78773))167 761))146776776772))1466752))1256676776776651))06656656630))025667676766742/))355656656556550))123556655321))04665665665662/)+)05540)+)1554554552/)*)245545544545540)*)2445451/)().14430)))14 4341/)()0443 420)()03 343431/)')0323323 320)')/233232332322331.)&)/1232232323233231/)&)/1221/)&).1221221/)&)/01211211212120)()/1 12122/)()/11/)()/00110110110)))/11011011011/))).00/)*).00.)*).00/0 0/+)-//0/00/00/.)*)-//.))-./..- )-//.//.))- .-))./..//.//.//./.) )W۸(ܸ#޸ݸ ۸ ۸ ݸ ۸  ܸ޸۸۸ݸܸܸ ۸  ۸ ޸޸ ܸ ۸ݸ ܸ۸۸ ޸ݸ۸ ۸ݸ  ޸ ۸۸ ߸޸ݸ ݸ   ޸ٸ ظ۸ܸ ظ+۸+ָ*ڸ* ָ(ٸ) ո( ظ( Ը'׸' Ӹ& Ӹ&Ӹ&Ҹ&ڸ( ָ(Ҹ(ظ)Ҹ)ظ*и* Ը*ϸ* θɸϸ͸ и W!zԢ_(d#F(k! ÃR7#:h   d U} !H3(0#\#  yv *, F OT>.C 3   O.  &wd <  b T R  |;&U`5 f Y(~ b& mh +  YpV +[Y+*Z*(])(b(x']d'C &-&&&((2()|_)}*K***$Lye|r &-./01123-&/&-4 4/&/&04 41&.&-34 4-&-&04 4/&,&-34 41&,&044-&*&-344/&*&0441&)&-344-&(&04 4044/&'&-34 43-3441&'&/4 40&144-&%&-34 4.&/44/&%&/4 43-&-441&$&-34 40&&244-&#&/4 4.&&044/&"&-34 43-&&.442&"&/4 40&&-344-& &-34 4.&&044/& &/4 43-&&.442&&-34 40&&-44-&&/4 4.&&244/&&-34 42-&&/442&&/4 4/&&.44-&&-34 4-&&-344/&&.3 32-&&043442&&-23 3/&&.33-&&.3 3-&&-33/&&,12231-& &1331&&.2 2/& &.2233-&&,12 2-& &-22/&&.2 21& &-1221&&,01 12.& &/22-&&-11-& &-112.&&+01 10& &,110&&-11.&&/11-&&-/00,&&-11.&&-00/&&,00-&&-/00-&&/00,&&,00,&&-00-&&.//.& &+,-./00/-& &,//-& &,-./ /,& &.//+&&-,,-.//-& &,//.&&+,,-.//.*& &-..,-../,& &+.0.-& &-..-..-,++..*&&+--+,..-,++&&*-..+&&,--+&*--,++&&,..,&&+--,-&+--,+ &+--+&&,--+&&,- -,++&-+&&*,,&*-,-,--,++*&&+--,&&+,,*&&+,,+*&&*--,+&&*,,+&&*,,+&&,+&&+,,*&&+,,*& &)**+ ,+&&*++*&&++*+,*&&*++*&&*+"+ ,*&&)1012233446781)/)19898998993)/)5998996).)189989981)-)598998998992),)189 96),)49899898989981)*)189 98983)*)398899889898985)))1799899891)()4899899889498998993)')1788989818989986)')3889898998994)689981)%)1898998992)399893)%)498998971)18899896)$)1899899894))6998991)#)398998992))498893)")17989989989871))2998995)")39989983))078891) )17998992))5988993) )3989989989971))398996))17998984))1998991))299889982))699893))17998998970))3996))39989989884))188998981))0788998992))17998993))37878 871))59799896))1787877883))2887881))288787878788781))187883))06766767767761) )48878876))2776776773) )3771))057 76770) )0776772))16 675) )1677675))/5665665662) )2661))16656651) )15662))/4556565656564) )05665664))0544554552))3655661))0355455455454550))1552))15545453))04545541))13441))35540))044344344/))1442))24434343443) )/012443430) )/3 341) )/0124334 40) )23323 3/))0/012334341) )/332332332))/012332322323 3.) )122 30123323323323323323/) )/2232332332231) )022122102212212210//22.))/1221/02 21221221210/.)).22/))011/).1 121212210/.))0220))/1001101).110// )/1121/))011011/))011011010/..))011/)).00).101010010//.))/110110))/00.))/00.).110/)).00/00/)).00.))0.))/0.)).00/0/-) ),.-../ 0/))-//.))// ./.// 0/0/0/00/0.)).//.))-/./.))ݸ/ / . ݸ- , ,޸**)޸( ' ' ޸% % ۸$ ޸# " ۸" ޸  ۸ ޸  ۸ ߸ ۸ ߸ ߸ ۸  ݸ ݸ   ܸ۸   ۸ ٸ۸ ޸ڸ ظ ۸ ܸ  ظ ոݸ ϸ  ׸ ۸ ϸҸոԸ Ѹٸ۸Ҹ ԸҸ ѸӸ׸Ѹ׸ѸиԸոҸѸи͸ Ըϸϸϸ ϸ5Wv:/\ / .U >- ,M,A*F*)?E( ': 7' H%3 % U$. K# "( " O # z  ?R s  qU m   Y d+   Z Z Y  [R  \J@]y@ k q *~ ] 9@ g W i] `0 dnVg]{ iO`m Oe o]G:rWu#<@^t 1I]q80F[pB.]&)&()(&&())(& &()) & (&)(( &)(() & (&( &( &'((&( &( & '&'(('(& &(& ('& & '&' &'&'(( & '&' &'&' & '&' &'&' &'& &'&'&'8&'&'&''&E&)+,,),+) ), )+,+,++)-,, )-,, ) +)+ )+,,+, ,+) ) +)+ )+,+) )*++)+ )+) + ) *)*++*) )*++)+ ) *)* )*)*++*++*) ) *)* )*)* )*)**)*)**)*)*)*,)*)*F)ŸŸ ȸ ĸŸ  ø¸  Ÿ ¸¸ ĸ  ¸           7qrE [ d  Vlg  IS 5vXui <8:  /  #  gg l~FG  1ab  i#  #zz [>ZZ?Z s# %[jYQ GH*Ks=5 IXP CQ5P#.!AY+Czlj<#%Lp`7& )&()) &)&)*&())(&&()) &())(&& ) &())(&(())(& &)& ) &()& &())(&&()) &(&(& ()(& & (&(&(& ( &'( ('&&(&(&( ( & '&'&'((' (& '&'&'& '&'&'&'&&''&'& '1& '&),-,-,,))+,--, ),--,))-)+,,), ),-,--,)),-- ) ,)+,, ),),- )+,,+,+-) ),+)) , ) +,+,))+,,) ,+) ) +)+)+,+))+,,+,,+) ) +)+)+)+ + )*++*+)+)+) *)*)+) *)*)*) *)*) *)*))*) *)ɸǸ ɸƸǸ Ƹ˸ƸƸ Ǹ ɸ ĸ ƸŸŸ ø ¸ĸø ¸      . q  1 UP   8 S7Z c  a h^Qa . O+ y(O&v kK M 1J( /SkEkQXa}WVp }ZWD6 F Ú !  ,/#DG', և0,!Zն[$*)& &)* *)&)**&)(& &)*)* *)&*&)& &)&) *&)& &())())())(&&)&)(&&())(&&)&(&())(&&())&( &(&()(&&(&(&'((&(&('&&(&(&(&'(&&'&'((&'((&'(&& '& '('(&&'& '&'&'& '&'-&'=&'&&-,) ),- -.--))-.--.-..-..-..-.-)),+) ),--)-),) ),--,)),--),) ),-,,-,-,--,)),--),+)),),-,,--)+,,+)),)+,,)+,++ )+,,)+,,)+)+)*++)+,,+, ,+))+)+)+)+)+)+)*++)+)*+))*+*)+)*) *) *+*))*) *)*)*) *)*0)*)*)*)**)ɸ ɸθø ɸǸ ɸǸ Ƹ ĸǸ ɸĸƸĸ Ƹ¸øŸŸø ø¸¸¸ø    , q % \ "     q:'m,P ! I2 4 ]i/ &P ` DQn $DE Q 8k f?zߪO9 -"0 {I T ( - 2|L#&B9#Su v$Ob *+\sA &)* *)&&*+*+**+ +*&&)**)&&*&)**)&&)** &)&&)*)**))*)&&)** &*&&)(&&)&)** &)*&&())(&&)&()) &)&())(&&())&())&())&&(&(&)&())&)&(&(&(&()())(&&())&(&(&(&(&(&(& (&(&(&'&'('&&'((&(&'& '& '('&&(&'& '&'&'&'&'&'&'&'&';&'.&'&O&)-. .-))-..),-..-..-..--.--)).)-.-.-))-..-..-.-) )-)),--,-,,--,)),- -.-) )-)),--,)),--,)),-- ),-)),),--,))+-- )-), ),),-,--,)),--)),)+,,+)),,),),)+,,+))+,,))+,,)+,,)+,,)+)+)+)+,,+,,+,+,,+)),)+) +)+)+,)+) +)+)+)*)*++*++*+))+*))+)*) *+)) *+*))*++)*)+**)*)*)*)*)*))*)*")*)** )*.)*)O) ɸ и ɸ ˸ ˸ɸ  ̸Ƹɸ ͸Ƹɸʸ̸ǸɸʸŸŸ Ǹɸĸ Ÿȸ¸ĸ ĸǸ ø ¸ø   & ^#   ,s;(o-R " &K2 6 !`k 0 (R b ESp %FG S 9m iA}Q; /#0 ~ J V  N) / 2}M#'Cq9#Su v$Ob *+\sA )++*&&*+/+&*+*&&**+/+*&**)&&)* *+*+ +*&**&(* +*&**)&&;*)&&)**)& &)**)& )!&)**)&)(& &()**)(&&())#&)(&())(&"&())(&($&)(&(%&())(&(%&('&'('&&&('&''&('(&'('')&' &'&'&)&'9&'&-.//./.-))././/./%/.))-..) ././..//.//./.././/.//-)..-))-.#././/.//./-)-..-))-0.)--)-..-.-. .-.-..-..-,)),--!)-..-),--,) ),--,--,),--,--,-,) )+--,+))+,,#),--,)+,,+)"),--,--,+))+,,+)#)-,,+)+%)+,,+)+%)+,+,,++*))+')+*)*+*++*)&)+*()+*))*+**))*9)*:)*)̸  Ѹθ̸˸͸͸ θ˸ ɸ˸ ɸɸ ǸƸ ĸǸ"ƸŸ"ĸ$¸ø$¸¸$&'( ((*+,:A2..BS0]00!? \t Yi " FF"P {# '$ $F % ;V& "e&> (+( )5. d* *J+-ي:;6n8-v9;J3&)&&)&&)&&)&)(&&(&('&&(&('&&'&'&'&'&&)-)),)),)),),+)),+))+*))+)+)+*)*)*)*)ɸȸȸǸŸŸ¸\ [ Z YK/U* C\ Drop Shadow     { C\-C\io\xK[`ݰ& ) $2FORSTUUTSQMG>2&  4iygWI:* IökS=) R˸hJ0 T ̳qN/ S ӸmF&R ѫҳ[2Q xVZtȞl= O [*"3WԫvBN ޞN ,hڰx?LؗGWۮp6JҎAPףa) G˃9M̎IDv0 Io/ Ai' DґG>^ >b$;W7|57S 0uՒD 3zO (jߠN /tܜK `S *m֔EXT&gϊ>TU!a~6QT[q- ORWe$KݝLU[FӏBSUAy3 RP;a$QݝL 4{חKOؖG -qˇAMҍA &hΑT)K˃: &gṊ]8 Ix2 6xǣxM* Gl) ,]ڻ_4 Da!0\ˠm=  AX;gԪt@  >T/P{ٯw@;\22Jm۹{ڮr:7{drΧyN:J{اh1 4{̯ٺd; IқZ&  1v wN+ $XNJH -q~X7 4sr4 )lͷ{Y;"OמW"&gɷlP7!  3w~;"a߼jT?+ ""  [ܤ["\U:) ;X[D'G}8X^( 8oV*8ڞSUޟO )aַ~? -qn- SٗHL};$eΊ?QԐB8vќ[& ]ݡROΈ= &]٫k3[f& LȀ7D߷y=^y3 Jv1  -jÇI$dϊ>Gm* MϙW%  +oѪؖGEd$4sجj05|ڨmE9FnޟMB[ Uݼ~@AʇCEQ?T9{ɓQ P{57~S=ߠN"YӨe, &fʆBDS:ڙI9|ּ~=:ۦjB6ClR7ՒD!X˘T! Uϧ|O 4{ϊ>7zаo26wܜK 1vʂ9 U‹H "W֓D+  % *8EMQTUUTRNF<.  .BVl񩦠r]I6# 6Rp;}_B*  3TyīhE(&HqͰb< 1[˨}Q+ :iݾa5 @s͢m< AwիuA  >vڰxB 7p ܱw> .e"ۭp8 $X$צg/F%ћY& 3q NJI "W  t6= ۻ ء[%  &a ŠaTWdzdžBA ܹͬs8$4Hcg*  %` ܺeFCm{6&>bΎF;ԪyL*!PˎB +Sg) VСk= =ҠR6v͊B 0sПd4 -pԯc$>^"DԢe2[ӽx2  &^|6Z۪k4JʍBCؘL .r{=9ϜO.jӼc>ۡY#  )iƞTOС}|MٝV! NH7wԣgBMՓ[u:0YhQ+Uڬn7(] )lצh3'-! *hڵx> =5}ҟb.  &]G  &d?Ι\*:ftJ! IGѮɓV&  />6 5{LyjČN    *iOґO6Q{<  7nRt3%OЕM #6CLWlS]! %QˆE  $OvTښK &R^+  6uTΉ> %G^R0 8}Tw1  %  +eSh'  W ! 2`̈> +ki( %CUJ+ $& -Zk*Oȁ9)TV&  @\^@*ZךO5yٛP-YͲu5=ts:9{y5 Xo<9_دn0 Nͣ`' 9~ۡX )  " &3@IORTUUTRNGPTf%Tj)9cR&#R٘HUv0 Tp-7dS+1n̅;UЌAPˆ?;XmtlX=$$Ql+ TߦZ Gݥ^)#.1,!!E۟RPz77ȍT-)J{~9Hڡ\& %`hK8+$"'3FcؠY";NJK@αnc`hxt6 *k}C&XɼH%P޲xC!2eR# 56{ܱ{I(!8eٷR' E WݷT2'6YŢwI$ T6wc>+/Fgλ\8 d$NͥwN2(0D\upV;$v0  +bڸa<&$1?JPSTTSPI=- <9tʣvL,  EEٸ_8 K "OʣvK)O &Tٸ_8 R(VʣvK)S'S ٸ`8 T  %N ˤwL)T  "I} ڹa9  T  Dv ˥xK& S  >o ڸX, Q9i Ɩ^. O4c ˘],J/] ʕX' D+X ƍN <(S ~?x2 %O ެh- g'  #L ГNW !I t3H H ՘O9 J n- *   "O όB    &X W "2AJPQPI>./h m+  "=\wpS5 ? Ȁ7.UκuK& !VԐB0a׸U(6xۛJ *^ÎR"  XO)  " &3@IORTUUTRNGPTf%Tj)9cR&#R٘HUv1 Tp-7dS+1n̅;UЌBPˆ?;XmtlX=$$Qm+ TZ!Gݦ_)#.1,!!E۟RP{88ȎT-)J{~9 Iڢ\' %`iL9,$"'3FcؠY" ;ȋKAβoc`hyt6 *k~D&XɼH P޲yC!3eR#  7{ܱ|I("8eڸR'  !WݷT2'6ZƣwI$  7wd>+/Fgλ\8 NΦxN2)1D\vqV<$ +cڹa<' %2@KQSTTSPJ>. 9uʣvL, Fٸ`9 "OʣvK)  &Uٸ`8 (VʤwK)(S ڹ`9  %O ˤwL) "I~ ڹa9  Dw ˥xK& >p ڹX,9j Ɩ^.4c ˙^-0] ˖Y'  ,X ƍN (T ~? &P ެh-   #L ДN  !I t3 1 H ֙PN J n-  0p "O όBL   'Y W .n "3AKPQPJ>./h m+ J#>\xqS6 ? Ɂ8 -l.VϺvK& "WԑCI1a׸V)6yܛK ,j *^ÏR"  XOGY-  +$-4;@FJNPRN@').Lbq|V% ).b۾>(PܣV'4up- &QϋA&2tW$O p- $1r ЌA#NX" 0qq. !MЍB! /oXL޳r.  .nʑyэBJpU}Y -lؙS8ar/ I~:%KюC ,kb&7~YGחJ &fs/  +i|6QюCGa#>Z *h֖I ,pt0 E{5YҏD )f`#FZ D֕H 3zt0  (ey4$bҏDC^"M[  'cՓG;u0 Aw2  *kӐD &a]!U[ ?ӑEBu0  %_u1  0uҐD>Z !][  $^ҏDIu0 =s0 7~ҏD #\Y &e[  ;ЍBPu0  "Zq. =ҐD :~ߤW .q[  !YΊ@.hu0  8| o,  $4PҏD VޢU '5CRcx[ 7z ΊA *8GVh}u0 U x="".qʽt0 d8IяDώK4[[  -ry33uɥb) A̅; *mq-Mú?3mǥt/  'ih(,jğ[$ ,_ŒaB9Ba`#$e_$A};*Y֢_--_ؘL!aX#%XY# ,Yʆ??}7]S#.du93_{55{`$ YܜM *UwqH =iʄ==ʈBUהF-<6  ,Nxٟ[) )Zݨb( Rь@   &AeÌZ<2O˄: (@`yÞxΕS! M: $5Jf̟gA4@hգc- JȅJ/-5APc{ƄA?שm6 Hդ|mq}x42vԨp; EҿɄ@>̡l; Bڣg?2>e޿a5 ?̣vΫR, ;дg@! 2sɰmI,  "PȶeH. 'BYl}jR<(  *5ALVbmytfWH8)  #+29?DIMPRSTSROKF@8/&   %:}ИmrJFljEQ}9!XĪďS%  1qݰk/7v؟X!6vȔX) *& OϔO'[v6NΚ], $Jc[:2rw=,JϓN -gۨg19va* O֣kZ}ݪf, >}΍IH÷y51rˣ|> OѓO Q€8NɏN  )]w? ZƂ92sѝ])  2iڭuB  #cƁ8 #\קh2 :qٰ}M),mƁ8-bڬq: ?uݺa>.B}ǂ: 6[٭t> @tʦhnʈF#)Iz45wགྷC Sg) >ԖN!NʯP# A̍G /sw;(LsiF$ :pݩd*  X٧l< "4EOOI=, =n|=;~ԨvL/!.MyċM  !TٷkP=0(# !%.;PmőV& /eϵre^[^er῎W*6i˾׳Q(4aşrE" +PzȩZ5 9Y{Ҿa@$"7QmķuY>& ,>PbrziWD1   #.7@GLPRSRPLF=3( $  *MϾ濁@AR +h4vֲsdblީa&  0uSEOبrH/$#+>^~7%eR )f *ju<.Y֓E _OD8ՖN ,/#8xߠN!`ۛJ (dD{6 @a`>!-hQ 'hӏBBLi' 2lW/6pO 0v7 'bP_! DxR[٘H?k* AR_ Kͪʄ;UޢU &aPg& Fg* 3tˇ?>Iz56x྄D !Sh* "[?՗O!O˰P# A͎G .p 0tw;(MtiF$ :qݪe*  -j X٨m< #5FOPJ=, =n}>H;~ԨvL0".NzċM  !Er !UٷlP=1(#!!&.i4aşrF#  /V+PzȩZ5  $Er9Y{Ҿa@$ 6"7QmķuY>& ,>PbrziWD1   #.7@GLPRSRPLF=3(    *p9:st0 ۞U/FяDȂ@-XZ f03lݮ}`WUUV^yt0 ՖM'>łD$"@{юDz8$K_%  "[Z `)&[όCBs0 ֖K!.ln-  .qюD~89ڞRWZ f)Dƀ9@s0 T Pb%  ,nюCS'*_ґGTZ tLLys0  >s0ҮݢV  +lюCɄ=!RYg( "WS^O:R~|{yxvtrpnmkigecb`^][YWU']Ziq;8蟗}|zxvtsqnmkjhfdca^][YWUTYg˜ТN2Lˋ~}zxwusrpnlkhfecb_^\ZYVUSV[ܭz41r쥏~}{zwvtrqnmkigecb`_\ZYWVSRTYպQ,_ˉ~|zxwtrqomlihfdc`_][ZWVURPRXʹ57䥆}{ywutrpnljigedb`^\ZYVUSROMYʽߥk94Zȇ~{yxvtsqomlihfdba_][YXVTRPNFXr̿ďoE47X[HOڦ~~|zywutqpmljhfdca_^\ZXVTSQOM/X_e>4;OQMZJCk{yxutrpolkigfda`^\[YWUSRPNMUYµp;6=STRuY?HϤxvusqomkjhfdca^]\YXVTRPNMKRXömWS^O:RŽ}{ywvtrpomkigeca`_\ZXWU']Ziq;8螗~|zxvtrpomkihfdca_][ZXVTYg˜ТN2Lˋ~|zywutrpmljigeca_^\ZXVUSV[ܭz41r쥏}{zwutrpomkihecb`^]ZYWUSQTYպQ,_ˉ}|zxvtsqomljhfdca_][ZWVTRQRXʹ57䥇}{ywusronlkigeda`^]ZXWUSQPMYʽߥk94Zȇ}{zwvtrqnmkigfdb`_][YWUTRPNFXr̿ďoE47X[HOڦ~|{xwusronljhfeca`]\ZXWTRQOM/X_e>4;OQMZJCk{ywusrqolkigfcb`^\ZYWVSQPNMUYµp;6=STRuY?HϤxvtsqomkihfdba_][YXVTRPOMKRXömWS^O:RŽ~|{yxusrpolkihedb`^\ZYWV']Ziq;8螗}|zxvtrpomkihfdb`_][YXVTYg˜ТN2Lˋ|zywusrpmljhfecb_^\ZXVUSV[ܭz41r쥏}{yxutrpomkjgfcba_\[YWUTRTYպQ,_ˉ}{{xwusqpnkihfdca_^\ZWVTSPRXʹ57䥆~|{ywusrpnljhgeca`^\ZXWUSQOMYʽߥk94Zȇ}{zxvtrpomkihfdb`^][YXUTRPOFXr̿ďoE47X[HOڦ}|zyvusqpmkjhfdca`]\ZXVUSQOM/X_e>4;OQMZJCk{yxusrpnmjigeca`^\[YWUSROMLUYµp;6=STRuY?HϤxvusqomljhfdba_][YXVTRQOMKRXöm=:9lkifdca_]\ZXVURQPMKJHGEB@?=<986= kigedb`^\[XWUTRPNMJHGECA@><:96531&jhgdba_]\YXVTRQOMKIHFDB@><;9864211< hgeca_^\[YVUSQONLJHFDCA?=<:864211,hfdc`_\[XVUTRPNLJIGECB@><;9753211:fdca_]\ZXVTSQOMKJHFDC@>=;9754311010 eda`^\[YWUSRPNLJIFDCA?><:96531 15  dba_][ZWVTSQNMKJGEDB@>=;975421 16 ca`]\ZYVUSQOMLJHFEC@?=<:86521 13#b`_\ZYWVTQPOLJHGEDA?>=:86531101 1: a_][ZXVTSPOMKJHFDB@>=;9764211(`^\ZXWUSQPMKJHFEBA@=;:865311;,^\[YWVSRPOMJIHEDB@><:9753113Re3^[ZXVTRQOMKJHFECA?=;:854211011A_bb3\[XWUSRPNLJHGECA?><:8753115Va`ce4[YXVTRPNMKIGFCB@><;975421 1011Fa_adff5 ZYVUSQOMLIHFDCA?=;:7643110118Y_^adegh7!YWUSRPNLJHGECB?=<:965311K`\_cdfgij8" XVTSQOMKJHEDBA><;:86421 1010<[]\`caehhkl8" VUSQPMLJHFECA@=;:8643110112P^Z]abXKSelmn:$"USRPNLKIHEDB@><:97531 1@^ZZ^a\MGILRcpq<$#URQONLJHFDBA>=;9864211011014T]X[_`TDC[qORal7&$SRPNLJIFECA?=<:974311011D^WX\`YG>Dz~XVT6$RPNMKJGFCB@><;97532117W[VY^]N<;[aZZQPMKIHFDBA?=<9764311I^UVZ^VA7=ʾjXPNLJHGECB@=<;975411:ZXSW[ZH44]ƽ`POMKIGFDB@>=;9754211N\STWZ`D2BƽYDMLJIFEBA@=;:864211=[VRUX[]R42ƾX8MKIGFDB@><:97532113QZPSVYXXV0.5OƲX*KJHFDB@?>;9764311B\RPTVYTKLL3/5=JxţzXJHFECB@><:9753115UWNQTWVMEIQNM=36=KafTIGFDB@>=;9763211F[ONRUWPDBNmQRG87=PiYJHFDBA?=;:765318XTLOSVSH>@l|YWR><;97532KZLLPTUL=:Lżd\G;QoW1FDC@>=;9854<:866OWIJNQSH73Mº[G<;9ljhgecb`]\ZXVURQONLJHFDCA?=<:86= kigfdb`^\ZYWUTQPNMJIGEDB?><:96532&jhfdc`_][YXVURQNMKJHEDC@?=;9754211< hgedb_^]ZXVTSQPNLJHFDBA?><:864311,hecba_][YWUTRPNLKIGEDB@>=;9763211:gdca_^\ZXVTSPOMKJHFDBA?=;98643110 ecb_^]ZYWUTQONLKHGECB@=;:86531 15  dba^][ZXUTRPNMKIGEDBA?=:985321 106 ca`]\ZXWUSQOMKJHGECA?><:86431 13#b`_][YWUTRPNLKIGEDB@><;97531 1011: `_]\YXVTRQOMKJHFDB@><;9754211(`^\ZXWTSRONLJIFECA?><:865311;,_][YWVTRPOLKIGFDB@><;9753110113Re3]\YXVTSQOMKIHFDB@?=;9764211A_bb3]ZYWUSRPMLJHGECA@=<:8753115Ua`ce4[YXVTRQOMKIGFDB@><:9753211Fa_adff5 ZXVTSQOMLJHFECA?=;:8643118Y_^adegh7!YWUTRPNLKIGEDA@><:875321 101K`\_cdfgij8" XVTRQOMKJHFDBA>=;:85421 1<[]\`caehhkl8" VUSRONLJIGECA?=;:86431101101P^Z]abXKSelmn:$"VTRQNLKIGECB@><;9753210011@^ZZ^a\MGILRcpq<$#TRQPMKIHFDBA?=;9864210114T]X[_`TDC[qORal7&$TRPNLKIGECA?=<:86531 1D^WX\`YG>Dz~XVT6$RQOMKIGFCB@><;9754116W[VY^]N<;[aZZQOMLJHFDCA?><:864211I^UVZ^VA7=ʾjXPOLJHGECA@><:8653211011:ZXSW[ZH44]ƽ`POMKIHFDBA?<;:763211N\STWZ`D2BƽYDNLJIGECB?><:8653011=[VRUX[]R42ƾX8LJIGEDB@><;97532113QZPSVYXXV0.5OƲX*LJHFDBA>=<9764211B\RPTVYTKLL3/5=JxţzXJIGEDB@><:8653115UWNQTWVMEIQNM=36=KafTJHFDB@?<;8753211F[ONRUWPDBNmQRG87=PiYJHGEBA?=;:864208XTLOSVSH>@l|YWR><:97531KZLLPTUL=:Lżd\G;QoW1FDB@><;9764=:97B[LHLNPTP26ºXD=;9ljhgeca_^\ZXWUSQONLJHFDCA?=;:86= kigfcb`^\[XWUSQPOLKHGECA@><:86531&jhgeba_][ZWVTRPNMKIHFDB@>=;:764210< igfca_^\ZXVUSROMLJHGDCA?=<:874311,hfdba_][XVTTRPNLJIGECA@?<;87532110:feca_]\ZXVTSPOMLJHFDBA?=;98642110 edb`^\ZXWUSRPNLJHGECA@><:9743110115  db`^][ZXUTRPOLKIHFCB@>=;9753110116 ca_^\ZXWUSQPMLJHGDBA?><986431 13#ba^\[YWUSRPNLKIGECA@><:974421101 1: a_][YXVUSPOMKJHFCB@?=;:864211011011(`^\ZYWUSQONLJHFECA?=<:874311;,_][YWUTRPNLKHHECB@><;97531 10110113Re3]\ZXVTSQOMKJHFDC@>=;9864211A_bb3\[XWUSRPNLJHGDCA?>;:8753110115Va`ce4[ZXUTRPOMKJGFCBA?<;98642110 1Fa_adff5 ZXVTSQPMLJHFDBA?>;:8643110118Y_^adegh7!YXUTRPNLJHGECB@><:965311K`\_cdfgij8" XVTRQOMLIHFDB@?=;:864211011<[]\`caehhkl8" WUSRONLJHFECA?><:86531 12P^Z]abXKSelmn:$"USRPOLKIGEDB@><;87631 1@^ZZ^a\MGILRcpq<$#TRPOMLIGFDBA?=;:86421 14T]X[_`TDC[qORal7&$TQPNLJIGECB@=<:9743110D^WX\`YG>Dz~XVT6$RPOLKIHFCBA>=;97532117W[VY^]N<;[aZZQOMKJHFEBA?=<:864311I^UVZ^VA7=ʾjXPNLKHGEDA@><:875311:ZXSW[ZH44]ƽ`POMKJGFDB@?=;9853211M\STWZ`D2BƽYDNLJHFECA?=<:875311=[VRUX[]R42ƾX8MKIHFDB@>=:8753113QZPSVYXXV0.5OƲX*LIHFDBA?=;97643011B\RPTVYTKLL3/5=JxţzXKHFECA?><:8753115UWNQTWVMEIQNM=36=KafTIGFDB@?=:9763211F[ONRUWPDBNmQRG87=PiYJHGDBA?=<9764217XTLOSVSH>@l|YWR><:87532JZLLPTUL=:Lżd\G;QoW1FDC@>=;9764<:97B[LHLNPTP26ºXD3EXķǑtH535KUJH]cXVTRQOMKIGFDBadĸo>38XŸiA744FPNeWDHiyUSQOMLJHFEC@\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMKIGEDB?Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMLJGFDB@R8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHGECIYI6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukFCUR@AJ[Zj~iKE6 SX~L4*Zհو82@_edhln^E?BE:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ=CEG%KTRODW_[mö~L5SdõY0-DcbbdQAEGI =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUILOOKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQS=W`aq~XA%W^̿R:0CCJ[cdWMQOG E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;77^Y|˾n=3EXķǑtH535KUJH]cWVTRPOMKJGFDBadĸo>38XŸiA744FPNeWDHiyURQPNLJHGDCA\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNLJIGECB@Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKIHFDC@R8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZIGECIYI6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukECVR@AJ[Zj~iKE6 SX~L4*Zհو82@_edhln^E?BE:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ=CEG%KTRODW_[mö~L5SdõY0-DcbbdQAEGI =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUILOOKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQS=W`aq~XA%W^̿R:0CCJ[cdWMQOG E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;77^Y|˾n=3EXķǑtH535KUJH]cWUTRPNMKIHECBadĸo>38XŸiA744FPNeWDHiyUSQOMKIHFDCA\cqǺp@-&YǺ~H88?PUV|sD@Rr^PNMJIGECB@Zeesƿe?)Y{Ȼ~K4AZY`W=@]vz|sMKJGFDC@R8Sb_j}|M@Xjʽ~K2C[{|=9Jertv{yZHFECJYI6Z]`tsQC6VZ̿~K37ZҞ֭U57QfjlqukECUR@AJ[Zj~iKE6 SX~L4*Zհو82@_edhln^E?BE:WU_r_KH)EXWµ~L5 XqϹI0C_babfQ=CEG%KTRODW_[mö~L5SdõY0-DcbbdQAEGI =P8 $ab_Ǹ~M7 OXķ؟rE3/C>:XcbbdUILOOKcchyĶtC7Wkʽ~M9%;DFTacbdVKNQS=W`aq~XA%W^̿R:0CCJ[cdWMQOG E_\f{uUD@ TXS9 KdbcɺT;`elȼU;YcjʿU<*McexµR=*#^dcruD:+Ka^h{zUA(,1V\_rqPD=-HZXg~eLG4 /5TT]\MH%2!ISP@4;77a ( ( ( ߽( ߣ(k ۉ  k % I !ao' 9ۣq7+  'wő_+_ K}I)  /y}e5O  + A  - c K Q }/ C _ S; /7 CQ]ݧw?7 C /}7ɕa/u C GӡuE %q㯁M C  +_oY- Cga91 C !  # C * C * ? +% ݁/+ )a-[y5 .7՝m71 %oᅨY' 3CӡwC6 +SU/B@?>;99TTGILOQSP:0CĸuS==SvmXO.A?><:HYJFJMONNV=)3:PηaN7=SwӺy]_JA>048>MeY1.@TycHDYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;TDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2ADHJH@:-1N³cM8E^`[S2.JOTTP% /*5;KƪXE :E^˺y]^J ES> -*36=LlX6 ;F^»١he4' *',79;E_wY=G_ѫh`KBE;&:F_hS >D[{ü|kc^ D+;F`\K8BPfxtc`X%:";G`ߵW@-CERfx}j\_F00LPST26=IcƉ_aO!GI6=Idgd" 6>Jdګi\ 7?JcϿxeY&1?E]xtddL':BPev|i^aA (/BEPdvt`[V')#=HNbuwgXZE* 5KN]\UT-,(HPSF0A72+CA?=;9:TTGILOQSP:0CĸuS==SvmXO.B?><:HYJFJMONNV=)3:PηaN7=SwӺy]_J@>=?WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdL?=NYGEHKMKEER_NN>048>MeY1.@TycHDYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;TDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2ADHJH@:-1N³cM8E^`[S2.JOTTP% /*5;KƪXE :E^˺y]^J ES> -*36=LlX6 ;F^»١he4' *',79;E_wY=G_ѫh`KBE;&:F_hS >D[{ü|kc^ D+;F`\K8BPfxtc`X%:";G`ߵW@-CERfx}j\_F00LPST26=IcƉ_aO!GI6=Idgd" 6>Jdګi\ 7?JcϿxeY&1?E]xtddL':BPev|i^aA (/BEPdvt`[V')#=HNbuwgXZE* 5KN]\UT-,(HPSF0A72+CA?=;:9TTGILOQSP:0CĸuS==SvmXO.A@><:HYJFJMONNV=)3:PηaN7=SwӺy]_J@>=>WQEGKMNJHLQ<+36?MzӫY?/?Tyƽ՟hdL@=MYGEHKMKEER_NN>048>MeY1.@TycHCYMCFILLEACkuTUM=8:BWxY!0@U{Ϟtc;TDCGIKF?>O\XW=5CY}}X1@Sqȴxgd2ADHJH@:-1N³cM8E^`[S2.JOTTP% /*5;KƪXE :E^˺y]^J ES> -*36=LlX6 ;F^»١he4' *',79;E_wY=G_ѫh`KBE;&:F_hS >D[{ü|kc^ D+;F`\K8BPfxtc`X%:";G`ߵW@-CERfx}j\_F00LPST26=IcƉ_aO!GI6=Idgd" 6>Jdګi\ 7?JcϿxeY&1?E]xtddL':BPev|i^aA (/BEPdvt`[V')#=HNbuwgXZE* 5KN]\UT-,(HPSF0A72+ k ! # O c ] M I ۣk+ y+eÑ]+  u!S{G ]7͗e3 !'w糅O#  } } Ok; m ; +7#  a A  M 9߫ 5 y)Óci y'M EyIG i yћk7a1A u_빉U% A y9ۡs?A % '{]+ A sOyqIA 1##C 3&% )' a(U˗e- ( e鵃O# )I՝m;+/kY' /!aաwA19]W- *>0BOSSA-1.9.1/res/BossaRes.rc000066400000000000000000000000671333742133700152420ustar00rootroot00000000000000BOSSA_ICON ICON BossaIcon.ico #include "wx/msw/wx.rc" BOSSA-1.9.1/res/ShumaTechLogo.bmp000066400000000000000000000424661333742133700164060ustar00rootroot00000000000000BM6E6(  E                          )28<?@>;6-"  $$  $$ '2:=:2&%$  &,++*!&!  ,4,  .<BBBBBA>7*  ,6;><6-%$  $$  6KX^aba`^YQC2*>>**>>+3HV]^]VG3".?>*  +BJHGF:$#9B6 .MZM..Nbhfcbba^R>%,?OZ^_]VI6#.?>**>>*,LeookgeefjjeT;" 8SS88SS:" 4NbhgfhibO:2AUT::V`ZY\R9 9RVB$ >fxf><bwvlebba^R>'2K^ijheb^R?+(<TS88SS88zͰ˹999jjuqZ9^^?  ^^C+.ϏajbNb`D+&+*&bdcQ8'! 'w^B! sF  8+/***Uٶ}@4&^^?  ^^?tsQ,bbB  bbG2۬ʩaj]geL:?LL>f`njZLFFL]: wI  %w#bbB  bbB k6QQQUUU0tc:ceG% feJn@@@c55iejhSIWjiVgoIIIkp~zpii222~///T. xI  eiM- l񾾾WGGG'777.d cfG% ecB V666 nA"fmU6&!&mhKeI&filk,,,gyejfոƣizpppH"  xI  fnV8&! vvv+---e9  fmU6&!&mfC  VnA"lzkVHDHznN^^^cD ;ejnozjmfwwwmb9 xI  lzlVHC@8*nN+ lzkVHDHzlE  !/Ie:qpfcfrOibB djouoirgFvR+ xI  qpfb^R>&fJ& qpfcfqF  (6FYUUUyR,qpfcfrOdbB  djrdcwiE~VdZIڼcB  xI  qqgb^S>&<<>>^daI. mfC ,JgDDDش/ beG% edJcbB  cjtO HsF >Qnc>  xI  goZ>.(&$Zf]I6*%%((#ceG% ebB $G{   ^^@  ^`G_^?  _f|||lCrkrF oooeUUUDDDX1 xI  hvjVJECA9*z J^f`VMIJKG:*^^@  ^^?|||Rf""" SS8SU?US8UZXXXZ4[[['ߣ}f> lۥƶjF#  xI bwvmfcb^S>%nnnJZceeddcXD.TS8SS8:Ƿv<<<& >>*>?/?>*?DZ?"]M.L/ xI Mbgfcba^R>$CױCCC^Y...iuuuN:&>>*>>*666q:$$ $$%$ %'ڧ2#j6- EEEB*  yJ! 7* =/"$$ $$ a:     N 5  |O&   kn   lM5'##'.34*  %[8%  +++pwteUJGHLRVRB' *7>ABGpVGBBA?8, ^jliedefihhh^G*$>R^abe}mebba^R>$ۮ}}}t'''a_$$$h]]]~̿K7 $>R^abcwtmfcbba^R>$++7* VV   BOSSA-1.9.1/res/ShumaTechLogo.xcf000066400000000000000000000203301333742133700163720ustar00rootroot00000000000000gimp xcf file BBBgimp-image-grid(style solid) (fgcolor (color-rgba 0.000000 0.000000 0.000000 1.000000)) (bgcolor (color-rgba 1.000000 1.000000 1.000000 1.000000)) (xspacing 10.000000) (yspacing 10.000000) (spacing-unit inches) (xoffset 0.000000) (yoffset 0.000000) (offset-unit inches) gamma0.45454999804496765C  !S     Qgimp-text-layer5(text "S") (font "Lucida Console Semi-Condensed") (font-size 34.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode fixed) (box-width 19.000000) (box-height 33.000000) (box-unit pixels) !!sssvS˥yF( 9.Zx8 k  %U (NR^ ' <^ & -  8Q]V!&l |']st Drop Shadow        "##" $3?HMOOMIB6&  1J_mtwyywtn^E'5Xv~}~vY4*T~~j]YZ_glgR1=p`B1,,19@A5!JyI' !P{I%   Lb=& ?ukQ<, -Xr^K9( 7]lU;$ 3PllI( &:PeztG" #2DXog5 );Uy~F /TO   !ExO  &+'+O~|F,GURF:1-.7Kke5:`y}ui_Z[crqG" 7_~~~~iJ*'D^nvyzyxuoeT>&#3?FKOPNJC8*  ##"    T     JQgimp-text-layer5(text "T") (font "Lucida Console Semi-Condensed") (font-size 34.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode fixed) (box-width 24.000000) (box-height 29.000000) (box-unit pixels) : N ^ <Drop Shadow#1     H l  ,,,  #%%&%# 4ENQRRTVXZXVTRRQNE4 -Mguyz||zzyugM--Mguy{~~{zyugM- 4ENQSYk²kYSRQNE4 #%'.FrrF.'%%# 0cc0   )]])   '[['  '[['  '[['  '[['  '[['  '[['  '[['  '[['  '[['  '[['  '[['  '[['  %XX%  !MM! :`p`:"7A7" *ECH     ZSgimp-text-layer7(text "ECH") (font "Lucida Console Semi-Condensed") (font-size 24.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode fixed) (box-width 42.000000) (box-height 25.000000) (box-unit pixels) **  gإ_ : =Y>  q  W      `  }   Ly. #\ H pԛL/Drop Shadow#2     Z //999    $%%#  "!    "9KRSRRQNE4  %5AJMLG;*!----9`z|zyugM- 4K_ltwvpaH/(9NM44MM4 K{|zvhN.9Xp|~~}}znU:4LihF  FhhF  $Sk\VTQG5 5Yuxk`[\^YI56TvvP%  %PvuO#  %TpM92/-&(Mqt[C4..22,%0V|~Y..Y~{R%  %UqN91/*!7a}y[9!*UjD/)/DjT%  &Vm\VRH6! CnkC!'VkZUZkV&  &X{vhN/&Kua4 &X|X&  &XzugN/'Nx]0 &X|X&  &VkZTPF5 $Lvb6 &VkZUZkV&  %TkF0)&!EqoG# &TjD/)/DjT%  %S~`8 :ea>$)T|Y..Y~|S%  %SjF0)'&%!.Rw|bI8.,-,&!.UzzS&  &SzzR%  $SjZTSROF6&&;^|re\XWPA03TvuO#  #OuuO#  Kz~{zyugN1%>^v~zugO62KihF  FhhF :a{|zzyugN.!7Ocpvwtl[C,'9ON44NN4":KRSSRRQNE4 '7CJMKD8'!.--- $%%# "!       <HUMA     Tgimp-text-layer8(text "HUMA") (font "Lucida Console Semi-Condensed") (font-size 24.000000) (font-size-unit pixels) (hinting yes) (antialias yes) (language "en-us") (base-direction ltr) (color (color-rgb 1.000000 1.000000 1.000000)) (justify left) (box-mode fixed) (box-width 60.000000) (box-height 19.000000) (box-unit pixels) < <ttt=3 f j4gQY?,,& 3 +hg Y}LM ? ϝg   /3`\3YwGvE gsTLYQ>Drop Shadow#3      Y>m>}          ----"".-.1-/Hptu{G  %TjD/)/Dj^HYz~[/ /\surl~ip_JZZ+ %S|~Y..Y~\DSug?!"@h~mqh[mkYgfXli9 %RzzS&  &Sz{Y>IlxZ@7A[ytck~_HO__NH_ogxq_WW_rtH  #OuuO#  #OuvT6:Zzxhbiy{bRazxU6/65/6Vzvr}|eF1)(1Ee}vR) FhhF  FhhI*(AbzzcH>QjiH''IlxqosgG' &GflS-4NN44NN6&@ZktvtkY@+'9ON5  6R]ZYXI-,GRC'---- 1?ILI?0  .-07664)  '0)      !        BOSSA-1.9.1/src/000077500000000000000000000000001333742133700131665ustar00rootroot00000000000000BOSSA-1.9.1/src/Applet.cpp000066400000000000000000000046541333742133700151300ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "Applet.h" Applet::Applet(Samba& samba, uint32_t addr, uint8_t* code, uint32_t size, uint32_t start, uint32_t stack, uint32_t reset) : _samba(samba), _addr(addr), _size(size), _start(start), _stack(stack), _reset(reset) { _samba.write(addr, code, size); } void Applet::setStack(uint32_t stack) { _samba.writeWord(_stack, stack); } void Applet::run() { // Add one to the start address for Thumb mode _samba.go(_start + 1); } void Applet::runv() { // Add one to the start address for Thumb mode _samba.writeWord(_reset, _start + 1); // The stack is the first reset vector _samba.go(_stack); } BOSSA-1.9.1/src/Applet.h000066400000000000000000000050771333742133700145750ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _APPLET_H #define _APPLET_H #include #include "Samba.h" class Applet { public: Applet(Samba& samba, uint32_t addr, uint8_t* code, uint32_t size, uint32_t start, uint32_t stack, uint32_t reset); virtual ~Applet() {} virtual uint32_t size() { return _size; } virtual uint32_t addr() { return _addr; } virtual void setStack(uint32_t stack); virtual void run(); // To be used for Thumb-1 based devices (ARM7TDMI, ARM9) virtual void runv(); // To be used for Thumb-2 based devices (Cortex-Mx) protected: Samba& _samba; uint32_t _addr; // Address in device SRAM where will be placed the applet uint32_t _size; // Applet size uint32_t _start; // uint32_t _stack; // Applet stack address in device SRAM uint32_t _reset; }; #endif // _APPLET_H BOSSA-1.9.1/src/BSDPortFactory.cpp000066400000000000000000000056451333742133700165110ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BSDPortFactory.h" #include "PosixSerialPort.h" #include #include #include BSDPortFactory::BSDPortFactory() { _dir = opendir("/dev"); } BSDPortFactory::~BSDPortFactory() { if (_dir) closedir(_dir); } SerialPort::Ptr BSDPortFactory::create(const std::string& name) { bool isUsb = false; if (name.find("U") != std::string::npos) isUsb = true; return create(name, isUsb); } SerialPort::Ptr BSDPortFactory::create(const std::string& name, bool isUsb) { PosixSerialPort *p = new PosixSerialPort(name, isUsb); // Needed to avoid upload errors p->setAutoFlush(true); return SerialPort::Ptr(p); } std::string BSDPortFactory::begin() { if (!_dir) return end(); rewinddir(_dir); return next(); } std::string BSDPortFactory::next() { struct dirent* entry; if (!_dir) return end(); while ((entry = readdir(_dir))) { if (strncmp("cua", entry->d_name, sizeof("cua") - 1) == 0) return std::string(entry->d_name); } return end(); } std::string BSDPortFactory::end() { return std::string(); } std::string BSDPortFactory::def() { return std::string("/dev/cuaU0"); } BOSSA-1.9.1/src/BSDPortFactory.h000066400000000000000000000044731333742133700161540ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BSDPORTFACTORY_H #define _BSDPORTFACTORY_H class BSDPortFactory; #include "PortFactory.h" #include #include #include class BSDPortFactory : public PortFactoryBase { public: BSDPortFactory(); virtual ~BSDPortFactory(); virtual std::string begin(); virtual std::string end(); virtual std::string next(); virtual std::string def(); virtual SerialPort::Ptr create(const std::string& name); virtual SerialPort::Ptr create(const std::string& name, bool isUsb); private: std::string _empty; DIR* _dir; }; #endif // _BSDPORTFACTORY_H BOSSA-1.9.1/src/BossaAbout.cpp000066400000000000000000000042721333742133700157410ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaAbout.h" #include "BossaApp.h" #include "wx/version.h" BossaAbout::BossaAbout(wxWindow* parent) : AboutDialog(parent) { BossaApp& app = wxGetApp(); _bossaBitmap->SetBitmap(app.bitmaps.getBossaLogo()); _shumatechBitmap->SetBitmap(app.bitmaps.getShumaTechLogo()); _versionStaticText->SetLabel(wxString::Format(wxT("Version: %s"), VERSION)); _wxStaticText->SetLabel(wxString::Format(wxT("Built with %s"), wxVERSION_STRING)); GetSizer()->Fit(this); } BOSSA-1.9.1/src/BossaAbout.h000066400000000000000000000036041333742133700154040ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSAABOUT_H #define _BOSSAABOUT_H #include "BossaForm.h" class BossaAbout : public AboutDialog { public: BossaAbout(wxWindow* parent); }; #endif // _BOSSAABOUT_H BOSSA-1.9.1/src/BossaApp.cpp000066400000000000000000000037261333742133700154120ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaApp.h" BossaApp::BossaApp() : config(_("Bossa")), device(samba) { } bool BossaApp::OnInit() { bitmaps.init(); _window = new BossaWindow(); _window->Show(true); SetTopWindow(_window); return true; } IMPLEMENT_APP(BossaApp) BOSSA-1.9.1/src/BossaApp.h000066400000000000000000000042521333742133700150520ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSAAPP_H #define _BOSSAAPP_H #include #include #include "PortFactory.h" #include "Samba.h" #include "Flash.h" #include "BossaBitmaps.h" #include "BossaWindow.h" class BossaApp : public wxApp { public: BossaApp(); wxConfig config; PortFactory portFactory; Samba samba; BossaBitmaps bitmaps; Device device; private: bool OnInit(); BossaWindow* _window; }; DECLARE_APP(BossaApp) #endif // _BOSSAAPP_H BOSSA-1.9.1/src/BossaBitmaps.cpp000066400000000000000000000045051333742133700162650ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaBitmaps.h" #include #include "BossaLogo.cpp" #include "BossaIcon.cpp" #include "ShumaTechLogo.cpp" BossaBitmaps::BossaBitmaps() { } void BossaBitmaps::init() { _bossaLogo = GetBitmapFromMemory(BossaLogo_bmp, sizeof(BossaLogo_bmp)); _bossaIcon = GetBitmapFromMemory(BossaIcon_bmp, sizeof(BossaIcon_bmp)); _shumaTechLogo = GetBitmapFromMemory(ShumaTechLogo_bmp, sizeof(ShumaTechLogo_bmp)); } wxBitmap BossaBitmaps::GetBitmapFromMemory(const unsigned char *data, int length) { wxMemoryInputStream is(data, length); return wxBitmap(wxImage(is, wxBITMAP_TYPE_ANY, -1), -1); } BOSSA-1.9.1/src/BossaBitmaps.h000066400000000000000000000043211333742133700157260ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSABITMAPS_H #define _BOSSABITMAPS_H #include class BossaBitmaps { public: BossaBitmaps(); void init(); const wxBitmap& getBossaLogo() { return _bossaLogo; } const wxBitmap& getBossaIcon() { return _bossaIcon; } const wxBitmap& getShumaTechLogo() { return _shumaTechLogo; } private: wxBitmap GetBitmapFromMemory(const unsigned char *data, int length); wxBitmap _bossaLogo; wxBitmap _bossaIcon; wxBitmap _shumaTechLogo; }; #endif // _BOSSABITMAPS_H BOSSA-1.9.1/src/BossaForm.cpp000066400000000000000000000461001333742133700155660ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////// // C++ code generated with wxFormBuilder (version Apr 13 2017) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #include "BossaForm.h" /////////////////////////////////////////////////////////////////////////// MainFrame::MainFrame( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxFrame( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); wxBoxSizer* _topBoxSizer; _topBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* _titleBoxSizer; _titleBoxSizer = new wxBoxSizer( wxHORIZONTAL ); _bossaBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); _titleBoxSizer->Add( _bossaBitmap, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _titleText = new wxStaticText( this, wxID_ANY, wxT("Flash Programmer for Atmel SAM Devices"), wxDefaultPosition, wxDefaultSize, 0 ); _titleText->Wrap( -1 ); _titleBoxSizer->Add( _titleText, 0, wxALL|wxALIGN_BOTTOM, 5 ); _titleBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _aboutButton = new wxButton( this, wxID_ANY, wxT("About"), wxDefaultPosition, wxDefaultSize, 0 ); _aboutButton->SetToolTip( wxT("Display information about BOSSA") ); _titleBoxSizer->Add( _aboutButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _topBoxSizer->Add( _titleBoxSizer, 0, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* _portBoxSizer; _portBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Serial Port") ), wxHORIZONTAL ); _portComboBox = new wxComboBox( _portBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0, NULL, wxCB_READONLY ); _portBoxSizer->Add( _portComboBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _portBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _refreshButton = new wxButton( _portBoxSizer->GetStaticBox(), wxID_ANY, wxT("Refresh"), wxDefaultPosition, wxDefaultSize, 0 ); _refreshButton->SetToolTip( wxT("Refresh the list of available serial ports") ); _portBoxSizer->Add( _refreshButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _topBoxSizer->Add( _portBoxSizer, 3, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* _fileBoxSizer; _fileBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("File") ), wxHORIZONTAL ); _filePicker = new wxFilePickerCtrl( _fileBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxT("Select a file"), wxT("*.*"), wxDefaultPosition, wxDefaultSize, wxFLP_OPEN|wxFLP_USE_TEXTCTRL ); _filePicker->SetToolTip( wxT("Select the file to use for write/verify/read operations") ); _fileBoxSizer->Add( _filePicker, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _topBoxSizer->Add( _fileBoxSizer, 3, wxALL|wxEXPAND, 5 ); wxBoxSizer* _optionsBoxSizer; _optionsBoxSizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticBoxSizer* _writeBoxSizer; _writeBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Write Options") ), wxHORIZONTAL ); wxGridSizer* _writeGridSizer; _writeGridSizer = new wxGridSizer( 3, 2, 0, 0 ); _eraseCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Erase all"), wxDefaultPosition, wxDefaultSize, 0 ); _eraseCheckBox->SetToolTip( wxT("Erase entire flash before writing (recommended)") ); _writeGridSizer->Add( _eraseCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _bootCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Boot to flash"), wxDefaultPosition, wxDefaultSize, 0 ); _bootCheckBox->SetToolTip( wxT("Boot processor to flash instead of SAM-BA (if supported)") ); _writeGridSizer->Add( _bootCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _bodCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Brownout detect"), wxDefaultPosition, wxDefaultSize, 0 ); _bodCheckBox->SetToolTip( wxT("Enable the brownout detection circuitry") ); _writeGridSizer->Add( _bodCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _borCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Brownout reset"), wxDefaultPosition, wxDefaultSize, 0 ); _borCheckBox->SetToolTip( wxT("Enable processor reset on brownout detect") ); _writeGridSizer->Add( _borCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _lockCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Lock"), wxDefaultPosition, wxDefaultSize, 0 ); _lockCheckBox->SetToolTip( wxT("Lock access to the flash") ); _writeGridSizer->Add( _lockCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _securityCheckBox = new wxCheckBox( _writeBoxSizer->GetStaticBox(), wxID_ANY, wxT("Security"), wxDefaultPosition, wxDefaultSize, 0 ); _securityCheckBox->SetToolTip( wxT("Set the security bit") ); _writeGridSizer->Add( _securityCheckBox, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _writeBoxSizer->Add( _writeGridSizer, 1, wxEXPAND, 5 ); _optionsBoxSizer->Add( _writeBoxSizer, 1, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* _readBoxSizer; _readBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Read Options") ), wxVERTICAL ); wxBoxSizer* _sizeBoxSizer; _sizeBoxSizer = new wxBoxSizer( wxVERTICAL ); _sizeStaticText = new wxStaticText( _readBoxSizer->GetStaticBox(), wxID_ANY, wxT("Size:"), wxDefaultPosition, wxDefaultSize, 0 ); _sizeStaticText->Wrap( -1 ); _sizeBoxSizer->Add( _sizeStaticText, 0, wxALL, 5 ); _sizeTextCtrl = new wxTextCtrl( _readBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); _sizeTextCtrl->SetToolTip( wxT("Specify the amount of flash to read") ); _sizeBoxSizer->Add( _sizeTextCtrl, 0, wxALL, 5 ); _readBoxSizer->Add( _sizeBoxSizer, 1, wxEXPAND, 5 ); _optionsBoxSizer->Add( _readBoxSizer, 0, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* _generalBoxSizer; _generalBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("General Options") ), wxVERTICAL ); wxBoxSizer* _offsetBoxSizer; _offsetBoxSizer = new wxBoxSizer( wxVERTICAL ); _offsetStaticText = new wxStaticText( _generalBoxSizer->GetStaticBox(), wxID_ANY, wxT("Flash Offset:"), wxDefaultPosition, wxDefaultSize, 0 ); _offsetStaticText->Wrap( -1 ); _offsetBoxSizer->Add( _offsetStaticText, 0, wxALL, 5 ); _offsetTextCtrl = new wxTextCtrl( _generalBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); _offsetTextCtrl->SetToolTip( wxT("Specify the offset into the flash for operations") ); _offsetBoxSizer->Add( _offsetTextCtrl, 0, wxALL, 5 ); _generalBoxSizer->Add( _offsetBoxSizer, 1, wxEXPAND, 5 ); _optionsBoxSizer->Add( _generalBoxSizer, 0, wxALL|wxEXPAND, 5 ); _topBoxSizer->Add( _optionsBoxSizer, 4, wxEXPAND, 5 ); wxBoxSizer* _buttonBoxSizer; _buttonBoxSizer = new wxBoxSizer( wxHORIZONTAL ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _writeButton = new wxButton( this, wxID_ANY, wxT("Write"), wxDefaultPosition, wxDefaultSize, 0 ); _writeButton->SetToolTip( wxT("Write the flash with the file above") ); _buttonBoxSizer->Add( _writeButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _verifyButton = new wxButton( this, wxID_ANY, wxT("Verify"), wxDefaultPosition, wxDefaultSize, 0 ); _verifyButton->SetToolTip( wxT("Verify the flash matches the file above") ); _buttonBoxSizer->Add( _verifyButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _readButton = new wxButton( this, wxID_ANY, wxT("Read"), wxDefaultPosition, wxDefaultSize, 0 ); _readButton->SetToolTip( wxT("Read the flash into the file above") ); _buttonBoxSizer->Add( _readButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _infoButton = new wxButton( this, wxID_ANY, wxT("Info"), wxDefaultPosition, wxDefaultSize, 0 ); _infoButton->SetToolTip( wxT("Display inforamtion aboth the connected processor") ); _buttonBoxSizer->Add( _infoButton, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _exitButton = new wxButton( this, wxID_ANY, wxT("Exit"), wxDefaultPosition, wxDefaultSize, 0 ); _exitButton->SetToolTip( wxT("Exit and close BOSSA") ); _buttonBoxSizer->Add( _exitButton, 0, wxALL, 5 ); _buttonBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _topBoxSizer->Add( _buttonBoxSizer, 0, wxALL|wxEXPAND, 5 ); this->SetSizer( _topBoxSizer ); this->Layout(); _statusBar = this->CreateStatusBar( 2, wxST_SIZEGRIP, wxID_ANY ); this->Centre( wxBOTH ); } MainFrame::~MainFrame() { } ProgressDialog::ProgressDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); wxBoxSizer* _progressBoxSizer; _progressBoxSizer = new wxBoxSizer( wxVERTICAL ); _progressBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _infoStaticText = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); _infoStaticText->Wrap( -1 ); _progressBoxSizer->Add( _infoStaticText, 0, wxALIGN_CENTER|wxALL|wxEXPAND, 5 ); _statusGauge = new wxGauge( this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize, wxGA_HORIZONTAL ); _statusGauge->SetValue( 0 ); _progressBoxSizer->Add( _statusGauge, 0, wxALL|wxEXPAND, 5 ); _progressBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); _sdbSizer = new wxStdDialogButtonSizer(); _sdbSizerCancel = new wxButton( this, wxID_CANCEL ); _sdbSizer->AddButton( _sdbSizerCancel ); _sdbSizer->Realize(); _progressBoxSizer->Add( _sdbSizer, 0, wxALIGN_CENTER|wxALL, 5 ); _progressBoxSizer->Add( 0, 0, 1, wxEXPAND, 5 ); this->SetSizer( _progressBoxSizer ); this->Layout(); this->Centre( wxBOTH ); } ProgressDialog::~ProgressDialog() { } AboutDialog::AboutDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); wxBoxSizer* _topBoxSizer; _topBoxSizer = new wxBoxSizer( wxVERTICAL ); _bossaBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); _topBoxSizer->Add( _bossaBitmap, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); _titleStaticText = new wxStaticText( this, wxID_ANY, wxT("Basic Open Source SAM-BA Application"), wxDefaultPosition, wxDefaultSize, 0 ); _titleStaticText->Wrap( -1 ); _topBoxSizer->Add( _titleStaticText, 0, wxALL, 5 ); _versionStaticText = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); _versionStaticText->Wrap( -1 ); _topBoxSizer->Add( _versionStaticText, 0, wxALL, 5 ); _wxStaticText = new wxStaticText( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, 0 ); _wxStaticText->Wrap( -1 ); _topBoxSizer->Add( _wxStaticText, 0, wxALL, 5 ); m_staticline1 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); _topBoxSizer->Add( m_staticline1, 0, wxEXPAND | wxALL, 5 ); _shumatechBitmap = new wxStaticBitmap( this, wxID_ANY, wxNullBitmap, wxDefaultPosition, wxDefaultSize, 0 ); _topBoxSizer->Add( _shumatechBitmap, 0, wxALIGN_CENTER_HORIZONTAL|wxALL, 5 ); _copyrightStaticText = new wxStaticText( this, wxID_ANY, wxT("(c) 2011-2018 ShumaTech. All rights reserved."), wxDefaultPosition, wxDefaultSize, 0 ); _copyrightStaticText->Wrap( -1 ); _topBoxSizer->Add( _copyrightStaticText, 0, wxALL, 5 ); _shumatechHyperlink = new wxHyperlinkCtrl( this, wxID_ANY, wxT("http://www.shumatech.com"), wxT("http://www.shumatech.com"), wxDefaultPosition, wxDefaultSize, wxHL_DEFAULT_STYLE ); _topBoxSizer->Add( _shumatechHyperlink, 0, wxALL, 5 ); m_staticline2 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); _topBoxSizer->Add( m_staticline2, 0, wxEXPAND | wxALL, 5 ); m_disclaimerStaticText = new wxStaticText( this, wxID_ANY, wxT("This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."), wxDefaultPosition, wxDefaultSize, 0 ); m_disclaimerStaticText->Wrap( 280 ); _topBoxSizer->Add( m_disclaimerStaticText, 0, wxALL, 5 ); m_staticline3 = new wxStaticLine( this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL ); _topBoxSizer->Add( m_staticline3, 0, wxEXPAND | wxALL, 5 ); _sdbSizer = new wxStdDialogButtonSizer(); _sdbSizerOK = new wxButton( this, wxID_OK ); _sdbSizer->AddButton( _sdbSizerOK ); _sdbSizer->Realize(); _topBoxSizer->Add( _sdbSizer, 1, wxALL|wxEXPAND, 10 ); this->SetSizer( _topBoxSizer ); this->Layout(); this->Centre( wxBOTH ); } AboutDialog::~AboutDialog() { } InfoDialog::InfoDialog( wxWindow* parent, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, long style ) : wxDialog( parent, id, title, pos, size, style ) { this->SetSizeHints( wxDefaultSize, wxDefaultSize ); this->SetBackgroundColour( wxSystemSettings::GetColour( wxSYS_COLOUR_3DLIGHT ) ); wxBoxSizer* _topBoxSizer; _topBoxSizer = new wxBoxSizer( wxVERTICAL ); wxBoxSizer* _deviceBoxSizer; _deviceBoxSizer = new wxBoxSizer( wxHORIZONTAL ); _deviceStaticText = new wxStaticText( this, wxID_ANY, wxT("Device:"), wxDefaultPosition, wxDefaultSize, 0 ); _deviceStaticText->Wrap( -1 ); _deviceBoxSizer->Add( _deviceStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _deviceTextCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _deviceBoxSizer->Add( _deviceTextCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _topBoxSizer->Add( _deviceBoxSizer, 0, wxALL|wxEXPAND, 5 ); wxBoxSizer* _versionBoxSizer; _versionBoxSizer = new wxBoxSizer( wxHORIZONTAL ); _versionStaticText = new wxStaticText( this, wxID_ANY, wxT("Version:"), wxDefaultPosition, wxDefaultSize, 0 ); _versionStaticText->Wrap( -1 ); _versionBoxSizer->Add( _versionStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _versionTextCtrl = new wxTextCtrl( this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _versionBoxSizer->Add( _versionTextCtrl, 1, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _topBoxSizer->Add( _versionBoxSizer, 0, wxALL|wxEXPAND, 5 ); wxBoxSizer* _middleBoxSizer; _middleBoxSizer = new wxBoxSizer( wxHORIZONTAL ); wxStaticBoxSizer* _flashBoxSizer; _flashBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Flash") ), wxVERTICAL ); wxFlexGridSizer* _flashGridSizer; _flashGridSizer = new wxFlexGridSizer( 0, 2, 0, 0 ); _flashGridSizer->SetFlexibleDirection( wxBOTH ); _flashGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); _pagesStaticText = new wxStaticText( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxT("Pages:"), wxDefaultPosition, wxDefaultSize, 0 ); _pagesStaticText->Wrap( -1 ); _flashGridSizer->Add( _pagesStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _pagesTextCtrl = new wxTextCtrl( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _flashGridSizer->Add( _pagesTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _pageSizeStaticText = new wxStaticText( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxT("Page Size:"), wxDefaultPosition, wxDefaultSize, 0 ); _pageSizeStaticText->Wrap( -1 ); _flashGridSizer->Add( _pageSizeStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _pageSizeTextCtrl = new wxTextCtrl( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _flashGridSizer->Add( _pageSizeTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _totalSizeStaticText = new wxStaticText( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxT("Total Size:"), wxDefaultPosition, wxDefaultSize, 0 ); _totalSizeStaticText->Wrap( -1 ); _flashGridSizer->Add( _totalSizeStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _totalSizeTextCtrl = new wxTextCtrl( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _flashGridSizer->Add( _totalSizeTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _planesStaticText = new wxStaticText( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxT("Planes:"), wxDefaultPosition, wxDefaultSize, 0 ); _planesStaticText->Wrap( -1 ); _flashGridSizer->Add( _planesStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _planesTextCtrl = new wxTextCtrl( _flashBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_READONLY ); _flashGridSizer->Add( _planesTextCtrl, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _flashBoxSizer->Add( _flashGridSizer, 1, wxEXPAND, 5 ); _middleBoxSizer->Add( _flashBoxSizer, 0, wxALL|wxEXPAND, 5 ); wxStaticBoxSizer* _optionsBoxSizer; _optionsBoxSizer = new wxStaticBoxSizer( new wxStaticBox( this, wxID_ANY, wxT("Options") ), wxVERTICAL ); wxFlexGridSizer* _gpnvGridSizer; _gpnvGridSizer = new wxFlexGridSizer( 0, 2, 0, 0 ); _gpnvGridSizer->SetFlexibleDirection( wxBOTH ); _gpnvGridSizer->SetNonFlexibleGrowMode( wxFLEX_GROWMODE_SPECIFIED ); _bootCheckBox = new wxCheckBox( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxT("Boot to flash"), wxDefaultPosition, wxDefaultSize, 0 ); _gpnvGridSizer->Add( _bootCheckBox, 0, wxALL, 5 ); _bodCheckBox = new wxCheckBox( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxT("Brownout detect"), wxDefaultPosition, wxDefaultSize, 0 ); _gpnvGridSizer->Add( _bodCheckBox, 0, wxALL, 5 ); _securityCheckBox = new wxCheckBox( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxT("Security"), wxDefaultPosition, wxDefaultSize, 0 ); _gpnvGridSizer->Add( _securityCheckBox, 0, wxALL, 5 ); _borCheckBox = new wxCheckBox( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxT("Brownout reset"), wxDefaultPosition, wxDefaultSize, 0 ); _gpnvGridSizer->Add( _borCheckBox, 0, wxALL, 5 ); _optionsBoxSizer->Add( _gpnvGridSizer, 0, wxEXPAND, 5 ); wxBoxSizer* bSizer13; bSizer13 = new wxBoxSizer( wxVERTICAL ); _lockStaticText = new wxStaticText( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxT("Lock Regions:"), wxDefaultPosition, wxDefaultSize, 0 ); _lockStaticText->Wrap( -1 ); bSizer13->Add( _lockStaticText, 0, wxALIGN_CENTER_VERTICAL|wxALL, 5 ); _lockTextCtrl = new wxTextCtrl( _optionsBoxSizer->GetStaticBox(), wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize, wxTE_MULTILINE|wxTE_READONLY ); bSizer13->Add( _lockTextCtrl, 0, wxALL|wxEXPAND, 5 ); _optionsBoxSizer->Add( bSizer13, 1, wxEXPAND, 5 ); _middleBoxSizer->Add( _optionsBoxSizer, 0, wxALL|wxEXPAND, 5 ); _topBoxSizer->Add( _middleBoxSizer, 0, wxEXPAND, 5 ); _sdbSizer = new wxStdDialogButtonSizer(); _sdbSizerOK = new wxButton( this, wxID_OK ); _sdbSizer->AddButton( _sdbSizerOK ); _sdbSizer->Realize(); _topBoxSizer->Add( _sdbSizer, 1, wxALL|wxEXPAND, 10 ); this->SetSizer( _topBoxSizer ); this->Layout(); _topBoxSizer->Fit( this ); this->Centre( wxBOTH ); } InfoDialog::~InfoDialog() { } BOSSA-1.9.1/src/BossaForm.fbp000066400000000000000000013627711333742133700155730ustar00rootroot00000000000000 C++ 1 source_name 0 0 res UTF-8 connect BossaForm 1000 none 0 Bossa . 1 1 1 1 UI 0 0 0 wxAUI_MGR_DEFAULT wxSYS_COLOUR_3DLIGHT wxBOTH 1 1 impl_virtual 0 wxID_ANY MainFrame 550,400 wxCAPTION|wxCLOSE_BOX|wxICONIZE|wxMINIMIZE|wxMINIMIZE_BOX|wxSYSTEM_MENU BOSSA wxTAB_TRAVERSAL 1 _topBoxSizer wxVERTICAL none 5 wxALL|wxEXPAND 0 _titleBoxSizer wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 Load From File; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _bossaBitmap 1 protected 1 Resizable 1 0 5 wxALL|wxALIGN_BOTTOM 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Flash Programmer for Atmel SAM Devices 0 0 1 _titleText 1 protected 1 Resizable 1 0 -1 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY About 0 0 1 _aboutButton 1 protected 1 Resizable 1 0 Display information about BOSSA wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 3 wxID_ANY Serial Port _portBoxSizer wxHORIZONTAL 1 none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _portComboBox 1 protected 1 Resizable -1 1 wxCB_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Refresh 0 0 1 _refreshButton 1 protected 1 Resizable 1 0 Refresh the list of available serial ports wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 3 wxID_ANY File _fileBoxSizer wxHORIZONTAL 1 none 5 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 Select a file 0 1 _filePicker 1 protected 1 Resizable 1 wxFLP_OPEN|wxFLP_USE_TEXTCTRL 0 Select the file to use for write/verify/read operations wxFILTER_NONE wxDefaultValidator *.* 5 wxEXPAND 4 _optionsBoxSizer wxHORIZONTAL none 5 wxALL|wxEXPAND 1 wxID_ANY Write Options _writeBoxSizer wxHORIZONTAL 1 none 5 wxEXPAND 1 2 0 _writeGridSizer none 3 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Erase all 0 0 1 _eraseCheckBox 1 protected 1 Resizable 1 0 Erase entire flash before writing (recommended) wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Boot to flash 0 0 1 _bootCheckBox 1 protected 1 Resizable 1 0 Boot processor to flash instead of SAM-BA (if supported) wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Brownout detect 0 0 1 _bodCheckBox 1 protected 1 Resizable 1 0 Enable the brownout detection circuitry wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Brownout reset 0 0 1 _borCheckBox 1 protected 1 Resizable 1 0 Enable processor reset on brownout detect wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Lock 0 0 1 _lockCheckBox 1 protected 1 Resizable 1 0 Lock access to the flash wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Security 0 0 1 _securityCheckBox 1 protected 1 Resizable 1 0 Set the security bit wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 wxID_ANY Read Options _readBoxSizer wxVERTICAL 1 none 5 wxEXPAND 1 _sizeBoxSizer wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Size: 0 0 1 _sizeStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _sizeTextCtrl 1 protected 1 Resizable 1 0 Specify the amount of flash to read wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 wxID_ANY General Options _generalBoxSizer wxVERTICAL 1 none 5 wxEXPAND 1 _offsetBoxSizer wxVERTICAL none 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Flash Offset: 0 0 1 _offsetStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _offsetTextCtrl 1 protected 1 Resizable 1 0 Specify the offset into the flash for operations wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 _buttonBoxSizer wxHORIZONTAL none 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Write 0 0 1 _writeButton 1 protected 1 Resizable 1 0 Write the flash with the file above wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Verify 0 0 1 _verifyButton 1 protected 1 Resizable 1 0 Verify the flash matches the file above wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Read 0 0 1 _readButton 1 protected 1 Resizable 1 0 Read the flash into the file above wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Info 0 0 1 _infoButton 1 protected 1 Resizable 1 0 Display inforamtion aboth the connected processor wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 0 Dock 0 Left 1 1 0 0 wxID_ANY Exit 0 0 1 _exitButton 1 protected 1 Resizable 1 0 Exit and close BOSSA wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 0 protected 0 1 1 2 0 wxID_ANY _statusBar protected wxST_SIZEGRIP 0 wxAUI_MGR_DEFAULT wxSYS_COLOUR_3DLIGHT wxBOTH 1 1 impl_virtual 0 wxID_ANY ProgressDialog 300,150 wxCAPTION Progress _progressBoxSizer wxVERTICAL none 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER|wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _infoStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _statusGauge 1 protected 1 100 Resizable 1 wxGA_HORIZONTAL 0 wxFILTER_NONE wxDefaultValidator 0 5 wxEXPAND 1 0 protected 0 5 wxALIGN_CENTER|wxALL 0 0 1 0 0 0 0 0 0 _sdbSizer protected 5 wxEXPAND 1 0 protected 0 0 wxAUI_MGR_DEFAULT wxSYS_COLOUR_3DLIGHT wxBOTH 1 1 impl_virtual 0 wxID_ANY AboutDialog 300,-1 wxDEFAULT_DIALOG_STYLE About BOSSA _topBoxSizer wxVERTICAL none 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 1 1 1 1 Load From File; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _bossaBitmap 1 protected 1 Resizable 1 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Basic Open Source SAM-BA Application 0 0 1 _titleStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _versionStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _wxStaticText 1 protected 1 Resizable 1 0 -1 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline1 1 protected 1 Resizable 1 wxLI_HORIZONTAL 0 5 wxALIGN_CENTER_HORIZONTAL|wxALL 0 1 1 1 1 Load From File; 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _shumatechBitmap 1 protected 1 Resizable 1 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY (c) 2011-2018 ShumaTech. All rights reserved. 0 0 1 _copyrightStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY http://www.shumatech.com 0 0 1 _shumatechHyperlink 1 protected 1 Resizable 1 wxHL_DEFAULT_STYLE 0 http://www.shumatech.com 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline2 1 protected 1 Resizable 1 wxLI_HORIZONTAL 0 5 wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 0 0 1 m_disclaimerStaticText 1 protected 1 Resizable 1 0 280 5 wxEXPAND | wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 m_staticline3 1 protected 1 Resizable 1 wxLI_HORIZONTAL 0 10 wxALL|wxEXPAND 1 0 0 0 0 0 1 0 0 _sdbSizer protected 0 wxAUI_MGR_DEFAULT wxSYS_COLOUR_3DLIGHT wxBOTH 1 1 impl_virtual 0 wxID_ANY InfoDialog wxDEFAULT_DIALOG_STYLE Info _topBoxSizer wxVERTICAL none 5 wxALL|wxEXPAND 0 _deviceBoxSizer wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Device: 0 0 1 _deviceStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _deviceTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 _versionBoxSizer wxHORIZONTAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Version: 0 0 1 _versionStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 1 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _versionTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 0 _middleBoxSizer wxHORIZONTAL none 5 wxALL|wxEXPAND 0 wxID_ANY Flash _flashBoxSizer wxVERTICAL 1 none 5 wxEXPAND 1 2 wxBOTH 0 _flashGridSizer wxFLEX_GROWMODE_SPECIFIED none 0 0 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Pages: 0 0 1 _pagesStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _pagesTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Page Size: 0 0 1 _pageSizeStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _pageSizeTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Total Size: 0 0 1 _totalSizeStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _totalSizeTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Planes: 0 0 1 _planesStaticText 1 protected 1 Resizable 1 0 -1 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 0 1 _planesTextCtrl 1 protected 1 Resizable 1 wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 5 wxALL|wxEXPAND 0 wxID_ANY Options _optionsBoxSizer wxVERTICAL 1 none 5 wxEXPAND 0 2 wxBOTH 0 _gpnvGridSizer wxFLEX_GROWMODE_SPECIFIED none 0 0 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Boot to flash 0 0 1 _bootCheckBox 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Brownout detect 0 0 1 _bodCheckBox 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Security 0 0 1 _securityCheckBox 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxALL 0 1 1 1 1 1 0 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Brownout reset 0 0 1 _borCheckBox 1 protected 1 Resizable 1 0 wxFILTER_NONE wxDefaultValidator 5 wxEXPAND 1 bSizer13 wxVERTICAL none 5 wxALIGN_CENTER_VERTICAL|wxALL 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY Lock Regions: 0 0 1 _lockStaticText 1 protected 1 Resizable 1 0 -1 5 wxALL|wxEXPAND 0 1 1 1 1 1 0 1 1 0 Dock 0 Left 1 1 0 0 wxID_ANY 0 0 1 _lockTextCtrl 1 protected 1 Resizable 1 wxTE_MULTILINE|wxTE_READONLY 0 wxFILTER_NONE wxDefaultValidator 10 wxALL|wxEXPAND 1 0 0 0 0 0 1 0 0 _sdbSizer protected BOSSA-1.9.1/src/BossaForm.h000066400000000000000000000115151333742133700152350ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////// // C++ code generated with wxFormBuilder (version Apr 13 2017) // http://www.wxformbuilder.org/ // // PLEASE DO "NOT" EDIT THIS FILE! /////////////////////////////////////////////////////////////////////////// #ifndef __BOSSAFORM_H__ #define __BOSSAFORM_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include /////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////// /// Class MainFrame /////////////////////////////////////////////////////////////////////////////// class MainFrame : public wxFrame { private: protected: wxStaticBitmap* _bossaBitmap; wxStaticText* _titleText; wxButton* _aboutButton; wxComboBox* _portComboBox; wxButton* _refreshButton; wxFilePickerCtrl* _filePicker; wxCheckBox* _eraseCheckBox; wxCheckBox* _bootCheckBox; wxCheckBox* _bodCheckBox; wxCheckBox* _borCheckBox; wxCheckBox* _lockCheckBox; wxCheckBox* _securityCheckBox; wxStaticText* _sizeStaticText; wxTextCtrl* _sizeTextCtrl; wxStaticText* _offsetStaticText; wxTextCtrl* _offsetTextCtrl; wxButton* _writeButton; wxButton* _verifyButton; wxButton* _readButton; wxButton* _infoButton; wxButton* _exitButton; wxStatusBar* _statusBar; public: MainFrame( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("BOSSA"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 550,400 ), long style = wxCAPTION|wxCLOSE_BOX|wxICONIZE|wxMINIMIZE|wxMINIMIZE_BOX|wxSYSTEM_MENU|wxTAB_TRAVERSAL ); ~MainFrame(); }; /////////////////////////////////////////////////////////////////////////////// /// Class ProgressDialog /////////////////////////////////////////////////////////////////////////////// class ProgressDialog : public wxDialog { private: protected: wxStaticText* _infoStaticText; wxGauge* _statusGauge; wxStdDialogButtonSizer* _sdbSizer; wxButton* _sdbSizerCancel; public: ProgressDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Progress"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 300,150 ), long style = wxCAPTION ); ~ProgressDialog(); }; /////////////////////////////////////////////////////////////////////////////// /// Class AboutDialog /////////////////////////////////////////////////////////////////////////////// class AboutDialog : public wxDialog { private: protected: wxStaticBitmap* _bossaBitmap; wxStaticText* _titleStaticText; wxStaticText* _versionStaticText; wxStaticText* _wxStaticText; wxStaticLine* m_staticline1; wxStaticBitmap* _shumatechBitmap; wxStaticText* _copyrightStaticText; wxHyperlinkCtrl* _shumatechHyperlink; wxStaticLine* m_staticline2; wxStaticText* m_disclaimerStaticText; wxStaticLine* m_staticline3; wxStdDialogButtonSizer* _sdbSizer; wxButton* _sdbSizerOK; public: AboutDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("About BOSSA"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxSize( 300,-1 ), long style = wxDEFAULT_DIALOG_STYLE ); ~AboutDialog(); }; /////////////////////////////////////////////////////////////////////////////// /// Class InfoDialog /////////////////////////////////////////////////////////////////////////////// class InfoDialog : public wxDialog { private: protected: wxStaticText* _deviceStaticText; wxTextCtrl* _deviceTextCtrl; wxStaticText* _versionStaticText; wxTextCtrl* _versionTextCtrl; wxStaticText* _pagesStaticText; wxTextCtrl* _pagesTextCtrl; wxStaticText* _pageSizeStaticText; wxTextCtrl* _pageSizeTextCtrl; wxStaticText* _totalSizeStaticText; wxTextCtrl* _totalSizeTextCtrl; wxStaticText* _planesStaticText; wxTextCtrl* _planesTextCtrl; wxCheckBox* _bootCheckBox; wxCheckBox* _bodCheckBox; wxCheckBox* _securityCheckBox; wxCheckBox* _borCheckBox; wxStaticText* _lockStaticText; wxTextCtrl* _lockTextCtrl; wxStdDialogButtonSizer* _sdbSizer; wxButton* _sdbSizerOK; public: InfoDialog( wxWindow* parent, wxWindowID id = wxID_ANY, const wxString& title = wxT("Info"), const wxPoint& pos = wxDefaultPosition, const wxSize& size = wxDefaultSize, long style = wxDEFAULT_DIALOG_STYLE ); ~InfoDialog(); }; #endif //__BOSSAFORM_H__ BOSSA-1.9.1/src/BossaIcon.cpp000066400000000000000000000606471333742133700155670ustar00rootroot00000000000000#ifndef BOSSAICON_BMP_H #define BOSSAICON_BMP_H static unsigned char BossaIcon_bmp[] = { 0x42, 0x4d, 0x36, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x42, 0x42, 0x42, 0xa6, 0x15, 0x15, 0x15, 0x83, 0x00, 0x00, 0x00, 0x06, 0xf6, 0xf6, 0xf6, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf4, 0xf4, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x3b, 0x3b, 0x85, 0x2c, 0x2c, 0x2c, 0xac, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x4c, 0x4c, 0x23, 0x5b, 0x5b, 0x5b, 0xec, 0x99, 0x99, 0x99, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0x1a, 0x1a, 0x1a, 0x95, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, 0x3f, 0x9f, 0x78, 0x78, 0x78, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x48, 0x48, 0x48, 0xe7, 0x08, 0x08, 0x08, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xfc, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x16, 0x16, 0x16, 0x14, 0x03, 0x03, 0x03, 0x37, 0x5f, 0x5f, 0x5f, 0x87, 0xc6, 0xc6, 0xc6, 0xff, 0xb6, 0xb6, 0xb6, 0xff, 0x9b, 0x9b, 0x9b, 0xfe, 0x2f, 0x2f, 0x2f, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x47, 0x47, 0x47, 0xda, 0xa6, 0xa6, 0xa6, 0xff, 0xbf, 0xbf, 0xbf, 0xfe, 0xa6, 0xa6, 0xa6, 0xff, 0x34, 0x34, 0x34, 0x5c, 0x26, 0x26, 0x26, 0x33, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0xf1, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x36, 0x36, 0x36, 0x4d, 0x62, 0x62, 0x62, 0xf8, 0x56, 0x56, 0x56, 0xfd, 0x0e, 0x0e, 0x0e, 0x71, 0x6a, 0x6a, 0x6a, 0xc4, 0xd2, 0xd2, 0xd2, 0xff, 0x97, 0x97, 0x97, 0xff, 0x2d, 0x2d, 0x2d, 0xc0, 0x1e, 0x1e, 0x1e, 0x31, 0x45, 0x45, 0x45, 0xe5, 0x33, 0x33, 0x33, 0xe0, 0x00, 0x00, 0x00, 0x3e, 0x45, 0x45, 0x45, 0xd7, 0xa2, 0xa2, 0xa2, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0x30, 0x30, 0x30, 0xa7, 0x34, 0x34, 0x34, 0x6b, 0x65, 0x65, 0x65, 0xff, 0x50, 0x50, 0x50, 0xf4, 0x10, 0x10, 0x10, 0x64, 0x5b, 0x5b, 0x5b, 0x02, 0xfc, 0xfc, 0xfc, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfd, 0xfd, 0xfd, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x5a, 0x5a, 0x34, 0x89, 0x89, 0x89, 0xff, 0xb7, 0xb7, 0xb7, 0xfe, 0x9b, 0x9b, 0x9b, 0xfe, 0x3f, 0x3f, 0x3f, 0xe3, 0x83, 0x83, 0x83, 0xd0, 0xc7, 0xc7, 0xc7, 0xff, 0x8e, 0x8e, 0x8e, 0xff, 0x34, 0x34, 0x34, 0xef, 0x47, 0x47, 0x47, 0xff, 0x62, 0x62, 0x62, 0xfe, 0x4e, 0x4e, 0x4e, 0xff, 0x37, 0x37, 0x37, 0xfe, 0x3c, 0x3c, 0x3c, 0xf7, 0x9a, 0x9a, 0x9a, 0xff, 0xd6, 0xd6, 0xd6, 0xff, 0x3a, 0x3a, 0x3a, 0xb5, 0x56, 0x56, 0x56, 0xff, 0xa1, 0xa1, 0xa1, 0xfe, 0xb8, 0xb8, 0xb8, 0xfe, 0x79, 0x79, 0x79, 0xff, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf2, 0xf2, 0xf2, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf2, 0xf2, 0xf2, 0x01, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x2f, 0x2f, 0x44, 0x41, 0x41, 0x41, 0xdf, 0x19, 0x19, 0x19, 0x71, 0x7f, 0x7f, 0x7f, 0xdb, 0xce, 0xce, 0xce, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x43, 0x43, 0x43, 0xe2, 0x9d, 0x9d, 0x9d, 0xf7, 0xbd, 0xbd, 0xbd, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x61, 0x61, 0x61, 0xff, 0x45, 0x45, 0x45, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0x64, 0x64, 0x64, 0xdd, 0x56, 0x56, 0x56, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0x62, 0x62, 0x62, 0xb6, 0x29, 0x29, 0x29, 0x5a, 0x45, 0x45, 0x45, 0xe8, 0x0c, 0x0c, 0x0c, 0x61, 0x00, 0x00, 0x00, 0x00, 0xf2, 0xf2, 0xf2, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x4f, 0x4f, 0x4f, 0x89, 0x7d, 0x7d, 0x7d, 0xff, 0x9a, 0x9a, 0x9a, 0xfe, 0x55, 0x55, 0x55, 0xff, 0x32, 0x32, 0x32, 0xaa, 0xd4, 0xd4, 0xd4, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0x47, 0x47, 0x47, 0xf3, 0x90, 0x90, 0x90, 0xff, 0xac, 0xac, 0xac, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0x53, 0x53, 0x53, 0xff, 0x71, 0x71, 0x71, 0xff, 0x54, 0x55, 0x54, 0xff, 0x47, 0x47, 0x47, 0xff, 0x45, 0x45, 0x45, 0xff, 0x54, 0x54, 0x54, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x72, 0x72, 0x72, 0xf7, 0x51, 0x51, 0x51, 0xfc, 0xa9, 0xa9, 0xa9, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0x25, 0x25, 0x25, 0xa8, 0x61, 0x61, 0x61, 0xff, 0xa1, 0xa1, 0xa1, 0xfe, 0x70, 0x70, 0x70, 0xff, 0x2b, 0x2b, 0x2b, 0x9b, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x77, 0x77, 0x77, 0xed, 0xd0, 0xd0, 0xd0, 0xfe, 0xb2, 0xb2, 0xb2, 0xff, 0x75, 0x75, 0x75, 0xff, 0x5b, 0x5b, 0x5b, 0xe8, 0xd4, 0xd4, 0xd4, 0xfe, 0xa5, 0xa5, 0xa5, 0xff, 0x76, 0x76, 0x76, 0xff, 0x3a, 0x3a, 0x3a, 0xfe, 0x66, 0x66, 0x66, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x7e, 0x7f, 0x7e, 0xff, 0x52, 0x51, 0x52, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x42, 0x42, 0x42, 0xff, 0x43, 0x43, 0x43, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x44, 0x44, 0x44, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x32, 0x32, 0x32, 0xff, 0x86, 0x86, 0x86, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xd4, 0xd4, 0xd4, 0xff, 0x35, 0x35, 0x35, 0xea, 0x85, 0x85, 0x85, 0xff, 0xb7, 0xb7, 0xb7, 0xff, 0xc9, 0xc9, 0xc9, 0xff, 0x52, 0x52, 0x52, 0xbb, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xc5, 0xc5, 0xc5, 0x01, 0x23, 0x23, 0x23, 0x06, 0x9a, 0x9a, 0x9a, 0xff, 0xb5, 0xb5, 0xb5, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0x85, 0x85, 0x85, 0xfd, 0xb5, 0xb5, 0xb5, 0xff, 0xcd, 0xcd, 0xcd, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x68, 0x50, 0x4d, 0xff, 0x6a, 0x49, 0x46, 0xff, 0x66, 0x44, 0x40, 0xff, 0x5b, 0x3c, 0x39, 0xff, 0x3d, 0x35, 0x35, 0xff, 0x31, 0x31, 0x31, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x4d, 0x4d, 0x4d, 0xff, 0x48, 0x48, 0x48, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x54, 0x54, 0x54, 0xfd, 0x7f, 0x7f, 0x7f, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0x6d, 0x6d, 0x6d, 0xf6, 0x00, 0x00, 0x00, 0x05, 0xed, 0xed, 0xed, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x3e, 0x3e, 0x3e, 0x21, 0xb1, 0xb1, 0xb1, 0xff, 0xae, 0xae, 0xae, 0xff, 0x6e, 0x6e, 0x6e, 0xff, 0x48, 0x48, 0x48, 0xff, 0x86, 0x86, 0x86, 0xff, 0x6e, 0x6e, 0x6e, 0xff, 0xb0, 0xb0, 0xb0, 0xff, 0xb9, 0x8b, 0x82, 0xff, 0xee, 0x57, 0x3b, 0xff, 0xfe, 0x57, 0x39, 0xff, 0xff, 0x55, 0x38, 0xff, 0xff, 0x52, 0x38, 0xff, 0xff, 0x4e, 0x37, 0xff, 0xff, 0x4c, 0x37, 0xff, 0xff, 0x48, 0x36, 0xff, 0xe9, 0x40, 0x33, 0xff, 0x80, 0x2d, 0x28, 0xff, 0x25, 0x24, 0x24, 0xff, 0x40, 0x40, 0x40, 0xff, 0x41, 0x41, 0x41, 0xff, 0x72, 0x72, 0x72, 0xff, 0x76, 0x76, 0x76, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x78, 0x78, 0x78, 0xff, 0xbb, 0xbb, 0xbb, 0xff, 0x90, 0x90, 0x90, 0xff, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf4, 0xf4, 0xf4, 0x01, 0x43, 0x43, 0x43, 0x56, 0xce, 0xce, 0xce, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0x57, 0x57, 0x57, 0xff, 0xab, 0xab, 0xab, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0x91, 0x91, 0x91, 0xff, 0xb4, 0x6a, 0x5a, 0xff, 0xff, 0x5f, 0x3a, 0xff, 0xf2, 0x58, 0x39, 0xff, 0xf2, 0x54, 0x36, 0xff, 0xfe, 0x56, 0x39, 0xff, 0xff, 0x53, 0x38, 0xff, 0xc8, 0x40, 0x2f, 0xff, 0x20, 0x17, 0x17, 0xff, 0xf7, 0x47, 0x35, 0xff, 0xff, 0x46, 0x36, 0xff, 0xf8, 0x41, 0x34, 0xff, 0x32, 0x19, 0x18, 0xff, 0x2d, 0x2d, 0x2d, 0xff, 0x4d, 0x4d, 0x4d, 0xff, 0x44, 0x44, 0x44, 0xff, 0x85, 0x85, 0x85, 0xff, 0xda, 0xda, 0xda, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0x0b, 0x0b, 0x0b, 0x4f, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x42, 0x42, 0x42, 0xa0, 0x99, 0x99, 0x99, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0x77, 0x77, 0x77, 0xff, 0xcf, 0xcf, 0xcf, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x88, 0x88, 0x89, 0xff, 0xbb, 0x70, 0x5c, 0xff, 0xff, 0x64, 0x3b, 0xff, 0xb5, 0x4b, 0x33, 0xff, 0x24, 0x24, 0x24, 0xff, 0x47, 0x3b, 0x3a, 0xff, 0xb4, 0x4a, 0x38, 0xff, 0xd4, 0x4a, 0x35, 0xff, 0x4a, 0x2d, 0x28, 0xff, 0xfc, 0x4c, 0x37, 0xff, 0xd7, 0x42, 0x32, 0xff, 0xe7, 0x40, 0x32, 0xff, 0xfd, 0x44, 0x35, 0xff, 0x24, 0x16, 0x16, 0xff, 0x21, 0x21, 0x21, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x48, 0x48, 0x48, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0xb3, 0xb3, 0xb3, 0xff, 0x85, 0x85, 0x85, 0xff, 0x20, 0x20, 0x20, 0xa0, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x61, 0xff, 0xb2, 0xb2, 0xb2, 0xff, 0x93, 0x93, 0x93, 0xff, 0xec, 0xec, 0xeb, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x9b, 0x9b, 0x9b, 0xff, 0x94, 0x94, 0x94, 0xff, 0x8d, 0x8c, 0x8d, 0xff, 0xc1, 0x74, 0x5c, 0xff, 0xfd, 0x67, 0x3c, 0xff, 0xca, 0x54, 0x36, 0xff, 0x60, 0x36, 0x2c, 0xff, 0x6e, 0x4d, 0x45, 0xff, 0x4f, 0x4e, 0x4f, 0xff, 0x59, 0x4b, 0x48, 0xff, 0xf5, 0x53, 0x38, 0xff, 0xf3, 0x4d, 0x36, 0xff, 0x1e, 0x1e, 0x1d, 0xff, 0x2f, 0x20, 0x20, 0xff, 0xff, 0x49, 0x37, 0xff, 0xbf, 0x38, 0x2c, 0xff, 0x14, 0x14, 0x14, 0xff, 0x21, 0x21, 0x21, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x5d, 0x5d, 0x5d, 0xff, 0x54, 0x54, 0x54, 0xff, 0x69, 0x69, 0x69, 0xfe, 0x1f, 0x1f, 0x1f, 0xe8, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x5f, 0x5f, 0x5f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa7, 0xa7, 0xa7, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x98, 0x99, 0x98, 0xff, 0x91, 0x91, 0x92, 0xff, 0xcb, 0x74, 0x58, 0xff, 0xff, 0x6d, 0x3d, 0xff, 0xe1, 0x5e, 0x38, 0xff, 0x26, 0x26, 0x26, 0xff, 0xe4, 0x5c, 0x3a, 0xff, 0x47, 0x47, 0x47, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x53, 0x51, 0x4f, 0xff, 0xfc, 0x54, 0x38, 0xff, 0x5c, 0x32, 0x2c, 0xff, 0x8c, 0x37, 0x2c, 0xff, 0xff, 0x4d, 0x37, 0xff, 0xfe, 0x49, 0x36, 0xff, 0x0e, 0x0e, 0x0e, 0xff, 0x1b, 0x1b, 0x1b, 0xff, 0x2b, 0x2b, 0x2b, 0xff, 0x33, 0x33, 0x33, 0xff, 0x53, 0x53, 0x53, 0xff, 0x6a, 0x6a, 0x6a, 0xff, 0x1c, 0x1c, 0x1c, 0xe6, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x46, 0x46, 0x46, 0xff, 0xb6, 0xb6, 0xb6, 0xfe, 0xad, 0xae, 0xae, 0xff, 0xae, 0xae, 0xae, 0xff, 0xac, 0xac, 0xab, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x95, 0x95, 0x96, 0xff, 0xd3, 0x75, 0x54, 0xff, 0xff, 0x71, 0x3d, 0xff, 0xfa, 0x68, 0x3b, 0xff, 0x26, 0x26, 0x26, 0xff, 0xc2, 0x5a, 0x3f, 0xff, 0x84, 0x51, 0x44, 0xff, 0x43, 0x43, 0x43, 0xff, 0x52, 0x52, 0x52, 0xff, 0x8c, 0x52, 0x47, 0xff, 0xff, 0x58, 0x39, 0xff, 0xe6, 0x4e, 0x35, 0xff, 0xef, 0x4c, 0x35, 0xff, 0xff, 0x4e, 0x37, 0xff, 0x3c, 0x19, 0x15, 0xff, 0x17, 0x17, 0x17, 0xff, 0x2a, 0x2a, 0x2a, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x42, 0x42, 0x42, 0xff, 0x1b, 0x1b, 0x1b, 0xd9, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xad, 0xad, 0xad, 0x01, 0x12, 0x12, 0x12, 0x0f, 0x37, 0x37, 0x37, 0xc0, 0x97, 0x98, 0x98, 0xff, 0xae, 0xaf, 0xae, 0xfe, 0xad, 0xad, 0xad, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa1, 0xa2, 0xa1, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0xdb, 0x78, 0x51, 0xff, 0xff, 0x74, 0x3d, 0xff, 0xfd, 0x70, 0x3d, 0xff, 0x24, 0x25, 0x25, 0xff, 0x5d, 0x4c, 0x49, 0xff, 0xfc, 0x66, 0x3a, 0xff, 0x41, 0x42, 0x42, 0xff, 0x47, 0x47, 0x47, 0xff, 0x55, 0x55, 0x54, 0xff, 0xfd, 0x5a, 0x39, 0xff, 0x32, 0x2d, 0x2d, 0xff, 0x66, 0x2f, 0x27, 0xff, 0xff, 0x53, 0x38, 0xff, 0x48, 0x22, 0x1d, 0xff, 0x16, 0x16, 0x16, 0xff, 0x29, 0x29, 0x29, 0xff, 0x30, 0x30, 0x30, 0xfe, 0x2c, 0x2c, 0x2c, 0xff, 0x1c, 0x1c, 0x1c, 0x9e, 0x2e, 0x2e, 0x2e, 0x01, 0xe4, 0xe4, 0xe4, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xe1, 0xe1, 0xe1, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x61, 0x61, 0x61, 0xfc, 0xb2, 0xb2, 0xb2, 0xff, 0xac, 0xad, 0xac, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x9e, 0x9f, 0x9f, 0xff, 0xe0, 0x7c, 0x51, 0xff, 0xff, 0x79, 0x3f, 0xff, 0xff, 0x77, 0x3f, 0xff, 0x30, 0x24, 0x23, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0xc0, 0x66, 0x4b, 0xff, 0xc2, 0x5d, 0x40, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0xe1, 0x5b, 0x3d, 0xff, 0xe9, 0x56, 0x38, 0xff, 0xf7, 0x56, 0x37, 0xff, 0xff, 0x57, 0x39, 0xff, 0x35, 0x1c, 0x19, 0xff, 0x18, 0x18, 0x17, 0xff, 0x29, 0x29, 0x29, 0xff, 0x20, 0x20, 0x20, 0xe9, 0x0c, 0x0c, 0x0c, 0x36, 0x00, 0x00, 0x00, 0x00, 0xf3, 0xf3, 0xf3, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0d, 0x0d, 0x06, 0x28, 0x28, 0x28, 0xb0, 0x8d, 0x8d, 0x8c, 0xff, 0xad, 0xad, 0xae, 0xfe, 0xa3, 0xa3, 0xa3, 0xff, 0xe4, 0x83, 0x52, 0xff, 0xff, 0x7d, 0x3f, 0xff, 0xff, 0x7b, 0x3f, 0xff, 0x46, 0x2c, 0x25, 0xff, 0x48, 0x48, 0x48, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0xfd, 0x6c, 0x3c, 0xff, 0x86, 0x4d, 0x3e, 0xff, 0x40, 0x41, 0x40, 0xff, 0xdf, 0x5f, 0x3d, 0xff, 0xff, 0x62, 0x3b, 0xff, 0xfd, 0x5d, 0x3a, 0xff, 0xfb, 0x58, 0x38, 0xff, 0x11, 0x11, 0x11, 0xff, 0x18, 0x18, 0x18, 0xff, 0x0f, 0x0f, 0x0f, 0x97, 0x00, 0x00, 0x00, 0x01, 0xf0, 0xf0, 0xf0, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xec, 0xec, 0xec, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x47, 0x57, 0x57, 0x57, 0xf5, 0xa9, 0xa9, 0xa9, 0xff, 0xeb, 0x86, 0x4f, 0xff, 0xff, 0x82, 0x40, 0xff, 0xff, 0x7f, 0x40, 0xff, 0xa5, 0x53, 0x30, 0xff, 0x49, 0x3d, 0x3a, 0xff, 0x5d, 0x5b, 0x5b, 0xff, 0x71, 0x61, 0x5e, 0xff, 0x58, 0x58, 0x58, 0xff, 0x4f, 0x4f, 0x4f, 0xff, 0xfc, 0x66, 0x3b, 0xff, 0xff, 0x66, 0x3b, 0xff, 0xff, 0x63, 0x3b, 0xff, 0x91, 0x39, 0x25, 0xff, 0x08, 0x08, 0x08, 0xf5, 0x01, 0x01, 0x01, 0x6b, 0x00, 0x00, 0x00, 0x0b, 0xf8, 0xf8, 0xf8, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf8, 0xf8, 0xf8, 0x01, 0x00, 0x00, 0x00, 0x00, 0x19, 0x19, 0x19, 0xa0, 0xed, 0x81, 0x45, 0xff, 0xff, 0x86, 0x40, 0xff, 0xff, 0x83, 0x40, 0xff, 0xf9, 0x7d, 0x3e, 0xff, 0xfe, 0x7d, 0x3f, 0xff, 0xfc, 0x76, 0x3d, 0xff, 0x63, 0x49, 0x40, 0xff, 0x4f, 0x4f, 0x4e, 0xff, 0x9b, 0x5e, 0x4b, 0xff, 0xff, 0x6e, 0x3d, 0xff, 0xfe, 0x69, 0x3b, 0xff, 0xfc, 0x65, 0x3a, 0xff, 0x01, 0x01, 0x01, 0xde, 0x00, 0x00, 0x00, 0x7e, 0x05, 0x05, 0x05, 0x27, 0x3f, 0x3f, 0x3f, 0x04, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf4, 0xf4, 0xf4, 0x01, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, 0x3f, 0xfa, 0xff, 0x8b, 0x41, 0xff, 0xff, 0x88, 0x41, 0xff, 0x89, 0x4d, 0x2e, 0xff, 0x40, 0x35, 0x32, 0xff, 0xf3, 0x78, 0x3e, 0xff, 0xff, 0x7c, 0x3f, 0xff, 0xc2, 0x5d, 0x38, 0xff, 0xff, 0x74, 0x3e, 0xff, 0xff, 0x72, 0x3e, 0xff, 0xfe, 0x6e, 0x3d, 0xff, 0x33, 0x13, 0x0c, 0xcf, 0x00, 0x00, 0x00, 0x8f, 0x04, 0x04, 0x04, 0x3e, 0x17, 0x17, 0x17, 0x0b, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfa, 0x8c, 0x40, 0xff, 0xff, 0x8f, 0x43, 0xff, 0xfe, 0x8c, 0x41, 0xff, 0xa0, 0x57, 0x2f, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0xed, 0x79, 0x41, 0xff, 0xff, 0x7d, 0x3f, 0xff, 0xfe, 0x7a, 0x3f, 0xff, 0xf3, 0x6e, 0x3b, 0xfe, 0x15, 0x07, 0x04, 0xb8, 0x00, 0x00, 0x00, 0x85, 0x03, 0x03, 0x03, 0x40, 0x11, 0x11, 0x11, 0x0f, 0x7f, 0x7f, 0x7f, 0x02, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfb, 0x92, 0x42, 0xff, 0xff, 0x93, 0x42, 0xff, 0xff, 0x91, 0x43, 0xff, 0xc0, 0x66, 0x31, 0xf3, 0x10, 0x10, 0x10, 0xf4, 0x6c, 0x6b, 0x6c, 0xff, 0xec, 0x7b, 0x42, 0xff, 0xff, 0x81, 0x40, 0xff, 0xff, 0x7e, 0x40, 0xff, 0x21, 0x0c, 0x07, 0xcb, 0x00, 0x00, 0x00, 0x92, 0x04, 0x04, 0x04, 0x39, 0x15, 0x15, 0x15, 0x0c, 0x7f, 0x7f, 0x7f, 0x02, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfe, 0x9a, 0x43, 0xff, 0xff, 0x98, 0x43, 0xff, 0xff, 0x95, 0x44, 0xff, 0xd3, 0x78, 0x37, 0xf5, 0x00, 0x00, 0x00, 0xa7, 0x04, 0x04, 0x04, 0xa2, 0xf9, 0x81, 0x3f, 0xff, 0xff, 0x85, 0x40, 0xff, 0xff, 0x83, 0x40, 0xff, 0x7d, 0x3a, 0x1e, 0xe0, 0x00, 0x00, 0x00, 0x90, 0x05, 0x05, 0x05, 0x2b, 0x55, 0x55, 0x55, 0x03, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x54, 0x54, 0x54, 0x03, 0xff, 0xa0, 0x45, 0xff, 0xff, 0x9c, 0x45, 0xff, 0xff, 0x99, 0x43, 0xff, 0xf4, 0x8a, 0x3f, 0xfe, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x4a, 0xfd, 0x8b, 0x41, 0xff, 0xff, 0x89, 0x41, 0xff, 0xfe, 0x85, 0x40, 0xff, 0x8c, 0x48, 0x23, 0xe3, 0x00, 0x00, 0x00, 0x9d, 0x05, 0x05, 0x05, 0x33, 0x3f, 0x3f, 0x3f, 0x04, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xc4, 0x50, 0x35, 0x17, 0xff, 0xa5, 0x46, 0xff, 0xff, 0xa0, 0x45, 0xff, 0xff, 0x9d, 0x44, 0xff, 0xfc, 0x96, 0x43, 0xff, 0x00, 0x00, 0x00, 0xb4, 0x1b, 0x08, 0x07, 0x60, 0xff, 0x91, 0x43, 0xff, 0xff, 0x8e, 0x42, 0xff, 0xff, 0x8b, 0x42, 0xff, 0x75, 0x3a, 0x1c, 0xde, 0x00, 0x00, 0x00, 0x96, 0x05, 0x05, 0x05, 0x2f, 0x55, 0x55, 0x55, 0x03, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xd1, 0x68, 0x38, 0x27, 0xff, 0xa9, 0x47, 0xff, 0xff, 0xa5, 0x46, 0xff, 0xff, 0xa1, 0x46, 0xff, 0xff, 0x9f, 0x45, 0xff, 0x0e, 0x03, 0x03, 0xbe, 0x4d, 0x24, 0x13, 0x7d, 0xff, 0x96, 0x44, 0xff, 0xfe, 0x92, 0x42, 0xff, 0xfc, 0x8c, 0x41, 0xff, 0x00, 0x00, 0x00, 0xbd, 0x02, 0x02, 0x02, 0x78, 0x08, 0x08, 0x08, 0x1d, 0x55, 0x55, 0x55, 0x03, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xe0, 0x7f, 0x3d, 0x31, 0xff, 0xae, 0x48, 0xff, 0xff, 0xa9, 0x46, 0xff, 0xff, 0xa6, 0x46, 0xff, 0xff, 0xa4, 0x46, 0xff, 0x31, 0x19, 0x0c, 0xc9, 0x5a, 0x33, 0x18, 0x92, 0xff, 0x9a, 0x44, 0xff, 0xff, 0x97, 0x43, 0xff, 0x50, 0x29, 0x14, 0xc9, 0x00, 0x00, 0x00, 0x92, 0x04, 0x04, 0x04, 0x3f, 0x19, 0x19, 0x19, 0x0a, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe7, 0x93, 0x3e, 0x37, 0xff, 0xb1, 0x48, 0xff, 0xff, 0xae, 0x47, 0xff, 0xff, 0xaa, 0x46, 0xff, 0xff, 0xa8, 0x47, 0xff, 0xea, 0x97, 0x40, 0xf9, 0xff, 0xa1, 0x45, 0xff, 0xe8, 0x89, 0x3c, 0xed, 0x25, 0x14, 0x09, 0x96, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x8b, 0x3b, 0x1f, 0xe5, 0x97, 0x3f, 0xab, 0xcc, 0x8d, 0x39, 0xc8, 0xbb, 0x7d, 0x34, 0xd7, 0xa8, 0x66, 0x2c, 0xd2, 0x5d, 0x39, 0x19, 0xab, 0x2d, 0x1a, 0x0b, 0x88, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #endif BOSSA-1.9.1/src/BossaInfo.cpp000066400000000000000000000061651333742133700155650ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaInfo.h" #include "BossaApp.h" #include BossaInfo::BossaInfo(wxWindow* parent) : InfoDialog(parent) { Samba& samba = wxGetApp().samba; Device::FlashPtr& flash = wxGetApp().device.getFlash(); _deviceTextCtrl->SetValue(wxString(flash->name().c_str(), wxConvUTF8)); _versionTextCtrl->SetValue(wxString(samba.version().c_str(), wxConvUTF8)); _pagesTextCtrl->SetValue(wxString::Format(wxT("%d"), flash->numPages())); _pageSizeTextCtrl->SetValue(wxString::Format(wxT("%d bytes"), flash->pageSize())); _totalSizeTextCtrl->SetValue(wxString::Format(wxT("%d KB"),flash->numPages() * flash->pageSize() / 1024)); _planesTextCtrl->SetValue(wxString::Format(wxT("%d"),flash->numPlanes())); _bootCheckBox->Enable(false); _securityCheckBox->Enable(false); _bodCheckBox->Enable(false); _borCheckBox->Enable(false); _bootCheckBox->SetValue(flash->getBootFlash()); _securityCheckBox->SetValue(flash->getSecurity()); _bodCheckBox->SetValue(flash->getBod()); _borCheckBox->SetValue(flash->getBor()); std::vector lockRegions = flash->getLockRegions(); bool hasLockRegion = false; for (uint32_t i = 0; i < lockRegions.size(); i++) { if (lockRegions[i]) { _lockTextCtrl->AppendText(wxString::Format(wxT("%s%d"), hasLockRegion ? "," : "", i)); hasLockRegion = true; } } GetSizer()->Fit(this); } BOSSA-1.9.1/src/BossaInfo.h000066400000000000000000000035761333742133700152350ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSAINFO_H #define _BOSSAINFO_H #include "BossaForm.h" class BossaInfo : public InfoDialog { public: BossaInfo(wxWindow* parent); }; #endif // _BOSSAINFO_H BOSSA-1.9.1/src/BossaLogo.cpp000066400000000000000000002461471333742133700156000ustar00rootroot00000000000000#ifndef BOSSALOGO_BMP_H #define BOSSALOGO_BMP_H static unsigned char BossaLogo_bmp[] = { 0x42, 0x4d, 0x56, 0x37, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x37, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x42, 0x42, 0x42, 0x93, 0x3f, 0x3f, 0x3f, 0xe0, 0x0b, 0x0b, 0x0b, 0x5b, 0x55, 0x55, 0x55, 0x02, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfa, 0xfa, 0xfa, 0x01, 0x00, 0x00, 0x00, 0x00, 0x32, 0x32, 0x32, 0x69, 0x4c, 0x4c, 0x4c, 0xec, 0x1f, 0x1f, 0x1f, 0x8b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0xfb, 0xfb, 0xfb, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x40, 0x40, 0x15, 0x5b, 0x5b, 0x5b, 0xf4, 0x90, 0x90, 0x90, 0xff, 0x93, 0x93, 0x93, 0xfe, 0x4c, 0x4c, 0x4c, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x38, 0x38, 0x57, 0x62, 0x62, 0x62, 0xff, 0xa1, 0xa1, 0xa1, 0xfe, 0x77, 0x77, 0x77, 0xff, 0x3b, 0x3b, 0x3b, 0xd4, 0x07, 0x07, 0x07, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfd, 0xfd, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x24, 0x08, 0x07, 0x05, 0x3d, 0x0d, 0x0c, 0x0f, 0x35, 0x0b, 0x0b, 0x18, 0x36, 0x0c, 0x0b, 0x1b, 0x2a, 0x09, 0x08, 0x1a, 0x13, 0x04, 0x04, 0x13, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x64, 0x16, 0x14, 0x0b, 0x5a, 0x14, 0x12, 0x39, 0x80, 0x1c, 0x1a, 0x92, 0x87, 0x1e, 0x1b, 0xb9, 0x81, 0x1c, 0x1a, 0xbb, 0x60, 0x15, 0x13, 0x99, 0x20, 0x07, 0x06, 0x55, 0x05, 0x01, 0x01, 0x20, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x57, 0x13, 0x12, 0x15, 0x67, 0x17, 0x15, 0x55, 0x82, 0x1d, 0x1a, 0xa3, 0x88, 0x1e, 0x1c, 0xbd, 0x7b, 0x1b, 0x19, 0xb6, 0x4b, 0x10, 0x0f, 0x83, 0x19, 0x05, 0x05, 0x41, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x12, 0x10, 0x0b, 0xa9, 0x25, 0x23, 0xd4, 0x32, 0x0b, 0x0a, 0xa7, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfe, 0xfe, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x25, 0x5e, 0x5e, 0x5e, 0x58, 0xce, 0xce, 0xce, 0xff, 0xbb, 0xbb, 0xbb, 0xfe, 0xad, 0xad, 0xad, 0xff, 0x6e, 0x6e, 0x6e, 0xff, 0x05, 0x05, 0x05, 0x60, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x0e, 0x0e, 0x03, 0x18, 0x18, 0x18, 0x06, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0xa3, 0x8f, 0x8f, 0x8f, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xce, 0xce, 0xce, 0xfe, 0x82, 0x82, 0x82, 0xfb, 0x17, 0x17, 0x17, 0x21, 0x02, 0x02, 0x02, 0x29, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xa8, 0x25, 0x22, 0x78, 0xa5, 0x24, 0x22, 0xdf, 0xae, 0x26, 0x24, 0xf5, 0xaf, 0x27, 0x24, 0xf9, 0xb0, 0x27, 0x24, 0xfb, 0xb1, 0x27, 0x24, 0xfb, 0xaf, 0x27, 0x24, 0xfb, 0xac, 0x26, 0x23, 0xf9, 0x95, 0x20, 0x1e, 0xe7, 0x3c, 0x0d, 0x0c, 0x94, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x29, 0x09, 0x08, 0x16, 0x7b, 0x1b, 0x19, 0x73, 0x7b, 0x1b, 0x19, 0x9a, 0x65, 0x16, 0x15, 0x8d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x24, 0x21, 0x77, 0xb2, 0x27, 0x24, 0xf9, 0xb8, 0x29, 0x26, 0xff, 0xb7, 0x28, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb7, 0x28, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb5, 0x27, 0x25, 0xfe, 0xa6, 0x25, 0x22, 0xf6, 0x1f, 0x07, 0x06, 0x86, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xaa, 0x25, 0x23, 0xc7, 0xb4, 0x28, 0x25, 0xfc, 0xb8, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x25, 0xff, 0xb8, 0x28, 0x25, 0xff, 0xb7, 0x29, 0x26, 0xff, 0xb7, 0x29, 0x26, 0xff, 0xb3, 0x28, 0x25, 0xfd, 0x91, 0x20, 0x1d, 0xe8, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x91, 0x20, 0x1e, 0x44, 0xb4, 0x28, 0x25, 0xfb, 0xb7, 0x29, 0x26, 0xff, 0xa3, 0x24, 0x21, 0xf7, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x21, 0x1f, 0x3f, 0x7e, 0x1b, 0x19, 0xb4, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xea, 0xea, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x5a, 0x5e, 0x5e, 0x5e, 0xf3, 0x47, 0x47, 0x47, 0xf2, 0x0b, 0x0b, 0x0b, 0x73, 0x60, 0x60, 0x60, 0x92, 0xd2, 0xd2, 0xd2, 0xff, 0xad, 0xad, 0xad, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0x03, 0x03, 0x03, 0x5e, 0x0d, 0x0d, 0x0d, 0x30, 0x43, 0x43, 0x43, 0xdc, 0x2e, 0x2e, 0x2e, 0xcb, 0x00, 0x00, 0x00, 0x34, 0x3c, 0x3c, 0x3c, 0xa2, 0x89, 0x89, 0x89, 0xff, 0xc2, 0xc2, 0xc2, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x26, 0x26, 0x26, 0x58, 0x35, 0x35, 0x35, 0x90, 0x5f, 0x5f, 0x5f, 0xfe, 0x48, 0x48, 0x48, 0xe8, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xb8, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb7, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xac, 0x26, 0x22, 0xfc, 0x68, 0x17, 0x15, 0xcd, 0xb6, 0x28, 0x25, 0xfb, 0xb8, 0x29, 0x26, 0xff, 0x9f, 0x23, 0x20, 0xf5, 0x36, 0x0c, 0x0b, 0xa9, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x24, 0x21, 0x4e, 0xa8, 0x25, 0x22, 0xe0, 0xb8, 0x29, 0x26, 0xff, 0xb7, 0x29, 0x25, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb7, 0x29, 0x26, 0xff, 0x9b, 0x22, 0x20, 0xf3, 0x47, 0x10, 0x0e, 0xae, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x26, 0x24, 0x86, 0xb7, 0x29, 0x26, 0xff, 0x84, 0x1d, 0x1b, 0xe5, 0x53, 0x12, 0x11, 0x82, 0x59, 0x13, 0x12, 0x4c, 0x7f, 0x1c, 0x1a, 0x5c, 0xa1, 0x24, 0x21, 0xc0, 0xb8, 0x28, 0x25, 0xff, 0xb7, 0x28, 0x25, 0xff, 0xb8, 0x29, 0x26, 0xff, 0xb6, 0x27, 0x25, 0xfe, 0x42, 0x0e, 0x0d, 0xb9, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb1, 0x26, 0x23, 0xd6, 0xb9, 0x28, 0x26, 0xff, 0x6e, 0x18, 0x16, 0xca, 0x51, 0x11, 0x10, 0x67, 0x62, 0x15, 0x14, 0x4a, 0x87, 0x1e, 0x1b, 0x6e, 0xb2, 0x27, 0x24, 0xee, 0xba, 0x28, 0x25, 0xff, 0xb9, 0x28, 0x24, 0xff, 0xba, 0x29, 0x25, 0xff, 0xa8, 0x25, 0x21, 0xf9, 0x10, 0x03, 0x03, 0x78, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xa1, 0x23, 0x20, 0xa5, 0xbb, 0x29, 0x26, 0xff, 0xbc, 0x29, 0x26, 0xff, 0xbc, 0x29, 0x26, 0xff, 0xbc, 0x29, 0x26, 0xff, 0x1a, 0x05, 0x05, 0x8c, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb5, 0x27, 0x24, 0xd6, 0xbf, 0x29, 0x26, 0xff, 0xaa, 0x25, 0x22, 0xf7, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfc, 0xfc, 0xfc, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x58, 0x58, 0x58, 0x72, 0x7c, 0x7c, 0x7c, 0xff, 0xad, 0xad, 0xad, 0xfe, 0x8f, 0x8f, 0x8f, 0xff, 0x43, 0x43, 0x43, 0xee, 0x53, 0x53, 0x53, 0x91, 0xd0, 0xd0, 0xd0, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0x67, 0x67, 0x67, 0xff, 0x28, 0x28, 0x28, 0xc0, 0x50, 0x50, 0x50, 0xff, 0x5f, 0x5f, 0x5f, 0xff, 0x4e, 0x4e, 0x4e, 0xff, 0x38, 0x38, 0x38, 0xf3, 0x33, 0x33, 0x33, 0xdc, 0x82, 0x82, 0x82, 0xff, 0xb9, 0xb9, 0xb9, 0xff, 0xae, 0xae, 0xae, 0xff, 0x07, 0x07, 0x07, 0x6d, 0x5f, 0x5f, 0x5f, 0xff, 0x9d, 0x9d, 0x9d, 0xfe, 0xa6, 0xa6, 0xa6, 0xff, 0x65, 0x65, 0x65, 0xff, 0x07, 0x07, 0x07, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0xf5, 0xf5, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xb7, 0x29, 0x26, 0xfe, 0xb7, 0x29, 0x26, 0xff, 0x54, 0x12, 0x11, 0xd7, 0x8f, 0x20, 0x1d, 0xae, 0xa7, 0x24, 0x22, 0xdc, 0xb7, 0x29, 0x25, 0xff, 0x84, 0x1d, 0x1b, 0xe8, 0x00, 0x00, 0x00, 0x69, 0xb2, 0x28, 0x25, 0xa4, 0xb7, 0x28, 0x26, 0xff, 0xb7, 0x29, 0x26, 0xff, 0xb8, 0x29, 0x26, 0xff, 0x38, 0x0c, 0x0b, 0xc4, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x24, 0x21, 0x88, 0xb8, 0x28, 0x25, 0xff, 0xb8, 0x28, 0x26, 0xff, 0x85, 0x1d, 0x1b, 0xe1, 0xb6, 0x27, 0x24, 0xfc, 0x42, 0x0e, 0x0d, 0xc9, 0x8d, 0x1f, 0x1d, 0x99, 0xaf, 0x26, 0x24, 0xea, 0xb9, 0x28, 0x25, 0xff, 0xb9, 0x28, 0x25, 0xff, 0x66, 0x16, 0x14, 0xda, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x28, 0x25, 0xf4, 0x81, 0x1c, 0x19, 0xe9, 0x00, 0x00, 0x00, 0x41, 0xa1, 0x23, 0x20, 0xa2, 0x8e, 0x1f, 0x1c, 0xd3, 0x34, 0x0b, 0x0a, 0x8e, 0x00, 0x00, 0x00, 0x1a, 0xb2, 0x27, 0x24, 0xa7, 0xbc, 0x29, 0x26, 0xff, 0xbc, 0x29, 0x26, 0xff, 0xbb, 0x29, 0x25, 0xff, 0xb5, 0x27, 0x24, 0xfd, 0x00, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x27, 0x24, 0x3b, 0xbd, 0x2a, 0x26, 0xff, 0x38, 0x0c, 0x0b, 0xbe, 0x54, 0x11, 0x10, 0x30, 0xa0, 0x23, 0x20, 0xc3, 0x81, 0x1c, 0x19, 0xcb, 0x0d, 0x03, 0x02, 0x62, 0x00, 0x00, 0x00, 0x08, 0xb7, 0x28, 0x25, 0xe6, 0xbd, 0x29, 0x26, 0xff, 0xbe, 0x2a, 0x27, 0xff, 0xbe, 0x29, 0x26, 0xff, 0x94, 0x20, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x28, 0x25, 0xbd, 0xbf, 0x2a, 0x27, 0xff, 0xc0, 0x2a, 0x27, 0xff, 0x45, 0x0f, 0x0e, 0xba, 0xae, 0x26, 0x23, 0xc1, 0xbf, 0x2a, 0x26, 0xff, 0x52, 0x12, 0x10, 0xd3, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x27, 0x24, 0x13, 0xc3, 0x2b, 0x28, 0xff, 0xc3, 0x2b, 0x28, 0xff, 0x5b, 0x14, 0x12, 0xcd, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x31, 0x31, 0x4e, 0x05, 0x05, 0x05, 0x4d, 0x6b, 0x6b, 0x6b, 0xaa, 0xcd, 0xcd, 0xcd, 0xff, 0xbc, 0xbc, 0xbc, 0xfe, 0xa6, 0xa6, 0xa6, 0xff, 0x51, 0x51, 0x51, 0xee, 0x5c, 0x5c, 0x5c, 0xd8, 0xce, 0xce, 0xce, 0xff, 0xa4, 0xa4, 0xa4, 0xff, 0xa1, 0xa1, 0xa1, 0xfe, 0x40, 0x40, 0x40, 0xff, 0x49, 0x49, 0x49, 0xfe, 0x5f, 0x5f, 0x5f, 0xff, 0x49, 0x49, 0x49, 0xff, 0x28, 0x28, 0x28, 0xff, 0x59, 0x59, 0x59, 0xff, 0xa5, 0xa5, 0xa5, 0xfe, 0xb2, 0xb2, 0xb2, 0xff, 0xc1, 0xc1, 0xc1, 0xff, 0x22, 0x22, 0x22, 0xad, 0x6f, 0x6f, 0x6f, 0xfe, 0xb4, 0xb4, 0xb4, 0xff, 0xc3, 0xc3, 0xc3, 0xfe, 0xa9, 0xa9, 0xa9, 0xfd, 0x1e, 0x1e, 0x1e, 0x4a, 0x32, 0x32, 0x32, 0x66, 0x0e, 0x0e, 0x0e, 0x56, 0x06, 0x06, 0x06, 0x03, 0x00, 0x00, 0x00, 0x00, 0xfd, 0xfd, 0xfd, 0x01, 0xff, 0xff, 0xff, 0x01, 0xb9, 0x28, 0x25, 0xff, 0xb9, 0x29, 0x25, 0xff, 0x28, 0x08, 0x08, 0xcb, 0x13, 0x04, 0x03, 0x27, 0x00, 0x00, 0x00, 0x0f, 0x80, 0x1c, 0x1a, 0x0d, 0xb2, 0x27, 0x24, 0xdb, 0x97, 0x21, 0x1e, 0xd7, 0xba, 0x29, 0x26, 0xff, 0x7f, 0x1c, 0x19, 0xe6, 0x31, 0x0a, 0x0a, 0x71, 0xb6, 0x28, 0x25, 0xf1, 0xb8, 0x28, 0x25, 0xfd, 0x0d, 0x02, 0x02, 0xab, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb2, 0x26, 0x24, 0x8e, 0xbc, 0x2a, 0x26, 0xff, 0xb9, 0x29, 0x25, 0xfe, 0x20, 0x07, 0x06, 0xa2, 0x00, 0x00, 0x00, 0x1c, 0xb9, 0x29, 0x25, 0xe2, 0x27, 0x08, 0x08, 0xb4, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x29, 0x26, 0xf9, 0xbd, 0x29, 0x26, 0xff, 0xbe, 0x2a, 0x27, 0xff, 0x5e, 0x14, 0x12, 0xdc, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x2a, 0x27, 0xff, 0x43, 0x0e, 0x0d, 0xcd, 0x8a, 0x1e, 0x1b, 0x36, 0xb4, 0x27, 0x23, 0xf0, 0xb3, 0x26, 0x24, 0xf3, 0xb4, 0x27, 0x24, 0xf9, 0x00, 0x00, 0x00, 0x79, 0x95, 0x1f, 0x1d, 0x09, 0xbf, 0x29, 0x26, 0xf8, 0xc1, 0x2b, 0x27, 0xff, 0xc1, 0x2b, 0x27, 0xff, 0xc1, 0x2b, 0x27, 0xff, 0x5d, 0x14, 0x12, 0xdb, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x29, 0x26, 0x56, 0xbc, 0x29, 0x25, 0xfb, 0x08, 0x01, 0x01, 0x85, 0xbd, 0x2a, 0x27, 0xc0, 0xa1, 0x23, 0x20, 0xe6, 0xc2, 0x2b, 0x28, 0xff, 0x97, 0x21, 0x1f, 0xef, 0x00, 0x00, 0x00, 0x35, 0xc0, 0x2a, 0x27, 0x49, 0xc3, 0x2b, 0x28, 0xff, 0xc4, 0x2b, 0x28, 0xff, 0xc4, 0x2b, 0x28, 0xff, 0xc4, 0x2b, 0x28, 0xff, 0x31, 0x0b, 0x09, 0xa8, 0x00, 0x00, 0x00, 0x05, 0xb0, 0x26, 0x24, 0x35, 0xc5, 0x2b, 0x28, 0xff, 0xc5, 0x2c, 0x28, 0xff, 0x5a, 0x13, 0x12, 0xcc, 0xa5, 0x24, 0x21, 0x7c, 0xc5, 0x2c, 0x28, 0xff, 0xbd, 0x29, 0x26, 0xfc, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x26, 0x23, 0x58, 0xc8, 0x2c, 0x29, 0xff, 0xc8, 0x2c, 0x29, 0xff, 0x2f, 0x0a, 0x09, 0x89, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x26, 0x26, 0x26, 0x08, 0x46, 0x46, 0x46, 0xab, 0x73, 0x73, 0x73, 0xff, 0x57, 0x57, 0x57, 0xff, 0x0e, 0x0e, 0x0e, 0x93, 0x56, 0x56, 0x56, 0xdc, 0xcb, 0xcb, 0xcb, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0x51, 0x51, 0x51, 0xf2, 0x74, 0x74, 0x74, 0xff, 0xba, 0xba, 0xba, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0x52, 0x52, 0x52, 0xff, 0x63, 0x63, 0x63, 0xff, 0x63, 0x63, 0x63, 0xff, 0x41, 0x41, 0x41, 0xff, 0x42, 0x42, 0x42, 0xff, 0x99, 0x99, 0x99, 0xff, 0xd2, 0xd2, 0xd2, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xc5, 0xc5, 0xc5, 0xff, 0x39, 0x39, 0x39, 0xe0, 0x6b, 0x6b, 0x6b, 0xfe, 0xb0, 0xb0, 0xb0, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0x1e, 0x1e, 0x1e, 0x8f, 0x3b, 0x3b, 0x3b, 0xc8, 0x6f, 0x6f, 0x6f, 0xff, 0x61, 0x61, 0x61, 0xff, 0x1d, 0x1d, 0x1d, 0xa1, 0x04, 0x04, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x44, 0x42, 0x08, 0xbd, 0x29, 0x26, 0xff, 0xbd, 0x29, 0x26, 0xff, 0x40, 0x0d, 0x0c, 0xd7, 0xaa, 0x24, 0x22, 0xb6, 0x18, 0x05, 0x04, 0x7c, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0xb3, 0x27, 0x24, 0x7c, 0xbe, 0x29, 0x27, 0xff, 0x1a, 0x05, 0x05, 0xbd, 0x00, 0x00, 0x00, 0x1a, 0xbb, 0x29, 0x25, 0x6a, 0xbf, 0x2a, 0x26, 0xff, 0x81, 0x1b, 0x19, 0xec, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb9, 0x29, 0x26, 0x3b, 0xc0, 0x2a, 0x27, 0xff, 0xc1, 0x2a, 0x27, 0xff, 0x87, 0x1d, 0x1b, 0xed, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x29, 0x26, 0xce, 0x33, 0x0b, 0x0a, 0x9c, 0x00, 0x00, 0x00, 0x12, 0xbc, 0x28, 0x25, 0x9b, 0xae, 0x25, 0x23, 0xef, 0x98, 0x20, 0x1e, 0xd1, 0xc1, 0x29, 0x26, 0xff, 0xc3, 0x2a, 0x27, 0xff, 0x2a, 0x09, 0x08, 0xbf, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x2a, 0x27, 0xff, 0x5c, 0x13, 0x12, 0xd8, 0x25, 0x08, 0x07, 0x2e, 0x97, 0x21, 0x1e, 0x71, 0xa2, 0x22, 0x20, 0x7a, 0xc4, 0x2b, 0x27, 0xff, 0x00, 0x00, 0x00, 0x91, 0x00, 0x00, 0x00, 0x03, 0xc3, 0x2a, 0x26, 0xf0, 0xc5, 0x2b, 0x27, 0xff, 0xc5, 0x2b, 0x28, 0xff, 0xc6, 0x2b, 0x28, 0xff, 0xad, 0x25, 0x22, 0xf7, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x29, 0x25, 0x49, 0xc5, 0x2a, 0x27, 0xfd, 0x03, 0x00, 0x00, 0x9b, 0x9e, 0x22, 0x1f, 0x39, 0x59, 0x13, 0x11, 0x4f, 0xb8, 0x28, 0x25, 0xbb, 0xbf, 0x29, 0x26, 0xfc, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2c, 0x28, 0xff, 0xc8, 0x2c, 0x28, 0xff, 0xc8, 0x2b, 0x28, 0xff, 0xc8, 0x2c, 0x28, 0xff, 0x61, 0x14, 0x13, 0xd3, 0x00, 0x00, 0x00, 0x15, 0xc7, 0x2c, 0x28, 0x02, 0xc5, 0x2a, 0x28, 0xf4, 0xc8, 0x2b, 0x27, 0xff, 0x96, 0x20, 0x1d, 0xee, 0x45, 0x0f, 0x0d, 0x5a, 0xc9, 0x2b, 0x27, 0xff, 0xca, 0x2c, 0x28, 0xff, 0x3a, 0x0c, 0x0b, 0xaf, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0a, 0xb8, 0x28, 0x25, 0xc8, 0xcc, 0x2c, 0x29, 0xff, 0xc7, 0x2b, 0x28, 0xfe, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x61, 0x61, 0x61, 0xbe, 0xa2, 0xa2, 0xa2, 0xff, 0xb0, 0xb0, 0xb0, 0xfe, 0x94, 0x94, 0x94, 0xff, 0x46, 0x46, 0x46, 0xee, 0x6c, 0x6c, 0x6c, 0xfd, 0xc9, 0xc9, 0xc9, 0xff, 0x98, 0x98, 0x98, 0xff, 0x51, 0x51, 0x51, 0xfd, 0x59, 0x59, 0x59, 0xff, 0x98, 0x98, 0x98, 0xfe, 0x7f, 0x7f, 0x7f, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x5c, 0x5c, 0x5c, 0xff, 0x47, 0x48, 0x47, 0xff, 0x44, 0x44, 0x44, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x46, 0x46, 0x46, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x73, 0x73, 0x73, 0xff, 0x41, 0x41, 0x41, 0xfb, 0x61, 0x61, 0x61, 0xfe, 0xaa, 0xaa, 0xaa, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0x32, 0x32, 0x32, 0xd5, 0x61, 0x61, 0x61, 0xff, 0x9c, 0x9c, 0x9c, 0xfe, 0xbc, 0xbc, 0xbc, 0xfe, 0x83, 0x83, 0x83, 0xff, 0x1d, 0x1d, 0x1d, 0x8a, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x31, 0x2e, 0x1d, 0xc2, 0x2a, 0x27, 0xff, 0xc2, 0x2a, 0x27, 0xff, 0x61, 0x15, 0x13, 0xe2, 0x42, 0x0e, 0x0d, 0x54, 0xb0, 0x26, 0x23, 0xce, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2a, 0x26, 0xaf, 0xa1, 0x23, 0x20, 0xdb, 0x66, 0x16, 0x14, 0xba, 0xbb, 0x29, 0x25, 0xf4, 0xc3, 0x2a, 0x26, 0xff, 0xc4, 0x2b, 0x27, 0xff, 0x03, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc1, 0x2a, 0x27, 0xed, 0xc5, 0x2b, 0x28, 0xff, 0xa9, 0x25, 0x21, 0xf6, 0xc5, 0x2b, 0x28, 0xff, 0x59, 0x13, 0x11, 0xcb, 0x00, 0x00, 0x00, 0x46, 0xb1, 0x27, 0x24, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0xc4, 0x2b, 0x29, 0x01, 0xc5, 0x2a, 0x27, 0xfd, 0x41, 0x0e, 0x0d, 0xbe, 0x58, 0x13, 0x11, 0x26, 0xc7, 0x2c, 0x28, 0xff, 0xc6, 0x2b, 0x27, 0xff, 0xb8, 0x28, 0x25, 0xfb, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x29, 0x27, 0xce, 0xbb, 0x29, 0x25, 0xf7, 0x59, 0x14, 0x11, 0xbf, 0x73, 0x19, 0x16, 0x8f, 0xbf, 0x2a, 0x26, 0xf4, 0xb1, 0x26, 0x24, 0xf6, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x01, 0xc7, 0x2b, 0x27, 0xf2, 0xca, 0x2c, 0x28, 0xff, 0xca, 0x2d, 0x29, 0xff, 0xca, 0x2c, 0x29, 0xff, 0xc6, 0x2c, 0x27, 0xfe, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2b, 0x28, 0x10, 0xcb, 0x2d, 0x29, 0xff, 0x9f, 0x22, 0x20, 0xee, 0x56, 0x12, 0x11, 0xa2, 0x8c, 0x1e, 0x1d, 0xa3, 0xcb, 0x2c, 0x29, 0xff, 0x8a, 0x1e, 0x1c, 0xe5, 0x00, 0x00, 0x00, 0x24, 0xab, 0x26, 0x20, 0x03, 0xcc, 0x2d, 0x2a, 0xff, 0xcc, 0x2c, 0x29, 0xff, 0xcd, 0x2d, 0x29, 0xff, 0xcd, 0x2d, 0x29, 0xff, 0x6f, 0x18, 0x16, 0xdc, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x2b, 0x27, 0x5c, 0xce, 0x2d, 0x2a, 0xff, 0xcb, 0x2c, 0x28, 0xfe, 0x01, 0x00, 0x00, 0x85, 0xce, 0x2e, 0x29, 0xff, 0xce, 0x2c, 0x28, 0xff, 0xbc, 0x2a, 0x25, 0xf9, 0xb1, 0x26, 0x23, 0xf1, 0xb1, 0x26, 0x23, 0xf1, 0xb2, 0x26, 0x24, 0xf1, 0xb3, 0x26, 0x24, 0xf0, 0xb3, 0x26, 0x24, 0xf0, 0xb3, 0x26, 0x24, 0xf0, 0xb3, 0x26, 0x24, 0xf0, 0xb3, 0x26, 0x24, 0xf0, 0xb2, 0x27, 0x23, 0xef, 0xd0, 0x2e, 0x2a, 0xff, 0xd1, 0x2e, 0x2a, 0xff, 0x6f, 0x18, 0x16, 0xd4, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x68, 0x68, 0x68, 0x80, 0xa8, 0xa8, 0xa8, 0xff, 0xc7, 0xc7, 0xc7, 0xfe, 0xa2, 0xa2, 0xa2, 0xff, 0x4c, 0x4c, 0x4c, 0xf9, 0x97, 0x97, 0x97, 0xff, 0xc3, 0xc3, 0xc3, 0xfe, 0xb7, 0xb7, 0xb7, 0xff, 0xbd, 0xbd, 0xbd, 0xff, 0x34, 0x34, 0x34, 0xfe, 0x6b, 0x6b, 0x6b, 0xff, 0x87, 0x87, 0x87, 0xff, 0x89, 0x89, 0x89, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0x51, 0x51, 0x51, 0xff, 0x4b, 0x4c, 0x4c, 0xff, 0x45, 0x45, 0x45, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x44, 0x44, 0x44, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x3f, 0x3f, 0x3f, 0xfe, 0x60, 0x60, 0x60, 0xff, 0xc8, 0xc8, 0xc8, 0xff, 0xaf, 0xaf, 0xaf, 0xff, 0xd7, 0xd7, 0xd7, 0xff, 0x47, 0x47, 0x47, 0xf4, 0x65, 0x65, 0x65, 0xfe, 0xb3, 0xb3, 0xb3, 0xff, 0xc7, 0xc7, 0xc7, 0xff, 0x80, 0x80, 0x80, 0xf0, 0x31, 0x31, 0x31, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x2f, 0x2c, 0x34, 0xc6, 0x2c, 0x28, 0xff, 0xc6, 0x2c, 0x28, 0xff, 0x7f, 0x1b, 0x19, 0xea, 0x04, 0x01, 0x00, 0x4f, 0xc6, 0x2b, 0x28, 0xee, 0x3b, 0x0c, 0x0b, 0xae, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc6, 0x2b, 0x27, 0xf6, 0xc4, 0x2b, 0x28, 0xfe, 0xa9, 0x24, 0x22, 0xec, 0xc8, 0x2c, 0x29, 0xff, 0xc8, 0x2c, 0x29, 0xff, 0x1c, 0x06, 0x05, 0xb4, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x2a, 0x26, 0x3b, 0xc9, 0x2c, 0x29, 0xff, 0xc9, 0x2c, 0x29, 0xff, 0x36, 0x0b, 0x0b, 0xc5, 0x8d, 0x1e, 0x1c, 0x43, 0xc8, 0x2c, 0x28, 0xf9, 0x1c, 0x06, 0x05, 0x77, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0xc7, 0x2c, 0x28, 0x1b, 0xbc, 0x29, 0x26, 0xcb, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2a, 0x26, 0xbd, 0xcb, 0x2d, 0x29, 0xff, 0xcb, 0x2d, 0x2a, 0xff, 0x50, 0x11, 0x10, 0xd3, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x2d, 0x28, 0x12, 0xc5, 0x2a, 0x28, 0xe4, 0xcd, 0x2d, 0x2a, 0xff, 0xcd, 0x2d, 0x2a, 0xff, 0xbd, 0x29, 0x26, 0xf6, 0x40, 0x0e, 0x0c, 0x84, 0x00, 0x00, 0x00, 0x0c, 0xcb, 0x2c, 0x29, 0x0f, 0xcc, 0x2c, 0x29, 0xfc, 0xce, 0x2d, 0x2a, 0xff, 0xce, 0x2d, 0x2a, 0xff, 0xce, 0x2d, 0x2a, 0xff, 0xbf, 0x29, 0x26, 0xfa, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x2a, 0x26, 0x42, 0xc8, 0x2c, 0x28, 0xf2, 0xd0, 0x2e, 0x2a, 0xff, 0xd0, 0x2e, 0x2a, 0xff, 0xac, 0x26, 0x22, 0xe9, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x02, 0xbf, 0x2a, 0x26, 0x74, 0xd1, 0x2e, 0x2a, 0xff, 0xd1, 0x2e, 0x2b, 0xff, 0xd1, 0x2e, 0x2b, 0xff, 0xd1, 0x2e, 0x2b, 0xff, 0x6b, 0x17, 0x15, 0xd6, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x2c, 0x28, 0xeb, 0xd2, 0x2e, 0x2b, 0xff, 0x6a, 0x17, 0x15, 0xd6, 0xc6, 0x2b, 0x28, 0xd6, 0xd3, 0x2e, 0x2b, 0xff, 0xd1, 0x2d, 0x2a, 0xff, 0xc4, 0x2b, 0x28, 0xf8, 0xcd, 0x2d, 0x29, 0xfb, 0xd3, 0x2e, 0x29, 0xfe, 0xd4, 0x2f, 0x2a, 0xff, 0xd4, 0x2f, 0x2b, 0xff, 0xd5, 0x2f, 0x2b, 0xff, 0xd5, 0x2f, 0x2b, 0xff, 0xd4, 0x2f, 0x2b, 0xff, 0xd4, 0x2e, 0x2b, 0xff, 0xd5, 0x2f, 0x2b, 0xff, 0xd3, 0x2d, 0x2a, 0xfe, 0x09, 0x02, 0x01, 0x82, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0xea, 0xea, 0x01, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x5b, 0x5b, 0xee, 0xcc, 0xcc, 0xcc, 0xff, 0x9c, 0x9c, 0x9c, 0xff, 0x4e, 0x4e, 0x4e, 0xfe, 0xb5, 0xb5, 0xb5, 0xff, 0xab, 0xab, 0xab, 0xff, 0xc6, 0xc6, 0xc6, 0xff, 0x92, 0x92, 0x92, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0xac, 0xac, 0xac, 0xff, 0x80, 0x81, 0x81, 0xff, 0x5f, 0x5f, 0x5f, 0xff, 0x5c, 0x5d, 0x5c, 0xff, 0x56, 0x55, 0x56, 0xff, 0x4f, 0x4f, 0x4f, 0xff, 0x49, 0x49, 0x49, 0xff, 0x43, 0x43, 0x43, 0xff, 0x3c, 0x3c, 0x3c, 0xff, 0x3b, 0x3b, 0x3b, 0xff, 0x49, 0x49, 0x49, 0xff, 0x50, 0x50, 0x50, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0xb1, 0xb1, 0xb1, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xb7, 0xb7, 0xb7, 0xfe, 0x6a, 0x6a, 0x6a, 0xff, 0x61, 0x61, 0x61, 0xff, 0xac, 0xac, 0xac, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0x26, 0x26, 0x26, 0xa2, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x01, 0xc8, 0x2d, 0x2b, 0x4a, 0xcb, 0x2d, 0x29, 0xff, 0xcb, 0x2d, 0x29, 0xff, 0x99, 0x22, 0x1e, 0xf0, 0x00, 0x00, 0x00, 0x5e, 0xc9, 0x2d, 0x28, 0x47, 0xc5, 0x2b, 0x27, 0xec, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2b, 0x29, 0xc9, 0x86, 0x1c, 0x1b, 0xd0, 0x00, 0x00, 0x00, 0x57, 0xc7, 0x2c, 0x29, 0xbc, 0xce, 0x2e, 0x2a, 0xff, 0x22, 0x07, 0x07, 0xb9, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0xcb, 0x2d, 0x29, 0xe9, 0xce, 0x2d, 0x2a, 0xff, 0xce, 0x2e, 0x2a, 0xff, 0x00, 0x00, 0x00, 0x9d, 0x0b, 0x02, 0x02, 0x26, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x28, 0x25, 0xa2, 0xcf, 0x2c, 0x29, 0xff, 0xd0, 0x2d, 0x28, 0xff, 0xd0, 0x2d, 0x2a, 0xff, 0x9d, 0x22, 0x1f, 0xf0, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x2b, 0x28, 0xd5, 0xd3, 0x2f, 0x2b, 0xff, 0xd3, 0x2f, 0x2b, 0xff, 0xd4, 0x2f, 0x2b, 0xff, 0xd4, 0x2f, 0x2b, 0xff, 0x80, 0x1c, 0x1a, 0xe3, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0xcf, 0x2d, 0x29, 0xf6, 0xd5, 0x2e, 0x2b, 0xff, 0xd6, 0x2f, 0x2c, 0xff, 0xd6, 0x30, 0x2c, 0xff, 0xd6, 0x2f, 0x2c, 0xff, 0x49, 0x0f, 0x0e, 0xb0, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x2d, 0x2a, 0x7d, 0xd7, 0x2f, 0x2c, 0xff, 0xc4, 0x2b, 0x27, 0xfa, 0x41, 0x0e, 0x0d, 0x80, 0xd7, 0x30, 0x2c, 0xff, 0xd8, 0x30, 0x2c, 0xff, 0x12, 0x04, 0x03, 0xa0, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x16, 0x44, 0x0f, 0x0d, 0x24, 0x85, 0x1c, 0x1a, 0x51, 0x94, 0x20, 0x1d, 0x75, 0x9e, 0x22, 0x1f, 0x8c, 0xcd, 0x2d, 0x29, 0xf1, 0xda, 0x30, 0x2c, 0xff, 0xcc, 0x2d, 0x28, 0xfb, 0x06, 0x01, 0x01, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0x55, 0x55, 0x55, 0x09, 0x87, 0x87, 0x87, 0xf8, 0xc7, 0xc7, 0xc7, 0xff, 0x99, 0x99, 0x99, 0xff, 0x52, 0x52, 0x52, 0xff, 0x50, 0x50, 0x50, 0xff, 0x95, 0x95, 0x95, 0xff, 0x5c, 0x5c, 0x5c, 0xff, 0xbe, 0xbe, 0xbe, 0xff, 0xb6, 0xb6, 0xb6, 0xff, 0x72, 0x72, 0x72, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x67, 0x67, 0x67, 0xff, 0x60, 0x60, 0x60, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x54, 0x54, 0x54, 0xff, 0x4e, 0x4d, 0x4d, 0xff, 0x47, 0x47, 0x47, 0xff, 0x41, 0x41, 0x41, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x32, 0x32, 0x32, 0xff, 0x40, 0x40, 0x40, 0xff, 0x50, 0x50, 0x50, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0x76, 0x76, 0x76, 0xff, 0x41, 0x41, 0x41, 0xff, 0x64, 0x64, 0x64, 0xff, 0xa6, 0xa6, 0xa6, 0xff, 0xd5, 0xd5, 0xd5, 0xff, 0x3c, 0x3c, 0x3c, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcd, 0x2f, 0x2b, 0x5d, 0xd0, 0x2d, 0x29, 0xff, 0xcf, 0x2c, 0x29, 0xff, 0xaa, 0x24, 0x22, 0xf4, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x00, 0xce, 0x2d, 0x28, 0xd5, 0x88, 0x1d, 0x1b, 0xd3, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x02, 0xce, 0x2c, 0x29, 0x7e, 0xcb, 0x2c, 0x28, 0xf8, 0x84, 0x1c, 0x1b, 0xdb, 0xd0, 0x2d, 0x29, 0xfd, 0xd2, 0x2d, 0x2a, 0xff, 0x1b, 0x06, 0x05, 0xab, 0x00, 0x00, 0x00, 0x07, 0xd0, 0x2d, 0x2a, 0x0f, 0xd3, 0x2e, 0x2a, 0xff, 0xd2, 0x2d, 0x29, 0xff, 0xd1, 0x2d, 0x29, 0xfe, 0xc4, 0x2a, 0x27, 0xfa, 0xc4, 0x2a, 0x28, 0xf9, 0x08, 0x01, 0x01, 0x8f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x2d, 0x29, 0x92, 0xc3, 0x2b, 0x27, 0xe8, 0x3b, 0x0c, 0x0c, 0x6f, 0xd4, 0x2d, 0x2a, 0xfb, 0xd5, 0x2e, 0x2b, 0xff, 0xd4, 0x2e, 0x2b, 0xff, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbd, 0x2a, 0x26, 0xa0, 0xd7, 0x2f, 0x2b, 0xff, 0xd7, 0x2e, 0x2a, 0xff, 0xd8, 0x2f, 0x2b, 0xff, 0xd7, 0x2e, 0x2a, 0xff, 0xd6, 0x2e, 0x2b, 0xff, 0x0b, 0x02, 0x02, 0x92, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0xcd, 0x2d, 0x29, 0xe8, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x2f, 0x2b, 0xff, 0xd2, 0x2e, 0x2a, 0xfd, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x2f, 0x2b, 0xf8, 0xdc, 0x30, 0x2c, 0xff, 0x40, 0x0e, 0x0c, 0xc5, 0xd2, 0x2d, 0x2a, 0xec, 0xdd, 0x30, 0x2c, 0xff, 0xd7, 0x2e, 0x2a, 0xfd, 0xc7, 0x2b, 0x27, 0xf7, 0xa2, 0x23, 0x20, 0xe0, 0x58, 0x12, 0x11, 0x99, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0xdd, 0x30, 0x2c, 0xff, 0xde, 0x30, 0x2c, 0xff, 0x91, 0x20, 0x1d, 0xde, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0x50, 0x50, 0x50, 0x14, 0xb8, 0xb8, 0xb8, 0xfc, 0xbd, 0xbd, 0xbd, 0xff, 0xc4, 0xc4, 0xc4, 0xff, 0xdb, 0xdb, 0xdb, 0xff, 0x34, 0x34, 0x34, 0xff, 0xbc, 0xbc, 0xbc, 0xff, 0xe2, 0xe2, 0xe2, 0xff, 0x8e, 0x8e, 0x8f, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x78, 0x77, 0x78, 0xff, 0x71, 0x71, 0x71, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x65, 0x65, 0x65, 0xff, 0x5e, 0x5f, 0x5f, 0xff, 0x57, 0x57, 0x57, 0xff, 0x51, 0x51, 0x51, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x44, 0x44, 0x44, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x38, 0x38, 0x38, 0xff, 0x31, 0x31, 0x31, 0xff, 0x32, 0x32, 0x32, 0xff, 0x50, 0x50, 0x50, 0xff, 0x56, 0x56, 0x56, 0xff, 0x49, 0x49, 0x49, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0xdc, 0xdc, 0xdc, 0xff, 0xb6, 0xb6, 0xb6, 0xff, 0xd8, 0xd8, 0xd8, 0xff, 0x5f, 0x5f, 0x5f, 0xe9, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0xd2, 0x2f, 0x2b, 0x6e, 0xd4, 0x2f, 0x2b, 0xff, 0xd4, 0x2e, 0x2b, 0xff, 0xb6, 0x27, 0x25, 0xf7, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2d, 0x2b, 0x2e, 0xd5, 0x2f, 0x2b, 0xff, 0x4d, 0x10, 0x0f, 0xcb, 0x00, 0x00, 0x00, 0x3e, 0xd5, 0x2f, 0x2b, 0x64, 0xd5, 0x2f, 0x2b, 0xff, 0xd6, 0x2f, 0x2b, 0xff, 0xd5, 0x2e, 0x2a, 0xff, 0xd5, 0x2f, 0x2b, 0xff, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x02, 0xd4, 0x2e, 0x2b, 0x22, 0xd7, 0x2f, 0x2b, 0xff, 0xd7, 0x2f, 0x2b, 0xff, 0xb9, 0x28, 0x25, 0xf6, 0x6d, 0x18, 0x15, 0xab, 0x95, 0x21, 0x1e, 0x66, 0x08, 0x01, 0x01, 0x19, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xca, 0x2b, 0x2b, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0xd8, 0x2e, 0x2a, 0xf5, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x30, 0x2c, 0xff, 0x26, 0x08, 0x07, 0xbd, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbf, 0x2a, 0x26, 0xa8, 0xdc, 0x30, 0x2c, 0xff, 0xdc, 0x31, 0x2d, 0xff, 0xdc, 0x31, 0x2c, 0xff, 0xdc, 0x31, 0x2c, 0xff, 0xdc, 0x30, 0x2d, 0xff, 0x9d, 0x22, 0x1f, 0xe7, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x0f, 0x10, 0x08, 0xcd, 0x2c, 0x29, 0xe3, 0xde, 0x30, 0x2d, 0xff, 0xdf, 0x31, 0x2d, 0xff, 0xdf, 0x31, 0x2d, 0xff, 0xde, 0x30, 0x2c, 0xff, 0xdf, 0x31, 0x2d, 0xff, 0x50, 0x11, 0x10, 0xaa, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x2d, 0x29, 0x78, 0xe0, 0x32, 0x2d, 0xff, 0xd8, 0x2f, 0x2b, 0xfd, 0xd2, 0x2e, 0x2a, 0xf8, 0xe1, 0x31, 0x2d, 0xff, 0xe1, 0x32, 0x2e, 0xff, 0xe1, 0x32, 0x2e, 0xff, 0xe2, 0x32, 0x2e, 0xff, 0xe2, 0x32, 0x2d, 0xff, 0xe1, 0x32, 0x2d, 0xff, 0xb5, 0x28, 0x24, 0xef, 0x8b, 0x1e, 0x1b, 0xd2, 0xa6, 0x24, 0x21, 0xcb, 0xe3, 0x32, 0x2e, 0xff, 0xe2, 0x32, 0x2e, 0xff, 0x14, 0x04, 0x04, 0x8a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x3c, 0x3c, 0x31, 0xa3, 0xa3, 0xa3, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0xb6, 0xb6, 0xb6, 0xff, 0x63, 0x63, 0x63, 0xff, 0xe5, 0xe5, 0xe5, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0x90, 0x90, 0x90, 0xff, 0x88, 0x88, 0x88, 0xff, 0x82, 0x82, 0x82, 0xff, 0x7b, 0x7b, 0x7b, 0xff, 0x75, 0x75, 0x75, 0xff, 0x6e, 0x6e, 0x6f, 0xff, 0x68, 0x68, 0x68, 0xff, 0x62, 0x62, 0x62, 0xff, 0x5c, 0x5c, 0x5c, 0xff, 0x55, 0x55, 0x55, 0xff, 0x4f, 0x4f, 0x4f, 0xff, 0x49, 0x49, 0x49, 0xff, 0x42, 0x42, 0x42, 0xff, 0x3c, 0x3b, 0x3c, 0xff, 0x35, 0x35, 0x35, 0xff, 0x30, 0x30, 0x30, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x3a, 0x3a, 0x3a, 0xff, 0x58, 0x58, 0x58, 0xff, 0x52, 0x52, 0x52, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0xc0, 0xc0, 0xc0, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x6c, 0x6c, 0x6c, 0xf8, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x30, 0x2c, 0x7d, 0xd9, 0x30, 0x2c, 0xff, 0xd9, 0x30, 0x2c, 0xff, 0xc4, 0x2b, 0x27, 0xf9, 0x0b, 0x02, 0x02, 0xa4, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x09, 0xd5, 0x2e, 0x2b, 0x84, 0x9e, 0x22, 0x20, 0xa1, 0x00, 0x00, 0x00, 0x22, 0xd4, 0x2e, 0x2b, 0x99, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x30, 0x2c, 0xff, 0xda, 0x30, 0x2c, 0xff, 0x79, 0x1a, 0x18, 0xe2, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x2f, 0x2c, 0x2c, 0xdb, 0x31, 0x2d, 0xff, 0xdc, 0x30, 0x2d, 0xff, 0xaa, 0x25, 0x22, 0xf1, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x6e, 0x18, 0x16, 0x0b, 0x00, 0x00, 0x00, 0x25, 0xd8, 0x30, 0x2c, 0xed, 0xde, 0x31, 0x2d, 0xff, 0xde, 0x31, 0x2d, 0xff, 0x4e, 0x11, 0x0f, 0xd1, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x2b, 0x28, 0xbf, 0xe0, 0x31, 0x2d, 0xff, 0xe0, 0x32, 0x2e, 0xff, 0xe0, 0x31, 0x2e, 0xff, 0xdf, 0x30, 0x2d, 0xff, 0xe1, 0x31, 0x2e, 0xff, 0xb9, 0x29, 0x25, 0xf0, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x1a, 0x18, 0x14, 0xd6, 0x2e, 0x2a, 0xf0, 0xe2, 0x31, 0x2d, 0xff, 0xe3, 0x32, 0x2e, 0xff, 0xe3, 0x32, 0x2e, 0xff, 0xe2, 0x31, 0x2d, 0xff, 0xe3, 0x32, 0x2e, 0xff, 0x96, 0x20, 0x1d, 0xd2, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x2c, 0x2b, 0x0c, 0xe5, 0x32, 0x2e, 0xff, 0xe4, 0x32, 0x2e, 0xff, 0xe5, 0x33, 0x2f, 0xff, 0xe5, 0x33, 0x2f, 0xff, 0xe5, 0x33, 0x2e, 0xff, 0x36, 0x0b, 0x0a, 0xb3, 0xc2, 0x2a, 0x26, 0x9f, 0xd5, 0x2e, 0x2b, 0xdd, 0xdb, 0x2f, 0x2c, 0xf3, 0xe6, 0x32, 0x2e, 0xff, 0xe7, 0x33, 0x2f, 0xff, 0xe7, 0x33, 0x2f, 0xff, 0xe6, 0x32, 0x2e, 0xff, 0xcb, 0x2d, 0x28, 0xf7, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x2f, 0x2f, 0xf9, 0xa1, 0xa1, 0xa1, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x9f, 0x9f, 0x9f, 0xff, 0xf0, 0xf0, 0xf0, 0xff, 0xaa, 0xaa, 0xaa, 0xff, 0x97, 0x97, 0x97, 0xff, 0x93, 0x92, 0x93, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x86, 0x86, 0x86, 0xff, 0x7f, 0x7f, 0x7f, 0xff, 0x79, 0x79, 0x79, 0xff, 0x73, 0x73, 0x73, 0xff, 0x6c, 0x6c, 0x6c, 0xff, 0x66, 0x66, 0x66, 0xff, 0x60, 0x5f, 0x60, 0xff, 0x59, 0x59, 0x59, 0xff, 0x52, 0x53, 0x53, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x46, 0x46, 0x46, 0xff, 0x40, 0x3f, 0x40, 0xff, 0x39, 0x39, 0x39, 0xff, 0x33, 0x33, 0x33, 0xff, 0x31, 0x31, 0x31, 0xff, 0x30, 0x30, 0x30, 0xff, 0x32, 0x32, 0x32, 0xff, 0x4a, 0x4a, 0x4a, 0xff, 0x5c, 0x5c, 0x5c, 0xff, 0x58, 0x58, 0x58, 0xff, 0x64, 0x64, 0x64, 0xff, 0x57, 0x57, 0x57, 0xff, 0x14, 0x14, 0x14, 0xb0, 0x85, 0x85, 0x85, 0x01, 0xd7, 0x31, 0x2d, 0x99, 0xde, 0x31, 0x2d, 0xff, 0xde, 0x31, 0x2d, 0xff, 0xde, 0x31, 0x2d, 0xff, 0xdc, 0x30, 0x2c, 0xff, 0xb3, 0x27, 0x24, 0xf0, 0x20, 0x07, 0x06, 0xa4, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x2f, 0x2b, 0xe3, 0xdf, 0x32, 0x2d, 0xff, 0xdf, 0x31, 0x2c, 0xff, 0xd9, 0x2e, 0x2b, 0xfe, 0x0f, 0x03, 0x03, 0x92, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0xdf, 0x32, 0x2e, 0x2f, 0xe1, 0x32, 0x2e, 0xff, 0xe1, 0x32, 0x2e, 0xff, 0xcc, 0x2d, 0x29, 0xfa, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x05, 0x97, 0x21, 0x1e, 0x57, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0x30, 0x2c, 0xeb, 0xe2, 0x32, 0x2e, 0xff, 0xe2, 0x32, 0x2e, 0xff, 0xe3, 0x32, 0x2e, 0xff, 0xe3, 0x32, 0x2e, 0xff, 0x59, 0x13, 0x12, 0xd4, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x0d, 0x0d, 0x03, 0xd3, 0x2e, 0x2a, 0xdf, 0xe5, 0x32, 0x2f, 0xff, 0xe5, 0x32, 0x2f, 0xff, 0xe5, 0x32, 0x2f, 0xff, 0xe5, 0x33, 0x2f, 0xff, 0xe6, 0x33, 0x2f, 0xff, 0x97, 0x20, 0x1e, 0xcd, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x10, 0x0f, 0x17, 0xe1, 0x31, 0x2d, 0xf9, 0xe8, 0x33, 0x2f, 0xff, 0xe8, 0x33, 0x2f, 0xff, 0xe8, 0x32, 0x2f, 0xff, 0xe8, 0x34, 0x2f, 0xff, 0xe7, 0x32, 0x2f, 0xff, 0x67, 0x16, 0x14, 0x96, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd6, 0x2e, 0x2a, 0x7f, 0xea, 0x34, 0x30, 0xff, 0xe9, 0x34, 0x30, 0xff, 0xeb, 0x33, 0x30, 0xff, 0xeb, 0x34, 0x30, 0xff, 0x80, 0x1c, 0x19, 0xdd, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x0d, 0x0c, 0x0e, 0xb8, 0x29, 0x25, 0x7c, 0xea, 0x32, 0x2e, 0xff, 0xec, 0x34, 0x30, 0xff, 0xa2, 0x23, 0x20, 0xe1, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x2e, 0x2e, 0xfc, 0xfd, 0xfd, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xcd, 0xce, 0xcd, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0xa3, 0xa3, 0xa3, 0xff, 0x9d, 0x9d, 0x9d, 0xff, 0x97, 0x97, 0x96, 0xff, 0x91, 0x90, 0x91, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x84, 0x84, 0x83, 0xff, 0x7e, 0x7d, 0x7d, 0xff, 0x76, 0x76, 0x77, 0xff, 0x70, 0x71, 0x70, 0xff, 0x6a, 0x6a, 0x6a, 0xff, 0x63, 0x64, 0x64, 0xff, 0x5d, 0x5d, 0x5d, 0xff, 0x57, 0x57, 0x57, 0xff, 0x51, 0x51, 0x51, 0xff, 0x4a, 0x4b, 0x4a, 0xff, 0x44, 0x44, 0x43, 0xff, 0x3e, 0x3d, 0x3d, 0xff, 0x37, 0x37, 0x37, 0xff, 0x31, 0x31, 0x31, 0xff, 0x30, 0x30, 0x30, 0xff, 0x31, 0x31, 0x31, 0xff, 0x30, 0x30, 0x30, 0xff, 0x38, 0x38, 0x38, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x66, 0x66, 0x66, 0xff, 0x5a, 0x5a, 0x5a, 0xff, 0x13, 0x13, 0x13, 0xaf, 0x8f, 0x8f, 0x8f, 0x01, 0xdb, 0x2f, 0x2b, 0xb4, 0xe2, 0x31, 0x2d, 0xff, 0xe2, 0x31, 0x2d, 0xff, 0xdf, 0x30, 0x2c, 0xfe, 0x80, 0x1b, 0x1a, 0xdd, 0xe2, 0x32, 0x2e, 0xff, 0xe3, 0x31, 0x2d, 0xff, 0xb4, 0x27, 0x23, 0xf1, 0x00, 0x00, 0x00, 0x98, 0x9d, 0x22, 0x1f, 0x77, 0xe3, 0x31, 0x2d, 0xff, 0xe2, 0x31, 0x2d, 0xff, 0xe4, 0x32, 0x2e, 0xff, 0x68, 0x16, 0x15, 0xce, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x31, 0x2d, 0x2e, 0xe5, 0x32, 0x2e, 0xff, 0xe5, 0x32, 0x2e, 0xff, 0xe5, 0x32, 0x2e, 0xff, 0x07, 0x01, 0x01, 0xb8, 0xb8, 0x27, 0x25, 0x96, 0xe6, 0x33, 0x2e, 0xff, 0x26, 0x08, 0x07, 0x9a, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xcc, 0x2c, 0x29, 0x2f, 0xb3, 0x27, 0x23, 0x58, 0xe6, 0x31, 0x2d, 0xfd, 0xe7, 0x33, 0x2e, 0xff, 0xe8, 0x33, 0x2e, 0xff, 0x57, 0x13, 0x11, 0xd2, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xd9, 0x30, 0x2b, 0xe5, 0xe9, 0x33, 0x2e, 0xff, 0xe8, 0x32, 0x2e, 0xff, 0xe9, 0x33, 0x2f, 0xff, 0xe9, 0x33, 0x2f, 0xff, 0xe1, 0x30, 0x2c, 0xfd, 0x4e, 0x11, 0x0f, 0x79, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x1f, 0x1c, 0x1d, 0xe5, 0x31, 0x2e, 0xfa, 0xec, 0x34, 0x2f, 0xff, 0xec, 0x34, 0x2f, 0xff, 0xeb, 0x32, 0x2e, 0xff, 0xec, 0x34, 0x30, 0xff, 0xb9, 0x28, 0x24, 0xe4, 0x31, 0x0a, 0x09, 0x44, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x32, 0x2d, 0x0f, 0xee, 0x35, 0x30, 0xff, 0xee, 0x33, 0x2f, 0xff, 0xef, 0x35, 0x30, 0xff, 0xef, 0x34, 0x30, 0xff, 0xe0, 0x31, 0x2d, 0xfb, 0x04, 0x01, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x2a, 0x27, 0x56, 0xf0, 0x34, 0x30, 0xff, 0xf0, 0x35, 0x30, 0xff, 0x45, 0x0f, 0x0e, 0x99, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2b, 0x2b, 0x2b, 0xfc, 0xed, 0xed, 0xed, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xae, 0xae, 0xae, 0xff, 0xad, 0xad, 0xad, 0xff, 0xa8, 0xa8, 0xa8, 0xff, 0xa1, 0xa1, 0xa1, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0x94, 0x94, 0x94, 0xff, 0x8d, 0x8e, 0x8d, 0xff, 0x87, 0x87, 0x87, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7a, 0x7b, 0x7a, 0xff, 0x74, 0x74, 0x75, 0xff, 0x6e, 0x6e, 0x6e, 0xff, 0x67, 0x68, 0x67, 0xff, 0x61, 0x61, 0x61, 0xff, 0x5b, 0x5b, 0x5b, 0xff, 0x54, 0x54, 0x54, 0xff, 0x4e, 0x4d, 0x4e, 0xff, 0x47, 0x48, 0x48, 0xff, 0x41, 0x41, 0x41, 0xff, 0x3a, 0x3b, 0x3b, 0xff, 0x35, 0x35, 0x34, 0xff, 0x30, 0x30, 0x30, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x2f, 0x2f, 0x2f, 0xff, 0x48, 0x48, 0x48, 0xff, 0x54, 0x54, 0x54, 0xff, 0x11, 0x11, 0x11, 0xaf, 0x87, 0x87, 0x87, 0x01, 0xdf, 0x30, 0x2c, 0xcc, 0xe6, 0x33, 0x2f, 0xff, 0xe6, 0x33, 0x2f, 0xff, 0xe6, 0x32, 0x2e, 0xff, 0x00, 0x00, 0x00, 0xba, 0x40, 0x0e, 0x0d, 0x26, 0xdf, 0x30, 0x2d, 0xc1, 0xe7, 0x33, 0x2f, 0xff, 0xe0, 0x30, 0x2c, 0xfd, 0xe7, 0x33, 0x2e, 0xff, 0xe7, 0x32, 0x2e, 0xff, 0xe8, 0x33, 0x2f, 0xff, 0x94, 0x20, 0x1e, 0xdb, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe3, 0x32, 0x2d, 0x28, 0xe9, 0x33, 0x2f, 0xff, 0xe9, 0x33, 0x2f, 0xff, 0xea, 0x34, 0x2f, 0xff, 0xba, 0x29, 0x25, 0xf3, 0xea, 0x34, 0x2f, 0xff, 0x68, 0x16, 0x14, 0xc1, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xd2, 0x2d, 0x2a, 0x2d, 0x5c, 0x14, 0x12, 0x7d, 0x00, 0x00, 0x00, 0x35, 0xdc, 0x30, 0x2c, 0x15, 0xeb, 0x32, 0x2e, 0xfe, 0xec, 0x33, 0x30, 0xff, 0xec, 0x34, 0x30, 0xff, 0x3c, 0x0d, 0x0c, 0xc1, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x2f, 0x2b, 0xc6, 0xed, 0x34, 0x30, 0xff, 0xec, 0x34, 0x2f, 0xff, 0xec, 0x33, 0x2f, 0xff, 0xed, 0x34, 0x30, 0xff, 0xa2, 0x23, 0x20, 0xd3, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x21, 0x1f, 0x07, 0xed, 0x33, 0x2e, 0xfd, 0xf0, 0x35, 0x30, 0xff, 0xf0, 0x35, 0x31, 0xff, 0xf0, 0x34, 0x31, 0xff, 0xef, 0x35, 0x30, 0xff, 0x89, 0x1e, 0x1b, 0xa6, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x31, 0x2d, 0xad, 0xf3, 0x36, 0x31, 0xff, 0xf3, 0x35, 0x31, 0xff, 0xf3, 0x36, 0x31, 0xff, 0xf0, 0x34, 0x30, 0xfe, 0x0d, 0x03, 0x02, 0x9c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x31, 0x2e, 0xd9, 0xf4, 0x36, 0x31, 0xff, 0xe2, 0x31, 0x2c, 0xfb, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x20, 0x20, 0x7c, 0x70, 0x70, 0x70, 0xff, 0xb3, 0xb3, 0xb2, 0xfe, 0xad, 0xad, 0xad, 0xff, 0xae, 0xae, 0xad, 0xff, 0xab, 0xab, 0xab, 0xff, 0xa5, 0xa5, 0xa5, 0xff, 0x9e, 0x9e, 0x9e, 0xff, 0x98, 0x98, 0x98, 0xff, 0x92, 0x92, 0x92, 0xff, 0x8c, 0x8b, 0x8c, 0xff, 0x86, 0x85, 0x85, 0xff, 0x7e, 0x7e, 0x7f, 0xff, 0x78, 0x78, 0x78, 0xff, 0x72, 0x72, 0x72, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x65, 0x65, 0x65, 0xff, 0x5f, 0x5e, 0x5f, 0xff, 0x58, 0x58, 0x58, 0xff, 0x52, 0x52, 0x52, 0xff, 0x4c, 0x4c, 0x4c, 0xff, 0x45, 0x46, 0x45, 0xff, 0x3f, 0x3f, 0x3f, 0xff, 0x39, 0x39, 0x39, 0xff, 0x32, 0x32, 0x32, 0xff, 0x30, 0x30, 0x30, 0xff, 0x31, 0x31, 0x31, 0xff, 0x31, 0x31, 0x31, 0xff, 0x30, 0x30, 0x30, 0xff, 0x33, 0x33, 0x33, 0xff, 0x24, 0x24, 0x24, 0xfc, 0x12, 0x12, 0x12, 0x2e, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x32, 0x2e, 0xdf, 0xeb, 0x34, 0x30, 0xff, 0xeb, 0x34, 0x30, 0xff, 0xeb, 0x34, 0x30, 0xff, 0x2b, 0x09, 0x08, 0xcd, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x00, 0xe6, 0x32, 0x2e, 0xdb, 0xec, 0x34, 0x30, 0xff, 0xec, 0x34, 0x30, 0xff, 0xde, 0x31, 0x2c, 0xfb, 0x7d, 0x1b, 0x19, 0xaf, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe8, 0x33, 0x2f, 0x16, 0xee, 0x35, 0x30, 0xff, 0xed, 0x34, 0x2f, 0xff, 0xed, 0x34, 0x2f, 0xff, 0xee, 0x35, 0x30, 0xff, 0x97, 0x21, 0x1e, 0xe7, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x2a, 0x27, 0x80, 0x00, 0x00, 0x00, 0x5d, 0xe4, 0x32, 0x2d, 0x78, 0xee, 0x34, 0x30, 0xff, 0x06, 0x01, 0x01, 0xaf, 0xc8, 0x2b, 0x28, 0xac, 0xf0, 0x35, 0x31, 0xff, 0xf0, 0x35, 0x31, 0xff, 0xef, 0x34, 0x30, 0xff, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0xd8, 0x2f, 0x2b, 0x74, 0xf1, 0x35, 0x31, 0xff, 0xf2, 0x36, 0x31, 0xff, 0xf1, 0x34, 0x30, 0xff, 0xe9, 0x34, 0x2e, 0xfd, 0x5e, 0x14, 0x13, 0x8c, 0x77, 0x1a, 0x18, 0x50, 0xca, 0x2c, 0x28, 0xe1, 0xf0, 0x35, 0x31, 0xff, 0xf1, 0x35, 0x31, 0xff, 0xd2, 0x2e, 0x2a, 0xf6, 0x4e, 0x11, 0x0f, 0xbf, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0x30, 0x2d, 0xc7, 0xf4, 0x36, 0x32, 0xff, 0xf4, 0x36, 0x32, 0xff, 0xf5, 0x36, 0x32, 0xff, 0xd7, 0x2f, 0x2b, 0xf3, 0x00, 0x00, 0x00, 0x40, 0x91, 0x1f, 0x1d, 0x84, 0xde, 0x30, 0x2c, 0xf5, 0xf4, 0x36, 0x31, 0xff, 0xf3, 0x35, 0x30, 0xff, 0xb6, 0x28, 0x24, 0xec, 0x30, 0x0a, 0x09, 0xa4, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x35, 0x30, 0xfc, 0xf7, 0x36, 0x31, 0xff, 0xf8, 0x37, 0x32, 0xff, 0xf8, 0x37, 0x32, 0xff, 0x6f, 0x18, 0x16, 0xda, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x00, 0xca, 0x2c, 0x29, 0x0c, 0xf9, 0x37, 0x32, 0xff, 0xf9, 0x37, 0x33, 0xff, 0x96, 0x21, 0x1e, 0xdd, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xde, 0xde, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x2e, 0x3a, 0x3a, 0x3b, 0xdd, 0x9c, 0x9d, 0x9c, 0xff, 0xaf, 0xaf, 0xaf, 0xfe, 0xae, 0xae, 0xae, 0xff, 0xa9, 0xa9, 0xa9, 0xff, 0xa2, 0xa2, 0xa2, 0xff, 0x9d, 0x9d, 0x9c, 0xff, 0x95, 0x95, 0x96, 0xff, 0x90, 0x8f, 0x8f, 0xff, 0x89, 0x89, 0x89, 0xff, 0x83, 0x82, 0x83, 0xff, 0x7c, 0x7c, 0x7c, 0xff, 0x76, 0x76, 0x76, 0xff, 0x70, 0x70, 0x70, 0xff, 0x69, 0x69, 0x69, 0xff, 0x63, 0x63, 0x63, 0xff, 0x5d, 0x5d, 0x5d, 0xff, 0x56, 0x56, 0x56, 0xff, 0x4f, 0x4f, 0x50, 0xff, 0x49, 0x49, 0x49, 0xff, 0x43, 0x43, 0x42, 0xff, 0x3d, 0x3c, 0x3c, 0xff, 0x36, 0x36, 0x36, 0xff, 0x31, 0x31, 0x31, 0xff, 0x30, 0x30, 0x30, 0xff, 0x31, 0x31, 0x31, 0xfe, 0x28, 0x28, 0x28, 0xff, 0x1a, 0x1a, 0x1a, 0x9c, 0x15, 0x15, 0x15, 0x0e, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, 0xfc, 0x01, 0xea, 0x32, 0x2e, 0xef, 0xef, 0x34, 0x31, 0xff, 0xef, 0x34, 0x30, 0xff, 0xf0, 0x35, 0x31, 0xff, 0x5f, 0x14, 0x13, 0xdd, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0xe9, 0x33, 0x2f, 0xdf, 0xf0, 0x34, 0x30, 0xff, 0xf1, 0x35, 0x30, 0xff, 0x77, 0x1a, 0x18, 0xe2, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x35, 0x31, 0xff, 0xf2, 0x35, 0x30, 0xff, 0xf3, 0x35, 0x30, 0xff, 0xf4, 0x36, 0x31, 0xff, 0xb6, 0x27, 0x24, 0xf1, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x09, 0xda, 0x2f, 0x2b, 0x20, 0xec, 0x33, 0x2f, 0xf3, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0xee, 0x34, 0x30, 0xd6, 0xe8, 0x32, 0x2f, 0xf9, 0xf5, 0x36, 0x32, 0xff, 0xf4, 0x36, 0x31, 0xff, 0xf3, 0x35, 0x30, 0xff, 0xc4, 0x2a, 0x27, 0xf3, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x33, 0x2f, 0xe3, 0xf6, 0x37, 0x31, 0xff, 0xf5, 0x35, 0x30, 0xff, 0xf7, 0x37, 0x32, 0xff, 0x27, 0x08, 0x07, 0x75, 0xd1, 0x2d, 0x29, 0x73, 0xf7, 0x37, 0x32, 0xff, 0xf8, 0x37, 0x32, 0xff, 0xf7, 0x36, 0x32, 0xff, 0xf8, 0x36, 0x32, 0xff, 0xf7, 0x37, 0x31, 0xff, 0xf8, 0x36, 0x32, 0xff, 0x98, 0x20, 0x1e, 0xe8, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x00, 0xe2, 0x31, 0x2d, 0x28, 0xf9, 0x37, 0x33, 0xff, 0xf8, 0x36, 0x32, 0xff, 0xf8, 0x35, 0x32, 0xff, 0xc7, 0x2c, 0x27, 0xef, 0x00, 0x00, 0x00, 0x36, 0xe2, 0x31, 0x2d, 0xd0, 0xf9, 0x36, 0x32, 0xff, 0xfa, 0x36, 0x33, 0xff, 0xfa, 0x38, 0x32, 0xff, 0xfb, 0x38, 0x33, 0xff, 0xfa, 0x37, 0x32, 0xff, 0xfb, 0x38, 0x33, 0xff, 0x4f, 0x11, 0x0f, 0xc4, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x34, 0x30, 0xc5, 0xfd, 0x38, 0x33, 0xff, 0xfc, 0x37, 0x32, 0xff, 0xfd, 0x37, 0x32, 0xff, 0xf4, 0x36, 0x31, 0xfe, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x00, 0xca, 0x2c, 0x28, 0x30, 0xfd, 0x38, 0x32, 0xff, 0xfe, 0x38, 0x34, 0xff, 0x56, 0x12, 0x11, 0x9b, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xe0, 0xe0, 0xe0, 0x01, 0x00, 0x00, 0x00, 0x00, 0x12, 0x12, 0x12, 0x82, 0x6b, 0x6c, 0x6c, 0xff, 0xb4, 0xb4, 0xb4, 0xff, 0xad, 0xad, 0xad, 0xfe, 0xa6, 0xa6, 0xa6, 0xff, 0xa0, 0xa0, 0xa0, 0xff, 0x9a, 0x9a, 0x9a, 0xff, 0x94, 0x93, 0x93, 0xff, 0x8d, 0x8d, 0x8d, 0xff, 0x87, 0x87, 0x87, 0xff, 0x80, 0x81, 0x81, 0xff, 0x7a, 0x7a, 0x7a, 0xff, 0x74, 0x73, 0x73, 0xff, 0x6d, 0x6d, 0x6d, 0xff, 0x67, 0x67, 0x67, 0xff, 0x60, 0x60, 0x60, 0xff, 0x59, 0x5a, 0x5a, 0xff, 0x54, 0x54, 0x53, 0xff, 0x4d, 0x4d, 0x4d, 0xff, 0x47, 0x47, 0x47, 0xff, 0x41, 0x41, 0x41, 0xff, 0x3a, 0x3b, 0x3a, 0xff, 0x34, 0x34, 0x34, 0xfe, 0x2f, 0x30, 0x2f, 0xff, 0x22, 0x23, 0x23, 0xe2, 0x0e, 0x0e, 0x0e, 0x40, 0x00, 0x00, 0x00, 0x00, 0xe8, 0xe8, 0xe8, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf2, 0x35, 0x31, 0xf6, 0xf4, 0x35, 0x31, 0xff, 0xf4, 0x36, 0x31, 0xff, 0xf4, 0x36, 0x31, 0xff, 0x7f, 0x1c, 0x1a, 0xe4, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x00, 0xef, 0x33, 0x2f, 0xfc, 0xf6, 0x35, 0x31, 0xff, 0xf6, 0x36, 0x31, 0xff, 0xe2, 0x32, 0x2e, 0xfc, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x33, 0x2f, 0x83, 0xf8, 0x36, 0x31, 0xff, 0xf8, 0x36, 0x31, 0xff, 0xf7, 0x35, 0x30, 0xff, 0xf8, 0x36, 0x31, 0xff, 0x9b, 0x21, 0x1f, 0xe9, 0x00, 0x00, 0x00, 0x7d, 0xc7, 0x2b, 0x27, 0x71, 0xcf, 0x2d, 0x29, 0xe4, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x2a, 0x27, 0x5f, 0xf9, 0x37, 0x32, 0xff, 0xf8, 0x36, 0x31, 0xff, 0xfa, 0x36, 0x32, 0xff, 0xfa, 0x37, 0x32, 0xff, 0x75, 0x19, 0x17, 0xd0, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x37, 0x32, 0xff, 0xfb, 0x37, 0x32, 0xff, 0xfa, 0x37, 0x32, 0xff, 0x45, 0x0f, 0x0d, 0xbf, 0x00, 0x00, 0x00, 0x12, 0xf2, 0x35, 0x31, 0xf4, 0xee, 0x34, 0x2f, 0xfc, 0x39, 0x0c, 0x0b, 0x85, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x27, 0xc9, 0x2c, 0x28, 0x65, 0xfd, 0x38, 0x33, 0xff, 0xfd, 0x37, 0x32, 0xff, 0x20, 0x06, 0x06, 0xb6, 0x00, 0x00, 0x00, 0x14, 0xec, 0x34, 0x2f, 0x55, 0xfd, 0x37, 0x33, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xfc, 0x37, 0x33, 0xff, 0x17, 0x05, 0x04, 0x7f, 0xe0, 0x31, 0x2d, 0x2c, 0xfe, 0x38, 0x33, 0xff, 0xce, 0x2d, 0x29, 0xf4, 0x30, 0x0a, 0x09, 0x4a, 0x00, 0x00, 0x00, 0x16, 0x1e, 0x06, 0x06, 0x2d, 0xe3, 0x32, 0x2d, 0x9d, 0xff, 0x38, 0x33, 0xff, 0xea, 0x33, 0x2e, 0xfb, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x2d, 0x2a, 0x09, 0xfd, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0x31, 0x0a, 0x09, 0xa4, 0x00, 0x00, 0x00, 0x06, 0xd4, 0x2e, 0x2a, 0x8f, 0xfe, 0x38, 0x33, 0xff, 0xfa, 0x37, 0x32, 0xff, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0e, 0x1b, 0x1b, 0x1b, 0xe0, 0x9b, 0x9b, 0x9a, 0xff, 0xad, 0xac, 0xad, 0xfe, 0xa4, 0xa4, 0xa4, 0xff, 0x9e, 0x9d, 0x9f, 0xff, 0x97, 0x97, 0x97, 0xff, 0x91, 0x91, 0x91, 0xff, 0x8b, 0x8b, 0x8b, 0xff, 0x84, 0x84, 0x84, 0xff, 0x7e, 0x7e, 0x7e, 0xff, 0x78, 0x78, 0x77, 0xff, 0x71, 0x71, 0x71, 0xff, 0x6b, 0x6b, 0x6b, 0xff, 0x65, 0x65, 0x64, 0xff, 0x5e, 0x5e, 0x5e, 0xff, 0x57, 0x58, 0x58, 0xff, 0x51, 0x51, 0x51, 0xff, 0x4b, 0x4b, 0x4b, 0xff, 0x44, 0x44, 0x44, 0xff, 0x3e, 0x3e, 0x3e, 0xff, 0x2f, 0x2f, 0x2e, 0xfd, 0x0d, 0x0d, 0x0d, 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf7, 0x35, 0x31, 0xf9, 0xf8, 0x36, 0x31, 0xff, 0xf9, 0x37, 0x32, 0xff, 0xf9, 0x37, 0x32, 0xff, 0xb8, 0x27, 0x24, 0xf1, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x36, 0x32, 0xff, 0xfa, 0x37, 0x33, 0xff, 0xfa, 0x37, 0x33, 0xff, 0xf9, 0x37, 0x32, 0xff, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x36, 0x31, 0xfa, 0xfb, 0x37, 0x32, 0xff, 0xfc, 0x38, 0x33, 0xff, 0xfc, 0x37, 0x32, 0xff, 0xfd, 0x38, 0x33, 0xff, 0xcb, 0x2c, 0x28, 0xf4, 0xc8, 0x2c, 0x28, 0xed, 0x81, 0x1c, 0x1a, 0xdd, 0x54, 0x12, 0x10, 0x8b, 0xa3, 0x23, 0x20, 0xb8, 0xf9, 0x36, 0x32, 0xfe, 0xfd, 0x37, 0x32, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xfc, 0x37, 0x32, 0xff, 0xf3, 0x35, 0x30, 0xfd, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x38, 0x33, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf3, 0x35, 0x30, 0xfd, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x38, 0x33, 0xff, 0xc4, 0x2b, 0x27, 0xf0, 0x0c, 0x02, 0x02, 0x4c, 0xe0, 0x31, 0x2d, 0xa7, 0xdc, 0x30, 0x2c, 0xe6, 0x17, 0x05, 0x04, 0xa9, 0xe6, 0x33, 0x2e, 0xb6, 0xff, 0x39, 0x34, 0xff, 0x7c, 0x1b, 0x19, 0xe2, 0x00, 0x00, 0x00, 0x36, 0xf0, 0x34, 0x30, 0x57, 0xfe, 0x38, 0x33, 0xff, 0xfe, 0x38, 0x34, 0xff, 0xc9, 0x2c, 0x29, 0xf3, 0x00, 0x00, 0x00, 0x4a, 0xeb, 0x34, 0x2f, 0x3c, 0xff, 0x39, 0x34, 0xff, 0x39, 0x0c, 0x0b, 0xc7, 0x8d, 0x1f, 0x1c, 0x42, 0xe4, 0x32, 0x2e, 0xd2, 0xb7, 0x28, 0x24, 0xde, 0x00, 0x00, 0x00, 0x74, 0xf6, 0x36, 0x31, 0xee, 0xff, 0x39, 0x34, 0xff, 0x3d, 0x0d, 0x0c, 0xbb, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xef, 0x34, 0x30, 0xb5, 0xfe, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0x70, 0x18, 0x17, 0xd9, 0x00, 0x00, 0x00, 0x25, 0xf3, 0x35, 0x30, 0xf5, 0xff, 0x39, 0x34, 0xff, 0x98, 0x21, 0x1e, 0xde, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfe, 0xfe, 0xfe, 0x01, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x7c, 0x7c, 0x02, 0x12, 0x12, 0x12, 0x5d, 0x57, 0x57, 0x57, 0xff, 0xad, 0xad, 0xad, 0xfe, 0xa2, 0xa2, 0xa2, 0xff, 0x9b, 0x9c, 0x9c, 0xff, 0x96, 0x95, 0x95, 0xff, 0x8f, 0x8f, 0x8f, 0xff, 0x88, 0x89, 0x89, 0xff, 0x82, 0x82, 0x82, 0xff, 0x7c, 0x7c, 0x7b, 0xff, 0x75, 0x75, 0x75, 0xff, 0x6f, 0x6f, 0x6f, 0xff, 0x68, 0x68, 0x68, 0xff, 0x62, 0x62, 0x62, 0xff, 0x5c, 0x5c, 0x5b, 0xff, 0x55, 0x55, 0x55, 0xff, 0x4f, 0x4f, 0x4f, 0xfe, 0x4b, 0x4b, 0x4b, 0xff, 0x15, 0x15, 0x15, 0xee, 0x0e, 0x0e, 0x0e, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xd4, 0x57, 0x53, 0x05, 0xfc, 0x37, 0x32, 0xfa, 0xfd, 0x38, 0x33, 0xff, 0xfd, 0x37, 0x33, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xe2, 0x31, 0x2d, 0xfa, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x38, 0x34, 0xff, 0xfe, 0x38, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf9, 0x37, 0x33, 0xff, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x35, 0x30, 0x93, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x38, 0x32, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x37, 0x32, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x32, 0xff, 0xfe, 0x38, 0x34, 0xff, 0x4d, 0x11, 0x0f, 0xa8, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x38, 0x33, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf3, 0x35, 0x30, 0xfd, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x08, 0xfb, 0x37, 0x33, 0xfe, 0xe8, 0x33, 0x2f, 0xf9, 0x15, 0x04, 0x04, 0xaf, 0x05, 0x01, 0x01, 0x57, 0xf1, 0x35, 0x30, 0xf4, 0x9e, 0x22, 0x20, 0xe4, 0xa5, 0x24, 0x21, 0x5f, 0xff, 0x39, 0x34, 0xff, 0xa6, 0x24, 0x21, 0xeb, 0x00, 0x00, 0x00, 0x3c, 0xf0, 0x35, 0x30, 0x4a, 0xff, 0x38, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xca, 0x2d, 0x29, 0xf4, 0x00, 0x00, 0x00, 0x62, 0xef, 0x34, 0x30, 0x31, 0xff, 0x39, 0x34, 0xff, 0xb1, 0x27, 0x23, 0xee, 0x0c, 0x02, 0x02, 0x8a, 0x79, 0x1a, 0x18, 0x7a, 0xfe, 0x38, 0x33, 0xff, 0x09, 0x02, 0x01, 0xa4, 0xf4, 0x35, 0x31, 0xd3, 0xff, 0x39, 0x34, 0xff, 0x69, 0x17, 0x15, 0xca, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x33, 0x2f, 0x2e, 0xfe, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xd7, 0x2f, 0x2b, 0xf7, 0x2a, 0x09, 0x08, 0x6d, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x37, 0x32, 0xff, 0x32, 0x0b, 0x0a, 0x92, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x13, 0x20, 0x20, 0x20, 0xb8, 0x89, 0x89, 0x89, 0xff, 0xa2, 0xa2, 0xa2, 0xfe, 0x99, 0x99, 0x99, 0xff, 0x93, 0x93, 0x93, 0xff, 0x8c, 0x8c, 0x8c, 0xff, 0x86, 0x86, 0x86, 0xff, 0x7f, 0x80, 0x80, 0xff, 0x79, 0x79, 0x79, 0xff, 0x73, 0x73, 0x73, 0xff, 0x6c, 0x6c, 0x6d, 0xff, 0x66, 0x66, 0x66, 0xff, 0x5f, 0x60, 0x5f, 0xff, 0x5d, 0x5d, 0x5d, 0xfe, 0x2b, 0x2b, 0x2b, 0xff, 0x0c, 0x0c, 0x0c, 0x6d, 0x23, 0x23, 0x23, 0x04, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xde, 0x46, 0x42, 0x09, 0xfd, 0x37, 0x32, 0xfb, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xf3, 0x34, 0x30, 0xfd, 0x00, 0x00, 0x00, 0x8a, 0xcf, 0x2d, 0x2a, 0x2e, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x38, 0x32, 0xff, 0xa9, 0x25, 0x21, 0xea, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x37, 0x32, 0xc8, 0xfe, 0x38, 0x32, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xfe, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0x8e, 0x1f, 0x1c, 0xcc, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x36, 0x32, 0xd8, 0xfd, 0x38, 0x32, 0xff, 0xfe, 0x39, 0x34, 0xff, 0x2b, 0x09, 0x08, 0xcb, 0x00, 0x00, 0x00, 0x38, 0xee, 0x34, 0x2f, 0x67, 0xff, 0x39, 0x34, 0xff, 0xfb, 0x37, 0x32, 0xfe, 0xf9, 0x37, 0x32, 0xfd, 0xff, 0x39, 0x34, 0xff, 0x71, 0x18, 0x16, 0x9c, 0xce, 0x2d, 0x29, 0x84, 0xff, 0x39, 0x34, 0xff, 0x9e, 0x22, 0x1f, 0xe6, 0x00, 0x00, 0x00, 0x2e, 0xe7, 0x33, 0x2e, 0x1d, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x37, 0x32, 0xff, 0xfe, 0x39, 0x34, 0xff, 0x04, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x0f, 0xf0, 0x35, 0x30, 0xc1, 0xff, 0x38, 0x34, 0xff, 0xf9, 0x37, 0x32, 0xfd, 0xfb, 0x37, 0x32, 0xfe, 0xf8, 0x36, 0x31, 0xfd, 0x07, 0x01, 0x01, 0x46, 0xee, 0x35, 0x30, 0xe5, 0xff, 0x39, 0x34, 0xff, 0x64, 0x16, 0x14, 0xbe, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x34, 0x30, 0xbd, 0xfd, 0x38, 0x32, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0x94, 0x20, 0x1e, 0xd6, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0x15, 0x04, 0x04, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xbb, 0xbb, 0xbb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5b, 0x44, 0x44, 0x44, 0xf9, 0x9a, 0x9b, 0x9a, 0xff, 0x97, 0x98, 0x97, 0xff, 0x90, 0x90, 0x90, 0xff, 0x8a, 0x8a, 0x8a, 0xff, 0x84, 0x83, 0x84, 0xff, 0x7e, 0x7d, 0x7d, 0xff, 0x77, 0x76, 0x77, 0xff, 0x70, 0x70, 0x70, 0xff, 0x6d, 0x6d, 0x6c, 0xfe, 0x4f, 0x50, 0x50, 0xff, 0x1a, 0x1a, 0x1a, 0xcb, 0x03, 0x03, 0x03, 0x28, 0x00, 0x00, 0x00, 0x00, 0xef, 0xef, 0xef, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xe4, 0x44, 0x41, 0x0b, 0xfd, 0x37, 0x32, 0xfc, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf7, 0x36, 0x31, 0xfd, 0x08, 0x01, 0x01, 0xa0, 0xdc, 0x30, 0x2c, 0x47, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x37, 0x32, 0xff, 0xfe, 0x38, 0x34, 0xff, 0x28, 0x08, 0x08, 0x8c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x2f, 0x28, 0x06, 0xf5, 0x36, 0x31, 0xc8, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x37, 0x32, 0xff, 0xff, 0x38, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x37, 0x32, 0xff, 0xfe, 0x38, 0x33, 0xff, 0x97, 0x21, 0x1e, 0xbf, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xed, 0x34, 0x2f, 0x5c, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xf2, 0x35, 0x30, 0xfd, 0x0c, 0x02, 0x02, 0xae, 0x00, 0x00, 0x00, 0x3c, 0xab, 0x25, 0x22, 0x26, 0xd9, 0x2f, 0x2b, 0x53, 0xca, 0x2c, 0x28, 0x5d, 0x93, 0x1f, 0x1d, 0x3e, 0x56, 0x12, 0x11, 0x3b, 0xfb, 0x37, 0x32, 0xfe, 0xff, 0x39, 0x34, 0xff, 0x45, 0x0f, 0x0e, 0xa3, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x35, 0x30, 0xaa, 0xff, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xc2, 0x2b, 0x27, 0xf1, 0x00, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x22, 0xd2, 0x2e, 0x2a, 0x35, 0xd5, 0x2e, 0x2a, 0x58, 0xc8, 0x2c, 0x28, 0x5c, 0x4a, 0x10, 0x0f, 0x28, 0xa7, 0x24, 0x22, 0x87, 0xfe, 0x38, 0x33, 0xff, 0xfc, 0x38, 0x33, 0xff, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xec, 0x32, 0x30, 0x31, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x38, 0x32, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf7, 0x36, 0x31, 0xfd, 0xff, 0x39, 0x34, 0xff, 0xb7, 0x28, 0x24, 0xe8, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x10, 0xb9, 0x74, 0x74, 0x74, 0xff, 0x99, 0x99, 0x98, 0xfe, 0x8e, 0x8e, 0x8e, 0xfe, 0x87, 0x87, 0x87, 0xff, 0x81, 0x81, 0x81, 0xff, 0x7c, 0x7c, 0x7b, 0xfe, 0x71, 0x72, 0x72, 0xff, 0x3b, 0x3b, 0x3b, 0xf6, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x00, 0xf1, 0xf1, 0xf1, 0x01, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xeb, 0x43, 0x3f, 0x0d, 0xfd, 0x37, 0x32, 0xfc, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x38, 0x34, 0xff, 0xf8, 0x36, 0x31, 0xfe, 0x2c, 0x09, 0x08, 0xbe, 0xbe, 0x2a, 0x26, 0xc1, 0xff, 0x39, 0x34, 0xff, 0xf8, 0x37, 0x32, 0xfe, 0x64, 0x16, 0x13, 0x91, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x35, 0x30, 0x86, 0xf6, 0x36, 0x32, 0xf2, 0xff, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfc, 0x38, 0x33, 0xff, 0xdb, 0x30, 0x2c, 0xe7, 0x89, 0x1e, 0x1b, 0x6d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x35, 0x30, 0xa0, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x36, 0x32, 0xff, 0xfc, 0x38, 0x33, 0xff, 0x89, 0x1e, 0x1b, 0xe2, 0x5a, 0x13, 0x12, 0xbe, 0x4d, 0x11, 0x0f, 0x96, 0x6c, 0x17, 0x15, 0x9b, 0x9c, 0x22, 0x1f, 0xcc, 0xfc, 0x38, 0x33, 0xff, 0xfe, 0x39, 0x34, 0xff, 0xc3, 0x2b, 0x27, 0xe1, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xe4, 0x34, 0x2f, 0x01, 0xf6, 0x36, 0x31, 0xe1, 0xff, 0x38, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xea, 0x33, 0x2e, 0xfb, 0x71, 0x19, 0x16, 0xd6, 0x54, 0x12, 0x11, 0xaf, 0x52, 0x11, 0x10, 0x91, 0x73, 0x19, 0x17, 0xa5, 0xb9, 0x28, 0x25, 0xe0, 0xff, 0x39, 0x34, 0xff, 0xfd, 0x38, 0x33, 0xff, 0x87, 0x1d, 0x1b, 0xa4, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x36, 0x31, 0xe2, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0x2d, 0x09, 0x09, 0x97, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x2b, 0x2b, 0x2b, 0xfd, 0x8e, 0x8e, 0x8e, 0xff, 0x8c, 0x8c, 0x8c, 0xfe, 0x86, 0x85, 0x85, 0xff, 0x70, 0x70, 0x70, 0xff, 0x00, 0x00, 0x00, 0xd9, 0x0b, 0x0b, 0x0b, 0x09, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xf3, 0x43, 0x3e, 0x0f, 0xfe, 0x38, 0x33, 0xfc, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xf7, 0x36, 0x31, 0xfb, 0xd3, 0x2e, 0x2a, 0xd5, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x2d, 0x2a, 0x34, 0xdf, 0x30, 0x2d, 0x72, 0xe1, 0x31, 0x2c, 0x76, 0xc8, 0x2c, 0x28, 0x68, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x33, 0x2f, 0x66, 0xfa, 0x37, 0x32, 0xf3, 0xfe, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xf7, 0x36, 0x31, 0xfc, 0xb8, 0x28, 0x25, 0xb0, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x34, 0x30, 0xb5, 0xfb, 0x37, 0x32, 0xf9, 0xfe, 0x38, 0x33, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xff, 0x39, 0x34, 0xff, 0xfe, 0x38, 0x33, 0xff, 0xf4, 0x35, 0x31, 0xf7, 0x7b, 0x1a, 0x19, 0x61, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0x2f, 0x2b, 0x1e, 0xfa, 0x37, 0x32, 0xfa, 0xfc, 0x37, 0x32, 0xfe, 0xfe, 0x38, 0x33, 0xff, 0xef, 0x35, 0x30, 0xf8, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfb, 0xfb, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x0a, 0x0a, 0x0a, 0x08, 0x0b, 0x0b, 0x0b, 0x96, 0x66, 0x65, 0x66, 0xff, 0x26, 0x26, 0x26, 0xff, 0x03, 0x03, 0x03, 0x4b, 0xd6, 0xd6, 0xd6, 0x01, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xec, 0x50, 0x4c, 0x07, 0xeb, 0x34, 0x30, 0x83, 0xdf, 0x31, 0x2c, 0x9e, 0xe1, 0x31, 0x2d, 0x9f, 0xd9, 0x2f, 0x2c, 0x9d, 0xc1, 0x2b, 0x26, 0x80, 0x6f, 0x18, 0x16, 0x2e, 0x69, 0x17, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x34, 0x30, 0x06, 0xd3, 0x2e, 0x2a, 0x16, 0xd8, 0x2f, 0x2b, 0x7c, 0xdf, 0x31, 0x2c, 0x9d, 0xdf, 0x31, 0x2d, 0x9f, 0xd2, 0x2e, 0x29, 0x96, 0x8c, 0x1e, 0x1c, 0x40, 0x6a, 0x17, 0x15, 0x12, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf1, 0x35, 0x31, 0x0a, 0xce, 0x2d, 0x29, 0x2e, 0xd9, 0x30, 0x2b, 0x8e, 0xdf, 0x31, 0x2d, 0x9e, 0xdc, 0x30, 0x2c, 0x9f, 0xc7, 0x2b, 0x28, 0x85, 0x6c, 0x17, 0x15, 0x27, 0x5a, 0x13, 0x12, 0x0a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf7, 0x36, 0x31, 0x0a, 0xb6, 0x27, 0x24, 0x14, 0xa7, 0x24, 0x22, 0x19, 0x9c, 0x22, 0x1f, 0x18, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xfb, 0xfb, 0xfb, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x00, 0xfe, 0xfe, 0xfe, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0xff, 0xff, 0xff, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #endif BOSSA-1.9.1/src/BossaProgress.cpp000066400000000000000000000050301333742133700164640ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaProgress.h" DEFINE_LOCAL_EVENT_TYPE(wxEVT_PROGRESS_CANCEL) BossaProgress::BossaProgress(wxWindow* parent) : ProgressDialog(parent), _parent(parent) { _statusGauge->SetRange(100); SetValue(0); _sdbSizerCancel->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaProgress::OnCancel), NULL, this); } void BossaProgress::SetValue(int pos) { _statusGauge->SetValue(pos); #if __WIN32 // Work around slow update on Windows _statusGauge->SetValue(pos - 1); _statusGauge->SetValue(pos); #endif } void BossaProgress::SetLabel(const wxString& label) { _infoStaticText->SetLabel(label); } void BossaProgress::OnCancel(wxCommandEvent& event) { wxCommandEvent cmd(wxEVT_PROGRESS_CANCEL); _parent->AddPendingEvent(cmd); } BOSSA-1.9.1/src/BossaProgress.h000066400000000000000000000041501333742133700161330ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSAPROGRESS_H #define _BOSSAPROGRESS_H #include "BossaForm.h" DECLARE_LOCAL_EVENT_TYPE(wxEVT_PROGRESS_CANCEL, wxID_ANY) class BossaProgress : public ProgressDialog { public: BossaProgress(wxWindow* parent); void SetValue(int pos); void SetLabel(const wxString& label); private: wxEvtHandler* _parent; void OnCancel(wxCommandEvent& event); }; #endif // _BOSSAPROGRESS_H BOSSA-1.9.1/src/BossaThread.cpp000066400000000000000000000145471333742133700161040ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaThread.h" #include "BossaApp.h" #include "Flash.h" #include #include using namespace std; DEFINE_LOCAL_EVENT_TYPE(wxEVT_THREAD_PROGRESS) DEFINE_LOCAL_EVENT_TYPE(wxEVT_THREAD_SUCCESS) DEFINE_LOCAL_EVENT_TYPE(wxEVT_THREAD_WARNING) DEFINE_LOCAL_EVENT_TYPE(wxEVT_THREAD_ERROR) BossaThread::BossaThread(wxEvtHandler* parent) : wxThread(), _parent(parent), _stopped(false) { } void BossaThread::Progress(const wxString& message, int pos) { wxCommandEvent event(wxEVT_THREAD_PROGRESS); event.SetString(message); event.SetInt(pos); _parent->AddPendingEvent(event); } void BossaThread::Success(const wxString& message) { wxCommandEvent event(wxEVT_THREAD_SUCCESS); event.SetString(message); _parent->AddPendingEvent(event); } void BossaThread::Warning(const wxString& message) { wxCommandEvent event(wxEVT_THREAD_WARNING); event.SetString(message); _parent->AddPendingEvent(event); } void BossaThread::Error(const wxString& message) { wxCommandEvent event(wxEVT_THREAD_ERROR); event.SetString(message); _parent->AddPendingEvent(event); } void ThreadObserver::onStatus(const char *message, ...) { } void ThreadObserver::onProgress(int num, int div) { int percent = num * 100 / div; if (percent != _lastPercent) { _thread->Progress(wxString::Format(wxT("%s page %d (%d%%)"), _operation.mb_str(), num, percent), percent); _lastPercent = percent; } } WriteThread::WriteThread(wxEvtHandler* parent, const wxString& filename, bool eraseAll, bool bootFlash, bool bod, bool bor, bool lock, bool security, uint32_t offset) : BossaThread(parent), _filename(filename), _eraseAll(eraseAll), _bootFlash(bootFlash), _bod(bod), _bor(bor), _lock(lock), _security(security), _offset(offset) { } wxThread::ExitCode WriteThread::Entry() { Device& device = wxGetApp().device; Device::FlashPtr& flash = device.getFlash(); Samba& samba = wxGetApp().samba; try { ThreadObserver observer(this, "Writing"); Flasher flasher(samba, device, observer); if (_eraseAll) { flash->eraseAll(_offset); flash->eraseAuto(false); } else { flash->eraseAuto(true); } flasher.write(_filename.mb_str(), _offset); if (flash->canBootFlash()) flash->setBootFlash(_bootFlash); if (flash->canBod()) flash->setBod(_bod); if (flash->canBor()) flash->setBor(_bor); if (_lock) flash->setLockRegions(std::vector(flash->lockRegions(), true)); if (_security) flash->setSecurity(); flash->writeOptions(); } catch(exception& e) { Error(wxString(e.what(), wxConvUTF8)); return 0; } Success(_("Write completed successfully")); return 0; } VerifyThread::VerifyThread(wxEvtHandler* parent, const wxString& filename, uint32_t offset) : BossaThread(parent), _filename(filename), _offset(offset) { } wxThread::ExitCode VerifyThread::Entry() { Device& device = wxGetApp().device; Samba& samba = wxGetApp().samba; uint32_t pageErrors; uint32_t totalErrors; try { ThreadObserver observer(this, "Verifying"); Flasher flasher(samba, device, observer); if (!flasher.verify(_filename.mb_str(), pageErrors, totalErrors, _offset)) { Warning(wxString::Format(_( "Verify failed\n" "Page errors: %d\n" "Byte errors: %d\n"), pageErrors, totalErrors)); return 0; } } catch(exception& e) { Error(wxString(e.what(), wxConvUTF8)); return 0; } Success(_("Verify successful\n")); return 0; } ReadThread::ReadThread(wxEvtHandler* parent, const wxString& filename, size_t size, uint32_t offset) : BossaThread(parent), _filename(filename), _size(size), _offset(offset) { } wxThread::ExitCode ReadThread::Entry() { Device& device = wxGetApp().device; Samba& samba = wxGetApp().samba; try { ThreadObserver observer(this, "Reading"); Flasher flasher(samba, device, observer); flasher.read(_filename.mb_str(), _size, _offset); } catch(exception& e) { Error(wxString(e.what(), wxConvUTF8)); return 0; } Success(_("Read completed successfully")); return 0; } BOSSA-1.9.1/src/BossaThread.h000066400000000000000000000076011333742133700155420ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSATHREAD_H #define _BOSSATHREAD_H #include #include "Flasher.h" DECLARE_LOCAL_EVENT_TYPE(wxEVT_THREAD_PROGRESS, wxID_ANY) DECLARE_LOCAL_EVENT_TYPE(wxEVT_THREAD_SUCCESS, wxID_ANY) DECLARE_LOCAL_EVENT_TYPE(wxEVT_THREAD_WARNING, wxID_ANY) DECLARE_LOCAL_EVENT_TYPE(wxEVT_THREAD_ERROR, wxID_ANY) class BossaThread : public wxThread { public: BossaThread(wxEvtHandler* parent); void stop() { _stopped = true; } void Progress(const wxString& message, int pos); void Success(const wxString& message); void Warning(const wxString& message); void Error(const wxString& message); protected: wxEvtHandler* _parent; bool _stopped; }; class ThreadObserver : public FlasherObserver { public: ThreadObserver(BossaThread* thread, const wxString& operation) : _thread(thread), _operation(operation), _lastPercent(-1) {} virtual ~ThreadObserver() {} virtual void onStatus(const char *message, ...); virtual void onProgress(int num, int div); private: BossaThread *_thread; wxString _operation; int _lastPercent; }; class WriteThread : public BossaThread { public: WriteThread(wxEvtHandler* parent, const wxString& filename, bool eraseAll, bool bootFlash, bool bod, bool bor, bool lock, bool security, uint32_t offset); wxThread::ExitCode Entry(); private: wxString _filename; bool _eraseAll; bool _bootFlash; bool _bod; bool _bor; bool _lock; bool _security; uint32_t _offset; }; class VerifyThread : public BossaThread { public: VerifyThread(wxEvtHandler* parent, const wxString& filename, uint32_t offset); wxThread::ExitCode Entry(); private: wxString _filename; uint32_t _offset; }; class ReadThread : public BossaThread { public: ReadThread(wxEvtHandler* parent, const wxString& filename, size_t size, uint32_t offset); wxThread::ExitCode Entry(); private: wxString _filename; size_t _size; uint32_t _offset; }; #endif // _BOSSAINFO_H BOSSA-1.9.1/src/BossaWindow.cpp000066400000000000000000000317671333742133700161470ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "BossaWindow.h" #include "BossaApp.h" #include "BossaAbout.h" #include "BossaInfo.h" #include "Device.h" #include #include using namespace std; BossaWindow::BossaWindow() : MainFrame(NULL) { _bossaBitmap->SetBitmap(wxGetApp().bitmaps.getBossaLogo()); _aboutButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnAbout), NULL, this); _refreshButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnRefresh), NULL, this); _portComboBox->Connect(wxEVT_COMMAND_COMBOBOX_SELECTED, wxCommandEventHandler(BossaWindow::OnSerial), NULL, this); _writeButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnWrite), NULL, this); _verifyButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnVerify), NULL, this); _readButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnRead), NULL, this); _infoButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnInfo), NULL, this); _exitButton->Connect(wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler(BossaWindow::OnExit), NULL, this); Connect(wxEVT_THREAD_PROGRESS, wxCommandEventHandler(BossaWindow::OnThreadProgress), NULL, this); Connect(wxEVT_THREAD_SUCCESS, wxCommandEventHandler(BossaWindow::OnThreadSuccess), NULL, this); Connect(wxEVT_THREAD_WARNING, wxCommandEventHandler(BossaWindow::OnThreadWarning), NULL, this); Connect(wxEVT_THREAD_ERROR, wxCommandEventHandler(BossaWindow::OnThreadError), NULL, this); Connect(wxEVT_PROGRESS_CANCEL, wxCommandEventHandler(BossaWindow::OnProgressCancel), NULL, this); RefreshSerial(); Disconnected(); wxString port; wxConfig& config = wxGetApp().config; if (config.Read(_("Port"), &port)) { if (_portComboBox->FindString(port) >= 0) { PortFactory& portFactory = wxGetApp().portFactory; Samba& samba = wxGetApp().samba; if (samba.connect(portFactory.create(std::string(port.mb_str())))) { CreateDevice(); } } } wxString file; if (config.Read(_("File"), &file)) { _filePicker->SetPath(file); } wxIcon icon; icon.CopyFromBitmap(wxGetApp().bitmaps.getBossaIcon()); SetIcon(icon); Iconize(false); } BossaWindow::~BossaWindow() { wxConfig& config = wxGetApp().config; config.Write(_("Port"), _portComboBox->GetStringSelection()); config.Write(_("File"), _filePicker->GetPath()); } void BossaWindow::RefreshSerial() { string port; wxString selection = _portComboBox->GetStringSelection(); PortFactory& portFactory = wxGetApp().portFactory; _portComboBox->Clear(); for (port = portFactory.begin(); port != portFactory.end(); port = portFactory.next()) { _portComboBox->Append(wxString(port.c_str(), wxConvUTF8)); } if (!_portComboBox->SetStringSelection(selection)) Disconnected(); } void BossaWindow::OnAbout(wxCommandEvent& event) { BossaAbout* dialog = new BossaAbout(this); dialog->ShowModal(); dialog->Destroy(); } void BossaWindow::OnRefresh(wxCommandEvent& event) { RefreshSerial(); } void BossaWindow::Connected() { Device::FlashPtr& flash = wxGetApp().device.getFlash(); Samba& samba = wxGetApp().samba; const SerialPort& port = samba.getSerialPort(); _statusBar->SetStatusText(wxT("Connected"), 0); _statusBar->SetStatusText(wxString::Format(wxT("Device: %s"), flash->name().c_str()), 1); _portComboBox->SetStringSelection(wxString(port.name().c_str(), wxConvUTF8)); _bootCheckBox->Enable(flash->canBootFlash()); _bodCheckBox->Enable(flash->canBod()); _borCheckBox->Enable(flash->canBor()); _writeButton->Enable(true); _verifyButton->Enable(true); _readButton->Enable(true); _infoButton->Enable(true); } void BossaWindow::Disconnected() { _statusBar->SetStatusText(wxT("Not connected"), 0); _statusBar->SetStatusText(_(""), 1); _portComboBox->SetSelection(wxNOT_FOUND); _writeButton->Enable(false); _verifyButton->Enable(false); _readButton->Enable(false); _infoButton->Enable(false); } void BossaWindow::Error(const wxString& message) { wxMessageDialog* dialog = new wxMessageDialog( this, message, _("Error"), wxOK | wxICON_ERROR ); dialog->ShowModal(); dialog->Destroy(); } void BossaWindow::Warning(const wxString& message) { wxMessageDialog* dialog = new wxMessageDialog( this, message, _("Warning"), wxOK | wxICON_WARNING ); dialog->ShowModal(); dialog->Destroy(); } void BossaWindow::Info(const wxString& message) { wxMessageDialog* dialog = new wxMessageDialog( this, message, _("Info"), wxOK | wxICON_INFORMATION ); dialog->ShowModal(); dialog->Destroy(); } bool BossaWindow::Question(const wxString& message) { wxMessageDialog* dialog = new wxMessageDialog( this, message, _("Question"), wxYES_NO | wxICON_QUESTION ); int resp = dialog->ShowModal(); dialog->Destroy(); return (resp == wxID_YES); } void BossaWindow::CreateDevice() { Device& device = wxGetApp().device; try { device.create(); } catch (exception& e) { Disconnected(); Error(wxString(e.what(), wxConvUTF8)); return; } _statusBar->SetStatusText(wxString::Format(wxT("Device: %s"), device.getFlash()->name().c_str()), 1); Connected(); } void BossaWindow::OnSerial(wxCommandEvent& event) { PortFactory& portFactory = wxGetApp().portFactory; Samba& samba = wxGetApp().samba; wxString port = _portComboBox->GetString(event.GetSelection()); if (!samba.connect(portFactory.create(std::string(port.mb_str())))) { Disconnected(); Error(wxString::Format(_("Could not connect to device on %s"), port.c_str())); return; } CreateDevice(); } bool BossaWindow::GetOffset(uint32_t& offset) { if (_offsetTextCtrl->GetValue().IsEmpty()) { offset = 0; } else { char *end = NULL; offset = strtol(_offsetTextCtrl->GetValue().mb_str(), &end, 0); if (end == NULL || *end != '\0') { Error(_("Flash offset is invalid")); return false; } } return true; } void BossaWindow::OnWrite(wxCommandEvent& event) { Device::FlashPtr& flash = wxGetApp().device.getFlash(); uint32_t offset; if (_filePicker->GetPath().IsEmpty()) { Error(wxT("You must specify a file first")); return; } if (!GetOffset(offset)) return; if (access(_filePicker->GetPath().mb_str(), F_OK)) { Error(wxT("File does not exist")); return; } try { std::vector regions = flash->getLockRegions(); if (std::find(regions.begin(), regions.end(), true) != regions.end()) { if (!Question(wxT("The flash is currently locked. Do you want to unlock it and proceed with the write?"))) return; flash->setLockRegions(std::vector(regions.size(), false)); } } catch(exception& e) { Error(wxString(e.what(), wxConvUTF8)); return; } _progress = new BossaProgress(this); _thread = new WriteThread( this, _filePicker->GetPath(), _eraseCheckBox->GetValue(), _bootCheckBox->GetValue(), _bodCheckBox->GetValue(), _borCheckBox->GetValue(), _lockCheckBox->GetValue(), _securityCheckBox->GetValue(), offset ); if (_thread->Create() != wxTHREAD_NO_ERROR || _thread->Run() != wxTHREAD_NO_ERROR) { Error(wxT("Unable to start worker thread")); return; } _progress->ShowModal(); _progress->Destroy(); } void BossaWindow::OnVerify(wxCommandEvent& event) { uint32_t offset; if (_filePicker->GetPath().IsEmpty()) { Error(wxT("You must specify a file first")); return; } if (!GetOffset(offset)) return; if (access(_filePicker->GetPath().mb_str(), F_OK)) { Error(wxT("File does not exist")); return; } _progress = new BossaProgress(this); _thread = new VerifyThread( this, _filePicker->GetPath(), offset ); if (_thread->Create() != wxTHREAD_NO_ERROR || _thread->Run() != wxTHREAD_NO_ERROR) { Error(wxT("Unable to start worker thread")); return; } _progress->ShowModal(); _progress->Destroy(); } void BossaWindow::OnRead(wxCommandEvent& event) { uint32_t offset; size_t size; if (_filePicker->GetPath().IsEmpty()) { Error(wxT("You must specify a file first")); return; } if (!access(_filePicker->GetPath().mb_str(), F_OK)) { if (!Question(wxT("File already exists. Do you want to replace it?"))) return; } if (_sizeTextCtrl->GetValue().IsEmpty()) { size = 0; } else { char *end = NULL; size = strtol(_sizeTextCtrl->GetValue().mb_str(), &end, 0); if (end == NULL || *end != '\0') { Error(_("Read size is invalid")); return; } } if (!GetOffset(offset)) return; _progress = new BossaProgress(this); _thread = new ReadThread( this, _filePicker->GetPath(), size, offset ); if (_thread->Create() != wxTHREAD_NO_ERROR || _thread->Run() != wxTHREAD_NO_ERROR) { Error(_("Unable to start worker thread")); return; } _progress->ShowModal(); _progress->Destroy(); } void BossaWindow::OnInfo(wxCommandEvent& event) { BossaInfo* info; try { info = new BossaInfo(this); } catch (exception& e) { Error(wxString(e.what(), wxConvUTF8)); return; } info->ShowModal(); info->Destroy(); } void BossaWindow::OnExit(wxCommandEvent& event) { Destroy(); } void BossaWindow::OnThreadProgress(wxCommandEvent& event) { _progress->SetValue(event.GetInt()); _progress->SetLabel(event.GetString()); } void BossaWindow::OnThreadSuccess(wxCommandEvent& event) { wxString message = event.GetString(); if (!message.IsEmpty()) Info(message); _progress->EndModal(0); } void BossaWindow::OnThreadWarning(wxCommandEvent& event) { wxString message = event.GetString(); Warning(message); _progress->EndModal(0); } void BossaWindow::OnThreadError(wxCommandEvent& event) { wxString message = event.GetString(); Error(message); _progress->EndModal(0); } void BossaWindow::OnProgressCancel(wxCommandEvent& event) { _thread->stop(); } BOSSA-1.9.1/src/BossaWindow.h000066400000000000000000000056221333742133700156030ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _BOSSAWINDOW_H #define _BOSSAWINDOW_H #include #include "BossaForm.h" #include "BossaThread.h" #include "BossaProgress.h" class BossaWindow : public MainFrame { public: BossaWindow(); virtual ~BossaWindow(); private: BossaThread* _thread; BossaProgress* _progress; void RefreshSerial(); void CreateDevice(); void Connected(); void Disconnected(); bool GetOffset(uint32_t& offset); void Error(const wxString& message); void Warning(const wxString& message); void Info(const wxString& message); bool Question(const wxString& message); void OnAbout(wxCommandEvent& event); void OnRefresh(wxCommandEvent& event); void OnSerial(wxCommandEvent& event); void OnWrite(wxCommandEvent& event); void OnVerify(wxCommandEvent& event); void OnRead(wxCommandEvent& event); void OnInfo(wxCommandEvent& event); void OnExit(wxCommandEvent& event); void OnThreadProgress(wxCommandEvent& event); void OnThreadSuccess(wxCommandEvent& event); void OnThreadWarning(wxCommandEvent& event); void OnThreadError(wxCommandEvent& event); void OnProgressCancel(wxCommandEvent& event); }; #endif // _BOSSAWINDOW_H BOSSA-1.9.1/src/CmdOpts.cpp000066400000000000000000000116251333742133700152500ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include "CmdOpts.h" CmdOpts::CmdOpts(int argc, char* argv[], int numOpts, Option* opts) : _argc(argc), _argv(argv), _numOpts(numOpts), _opts(opts) { } CmdOpts::~CmdOpts() { } void CmdOpts::usage(FILE* out) { int optIdx; char name[40]; const char* start; const char* end; for (optIdx = 0; optIdx < _numOpts; optIdx++) { if (_opts[optIdx].arg.has == ArgOptional) snprintf(name, sizeof(name), " -%c, --%s[=%s]", _opts[optIdx].letter, _opts[optIdx].name, _opts[optIdx].arg.name); else if (_opts[optIdx].arg.has == ArgRequired) snprintf(name, sizeof(name), " -%c, --%s=%s", _opts[optIdx].letter, _opts[optIdx].name, _opts[optIdx].arg.name); else snprintf(name, sizeof(name), " -%c, --%s", _opts[optIdx].letter, _opts[optIdx].name); fprintf(out, "%-23s ", name); start = _opts[optIdx].help; while ((end = strchr(start, '\n'))) { fwrite(start, end - start + 1, 1, out); fprintf(out, "%24s", ""); start = end + 1; } fprintf(out, "%s\n", start); } } int CmdOpts::parse() { struct option long_opts[_numOpts + 1]; char optstring[_numOpts * 3 + 1]; char* optPtr = optstring; int optIdx; int rc; for (optIdx = 0; optIdx < _numOpts; optIdx++) { *_opts[optIdx].present = false; *optPtr++ = _opts[optIdx].letter; long_opts[optIdx].name = _opts[optIdx].name; switch (_opts[optIdx].arg.has) { default: case ArgNone: long_opts[optIdx].has_arg = no_argument; break; case ArgOptional: long_opts[optIdx].has_arg = optional_argument; *optPtr++ = ':'; *optPtr++ = ':'; break; case ArgRequired: long_opts[optIdx].has_arg = required_argument; *optPtr++ = ':'; break; } long_opts[optIdx].flag = NULL; long_opts[optIdx].val = 0; } memset(&long_opts[_numOpts], 0, sizeof(long_opts[_numOpts])); *optPtr = '\0'; optIdx = 0; while ((rc = getopt_long(_argc, _argv, optstring, long_opts, &optIdx)) != -1) { if (rc == '?') return -1; if (rc != 0) optIdx = find(rc); assert(optIdx >= 0 && optIdx < _numOpts); *_opts[optIdx].present = true; if (_opts[optIdx].arg.has != ArgNone && optarg) { switch (_opts[optIdx].arg.type) { case ArgInt: *_opts[optIdx].arg.value.intPtr = strtol(optarg, NULL, 0); break; default: case ArgString: *_opts[optIdx].arg.value.strPtr = optarg; break; } } } return optind; } int CmdOpts::find(char letter) { int optIdx; for (optIdx = 0; optIdx < _numOpts; optIdx++) if (_opts[optIdx].letter == letter) break; return optIdx; } BOSSA-1.9.1/src/CmdOpts.h000066400000000000000000000047601333742133700147170ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _OPTION_H #define _OPTION_H #include #include typedef enum { ArgNone, ArgOptional, ArgRequired } ArgHas; typedef enum { ArgInt, ArgString } ArgType; typedef struct { ArgHas has; ArgType type; const char* name; union { void* voidPtr; int* intPtr; std::string* strPtr; } value; } OptArg; typedef struct { char letter; const char* name; bool* present; OptArg arg; const char* help; } Option; class CmdOpts { public: CmdOpts(int argc, char* argv[], int numOpts, Option* opts); virtual ~CmdOpts(); void usage(FILE* out); int parse(); private: int _argc; char** _argv; int _numOpts; Option* _opts; int find(char letter); }; #endif // _OPTION_H BOSSA-1.9.1/src/Command.cpp000066400000000000000000000740231333742133700152560ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #define __STDC_LIMIT_MACROS #include #include #include #include #include #include #include #include "Command.h" #define min(a, b) ((a) < (b) ? (a) : (b)) using namespace std; Shell* Command::_shell = NULL; Samba Command::_samba; PortFactory Command::_portFactory; Device Command::_device(_samba); Device::FlashPtr& Command::_flash = _device.getFlash(); CommandObserver Command::_observer; Flasher Command::_flasher(_samba, _device, _observer); bool Command::_connected = false; Command::Command(const char* name, const char* help, const char* usage) : _name(name), _help(help), _usage(usage) { assert(_shell != NULL); } void CommandObserver::onStatus(const char *message, ...) { va_list ap; va_start(ap, message); vprintf(message, ap); va_end(ap); } void CommandObserver::onProgress(int num, int div) { int ticks; int bars = 30; ticks = num * bars / div; if (ticks == _lastTicks) return; printf("\r["); while (ticks-- > 0) { putchar('='); bars--; } while (bars-- > 0) { putchar(' '); } printf("] %d%% (%d/%d pages)", num * 100 / div, num, div); fflush(stdout); _lastTicks = 0; } bool Command::error(const char* fmt, ...) { va_list ap; va_start(ap, fmt); vprintf(fmt, ap); va_end(ap); printf(". Try \"help %s\".\n", _name); return false; } bool Command::argNum(int argc, int num) { if (argc != num) return error("Command requires %d argument%s", num - 1, (num > 1) ? "s" : "", _name); return true; } bool Command::argRange(int argc, int min, int max) { if (argc < min || argc > max) return error("Command requires %d to %d arguments", min - 1, max - 1); return true; } bool Command::argUint32(const char* arg, uint32_t* value) { long long ll; char *end; errno = 0; ll = strtoll(arg, &end, 0); if (errno != 0 || *end != '\0') return error("Invalid number \"%s\"", arg); if (ll < 0 || ll > UINT32_MAX) return error("Number \"%s\" is out of range", arg); *value = ll; return true; } bool Command::argBool(const char* arg, bool* value) { int len = strlen(arg); if (strncasecmp(arg, "true", len) == 0) *value = true; else if (strncasecmp(arg, "false", len) == 0) *value = false; else return error("Invalid boolean \"%s\"", arg); return true; } bool Command::argState(const char* arg, bool* value) { int len = strlen(arg); if (strncasecmp(arg, "enable", len) == 0) *value = true; else if (strncasecmp(arg, "disable", len) == 0) *value = false; else return error("Invalid state \"%s\"", arg); return true; } bool Command::connected() { if (!_connected) { printf("No device connected. Use \"connect\" first.\n"); return false; } return true; } bool Command::flashable() { if (!connected()) return false; if (_flash.get() == NULL) { printf("Flash on device is not supported.\n"); return false; } return true; } bool Command::createDevice() { try { _device.create(); } catch (DeviceUnsupportedError& e) { printf("Device is not supported\n"); return false; } return true; } void Command::hexdump(uint32_t addr, uint8_t *buf, size_t count) { int lpad; int rpad; size_t size; size_t offset; const uint32_t ROW_SIZE = 16; const uint32_t ROW_MASK = ~(ROW_SIZE - 1); printf(" 0 1 2 3 4 5 6 7 8 9 a b c d e f\n"); while (count > 0) { lpad = (addr % ROW_SIZE); rpad = ROW_SIZE - min(lpad + count, ROW_SIZE); size = ROW_SIZE - rpad - lpad; printf("%08x | ", addr & ROW_MASK); printf("%*s", 3 * lpad, ""); for (offset = 0; offset < size; offset++) printf("%02x ", buf[offset]); printf("%*s", 3 * rpad, ""); printf("| "); printf("%*s", lpad, ""); for (offset = 0; offset < size; offset++) printf("%c", isprint(buf[offset]) ? buf[offset] : '.'); printf("%*s", rpad, ""); printf("\n"); buf += size; addr += size; count -= size; } } const char* Command::binstr(uint32_t value, int bits, char low, char high) { static char buf[36]; char *str = buf; assert(bits <= 32 && bits > 0); for (int bitnum = bits - 1; bitnum >= 0; bitnum--) { *str++ = (value & (1 << bitnum)) ? high : low; if (bitnum % 8 == 0) *str++ = ' '; } *(str - 1) = '\0'; return buf; } void Command::disconnect() { _connected = false; } bool Command::operator < (const Command& rhs) { return (strcmp(_name, rhs._name) == -1); } CommandBod::CommandBod() : Command("bod", "Change the brownout detect flag.", "bod [BOOL]\n" " BOOL -- boolean value either \"true\" or \"false\"") {} void CommandBod::invoke(char* argv[], int argc) { bool value; if (!argNum(argc, 2) || !argBool(argv[1], &value) || !flashable()) return; if (!_flash->canBod()) { printf("Unsupported on this flash device\n"); return; } _flash->setBod(value); printf("BOD flag set to %s\n", value ? "true" : "false"); } CommandBootf::CommandBootf() : Command("bootf", "Change the boot to flash flag.", "bootf [BOOL]\n" " BOOL -- boolean value either \"true\" or \"false\"") {} void CommandBootf::invoke(char* argv[], int argc) { bool value; if (!argNum(argc, 2) || !argBool(argv[1], &value) || !flashable()) return; _flash->setBootFlash(value); printf("Boot to flash flag set to %s\n", value ? "true" : "false"); } CommandBor::CommandBor() : Command("bor", "Change the brownout reset flag.", "bor [BOOL]\n" " BOOL -- boolean value either \"true\" or \"false\"") {} void CommandBor::invoke(char* argv[], int argc) { bool value; if (!argNum(argc, 2) || !argBool(argv[1], &value) || !flashable()) return; if (!_flash->canBor()) { printf("Unsupported on this flash device\n"); return; } _flash->setBor(value); printf("BOR flag set to %s\n", value ? "true" : "false"); } CommandConnect::CommandConnect() : Command("connect", "Connect to device over serial port.", "connect [SERIAL]\n" " SERIAL -- host-specific serial port") {} void CommandConnect::invoke(char* argv[], int argc) { if (!argNum(argc, 2)) return; if (!_samba.connect(_portFactory.create(argv[1]))) { printf("No device found on %s\n", argv[1]); _connected = false; return; } printf("Connected to device on %s\n", argv[1]); _connected = true; createDevice(); } CommandDebug::CommandDebug() : Command("debug", "Change the debug state.", "debug [STATE]\n" " STATE - either \"disable\" or \"enable\"") {} void CommandDebug::invoke(char* argv[], int argc) { bool state; if (!argNum(argc, 2) || !argState(argv[1], &state)) return; _samba.setDebug(state); } CommandDump::CommandDump() : Command("dump", "Dump memory in hexadecimal and ascii.", "dump [ADDRESS] [COUNT]\n" " ADDRESS -- starting memory address\n" " COUNT -- count of bytes to display") {} void CommandDump::invoke(char* argv[], int argc) { uint32_t addr; uint32_t count; if (!argNum(argc, 3) || !argUint32(argv[1], &addr) || !argUint32(argv[2], &count) || !connected()) return; std::unique_ptr buf(new uint8_t[count]); try { _samba.read(addr, buf.get(), count); } catch (...) { throw; } hexdump(addr, buf.get(), count); } CommandErase::CommandErase() : Command("erase", "Erase the flash to the end.", "erase " " OFFSET -- (optional) start erase operation at flash OFFSET\n" " OFFSET must be aligned to a flash page boundary") {} void CommandErase::invoke(char* argv[], int argc) { uint32_t offset = 0; if (!argRange(argc, 1, 2) || (argc >= 2 && !argUint32(argv[1], &offset)) || !flashable()) return; _flasher.erase(offset); printf("Flash is erased\n"); } CommandExit::CommandExit() : Command("exit", "Exit the BOSSA shell.", "exit") {} void CommandExit::invoke(char* argv[], int argc) { if (!argNum(argc, 1)) return; _shell->exitFlag() = true; } CommandGo::CommandGo() : Command("go", "Execute ARM code at address.", "go [ADDRESS]\n" " ADDRESS -- starting memory address of code to execute") {} void CommandGo::invoke(char* argv[], int argc) { uint32_t addr; if (!argNum(argc, 2) || !argUint32(argv[1], &addr) || !connected()) return; printf("Executing code at %#x\n", addr); _samba.go(addr); } CommandHelp::CommandHelp() : Command("help", "Display help for a command.", "help \n" " COMMAND -- (optional) display detailed usage for this command,\n" " display summary help for all commands if not given") {} void CommandHelp::invoke(char* argv[], int argc) { if (!argRange(argc, 1, 2)) return; if (argc == 1) _shell->help(); else _shell->usage(argv[1]); } CommandHistory::CommandHistory() : Command("history", "List the command history.", "history") {} void CommandHistory::invoke(char* argv[], int argc) { if (!argNum(argc, 1)) return; printf("history_base=%d\n", history_base); for (int i = history_base; i < history_base + history_length; i++) { HIST_ENTRY *entry = history_get(i); if (entry) printf (" %d %s\n", i, entry->line); } } CommandInfo::CommandInfo() : Command("info", "Display information about the flash.", "info") {} void CommandInfo::invoke(char* argv[], int argc) { FlasherInfo info; if (!argNum(argc, 1) || !flashable()) return; _flasher.info(info); info.print(); } CommandLock::CommandLock() : Command("lock", "Set lock bits in the flash.", "lock " " BITS -- (optional) comma separated list of bits," " all bits if not given\n") {} void CommandLock::invoke(char* argv[], int argc) { string bits; if (!flashable()) return; for (int argn = 1; argn < argc; argn++) bits += argv[argn]; _flasher.lock(bits, true); printf("Locked regions %s\n", bits.c_str()); } CommandMrb::CommandMrb() : Command("mrb", "Read bytes from memory.", "mrb [ADDRESS] \n" " ADDRESS -- starting memory address\n" " COUNT -- (optional) count of bytes to display, 1 if not given") {} void CommandMrb::invoke(char* argv[], int argc) { uint32_t addr; uint32_t count = 1; uint8_t value; if (!argRange(argc, 2, 3) || !argUint32(argv[1], &addr) || (argc >= 3 && !argUint32(argv[2], &count)) || !connected()) return; while (count > 0) { value = _samba.readByte(addr); printf("%08x : %02x %s\n", addr, value, binstr(value, 8)); addr++; count--; } } CommandMrf::CommandMrf() : Command("mrf", "Read memory to file.", "mrf [ADDRESS] [COUNT] [FILE]\n" " ADDRESS -- memory address to read\n" " COUNT -- count of bytes to read\n" " FILE -- file name on host filesystem to write") {} void CommandMrf::invoke(char* argv[], int argc) { uint32_t addr; uint32_t count; FILE* infile; uint8_t buf[1024]; ssize_t fbytes; if (!argNum(argc, 4) || !argUint32(argv[1], &addr) || !argUint32(argv[2], &count) || !connected()) return; infile = fopen(argv[3], "wb"); if (!infile) throw FileOpenError(errno); try { while (count > 0) { fbytes = min(count, sizeof(buf)); _samba.read(addr, buf, fbytes); fbytes = fwrite(buf, 1, fbytes, infile); if (fbytes < 0) throw FileIoError(errno); if ((size_t) fbytes != min(count, sizeof(buf))) throw FileShortError(); count -= fbytes; } } catch (...) { fclose(infile); throw; } fclose(infile); } CommandMrw::CommandMrw() : Command("mrw", "Read words from memory.", "mrw [ADDRESS] \n" " ADDRESS -- starting memory address\n" " COUNT -- (optional) count of words to display, 1 if not given") {} void CommandMrw::invoke(char* argv[], int argc) { uint32_t addr; uint32_t count = 1; uint32_t value; if (!argRange(argc, 2, 3) || !argUint32(argv[1], &addr) || (argc >= 3 && !argUint32(argv[2], &count)) || !connected()) return; while (count > 0) { value = _samba.readWord(addr); printf("%08x : %08x %s\n", addr, value, binstr(value, 32)); addr += 4; count--; } } CommandMwb::CommandMwb() : Command("mwb", "Write bytes to memory.", "mwb [ADDRESS] \n" " ADDRESS -- starting memory address\n" " VALUE -- (optional) value of byte to write, if not given" " command will repeatedly prompt for input") {} void CommandMwb::invoke(char* argv[], int argc) { uint32_t addr; uint32_t value; if (!argRange(argc, 2, 3) || !argUint32(argv[1], &addr) || (argc >= 3 && !argUint32(argv[2], &value)) || !connected()) return; do { if (argc == 2) { char* input = readline("? "); if (!input) return; if (*input == '\0' || !argUint32(input, &value)) { free(input); return; } free(input); } if (value > 255) { error("Value out of range"); return; } _samba.writeByte(addr, value); printf("%08x : %02x\n", addr, value); addr++; } while (argc == 2); } CommandMwf::CommandMwf() : Command("mwf", "Write memory from file.", "mwf [ADDRESS] [FILE]\n" " ADDRESS -- memory address to write\n" " FILE -- file name on host filesystem to read") {} void CommandMwf::invoke(char* argv[], int argc) { uint32_t addr; FILE* infile; uint8_t buf[1024]; ssize_t fsize; ssize_t fbytes; ssize_t fpos; if (!argNum(argc, 3) || !argUint32(argv[1], &addr) || !connected()) return; infile = fopen(argv[2], "rb"); if (!infile) throw FileOpenError(errno); try { if (fseek(infile, 0, SEEK_END) != 0 || (fsize = ftell(infile)) < 0) throw FileIoError(errno); rewind(infile); for (fpos = 0; fpos < fsize; fpos += fbytes) { fbytes = fread(buf, 1, min((size_t)fsize, sizeof(buf)), infile); if (fbytes < 0) throw FileIoError(errno); if (fbytes == 0) break; _samba.write(addr, buf, fbytes); } } catch (...) { fclose(infile); throw; } fclose(infile); printf("Wrote %ld bytes to address %08x\n", (long) fsize, addr); } CommandMww::CommandMww() : Command("mww", "Write words to memory.", "mww [ADDRESS] \n" " ADDRESS -- starting memory address\n" " VALUE -- (optional) value of word to write, if not given" " command will repeatedly prompt for input") {} void CommandMww::invoke(char* argv[], int argc) { uint32_t addr; uint32_t value; if (!argRange(argc, 2, 3) || !argUint32(argv[1], &addr) || (argc >= 3 && !argUint32(argv[2], &value)) || !connected()) return; do { if (argc == 2) { char* input = readline("? "); if (!input) return; if (*input == '\0' || !argUint32(input, &value)) { free(input); return; } free(input); } _samba.writeWord(addr, value); printf("%08x : %08x\n", addr, value); addr++; } while (argc == 2); } CommandPio::CommandPio() : Command("pio", "Parallel input/output operations.", "pio [LINE] [OPERATION]\n" " LINE -- PIO line name (i.e. pa28, pc5, etc.)\n" " All lines if only port given (i.e. pa, pc, etc.)\n" " OPERATION -- operation to perform on the PIO line.\n" " status -- show the line status\n" " high -- drive the output high\n" " low -- drive the output low\n" " read -- read the input level\n" " input -- make the line an input\n" " peripheral [AB] -- set the line to a peripheral\n" " [AB] -- peripheral \"a\" or \"b\"\n" " multidrive [STATE] -- set the multi-drive state\n" " STATE - either \"disable\" or \"enable\"\n" " pullup [STATE] -- set the pull-up state\n" " STATE - either \"disable\" or \"enable\"" ) {} void CommandPio::invoke(char* argv[], int argc) { uint32_t line; uint32_t addr = 0; size_t len; char port; if (!argRange(argc, 3, 4) || !connected()) return; if (strlen(argv[1]) < 2 || tolower(argv[1][0]) != 'p') { error("Invalid PIO line name"); return; } if (argv[1][2] == '\0') { line = 0xffffffff; } else { if (!argUint32(&argv[1][2], &line)) return; if (line >= 32) { error("Invalid PIO line number"); return; } line = (1 << line); } port = tolower(argv[1][1]); // Check for Cortex-M3 register set Device::Family family = _device.getFamily(); if (family == Device::FAMILY_SAM3U) { // Check for SAM3U special case switch (port) { case 'a': addr = 0x400e0c00; break; case 'b': addr = 0x400e0e00; break; case 'c': addr = 0x400e1000; break; } } else if (family == Device::FAMILY_SAM3N || family == Device::FAMILY_SAM3S) { switch (port) { case 'a': addr = 0x400e0e00; break; case 'b': addr = 0x400e1000; break; case 'c': addr = 0x400e1200; break; } } else if (family == Device::FAMILY_SAM7S || family == Device::FAMILY_SAM7SE || family == Device::FAMILY_SAM7X || family == Device::FAMILY_SAM7XC || family == Device::FAMILY_SAM7L) { switch (port) { case 'a': addr = 0xfffff400; break; case 'b': addr = 0xfffff600; break; case 'c': addr = 0xfffff800; break; } } else { printf("Unsupported device\n"); return; } if (addr == 0) { printf("Invalid PIO line \"%s\"\n", argv[1]); return; } static const uint32_t PIO_PER = 0x0; static const uint32_t PIO_PDR = 0x4; static const uint32_t PIO_PSR = 0x8; static const uint32_t PIO_OER = 0x10; static const uint32_t PIO_ODR = 0x14; static const uint32_t PIO_OSR = 0x18; static const uint32_t PIO_SODR = 0x30; static const uint32_t PIO_CODR = 0x34; static const uint32_t PIO_ODSR = 0x38; static const uint32_t PIO_PDSR = 0x3c; static const uint32_t PIO_MDER = 0x50; static const uint32_t PIO_MDDR = 0x54; static const uint32_t PIO_MDSR = 0x58; static const uint32_t PIO_PUDR = 0x60; static const uint32_t PIO_PUER = 0x64; static const uint32_t PIO_PUSR = 0x68; static const uint32_t PIO_ABSR = 0x70; len = strlen(argv[2]); if (strncasecmp(argv[2], "status", len) == 0) { if (line != 0xffffffff) { uint32_t reg = _samba.readWord(addr + PIO_PSR); printf("PIO Mode : %s\n", (reg & line) ? "enable" : "disable"); reg = _samba.readWord(addr + PIO_OSR); printf("Direction : %s\n", (reg & line) ? "output" : "input"); reg = _samba.readWord(addr + PIO_PDSR); printf("Input Level : %s\n", (reg & line)? "high" : "low"); reg = _samba.readWord(addr + PIO_ODSR); printf("Output Level : %s\n", (reg & line)? "high" : "low"); reg = _samba.readWord(addr + PIO_MDSR); printf("Multi-Drive : %s\n", (reg & line)? "enable" : "disable"); reg = _samba.readWord(addr + PIO_PUSR); printf("Pull-Up : %s\n", (reg & line)? "disable" : "enable"); reg = _samba.readWord(addr + PIO_ABSR); printf("Peripheral : %s\n", (reg & line) ? "B" : "A"); } else { printf(" 3 2 2 1 1\n"); printf(" 1 4 3 6 5 8 7 0\n"); uint32_t reg = _samba.readWord(addr + PIO_PSR); printf("PIO Mode : %s\n", binstr(reg, 32, 'D', 'E')); reg = _samba.readWord(addr + PIO_OSR); printf("Direction : %s\n", binstr(reg, 32, 'I', 'O')); reg = _samba.readWord(addr + PIO_PDSR); printf("Input Level : %s\n", binstr(reg, 32, 'L', 'H')); reg = _samba.readWord(addr + PIO_ODSR); printf("Output Level : %s\n", binstr(reg, 32, 'L', 'H')); reg = _samba.readWord(addr + PIO_MDSR); printf("Multi-Drive : %s\n", binstr(reg, 32, 'D', 'E')); reg = _samba.readWord(addr + PIO_PUSR); printf("Pull-Up : %s\n", binstr(reg, 32, 'E', 'D')); reg = _samba.readWord(addr + PIO_ABSR); printf("Peripheral : %s\n", binstr(reg, 32, 'A', 'B')); } } else if (strncasecmp(argv[2], "high", len) == 0) { _samba.writeWord(addr + PIO_SODR, line); _samba.writeWord(addr + PIO_OER, line); _samba.writeWord(addr + PIO_PER, line); printf("%s is high output\n", argv[1]); } else if (strncasecmp(argv[2], "low", len) == 0) { _samba.writeWord(addr + PIO_CODR, line); _samba.writeWord(addr + PIO_OER, line); _samba.writeWord(addr + PIO_PER, line); printf("%s is low output\n", argv[1]); } else if (strncasecmp(argv[2], "read", len) == 0) { uint32_t reg = _samba.readWord(addr + PIO_PDSR); printf("%s is %s\n", argv[1], (reg & line) ? "high" : "low"); } else if (strncasecmp(argv[2], "input", len) == 0) { _samba.writeWord(addr + PIO_ODR, line); _samba.writeWord(addr + PIO_PER, line); printf("%s is an input\n", argv[1]); } else if (strncasecmp(argv[2], "peripheral", len) == 0) { uint32_t reg; if (!argNum(argc, 4)) return; reg = _samba.readWord(addr + PIO_ABSR); if (strcasecmp(argv[3], "a") == 0) reg &= ~line; else if (strcasecmp(argv[3], "b") == 0) reg |= line; else { error("Peripheral must be \"a\" or \"b\""); return; } _samba.writeWord(addr + PIO_ABSR, reg); _samba.writeWord(addr + PIO_PDR, line); printf("%s set to peripheral %s\n", argv[1], argv[3]); } else if (strncasecmp(argv[2], "pullup", len) == 0) { bool state; if (!argNum(argc, 4) || !argState(argv[3], &state)) return; if (state) _samba.writeWord(addr + PIO_PUER, line); else _samba.writeWord(addr + PIO_PUDR, line); printf("%s pullup is %s\n", argv[1], argv[3]); } else if (strncasecmp(argv[2], "multidrive", len) == 0) { bool state; if (!argNum(argc, 4) || !argState(argv[3], &state)) return; if (state) _samba.writeWord(addr + PIO_MDER, line); else _samba.writeWord(addr + PIO_MDDR, line); printf("%s multidrive is %s\n", argv[1], argv[3]); } else { printf("Invalid PIO operation\n"); return; } } CommandRead::CommandRead() : Command("read", "Read flash into a binary file.", "read [FILE] \n" " FILE -- file name on host filesystem\n" " COUNT -- (optional) count of bytes to read, defaults\n" " to entire flash if not given\n" " OFFSET -- (optional) start read operation at flash OFFSET\n" " OFFSET must be aligned to a flash page boundary") {} void CommandRead::invoke(char* argv[], int argc) { uint32_t count = 0; uint32_t offset = 0; if (!argRange(argc, 2, 4) || (argc >= 3 && !argUint32(argv[2], &count)) || (argc >= 4 && !argUint32(argv[3], &offset)) || !flashable()) return; printf("count:%d offset:%d\n", count, offset); _flasher.read(argv[1], count, offset); printf("\nRead successful\n"); } CommandSecurity::CommandSecurity() : Command("security", "Enable the security flag.", "security") {} void CommandSecurity::invoke(char* argv[], int argc) { if (!argNum(argc, 1) || !flashable()) return; _flash->setSecurity(); } CommandUnlock::CommandUnlock() : Command("unlock", "Clear lock bits in the flash.", "unlock " " BITS -- (optional) comma separated list of bits," " all bits if not given\n") {} void CommandUnlock::invoke(char* argv[], int argc) { string bits; if (!flashable()) return; for (int argn = 1; argn < argc; argn++) bits += argv[argn]; _flasher.lock(bits, false); printf("Unlocked regions %s", bits.c_str()); } CommandVerify::CommandVerify() : Command("verify", "Verify binary file with the flash.", "verify [FILE] \n" " FILE -- file name on host filesystem\n" " OFFSET -- (optional) start verify operation at flash OFFSET\n" " OFFSET must be aligned to a flash page boundary") {} void CommandVerify::invoke(char* argv[], int argc) { uint32_t offset = 0; uint32_t pageErrors; uint32_t totalErrors; if (!argRange(argc, 2, 3) || (argc >= 3 && !argUint32(argv[2], &offset)) || !flashable()) return; if (!_flasher.verify(argv[1], pageErrors, totalErrors, offset)) { printf("\nVerify failed\nPage errors: %d\nByte errors: %d\n", pageErrors, totalErrors); return; } printf("\nVerify successful\n"); } CommandWrite::CommandWrite() : Command("write", "Write binary file into flash.", "write [FILE] \n" " FILE -- file name on host filesystem\n" " OFFSET -- (optional) start write operation at flash OFFSET\n" " OFFSET must be aligned to a flash page boundary") {} void CommandWrite::invoke(char* argv[], int argc) { uint32_t offset = 0; if (!argRange(argc, 2, 3) || (argc >= 3 && !argUint32(argv[2], &offset)) || !flashable()) return; _flasher.write(argv[1], offset); printf("\nWrite successful\n"); } CommandReset::CommandReset() : Command("reset", "Reset the CPU. (only for supported CPU)", "reset\n") {} void CommandReset::invoke(char* argv[], int argc) { _device.reset(); } CommandOptions::CommandOptions() : Command("options", "Write options to flash.", "options\n") {} void CommandOptions::invoke(char* argv[], int argc) { _flash->writeOptions(); } BOSSA-1.9.1/src/Command.h000066400000000000000000000147721333742133700147300ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _COMMAND_H #define _COMMAND_H #include #include "Shell.h" #include "Samba.h" #include "PortFactory.h" #include "Device.h" #include "Flasher.h" class CommandObserver : public FlasherObserver { public: CommandObserver() : _lastTicks(-1) {} virtual ~CommandObserver() {} virtual void onStatus(const char *message, ...); virtual void onProgress(int num, int div); private: int _lastTicks; }; class Command { public: Command(const char* name, const char* help, const char* usage); virtual ~Command() {} virtual void invoke(char* argv[], int argc) = 0; const char* name() { return _name; }; const char* help() { return _help; }; const char* usage() { return _usage; }; static void setShell(Shell* shell) { _shell = shell; } static void disconnect(); bool operator < (const Command& rhs); protected: static Shell* _shell; static Samba _samba; static PortFactory _portFactory; static Device _device; static Device::FlashPtr& _flash; static Flasher _flasher; static CommandObserver _observer; static bool _connected; bool error(const char* fmt, ...); bool argNum(int argc, int num); bool argRange(int argc, int min, int max); bool argUint32(const char* arg, uint32_t* value); bool argBool(const char* arg, bool* value); bool argState(const char* arg, bool* value); bool createDevice(); bool connected(); bool flashable(); void hexdump(uint32_t addr, uint8_t *buf, size_t count); const char* binstr(uint32_t value, int bits, char low = '0', char high = '1'); private: const char* _name; const char* _help; const char* _usage; }; class CommandBod : public Command { public: CommandBod(); virtual void invoke(char* argv[], int argc); }; class CommandBootf : public Command { public: CommandBootf(); virtual void invoke(char* argv[], int argc); }; class CommandBor : public Command { public: CommandBor(); virtual void invoke(char* argv[], int argc); }; class CommandConnect : public Command { public: CommandConnect(); virtual void invoke(char* argv[], int argc); }; class CommandDebug : public Command { public: CommandDebug(); virtual void invoke(char* argv[], int argc); }; class CommandDump : public Command { public: CommandDump(); virtual void invoke(char* argv[], int argc); }; class CommandErase : public Command { public: CommandErase(); virtual void invoke(char* argv[], int argc); }; class CommandExit : public Command { public: CommandExit(); virtual void invoke(char* argv[], int argc); }; class CommandGo : public Command { public: CommandGo(); virtual void invoke(char* argv[], int argc); }; class CommandHelp : public Command { public: CommandHelp(); virtual void invoke(char* argv[], int argc); }; class CommandHistory : public Command { public: CommandHistory(); virtual void invoke(char* argv[], int argc); }; class CommandInfo : public Command { public: CommandInfo(); virtual void invoke(char* argv[], int argc); }; class CommandLock : public Command { public: CommandLock(); virtual void invoke(char* argv[], int argc); }; class CommandMrb : public Command { public: CommandMrb(); virtual void invoke(char* argv[], int argc); }; class CommandMrf : public Command { public: CommandMrf(); virtual void invoke(char* argv[], int argc); }; class CommandMrw : public Command { public: CommandMrw(); virtual void invoke(char* argv[], int argc); }; class CommandMwb : public Command { public: CommandMwb(); virtual void invoke(char* argv[], int argc); }; class CommandMwf : public Command { public: CommandMwf(); virtual void invoke(char* argv[], int argc); }; class CommandMww : public Command { public: CommandMww(); virtual void invoke(char* argv[], int argc); }; class CommandPio : public Command { public: CommandPio(); virtual void invoke(char* argv[], int argc); }; class CommandRead : public Command { public: CommandRead(); virtual void invoke(char* argv[], int argc); }; class CommandSecurity : public Command { public: CommandSecurity(); virtual void invoke(char* argv[], int argc); }; class CommandUnlock : public Command { public: CommandUnlock(); virtual void invoke(char* argv[], int argc); }; class CommandVerify : public Command { public: CommandVerify(); virtual void invoke(char* argv[], int argc); }; class CommandWrite : public Command { public: CommandWrite(); virtual void invoke(char* argv[], int argc); }; class CommandReset : public Command { public: CommandReset(); virtual void invoke(char* argv[], int argc); }; class CommandOptions : public Command { public: CommandOptions(); virtual void invoke(char* argv[], int argc); }; #endif // _COMMAND_H BOSSA-1.9.1/src/D2xNvmFlash.cpp000066400000000000000000000211031333742133700157630ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2018, ShumaTech // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . /////////////////////////////////////////////////////////////////////////////// #include "D2xNvmFlash.h" // CMDEX field should be 0xA5 to allow execution of any command. #define CMDEX_KEY 0xa500 // NVM ready bit mask #define NVM_INT_STATUS_READY_MASK 0x1 // NVM status mask #define NVM_CTRL_STATUS_MASK 0xFFEB #define NVM_REG_BASE 0x41004000 #define NVM_REG_CTRLA 0x00 #define NVM_REG_CTRLB 0x04 #define NVM_REG_INTFLAG 0x14 #define NVM_REG_STATUS 0x18 #define NVM_REG_ADDR 0x1c #define NVM_REG_LOCK 0x20 #define NVM_CMD_ER 0x02 #define NVM_CMD_WP 0x04 #define NVM_CMD_EAR 0x05 #define NVM_CMD_WAP 0x06 #define NVM_CMD_LR 0x40 #define NVM_CMD_UR 0x41 #define NVM_CMD_SSB 0x45 #define NVM_CMD_PBC 0x44 #define ERASE_ROW_PAGES 4 // pages // NVM User Row #define NVM_UR_ADDR 0x804000 #define NVM_UR_SIZE (_size * ERASE_ROW_PAGES) #define NVM_UR_BOD33_ENABLE_OFFSET 0x1 #define NVM_UR_BOD33_ENABLE_MASK 0x6 #define NVM_UR_BOD33_RESET_OFFSET 0x1 #define NVM_UR_BOD33_RESET_MASK 0x7 #define NVM_UR_NVM_LOCK_OFFSET 0x6 D2xNvmFlash::D2xNvmFlash( Samba& samba, const std::string& name, uint32_t pages, uint32_t size, uint32_t user, uint32_t stack) : Flash(samba, name, 0, pages, size, 1, 16, user, stack), _eraseAuto(true) { } D2xNvmFlash::~D2xNvmFlash() { } void D2xNvmFlash::erase(uint32_t offset, uint32_t size) { uint32_t eraseSize = _size * ERASE_ROW_PAGES; // Offset must be a multiple of the erase size if (offset % eraseSize) throw FlashEraseError(); // Offset and size must be in range if (offset + size > totalSize()) throw FlashEraseError(); uint32_t eraseEnd = (offset + size + eraseSize - 1) / eraseSize; // Erase each erase size set of pages for (uint32_t eraseNum = offset / eraseSize; eraseNum < eraseEnd; eraseNum++) { waitReady(); // Clear error bits uint16_t statusReg = readReg(NVM_REG_STATUS); writeReg(NVM_REG_STATUS, statusReg | NVM_CTRL_STATUS_MASK); // Issue erase command uint32_t wordAddr = (eraseNum * eraseSize) / 2; writeReg(NVM_REG_ADDR, wordAddr); command(NVM_CMD_ER); } } void D2xNvmFlash::eraseAll(uint32_t offset) { // Use the extended Samba command if available if (_samba.canChipErase()) { _samba.chipErase(offset); } else { erase(offset, totalSize() - offset); } } void D2xNvmFlash::eraseAuto(bool enable) { _eraseAuto = enable; } std::vector D2xNvmFlash::getLockRegions() { uint8_t lockBits = 0; uint32_t addr = NVM_UR_ADDR + NVM_UR_NVM_LOCK_OFFSET; std::vector regions(_lockRegions); for (uint32_t region = 0; region < _lockRegions; region++) { if (region % 8 == 0) lockBits = _samba.readByte(addr++); regions[region] = (lockBits & (1 << (region % 8))) == 0; } return regions; } bool D2xNvmFlash::getSecurity() { return (readReg(NVM_REG_STATUS) & 0x100) != 0; } bool D2xNvmFlash::getBod() { uint8_t byte = _samba.readByte(NVM_UR_ADDR + NVM_UR_BOD33_ENABLE_OFFSET); return (byte & NVM_UR_BOD33_ENABLE_MASK) != 0; } bool D2xNvmFlash::getBor() { uint8_t byte = _samba.readByte(NVM_UR_ADDR + NVM_UR_BOD33_RESET_OFFSET); return (byte & NVM_UR_BOD33_RESET_MASK) != 0; } bool D2xNvmFlash::getBootFlash() { return true; } void D2xNvmFlash::readUserRow(std::unique_ptr& userRow) { if (!userRow) { userRow.reset(new uint8_t[NVM_UR_SIZE]); _samba.read(NVM_UR_ADDR, userRow.get(), NVM_UR_SIZE); } } void D2xNvmFlash::writeOptions() { std::unique_ptr userRow; if (canBor() && _bor.isDirty() && _bor.get() != getBor()) { readUserRow(userRow); if (_bor.get()) userRow[NVM_UR_BOD33_RESET_OFFSET] |= NVM_UR_BOD33_RESET_MASK; else userRow[NVM_UR_BOD33_RESET_OFFSET] &= ~NVM_UR_BOD33_RESET_MASK; } if (canBod() && _bod.isDirty() && _bod.get() != getBod()) { readUserRow(userRow); if (_bod.get()) userRow[NVM_UR_BOD33_ENABLE_OFFSET] |= NVM_UR_BOD33_ENABLE_MASK; else userRow[NVM_UR_BOD33_ENABLE_OFFSET] &= ~NVM_UR_BOD33_ENABLE_MASK; } if (_regions.isDirty()) { // Check if any lock bits are different from the current set std::vector current = getLockRegions(); if (!equal(_regions.get().begin(), _regions.get().end(), current.begin())) { readUserRow(userRow); uint8_t* lockBits = &userRow[NVM_UR_NVM_LOCK_OFFSET]; for (uint32_t region = 0; region < _regions.get().size(); region++) { if (_regions.get()[region]) lockBits[region / 8] &= ~(1 << (region % 8)); else lockBits[region / 8] |= (1 << (region % 8)); } } } // Erase and write the user row if modified if (userRow) { // Disable cache and configure manual page write writeReg(NVM_REG_CTRLB, readReg(NVM_REG_CTRLB) | (0x1 << 18) | (0x1 << 7)); // Erase user row writeReg(NVM_REG_ADDR, NVM_UR_ADDR / 2); command(NVM_CMD_EAR); // Write user row in page chunks for (uint32_t offset = 0; offset < NVM_UR_SIZE; offset += _size) { // Load the buffer with the page loadBuffer(&userRow[offset], _size); // Clear page buffer command(NVM_CMD_PBC); // Copy page to page buffer _wordCopy.setDstAddr(NVM_UR_ADDR + offset); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _onBufferA = !_onBufferA; waitReady(); _wordCopy.runv(); // Write the page writeReg(NVM_REG_ADDR, (NVM_UR_ADDR + offset) / 2); command(NVM_CMD_WAP); } } // Always do security last if (_security.isDirty() && _security.get() == true && _security.get() != getSecurity()) { command(NVM_CMD_SSB); } } void D2xNvmFlash::writePage(uint32_t page) { if (page >= _pages) { throw FlashPageError(); } // Disable cache and configure manual page write writeReg(NVM_REG_CTRLB, readReg(NVM_REG_CTRLB) | (0x1 << 18) | (0x1 << 7)); // Auto-erase if writing at the start of the erase page if (_eraseAuto && page % ERASE_ROW_PAGES == 0) erase(page * _size, ERASE_ROW_PAGES * _size); // Clear page buffer command(NVM_CMD_PBC); // Compute the start address. uint32_t addr = _addr + (page * _size); _wordCopy.setDstAddr(addr); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _onBufferA = !_onBufferA; waitReady(); _wordCopy.runv(); writeReg(NVM_REG_ADDR, addr / 2); command(NVM_CMD_WP); } void D2xNvmFlash::waitReady() { while ((readReg(NVM_REG_INTFLAG) & 0x1) == 0); } void D2xNvmFlash::readPage(uint32_t page, uint8_t* buf) { if (page >= _pages) { throw FlashPageError(); } _samba.read(_addr + (page * _size), buf, _size); } uint32_t D2xNvmFlash::readReg(uint8_t reg) { return _samba.readWord(NVM_REG_BASE + reg); } void D2xNvmFlash::writeReg(uint8_t reg, uint32_t value) { _samba.writeWord(NVM_REG_BASE + reg, value); } void D2xNvmFlash::command(uint8_t cmd) { waitReady(); writeReg(NVM_REG_CTRLA, CMDEX_KEY | cmd); waitReady(); if (readReg(NVM_REG_INTFLAG) & 0x2) { // Clear the error bit writeReg(NVM_REG_INTFLAG, 0x2); throw FlashCmdError(); } } void D2xNvmFlash::writeBuffer(uint32_t dst_addr, uint32_t size) { // Auto-erase if enabled if (_eraseAuto) erase(dst_addr, size); // Call the base class method Flash::writeBuffer(dst_addr, size); } BOSSA-1.9.1/src/D2xNvmFlash.h000066400000000000000000000037141333742133700154400ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2018, ShumaTech // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . /////////////////////////////////////////////////////////////////////////////// #ifndef _D2XNVMFLASH_H #define _D2XNVMFLASH_H #include #include #include "Flash.h" class D2xNvmFlash : public Flash { public: D2xNvmFlash( Samba& samba, const std::string& name, uint32_t pages, uint32_t size, uint32_t user, uint32_t stack); virtual ~D2xNvmFlash(); void eraseAll(uint32_t offset); void eraseAuto(bool enable); std::vector getLockRegions(); bool getSecurity(); bool getBod(); bool canBod() { return true; } bool getBor(); bool canBor() { return true; } bool getBootFlash(); bool canBootFlash() { return false; } void writeOptions(); void writePage(uint32_t page); void readPage(uint32_t page, uint8_t* data); void writeBuffer(uint32_t dst_addr, uint32_t size); protected: bool _eraseAuto; uint32_t readReg(uint8_t reg); void writeReg(uint8_t reg, uint32_t value); void waitReady(); void command(uint8_t cmd); void erase(uint32_t offset, uint32_t size); void readUserRow(std::unique_ptr& userRow); }; #endif // _D2XNVMFLASH_H BOSSA-1.9.1/src/D5xNvmFlash.cpp000066400000000000000000000213141333742133700157720ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2018, ShumaTech // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . /////////////////////////////////////////////////////////////////////////////// #include "D5xNvmFlash.h" #define CMDEX_KEY 0xa500 #define NVM_REG_BASE 0x41004000 #define NVM_REG_CTRLA 0x00 #define NVM_REG_CTRLB 0x04 #define NVM_REG_INTFLAG 0x10 #define NVM_REG_STATUS 0x12 #define NVM_REG_ADDR 0x14 #define NVM_REG_RUNLOCK 0x18 #define NVM_CMD_EP 0x00 #define NVM_CMD_EB 0x01 #define NVM_CMD_WP 0x03 #define NVM_CMD_WQW 0x04 #define NVM_CMD_LR 0x11 #define NVM_CMD_UR 0x12 #define NVM_CMD_SSB 0x16 #define NVM_CMD_PBC 0x15 #define ERASE_BLOCK_PAGES 16 // pages // NVM User Page #define NVM_UP_ADDR 0x804000 #define NVM_UP_SIZE (_size) #define NVM_UP_BOD33_DISABLE_OFFSET 0x0 #define NVM_UP_BOD33_DISABLE_MASK 0x1 #define NVM_UP_BOD33_RESET_OFFSET 0x1 #define NVM_UP_BOD33_RESET_MASK 0x2 #define NVM_UP_NVM_LOCK_OFFSET 0x8 D5xNvmFlash::D5xNvmFlash( Samba& samba, const std::string& name, uint32_t pages, uint32_t size, uint32_t user, uint32_t stack) : Flash(samba, name, 0, pages, size, 1, 32, user, stack), _eraseAuto(true) { } D5xNvmFlash::~D5xNvmFlash() { } void D5xNvmFlash::erase(uint32_t offset, uint32_t size) { uint32_t eraseSize = _size * ERASE_BLOCK_PAGES; // Offset must be a multiple of the erase size if (offset % eraseSize) throw FlashEraseError(); // Offset and size must be in range if (offset + size > totalSize()) throw FlashEraseError(); uint32_t eraseEnd = (offset + size + eraseSize - 1) / eraseSize; // Erase each erase size set of pages for (uint32_t eraseNum = offset / eraseSize; eraseNum < eraseEnd; eraseNum++) { // Issue erase command writeRegU32(NVM_REG_ADDR, eraseNum * eraseSize); command(NVM_CMD_EB); } } void D5xNvmFlash::eraseAll(uint32_t offset) { // Use the extended Samba command if available if (_samba.canChipErase()) { _samba.chipErase(offset); } else { erase(offset, totalSize() - offset); } } void D5xNvmFlash::waitReady() { while ((readRegU16(NVM_REG_STATUS) & 0x1) == 0); } void D5xNvmFlash::eraseAuto(bool enable) { _eraseAuto = enable; } std::vector D5xNvmFlash::getLockRegions() { uint8_t lockBits = 0; uint32_t addr = NVM_UP_ADDR + NVM_UP_NVM_LOCK_OFFSET; std::vector regions(_lockRegions); for (uint32_t region = 0; region < _lockRegions; region++) { if (region % 8 == 0) lockBits = _samba.readByte(addr++); regions[region] = (lockBits & (1 << (region % 8))) == 0; } return regions; } bool D5xNvmFlash::getSecurity() { // There doesn't seem to be a way to read this return false; } bool D5xNvmFlash::getBod() { uint8_t byte = _samba.readByte(NVM_UP_ADDR + NVM_UP_BOD33_DISABLE_OFFSET); return (byte & NVM_UP_BOD33_DISABLE_MASK) == 0; } bool D5xNvmFlash::getBor() { uint8_t byte = _samba.readByte(NVM_UP_ADDR + NVM_UP_BOD33_RESET_OFFSET); return (byte & NVM_UP_BOD33_RESET_MASK) != 0; } bool D5xNvmFlash::getBootFlash() { return true; } void D5xNvmFlash::readUserPage(std::unique_ptr& userPage) { if (!userPage) { userPage.reset(new uint8_t[NVM_UP_SIZE]); _samba.read(NVM_UP_ADDR, userPage.get(), NVM_UP_SIZE); } } void D5xNvmFlash::writeOptions() { std::unique_ptr userPage; if (canBor() && _bor.isDirty() && _bor.get() != getBor()) { readUserPage(userPage); if (_bor.get()) userPage[NVM_UP_BOD33_RESET_OFFSET] |= NVM_UP_BOD33_RESET_MASK; else userPage[NVM_UP_BOD33_RESET_OFFSET] &= ~NVM_UP_BOD33_RESET_MASK; } if (canBod() && _bod.isDirty() && _bod.get() != getBod()) { readUserPage(userPage); if (_bod.get()) userPage[NVM_UP_BOD33_DISABLE_OFFSET] &= ~NVM_UP_BOD33_DISABLE_MASK; else userPage[NVM_UP_BOD33_DISABLE_OFFSET] |= NVM_UP_BOD33_DISABLE_MASK; } if (_regions.isDirty()) { // Check if any lock bits are different from the current set std::vector current = getLockRegions(); if (!equal(_regions.get().begin(), _regions.get().end(), current.begin())) { readUserPage(userPage); uint8_t* lockBits = &userPage[NVM_UP_NVM_LOCK_OFFSET]; for (uint32_t region = 0; region < _regions.get().size(); region++) { if (_regions.get()[region]) lockBits[region / 8] &= ~(1 << (region % 8)); else lockBits[region / 8] |= (1 << (region % 8)); } } } // Erase and write the user page if modified if (userPage) { // Configure manual page write and disable caches writeRegU16(NVM_REG_CTRLA, (readRegU16(NVM_REG_CTRLA) | (0x3 << 14)) & 0xffcf); // Erase user page writeRegU32(NVM_REG_ADDR, NVM_UP_ADDR); command(NVM_CMD_EP); // Write user page in quad-word chunks for (uint32_t offset = 0; offset < NVM_UP_SIZE; offset += 16) { // Load the buffer with the quad word loadBuffer(&userPage[offset], 16); // Clear page buffer command(NVM_CMD_PBC); // Copy quad word to page buffer _wordCopy.setDstAddr(NVM_UP_ADDR + offset); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _wordCopy.setWords(4); _onBufferA = !_onBufferA; waitReady(); _wordCopy.runv(); // Write the quad word writeRegU32(NVM_REG_ADDR, NVM_UP_ADDR + offset); command(NVM_CMD_WQW); } } // Always do security last if (_security.isDirty() && _security.get() == true && _security.get() != getSecurity()) { command(NVM_CMD_SSB); } } void D5xNvmFlash::writePage(uint32_t page) { if (page >= _pages) { throw FlashPageError(); } // Configure manual page write and disable caches writeRegU16(NVM_REG_CTRLA, (readRegU16(NVM_REG_CTRLA) | (0x3 << 14)) & 0xffcf); // Auto-erase if writing at the start of the erase page if (_eraseAuto && page % ERASE_BLOCK_PAGES == 0) { erase(page * _size, ERASE_BLOCK_PAGES * _size); } // Clear page bur command(NVM_CMD_PBC); uint32_t addr = _addr + (page * _size ); _wordCopy.setDstAddr(addr); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _wordCopy.setWords(_size / sizeof(uint32_t)); _onBufferA = !_onBufferA; waitReady(); _wordCopy.runv(); writeRegU32(NVM_REG_ADDR, addr); command(NVM_CMD_WP); } void D5xNvmFlash::readPage(uint32_t page, uint8_t* buf) { if (page >= _pages) { throw FlashPageError(); } _samba.read(_addr + (page * _size), buf, _size); } uint16_t D5xNvmFlash::readRegU16(uint8_t reg) { return (uint16_t) _samba.readByte(NVM_REG_BASE + reg) | (_samba.readByte(NVM_REG_BASE + reg + 1) << 8); } void D5xNvmFlash::writeRegU16(uint8_t reg, uint16_t value) { _samba.writeByte(NVM_REG_BASE + reg, value & 0xff); _samba.writeByte(NVM_REG_BASE + reg + 1, value >> 8); } uint32_t D5xNvmFlash::readRegU32(uint8_t reg) { return _samba.readWord(NVM_REG_BASE + reg); } void D5xNvmFlash::writeRegU32(uint8_t reg, uint32_t value) { _samba.writeWord(NVM_REG_BASE + reg, value); } void D5xNvmFlash::command(uint8_t cmd) { waitReady(); writeRegU32(NVM_REG_CTRLB, CMDEX_KEY | cmd); waitReady(); if (readRegU16(NVM_REG_INTFLAG) & 0xce) { // Clear the error bits writeRegU16(NVM_REG_INTFLAG, 0xce); throw FlashCmdError(); } } void D5xNvmFlash::writeBuffer(uint32_t dst_addr, uint32_t size) { // Auto-erase if writing at the start of the erase page if (_eraseAuto && ((dst_addr / _size) % ERASE_BLOCK_PAGES == 0)) erase(dst_addr, size); // Call the base class method Flash::writeBuffer(dst_addr, size); } BOSSA-1.9.1/src/D5xNvmFlash.h000066400000000000000000000041041333742133700154350ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2018, ShumaTech // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see . /////////////////////////////////////////////////////////////////////////////// #ifndef _D5XNVMFLASH_H #define _D5XNVMFLASH_H #include #include #include "Flash.h" class D5xNvmFlash : public Flash { public: D5xNvmFlash( Samba& samba, const std::string& name, uint32_t pages, uint32_t size, uint32_t user, uint32_t stack); virtual ~D5xNvmFlash(); void eraseAll(uint32_t offset); void eraseAuto(bool enable); std::vector getLockRegions(); bool getSecurity(); bool getBod(); bool canBod() { return true; } bool getBor(); bool canBor() { return true; } bool getBootFlash(); bool canBootFlash() { return false; } void writeOptions(); void writePage(uint32_t page); void readPage(uint32_t page, uint8_t* data); void writeBuffer(uint32_t dst_addr, uint32_t size); protected: bool _eraseAuto; uint16_t readRegU16(uint8_t reg); void writeRegU16(uint8_t reg, uint16_t value); uint32_t readRegU32(uint8_t reg); void writeRegU32(uint8_t reg, uint32_t value); void waitReady(); void command(uint8_t cmd); void erase(uint32_t offset, uint32_t size); void checkError(); void readUserPage(std::unique_ptr& userPage); }; #endif // _D5XNVMFLASH_H BOSSA-1.9.1/src/Device.cpp000066400000000000000000000574241333742133700151050ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "Device.h" #include "EfcFlash.h" #include "EefcFlash.h" #include "D2xNvmFlash.h" #include "D5xNvmFlash.h" void Device::readChipId(uint32_t& chipId, uint32_t& extChipId) { if ((chipId = _samba.readWord(0x400e0740)) != 0) { extChipId = _samba.readWord(0x400e0744); } else if ((chipId = _samba.readWord(0x400e0940)) != 0) { extChipId = _samba.readWord(0x400e0944); } } void Device::create() { Flash* flashPtr; uint32_t chipId = 0; uint32_t cpuId = 0; uint32_t extChipId = 0; uint32_t deviceId = 0; // Device identification must be performed carefully to avoid reading from // addresses that devices do not support which will lock up the CPU // All devices support addresss 0 as the ARM reset vector so if the vector is // a ARM7TDMI branch, then assume we have an Atmel SAM7/9 CHIPID register if ((_samba.readWord(0x0) & 0xff000000) == 0xea000000) { chipId = _samba.readWord(0xfffff240); } else { // Next try the ARM CPUID register since all Cortex-M devices support it cpuId = _samba.readWord(0xe000ed00) & 0x0000fff0; // Cortex-M0+ if (cpuId == 0xC600) { // These should support the ARM device ID register deviceId = _samba.readWord(0x41002018); } // Cortex-M4 else if (cpuId == 0xC240) { // SAM4 processors have a reset vector to the SAM-BA ROM if ((_samba.readWord(0x4) & 0xfff00000) == 0x800000) { readChipId(chipId, extChipId); } // Else we should have a device that supports the ARM device ID register else { deviceId = _samba.readWord(0x41002018); } } // For all other Cortex versions try the Atmel chip ID registers else { readChipId(chipId, extChipId); } } // Instantiate the proper flash for the device switch (chipId & 0x7fffffe0) { // // SAM7SE // case 0x272a0a40: _family = FAMILY_SAM7SE; flashPtr = new EfcFlash(_samba, "AT91SAM7SE512", 0x100000, 2048, 256, 2, 32, 0x202000, 0x208000, true); break; case 0x272a0940: _family = FAMILY_SAM7SE; flashPtr = new EfcFlash(_samba, "AT91SAM7SE256", 0x100000, 1024, 256, 1, 16, 0x202000, 0x208000, true); break; case 0x272a0340: _family = FAMILY_SAM7SE; flashPtr = new EfcFlash(_samba, "AT91SAM7SE32", 0x100000, 256, 128, 1, 8, 0x201400, 0x201C00, true); break; // // SAM7S // case 0x270b0a40: _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S512", 0x100000, 2048, 256, 2, 32, 0x202000, 0x210000, false); break; case 0x270d0940: // A case 0x270b0940: // B/C _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S256", 0x100000, 1024, 256, 1, 16, 0x202000, 0x210000, false); break; case 0x270c0740: // A case 0x270a0740: // B/C _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S128", 0x100000, 512, 256, 1, 8, 0x202000, 0x208000, false); break; case 0x27090540: _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S64", 0x100000, 512, 128, 1, 16, 0x202000, 0x204000, false); break; case 0x27080340: _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S32", 0x100000, 256, 128, 1, 8, 0x201400, 0x202000, false); break; case 0x27050240: _family = FAMILY_SAM7S; flashPtr = new EfcFlash(_samba, "AT91SAM7S16", 0x100000, 256, 64, 1, 8, 0x200000, 0x200e00, false); break; // // SAM7XC // case 0x271c0a40: _family = FAMILY_SAM7XC; flashPtr = new EfcFlash(_samba, "AT91SAMXC512", 0x100000, 2048, 256, 2, 32, 0x202000, 0x220000, true); break; case 0x271b0940: _family = FAMILY_SAM7XC; flashPtr = new EfcFlash(_samba, "AT91SAMXC256", 0x100000, 1024, 256, 1, 16, 0x202000, 0x210000, true); break; case 0x271a0740: _family = FAMILY_SAM7XC; flashPtr = new EfcFlash(_samba, "AT91SAMXC128", 0x100000, 512, 256, 1, 8, 0x202000, 0x208000, true); break; // // SAM7X // case 0x275c0a40: _family = FAMILY_SAM7X; flashPtr = new EfcFlash(_samba, "AT91SAMX512", 0x100000, 2048, 256, 2, 32, 0x202000, 0x220000, true); break; case 0x275b0940: _family = FAMILY_SAM7X; flashPtr = new EfcFlash(_samba, "AT91SAMX256", 0x100000, 1024, 256, 1, 16, 0x202000, 0x210000, true); break; case 0x275a0740: _family = FAMILY_SAM7X; flashPtr = new EfcFlash(_samba, "AT91SAMX128", 0x100000, 512, 256, 1, 8, 0x202000, 0x208000, true); break; // // SAM4S // case 0x29870ee0: // A case 0x29970ee0: // B case 0x29A70ee0: // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4SD32", 0x400000, 4096, 512, 2, 256, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x29870c30: // A case 0x29970c30: // B case 0x29a70c30: // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4SD16", 0x400000, 2048, 512, 2, 256, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x28870ce0: // A case 0x28970ce0: // B case 0x28A70ce0: // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4SA16", 0x400000, 2048, 512, 1, 256, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x288c0ce0 : // A case 0x289c0ce0 : // B case 0x28ac0ce0 : // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4S16", 0x400000, 2048, 512, 1, 128, 0x20001000, 0x20020000, 0x400e0a00, false); break; case 0x288c0ae0 : // A case 0x289c0ae0 : // B case 0x28ac0ae0 : // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4S8", 0x400000, 1024, 512, 1, 64, 0x20001000, 0x20020000, 0x400e0a00, false); break; case 0x288b09e0 : // A case 0x289b09e0 : // B case 0x28ab09e0 : // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4S4", 0x400000, 512, 512, 1, 16, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x288b07e0 : // A case 0x289b07e0 : // B case 0x28ab07e0 : // C _family = FAMILY_SAM4S; flashPtr = new EefcFlash(_samba, "ATSAM4S2", 0x400000, 256, 512, 1, 16, 0x20001000, 0x20010000, 0x400e0a00, false); break; // // SAM3N // case 0x29340960 : // A case 0x29440960 : // B case 0x29540960 : // C _family = FAMILY_SAM3N; flashPtr = new EefcFlash(_samba, "ATSAM3N4", 0x400000, 1024, 256, 1, 16, 0x20001000, 0x20006000, 0x400e0a00, false); break; case 0x29390760 : // A case 0x29490760 : // B case 0x29590760 : // C _family = FAMILY_SAM3N; flashPtr = new EefcFlash(_samba, "ATSAM3N2", 0x400000, 512, 256, 1, 8, 0x20001000, 0x20004000, 0x400e0a00, false); break; case 0x29380560 : // A case 0x29480560 : // B case 0x29580560 : // C _family = FAMILY_SAM3N; flashPtr = new EefcFlash(_samba, "ATSAM3N1", 0x400000, 256, 256, 1, 4, 0x20000800, 0x20002000, 0x400e0a00, false); break; case 0x29380360 : // A case 0x29480360 : // B case 0x29580360 : // C _family = FAMILY_SAM3N; flashPtr = new EefcFlash(_samba, "ATSAM3N0", 0x400000, 128, 256, 1, 1, 0x20000800, 0x20002000, 0x400e0a00, false); break; // // SAM3S // case 0x299b0a60 : // B case 0x29ab0a60 : // C _family = FAMILY_SAM3S; flashPtr = new EefcFlash(_samba, "ATSAM3SD8", 0x400000, 2048, 256, 1, 16, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x289b0a60 : // B case 0x28ab0a60 : // C _family = FAMILY_SAM3S; flashPtr = new EefcFlash(_samba, "ATSAM3S8", 0x400000, 2048, 256, 1, 16, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x28800960 : // A case 0x28900960 : // B case 0x28a00960 : // C _family = FAMILY_SAM3S; flashPtr = new EefcFlash(_samba, "ATSAM3S4", 0x400000, 1024, 256, 1, 16, 0x20001000, 0x2000c000, 0x400e0a00, false); break; case 0x288a0760 : // A case 0x289a0760 : // B case 0x28aa0760 : // C _family = FAMILY_SAM3S; flashPtr = new EefcFlash(_samba, "ATSAM3S2", 0x400000, 512, 256, 1, 8, 0x20000800, 0x20008000, 0x400e0a00, false); break; case 0x288a0560 : // A case 0x289a0560 : // B case 0x28aa0560 : // C _family = FAMILY_SAM3S; flashPtr = new EefcFlash(_samba, "ATSAM3S1", 0x400000, 256, 256, 1, 4, 0x20000800, 0x20004000, 0x400e0a00, false); break; // // SAM3U // case 0x28000960 : // C case 0x28100960 : // E _family = FAMILY_SAM3U; flashPtr = new EefcFlash(_samba, "ATSAM3U4", 0xE0000, 1024, 256, 2, 32, 0x20001000, 0x20008000, 0x400e0800, false); break; case 0x280a0760 : // C case 0x281a0760 : // E _family = FAMILY_SAM3U; flashPtr = new EefcFlash(_samba, "ATSAM3U2", 0x80000, 512, 256, 1, 16, 0x20001000, 0x20004000, 0x400e0800, false); break; case 0x28090560 : // C case 0x28190560 : // E _family = FAMILY_SAM3U; flashPtr = new EefcFlash(_samba, "ATSAM3U1", 0x80000, 256, 256, 1, 8, 0x20001000, 0x20002000, 0x400e0800, false); break; // // SAM3X // case 0x286e0a60 : // 8H case 0x285e0a60 : // 8E case 0x284e0a60 : // 8C _family = FAMILY_SAM3X; flashPtr = new EefcFlash(_samba, "ATSAM3X8", 0x80000, 2048, 256, 2, 32, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x285b0960 : // 4E case 0x284b0960 : // 4C _family = FAMILY_SAM3X; flashPtr = new EefcFlash(_samba, "ATSAM3X4", 0x80000, 1024, 256, 2, 16, 0x20001000, 0x20008000, 0x400e0a00, false); break; // // SAM3A // case 0x283e0A60 : // 8C _family = FAMILY_SAM3A; flashPtr = new EefcFlash(_samba, "ATSAM3A8", 0x80000, 2048, 256, 2, 32, 0x20001000, 0x20010000, 0x400e0a00, false); break; case 0x283b0960 : // 4C _family = FAMILY_SAM3A; flashPtr = new EefcFlash(_samba, "ATSAM3A4", 0x80000, 1024, 256, 2, 16, 0x20001000, 0x20008000, 0x400e0a00, false); break; // // SAM7L // case 0x27330740 : _family = FAMILY_SAM7L; flashPtr = new EefcFlash(_samba, "ATSAM7L128", 0x100000, 512, 256, 1, 16, 0x2ffb40, 0x300700, 0xffffff60, false); break; case 0x27330540 : _family = FAMILY_SAM7L; flashPtr = new EefcFlash(_samba, "ATSAM7L64", 0x100000, 256, 256, 1, 8, 0x2ffb40, 0x300700, 0xffffff60, false); break; // // SAM9XE // case 0x329aa3a0 : _family = FAMILY_SAM9XE; flashPtr = new EefcFlash(_samba, "ATSAM9XE512", 0x200000, 1024, 512, 1, 32, 0x300000, 0x307000, 0xfffffa00, true); break; case 0x329a93a0 : _family = FAMILY_SAM9XE; flashPtr = new EefcFlash(_samba, "ATSAM9XE256", 0x200000, 512, 512, 1, 16, 0x300000, 0x307000, 0xfffffa00, true); break; case 0x329973a0 : _family = FAMILY_SAM9XE; flashPtr = new EefcFlash(_samba, "ATSAM9XE128", 0x200000, 256, 512, 1, 8, 0x300000, 0x303000, 0xfffffa00, true); break; // // SAM4E // case 0x23cc0ce0: switch (extChipId) { case 0x00120200: // E case 0x00120201: // C _family = FAMILY_SAM4E; flashPtr = new EefcFlash(_samba, "ATSAM4E16", 0x400000, 2048, 512, 1, 128, 0x20001000, 0x20020000, 0x400e0a00, false); break; case 0x00120208: // E case 0x00120209: // C _family = FAMILY_SAM4E; flashPtr = new EefcFlash(_samba, "ATSAM4E8", 0x400000, 1024, 512, 1, 64, 0x20001000, 0x20020000, 0x400e0a00, false); break; } break; // // SAME70 // case 0x210d0a00: _family = FAMILY_SAME70; flashPtr = new EefcFlash(_samba, "ATSAME70x19", 0x400000, 1024, 512, 1, 32, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21020c00: _family = FAMILY_SAME70; flashPtr = new EefcFlash(_samba, "ATSAME70x20", 0x400000, 2048, 512, 1, 64, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21020e00: _family = FAMILY_SAME70; flashPtr = new EefcFlash(_samba, "ATSAME70x21", 0x400000, 4096, 512, 1, 128, 0x20401000, 0x20404000, 0x400e0c00, false); break; // // SAMS70 // case 0x211d0a00: _family = FAMILY_SAMS70; flashPtr = new EefcFlash(_samba, "ATSAMS70x19", 0x400000, 1024, 512, 1, 32, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21120c00: _family = FAMILY_SAMS70; flashPtr = new EefcFlash(_samba, "ATSAMS70x20", 0x400000, 2048, 512, 1, 64, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21120e00: _family = FAMILY_SAMS70; flashPtr = new EefcFlash(_samba, "ATSAMS70x21", 0x400000, 4096, 512, 1, 128, 0x20401000, 0x20404000, 0x400e0c00, false); break; // // SAMV70 // case 0x213d0a00: _family = FAMILY_SAMV70; flashPtr = new EefcFlash(_samba, "ATSAMV70x19", 0x400000, 1024, 512, 1, 32, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21320c00: _family = FAMILY_SAMV70; flashPtr = new EefcFlash(_samba, "ATSAMV70x20", 0x400000, 2048, 512, 1, 64, 0x20401000, 0x20404000, 0x400e0c00, false); break; // // SAMV71 // case 0x212d0a00: _family = FAMILY_SAMV71; flashPtr = new EefcFlash(_samba, "ATSAMV71x19", 0x400000, 1024, 512, 1, 32, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21220c00: _family = FAMILY_SAMV71; flashPtr = new EefcFlash(_samba, "ATSAMV71x20", 0x400000, 2048, 512, 1, 64, 0x20401000, 0x20404000, 0x400e0c00, false); break; case 0x21220e00: _family = FAMILY_SAMV71; flashPtr = new EefcFlash(_samba, "ATSAMV71x21", 0x400000, 4096, 512, 1, 128, 0x20401000, 0x20404000, 0x400e0c00, false); break; // // No CHIPID devices // case 0: switch (deviceId & 0xffff00ff) { // // SAMD21 // case 0x10010003: // J15A case 0x10010008: // G15A case 0x1001000d: // E15A case 0x10010021: // J15B case 0x10010024: // G15B case 0x10010027: // E15B case 0x10010056: // E15B WLCSP case 0x10010063: // E15C WLCSP _family = FAMILY_SAMD21; flashPtr = new D2xNvmFlash(_samba, "ATSAMD21x15", 512, 64, 0x20000800, 0x20001000) ; break; case 0x10010002: // J16A case 0x10010007: // G16A case 0x1001000c: // E16A case 0x10010020: // J16B case 0x10010023: // G16B case 0x10010026: // E16B case 0x10010055: // E16B WLCSP case 0x10010062: // E16C WLCSP _family = FAMILY_SAMD21; flashPtr = new D2xNvmFlash(_samba, "ATSAMD21x16", 1024, 64, 0x20001000, 0x20002000) ; break; case 0x10010001: // J17A case 0x10010006: // G17A case 0x1001000b: // E17A case 0x10010010: // G17A WLCSP _family = FAMILY_SAMD21; flashPtr = new D2xNvmFlash(_samba, "ATSAMD21x17", 2048, 64, 0x20002000, 0x20004000) ; break; case 0x10010000: // J18A case 0x10010005: // G18A case 0x1001000a: // E18A case 0x1001000f: // G18A WLCSP _family = FAMILY_SAMD21; flashPtr = new D2xNvmFlash(_samba, "ATSAMD21x18", 4096, 64, 0x20004000, 0x20008000) ; break; // // SAMR21 // case 0x1001001e: // E16A case 0x1001001b: // G16A _family = FAMILY_SAMR21; flashPtr = new D2xNvmFlash(_samba, "ATSAMR21x16", 1024, 64, 0x20001000, 0x20002000) ; break; case 0x1001001d: // E17A case 0x1001001a: // G17A _family = FAMILY_SAMR21; flashPtr = new D2xNvmFlash(_samba, "ATSAMR21x17", 2048, 64, 0x20002000, 0x20004000) ; break; case 0x1001001c: // E18A case 0x10010019: // G18A _family = FAMILY_SAMR21; flashPtr = new D2xNvmFlash(_samba, "ATSAMR21x18", 4096, 64, 0x20004000, 0x20008000) ; break; case 0x10010018: // E19A _family = FAMILY_SAMR21; flashPtr = new D2xNvmFlash(_samba, "ATSAMR21x19", 4096, 64, 0x20004000, 0x20008000) ; break; // // SAML21 // case 0x1081000d: // E15A case 0x1081001c: // E15B _family = FAMILY_SAMD21; flashPtr = new D2xNvmFlash(_samba, "ATSAML21x15", 512, 64, 0x20000800, 0x20001000) ; break; case 0x10810002: // J16A case 0x10810007: // G16A case 0x1081000c: // E16A case 0x10810011: // J16B case 0x10810016: // G16B case 0x1081001b: // E16B _family = FAMILY_SAML21; flashPtr = new D2xNvmFlash(_samba, "ATSAML21x16", 1024, 64, 0x20001000, 0x20002000) ; break; case 0x10810001: // J17A case 0x10810006: // G17A case 0x1081000b: // E17A case 0x10810010: // J17B case 0x10810015: // G17B case 0x1081001a: // E17B _family = FAMILY_SAML21; flashPtr = new D2xNvmFlash(_samba, "ATSAML21x17", 2048, 64, 0x20002000, 0x20004000) ; break; case 0x10810000: // J18A case 0x10810005: // G18A case 0x1081000a: // E18A case 0x1081000f: // J18B case 0x10810014: // G18B case 0x10810019: // E18B _family = FAMILY_SAML21; flashPtr = new D2xNvmFlash(_samba, "ATSAML21x18", 4096, 64, 0x20004000, 0x20008000) ; break; // // SAMD51 // case 0x60060006: // J18A case 0x60060008: // G18A _family = FAMILY_SAMD51; flashPtr = new D5xNvmFlash(_samba, "ATSAMD51x18", 512, 512, 0x20004000, 0x20008000) ; break; case 0x60060001: // P19A case 0x60060003: // N19A case 0x60060005: // J19A case 0x60060007: // G19A _family = FAMILY_SAMD51; flashPtr = new D5xNvmFlash(_samba, "ATSAMD51x19", 1024, 512, 0x20004000, 0x20008000) ; break; case 0x60060000: // P20A case 0x60060002: // N20A case 0x60060004: // J20A _family = FAMILY_SAMD51; flashPtr = new D5xNvmFlash(_samba, "ATSAMD51x20", 2048, 512, 0x20004000, 0x20008000) ; break; // // SAME51 // case 0x61810003: // J18A _family = FAMILY_SAME51; flashPtr = new D5xNvmFlash(_samba, "ATSAME51x18", 512, 512, 0x20004000, 0x20008000) ; break; case 0x61810002: // J19A case 0x61810001: // N19A _family = FAMILY_SAME51; flashPtr = new D5xNvmFlash(_samba, "ATSAME51x19", 1024, 512, 0x20004000, 0x20008000) ; break; case 0x61810004: // J20A case 0x61810000: // N20A _family = FAMILY_SAME51; flashPtr = new D5xNvmFlash(_samba, "ATSAME51x20", 2048, 512, 0x20004000, 0x20008000) ; break; // // SAME53 // case 0x61830006: // J18A _family = FAMILY_SAME53; flashPtr = new D5xNvmFlash(_samba, "ATSAME53x18", 512, 512, 0x20004000, 0x20008000) ; break; case 0x61830005: // J19A case 0x61830003: // N19A _family = FAMILY_SAME53; flashPtr = new D5xNvmFlash(_samba, "ATSAME53x19", 1024, 512, 0x20004000, 0x20008000) ; break; case 0x61830004: // J20A case 0x61830002: // N20A _family = FAMILY_SAME53; flashPtr = new D5xNvmFlash(_samba, "ATSAME53x20", 2048, 512, 0x20004000, 0x20008000) ; break; // // SAME54 // case 0x61840001: // P19A case 0x61840003: // N19A _family = FAMILY_SAME54; flashPtr = new D5xNvmFlash(_samba, "ATSAME54x19", 1024, 512, 0x20004000, 0x20008000) ; break; case 0x61840000: // P20A case 0x61840002: // N20A _family = FAMILY_SAME54; flashPtr = new D5xNvmFlash(_samba, "ATSAME54x20", 2048, 512, 0x20004000, 0x20008000) ; break; // // Unknown // default: throw DeviceUnsupportedError(); break; } break; // // Unsupported device // default: throw DeviceUnsupportedError(); break; } _flash = std::unique_ptr(flashPtr); } void Device::reset() { try { switch (_family) { case FAMILY_SAMD21: case FAMILY_SAMR21: case FAMILY_SAML21: case FAMILY_SAMD51: case FAMILY_SAME51: case FAMILY_SAME53: case FAMILY_SAME54: case FAMILY_SAME70: case FAMILY_SAMS70: case FAMILY_SAMV70: case FAMILY_SAMV71: _samba.writeWord(0xE000ED0C, 0x05FA0004); break; case FAMILY_SAM3X: case FAMILY_SAM3S: case FAMILY_SAM3A: _samba.writeWord(0x400E1A00, 0xA500000D); break; case FAMILY_SAM3U: _samba.writeWord(0x400E1200, 0xA500000D); break; case FAMILY_SAM3N: case FAMILY_SAM4S: _samba.writeWord(0x400E1400, 0xA500000D); break; case FAMILY_SAM4E: _samba.writeWord(0x400E1800, 0xA500000D); break; case FAMILY_SAM7S: case FAMILY_SAM7SE: case FAMILY_SAM7X: case FAMILY_SAM7XC: case FAMILY_SAM7L: case FAMILY_SAM9XE: _samba.writeWord(0xFFFFFD00, 0xA500000D); break; default: break; } } catch (std::exception& expected) { // writeWord will most likely throw an exception when the CPU is reset } } BOSSA-1.9.1/src/Device.h000066400000000000000000000060361333742133700145430ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _DEVICE_H #define _DEVICE_H #include #include "Samba.h" #include "Flash.h" class DeviceUnsupportedError : public std::exception { public: DeviceUnsupportedError() : exception() {}; const char* what() const throw() { return "Device unsupported"; } }; class Device { public: enum Family { FAMILY_NONE, FAMILY_SAM7S, FAMILY_SAM7SE, FAMILY_SAM7X, FAMILY_SAM7XC, FAMILY_SAM7L, FAMILY_SAM3N, FAMILY_SAM3S, FAMILY_SAM3U, FAMILY_SAM3X, FAMILY_SAM3A, FAMILY_SAM4S, FAMILY_SAM4E, FAMILY_SAM9XE, FAMILY_SAMD21, FAMILY_SAMR21, FAMILY_SAML21, FAMILY_SAMD51, FAMILY_SAME51, FAMILY_SAME53, FAMILY_SAME54, FAMILY_SAME70, FAMILY_SAMS70, FAMILY_SAMV70, FAMILY_SAMV71, }; Device(Samba& samba) : _samba(samba), _flash(nullptr), _family(FAMILY_NONE) {} virtual ~Device() {} void create(); Family getFamily() { return _family; } typedef std::unique_ptr const FlashPtr; FlashPtr& getFlash() { return _flash; } void reset(); private: Samba& _samba; std::unique_ptr _flash; Family _family; void readChipId(uint32_t& chipId, uint32_t& extChipId); }; #endif // _DEVICE_H BOSSA-1.9.1/src/Driver.h000066400000000000000000000041241333742133700145730ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _DRIVER_H #define _DRIVER_H class DriverBase { public: DriverBase() {} virtual ~DriverBase() {} virtual bool isInstalled() = 0; virtual bool install() = 0; virtual bool isUpdated() = 0; virtual bool update() = 0; }; #ifdef __WIN32__ #include "WinDriver.h" typedef WinDriver Driver; #else #error "Platform is not supported" #endif #endif // _DRIVER_H BOSSA-1.9.1/src/EefcFlash.cpp000066400000000000000000000233431333742133700155170ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "EefcFlash.h" #include #include #include #define EEFC_KEY 0x5a #define EEFC0_FMR (_regs + 0x00) #define EEFC0_FCR (_regs + 0x04) #define EEFC0_FSR (_regs + 0x08) #define EEFC0_FRR (_regs + 0x0C) #define EEFC1_FMR (_regs + 0x200) #define EEFC1_FCR (_regs + 0x204) #define EEFC1_FSR (_regs + 0x208) #define EEFC1_FRR (_regs + 0x20C) #define EEFC_FCMD_GETD 0x0 #define EEFC_FCMD_WP 0x1 #define EEFC_FCMD_WPL 0x2 #define EEFC_FCMD_EWP 0x3 #define EEFC_FCMD_EWPL 0x4 #define EEFC_FCMD_EA 0x5 #define EEFC_FCMD_EPA 0x7 #define EEFC_FCMD_SLB 0x8 #define EEFC_FCMD_CLB 0x9 #define EEFC_FCMD_GLB 0xa #define EEFC_FCMD_SGPB 0xb #define EEFC_FCMD_CGPB 0xc #define EEFC_FCMD_GGPB 0xd const uint32_t EefcFlash::PagesPerErase = 8; EefcFlash::EefcFlash(Samba& samba, const std::string& name, uint32_t addr, uint32_t pages, uint32_t size, uint32_t planes, uint32_t lockRegions, uint32_t user, uint32_t stack, uint32_t regs, bool canBrownout) : Flash(samba, name, addr, pages, size, planes, lockRegions, user, stack), _regs(regs), _canBrownout(canBrownout), _eraseAuto(true) { assert(planes == 1 || planes == 2); assert(pages <= 4096); assert(lockRegions <= 256); // SAM3 Errata (FWS must be 6) _samba.writeWord(EEFC0_FMR, 0x6 << 8); if (planes == 2) _samba.writeWord(EEFC1_FMR, 0x6 << 8); } EefcFlash::~EefcFlash() { } void EefcFlash::eraseAll(uint32_t offset) { // Do a full chip erase if the offset is 0 if (offset == 0) { waitFSR(); writeFCR0(EEFC_FCMD_EA, 0); if (_planes == 2) { waitFSR(); writeFCR1(EEFC_FCMD_EA, 0); } // Erase all can take an exceptionally long time on some devices // so wait on FSR for up to 30 seconds waitFSR(30); } // Else we must do it by pages else { // Offset must be on an erase page boundary if (offset % (_size * PagesPerErase)) throw FlashEraseError(); // Erase each PagesPerErase set of pages for (uint32_t pageNum = offset / _size; pageNum < _pages; pageNum += PagesPerErase) { if (_planes == 1 || pageNum < _pages / 2) { waitFSR(); writeFCR0(EEFC_FCMD_EPA, pageNum | 0x1); } else { waitFSR(); writeFCR1(EEFC_FCMD_EPA, (pageNum % (_pages / 2)) | 0x1); } } } } void EefcFlash::eraseAuto(bool enable) { _eraseAuto = enable; } std::vector EefcFlash::getLockRegions() { std::vector regions(_lockRegions); uint32_t frr; uint32_t bit; waitFSR(); for (uint32_t region = 0; region < _lockRegions; region++) { if (_planes == 2 && region >= _lockRegions / 2) { bit = region - _lockRegions / 2; writeFCR1(EEFC_FCMD_GLB, 0); waitFSR(); frr = readFRR1(); while (bit >= 32) { frr = readFRR1(); bit -= 32; } regions[region] = (frr & (1 << bit)) != 0; } else { bit = region; writeFCR0(EEFC_FCMD_GLB, 0); waitFSR(); frr = readFRR0(); while (bit >= 32) { frr = readFRR0(); bit -= 32; } regions[region] = (frr & (1 << bit)) != 0; } } return regions; } bool EefcFlash::getSecurity() { waitFSR(); writeFCR0(EEFC_FCMD_GGPB, 0); waitFSR(); return (readFRR0() & (1 << 0)); } bool EefcFlash::getBod() { if (!_canBrownout) return false; waitFSR(); writeFCR0(EEFC_FCMD_GGPB, 0); waitFSR(); return (readFRR0() & (1 << 1)); } bool EefcFlash::getBor() { if (!_canBrownout) return false; waitFSR(); writeFCR0(EEFC_FCMD_GGPB, 0); waitFSR(); return (readFRR0() & (1 << 2)); } bool EefcFlash::getBootFlash() { waitFSR(); writeFCR0(EEFC_FCMD_GGPB, 0); waitFSR(); return (readFRR0() & (1 << (_canBrownout ? 3 : 1))); } void EefcFlash::writeOptions() { if (canBootFlash() && _bootFlash.isDirty() && _bootFlash.get() != getBootFlash()) { waitFSR(); writeFCR0(_bootFlash.get() ? EEFC_FCMD_SGPB : EEFC_FCMD_CGPB, (canBod() ? 3 : 1)); } if (canBor() && _bor.isDirty() && _bor.get() != getBor()) { waitFSR(); writeFCR0(_bor.get() ? EEFC_FCMD_SGPB : EEFC_FCMD_CGPB, 2); } if (canBod() && _bod.isDirty() && _bod.get() != getBod()) { waitFSR(); writeFCR0(_bod.get() ? EEFC_FCMD_SGPB : EEFC_FCMD_CGPB, 1); } if (_regions.isDirty()) { uint32_t page; std::vector current; if (_regions.get().size() > _lockRegions) throw FlashRegionError(); current = getLockRegions(); for (uint32_t region = 0; region < _lockRegions; region++) { if (_regions.get()[region] != current[region]) { if (_planes == 2 && region >= _lockRegions / 2) { page = (region - _lockRegions / 2) * _pages / _lockRegions; waitFSR(); writeFCR1(_regions.get()[region] ? EEFC_FCMD_SLB : EEFC_FCMD_CLB, page); } else { page = region * _pages / _lockRegions; waitFSR(); writeFCR0(_regions.get()[region] ? EEFC_FCMD_SLB : EEFC_FCMD_CLB, page); } } } } if (_security.isDirty() && _security.get() == true && _security.get() != getSecurity()) { waitFSR(); writeFCR0(EEFC_FCMD_SGPB, 0); } } void EefcFlash::writePage(uint32_t page) { if (page >= _pages) throw FlashPageError(); _wordCopy.setDstAddr(_addr + page * _size); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _onBufferA = !_onBufferA; waitFSR(); _wordCopy.runv(); if (_planes == 2 && page >= _pages / 2) writeFCR1(_eraseAuto ? EEFC_FCMD_EWP : EEFC_FCMD_WP, page - _pages / 2); else writeFCR0(_eraseAuto ? EEFC_FCMD_EWP : EEFC_FCMD_WP, page); } void EefcFlash::readPage(uint32_t page, uint8_t* data) { if (page >= _pages) throw FlashPageError(); // The SAM3 firmware has a bug where it returns all zeros for reads // directly from the flash so instead, we copy the flash page to // SRAM and read it from there. _wordCopy.setDstAddr(_onBufferA ? _pageBufferA : _pageBufferB); _wordCopy.setSrcAddr(_addr + page * _size); waitFSR(); _wordCopy.runv(); _samba.read(_onBufferA ? _pageBufferA : _pageBufferB, data, _size); } void EefcFlash::waitFSR(int seconds) { int tries = seconds * 1000; uint32_t fsr0; uint32_t fsr1 = 0x1; while (tries-- > 0) { fsr0 = _samba.readWord(EEFC0_FSR); if (fsr0 & 0x2) throw FlashCmdError(); if (fsr0 & 0x4) throw FlashLockError(); if (_planes == 2) { fsr1 = _samba.readWord(EEFC1_FSR); if (fsr1 & 0x2) throw FlashCmdError(); if (fsr1 & 0x4) throw FlashLockError(); } if (fsr0 & fsr1 & 0x1) break; usleep(1000); } if (tries == 0) throw FlashTimeoutError(); } void EefcFlash::writeFCR0(uint8_t cmd, uint32_t arg) { _samba.writeWord(EEFC0_FCR, (EEFC_KEY << 24) | (arg << 8) | cmd); } void EefcFlash::writeFCR1(uint8_t cmd, uint32_t arg) { _samba.writeWord(EEFC1_FCR, (EEFC_KEY << 24) | (arg << 8) | cmd); } uint32_t EefcFlash::readFRR0() { return _samba.readWord(EEFC0_FRR); } uint32_t EefcFlash::readFRR1() { return _samba.readWord(EEFC1_FRR); } BOSSA-1.9.1/src/EefcFlash.h000066400000000000000000000057171333742133700151710ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _EEFCFLASH_H #define _EEFCFLASH_H #include #include #include "Flash.h" class EefcFlash : public Flash { public: EefcFlash(Samba& samba, const std::string& name, uint32_t addr, uint32_t pages, uint32_t size, uint32_t planes, uint32_t lockRegions, uint32_t user, uint32_t stack, uint32_t regs, bool canBrownout); virtual ~EefcFlash(); void eraseAll(uint32_t offset); void eraseAuto(bool enable); std::vector getLockRegions(); bool getSecurity(); bool getBod(); bool canBod() { return _canBrownout; } bool getBor(); bool canBor() { return _canBrownout; } bool getBootFlash(); bool canBootFlash() { return true; } void writeOptions(); void writePage(uint32_t page); void readPage(uint32_t page, uint8_t* data); static const uint32_t PagesPerErase; private: uint32_t _regs; bool _canBrownout; bool _eraseAuto; void waitFSR(int seconds = 1); void writeFCR0(uint8_t cmd, uint32_t arg); void writeFCR1(uint8_t cmd, uint32_t arg); uint32_t readFRR0(); uint32_t readFRR1(); }; #endif // _EEFCFLASH_H BOSSA-1.9.1/src/EfcFlash.cpp000066400000000000000000000166241333742133700153560ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "EfcFlash.h" #include #include #include #define EFC_KEY 0x5a #define EFC0_FMR 0xffffff60 #define EFC0_FCR 0xffffff64 #define EFC0_FSR 0xffffff68 #define EFC1_FMR 0xffffff70 #define EFC1_FCR 0xffffff74 #define EFC1_FSR 0xffffff78 #define EFC_FCMD_WP 0x1 #define EFC_FCMD_SLB 0x2 #define EFC_FCMD_WPL 0x3 #define EFC_FCMD_CLB 0x4 #define EFC_FCMD_EA 0x8 #define EFC_FCMD_SGPB 0xb #define EFC_FCMD_CGPB 0xd #define EFC_FCMD_SSB 0xf EfcFlash::EfcFlash(Samba& samba, const std::string& name, uint32_t addr, uint32_t pages, uint32_t size, uint32_t planes, uint32_t lockRegions, uint32_t user, uint32_t stack, bool canBootFlash) : Flash(samba, name, addr, pages, size, planes, lockRegions, user, stack), _canBootFlash(canBootFlash) { assert(planes == 1 || planes == 2); assert(pages <= planes * 1024); assert(lockRegions <= 32); eraseAuto(true); } EfcFlash::~EfcFlash() { } void EfcFlash::eraseAll(uint32_t offset) { if (offset != 0) throw FlashEraseError(); waitFSR(); writeFCR0(EFC_FCMD_EA, 0); if (_planes == 2) { waitFSR(); writeFCR0(EFC_FCMD_EA, _pages / 2); } } void EfcFlash::eraseAuto(bool enable) { uint32_t fmr; waitFSR(); fmr = _samba.readWord(EFC0_FMR); if (enable) fmr &= ~(1 << 7); else fmr |= (1 << 7); _samba.writeWord(EFC0_FMR, fmr); if (_planes == 2) { waitFSR(); _samba.writeWord(EFC1_FMR, fmr); } } std::vector EfcFlash::getLockRegions() { std::vector regions(_lockRegions); uint32_t fsr0; uint32_t fsr1; fsr0 = readFSR0(); if (_planes == 2) fsr1 = readFSR1(); else fsr1 = 0; for (uint32_t region = 0; region < _lockRegions; region++) { if (_planes == 2 && region >= _lockRegions / 2) regions[region] = (fsr1 & (1 << (16 + region - _lockRegions / 2))) != 0; else regions[region] = (fsr0 & (1 << (16 + region))) != 0; } return regions; } bool EfcFlash::getSecurity() { return (readFSR0() & (1 << 4)); } bool EfcFlash::getBod() { return (readFSR0() & (1 << 8)); } bool EfcFlash::getBor() { return (readFSR0() & (2 << 8)); } bool EfcFlash::getBootFlash() { if (!_canBootFlash) return false; return (readFSR0() & (1 << 10)); } void EfcFlash::writeOptions() { if (canBootFlash() && _bootFlash.isDirty() && _bootFlash.get() != getBootFlash()) { waitFSR(); writeFCR0(_bootFlash.get() ? EFC_FCMD_SGPB : EFC_FCMD_CGPB, 2); } if (canBor() && _bor.isDirty() && _bor.get() != getBor()) { waitFSR(); writeFCR0(_bor.get() ? EFC_FCMD_SGPB : EFC_FCMD_CGPB, 1); } if (canBod() && _bod.isDirty() && _bod.get() != getBod()) { waitFSR(); writeFCR0(_bod.get() ? EFC_FCMD_SGPB : EFC_FCMD_CGPB, 0); } if (_regions.isDirty()) { uint32_t page; std::vector current; current = getLockRegions(); for (uint32_t region = 0; region < _regions.get().size(); region++) { if (_regions.get()[region] != current[region]) { if (_planes == 2 && region >= _lockRegions / 2) { page = (region - _lockRegions / 2) * _pages / _lockRegions; waitFSR(); writeFCR1(_regions.get()[region] ? EFC_FCMD_SLB : EFC_FCMD_CLB, page); } else { page = region * _pages / _lockRegions; waitFSR(); writeFCR0(_regions.get()[region] ? EFC_FCMD_SLB : EFC_FCMD_CLB, page); } } } } if (_security.isDirty() && _security.get() == true && _security.get() != getSecurity()) { waitFSR(); writeFCR0(EFC_FCMD_SSB, 0); } } void EfcFlash::writePage(uint32_t page) { if (page >= _pages) throw FlashPageError(); _wordCopy.setDstAddr(_addr + page * _size); _wordCopy.setSrcAddr(_onBufferA ? _pageBufferA : _pageBufferB); _onBufferA = !_onBufferA; waitFSR(); _wordCopy.run(); if (_planes == 2 && page >= _pages / 2) writeFCR1(EFC_FCMD_WP, page - _pages / 2); else writeFCR0(EFC_FCMD_WP, page); } void EfcFlash::readPage(uint32_t page, uint8_t* data) { if (page >= _pages) throw FlashPageError(); waitFSR(); _samba.read(_addr + page * _size, data, _size); } void EfcFlash::waitFSR(int seconds) { int tries = seconds * 1000; uint32_t fsr0; uint32_t fsr1 = 0x1; while (tries-- > 0) { fsr0 = readFSR0(); if (fsr0 & 0x2) throw FlashCmdError(); if (fsr0 & 0x4) throw FlashLockError(); if (_planes == 2) { fsr1 = readFSR1(); if (fsr1 & 0x2) throw FlashCmdError(); if (fsr1 & 0x4) throw FlashLockError(); } if (fsr0 & fsr1 & 0x1) break; usleep(1000); } if (tries == 0) throw FlashTimeoutError(); } void EfcFlash::writeFCR0(uint8_t cmd, uint32_t arg) { _samba.writeWord(EFC0_FCR, (EFC_KEY << 24) | (arg << 8) | cmd); } void EfcFlash::writeFCR1(uint8_t cmd, uint32_t arg) { _samba.writeWord(EFC1_FCR, (EFC_KEY << 24) | (arg << 8) | cmd); } uint32_t EfcFlash::readFSR0() { return _samba.readWord(EFC0_FSR); } uint32_t EfcFlash::readFSR1() { return _samba.readWord(EFC1_FSR); } BOSSA-1.9.1/src/EfcFlash.h000066400000000000000000000055131333742133700150160ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _EFCFLASH_H #define _EFCFLASH_H #include #include #include "Flash.h" class EfcFlash : public Flash { public: EfcFlash(Samba& samba, const std::string& name, uint32_t addr, uint32_t pages, uint32_t size, uint32_t planes, uint32_t lockRegions, uint32_t user, uint32_t stack, bool canBootFlash); virtual ~EfcFlash(); void eraseAll(uint32_t offset); void eraseAuto(bool enable); std::vector getLockRegions(); bool getSecurity(); bool getBod(); bool canBod() { return true; } bool getBor(); bool canBor() { return true; } bool getBootFlash(); bool canBootFlash() { return _canBootFlash; } void writeOptions(); void writePage(uint32_t page); void readPage(uint32_t page, uint8_t* data); private: bool _canBootFlash; void waitFSR(int seconds = 1); void writeFCR0(uint8_t cmd, uint32_t arg); void writeFCR1(uint8_t cmd, uint32_t arg); uint32_t readFSR0(); uint32_t readFSR1(); }; #endif // _EFCFLASH_H BOSSA-1.9.1/src/FileError.h000066400000000000000000000060141333742133700152310ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _FILEERROR_H #define _FILEERROR_H #include #include #include #include "Flash.h" #include "Samba.h" class FileError : public std::exception { public: FileError() : std::exception() {} }; class FileOpenError : public FileError { public: FileOpenError() : FileError(), _errnum(0) {}; FileOpenError(int errnum) : FileError(), _errnum(errnum) {}; const char* what() const throw() { if (_errnum == 0) return "Unable to open file"; else return strerror(_errnum); } private: int _errnum; }; class FileIoError : public FileError { public: FileIoError() : FileError(), _errnum(0) {}; FileIoError(int errnum) : FileError(), _errnum(errnum) {}; const char* what() const throw() { if (_errnum == 0) return "File I/O operation failed"; else return strerror(_errnum); } private: int _errnum; }; class FileShortError : public FileError { public: FileShortError() : FileError() {}; const char* what() const throw() { return "Operation ended with a short write"; } }; class FileSizeError : public FileError { public: FileSizeError() {}; const char* what() const throw() { return "File operation exceeds flash size"; } }; #endif // _FILEERROR_H BOSSA-1.9.1/src/Flash.cpp000066400000000000000000000066621333742133700147410ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "Flash.h" #include Flash::Flash(Samba& samba, const std::string& name, uint32_t addr, uint32_t pages, uint32_t size, uint32_t planes, uint32_t lockRegions, uint32_t user, uint32_t stack) : _samba(samba), _name(name), _addr(addr), _pages(pages), _size(size), _planes(planes), _lockRegions(lockRegions), _user(user), _wordCopy(samba, user) { assert((size & (size - 1)) == 0); assert((pages & (pages - 1)) == 0); assert((lockRegions & (lockRegions - 1)) == 0); _wordCopy.setWords(size / sizeof(uint32_t)); _wordCopy.setStack(stack); _onBufferA = true; // page buffers will have the size of a physical page and will be situated right after the applet _pageBufferA = ((_user + _wordCopy.size() + 3) / 4) * 4; // we need to avoid non 32bits aligned access on Cortex-M0+ _pageBufferB = _pageBufferA + size; } void Flash::setLockRegions(const std::vector& regions) { if (regions.size() > _lockRegions) throw FlashRegionError(); _regions.set(regions); } void Flash::setSecurity() { _security.set(true); } void Flash::setBor(bool enable) { if (canBor()) _bor.set(enable); } void Flash::setBod(bool enable) { if (canBod()) _bod.set(enable); } void Flash::setBootFlash(bool enable) { if (canBootFlash()) _bootFlash.set(enable); } void Flash::loadBuffer(const uint8_t* data, uint16_t bufferSize) { _samba.write(_onBufferA ? _pageBufferA : _pageBufferB, data, bufferSize); } void Flash::writeBuffer(uint32_t dst_addr, uint32_t size) { _samba.writeBuffer(_onBufferA ? _pageBufferA : _pageBufferB, dst_addr + _addr, size); } BOSSA-1.9.1/src/Flash.h000066400000000000000000000132501333742133700143750ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _FLASH_H #define _FLASH_H #include #include #include #include #include "Samba.h" #include "WordCopyApplet.h" class FlashPageError : public std::exception { public: FlashPageError() : exception() {}; const char* what() const throw() { return "Invalid flash page"; } }; class FlashRegionError : public std::exception { public: FlashRegionError() : exception() {}; const char* what() const throw() { return "Invalid lock region"; } }; class FlashLockError : public std::exception { public: FlashLockError() : exception() {}; const char* what() const throw() { return "Flash page is locked"; } }; class FlashCmdError : public std::exception { public: FlashCmdError() : exception() {}; const char* what() const throw() { return "Flash command failed"; } }; class FlashTimeoutError : public std::exception { public: FlashTimeoutError() : exception() {}; const char* what() const throw() { return "Flash command timeout"; } }; class BootFlashError : public std::exception { public: BootFlashError() : exception() {}; const char* what() const throw() { return "Unable to clear boot flash for this device"; } }; class FlashEraseError : public std::exception { public: FlashEraseError() : exception() {}; const char* what() const throw() { return "Flash erase failed"; } }; template class FlashOption { public: FlashOption() : _dirty(false) {} virtual ~FlashOption() {} void set(const T& value) { _value = value; _dirty = true; } const T& get() { return _value; } bool isDirty() { return _dirty; } private: T _value; bool _dirty; }; class Flash { public: Flash(Samba& samba, const std::string& name, uint32_t addr, // Flash base address uint32_t pages, // Number of pages uint32_t size, // Page size in bytes uint32_t planes, // Number of flash planes uint32_t lockRegions, // Number of flash lock regions uint32_t user, // Address in SRAM where the applet and buffers will be placed uint32_t stack); // Address in SRAM where the applet stack will be placed virtual ~Flash() {} const std::string& name() { return _name; } virtual uint32_t address() { return _addr; } virtual uint32_t pageSize() { return _size; } virtual uint32_t numPages() { return _pages; } virtual uint32_t numPlanes() { return _planes; } virtual uint32_t totalSize() { return _size * _pages; } virtual uint32_t lockRegions() { return _lockRegions; } virtual void eraseAll(uint32_t offset) = 0; virtual void eraseAuto(bool enable) = 0; virtual std::vector getLockRegions() = 0; virtual void setLockRegions(const std::vector& regions); virtual bool getSecurity() = 0; virtual void setSecurity(); virtual bool getBod() = 0; virtual void setBod(bool enable); virtual bool canBod() = 0; virtual bool getBor() = 0; virtual void setBor(bool enable); virtual bool canBor() = 0; virtual bool getBootFlash() = 0; virtual void setBootFlash(bool enable); virtual bool canBootFlash() = 0; virtual void writeOptions() = 0; virtual void writePage(uint32_t page) = 0; virtual void readPage(uint32_t page, uint8_t* data) = 0; virtual void writeBuffer(uint32_t dst_addr, uint32_t size); virtual void loadBuffer(const uint8_t* data, uint16_t size); protected: Samba& _samba; std::string _name; uint32_t _addr; uint32_t _pages; uint32_t _size; uint32_t _planes; uint32_t _lockRegions; uint32_t _user; WordCopyApplet _wordCopy; FlashOption _bootFlash; FlashOption< std::vector > _regions; FlashOption _bod; FlashOption _bor; FlashOption _security; bool _onBufferA; uint32_t _pageBufferA; uint32_t _pageBufferB; }; #endif // _FLASH_H BOSSA-1.9.1/src/Flasher.cpp000066400000000000000000000255321333742133700152650ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include "Flasher.h" using namespace std; void FlasherInfo::print() { bool first; printf("Device : %s\n", name.c_str()); printf("Version : %s\n", version.c_str()); printf("Address : 0x%x\n", address); printf("Pages : %d\n", numPages); printf("Page Size : %d bytes\n", pageSize); printf("Total Size : %dKB\n", totalSize / 1024); printf("Planes : %d\n", numPlanes); printf("Lock Regions : %zd\n", lockRegions.size()); printf("Locked : "); first = true; for (uint32_t region = 0; region < lockRegions.size(); region++) { if (lockRegions[region]) { printf("%s%d", first ? "" : ",", region); first = false; } } printf("%s\n", first ? "none" : ""); printf("Security : %s\n", security ? "true" : "false"); if (canBootFlash) printf("Boot Flash : %s\n", bootFlash ? "true" : "false"); if (canBod) printf("BOD : %s\n", bod ? "true" : "false"); if (canBor) printf("BOR : %s\n", bor ? "true" : "false"); } void Flasher::erase(uint32_t foffset) { _observer.onStatus("Erase flash\n"); _flash->eraseAll(foffset); _flash->eraseAuto(false); } void Flasher::write(const char* filename, uint32_t foffset) { FILE* infile; uint32_t pageSize = _flash->pageSize(); uint32_t pageNum = 0; uint32_t numPages; long fsize; size_t fbytes; if (foffset % pageSize != 0 || foffset >= _flash->totalSize()) throw FlashOffsetError(); infile = fopen(filename, "rb"); if (!infile) throw FileOpenError(errno); try { if (fseek(infile, 0, SEEK_END) != 0 || (fsize = ftell(infile)) < 0) throw FileIoError(errno); rewind(infile); numPages = (fsize + pageSize - 1) / pageSize; if (numPages > _flash->numPages()) throw FileSizeError(); _observer.onStatus("Write %ld bytes to flash (%u pages)\n", fsize, numPages); if (_samba.canWriteBuffer()) { uint32_t offset = 0; uint32_t bufferSize = _samba.writeBufferSize(); uint8_t buffer[bufferSize]; while ((fbytes = fread(buffer, 1, bufferSize, infile)) > 0) { _observer.onProgress(offset / pageSize, numPages); if (fbytes < bufferSize) { memset(buffer + fbytes, 0, bufferSize - fbytes); fbytes = (fbytes + pageSize - 1) / pageSize * pageSize; } _flash->loadBuffer(buffer, fbytes); _flash->writeBuffer(foffset + offset, fbytes); offset += fbytes; } } else { uint8_t buffer[pageSize]; uint32_t pageOffset = foffset / pageSize; while ((fbytes = fread(buffer, 1, pageSize, infile)) > 0) { _observer.onProgress(pageNum, numPages); _flash->loadBuffer(buffer, fbytes); _flash->writePage(pageOffset + pageNum); pageNum++; if (pageNum == numPages || fbytes != pageSize) break; } } } catch(...) { fclose(infile); throw; } fclose(infile); _observer.onProgress(numPages, numPages); } bool Flasher::verify(const char* filename, uint32_t& pageErrors, uint32_t& totalErrors, uint32_t foffset) { FILE* infile; uint32_t pageSize = _flash->pageSize(); uint8_t bufferA[pageSize]; uint8_t bufferB[pageSize]; uint32_t pageNum = 0; uint32_t numPages; uint32_t pageOffset; uint32_t byteErrors = 0; uint16_t calcCrc = 0; uint16_t flashCrc; long fsize; size_t fbytes; pageErrors = 0; totalErrors = 0; if (foffset % pageSize != 0 || foffset >= _flash->totalSize()) throw FlashOffsetError(); pageOffset = foffset / pageSize; infile = fopen(filename, "rb"); if (!infile) throw FileOpenError(errno); try { if (fseek(infile, 0, SEEK_END) != 0 || (fsize = ftell(infile)) < 0) throw FileIoError(errno); rewind(infile); numPages = (fsize + pageSize - 1) / pageSize; if (numPages > _flash->numPages()) throw FileSizeError(); _observer.onStatus("Verify %ld bytes of flash\n", fsize); while ((fbytes = fread(bufferA, 1, pageSize, infile)) > 0) { byteErrors = 0; _observer.onProgress(pageNum, numPages); if (_samba.canChecksumBuffer()) { for (uint32_t i = 0; i < fbytes; i++) calcCrc = _samba.checksumCalc(bufferA[i], calcCrc); flashCrc = _samba.checksumBuffer((pageOffset + pageNum) * pageSize, fbytes); if (flashCrc != calcCrc) { _flash->readPage(pageOffset + pageNum, bufferB); for (uint32_t i = 0; i < fbytes; i++) { if (bufferA[i] != bufferB[i]) byteErrors++; } } } else { _flash->readPage(pageOffset + pageNum, bufferB); for (uint32_t i = 0; i < fbytes; i++) { if (bufferA[i] != bufferB[i]) byteErrors++; } } if (byteErrors != 0) { pageErrors++; totalErrors += byteErrors; } pageNum++; if (pageNum == numPages || fbytes != pageSize) break; } } catch(...) { fclose(infile); throw; } fclose(infile); _observer.onProgress(numPages, numPages); if (pageErrors != 0) return false; return true; } void Flasher::read(const char* filename, uint32_t fsize, uint32_t foffset) { FILE* outfile; uint32_t pageSize = _flash->pageSize(); uint8_t buffer[pageSize]; uint32_t pageNum = 0; uint32_t pageOffset; uint32_t numPages; size_t fbytes; if (foffset % pageSize != 0 || foffset >= _flash->totalSize()) throw FlashOffsetError(); pageOffset = foffset / pageSize; if (fsize == 0) fsize = pageSize * (_flash->numPages() - pageOffset); numPages = (fsize + pageSize - 1) / pageSize; if (pageOffset + numPages > _flash->numPages()) throw FileSizeError(); outfile = fopen(filename, "wb"); if (!outfile) throw FileOpenError(errno); _observer.onStatus("Read %d bytes from flash\n", fsize); try { for (pageNum = 0; pageNum < numPages; pageNum++) { _observer.onProgress(pageNum, numPages); _flash->readPage(pageOffset + pageNum, buffer); if (pageNum == numPages - 1 && fsize % pageSize > 0) pageSize = fsize % pageSize; fbytes = fwrite(buffer, 1, pageSize, outfile); if (fbytes != pageSize) throw FileShortError(); } } catch(...) { fclose(outfile); throw; } _observer.onProgress(numPages, numPages); fclose(outfile); } void Flasher::lock(string& regionArg, bool enable) { if (regionArg.empty()) { _observer.onStatus("%s all regions\n", enable ? "Lock" : "Unlock"); std::vector regions(_flash->lockRegions(), enable); _flash->setLockRegions(regions); } else { size_t pos = 0; size_t delim; uint32_t region; string sub; std::vector regions = _flash->getLockRegions(); do { delim = regionArg.find(',', pos); sub = regionArg.substr(pos, delim - pos); region = strtol(sub.c_str(), NULL, 0); _observer.onStatus("%s region %d\n", enable ? "Lock" : "Unlock", region); regions[region] = enable; pos = delim + 1; } while (delim != string::npos); _flash->setLockRegions(regions); } } void Flasher::info(FlasherInfo& info) { info.name = _flash->name(); info.version = _samba.version(); info.address = _flash->address(); info.numPages = _flash->numPages(); info.pageSize = _flash->pageSize(); info.totalSize = _flash->numPages() * _flash->pageSize(); info.numPlanes = _flash->numPlanes(); info.security = _flash->getSecurity(); info.bootFlash = _flash->getBootFlash(); info.bod = _flash->getBod(); info.bor = _flash->getBor(); info.canBootFlash = _flash->canBootFlash(); info.canBod = _flash->canBod(); info.canBor = _flash->canBor(); info.canChipErase = _samba.canChipErase(); info.canWriteBuffer = _samba.canWriteBuffer(); info.canChecksumBuffer = _samba.canChecksumBuffer(); info.lockRegions = _flash->getLockRegions(); } BOSSA-1.9.1/src/Flasher.h000066400000000000000000000070761333742133700147350ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _FLASHER_H #define _FLASHER_H #include #include #include #include "Device.h" #include "Flash.h" #include "Samba.h" #include "FileError.h" class FlashOffsetError : public std::exception { public: FlashOffsetError() : std::exception() {}; virtual const char* what() const throw() { return "Flash offset is invalid"; } }; class FlasherObserver { public: FlasherObserver() {} virtual ~FlasherObserver() {} virtual void onStatus(const char *message, ...) = 0; virtual void onProgress(int num, int div) = 0; }; class FlasherInfo { public: FlasherInfo() {} virtual ~FlasherInfo() {} void print(); std::string name; uint32_t chipId; uint32_t extChipId; std::string version; uint32_t address; uint32_t numPages; uint32_t pageSize; uint32_t totalSize; uint32_t numPlanes; bool security; bool bootFlash; bool bod; bool bor; bool canBootFlash; bool canBod; bool canBor; bool canChipErase; bool canWriteBuffer; bool canChecksumBuffer; std::vector lockRegions; }; class Flasher { public: Flasher(Samba& samba, Device& device, FlasherObserver& observer) : _samba(samba), _flash(device.getFlash()), _observer(observer) {} virtual ~Flasher() {} void erase(uint32_t foffset); void write(const char* filename, uint32_t foffset = 0); bool verify(const char* filename, uint32_t& pageErrors, uint32_t& totalErrors, uint32_t foffset = 0); void read(const char* filename, uint32_t fsize, uint32_t foffset = 0); void lock(std::string& regionArg, bool enable); void info(FlasherInfo& info); private: Samba& _samba; Device::FlashPtr& _flash; FlasherObserver& _observer; }; #endif // _FLASHER_H BOSSA-1.9.1/src/LinuxPortFactory.cpp000066400000000000000000000062271333742133700171750ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "LinuxPortFactory.h" #include "PosixSerialPort.h" #include #include #include LinuxPortFactory::LinuxPortFactory() { _dir = opendir("/dev"); } LinuxPortFactory::~LinuxPortFactory() { if (_dir) closedir(_dir); } SerialPort::Ptr LinuxPortFactory::create(const std::string& name) { bool isUsb = false; if (name.find("ttyUSB") != std::string::npos || name.find("ttyACM") != std::string::npos) isUsb = true; return create(name, isUsb); } SerialPort::Ptr LinuxPortFactory::create(const std::string& name, bool isUsb) { return SerialPort::Ptr(new PosixSerialPort(name, isUsb)); } std::string LinuxPortFactory::begin() { if (!_dir) return end(); rewinddir(_dir); return next(); } std::string LinuxPortFactory::next() { struct dirent* entry; if (!_dir) return end(); while ((entry = readdir(_dir))) { if (strncmp("ttyUSB", entry->d_name, sizeof("ttyUSB") - 1) == 0) return std::string(entry->d_name); else if (strncmp("ttyACM", entry->d_name, sizeof("ttyACM") - 1) == 0) return std::string(entry->d_name); else if (strncmp("ttyS", entry->d_name, sizeof("ttyS") - 1) == 0) return std::string(entry->d_name); } return end(); } std::string LinuxPortFactory::end() { return std::string(); } std::string LinuxPortFactory::def() { return std::string("/dev/ttyACM0"); } BOSSA-1.9.1/src/LinuxPortFactory.h000066400000000000000000000045111333742133700166340ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _LINUXPORTFACTORY_H #define _LINUXPORTFACTORY_H class LinuxPortFactory; #include "PortFactory.h" #include #include #include class LinuxPortFactory : public PortFactoryBase { public: LinuxPortFactory(); virtual ~LinuxPortFactory(); virtual std::string begin(); virtual std::string end(); virtual std::string next(); virtual std::string def(); virtual SerialPort::Ptr create(const std::string& name); virtual SerialPort::Ptr create(const std::string& name, bool isUsb); private: std::string _empty; DIR* _dir; }; #endif // _LINUXPORTFACTORY_H BOSSA-1.9.1/src/OSXPortFactory.cpp000066400000000000000000000056261333742133700165510ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "OSXPortFactory.h" #include "PosixSerialPort.h" #include #include #include OSXPortFactory::OSXPortFactory() { _dir = opendir("/dev"); } OSXPortFactory::~OSXPortFactory() { if (_dir) closedir(_dir); } SerialPort::Ptr OSXPortFactory::create(const std::string& name) { bool isUsb = false; if (name.find("usb") != std::string::npos) isUsb = true; return create(name, isUsb); } SerialPort::Ptr OSXPortFactory::create(const std::string& name, bool isUsb) { PosixSerialPort *p = new PosixSerialPort(name, isUsb); // Needed to avoid upload errors p->setAutoFlush(true); return SerialPort::Ptr(p); } std::string OSXPortFactory::begin() { if (!_dir) return end(); rewinddir(_dir); return next(); } std::string OSXPortFactory::next() { struct dirent* entry; if (!_dir) return end(); while ((entry = readdir(_dir))) { if (strncmp("cu.", entry->d_name, sizeof("cu.") - 1) == 0) return std::string(entry->d_name); } return end(); } std::string OSXPortFactory::end() { return std::string(); } std::string OSXPortFactory::def() { return begin(); } BOSSA-1.9.1/src/OSXPortFactory.h000066400000000000000000000044731333742133700162150ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _OSXPORTFACTORY_H #define _OSXPORTFACTORY_H class OSXPortFactory; #include "PortFactory.h" #include #include #include class OSXPortFactory : public PortFactoryBase { public: OSXPortFactory(); virtual ~OSXPortFactory(); virtual std::string begin(); virtual std::string end(); virtual std::string next(); virtual std::string def(); virtual SerialPort::Ptr create(const std::string& name); virtual SerialPort::Ptr create(const std::string& name, bool isUsb); private: std::string _empty; DIR* _dir; }; #endif // _OSXPORTFACTORY_H BOSSA-1.9.1/src/PortFactory.h000066400000000000000000000052721333742133700156210ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _PORTFACTORY_H #define _PORTFACTORY_H #include #include "SerialPort.h" class PortFactoryBase { public: PortFactoryBase() {} virtual ~PortFactoryBase() {} virtual std::string begin() = 0; virtual std::string end() = 0; virtual std::string next() = 0; virtual std::string def() = 0; virtual SerialPort::Ptr create(const std::string& name) = 0; virtual SerialPort::Ptr create(const std::string& name, bool isUsb) = 0; }; #if defined(__WIN32__) #include "WinPortFactory.h" typedef WinPortFactory PortFactory; #elif defined(__linux__) #include "LinuxPortFactory.h" typedef LinuxPortFactory PortFactory; #elif defined(__APPLE__) #include "OSXPortFactory.h" typedef OSXPortFactory PortFactory; #elif defined(__OpenBSD__) || defined(__FreeBSD__) // This is likely to work (but not tested) for the other BSDs as well #include "BSDPortFactory.h" typedef BSDPortFactory PortFactory; #else #error "Platform is not supported" #endif #endif // _PORTFACTORY_H BOSSA-1.9.1/src/PosixSerialPort.cpp000066400000000000000000000166311333742133700170100ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "PosixSerialPort.h" #include #include #include #include #include #include #include #include #include #ifndef B460800 #define B460800 460800 #endif #ifndef B921600 #define B921600 921600 #endif PosixSerialPort::PosixSerialPort(const std::string& name, bool isUsb) : SerialPort(name), _devfd(-1), _isUsb(isUsb), _timeout(0), _autoFlush(false) { } PosixSerialPort::~PosixSerialPort() { if (_devfd >= 0) ::close(_devfd); } bool PosixSerialPort::open(int baud, int data, SerialPort::Parity parity, SerialPort::StopBit stop) { struct termios options; speed_t speed; // Try opening port assuming _name is full path. If it fails // try "/dev/" + _name _devfd = ::open(_name.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (_devfd == -1) { std::string dev("/dev/"); dev += _name; _devfd = ::open(dev.c_str(), O_RDWR | O_NOCTTY | O_NDELAY); if (_devfd == -1) return false; } if (tcgetattr(_devfd, &options) == -1) { close(); return false; } switch (baud) { case 1200: speed = B1200; break; case 9600: speed = B9600; break; case 19200: speed = B19200; break; case 38400: speed = B38400; break; case 57600: speed = B57600; break; case 115200: speed = B115200; break; case 230400: speed = B230400; break; case 460800: speed = B460800; break; case 921600: speed = B921600; break; default: close(); return false; } if (cfsetispeed(&options, speed) || cfsetospeed(&options, speed)) { close(); return false; } options.c_cflag |= (CLOCAL | CREAD); switch (data) { case 8: options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; break; case 7: options.c_cflag &= ~CSIZE; options.c_cflag |= CS7; break; default: close(); return false; } switch (parity) { case SerialPort::ParityNone: options.c_cflag &= ~PARENB; options.c_cflag &= ~PARODD; options.c_iflag &= ~(INPCK | ISTRIP); break; case SerialPort::ParityOdd: options.c_cflag |= PARENB; options.c_cflag |= PARODD; options.c_iflag |= (INPCK | ISTRIP); break; case SerialPort::ParityEven: options.c_cflag |= PARENB; options.c_cflag &= ~PARODD; options.c_iflag |= (INPCK | ISTRIP); break; default: close(); return false; } switch (stop) { case StopBitOne: options.c_cflag &= ~CSTOPB; break; case StopBitTwo: options.c_cflag |= CSTOPB; break; default: close(); return false; } // No hardware flow control options.c_cflag &= ~CRTSCTS; // No software flow control options.c_iflag &= ~(IXON | IXOFF | IXANY); // Raw input options.c_iflag &= ~(BRKINT | ICRNL); options.c_lflag &= ~(ICANON | IEXTEN | ECHO | ECHOE | ISIG); // Raw output options.c_oflag &= ~OPOST; // No wait time options.c_cc[VMIN] = 0; options.c_cc[VTIME] = 0; if (tcsetattr(_devfd, TCSANOW, &options)) { close(); return false; } return true; } void PosixSerialPort::close() { if (_devfd >= 0) ::close(_devfd); _devfd = -1; } int PosixSerialPort::read(uint8_t* buffer, int len) { fd_set fds; struct timeval tv; int numread = 0; int retval; if (_devfd == -1) return -1; while (numread < len) { FD_ZERO(&fds); FD_SET(_devfd, &fds); tv.tv_sec = _timeout / 1000; tv.tv_usec = (_timeout % 1000) * 1000; retval = select(_devfd + 1, &fds, NULL, NULL, &tv); if (retval < 0) { return -1; } else if (retval == 0) { return numread; } else if (FD_ISSET(_devfd, &fds)) { retval = ::read(_devfd, (uint8_t*) buffer + numread, len - numread); if (retval < 0) return -1; numread += retval; } } return numread; } int PosixSerialPort::write(const uint8_t* buffer, int len) { if (_devfd == -1) return -1; int res = ::write(_devfd, buffer, len); // Used on macos to avoid upload errors if (_autoFlush) flush(); return res; } int PosixSerialPort::get() { uint8_t byte; if (_devfd == -1) return -1; if (read(&byte, 1) != 1) return -1; return byte; } int PosixSerialPort::put(int c) { uint8_t byte; byte = c; return write(&byte, 1); } void PosixSerialPort::flush() { // There isn't a reliable way to flush on a file descriptor // so we just wait it out. One millisecond is the USB poll // interval so that should cover it. usleep(1000); } bool PosixSerialPort::timeout(int millisecs) { _timeout = millisecs; return true; } void PosixSerialPort::setDTR(bool dtr) { if (_devfd == -1) return; int iFlags = TIOCM_DTR; ioctl(_devfd, (dtr ? TIOCMBIS : TIOCMBIC), &iFlags); } void PosixSerialPort::setRTS(bool rts) { if (_devfd == -1) return; int iFlags = TIOCM_RTS; ioctl(_devfd, (rts ? TIOCMBIS : TIOCMBIC), &iFlags); } void PosixSerialPort::setAutoFlush(bool autoflush) { _autoFlush = autoflush; } BOSSA-1.9.1/src/PosixSerialPort.h000066400000000000000000000050461333742133700164530ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _POSIXSERIALPORT_H #define _POSIXSERIALPORT_H #include "SerialPort.h" class PosixSerialPort : public SerialPort { public: PosixSerialPort(const std::string& name, bool isUsb); virtual ~PosixSerialPort(); bool open(int baud = 115200, int data = 8, SerialPort::Parity parity = SerialPort::ParityNone, SerialPort::StopBit stop = SerialPort::StopBitOne); void close(); bool isUsb() { return _isUsb; }; int read(uint8_t* data, int size); int write(const uint8_t* data, int size); int get(); int put(int c); bool timeout(int millisecs); void flush(); void setDTR(bool dtr); void setRTS(bool rts); void setAutoFlush(bool autoflush); private: int _devfd; bool _isUsb; int _timeout; bool _autoFlush; }; #endif // _POSIXSERIALPORT_H BOSSA-1.9.1/src/Samba.cpp000066400000000000000000000432311333742133700147200ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "Samba.h" #include #include #include #include #include #include #include using namespace std; // XMODEM definitions #define BLK_SIZE 128 #define MAX_RETRIES 5 #define SOH 0x01 #define EOT 0x04 #define ACK 0x06 #define NAK 0x15 #define CAN 0x18 #define START 'C' #define TIMEOUT_QUICK 100 #define TIMEOUT_NORMAL 1000 #define TIMEOUT_LONG 5000 #define min(a, b) ((a) < (b) ? (a) : (b)) Samba::Samba() : _canChipErase(false), _canWriteBuffer(false), _canChecksumBuffer(false), _readBufferSize(0), _debug(false), _isUsb(false) { } Samba::~Samba() { } bool Samba::init() { uint8_t cmd[3]; _port->timeout(TIMEOUT_QUICK); // Flush garbage uint8_t dummy[1024]; _port->read(dummy, sizeof(dummy)); if (!_isUsb) { if (_debug) printf("Send auto-baud\n"); // RS-232 auto-baud sequence _port->put(0x80); _port->get(); _port->put(0x80); _port->get(); _port->put('#'); _port->read(cmd, 3); } // Set binary mode if (_debug) printf("Set binary mode\n"); cmd[0] = 'N'; cmd[1] = '#'; _port->write(cmd, 2); _port->read(cmd, 2); std::string ver; try { ver = version(); } catch(SambaError& err) { return false; } std::size_t extIndex = ver.find("[Arduino:"); if (extIndex != string::npos) { extIndex += 9; while (ver[extIndex] != ']') { switch (ver[extIndex]) { case 'X': _canChipErase = true; break; case 'Y': _canWriteBuffer = true; break; case 'Z': _canChecksumBuffer = true; break; } extIndex++; } // All SAMD-based Arduino/AdaFruit boards have a bug in their bootloader // that trying to read 64 bytes or more over USB corrupts the data. // We must limit these boards to read chunks of 63 bytes. if (_isUsb) _readBufferSize = 63; } _port->timeout(TIMEOUT_NORMAL); return true; } bool Samba::connect(SerialPort::Ptr port, int bps) { _port = move(port); // Try to connect at a high speed if USB _isUsb = _port->isUsb(); if (_isUsb) { if (_port->open(921600) && init()) { if (_debug) printf("Connected at 921600 baud\n"); return true; } else { _port->close(); } } _isUsb = false; // Try the serial port at slower speed if (_port->open(bps) && init()) { if (_debug) printf("Connected at %d baud\n", bps); return true; } disconnect(); return false; } void Samba::disconnect() { _port->close(); _port.release(); } void Samba::writeByte(uint32_t addr, uint8_t value) { uint8_t cmd[14]; if (_debug) printf("%s(addr=%#x,value=%#x)\n", __FUNCTION__, addr, value); snprintf((char*) cmd, sizeof(cmd), "O%08X,%02X#", addr, value); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); // The SAM firmware has a bug that if the command and binary data // are received in the same USB data packet, then the firmware // gets confused. Even though the writes are separated in the code, // USB drivers often do write combining which can put them together // in the same USB data packet. To avoid this, we call the serial // port object's flush method before writing the data. if (_isUsb) _port->flush(); } uint8_t Samba::readByte(uint32_t addr) { uint8_t cmd[13]; uint8_t value; snprintf((char*) cmd, sizeof(cmd), "o%08X,4#", addr); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); if (_port->read(cmd, sizeof(uint8_t)) != sizeof(uint8_t)) throw SambaError(); value = cmd[0]; if (_debug) printf("%s(addr=%#x)=%#x\n", __FUNCTION__, addr, value); return value; } void Samba::writeWord(uint32_t addr, uint32_t value) { uint8_t cmd[20]; if (_debug) printf("%s(addr=%#x,value=%#x)\n", __FUNCTION__, addr, value); snprintf((char*) cmd, sizeof(cmd), "W%08X,%08X#", addr, value); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); // The SAM firmware has a bug that if the command and binary data // are received in the same USB data packet, then the firmware // gets confused. Even though the writes are sperated in the code, // USB drivers often do write combining which can put them together // in the same USB data packet. To avoid this, we call the serial // port object's flush method before writing the data. if (_isUsb) _port->flush(); } uint32_t Samba::readWord(uint32_t addr) { uint8_t cmd[13]; uint32_t value; snprintf((char*) cmd, sizeof(cmd), "w%08X,4#", addr); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); if (_port->read(cmd, sizeof(uint32_t)) != sizeof(uint32_t)) throw SambaError(); value = (cmd[3] << 24 | cmd[2] << 16 | cmd[1] << 8 | cmd[0] << 0); if (_debug) printf("%s(addr=%#x)=%#x\n", __FUNCTION__, addr, value); return value; } static const uint16_t crc16Table[256] = { 0x0000,0x1021,0x2042,0x3063,0x4084,0x50a5,0x60c6,0x70e7, 0x8108,0x9129,0xa14a,0xb16b,0xc18c,0xd1ad,0xe1ce,0xf1ef, 0x1231,0x0210,0x3273,0x2252,0x52b5,0x4294,0x72f7,0x62d6, 0x9339,0x8318,0xb37b,0xa35a,0xd3bd,0xc39c,0xf3ff,0xe3de, 0x2462,0x3443,0x0420,0x1401,0x64e6,0x74c7,0x44a4,0x5485, 0xa56a,0xb54b,0x8528,0x9509,0xe5ee,0xf5cf,0xc5ac,0xd58d, 0x3653,0x2672,0x1611,0x0630,0x76d7,0x66f6,0x5695,0x46b4, 0xb75b,0xa77a,0x9719,0x8738,0xf7df,0xe7fe,0xd79d,0xc7bc, 0x48c4,0x58e5,0x6886,0x78a7,0x0840,0x1861,0x2802,0x3823, 0xc9cc,0xd9ed,0xe98e,0xf9af,0x8948,0x9969,0xa90a,0xb92b, 0x5af5,0x4ad4,0x7ab7,0x6a96,0x1a71,0x0a50,0x3a33,0x2a12, 0xdbfd,0xcbdc,0xfbbf,0xeb9e,0x9b79,0x8b58,0xbb3b,0xab1a, 0x6ca6,0x7c87,0x4ce4,0x5cc5,0x2c22,0x3c03,0x0c60,0x1c41, 0xedae,0xfd8f,0xcdec,0xddcd,0xad2a,0xbd0b,0x8d68,0x9d49, 0x7e97,0x6eb6,0x5ed5,0x4ef4,0x3e13,0x2e32,0x1e51,0x0e70, 0xff9f,0xefbe,0xdfdd,0xcffc,0xbf1b,0xaf3a,0x9f59,0x8f78, 0x9188,0x81a9,0xb1ca,0xa1eb,0xd10c,0xc12d,0xf14e,0xe16f, 0x1080,0x00a1,0x30c2,0x20e3,0x5004,0x4025,0x7046,0x6067, 0x83b9,0x9398,0xa3fb,0xb3da,0xc33d,0xd31c,0xe37f,0xf35e, 0x02b1,0x1290,0x22f3,0x32d2,0x4235,0x5214,0x6277,0x7256, 0xb5ea,0xa5cb,0x95a8,0x8589,0xf56e,0xe54f,0xd52c,0xc50d, 0x34e2,0x24c3,0x14a0,0x0481,0x7466,0x6447,0x5424,0x4405, 0xa7db,0xb7fa,0x8799,0x97b8,0xe75f,0xf77e,0xc71d,0xd73c, 0x26d3,0x36f2,0x0691,0x16b0,0x6657,0x7676,0x4615,0x5634, 0xd94c,0xc96d,0xf90e,0xe92f,0x99c8,0x89e9,0xb98a,0xa9ab, 0x5844,0x4865,0x7806,0x6827,0x18c0,0x08e1,0x3882,0x28a3, 0xcb7d,0xdb5c,0xeb3f,0xfb1e,0x8bf9,0x9bd8,0xabbb,0xbb9a, 0x4a75,0x5a54,0x6a37,0x7a16,0x0af1,0x1ad0,0x2ab3,0x3a92, 0xfd2e,0xed0f,0xdd6c,0xcd4d,0xbdaa,0xad8b,0x9de8,0x8dc9, 0x7c26,0x6c07,0x5c64,0x4c45,0x3ca2,0x2c83,0x1ce0,0x0cc1, 0xef1f,0xff3e,0xcf5d,0xdf7c,0xaf9b,0xbfba,0x8fd9,0x9ff8, 0x6e17,0x7e36,0x4e55,0x5e74,0x2e93,0x3eb2,0x0ed1,0x1ef0 }; uint16_t Samba::crc16Calc(const uint8_t *data, int len) { uint16_t crc16 = 0; while (len-- > 0) crc16 = (crc16 << 8) ^ crc16Table[((crc16 >> 8) ^ *(uint8_t*) data++) & 0xff]; return crc16; } bool Samba::crc16Check(const uint8_t *blk) { uint16_t crc16; crc16 = blk[BLK_SIZE + 3] << 8 | blk[BLK_SIZE + 4]; return (crc16Calc(&blk[3], BLK_SIZE) == crc16); } void Samba::crc16Add(uint8_t *blk) { uint16_t crc16; crc16 = crc16Calc(&blk[3], BLK_SIZE); blk[BLK_SIZE + 3] = (crc16 >> 8) & 0xff; blk[BLK_SIZE + 4] = crc16 & 0xff; } uint16_t Samba::checksumCalc(uint8_t data, uint16_t crc16) { return (crc16 << 8) ^ crc16Table[((crc16 >> 8) ^ data) & 0xff]; } void Samba::readXmodem(uint8_t* buffer, int size) { uint8_t blk[BLK_SIZE + 5]; uint32_t blkNum = 1; int retries; int bytes; while (size > 0) { for (retries = 0; retries < MAX_RETRIES; retries++) { if (blkNum == 1) _port->put(START); bytes = _port->read(blk, sizeof(blk)); if (bytes == sizeof(blk) && blk[0] == SOH && blk[1] == (blkNum & 0xff) && crc16Check(blk)) break; if (blkNum != 1) _port->put(NAK); } if (retries == MAX_RETRIES) throw SambaError(); _port->put(ACK); memmove(buffer, &blk[3], min(size, BLK_SIZE)); buffer += BLK_SIZE; size -= BLK_SIZE; blkNum++; } for (retries = 0; retries < MAX_RETRIES; retries++) { if (_port->get() == EOT) { _port->put(ACK); break; } _port->put(NAK); } if (retries == MAX_RETRIES) throw SambaError(); } void Samba::writeXmodem(const uint8_t* buffer, int size) { uint8_t blk[BLK_SIZE + 5]; uint32_t blkNum = 1; int retries; int bytes; for (retries = 0; retries < MAX_RETRIES; retries++) { if (_port->get() == START) break; } if (retries == MAX_RETRIES) throw SambaError(); while (size > 0) { blk[0] = SOH; blk[1] = (blkNum & 0xff); blk[2] = ~(blkNum & 0xff); memmove(&blk[3], buffer, min(size, BLK_SIZE)); if (size < BLK_SIZE) memset(&blk[3] + size, 0, BLK_SIZE - size); crc16Add(blk); for (retries = 0; retries < MAX_RETRIES; retries++) { bytes = _port->write(blk, sizeof(blk)); if (bytes != sizeof(blk)) throw SambaError(); if (_port->get() == ACK) break; } if (retries == MAX_RETRIES) throw SambaError(); buffer += BLK_SIZE; size -= BLK_SIZE; blkNum++; } for (retries = 0; retries < MAX_RETRIES; retries++) { _port->put(EOT); if (_port->get() == ACK) break; } if (retries == MAX_RETRIES) throw SambaError(); } void Samba::readBinary(uint8_t* buffer, int size) { if (_port->read(buffer, size) != size) throw SambaError(); } void Samba::writeBinary(const uint8_t* buffer, int size) { while (size) { int written = _port->write(buffer, size); if (written <= 0) throw SambaError(); buffer += written; size -= written; } } void Samba::read(uint32_t addr, uint8_t* buffer, int size) { uint8_t cmd[20]; int chunk; if (_debug) printf("%s(addr=%#x,size=%#x)\n", __FUNCTION__, addr, size); // The SAM firmware has a bug reading powers of 2 over 32 bytes // via USB. If that is the case here, then read the first byte // with a readByte and then read one less than the requested size. if (_isUsb && _readBufferSize == 0 && size > 32 && !(size & (size - 1))) { *buffer = readByte(addr); addr++; buffer++; size--; } while (size > 0) { // Handle any limitations on the size of the read if (_readBufferSize > 0 && size > _readBufferSize) chunk = _readBufferSize; else chunk = size; snprintf((char*) cmd, sizeof(cmd), "R%08X,%08X#", addr, chunk); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); if (_isUsb) readBinary(buffer, chunk); else readXmodem(buffer, chunk); size -= chunk; addr += chunk; buffer += chunk; } } void Samba::write(uint32_t addr, const uint8_t* buffer, int size) { uint8_t cmd[20]; if (_debug) printf("%s(addr=%#x,size=%#x)\n", __FUNCTION__, addr, size); snprintf((char*) cmd, sizeof(cmd), "S%08X,%08X#", addr, size); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); // The SAM firmware has a bug that if the command and binary data // are received in the same USB data packet, then the firmware // gets confused. Even though the writes are separated in the code, // USB drivers often do write combining which can put them together // in the same USB data packet. To avoid this, we call the serial // port object's flush method before writing the data. if (_isUsb) { _port->flush(); writeBinary(buffer, size); } else { writeXmodem(buffer, size); } } void Samba::go(uint32_t addr) { uint8_t cmd[11]; if (_debug) printf("%s(addr=%#x)\n", __FUNCTION__, addr); snprintf((char*) cmd, sizeof(cmd), "G%08X#", addr); if (_port->write(cmd, sizeof(cmd) - 1) != sizeof(cmd) - 1) throw SambaError(); // The SAM firmware can get confused if another command is // received in the same USB data packet as the go command // so we flush after writing the command over USB. if (_isUsb) _port->flush(); } std::string Samba::version() { uint8_t cmd[256]; char* str; int size; int pos; cmd[0] = 'V'; cmd[1] = '#'; _port->write(cmd, 2); _port->timeout(TIMEOUT_QUICK); size = _port->read(cmd, sizeof(cmd) - 1); _port->timeout(TIMEOUT_NORMAL); if (size <= 0) throw SambaError(); str = (char*) cmd; for (pos = 0; pos < size; pos++) { if (!isprint(str[pos])) break; } str[pos] = '\0'; std::string ver(str); if (_debug) printf("%s()=%s\n", __FUNCTION__, ver.c_str()); return ver; } void Samba::chipErase(uint32_t start_addr) { if (!_canChipErase) throw SambaError(); uint8_t cmd[64]; if (_debug) printf("%s(addr=%#x)\n", __FUNCTION__, start_addr); int l = snprintf((char*) cmd, sizeof(cmd), "X%08X#", start_addr); if (_port->write(cmd, l) != l) throw SambaError(); _port->timeout(TIMEOUT_LONG); _port->read(cmd, 3); // Expects "X\n\r" _port->timeout(TIMEOUT_NORMAL); if (cmd[0] != 'X') throw SambaError(); } void Samba::writeBuffer(uint32_t src_addr, uint32_t dst_addr, uint32_t size) { if (!_canWriteBuffer) throw SambaError(); if (size > checksumBufferSize()) throw SambaError(); if (_debug) printf("%s(scr_addr=%#x, dst_addr=%#x, size=%#x)\n", __FUNCTION__, src_addr, dst_addr, size); uint8_t cmd[64]; int l = snprintf((char*) cmd, sizeof(cmd), "Y%08X,0#", src_addr); if (_port->write(cmd, l) != l) throw SambaError(); _port->timeout(TIMEOUT_QUICK); cmd[0] = 0; _port->read(cmd, 3); // Expects "Y\n\r" _port->timeout(TIMEOUT_NORMAL); if (cmd[0] != 'Y') throw SambaError(); l = snprintf((char*) cmd, sizeof(cmd), "Y%08X,%08X#", dst_addr, size); if (_port->write(cmd, l) != l) throw SambaError(); _port->timeout(TIMEOUT_LONG); cmd[0] = 0; _port->read(cmd, 3); // Expects "Y\n\r" _port->timeout(TIMEOUT_NORMAL); if (cmd[0] != 'Y') throw SambaError(); } uint16_t Samba::checksumBuffer(uint32_t start_addr, uint32_t size) { if (!_canChecksumBuffer) throw SambaError(); if (size > checksumBufferSize()) throw SambaError(); if (_debug) printf("%s(start_addr=%#x, size=%#x) = ", __FUNCTION__, start_addr, size); uint8_t cmd[64]; int l = snprintf((char*) cmd, sizeof(cmd), "Z%08X,%08X#", start_addr, size); if (_port->write(cmd, l) != l) throw SambaError(); _port->timeout(TIMEOUT_LONG); cmd[0] = 0; _port->read(cmd, 12); // Expects "Z00000000#\n\r" _port->timeout(TIMEOUT_NORMAL); if (cmd[0] != 'Z') throw SambaError(); cmd[9] = 0; errno = 0; uint32_t res = strtol((char*) &cmd[1], NULL, 16); if (errno != 0) throw SambaError(); if (_debug) printf("%x\n", res); return res; } BOSSA-1.9.1/src/Samba.h000066400000000000000000000073541333742133700143730ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _SAMBA_H #define _SAMBA_H #include #include #include #include #include "SerialPort.h" class SambaError : public std::exception { public: SambaError() : exception() {}; const char* what() const throw() { return "SAM-BA operation failed"; } }; class Samba { public: Samba(); virtual ~Samba(); bool connect(SerialPort::Ptr port, int bps = 115200); void disconnect(); void writeByte(uint32_t addr, uint8_t value); uint8_t readByte(uint32_t addr); void writeWord(uint32_t addr, uint32_t value); uint32_t readWord(uint32_t addr); void write(uint32_t addr, const uint8_t* buffer, int size); void read(uint32_t addr, uint8_t* buffer, int size); void go(uint32_t addr); std::string version(); void chipId(uint32_t& chipId, uint32_t& extChipId); void setDebug(bool debug) { _debug = debug; } const SerialPort& getSerialPort() { return *_port; } void reset(); // Extended SAM-BA functions bool canChipErase() { return _canChipErase; } void chipErase(uint32_t start_addr); bool canWriteBuffer() { return _canWriteBuffer; } void writeBuffer(uint32_t src_addr, uint32_t dst_addr, uint32_t size); uint32_t writeBufferSize() { return 4096; } bool canChecksumBuffer() { return _canChecksumBuffer; } uint16_t checksumBuffer(uint32_t start_addr, uint32_t size); uint32_t checksumBufferSize() { return 4096; } uint16_t checksumCalc(uint8_t c, uint16_t crc); private: bool _canChipErase; bool _canWriteBuffer; bool _canChecksumBuffer; int _readBufferSize; bool _debug; bool _isUsb; SerialPort::Ptr _port; bool init(); uint16_t crc16Calc(const uint8_t *data, int len); bool crc16Check(const uint8_t *blk); void crc16Add(uint8_t *blk); void writeXmodem(const uint8_t* buffer, int size); void readXmodem(uint8_t* buffer, int size); void writeBinary(const uint8_t* buffer, int size); void readBinary(uint8_t* buffer, int size); }; #endif // _SAMBA_H BOSSA-1.9.1/src/SerialPort.h000066400000000000000000000054731333742133700154340ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _SERIALPORT_H #define _SERIALPORT_H #include #include #include class SerialPort { public: SerialPort(const std::string& name) : _name(name) {} virtual ~SerialPort() {} enum Parity { ParityNone, ParityOdd, ParityEven, }; enum StopBit { StopBitOne, StopBitOneFive, StopBitTwo, }; virtual bool open(int baud = 115200, int data = 8, Parity parity = ParityNone, StopBit stop = StopBitOne) = 0; virtual void close() = 0; virtual bool isUsb() = 0; virtual int read(uint8_t* data, int size) = 0; virtual int write(const uint8_t* data, int size) = 0; virtual int get() = 0; virtual int put(int c) = 0; virtual bool timeout(int millisecs) = 0; virtual void flush() = 0; virtual void setDTR(bool dtr) = 0; virtual void setRTS(bool rts) = 0; virtual std::string name() const { return _name; } typedef std::unique_ptr Ptr; protected: std::string _name; }; #endif // _SERIALPORT_H BOSSA-1.9.1/src/Shell.cpp000066400000000000000000000103501333742133700147400ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include #include #include "Shell.h" #include "Command.h" using namespace std; Shell::Shell() : _exitFlag(false) { Command::setShell(this); add(new CommandBod); add(new CommandBootf); add(new CommandBor); add(new CommandConnect); add(new CommandDebug); add(new CommandDump); add(new CommandErase); add(new CommandExit); add(new CommandGo); add(new CommandHelp); add(new CommandHistory); add(new CommandLock); add(new CommandInfo); add(new CommandMrb); add(new CommandMrf); add(new CommandMrw); add(new CommandMwb); add(new CommandMwf); add(new CommandMww); add(new CommandPio); add(new CommandRead); add(new CommandSecurity); add(new CommandVerify); add(new CommandWrite); add(new CommandReset); add(new CommandOptions); _commandList.sort(); } Shell::~Shell() { CommandList::iterator it; for (it = _commandList.begin(); it != _commandList.end(); it++) { delete *it; } } Command* Shell::find(const char* name) { CommandList::iterator it; int len; Command *command = NULL; len = strlen(name); for (it = _commandList.begin(); it != _commandList.end(); it++) { if (strncmp((*it)->name(), name, len) == 0) { if (command) { printf("Ambiguous command: \"%s\". Try \"help\".\n", name); return NULL; } command = *it; } } if (!command) { printf("Undefined command: \"%s\". Try \"help\".\n", name); return NULL; } return command; } void Shell::invoke(char* argv[], int argc) { Command* command; command = find(argv[0]); if (!command) return; try { command->invoke(argv, argc); } catch (SambaError& e) { printf("\n%s.\nPort is disconnected.\n", e.what()); Command::disconnect(); } catch (exception& e) { printf("\n%s.\n", e.what()); } } void Shell::help() { CommandList::iterator it; for (it = _commandList.begin(); it != _commandList.end(); it++) { printf("%s -- %s\n", (*it)->name(), (*it)->help()); } } void Shell::usage(const char* name) { Command* command; command = find(name); if (!command) return; printf("%s\n", command->help()); printf("Usage: %s\n", command->usage()); } void Shell::add(Command* command) { _commandList.push_back(command); } BOSSA-1.9.1/src/Shell.h000066400000000000000000000042571333742133700144160ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _Shell_H #define _Shell_H #include #include class Command; class Shell { public: virtual ~Shell(); Shell(); void invoke(char* argv[], int argc); void help(); void usage(const char* name); void add(Command* command); Command* find(const char* name); bool& exitFlag() { return _exitFlag; } private: typedef std::list CommandList; CommandList _commandList; bool _exitFlag; }; #endif // _Shell_H BOSSA-1.9.1/src/ShumaTechLogo.cpp000066400000000000000000003176631333742133700164140ustar00rootroot00000000000000#ifndef SHUMATECHLOGO_BMP_H #define SHUMATECHLOGO_BMP_H static unsigned char ShumaTechLogo_bmp[] = { 0x42, 0x4d, 0x36, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x01, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x13, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x5c, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0xb1, 0xb1, 0xb1, 0x38, 0xc2, 0xc2, 0xc2, 0x7a, 0xcd, 0xcd, 0xcd, 0xb0, 0xde, 0xde, 0xde, 0xd2, 0xee, 0xee, 0xee, 0xe8, 0xf9, 0xf9, 0xf9, 0xf6, 0xfd, 0xfd, 0xfd, 0xfd, 0xfb, 0xfb, 0xfb, 0xf8, 0xf6, 0xf6, 0xf6, 0xea, 0xe4, 0xe4, 0xe4, 0xcb, 0xb9, 0xb9, 0xb9, 0x9e, 0x39, 0x39, 0x39, 0x6a, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x12, 0xfd, 0xfd, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2e, 0xa2, 0xa2, 0xa2, 0x84, 0xde, 0xde, 0xde, 0xd3, 0xf6, 0xf6, 0xf6, 0xf3, 0xfd, 0xfd, 0xfd, 0xfd, 0xf9, 0xf9, 0xf9, 0xf4, 0xe5, 0xe5, 0xe5, 0xcf, 0x8f, 0x8f, 0x8f, 0x87, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0xe7, 0xe7, 0xe7, 0xe2, 0xff, 0xff, 0xff, 0xff, 0x99, 0x99, 0x99, 0x94, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x27, 0xad, 0xad, 0xad, 0x77, 0xff, 0xff, 0xff, 0xff, 0xea, 0xea, 0xea, 0xe3, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x87, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x2f, 0x2a, 0x2a, 0x2a, 0x55, 0xaa, 0xaa, 0xaa, 0xa8, 0xdf, 0xdf, 0xdf, 0xda, 0xf6, 0xf6, 0xf6, 0xf4, 0xfd, 0xfd, 0xfd, 0xfe, 0xfb, 0xfb, 0xfb, 0xf8, 0xf1, 0xf1, 0xf1, 0xe0, 0xd9, 0xd9, 0xd9, 0xb6, 0x9b, 0x9b, 0x9b, 0x7d, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xf8, 0xbc, 0xbc, 0xbc, 0xa8, 0x06, 0x06, 0x06, 0x74, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x18, 0xfb, 0xfb, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x32, 0xdb, 0xdb, 0xdb, 0xac, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xca, 0xca, 0xca, 0xa9, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x5d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x66, 0x9e, 0x9e, 0x9e, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xe4, 0xe4, 0xe4, 0xd1, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x4c, 0xdd, 0xdd, 0xdd, 0xce, 0xff, 0xff, 0xff, 0xff, 0xa6, 0xa6, 0xa6, 0xb0, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x25, 0x9a, 0x9a, 0x9a, 0x77, 0xf6, 0xf6, 0xf6, 0xf1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xed, 0xe9, 0xe9, 0xe9, 0xa7, 0xcc, 0xcc, 0xcc, 0x6b, 0x9b, 0x9b, 0x9b, 0x36, 0x51, 0x51, 0x51, 0x19, 0x55, 0x55, 0x55, 0x15, 0xc9, 0xc9, 0xc9, 0x30, 0xed, 0xed, 0xed, 0x74, 0xfc, 0xfc, 0xfc, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd2, 0xd2, 0xd2, 0xca, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1e, 0xf9, 0xf9, 0xf9, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x4a, 0xa4, 0xa4, 0xa4, 0x6e, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xfc, 0xad, 0xad, 0xad, 0xad, 0x40, 0x40, 0x40, 0x63, 0x13, 0x13, 0x13, 0x35, 0x90, 0x90, 0x90, 0x35, 0xee, 0xee, 0xee, 0x89, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x87, 0x87, 0x87, 0x82, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x67, 0x1d, 0x1d, 0x1d, 0x6f, 0xfa, 0xfa, 0xfa, 0xf7, 0xfd, 0xfd, 0xfd, 0xfe, 0x49, 0x49, 0x49, 0x6b, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x69, 0x32, 0x32, 0x32, 0x7e, 0xfd, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfe, 0x2f, 0x2f, 0x2f, 0x82, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x16, 0xb3, 0xb3, 0xb3, 0x6c, 0xfd, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xf4, 0xf4, 0xf4, 0xf1, 0xbe, 0xbe, 0xbe, 0xa2, 0x86, 0x86, 0x86, 0x57, 0x47, 0x47, 0x47, 0x27, 0x37, 0x37, 0x37, 0x17, 0xc2, 0xc2, 0xc2, 0x2e, 0xea, 0xea, 0xea, 0x64, 0xf9, 0xf9, 0xf9, 0xaf, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfd, 0xfd, 0xfd, 0xc1, 0xf0, 0xf0, 0xf0, 0x56, 0x36, 0x36, 0x36, 0x0e, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x93, 0x93, 0x93, 0x1a, 0xf8, 0xf8, 0xf8, 0xd0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x85, 0x85, 0x85, 0xb1, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x22, 0xf8, 0xf8, 0xf8, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4b, 0xe4, 0xe4, 0xe4, 0xbd, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xbe, 0xbe, 0xb5, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x08, 0xf3, 0xf3, 0xf3, 0x97, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xdf, 0xc4, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x6b, 0x2c, 0x2c, 0x2c, 0x67, 0xfd, 0xfd, 0xfd, 0xfc, 0xfc, 0xfc, 0xfc, 0xfd, 0x1f, 0x1f, 0x1f, 0x82, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x66, 0xd5, 0xd5, 0xd5, 0xb8, 0xff, 0xff, 0xff, 0xff, 0xc6, 0xc6, 0xc6, 0xa3, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x70, 0xa4, 0xa4, 0xa4, 0xb9, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xd3, 0xd3, 0xdd, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0c, 0x76, 0x76, 0x76, 0x2b, 0xfa, 0xfa, 0xfa, 0xf2, 0xff, 0xff, 0xff, 0xff, 0xdf, 0xdf, 0xdf, 0xd8, 0x2d, 0x2d, 0x2d, 0x65, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x15, 0xa6, 0xa6, 0xa6, 0x56, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xdc, 0xdc, 0xdc, 0xe4, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x22, 0xf8, 0xf8, 0xf8, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4e, 0xf7, 0xf7, 0xf7, 0xe6, 0xff, 0xff, 0xff, 0xff, 0x5e, 0x5e, 0x5e, 0x7f, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0xdc, 0xdc, 0xdc, 0x3b, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xe8, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x6f, 0x9a, 0x9a, 0x9a, 0x9e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x89, 0x89, 0x89, 0xab, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x66, 0x77, 0x77, 0x77, 0x6d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x83, 0x83, 0x83, 0xac, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x12, 0xe3, 0xe3, 0xe3, 0x8c, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xe8, 0x19, 0x19, 0x19, 0x6e, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x2f, 0x18, 0x18, 0x18, 0x49, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xfb, 0x00, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1e, 0xf9, 0xf9, 0xf9, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4f, 0xfc, 0xfc, 0xfc, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x18, 0x18, 0x18, 0x69, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x8b, 0x8b, 0x8b, 0x16, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xf8, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x75, 0xd8, 0xd8, 0xd8, 0xd3, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xf8, 0xd1, 0xd1, 0xd1, 0xd1, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x69, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x46, 0xf5, 0xf5, 0xf5, 0xd5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf8, 0xf8, 0xf7, 0x13, 0x13, 0x13, 0x76, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x17, 0xf7, 0xf7, 0xf7, 0xd0, 0xff, 0xff, 0xff, 0xff, 0x9c, 0x9c, 0x9c, 0x9c, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x59, 0x55, 0x55, 0x55, 0x87, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfa, 0xfa, 0xfa, 0xfb, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x18, 0xfb, 0xfb, 0xfb, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x4f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x72, 0x19, 0x19, 0x19, 0x82, 0xfb, 0xfb, 0xfb, 0xfb, 0xe7, 0xe7, 0xe7, 0xe4, 0xca, 0xca, 0xca, 0xc6, 0xfa, 0xfa, 0xfa, 0xf8, 0x14, 0x14, 0x14, 0x64, 0x00, 0x00, 0x00, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x45, 0xd0, 0xd0, 0xd0, 0x7e, 0xff, 0xff, 0xff, 0xff, 0xe3, 0xe3, 0xe3, 0xb8, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x49, 0xda, 0xda, 0xda, 0xbc, 0xff, 0xff, 0xff, 0xff, 0xc8, 0xc8, 0xc8, 0xc8, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x16, 0xfc, 0xfc, 0xfc, 0xf4, 0xff, 0xff, 0xff, 0xff, 0x3c, 0x3c, 0x3c, 0x6e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x72, 0x42, 0x42, 0x42, 0x92, 0xe3, 0xe3, 0xe3, 0xe9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xe2, 0xe2, 0xe2, 0xe3, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x13, 0xfd, 0xfd, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6e, 0x00, 0x00, 0x00, 0x4e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x76, 0x82, 0x82, 0x82, 0xae, 0xff, 0xff, 0xff, 0xff, 0xac, 0xac, 0xac, 0xb9, 0x84, 0x84, 0x84, 0x92, 0xff, 0xff, 0xff, 0xff, 0x95, 0x95, 0x95, 0x83, 0x00, 0x00, 0x00, 0x5b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x46, 0x49, 0x49, 0x49, 0x2d, 0xfd, 0xfd, 0xfd, 0xf4, 0xfd, 0xfd, 0xfd, 0xf7, 0x2e, 0x2e, 0x2e, 0x53, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x61, 0x24, 0x24, 0x24, 0x61, 0xfa, 0xfa, 0xfa, 0xf9, 0xff, 0xff, 0xff, 0xff, 0x6e, 0x6e, 0x6e, 0x92, 0x00, 0x00, 0x00, 0x57, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0x0e, 0x0e, 0x0e, 0x5b, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x29, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x7a, 0x5f, 0x5f, 0x5f, 0xa1, 0xc4, 0xc4, 0xc4, 0xd5, 0xfc, 0xfc, 0xfc, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xa1, 0xa1, 0xa1, 0x94, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0e, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x4c, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7a, 0xc9, 0xc9, 0xc9, 0xda, 0xff, 0xff, 0xff, 0xff, 0x4d, 0x4d, 0x4d, 0x8e, 0x12, 0x12, 0x12, 0x5f, 0xfb, 0xfb, 0xfb, 0xf6, 0xdd, 0xdd, 0xdd, 0xb6, 0x00, 0x00, 0x00, 0x52, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x86, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x21, 0xf3, 0xf3, 0xf3, 0xa1, 0xff, 0xff, 0xff, 0xff, 0xbe, 0xbe, 0xbe, 0x8b, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x6a, 0x9d, 0x9d, 0x9d, 0xa7, 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xee, 0x02, 0x02, 0x02, 0x6b, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0xfd, 0xfd, 0xfd, 0xf0, 0xff, 0xff, 0xff, 0xff, 0x3e, 0x3e, 0x3e, 0x5e, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x67, 0x44, 0x44, 0x44, 0x91, 0xa9, 0xa9, 0xa9, 0xc5, 0xea, 0xea, 0xea, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xd8, 0xd8, 0xd8, 0xb4, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x4a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x11, 0x11, 0x11, 0x83, 0xf8, 0xf8, 0xf8, 0xfa, 0xe7, 0xe7, 0xe7, 0xee, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x4f, 0xe7, 0xe7, 0xe7, 0xbb, 0xfa, 0xfa, 0xfa, 0xef, 0x0a, 0x0a, 0x0a, 0x48, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x20, 0xd1, 0xd1, 0xd1, 0x3e, 0xff, 0xff, 0xff, 0xff, 0xf2, 0xf2, 0xf2, 0xd4, 0x00, 0x00, 0x00, 0x51, 0x00, 0x00, 0x00, 0x6e, 0xe1, 0xe1, 0xe1, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xaf, 0xaf, 0xaf, 0xc0, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x6f, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x0f, 0xf9, 0xf9, 0xf9, 0xc6, 0xff, 0xff, 0xff, 0xff, 0xad, 0xad, 0xad, 0x80, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x28, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x1e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x24, 0x03, 0x03, 0x03, 0x47, 0x86, 0x86, 0x86, 0x9b, 0xdb, 0xdb, 0xdb, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf7, 0xf7, 0xf7, 0xea, 0xc2, 0xc2, 0xc2, 0x7b, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x47, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5f, 0x00, 0x00, 0x00, 0x66, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7c, 0x7c, 0x7c, 0xa6, 0xff, 0xff, 0xff, 0xff, 0xaa, 0xaa, 0xaa, 0xc8, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x43, 0xc7, 0xc7, 0xc7, 0x72, 0xff, 0xff, 0xff, 0xff, 0x96, 0x96, 0x96, 0x6b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0c, 0xfb, 0xfb, 0xfb, 0xd0, 0xff, 0xff, 0xff, 0xff, 0x6f, 0x6f, 0x6f, 0x65, 0x55, 0x55, 0x55, 0x84, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x44, 0x44, 0x44, 0x8e, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x31, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x45, 0x00, 0x00, 0x00, 0x43, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x1a, 0xec, 0xec, 0xec, 0x7a, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xd6, 0x0d, 0x0d, 0x0d, 0x4a, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x2a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x14, 0x7c, 0x7c, 0x7c, 0x52, 0xe7, 0xe7, 0xe7, 0xdd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfb, 0xfb, 0xfb, 0xf6, 0xe7, 0xe7, 0xe7, 0xb7, 0xc3, 0xc3, 0xc3, 0x66, 0x22, 0x22, 0x22, 0x1e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x3f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x5a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xcd, 0xcd, 0xcd, 0xcc, 0xff, 0xff, 0xff, 0xff, 0x58, 0x58, 0x58, 0x95, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x34, 0x5b, 0x5b, 0x5b, 0x27, 0xfd, 0xfd, 0xfd, 0xfa, 0xdf, 0xdf, 0xdf, 0xa3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0a, 0xf3, 0xf3, 0xf3, 0x6c, 0xff, 0xff, 0xff, 0xff, 0xdb, 0xdb, 0xdb, 0xa5, 0xc6, 0xc6, 0xc6, 0xb6, 0xff, 0xff, 0xff, 0xff, 0xe0, 0xe0, 0xe0, 0xe3, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x46, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x25, 0x6e, 0x6e, 0x6e, 0x1e, 0xfd, 0xfd, 0xfd, 0xe6, 0xff, 0xff, 0xff, 0xff, 0xe6, 0xe6, 0xe6, 0xb1, 0x11, 0x11, 0x11, 0x4a, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x64, 0x02, 0x02, 0x02, 0x63, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x44, 0x00, 0x00, 0x00, 0x2e, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x54, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x07, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0xa2, 0xa2, 0xa2, 0x3a, 0xfa, 0xfa, 0xfa, 0xf3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfc, 0xfc, 0xfc, 0xfc, 0xe0, 0xe0, 0xe0, 0xc7, 0xb7, 0xb7, 0xb7, 0x76, 0x3c, 0x3c, 0x3c, 0x26, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x2f, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x44, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf9, 0xf9, 0xf9, 0xf5, 0xf2, 0xf2, 0xf2, 0xec, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x10, 0xf9, 0xf9, 0xf9, 0xbb, 0xfa, 0xfa, 0xfa, 0xe3, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x06, 0xb8, 0xb8, 0xb8, 0x12, 0xfd, 0xfd, 0xfd, 0xf4, 0xfb, 0xfb, 0xfb, 0xed, 0xf9, 0xf9, 0xf9, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xa8, 0xa8, 0xa8, 0xa0, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x49, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x67, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x10, 0xe8, 0xe8, 0xe8, 0x43, 0xff, 0xff, 0xff, 0xf7, 0xff, 0xff, 0xff, 0xff, 0xf5, 0xf5, 0xf5, 0xd7, 0xb1, 0xb1, 0xb1, 0x80, 0x43, 0x43, 0x43, 0x5e, 0x0e, 0x0e, 0x0e, 0x59, 0x2e, 0x2e, 0x2e, 0x69, 0x75, 0x75, 0x75, 0x86, 0xbe, 0xbe, 0xbe, 0xb1, 0xf3, 0xf3, 0xf3, 0xea, 0x00, 0x00, 0x00, 0x4e, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x26, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x07, 0xf2, 0xf2, 0xf2, 0xb1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xfe, 0xb4, 0xb4, 0xb4, 0xca, 0x36, 0x36, 0x36, 0x71, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x1b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x27, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xda, 0xda, 0xda, 0xa7, 0x00, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x08, 0xf5, 0xf5, 0xf5, 0x6a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x36, 0x00, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0xfa, 0xfa, 0xfa, 0x9d, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfd, 0xfd, 0xfd, 0xfa, 0x45, 0x45, 0x45, 0x42, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x0a, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0xfd, 0xfd, 0xfd, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xfe, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x04, 0xf2, 0xf2, 0xf2, 0x3d, 0xfd, 0xfd, 0xfd, 0xe1, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x2f, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x16, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x06, 0xfc, 0xfc, 0xfc, 0xee, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x93, 0x93, 0x93, 0xb9, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x17, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0b, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x10, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc7, 0xc7, 0xc7, 0x4e, 0x00, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x03, 0xea, 0xea, 0xea, 0x19, 0xff, 0xff, 0xff, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0xf5, 0xf5, 0xf5, 0x35, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf6, 0xf6, 0xf6, 0xb4, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x11, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x4f, 0x00, 0x00, 0x00, 0x26, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x0b, 0xf6, 0xf6, 0xf6, 0xff, 0xf6, 0xf6, 0xf6, 0xff, 0xf8, 0xf8, 0xf8, 0xff, 0xf9, 0xf9, 0xf9, 0xff, 0xfc, 0xfc, 0xfc, 0xff, 0xfd, 0xfd, 0xfd, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0xd0, 0xd0, 0xd0, 0x0b, 0xf5, 0xf5, 0xf5, 0x6b, 0xfa, 0xfa, 0xfa, 0xbc, 0xfd, 0xfd, 0xfd, 0xea, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfd, 0xfd, 0xf7, 0xfa, 0xfa, 0xfa, 0xdc, 0xf1, 0xf1, 0xf1, 0xae, 0xdc, 0xdc, 0xdc, 0x6e, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x09, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x05, 0xff, 0xff, 0xff, 0xf9, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x15, 0x15, 0x15, 0x80, 0x00, 0x00, 0x00, 0x81, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x4d, 0x00, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x2e, 0x00, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x25, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x83, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0xfc, 0xfc, 0xfc, 0xe0, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2b, 0x2b, 0x2b, 0x70, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x4a, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x4c, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x27, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x47, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x42, 0x00, 0x00, 0x00, 0x41, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xf9, 0xf9, 0xf9, 0x95, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xc2, 0xc2, 0xc2, 0x9d, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x6c, 0x00, 0x00, 0x00, 0x69, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x64, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x69, 0x68, 0x68, 0x68, 0x89, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x47, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x65, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x96, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x65, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe9, 0xe9, 0xe9, 0x18, 0xfd, 0xfd, 0xfd, 0xea, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xfe, 0xdb, 0xdb, 0xdb, 0xae, 0x7d, 0x7d, 0x7d, 0x74, 0x27, 0x27, 0x27, 0x61, 0x08, 0x08, 0x08, 0x5f, 0x24, 0x24, 0x24, 0x68, 0x5d, 0x5d, 0x5d, 0x7e, 0x96, 0x96, 0x96, 0x99, 0xcc, 0xcc, 0xcc, 0xbf, 0xf3, 0xf3, 0xf3, 0xeb, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x4b, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x63, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x6d, 0x00, 0x00, 0x00, 0x66, 0x00, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x61, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x00, 0x00, 0x52, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xed, 0xed, 0xed, 0x2b, 0xfd, 0xfd, 0xfd, 0xd2, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x37, 0x00, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x99, 0x99, 0x99, 0x05, 0xf6, 0xf6, 0xf6, 0x56, 0xf8, 0xf8, 0xf8, 0xa9, 0xfc, 0xfc, 0xfc, 0xd9, 0xfd, 0xfd, 0xfd, 0xf2, 0xff, 0xff, 0xff, 0xfc, 0xfd, 0xfd, 0xfd, 0xf7, 0xfb, 0xfb, 0xfb, 0xe8, 0xf7, 0xf7, 0xf7, 0xd1, 0xf0, 0xf0, 0xf0, 0xaf, 0xe6, 0xe6, 0xe6, 0x86, 0xcf, 0xcf, 0xcf, 0x56, 0x00, 0x00, 0x00, 0x11, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x19, 0x00, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; #endif BOSSA-1.9.1/src/TemplateArm.asm000066400000000000000000000006001333742133700160770ustar00rootroot00000000000000 .global start .global stack .global reset .text .thumb .align 0 start: @ @ Insert code @ @ Fix for SAM-BA stack bug ldr r0, reset cmp r0, #0 bne return ldr r0, stack mov sp, r0 return: bx lr .align 0 stack: .word 0 reset: .word 0 @ @ Insert variables @ BOSSA-1.9.1/src/WinPortFactory.cpp000066400000000000000000000114021333742133700166220ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "WinPortFactory.h" #include "WinSerialPort.h" #define USB_DEVICE_NAME "\\Device\\USB" WinPortFactory::WinPortFactory() : _devInfo(INVALID_HANDLE_VALUE), _cfgMgr(NULL), _devNode(NULL), _devNum(0) { } WinPortFactory::~WinPortFactory() { cleanup(); } SerialPort::Ptr WinPortFactory::create(const std::string& name) { bool isUsb = false; char szNtDeviceName[MAX_PATH]; if (QueryDosDevice(name.c_str(), szNtDeviceName, MAX_PATH)) { if (strncmp(szNtDeviceName, USB_DEVICE_NAME, sizeof(USB_DEVICE_NAME) - 1) == 0) { isUsb = true; } } return create(name, isUsb); } SerialPort::Ptr WinPortFactory::create(const std::string& name, bool isUsb) { return SerialPort::Ptr(new WinSerialPort(name, isUsb)); } void WinPortFactory::cleanup() { _devNum = 0; _devNode = NULL; if (_cfgMgr == NULL) { FreeLibrary(_cfgMgr); _cfgMgr = NULL; } if (_devInfo != INVALID_HANDLE_VALUE) { SetupDiDestroyDeviceInfoList(_devInfo); _devInfo = INVALID_HANDLE_VALUE; } } std::string WinPortFactory::error() { cleanup(); return end(); } std::string WinPortFactory::begin() { DWORD size = 0; if (_devInfo != INVALID_HANDLE_VALUE) cleanup(); SetupDiClassGuidsFromNameA("Ports", 0, 0, &size); if (size < 1) return error(); GUID guids[size]; if (!SetupDiClassGuidsFromNameA("Ports", guids, size * sizeof(GUID), &size)) { return error(); } _devInfo = SetupDiGetClassDevs(guids, NULL, NULL, DIGCF_PRESENT); if(_devInfo == INVALID_HANDLE_VALUE) return error(); _cfgMgr = LoadLibrary("cfgmgr32"); if (!_cfgMgr) return error(); _devNode = (CM_Open_DevNode_Key) GetProcAddress(_cfgMgr, "CM_Open_DevNode_Key"); if (!_devNode) return error(); return next(); } std::string WinPortFactory::end() { return std::string(); } std::string WinPortFactory::next() { int rc; BYTE devName[16]; SP_DEVINFO_DATA devData; HKEY devKey; DWORD len; if (_devInfo == INVALID_HANDLE_VALUE) return end(); while (1) { devData.cbSize = sizeof(SP_DEVINFO_DATA); if (!SetupDiEnumDeviceInfo(_devInfo, _devNum, &devData)) return error(); rc = _devNode(devData.DevInst, KEY_QUERY_VALUE, 0, 1, &devKey, 0); if (rc != ERROR_SUCCESS) return error(); len = sizeof(devName); rc = RegQueryValueEx(devKey, "portname", NULL, NULL, devName, &len); RegCloseKey(devKey); if (rc != ERROR_SUCCESS) return error(); _devNum++; if (strncmp("COM", (char*) devName, 3) == 0) break; } return std::string((char*) devName, len); } std::string WinPortFactory::def() { return begin(); } BOSSA-1.9.1/src/WinPortFactory.h000066400000000000000000000046751333742133700163050ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _WINPORTFACTORY_H #define _WINPORTFACTORY_H class WinPortFactory; #include "PortFactory.h" #include #include class WinPortFactory : public PortFactoryBase { public: WinPortFactory(); virtual ~WinPortFactory(); std::string begin(); std::string end(); std::string next(); std::string def(); SerialPort::Ptr create(const std::string& name); SerialPort::Ptr create(const std::string& name, bool isUsb); private: typedef DWORD WINAPI (*CM_Open_DevNode_Key)(DWORD, DWORD, DWORD, DWORD, ::PHKEY, DWORD); HDEVINFO _devInfo; HINSTANCE _cfgMgr; CM_Open_DevNode_Key _devNode; int _devNum; void cleanup(); std::string error(); }; #endif // _WINPORTFACTORY_H BOSSA-1.9.1/src/WinSerialPort.cpp000066400000000000000000000141551333742133700164420ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "WinSerialPort.h" #include #include #include #include WinSerialPort::WinSerialPort(const std::string& name, bool isUsb) : SerialPort(name), _handle(INVALID_HANDLE_VALUE), _isUsb(isUsb) { } WinSerialPort::~WinSerialPort() { close(); } #ifdef DEBUG static void printLastError() { char buffer[100]; DWORD dw = GetLastError(); if (FormatMessage( FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, dw, 0, buffer, sizeof(buffer), NULL )) { printf("Error (%d): %s", (int) dw, (LPSTR) buffer); } else { printf("Error (%d)\n", (int) dw); } } #endif bool WinSerialPort::open(int baud, int data, SerialPort::Parity parity, SerialPort::StopBit stop) { DCB dcbSerialParams; if (_handle != INVALID_HANDLE_VALUE) return false; std::string device = "\\\\.\\" + _name; _handle = CreateFile(device.c_str(), GENERIC_READ | GENERIC_WRITE, 0, 0, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if (_handle == INVALID_HANDLE_VALUE) return false; dcbSerialParams.DCBlength = sizeof(dcbSerialParams); if (!GetCommState(_handle, &dcbSerialParams)) { CloseHandle(_handle); return false; } dcbSerialParams.BaudRate = baud; dcbSerialParams.ByteSize = data; switch (parity) { case ParityNone: dcbSerialParams.Parity = NOPARITY; break; case ParityOdd: dcbSerialParams.Parity = ODDPARITY; break; case ParityEven: dcbSerialParams.Parity = EVENPARITY; break; default: CloseHandle(_handle); return false; } switch (stop) { case StopBitOne: dcbSerialParams.StopBits = ONESTOPBIT; break; case StopBitOneFive: dcbSerialParams.StopBits = ONE5STOPBITS; break; case StopBitTwo: dcbSerialParams.StopBits = TWOSTOPBITS; break; default: CloseHandle(_handle); return false; } if (!SetCommState(_handle, &dcbSerialParams)) { CloseHandle(_handle); return false; } timeout(INT_MAX); return true; } void WinSerialPort::close() { if (_handle != INVALID_HANDLE_VALUE) CloseHandle(_handle); _handle = INVALID_HANDLE_VALUE; } bool WinSerialPort::timeout(int millisecs) { COMMTIMEOUTS timeouts; if (_handle == INVALID_HANDLE_VALUE) return false; timeouts.ReadIntervalTimeout = MAXDWORD; timeouts.ReadTotalTimeoutConstant = millisecs; timeouts.ReadTotalTimeoutMultiplier = 0; timeouts.WriteTotalTimeoutConstant = MAXDWORD; timeouts.WriteTotalTimeoutMultiplier = 0; if (!SetCommTimeouts(_handle, &timeouts)) return false; return true; } int WinSerialPort::read(uint8_t* data, int size) { DWORD bytes; int total = 0; if (_handle == INVALID_HANDLE_VALUE) return -1; while (size > 0) { if (!ReadFile(_handle, data, size, &bytes, NULL)) return -1; if (bytes == 0) break; size -= bytes; data += bytes; total += bytes; } return total; } int WinSerialPort::write(const uint8_t* data, int size) { DWORD bytes; if (_handle == INVALID_HANDLE_VALUE) return -1; if (!WriteFile(_handle, data, size, &bytes, NULL)) return -1; return bytes; } int WinSerialPort::get() { uint8_t val; DWORD bytes; if (_handle == INVALID_HANDLE_VALUE) return -1; if (!ReadFile(_handle, &val, 1, &bytes, NULL)) return -1; if (bytes != 1) return -1; return val; } int WinSerialPort::put(int c) { uint8_t val = c; DWORD bytes; if (_handle == INVALID_HANDLE_VALUE) return -1; if (!WriteFile(_handle, &val, 1, &bytes, NULL)) return -1; if (bytes != 1) return -1; return val; } void WinSerialPort::flush() { Sleep(1); } void WinSerialPort::setDTR(bool dtr) { if (_handle == INVALID_HANDLE_VALUE) return; EscapeCommFunction(_handle, dtr ? SETDTR : CLRDTR); } void WinSerialPort::setRTS(bool rts) { if (_handle == INVALID_HANDLE_VALUE) return; EscapeCommFunction(_handle, rts ? SETRTS : CLRRTS); } BOSSA-1.9.1/src/WinSerialPort.h000066400000000000000000000047701333742133700161110ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _WINSERIALPORT_H #define _WINSERIALPORT_H #include "SerialPort.h" #include #include class WinSerialPort : public SerialPort { public: WinSerialPort(const std::string& name, bool isUsb); virtual ~WinSerialPort(); bool open(int baud = 115200, int data = 8, SerialPort::Parity parity = SerialPort::ParityNone, SerialPort::StopBit stop = SerialPort::StopBitOne); void close(); bool isUsb() { return _isUsb; }; int read(uint8_t* data, int size); int write(const uint8_t* data, int size); int get(); int put(int c); bool timeout(int millisecs); void flush(); void setDTR(bool dtr); void setRTS(bool rts); private: HANDLE _handle; bool _isUsb; }; #endif // _WINSERIALPORT_H BOSSA-1.9.1/src/WordCopyApplet.cpp000066400000000000000000000045421333742133700166130ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include "WordCopyApplet.h" WordCopyApplet::WordCopyApplet(Samba& samba, uint32_t addr) : Applet(samba, addr, applet.code, sizeof(applet.code), addr + applet.start, addr + applet.stack, addr + applet.reset) { } WordCopyApplet::~WordCopyApplet() { } void WordCopyApplet::setDstAddr(uint32_t dstAddr) { _samba.writeWord(_addr + applet.dst_addr, dstAddr); } void WordCopyApplet::setSrcAddr(uint32_t srcAddr) { _samba.writeWord(_addr + applet.src_addr, srcAddr); } void WordCopyApplet::setWords(uint32_t words) { _samba.writeWord(_addr + applet.words, words); } BOSSA-1.9.1/src/WordCopyApplet.h000066400000000000000000000041561333742133700162610ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #ifndef _WORDCOPYAPPLET_H #define _WORDCOPYAPPLET_H #include "Applet.h" #include "WordCopyArm.h" class WordCopyApplet : public Applet { public: WordCopyApplet(Samba& samba, uint32_t addr); virtual ~WordCopyApplet(); void setDstAddr(uint32_t dstAddr); void setSrcAddr(uint32_t srcAddr); void setWords(uint32_t words); private: static WordCopyArm applet; }; #endif // _WORDCOPYAPPLET_H BOSSA-1.9.1/src/WordCopyArm.asm000066400000000000000000000012201333742133700160710ustar00rootroot00000000000000 .global start .global stack .global reset .global dst_addr .global src_addr .global words .text .thumb .align 0 start: ldr r0, dst_addr ldr r1, src_addr ldr r2, words b check copy: ldmia r1!, {r3} stmia r0!, {r3} sub r2, #1 check: cmp r2, #0 bne copy @ Fix for SAM-BA stack bug ldr r0, reset cmp r0, #0 bne return ldr r0, stack mov sp, r0 return: bx lr .align 0 stack: .word 0 reset: .word 0 dst_addr: .word 0 src_addr: .word 0 words: .word 0 BOSSA-1.9.1/src/WordCopyArm.cpp000066400000000000000000000011401333742133700160740ustar00rootroot00000000000000// WARNING!!! DO NOT EDIT - FILE GENERATED BY APPLETGEN #include "WordCopyArm.h" #include "WordCopyApplet.h" WordCopyArm WordCopyApplet::applet = { // dst_addr 0x00000028, // reset 0x00000024, // src_addr 0x0000002c, // stack 0x00000020, // start 0x00000000, // words 0x00000030, // code { 0x09, 0x48, 0x0a, 0x49, 0x0a, 0x4a, 0x02, 0xe0, 0x08, 0xc9, 0x08, 0xc0, 0x01, 0x3a, 0x00, 0x2a, 0xfa, 0xd1, 0x04, 0x48, 0x00, 0x28, 0x01, 0xd1, 0x01, 0x48, 0x85, 0x46, 0x70, 0x47, 0xc0, 0x46, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, } }; BOSSA-1.9.1/src/WordCopyArm.h000066400000000000000000000005121333742133700155430ustar00rootroot00000000000000// WARNING!!! DO NOT EDIT - FILE GENERATED BY APPLETGEN #ifndef _WORDCOPYARM_H #define _WORDCOPYARM_H #include typedef struct { uint32_t dst_addr; uint32_t reset; uint32_t src_addr; uint32_t stack; uint32_t start; uint32_t words; uint8_t code[52]; } WordCopyArm; #endif // _WORDCOPYARM_H BOSSA-1.9.1/src/bossac.cpp000066400000000000000000000306021333742133700151450ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include #include "CmdOpts.h" #include "Samba.h" #include "PortFactory.h" #include "Device.h" #include "Flasher.h" using namespace std; class BossaConfig { public: BossaConfig(); virtual ~BossaConfig() {} bool erase; bool write; bool read; bool verify; bool offset; bool reset; bool port; bool boot; bool bor; bool bod; bool lock; bool unlock; bool security; bool info; bool debug; bool help; bool usbPort; bool arduinoErase; int readArg; int offsetArg; string portArg; int bootArg; int bodArg; int borArg; string lockArg; string unlockArg; bool usbPortArg; }; BossaConfig::BossaConfig() { erase = false; write = false; read = false; verify = false; port = false; boot = false; bod = false; bor = false; lock = false; security = false; info = false; help = false; usbPort = false; arduinoErase = false; readArg = 0; offsetArg = 0; bootArg = 1; bodArg = 1; borArg = 1; usbPortArg=1; reset = false; } class BossaObserver : public FlasherObserver { public: BossaObserver() : _lastTicks(-1) {} virtual ~BossaObserver() {} virtual void onStatus(const char *message, ...); virtual void onProgress(int num, int div); private: int _lastTicks; }; void BossaObserver::onStatus(const char *message, ...) { va_list ap; va_start(ap, message); vprintf(message, ap); va_end(ap); } void BossaObserver::onProgress(int num, int div) { int ticks; int bars = 30; ticks = num * bars / div; if (ticks == _lastTicks) return; printf("\r["); while (ticks-- > 0) { putchar('='); bars--; } while (bars-- > 0) { putchar(' '); } printf("] %d%% (%d/%d pages)", num * 100 / div, num, div); fflush(stdout); _lastTicks = 0; } static BossaConfig config; static Option opts[] = { { 'e', "erase", &config.erase, { ArgNone }, "erase the entire flash starting at the offset" }, { 'w', "write", &config.write, { ArgNone }, "write FILE to the flash; accelerated when\n" "combined with erase option" }, { 'r', "read", &config.read, { ArgOptional, ArgInt, "SIZE", { &config.readArg } }, "read SIZE from flash and store in FILE;\n" "read entire flash if SIZE not specified" }, { 'v', "verify", &config.verify, { ArgNone }, "verify FILE matches flash contents" }, { 'o', "offset", &config.offset, { ArgRequired, ArgInt, "OFFSET", { &config.offsetArg } }, "start erase/write/read/verify operation at flash OFFSET;\n" "OFFSET must be aligned to a flash page boundary" }, { 'p', "port", &config.port, { ArgRequired, ArgString, "PORT", { &config.portArg } }, "use serial PORT to communicate to device;\n" "default behavior is to use first serial port" }, { 'b', "boot", &config.boot, { ArgOptional, ArgInt, "BOOL", { &config.bootArg } }, "boot from ROM if BOOL is 0;\n" "boot from FLASH if BOOL is 1 [default];\n" "option is ignored on unsupported devices" }, { 'c', "bod", &config.bod, { ArgOptional, ArgInt, "BOOL", { &config.bodArg } }, "no brownout detection if BOOL is 0;\n" "brownout detection is on if BOOL is 1 [default]" }, { 't', "bor", &config.bor, { ArgOptional, ArgInt, "BOOL", { &config.borArg } }, "no brownout reset if BOOL is 0;\n" "brownout reset is on if BOOL is 1 [default]" }, { 'l', "lock", &config.lock, { ArgOptional, ArgString, "REGION", { &config.lockArg } }, "lock the flash REGION as a comma-separated list;\n" "lock all if not given [default]" }, { 'u', "unlock", &config.unlock, { ArgOptional, ArgString, "REGION", { &config.unlockArg } }, "unlock the flash REGION as a comma-separated list;\n" "unlock all if not given [default]" }, { 's', "security", &config.security, { ArgNone }, "set the flash security flag" }, { 'i', "info", &config.info, { ArgNone }, "display device information" }, { 'd', "debug", &config.debug, { ArgNone }, "print debug messages" }, { 'h', "help", &config.help, { ArgNone }, "display this help text" }, { 'U', "usb-port", &config.usbPort, { ArgOptional, ArgInt, "BOOL", { &config.usbPortArg } }, "force serial port detection to USB if BOOL is 1 [default]\n" "or to RS-232 if BOOL is 0" }, { 'R', "reset", &config.reset, { ArgNone }, "reset CPU (if supported)" }, { 'a', "arduino-erase", &config.arduinoErase, { ArgNone }, "erase and reset via Arduino 1200 baud hack" } }; int help(const char* program) { fprintf(stderr, "Try '%s -h' or '%s --help' for more information\n", program, program); return 1; } static struct timeval start_time; void timer_start() { gettimeofday(&start_time, NULL); } float timer_stop() { struct timeval end; gettimeofday(&end, NULL); return (end.tv_sec - start_time.tv_sec) + (end.tv_usec - start_time.tv_usec) / 1000000.0; } int main(int argc, char* argv[]) { int args; char* pos; CmdOpts cmd(argc, argv, sizeof(opts) / sizeof(opts[0]), opts); if ((pos = strrchr(argv[0], '/')) || (pos = strrchr(argv[0], '\\'))) argv[0] = pos + 1; if (argc <= 1) { fprintf(stderr, "%s: you must specify at least one option\n", argv[0]); return help(argv[0]); } args = cmd.parse(); if (args < 0) return help(argv[0]); if (config.read && (config.write || config.verify)) { fprintf(stderr, "%s: read option is exclusive of write or verify\n", argv[0]); return help(argv[0]); } if (config.read || config.write || config.verify) { if (args == argc) { fprintf(stderr, "%s: missing file\n", argv[0]); return help(argv[0]); } argc--; } if (args != argc) { fprintf(stderr, "%s: extra arguments found\n", argv[0]); return help(argv[0]); } if (config.help) { printf("Usage: %s [OPTION...] [FILE]\n", argv[0]); printf("Basic Open Source SAM-BA Application (BOSSA) Version " VERSION "\n" "Flash programmer for Atmel SAM devices.\n" "Copyright (c) 2011-2018 ShumaTech (http://www.shumatech.com)\n" "\n" "Examples:\n" " bossac -e -w -v -b image.bin # Erase flash, write flash with image.bin,\n" " # verify the write, and set boot from flash\n" " bossac -r0x10000 image.bin # Read 64KB from flash and store in image.bin\n" ); printf("\nOptions:\n"); cmd.usage(stdout); printf("\nReport bugs to \n"); return 1; } try { Samba samba; PortFactory portFactory; if (config.debug) samba.setDebug(true); if (!config.port) config.portArg = portFactory.def(); if (config.arduinoErase) { SerialPort::Ptr port; port = portFactory.create(config.portArg, config.usbPortArg != 0); if(!port->open(1200)) { fprintf(stderr, "Failed to open port at 1200bps\n"); return 1; } port->setRTS(true); port->setDTR(false); port->close(); } if (config.portArg.empty()) { fprintf(stderr, "No serial ports available\n"); return 1; } bool res; if (config.usbPort) res = samba.connect(portFactory.create(config.portArg, config.usbPortArg != 0)); else res = samba.connect(portFactory.create(config.portArg)); if (!res) { fprintf(stderr, "No device found on %s\n", config.portArg.c_str()); return 1; } Device device(samba); device.create(); Device::FlashPtr& flash = device.getFlash(); BossaObserver observer; Flasher flasher(samba, device, observer); if (config.info) { FlasherInfo info; flasher.info(info); info.print(); } if (config.unlock) flasher.lock(config.unlockArg, false); if (config.erase) { timer_start(); flasher.erase(config.offsetArg); printf("\nDone in %5.3f seconds\n", timer_stop()); } if (config.write) { timer_start(); flasher.write(argv[args], config.offsetArg); printf("\nDone in %5.3f seconds\n", timer_stop()); } if (config.verify) { uint32_t pageErrors; uint32_t totalErrors; timer_start(); if (!flasher.verify(argv[args], pageErrors, totalErrors, config.offsetArg)) { printf("\nVerify failed\nPage errors: %d\nByte errors: %d\n", pageErrors, totalErrors); return 2; } printf("\nVerify successful\nDone in %5.3f seconds\n", timer_stop()); } if (config.read) { timer_start(); flasher.read(argv[args], config.readArg, config.offsetArg); printf("\nDone in %5.3f seconds\n", timer_stop()); } if (config.boot) { printf("Set boot flash %s\n", config.bootArg ? "true" : "false"); flash->setBootFlash(config.bootArg); } if (config.bod) { printf("Set brownout detect %s\n", config.bodArg ? "true" : "false"); flash->setBod(config.bodArg); } if (config.bor) { printf("Set brownout reset %s\n", config.borArg ? "true" : "false"); flash->setBor(config.borArg); } if (config.security) { printf("Set security\n"); flash->setSecurity(); } if (config.lock) flasher.lock(config.lockArg, true); flash->writeOptions(); if (config.reset) device.reset(); } catch (exception& e) { fprintf(stderr, "\n%s\n", e.what()); return 1; } catch(...) { fprintf(stderr, "\nUnhandled exception\n"); return 1; } return 0; } BOSSA-1.9.1/src/bossash.cpp000066400000000000000000000066241333742133700153440ustar00rootroot00000000000000/////////////////////////////////////////////////////////////////////////////// // BOSSA // // Copyright (c) 2011-2018, ShumaTech // All rights reserved. // // Redistribution and use in source and binary forms, with or without // modification, are permitted provided that the following conditions are met: // * Redistributions of source code must retain the above copyright // notice, this list of conditions and the following disclaimer. // * Redistributions in binary form must reproduce the above copyright // notice, this list of conditions and the following disclaimer in the // documentation and/or other materials provided with the distribution. // * Neither the name of the nor the // names of its contributors may be used to endorse or promote products // derived from this software without specific prior written permission. // // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND // ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED // WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE // DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY // DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES // (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND // ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. /////////////////////////////////////////////////////////////////////////////// #include #include #include #include #include #include #include "Shell.h" #define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0])) static int split(char* str, char* tokv[], int tokn) { int tokc; for (tokc = 0; tokc < tokn - 1; tokc++) { while (*str && isspace(*str)) str++; if (!*str) break; tokv[tokc] = str; while (*str && !isspace(*str)) str++; if (*str) *str++ = '\0'; } if (*str) tokv[tokc++] = str; return tokc; } int main(int argc, char* argv[]) { char *input; char *str; char *tokv[5]; int tokc; char *expansion; int result; printf("Press Ctrl-D or enter \"exit\" to end session.\n" "Enter \"help\" to display a command list.\n"); using_history(); try { Shell shell; while (!shell.exitFlag()) { input = readline("bossa> "); if (!input) { printf("\n"); break; } for (str = input; *str && isspace(*str); str++); if (*str) { result = history_expand(input, &expansion); if (result >= 0 && result != 2) { add_history(expansion); tokc = split(expansion, tokv, ARRAY_SIZE(tokv)); shell.invoke(tokv, tokc); } free(expansion); } free(input); } } catch(...) { printf("\nUnhandled exception\n"); return 1; } return 0; }