From 9d1f20ec3b3cfcda2fe66daa0457dfc7b7cc231f Mon Sep 17 00:00:00 2001 From: qo-op Date: Sun, 15 Dec 2019 21:35:51 +0100 Subject: [PATCH] tag_READ_X.sh --- .install/1-install_requirements.sh | 4 ++-- .install/3-install_copylaradio.sh | 8 +++---- _chain | 2 +- _comments | 6 +++++ _nanodate | 2 +- _publishkey.gpg | Bin 1288 -> 1288 bytes rc.local.sh | 45 +++++++++++++++++++++------------- shell/cron_CODE.backup.sh | 13 +++++----- shell/functions.sh | 2 +- shell/g1tag-v0.png | Bin 0 -> 23388 bytes shell/g1tag.png | Bin 23388 -> 33134 bytes shell/init_keys.sh | 23 +++++++++++++++--- shell/sms_G1TAG.sh | 15 ++++++------ shell/tag_OP.sh | 8 +++++-- shell/tag_READ_X.sh | 48 +++++++++++++++++++++++-------------- shell/tools/4LETTER.blink.py | 15 ++++++++++++ 16 files changed, 127 insertions(+), 64 deletions(-) create mode 100644 shell/g1tag-v0.png create mode 100755 shell/tools/4LETTER.blink.py diff --git a/.install/1-install_requirements.sh b/.install/1-install_requirements.sh index 3cc5068..88cfb8f 100755 --- a/.install/1-install_requirements.sh +++ b/.install/1-install_requirements.sh @@ -6,11 +6,11 @@ isARM=$(uname -a | grep arm) # Basics sudo apt update -sudo apt install curl jq zip unzip htop tree ntpdate gnupg ssmtp mpack imagemagick qrencode bc libttspico-utils libttspico0 libttspico-data -y +sudo apt install curl jq zip unzip htop tree ntpdate gnupg ssmtp mpack imagemagick qrencode bc libttspico-utils libttspico0 libttspico-data python-fourletterphat -y # Silkaj + Duniterpy libsodium=$(sudo apt search libsodium | grep -v "header" | grep -v "debug symbols" | grep "Network communication" -B1 | head -n1 | awk -F '/' '{ print $1 }') -sudo apt install python3-pip $libsodium -y +sudo apt install python-pip python3-pip $libsodium -y pip3 install duniterpy pip3 install silkaj --user diff --git a/.install/3-install_copylaradio.sh b/.install/3-install_copylaradio.sh index d12e12e..9565d28 100755 --- a/.install/3-install_copylaradio.sh +++ b/.install/3-install_copylaradio.sh @@ -11,7 +11,7 @@ isARM=$(uname -a | grep arm) ######## YOUTUBE-DL ########## sudo wget https://yt-dl.org/downloads/latest/youtube-dl -O /usr/local/bin/youtube-dl sudo chmod a+rx /usr/local/bin/youtube-dl -sudo apt install libid3-tools mpd mpc lame -y +sudo apt install libid3-tools mpd mpc lame omxplayer -y ## CONFIG MPD @@ -57,8 +57,8 @@ sudo systemctl restart nginx # etc.... # INSTALL ROMPR WebSite LINKs -#sudo ln -s /home/$USER/_CopyLaRadio/www/rompr /var/www/rompr -#sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/albumart -#sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/prefs +sudo ln -s /home/$USER/_CopyLaRadio/www/rompr /var/www/rompr +sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/albumart +sudo chmod 777 /home/$USER/_CopyLaRadio/www/rompr/prefs exit 0 diff --git a/_chain b/_chain index 85768c8..33d4fcc 100755 --- a/_chain +++ b/_chain @@ -1 +1 @@ -QmYS8rkJee27cXLy6fbZAoweBFHNUkfTZ4V3YrWfNtWFwA +Qmad8nh1sLJJS8UtyXQJ2GzYrv768dDsBfwhtFyBjXh8Z3 diff --git a/_comments b/_comments index fad95b3..9cc3739 100755 --- a/_comments +++ b/_comments @@ -166,3 +166,9 @@ OK 2019-12-10: 2019-12-10: fourletterphat 2019-12-11: +2019-12-14: G1 Tag READ WRITE +2019-12-14: Install backup change +2019-12-14: backup +2019-12-14: COMMENT +2019-12-14: +2019-12-14: diff --git a/_nanodate b/_nanodate index b7d14df..d0acc79 100755 --- a/_nanodate +++ b/_nanodate @@ -1 +1 @@ -1576059397859243783 +1576284752579254475 diff --git a/_publishkey.gpg b/_publishkey.gpg index 817c0b5bcb7ab64a257378f6bc8d119d5f38654d..8927cc32575f599cf1239609f08309603c3c6fc6 100755 GIT binary patch literal 1288 zcmV+j1^4=l4Fm}T0`djj*K6gioxsxS0n}#!K`NZiSKwOvpFzc%{<3|-e3W=m!Ui|| z$8B8I8f8#@E4-HjK+Uy@4-6dOn1^m#);!;;UIgI7D9%J?@f(J?Lti-HN$;abVnz{5 zLRix{sHQ+e2_Uf*z1x;-r;UG^a;2T4_$~)ej|%O!qy)9CM7U2?t#q&yub4L-vBY{t zvg{(yr``rh;#mL8DKsOY;2u~fmKkEOC{53kcNL0sxd4|GTe8~0%e3tk`(rYa;w5n2 zYNg!RleCAzZG%Ncj^3LrtdKCE+wfEV967QKu*+66{P!;KiSaUE@Q(_@~S5bdw|)Zp zohX7+Oldp=hS`ie3$5X=xjS5`1&K;snAk5?x(3qVkW95ieBDSd-f7cR*Q4c+#yPvX z+M#=b!b6uvI)tt4({PqLCHBX8N%EX@vWMaH6FQO1kmJoK&@C*;tK)zoy0?$Yt7w6h;HXj(+ZT~fFE116La7t@gcZIG)7RD^lSF0&ZL?UIEl zZhvjP7{9z&9_wqmZu=)GX*0iUI81FJJOGY-`EJF2ve`fNXr!F}nr7>=!5B_CCUIZx zD?!+l=jla{MjW^npADhf*59u`%TIGpd!OzC2eUBSA>hI8-V$$e(|)V}6~vl;fr{9o z>Ixk8QX>{29Jp{@3v_WI(naFZL#&+)6u3ak?-hd@whqRrtu4Z`F1yYJe)`SGTZ}oH z$ga1OE6u?maxyD0>v>AyZX?)%-oo#}MBAC6YScpsKe^eP1@U@VKTijY`$`eJ)14yk zRQnr;ih7vk%+SnU#qYttdK$8|%7oTECdDyPwHE;9*}&mW-Yhcih|vVLCQqAz%Iqa zN`fBbY|boZz%}85FskzKldD*o(El=0+8aX}iAaLEz)w1Wf&^-O9FbPASclp@4pKu=w{b;Ykl>y9*{8ynyuCDFEE{NEK)CdAbrn(G()uxml$tY4A&l zRLuLuK2j&Z>&+mI^01>Y7auWcQO#Xx#drd^#J_pm3~dc$hjq(n|% zMo9-bUZ=41I@Kt)ka*aV!Mi~#g*U-yDl!ujk8BOw)HEQ)Bs;)l&F#%)>k|S7Yy~|_ z2{f$Si;vIM7ijh{M}E`>RWCFSWlqKt1nfF|5Zw2h#l?9?Z<8mD!!?WrjLZjpKWL^K zHt8BRyR3sEjQS?wP>B3hu3i!qoPTYtl$u2;DD?;h5n=g(92V>8%KsHZ=6X9qk~qv` z$X40p8D`NGX5SJNQ9z^HqwGnAtgh6zA->MQ;FD@vB zt5yUh3(U==VRj|)IOW?~+jWnb5iz(J3}{yM4b7t2|5i`gy^@a`Xc~%4c)PWldtTab z2`kiW|F*TqE8FBP3dae2E|J={Xy~NtLc@x3UxKx3i$jR+q?}rh+rNbDY~wTa%PPkk zZX;L}q@T&cV>G8Mj%;Ma3?D+pZ1^2UbJPp~YBv>-Ue{z~;A^Z_h2;L%HN;7d=?pQo zXCLUjdI=C;?|vlRhg?mXp(hd#8XvtM%shL5CC{LWkzV>+lL8;t28 zmm(RoPPqc-%vdCIkc^cG_0UypHl~Hep|zZ7%%S$2s}+_j(;e9#9kgVxO2QUg1WU9)YGDB?D3 z%zlmoLmE3Ila3v|q`p`!10?}giy_S%mmYrOz-hx&SDs|dnX&j+JAs7lerAEETUm!shn7#Os$s`V=I+$0)U5%X0>t!~bI=G% zU0nPOD3@cEz%|vi$E6VZVb{-qL2_g+3J%87)BHhXGk(unnN~_d2&vRZ; zFdL$TuP7MtpE#&Yp+}dpKcZUOYjUZWFRnD#O0#)zUJ4*1sHapBjAuQ`MnyxAxjd%t z^#)dvDoV4>4uF*XFt416w=_@e8EiXo)&BLtKqxE%W#@=U`#AHxw52C y3C*2au`4UN#H*j-SBw{%Xd)XV7+#(!js%yBCB^c)<$|6<*r?}Z&)wzC$$Wv0*>ouY diff --git a/rc.local.sh b/rc.local.sh index 92e5d00..697c30e 100755 --- a/rc.local.sh +++ b/rc.local.sh @@ -1,17 +1,28 @@ -#!/bin/sh -# +#!/bin/bash +###################################################################### +# Author: Fred (support@qo-op.com) +# Version: 0.1 +# License: AGPL-3.0 (https://choosealicense.com/licenses/agpl-3.0/) # This script modify rc.local to start G1sms+ G1Tag, G1Tx and _CopyLaRadio scripts ###################################################################### -# INJECT it self +# INJECT it self into /etc/rc.local +###################################################################### +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + +###################################################################### +#################### INCEPTION / INSERTION ########################### ###################################################################### inserted=$(grep -Rw "rc.local.sh" /etc/rc.local) if [[ ! $inserted ]]; then - sed -i s/exit\ 0//g /etc/rc.local - echo "include /home/pi/G1sms+/rc.local.sh" >> /etc/rc.local - echo "exit 0" >> /etc/rc.local + sudo sed -i s/exit\ 0//g /etc/rc.local + sudo echo "include $MY_PATH/rc.local.sh" >> /etc/rc.local + sudo echo "exit 0" >> /etc/rc.local fi -###################################################################### +###################################################################### +#### WRITE SYSTEM STARTUP COMMANDS HERE........ +###################################################################### # mpd Runs like pi and some rights are bad!! chown -R pi /var/run/mpd chown -R pi /run/mpd @@ -28,33 +39,33 @@ chmod 664 /tmp/youtube-dl.log chown pi:www-data /tmp/youtube-dl.log # LAUNCH BUTTONS WATCH -su pi -c "/home/pi/G1sms+/_CopyLaRadio/watch.sh &" +su pi -c "$MY_PATH/_CopyLaRadio/watch.sh &" # LAUNCH COPY SCRIPT -su pi -c "/home/pi/G1sms+/_CopyLaRadio/copy.sh &" +su pi -c "$MY_PATH/_CopyLaRadio/copy.sh &" # Print the IP address _IP=$(hostname -I | cut -d " " -f 1) || true if [ "$_IP" ]; then printf "IP address is %s\n" "$_IP" - /home/pi/G1sms+/shell/parle.sh "Adresse IP: $_IP" + $MY_PATH/shell/parle.sh "Adresse IP: $_IP" youtube-dl -U - /home/pi/G1sms+/shell/parle.sh "Mise à jour de Youtube DL. Terminé!" + $MY_PATH/shell/parle.sh "Mise à jour de Youtube DL. Terminé!" #IPFS YOU=$(ps aux --sort=+utime | grep ipfs | tail -n 1 | cut -d " " -f 1) if [[ "$YOU" != "" && "$YOU" != "root" ]]; then - /home/pi/G1sms+/shell/parle.sh "IPFS OK. Système de fichier interplanétaire activé." + $MY_PATH/shell/parle.sh "IPFS OK. Système de fichier interplanétaire activé." fi else - /home/pi/G1sms+/shell/parle.sh "Connexion Internet Impossible!" + $MY_PATH/shell/parle.sh "Connexion Internet Impossible!" fi # LANCEMENT G1Tag READ if [[ -e "/dev/ttyACM0" ]]; then - cd /home/pi/G1sms+ && ./shell/tag_READ.sh & - /home/pi/G1sms+/shell/parle.sh "Lecteur G1 tag" + cd $MY_PATH && ./shell/tag_READ.sh & + $MY_PATH/shell/parle.sh "Lecteur G1 tag" fi -if [[ -d "/home/pi/G1sms+/www/rompr" ]]; then - /home/pi/G1sms+/shell/parle.sh "Jukebox interplanétaire accessible" +if [[ -d "$MY_PATH/www/rompr" ]]; then + $MY_PATH/shell/parle.sh "Jukebox interplanétaire accessible" fi diff --git a/shell/cron_CODE.backup.sh b/shell/cron_CODE.backup.sh index 713f044..43f707a 100755 --- a/shell/cron_CODE.backup.sh +++ b/shell/cron_CODE.backup.sh @@ -9,6 +9,9 @@ source ./shell/init.sh source ./shell/functions.sh now=$(date +%Y-%m-%d) +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized + echo "COMMENTAIRES?" read COMMENT @@ -49,12 +52,10 @@ echo $(date +%s%N) > "./$dir/_nanodate" echo "$now: $COMMENT" >> "./$dir/_comments" -# TAR ALL ARCHIVE FILES -tar -cvzf G1sms+_backup_$now.tar.gz --exclude 'authfile' --exclude 'init.sh' --exclude '.git' --exclude 'billets' --exclude 'constants.py' --exclude 'TAG' --exclude 'history*' --exclude 'trash' --exclude 'print' --exclude 'wallets' --exclude 'wallets_swarm' --exclude 'g1sms.priv.key' ./$dir +# TAR G1sms+ FILES (WITH EXCLUSIONS!!) +tar -cvzf ~/G1sms+_backup_$now.tar.gz --exclude 'authfile' --exclude 'init.sh' --exclude '.git' --exclude 'billets' --exclude 'constants.py' --exclude 'TAG' --exclude 'history*' --exclude 'trash' --exclude 'print' --exclude 'wallets' --exclude 'wallets_swarm' --exclude 'g1sms.priv.key' ./$dir -mkdir -p /tmp/CODE/ -mv G1sms+_backup_$now.tar.gz /tmp/CODE/G1sms+.latest.tgz -cp ./$dir/install*.sh /tmp/CODE/ +mkdir -p /tmp/CODE/ && tar xzf ~/G1sms+_backup_$now.tar.gz -C /tmp/CODE/ && rm -f ~/G1sms+_backup_$now.tar.gz # PUBLISH IT hash=$(su $YOU -c "ipfs add -rq /tmp/CODE/ -w | tail -n 1") @@ -67,5 +68,3 @@ rm -Rf /tmp/CODE echo "_CHAIN: NEW /ipfs/$hash // $hop PUBLISHED with \"SWARM_CODE_MASTER\" key ipfs get --output=./ /ipns/$publish" - - diff --git a/shell/functions.sh b/shell/functions.sh index 029b79f..484bf4c 100755 --- a/shell/functions.sh +++ b/shell/functions.sh @@ -358,7 +358,7 @@ log "__SUB:sms_INIT_ACCOUNT: ($1=phone, $2=NOSMS)" # ACTIVATE G1SMS WALLET ####################### # log "$MASTERKEYFILE $PUBKEY THIRD_PARTY_MANAGER:$MASTERPUB" - TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=3.15 --output=$PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$MASTERPUB " -y) + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=3.24 --output=$PUBKEY --comment="[G1sms+] $UIDNA$TAIL 3RD:$MASTERPUB " -y) log "__SUB:sms_INIT_ACCOUNT: G1 Wallet TX IN: $TX_IN" sleep 2 TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$PHONE" -password="$PIN" --amount=0.1 --output=$MASTERPUB --comment="[G1sms+] $UIDNA$TAIL 3RD:$MASTERPUB:ACK" -y) diff --git a/shell/g1tag-v0.png b/shell/g1tag-v0.png new file mode 100644 index 0000000000000000000000000000000000000000..194c74304388d8b57346b69f41f3975fe7fd0d2b GIT binary patch literal 23388 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Ⓢ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 literal 23388 zcmc$`hd-A6`#)}P$(F3F>|`Y~vLeZz8D(W9Br~Jz6+%dM$X+3vkWE(hWhEII+3S0p z?)T^SFZ{Z1b&tozdA-JQJlAoBJba)?Oh8M3hK5FbPf1P#4GlvN{&^D*2Y#RWLhA~D z;5=4QltVj5{z|LQiG}}y@2I5jjD|)?j(nk`C4HcQ|A^~yPgNdwfe?ohm+dljqyZWl z6WTpF87;SowR(3it)=>d^N*5(u_#O4k1v!T<1wve*NK zeQE!!4_(x=P4zOC43^4exe^7ePsaLOSnL?t^--L6E}dpR?EE%z{2N2e_em3j=`BYz zQH&33r;^M){!GE9`2KG>dg@!=k@R3$VzM=9ose>S7Avjv`yPiC@6WYJ7wBPXVb=Pt zH_4pbjhbdQym*c5d{N2`6)cq~X+;|{eq6mD#~*ObQBjY*)i>CrPFe$do35EY`I||b z+baE!ql^vDA1|H>Pu=VrV?+{$7W$4~`KDrCL4D(S#;mm0fpfWmC-y2i>Iq6SO~zd1 zG8QS1jMAF$3-*^^El&=$2z|qRl}|!eL~2Y>&C)E-88;a=9g5v5|8>2G-A2AKI?;jE zX)k&_y2{qFcJ|Ivu$Fu%$$3vJ`9Y?^IhNG7RH47`evw`*4o)Lq!|zsUoRh)4fTp%4 zX45()Z8?sEpv(Jc&oG|NMcKSi9>Vi?VfAP7s^Ldp@ZIqx^s6}_^rg*y8pvkw=)j8k zjQoJR1lwm$vvY_HdD6=RRL!*3RCA803n8RFgZ-3E76&`|0*g|You>{66B{t=(Cyl! zxuZqBer+9zzr*{BNTXBYeLi*FU5$g>T9adleKEaGtb>r>CX)`uk(FhhJ&^J($_q)5FTkOPoJK`ZgW=k6*uv{rU4p)O{OX$16&AiS80EUjp})`K4xQ zmjj>rsP*~`He|_~$*|^#S|fcpHVsb7F`UVt*Tb`vm6dUDab@J@2G7qw4h;)S6naW_ zcz9@TZf;sW&Y#@-zSr_TyCzeTun~oP^TO7@5XZ`@s-b~_rn%Oj+isgo!otGCqoYm- zn`X4Mw3~-y29KHp8kJ8{{Svlr^s{U;|F;med=wF5y-J}JdYd;)cC=BnCwE_eb$hgG zS)N!?A+)`-!^z2MHd>&6KUpNAGxoaX!-sb)E!lBiUn>aa3?&n+A-Hase!O$&<>Kn9 zp{uKCZ_n$wzhSYzF}*fb6Z@nia&UB1K}}7qj>U-JOyd$G+Ksv5>=FL(eq-1MWaDK& zTp{)<)GhcmUtG;_oE-Q-(b$+_C`T=)uI@uErj9)&7{tWHM7@uMa4*rB4t-L!oBkRn>AB~4a`0S&L9I?cpWy&^)6i7% zY|%{yN&(g!q4y&WQlsmgXP=(6HNNYOI9Sz>2;Hr;7fJ5y>UwYC?ALk$?3{3Ksq@ftn-5J#`8=L~g5vRgN`AJo;sCt_WKGBTdsI zh#y)p?~dm+x3Iw8%hX=f8W(%^y? z_;0eEJ|;U+YEOuxfWzj4{{g42e(;T%bhtvMfMpNOQVZb?t&eW=_!c|AdX)_gljmJ) zDO3A%4(E0~D5E+uU0%H4TpcUcJzFw4lkfcg{o#+Hp*Y*(dL4MzLGw;E6vbotZuK+4 zGvY3ce>~mljhBY=G`lp_B(v|QN7d_P1=k% zay@(2c>2X@Iprl6Y_={D&fNlel@-cgIa`XX7Vl)B)x5>i`EV0W)9)N7a!)}ra5_D? z*V1Bpv9rs*YWma3`ZFI*xQEPq-;C?w40>;%deN^ML>Y;hb#xqv%J$tz3*|ba_slt zr%idR7IsZOYb>m&sF0J?qUMo+%Gp))sPR6%|c1`J5q6u@t_w=Zi~AoG)j+ ztIEt;ak3j4jAJ)*{aud!J+*)n*p(S2^;t_x>!17VfVZWE1?R14m)J7z<2_&VJbx;C ztisw_!^6c`wRegP?sA;m++i=|x^agwNEU9;aO1UHaUG(s~Z?}Wypu=l|IH^Xpd-J-bv?BPGidZTG%>=dQBpQdggO{ z)$ohm+~!;>6tBH|uDayENA}T5#_fzeRVJ4z9ySvc#$`XQG)R>66j|tq!fkS>icL+8 z8d}LJEhSCuS2Q%dI{C$Z;adp#+%voSW1T2oH%6S-esB(u)8X9BTg4CUN@|i=kw4|Z zb-13(ak|EHjOPa(z8%!ql1;O|si@+_rD&DAa8M7JeQt+XT^f}`Jx_}?yM&)~pWR}n z&i&$!uFW<||M|A<7ufaX*=&)~%jp-&IyyRyW@7cm#n5xxtc7eCWQSHO8G0J_VX<1rT)IN&gG*zLXO&Jf?#rC6 zwURn_10@f3%J?vQobU;dv$?pfgL6Xno3_Y^l8TC}YW7tva?aXTTogXsmm1E@&X(6N zw~Tl!ka!ewslLXzIm*wel!nzudG&4__wH@264}`y%W}?JGj5q>wqr%_@pVe9*T>5h z-4Eu1;+_tDl7As(#$bFBChtRk-ZJga6#kIt2bMp72D6@68krkjHC>7P@r*)dw0s!V z^S|}`PD84ATz7Sbw!_8Eop|$!LgNDMgX7;WVopv@@1=dD*x1+rAVkvL_U~Sz-I(pL zPRr7*cAYOy{T~>7Z4?#er?`2&GDnVE7uvj$_wI<-e(mg1-A*41podS}m%}^FGpeg; zqB`!XsuDkX^eAcZNy#bhvYI^it@J~aKj*L8xY^hO;6gr!Ga+c%^S-(wdfe_)b@lth zo#iLxfv}Xie5LUQC3w&`p_bjvtRHhtE8m&9hu-bQLIK?4-c{I?CcL>FGA_XT~WIp z$93#()6I_C6g)Deq909Hh^qb~*8&Q))1W-HS*e~-{n(w3LdvkVmWroC@8NWkbg_!{Q_paBjY>|wDSr7cIz2)s6WX2_gWU8y~0mRexsQn zKJ(o>3OkXjySux?BO};0G64#2=T%Fz@{Wo42-P1xY)W}K(|N1$P}NSvF!e*B(gbIc z>+p&Tluvbi{d)kN0G0^}3llH9*x%ti>%2S}trUO3I*fdH&>Mmpl|8>XWsj|L^71Zi z)c*Z7YWOTWE$xnG4x?=|!Kadvw}6SD42rt0(b(JDbA*!7d=Aes4G4Re_o4*$WMyTg zCrLQWbE76Gzqlc(prAmigFM1qe)5xRZAzk`mB91)Z@zCYJ^4P+w;Wwiuk_&JXSXC! z(3jx(^o^8RFMa;}IaJto)Uj81?2W3qTA=9_A{^uh-+IPSQ&aQr-#-LdO*y>$`5_mT zkyc8^tzG25Uj=1uqi*McL(LMEPJtdNjV$p4f3SvdnQ#_Uv@_JSFT#!+Y3$oWO^#6FNg) zY$QtO=80&Bqgs@Tnf)PWW(f=%`aL zPz)%WCfb$uD_5>~ts2hG`{6RA0s5X#uav`!|4Jgfe=ldqOo;Z1^ec%l>Km4DGZz;Z z-$qCKO|EZLDeaUvSmR*Ak+xd-kzHV1p9I}IIF4Ia;MK{2l)dl(Mt?LBexTH283O}a zxHr$a+?w>WdZt2jN{Xth zs|dA`Bl`aIOUBu=y(;|*Yf@OO_xC?tiydQ$%W|vCoKPsY>}`P^d^Rg(U}%`>!F@tG zyW?wsvVLn0OdM@-GK7g0hx=@IfdPwM&SO10C&&4Cy$bmfbeO6(dw~j(Rnh8N-TeVP z&=^>8(JRzRN>09++ zfZM%pdz=m|YcNys3IDg{+9whd&(d6N92|aCHJG2-2-C{TV@*!xsZV|@N@sleA~NylA6h^9IpY9R0;oPv zny8m(xiLRBnM7X8$l^@yZC|gN?SoR|-Y!>^5uHCEo7%jakJ=$4z@+4+Upv9!Vit>; za4gwF-Ud`7Vl{~^tQRj{3~pqgA3Xn?NgiT~FFO@Y$0HMbBcN$o?&cGIVc|I2qMAU@ zzx4@Q3muBn&DU8xDD#Z4#_|cI99}nHc8yQvGI<@M^ZReCdf+uGy~5F^H-Xc&FBNMm zBI$j89A8T_;8VHiC4yH7H|}^Nt>s;J z6-O9lO-b?r+Q<{0|2!V#P0M8(r7@BL|@ zb*v9;3=z#XVtP!!-_O6(^^9;8aCIy(y%78ZVxaF6-)i5>KW zoChfx&=#N|#>U4}ap(XC)KXSf28qP)OWC*`s0H5&jqaAg=|>o*_(t_>cn{^S>l4;9 zmK2++Cl*&{{>Jg_M%krVUGU>;D`UeJ_5PIV*?Vw69ctG__^MGDAT*>t5Y`z?cl#c5 zB=HvIUT+K!L;w9MoG;7PK;pW?U&(9Z<+uPGJYbGoGAX1FTvP@)55|cD=Q1BXd^a~EUYeRMnaVJ#%l8N*!xq? zB*etTTDppHbwB4|CJ&2BgPNsyLpOkYot>S7 ztQdFMTs!W5YFQVY>W4b;ASV`{X{+DoEEeEpGAy2p7(Fy`Iw`OB8yg$efz?9kI&P@~ z76jwt;!c2ans>e9#8eQ72{B0MTHe|1^d|6Dg}v?V z?L`C&xW_@fhF?m2&RpZb*sWenkA(TF7CUM&vw|ZWi>6Ar(&>igM3o^&GFDCy$guTZ8+fTcR_Qba7spa0< zxWr}?=DUOhlJ~<>Waiv@BK|C5p&0{%gUu6_w(d~N-QeqBr1(|a(eCPPfEd7&Lyp@; zmCCAV)x{lAXjgAJn2!}bTAQiAn)09nBryPYnDOCg7=vG;g~W$!Dh141ur4u5^`zeo z%7`8-m|0faq-LVLkUJD8zCG}f%_ zY_sz5Bm1jfXLAIp?AsEuSA=aSVAl`<1lY871I^;XjXPht-Cmk~Y?b^^S*}jUEy8hV zF}Z1|*#QUfFu~`LTBq1p6(l@4di#tvF1OjwX?6QEo+nU0=W?V^Isew}T!Q_=WGFT+ z{;L}&8U2{dgQpn*qOf(FGoF7-U;Z^lgMP1c@7~JswV*3h^!U*{DGwCQ%&uJudR=H( zr9gXgcqI7l>6(O_m z01|sYpVaM+8p5@A8pud!ew@J`-XTcBZA7Z^Vm7@aV}8rc+TPw`xi6)_uqv`Oh~$Y7 zEoO$WmSmZ^T$%s=Q@Cg#9zy+x6%qWgH-e6RN4(^UPfIPF6r`xegwj`I9&nKs2)~bw zZJmBO+xuBNUx>oLS||I7E-M|_Z>v+e%|r+mJA38Ft@TIG0?PSWvvH_1ai^%7kfjYy8#L( zDl1+DbP3%Ch%k3;oCj?Kz1`+i;h7L^&Dqhae!YkA)2B~K!|rB?JLU{^eo{?#n-96} zw$(-rXHzdVSiAZOt#TTfaO}glJX2D@{R63oUI>afTr2PYS?_rZFz@{QJi3Lb{@v8{ zC@5#}|HkXwowLdbUK|j<{epHCU2UL$#0r`rvKOpxv`{8~adMaIfx<1E9siB8w&vFt z91{~4cRyOmabGL#a63QUU)k7*Osrp>s&B(}Yt~Cp*Vx@6 z)n?rQi#uB5$M|?BE~8hIbH8NAPQSF8z5RM{Av>dO3-J>XVPWLx13iy~o|Kk`Ry#d& zor_AsRv@t~E-^8r)BG_AcNJg0DAe6XePe8M5^!8p{-4^TX!QB8W_x+aq~pL)BRE`spWRU#a| zhJ(ir4Try^2+0+PnmbgAKtDZLQS<34@0XfMV@(QEtON1royXp+-^U;Mf0qrY8J;Y9`YbZxRK3fAm# z)g&hm&o^^{fVh0~@A1v1Op=l*P$Hb>zlA8>Qp26_jXJ2~i~ryKoDamVzEaH*v$~9+ zsb9&@Hp+>*mELj}k9BWM*B*ANy=p1;IklaboNVnHF=e~d5Z+?JPcyK(3!VeC`nCq| z1SqbJ>vAH9+wt@ir&ysF zs8e2EX2eUY0_B(t4&>QEXbq~{?&1a+7<-SAHh{F0;QTOm9iAH>G}J`spCGnfy%}R6 zMBCZd_iIQ^dI|bOw1WdK?WXR_edhn{jyIxa7)5`)v#i%qe6?!=4s}}!Yp$N(=-uiT z2~eQApZv>_URp{p+0dL-PQlOlMG<1Od+sHh-;4>H52PQc>?M7DeHPgg=;F|@LBK3= znEoo0AViD$JB?8nRiMs+V7tqT+kVHsWQDUcgoK1OpcZm)bE|l4XqQk_R90^F2=;I8 zq@I81>+37oW^$r*KOP+(M!D7^-yPZq{&_g=go%v}7o*R~O@Iod_MtusbFWNsW7haC zzWMdOwp5>Nckg8Fe4Xbzy|+kyj>he?gth=MI7B)r9J%g1%^ZdM3pS(!(UEZE z&d*MvV}Uvew@H~1U8Q|Z7McWbGq4N>dD5RWo0QF^-l>|xxG2q!BkFaF`V^j+4Hgve zK!fT%Ioydg*jHZv2|_2>OurPRk4XC^cJ2%9M$d9OkPxAU0+?Ivgy5gc?Xc#tV zZ4Mj<(A7Wjk8&#Uo#ri;<)yDqkCdqWN6|%2%JHK*?eAO^;L-co8yEx?u6uxe7bC?t z@RFlqm1;D^U&1j1a@!TFCN+M;DX!RjY)qe(2?dyJeNVwXXjvYTy40a*mD5#YD= z{VUhE>4uF8FmW%HfEoqI8U2r+s#gPE1ry%gv;_9cZ_+W*nq*C5Mv2#4#i0UR1HJ2B zH1`YpI#f#+p#W12nz{qBD*$WTa2CI-1!aO zir1l2Z?{kY-e}F8qA7y^*6bdwBLnH8F(oDCb3jH$K(&q>{-0#Fz z-m{Y_d`!)yGZ#386Y9VwSe5_fOFR_e0C?^_XTTgS8K9|6wqlh>M)7`oTb$Y3j72n7JkUMnYw z(TNQovtdH(y!x!JS^E62Uug_0{5HrOZDG`!T3QqX?zi z42`|ipwO?abaHZXWo-?V>*)4&1;A4nttsGoJ`8!qI=UhD>O{2hbp2T(=t)p02q$qu z-adlkudYrS7Z-N{PkOCT#po|--fA~q)T2Oo(z7`kRXD&80glVa$Y?Bb0b+MBesyT^ z3Ix*K=qMD2a;_a4S;~W;Udv2i@|4^<;NAreTC=jSyoSphlaMf`h({^kyyWy8Q~{_{ zD}Vm9tnSY5dgK)sFW>MvB=p={OV7-FA}3esKlW^Rbr;Ip;LuR)zXfGAH7oFt>h>mV zp=8LHJ!O9w&{*b~FhzTD)B>Ho-_4u6d`J$}h{w3DTFuFmIh)HZrTO%Df9HqFjooBn znjS|v)+vmEX5n0%e8sr<_;xV(+JLv}f3dp)#K$|->C&(zcot=40$p8Q7{@x%9E;})Q`JRdMBn^V?dy&EAfFW-|W7?dLZ zQbA+<5edb<)PwKqGT=!B$8R;^oE)-;#&^{3&*TGy(J|-J6MPavh6xtPA#^U z+)!c^OL=gUhA7mycpR$gzM4g{ zkDeR1XME1Rzt+|sSLixYaJyM9nFib+8N(te1#|7DRUciS|m*Iv5aIvKy8UcRZ=@XB7=CyE@$M6eL{zy{EkIT)e&AIBC z)vyvsvq$do;ZW+?H$P0=qs3>~%S8d9Dw~cuM|klnnS)C3hHp(dVuG*Bi+FI4OaHk? zeD!8smiqZNHNM}u^ySFs`G83K`DrTD(xcQ|$jeaNFo)v~^b_>=>BG zl1WFhH}9%bOgY?o)^N!FxAFW{izRNLa_obgC*aslIkplbuF3rrG2yqK?+U&eilsz? zF0wOlm*l3;nb)h61;(90MaDU&8XVrUD@iI;JO<#QLB50U>u+Xc<-xUJ%=P{>xT=^@&RFjO(ot{zPngT=1R| zyaG%{Q(r&vU+&1Ab#ozFebBw4B)0LOJ4ge?J7wiIii~SEH9a}l;xVWQ<}RxCFZNpE z2I1z-qXID(rRS{5@v!b7Yfw;9%5&*inzEl+IRCHg2t8>sF?FdJB}VciTwKb3wgrI! z6JHe>7#^nheP)^^L+IJw@&5FZ82?eOV`kcQlju3{O2;=)247(9gZPt8Eb;9n~ zcK3}O2o9y5pDfdfyAo~cnxuk624=|eeAtaoSy@qbpUDy-=YKkH#ANKHPT3=w<*)4MCSHocfrjs-SMNt0u`o zIx5RY-1VgO_kV#oOD7M;B#$3Jupy5zn==%eL-QuHwl?|C9~;QvplHZQ>ovlH!AJh6 zKA+zAZ)kP*_pXOR1Z^8{)l`c`!lS?p4uCbgo#nLnVTv7LAjE_Dtp)-rYjWaNv5P6j zlvDTRH)p@I@v+hw7lKVso8d) z|G13G*IhuDhI7@uU&V9OU;x_#V+Vop^JV9LeV*XI7`-}N@?QLNKjv+E7N=2SfMB9u zUz<&(0*fBnlTAerY#F@QM5F|==Qrq|cr>PyguqRLqzBxde=FY~v(Xxe?Slfjw=sQ{ zrd|0B1sD^3Qpa{s4f@~fJHIZR%#l~_8$QWTFVW+nprDWwERZ1Z8B~|KjPv_G`1f>z zZ-b<(%zslS_bx6k?{kV=>3*QM>fhKLAV7Xi4}wU)VpRC>S@%*`=1CnQWQ1Gda=pID zrP^+`j6g~N|Gq}B?_hn*f5tOW2<7)t4|_0$pbk$e@{>(pdFkp3Zc6-sw~n^ zsgOfA1b0hrIGse1LUy(mj1e%P5+Wlb->+Norvs@4bFR#KFylsno7a^$T<<_mv<}3J zs5epgPuaUxN+uJ6Q#<_tq(fN}{_2O8ii)_dIOj-!u22gPEC-Tmn`r1Em%-u&YBX0yYCv^OT>$r?p5FJx&RBAd z?=JkMWHq6@P-%g-DoN}9PkyrgYg=JVZ9{4I!f!z?SUVRD@oR>L$j7{~G=Uwe7De*^ z5XY$hI6OQowWJ{QIC}IVaxySsX1!sNvGy*5EY%T$SML=DhOfBHF<$|h9Wptrk4hTC z@BI#eM2X@~6_3i&h0SN(LKR}FUpQJ#l0Y0^vhE`GB?;{a=j+2 z8M^UooR9Z9LUz*vD41!OEA)8qI~57~ZW2%xg53bOyJtVUPnk&9P4nO}+0ty;{~AEW zu3)qgHG3>4=a2MI9S8-kudhG%JdftmX7(uUuohAnD&qX%zE%%;kOcUpwsTYsN< zyBH^iKwka##zy<z zmuU@wG12XDQdW2!NL8RHflMVJAW&jZ2-*jjNm8jK#bYX<%K;bwuqeSmaw#Y?mH+d) zH9yU!M}4(X(W?N%kyBV}hzdaV$1Fg%cq|rlG|1kRmzU3489k&CNhO-Fn<-Cg+AW?KP_|2OtS0@M*f$I-)$jis?D=T;T z%8pG;gpS)GP$2c^k(U(MK9=QBsUsfbwAzX6lk+5W2S7CCyH1HIRBI@V)vHCd5IT9) zk}dp0)uWjD!r3uXnu^AY?^w9^Cx!<|BMCRw)*r{$ORVEAFJG2}UJKXdh}bGHOaoh5 z7NFU9Y&u!?msZn8k{PRNS7ONqRIVwQA*aRgK z!G)WTUu4+uQdDlK1r`dqGN{tY=lkbpj0m;lelw^wP7>itOm!N%(kp6xAfTT5H1!!( zy-)Z5Xi ziL55!y?#9i!EDZbw{z4yp@H0fYs#kKI;t;n;2>#)Y3Jp1q~rOsPeA+r{rh)X z&h-Y9`MaxX*xiPjn&i{dA*&0>QT-_Ci9x@m)YVA~vS`(m6QQ=Ywv|ivOL=t+{DY8| z6&K{&tt{uEsY07ZQg8#Z*9S;LOxw6|mDlZFtKj7dq@PVfqAejIp`;zEiy1H@vrN}} zjfpF}fVcnpM|aifFOfHI zCmdTlM7mWJ=jgwh17EckeKTz=IE(8a8dwZLV zy$Gl|our3QlIkjwVnAj^@I)VAQGQnYC~@!Z-MdCv3iNy$IUD)exc>X#4p#rp2;<=3 zP_kyB2g5hP9JZh=u^H?2Gj8S3cZ~9!Xa!6bK8P0={-2UOC-#s<&XGA?__hIe1 zqomJ7L8E1eR!>LmA*8!%#)BJf56e+h|B{osu5Q9x>{PhTg@qB&E#$vGRr^a#n)5#b zQ}JVT(%o7h;MXrpP^>WHsurSO3sXRz1%fyK^b;ONc(pl?f9&gfVC=oCeRj|x&0dk= zRRMWSM_4aNa=$0_40otXj*pLjQ}|3DQVT0Xq|2XQVk%Y`vs{1_jDywVHTi{%e()?d zQO&-l-&p*GDFA*UW-|n6cPFK0R++zi`Lg}1WT+ z_Kzz^l$h1mb2tc&_twKcITm1wa#RsqY>1L0#_^zN>}69>yeq1zaK(1?Lj6X^Kmh|h zIGD2&uBb@A@jjA4vJ2E@Nc{B%bKRl!BJ!wb0ObG>&zOmiBtl6c%6Oo0o(?_XbACQc zgw$u-%cK7v={0J)#;k;bk^rG(sl3}tfT}=?M3S5G#j_DCtW_%N6jBE$%vXEmsk?cE zB4jN39teigYS^nR-ij;sVw+>*Qy_y~vV_NsF5+FmymYxaDdl2?{JXYhg4iK5lvh;r zz$StX@+R9$-LOLV-&L!>>bJ_PQ$P^>&Y~7{WF))o4qDx9NCq?A^8|W4wrT;<2t?E5 zFSz|9@+Rqj;}~;rqA+R)^t$8_+Af3lOYU!#iz;Gw{rqBo6%yUQWJx>u&GhxJAksMe zu;+!pia3-_;~zT;<%2bL5fke0Il)~WEmZk_zq&c{CLM6R6KEtr;C7^e4R;3{Mm@|K zVl&@zkXO$wD%udl)M0tliy{Phm+yef!S!GVNk~c{`YyM zXrA)%p6cfdN4!21wqL(~MZUXGx%8^9fzSgC(u;_+|JJ`(Dq}FE_Ma;%ZH>!#BN5NI z#|;Q4lDzigP?A`bxsZ8aF_<`;J3yyJq)o)XIhfgR=zxY4^M#`#g9D_&OAHd;ZvP!XzvxG#Hy$Vl;hVHeH9~03L_98QrqOF|iubxB% zAqz2+eGM)J3l5|cu<{+jg1aWZQxY;v*+U?0TYE_u9p)*AAFwS)R= zefQElRI|FR_Nx+S2MY+v20Ujo@$82~7Y-%_^*(`o;gA}U!GUBvOwP6wTwLVd zkKbPO{D!&f1_!RV;fM=D;h7NFL^?eB^NX430PCj7oDI``1$*Ulk^#$%CWWSYZmB|G6KaL%_HWNOVC*(*(cm~hU^fd0kv z=*!B;po6Z@V^n>)cA9~POtb20!KrN2N@ONgEwT%s}3%dn# zwk9D2h!DQle@65vFE0eDC{2!FMw|mh8tFNa?0;ZZ&%YAeN4-s!_bSA2w>qzf zx$j4!%n z+pRdU1#V?9@^nW(8gCP0(l^%0_CE^AhwCe8fDCbjkw_i*<`;bpg-|3|H=s`-k|^xl z6OiRj#fId*YyWmk4Nb!HK{cTxA|?1$G!S6X{B%FPtSknGzX0jx78e7^GZRQe*wOM% zbaHYSz`lj8fuBFWe|@p~6V44#EVvIwdz4Dg2$j)1suH+e_@e(w_N z#G#dM0QMkg3Hfu7)fvDe^@|~~nQss?9CWCH%n9iAkPsdi+Ht?lUa3*b_26~qh*GlT zdk!Q57D#+GBP50%SL*I|F_z3^f+%wM-!Y)b)AUzyK!P@dV(GV}IIr&JlIHb!pzb>8 zrclZdr5Tsk_)7n{O|u1SMMXfzLV9Io9JHl7S=~!c*fW`+5P+Et=JzqISvt_Y&VmI zgAv5|>N|u76npLgrb3z_0=2LSyl@g;TxO=uANX#T>xg}Q+7?DWVxpr-w_NW&-(I{o z17SraTNCsOOrPe)@8uWA>9Xd7IY##3sZO}}+c4=u^gcL+=*N#A)nIcVxC`=7_;~R| zlk$8zFgM5~gUMSwWe+mNco6o)b)s>mh!%_gWs9R+|v1ADo^}af!zNXm$(C6iA9#vOo9`JhnRGVkZ!O z;4U6Wpkpn5B|-sGkBv%N0&jHGDIhBG4el8z2GI_$C=RZpV$_T;RCi-h-^RIA?c5Lm zV(^oRfkk7aJo>@6H{*3p`yG_P7UEk|P2i|5#?rGlt3$XGAhvfrAHmt93=pH25cBc6 znnGPm1nvQzPa>JjW#(^8povVpMn52b)$OZsM^gz&u0o6m4Cy+l)!%Kjymted3GXJ~ zXNNHQbFmaUF_++?qM|0-H_h_G6%nAh>(@B30cuLi$q54ZmunlI*lUTHdypLnN(o!q z^>Bwsw)?L{D{EWZFqa)1lwy;s(4{cKi(@i4kEY?r=BwR}<4^?ywaxG%0LiLfo3LIU z0s4gD4^S9Hofh#RdP>&(gQLu5*k-Ew`P7TCM@YU9Y2gqT4}lb#GlUm&nRUS0gbY(^ zXlSU}vYoJq$TnOK#E6mi;2}7h+qCi%IUK&QddXx29jP87+YT1TufCM9PV>N><-mSM09dc*Gc z1H%6tQ%!aCn+1*J^6JPeB@&s;3^A@m??;(T>1XI(ymkC^awSYE3=!U|)kb_k5Z;6K z4*50G7u8#2Z%{!HrGN+xDE=vkc)LD%y_^uY*;=T~ZR;_E$M0+44Rkfl52JyZ%BlIu zv}*D;L?$8BaXR7653?DNsxWW%$8HTZP2qlwmxqQ%JBWNP0F>GD!_;$x6O-0nDYQy-aYW5q?C2uqwFayVmc9;p3_Slsw6N5bp&s8X~g+ZI8_mi)HCmAX$N+eP>FuoZyEOj!@bELHhk!A8ANt0Nawf zZQq=l_uo_#@M9P}JR%y(yKOWVg90m74-PS;5WA`Wu+P%fP>dL`3!sy+lRJ z$a&bTwg(=U+{czi144N)=5wkG;a3KBwU2b~=co+=uT|F*<6y!iGKI5EciV~eA(vT+ z2+;Ho-h1PqKr6hs1eO*OUqkG&!Nnhy3sJ`PVRF#gkU*uJ_*vqc9rRkNP7R8H*z0OY zFc#n@xocirR`Qc)%g;*n;5b_V0oNH>qnj3hcC z$>Xz=Lm-m_qoeIGP~NJ8MM7CDc!oK;l3P%)h%0@74lau&44i-laOr2@Tp<34E2x*q zU-6)f&(oEe&H=F>ES8@uNgLPeJrVkTT+mCzTOJ)H_u&B;LLVYP~fV^GMC# zTsD6Sk_m&nIx=qr@ZvOsVT&rL8H@V^D>xKTL6G?^h+2SJ2g0gjO@kYEF0?NoyUp6V zkJ=>nr&?>4KdOM$^fM!ME<>leUn=zmQ|6yFS%7?NtxsG}nfA(TdF30H1882zxK#8EVsJ*Q8qP600s zOh34C;k3e`P)8uo3c-AF@>2ZMnj}0EZS6LI z#Rpxw4YE-FVXP>*H*jbroTG(|yHvxu19Culxw$ALU@tyScr3_d5%UDtk+u3xM3m-ZOpODJagMwJPi`5O`T z`8IPg#!FOjL^jgecN))+8!4!$%D}`238c|{h17dqrW1x}Nnv09tqdiC+J!{dpFVqL z1w03)SjBm^qCA3;_J0Voo1+*H|f&}^!SllJ3 zFa66fzRkvV&g=H{1JpKpXckdECr@~&2;o}YbuiJ?Y!&R6XuY25Mb^9F-ShyZ+r(Mp z^53G0_1341(xK{(whSk+=c!FIb$1zhgp3e%Jq1VA(X_# zPRJkjLjvB~+Pdj+>A=uXD;&f2)#AnnFJ1_TWpiVmEsU%HAViKZ zOgYF@!BFQ?0JSj+o*)N?6_ci`&>CA)ec*F4BsTJpd6$IMKluka^-)oaV&w*fQ!YcQ zUVlAjS*~A)0jE?B^Z{nQbnJVTiz)$OWbP6Sz#PB^#6JNSRq)}<&!97Y{Kx>y#vY4b zHK_{IBhY2Q<%Ad}xJ^+VuOUANiSp#$(d!AkTA%zA%JFrRm;3|XfeU*HP8S3^ z2x=dJHiE3B+n>A~(dYAWLbZEnH_)TdUO3fUOm%*^XO2dKV&v)xHg5$mhYU8T-kKi1 z9&0hN8HUA$ zUX0?OyNW2e`wx6KEcy0EA$p!yw>gG-o@zZT0I=_Fw+0@$0xVy?!O_>cQOS3Ay@DgHjuM{cSX@ zpq_k>=QV_`6ny>PU$hxaFEL4ZiW0d`<=yEdTPj6h`jAlirVV-v%bEQb*qA@$e6u)esFReLBS60GgNHq%INqIbj{T z(T}H`8NO@+(}#ZS1@3y>=vG=QYugqE1_lU@2Aq1Ur#sO`hI`bJQvZ;)=GCm*hTy0( z4Y!u6PQr;C9?ok-H*(*x1W8X+VwqPNCl^Bm^F?~Gyd1iU`NUO%fC3(rREAxY(^3~D z0?q}k`iR3w)Pm0R7Vxjl4LIgEQ5^1Co7q*|TWuUWiVP9`bTbf&JMy6{AoyQd^`F48 zhS3`zjcPLWCbF7o7qdrXjh8vDg&yk7ExCZo3n0-75IVVWXHw5Y0fS_$Xpl7gS$VxR-<`w8U*(ZFBSTzf4{cfhD8SzPh9 z{5z{grh4?fE>gW#!6m)!-x3t|-#1|X2i(z;KKh0&-oG%$$qL}I_VpdbrAFbAxk zc0rz>j08I3z6>e;%*;;W&S*a03_h{a95K=DTY@$V`gJdmh48UeVZS@3ZiG0m@u!&? zJ()!sXP*VauSNzsI>3a&zn}{715|H>6u-#5d-pOMkVw2G1Ur9$rgjTNy-&r({a6_2 zfWrmNki`! zF*&mTyH-v1owX~lQMcH530gJ#|EuN7AEC_u_&A14u85W7YEh9KNh%2=+lJMFQI2tR zV9C+pJ|d(^E2+pDqKhHgb&rfArjlc2wj3cWOQIxU<@7tNIlLg_d+K=!RQ*=Qc>&JHECkjQ_Xl@*%CCNmc(tII3Qsr zw{Ue;0_Fwvrge3+jJQ_Jp6LI?yB}b()q~;Sy`%?&;Al|CU%hqfIV7^UI;(OjPwuK4 zwYNSjE%OM?5HtLv$jHbD1O>q^Jkx;{)0BZf9;koY53ibDSi_uQ^qD5A0AnCN~_yJY73qhAyfFC>;qj4xM$bQ02+kewu@NGTWNX zH-RDi+*5WLoeS+ot;ou_`mW;xf>rLe*eS!}T@sm;3x)pNr18!WIz1W{E3pMp-(bzH z-?-7M`|xktu8&&?3nMCf58vz%b6X&Hgzp_Td;M|k$rAC6Z}LkUZ+dNz%!V2bc|B>U z^nO9K#*>+$#h4*lTESFFex54vc9V@q>nJmBc8?Ag^R!wL7gD>X2)qLK1&WxB+S&*_ zIP)xlMc4Vk*?AoiVghfWNC-PQSsY^LipBTU9{Em}XKQY47BxPi!|n=ztpQGbBG@P# zPOnd&KR2x{dR&+96p`z%hUcl)USJ8a;`8PNygG!od5GT7c81!h107UAfUc2|(V-ol zSOQ2Nc>xcioPvUagHB~yU7abs7PM0DF0q<=KN;3rXWnr(-*Y*0D1!(wH0Jp()VDmL z+bM(Ni?$UDvOYI$sl*{!NVO|gHRo-~X?CQFO84`D(ttYg4gg4WIWV=t?)vPS=n)uu z2(KWhf_}-#MmTym4M|ZdURPmUy zznl-vcJN2c9kr=Fp^Nb{p)}9trZ@3=HN{pYZJ=N5 zm6dX?qf7`#3hjugj%L#od*m9r3LMZB-Nw7YX$tsd=dpapI{GhQU6Nro=;-ffPB&}A z8TS~I=GNCl18HOemIV&j+e-A%g> zoaZ=Zui*+)hUO(wnunnL?|_?HS(1*!0UdX5G3O)KRyWI5+UM8`K=MIA^dV+4+fkHo z?D+AI$SMM;^R^<^^Y@@)hVH+?E%hh>Tk%zJ6(`@*4D+n;7B1sEB`|uLl9ZU(c*5eo zdxyn4pH8t;Z~z{Mc>g#;(3*xm{PScX-1MubC2eV73w(*lgj zn!CU-?1A9>Map{17MT7{U_PZj&(N)1PLZ;jtG<|0@ABCdQ{A=v7$wX^4=3_?iTbvF zvS)M9E?BOSdw>!@bLTm6z;)pJ{dfEtFn3vg;%sgoZ_uBxkwbwMvq#xYdIDCa0Nz7a z6ZT#Yr)AR6&9JV%K4j;)W0??U15oO#uQaFL?~mad*h!b>u{D`C#;eF$tM-Y;8vMPa zF`%a-adSUo<`GB!+4#G6jWATe_=U?Dk3_@?cDx70szXQ*7iUzI30m3Qf`aFv=2cIA zd2`Y{Bc)9PhKzg6$P7aA8rnnsI3Et64aUiD4i&&Vm2mU0Q(swry%ohd)%SX7hYYa` z{m!L2)={PsqD>OYPP0NBTZ6AeEG?WFpO}~je!e~EFHxM?pl&j4MyCVy%PIRy;bS6w58wUP{01MDX*rHbZc*`aR{RfFoz>0&4hc z-l04rb!2Yw1xP32u3df`LfyG#0-AnZSWI*yYfT1c3WS7(t;52qU)O|{zpe<#b*%8u z*=J+3?PBC)NodX_`K!_DEDO(!gXI0+>vpO2e6QFb6dZG8KvZX?4_8OUSRynm%qZ-$ z)_?M3G*Z%{LI`40R#Q9Hl5fA&E{D7LovbVzhS<&Zql>;t2ZC*QFY-?gPPHLLoX z@wS?zxqPYz@!24kBixZtng;_DCX(y0lq&k(Q=QhxZ6swjd$)a1w~etYS)JnbRYgU$ zb56m9vP{zA!r?ffk6YRRr(sqs>_FB7#OLov-1n+p@@?RR;NL+1M5Zk zo1-OSmK&;$941!7`&U8Dj7Lm{2cwKhW{HpsYsq?25s|PK>*?zwzl}cfEbW`o9mDc` zDg}W_{H?HL!``?CI~}=3DDuu$6Tqxe_%t613?&y*sAs!g6EYRKP(r6zDiS;t0lAtp64CUJ0wK%X9gzV@O53So531*gh=_|>hYakCqtI@jR*3D9KX1)Yg6p z8@R&hr*Bs9WwK&VczW7G*bm+z9l==yD1a&n1`ZG#C`Q#0!HIzf2I`?I#Vz4h-jh(y zRcZDw)!fDUZiQgHVQqigz<@Fy2Vr9;!VQq*Fpqwk7!=^)Op~arnb9^0hX!>=6W$+| zQT$(pw?CkNt1WVwI}eqfm#Hilu;BE&iLEW-f26+HTi!E?%N!UHxE3Ob6u~yY>3}>C zAw2j8-w+ucP_U=K4%aYP;TBlkKXn3?7ZfQ_phBC0d^usM~2)1gKZZ@S-*<2Mj@K8;v*jH%vqaT!+1q9@B<+{fH>;-R_e{weYYecJQaTlrkw zN}cYT`hG|3pW$SY3uo!O?e`}{tsocr|8}ru3sr;kiN5(%kl=PwMe!#4y<4sjKiMd2 zfA5miFo+Re*~Q@_V*;>H@WN9=J}OL?5B_m?$Clt75QZOjjZTH ze{3ugu3*>|E>L_5IYH4s)%p>oQ&u$gG?EydP|om3-trNYIQ+-wPcV&?hx-jr>U@p1`{YjFH#VWgqR@_vl}S5KQiLC< z&?S8y$h&T^HSj1sygka7p-OyiML@8eIlc9_0w~CM- zIkB!w>YJ6Xbf~$y_g%x3U0vd4$!^tzxzLjMnO!-P6yESBSM#HmV`WP@12XLoFD0Uy z<4$r`QC!k#&cmH%QQ{7jnK}N~WxMainb}tyTG+EedDcQuO{sm&f{Q~VQ@Epd "./wallets/.$IPFSNODEID/$IPFSNODEID.pub" echo $IPFSNODEID > "./wallets/.$IPFSNODEID/$IPFSNODEID.ipfsid" @@ -82,9 +97,11 @@ if [[ ! -f "./wallets/.$IPFSNODEID/$IPFSNODEID.pub" ]]; then UIDNA=$(./shell/diceware.sh 1 | xargs) # Check if already existing among all swarm wallets while [[ $(grep -Rwl "$UIDNA$TAIL" ./wallets_swarm/*/*.uidna) ]]; do UIDNA=$(./shell/diceware.sh 1 | xargs); done + # WRITE NODE uidna NAME TO /etc/hosts & .Qm*/Qm*.uidna file + echo "127.0.0.101 $UIDNA$TAIL" >> "/etc/hosts" echo "$UIDNA$TAIL" > "./wallets/.$IPFSNODEID/$IPFSNODEID.uidna" - # CREATE NODE WALLET LIKE A PHONE (Stored in wallets/.$IPFSNODEID) + # TODO: MAYBE REMOVE THAT CREATE NODE WALLET LIKE A PHONE (Stored in wallets/.$IPFSNODEID) BUT CREATE & ATTACH G1TAG INSTEAD echo "${GPGPASS}" > "./wallets/.$IPFSNODEID/$IPFSNODEID.pin" echo "${GPGPASS}" | gpg -q --output "./wallets/.$IPFSNODEID/$IPFSNODEID.pin.gpg" --yes --pinentry-mode loopback --symmetric --passphrase-fd 0 "./wallets/.$IPFSNODEID/$IPFSNODEID.pin" echo "" > "./wallets/.$IPFSNODEID/$IPFSNODEID.pin" @@ -93,7 +110,7 @@ if [[ ! -f "./wallets/.$IPFSNODEID/$IPFSNODEID.pub" ]]; then echo $NODEG1WALLET > "./wallets/.$IPFSNODEID/$IPFSNODEID.pub" # SILKAJ INIT G1 NODE WALLET - TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=3.15 --output=$NODEG1WALLET --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $UIDNA$TAIL $IPFSNODEID" -y) + TX_IN=$(./silkaj/silkaj transaction --auth-file -file="$MASTERKEYFILE" --amount=3.24 --output=$NODEG1WALLET --comment="[G1sms+] G1NODE ($ADMINPSEUDO) $UIDNA$TAIL $IPFSNODEID" -y) TX_OUT=$(./silkaj/silkaj transaction --auth-scrypt -salt="$IPFSNODEID" -password="$GPGPASS" --amount=0.1 --output=$MASTERPUB --comment="[G1sms+] G1NODE $IPFSNODEID:ACK" -y) log "__SUB:initkeys.sh: [ADMIN] G1sms+ $ADMINPSEUDO-$UIDNA$TAIL OUVERT POUR NODE: ls ./wallet/.$IPFSNODEID" gammu-smsd-inject -l TEXT "$ADMINPHONE" -text "[ADMIN] G1sms+ $ADMINPSEUDO-$UIDNA$TAIL OUVERT POUR NODE: ls ./wallets/.$IPFSNODEID" 1>&2 diff --git a/shell/sms_G1TAG.sh b/shell/sms_G1TAG.sh index bfb5345..2951d25 100755 --- a/shell/sms_G1TAG.sh +++ b/shell/sms_G1TAG.sh @@ -116,7 +116,7 @@ c=0 while [[ $c -lt $NUMBER ]]; do ((c++)) # Create Unique SWARM G1tag! - AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); + AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); PR=$(echo ${AA} | cut -d ' ' -f 1 ); while [ -d "./wallets_swarm/TAG/${RR}" ]; do AA=$(./shell/diceware.sh 6 | xargs); RR=$(echo ${AA} | sed s/\ //g ); @@ -221,11 +221,10 @@ TAGCHAIN="./TAG/${RR}/TAG_chain" # contains IPFS current ipfs hash fi # WRITE G1Tag G1 amount - convert -pointsize 150 -fill black -gravity Center -draw 'text 240,-140 "'"$2"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" - convert -pointsize 50 -fill black -gravity NorthEast -draw 'text -100,0 "'"G1"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" - + convert -pointsize 150 -fill black -gravity Center -draw 'text 300,-140 "'"$2"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" + convert -pointsize 50 -fill black -gravity North -draw 'text 20,0 "'"${PR}"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" # WRITE G1Tag RR - convert -pointsize 40 -fill black -gravity SouthWest -draw 'text 0,0 "'"${RR}"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" + convert -pointsize 40 -fill black -gravity SouthWest -draw 'text 3,0 "'"${RR}"'"' "./TAG/${RR}/${RR}.png" "./TAG/${RR}/${RR}.png" # ROTATION (FIXE AVATAR & CHIFFRE)? # convert "./TAG/${RR}/${RR}.png" -rotate -180 "./TAG/${RR}/${RR}.png" @@ -260,9 +259,9 @@ if [[ "$destnode" == "" || "$destnode" == "$IPFSNODEID" ]]; then if [[ $(file "./wallets/$PHONE/$PHONE.avatar.png" | grep 'PNG') ]]; then composite -compose Over -resize 150% -gravity Center "./wallets/$PHONE/$PHONE.avatar.png" "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" fi - convert -pointsize 60 -fill black -gravity Center -draw 'text 320,-160 "'"$MEMBER"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" - convert -pointsize 70 -fill black -gravity Center -draw 'text 345, 0 "'"$UIDNA"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" - convert -pointsize 60 -fill black -gravity Center -draw 'text 330,160 "'"$PHONE"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + convert -pointsize 60 -fill black -gravity Center -draw 'text 340,-160 "'"$MEMBER"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + convert -pointsize 70 -fill black -gravity Center -draw 'text 345,-5 "'"$UIDNA"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" + convert -pointsize 60 -fill black -gravity Center -draw 'text 350,80 "'"$PHONE"'"' "/tmp/G1PubQR.$PHONE.png" "/tmp/G1PubQR.$PHONE.png" brother_ql_create --model QL-700 "/tmp/G1PubQR.$PHONE.png" --label-size 62 > "/tmp/G1PubQR.$PHONE.bin" brother_ql_print "/tmp/G1PubQR.$PHONE.bin" /dev/usb/lp0 rm -f /tmp/G1PubQR.* diff --git a/shell/tag_OP.sh b/shell/tag_OP.sh index 7d30dd4..4a47744 100755 --- a/shell/tag_OP.sh +++ b/shell/tag_OP.sh @@ -69,7 +69,9 @@ if [[ $FINALSOURCE -lt 0 ]]; then echo "__SUB:tag_OP.sh: KO. La valeur de ce G1T if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JSOURCERR" ]]; then ./shell/natools.py decrypt -k "$KEYFILE" -i "$JSOURCEPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JSOURCERR" else - echo "__SUB:tag_OP.sh: KO. La clef $KEYFILE fournie pour ce G1Tag $JSOURCERR est inexistante. Contact: https://g1sms.fr" + if [[ ! -f $KEYFILE ]] then + echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JSOURCERR est inexistante. Contact: https://g1sms.fr" + fi fi ############################################# @@ -88,7 +90,9 @@ FINALDEST=$(echo "${JDESTVALUE} + ${VALUE}" | bc -l) if [[ -f $KEYFILE && ! -f "/home/$YOU/.ipfs/keystore/$JDESTRR" ]]; then ./shell/natools.py decrypt -k "$KEYFILE" -i "$JDESTPUBLISHKEY" -o "/home/$YOU/.ipfs/keystore/$JDESTRR" else - echo "__SUB:tag_OP.sh: KO. La clef $KEYFILE fournie pour ce G1Tag $JDESTRR est inexistante. Be part of the G1sms+SWARM. https://g1sms.fr" + if [[ ! -f $KEYFILE ]] then + echo "__SUB:tag_OP.sh: KO. La clef de dévérouillage pour $JDESTRR est inexistante. Contact: https://g1sms.fr" + fi fi ###################################################################################################### diff --git a/shell/tag_READ_X.sh b/shell/tag_READ_X.sh index e514a7b..5e101c5 100755 --- a/shell/tag_READ_X.sh +++ b/shell/tag_READ_X.sh @@ -13,9 +13,20 @@ echo "__SUB:tag_READ_X.sh: QRCODE READER : START" source ./shell/init.sh source ./shell/functions.sh +MY_PATH="`dirname \"$0\"`" # relative +MY_PATH="`( cd \"$MY_PATH\" && pwd )`" # absolutized and normalized +function log () { + echo "$line +$1" >> /tmp/tag_READ_X.log +} + +MASTERKEYFILE="${MY_PATH}/../g1sms.priv.key" +if [ ! -f $MASTERKEYFILE ]; then echo "ERREUR CLEF DECHIFFRAGE!"; exit; fi +# TODO G1TAG: USE CREATOR NODE KEY FILE INSTEAD OF MASTERKEYFILE SWARM KEY + # DOUCHETTE ES TU LA? if [ ! $G1TX ]; then echo "Branchez votre lecteur de QR code!"; exit; fi -./shell/tools/4LETTER.scroll.py "G1TX SCAN QRCODE G1 + G1TAG PRET" +./shell/tools/4LETTER.scroll.py "G1TX START" ./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py # TABLEAU MEMOIRE DE SCAN @@ -34,12 +45,13 @@ cat /dev/ttyACM0 | while read line; do R=$(echo $qrvalue | cut -d '#' -f 1) J=$(echo $qrvalue | cut -d '#' -f 2) log "__SUB:tag_READ_X.sh: Lecture G1Tag $R $J" - # + # IPFS READ ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); if [[ "$ID" == "" ]]; then - ./shell/tools/4LETTER.scroll.py "MAUVAIS G1TAG DETRUIRE OU RAPPORTER A SON CREATEUR" + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" continue fi + # Get First R Tag name word and remove space for RR FID=$(echo $ID | awk '{print toupper($1)}') RR=$(echo $ID | sed s/\ //g) @@ -49,11 +61,11 @@ cat /dev/ttyACM0 | while read line; do if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. PASSENGER=$(su $YOU -c "ipfs cat /ipns/$J/TAG_passenger"); if [[ "$PASSENGER" != "" ]]; then - ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $RVALUE" + ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $RVALUE ZEN" else G1VAL=$(bc -l <<< "scale=2; $RVALUE / 100" | cut -d '.' -f 1) log "__SUB:tag_READ_X.sh: G1Tag $FID. Valeur $RVALUE $CURRENCY = $G1VAL G1" - ./shell/tools/4LETTER.scroll.py "ZEN $RVALUE" + ./shell/tools/4LETTER.scroll.py "$RVALUE ZEN *** $RVALUE ZEN" fi cmd="RJ" CASHBACK="" @@ -67,13 +79,13 @@ cat /dev/ttyACM0 | while read line; do # ID=$(su $YOU -c "ipfs cat /ipns/$J/TAG_id"); if [[ "$ID" == "" ]]; then - ./shell/tools/4LETTER.scroll.py "MAUVAIS G1TAG STOP" + ./shell/tools/4LETTER.scroll.py ">> BAD G1TAG <<" continue fi FID=$(echo $ID | awk '{print toupper($1)}') RR=$(echo $ID | sed s/\ //g) - ./shell/tools/4LETTER.scroll.py "G1TAG $FID WRITE" + ./shell/tools/4LETTER.scroll.py "G1TAG $FID >>TX>> " BVALUE=$(su $YOU -c "ipfs cat /ipns/$J/TAG_amount") CURRENCY=$(su $YOU -c "ipfs cat /ipns/$J/TAG_currency" | awk '{print tolower($1)}') if [[ "$CURRENCY" == "zen" ]]; then CUR="zène"; else CUR=$CURRENCY; fi # Correction du défaut de prononciation. @@ -84,22 +96,22 @@ cat /dev/ttyACM0 | while read line; do else rm /tmp/TAG_publishkey.B.gpg su $YOU -c "ipfs get -o /tmp/ /ipns/$J/TAG_publishkey.B.gpg" - # CHECK IF OK + ./shell/tools/4LETTER.scroll.py "** GPG **" gpg -d --output /tmp/ipns.key --pinentry-mode=loopback --passphrase $BB /tmp/TAG_publishkey.B.gpg + # CHECK IF OK if [[ ! -f /tmp/ipns.key ]]; then - ./shell/tools/4LETTER.scroll.py "ERREUR DECHIFFRAGE GPG" + ./shell/tools/4LETTER.scroll.py ">> BAD GPG KEY <<" continue fi mv /tmp/ipns.key /home/$YOU/.ipfs/keystore/$RR log "__SUB:tag_READ_X.sh: Récupération de la clef de publication $RR" - ./shell/tools/4LETTER.scroll.py "DECHIFFRAGE CLEF" fi if [[ "$PASSENGER" != "" ]]; then log "__SUB:tag_READ_X.sh: !!!! $FID REC Tag = $BVALUE $CURRENCY" ./shell/tools/4LETTER.scroll.py "G1TAG PASSENGER $BVALUE ZEN" else log "__SUB:tag_READ_X.sh: Ce G1 Tag $FID contient $BVALUE $CURRENCY" - ./shell/tools/4LETTER.scroll.py "ZEN $BVALUE" + ./shell/tools/4LETTER.scroll.py "$BVALUE ZEN *** $BVALUE ZEN MAX" fi cmd="BJ" val+=("$BVALUE") @@ -107,7 +119,7 @@ cat /dev/ttyACM0 | while read line; do *) if [[ $lon -eq 44 ]]; then - ./shell/tools/4LETTER.scroll.py "PORTEFEUILLE G1" & + ./shell/tools/4LETTER.scroll.py "PORTEFEUILLE G1 >>>>>>>>" & J=$qrvalue if [[ "$J" != "${obj[0]}" ]]; then VALUE=$(./shell/timeout.sh -t 25 ./silkaj/silkaj amount $J) @@ -115,7 +127,7 @@ cat /dev/ttyACM0 | while read line; do if [[ "$(echo $VALUE | cut -d ':' -f 1)" != "Error" && "$VALUE" != "" ]]; then log "__SUB:tag_READ_X.sh: Ce compte monnaie libre contient $VALUE G1" NOPOINT=$(echo $VALUE | cut -d '.' -f 1) - ./shell/tools/4LETTER.scroll.py "CONTIENT $NOPOINT G1 *** $NOPOINT G1 " + ./shell/tools/4LETTER.scroll.py " $NOPOINT G1 *** $NOPOINT G1 " CASHBACK="$J" cmd="G1" val+=("$VALUE") @@ -134,7 +146,7 @@ cat /dev/ttyACM0 | while read line; do fi fi else - ./shell/tools/4LETTER.scroll.py "OUI CONTIENT ${val[0]} G1 !!" + ./shell/tools/4LETTER.scroll.py "G1 ${val[0]} / G1 ${val[0]}" fi else ./shell/tools/4LETTER.scroll.py "ERREUR QRCODE INCONNU" @@ -196,7 +208,7 @@ cat /dev/ttyACM0 | while read line; do J=$(su $YOU -c "ipfs name publish -k ${RR} --quieter /ipfs/${I}") log "__SUB:tag_READ_X.sh: Destruction de ce G1 Tag publish -k ${RR} --quieter /ipfs/${I} :: ipfs ls /ipns/$J" - ./shell/tools/4LETTER.scroll.py "${FID} G1TAG VIDE MERCI DE LE DETRUIRE" + ./shell/tools/4LETTER.scroll.py "${FID} G1TAG VIDE !! DETRUCTION !!" # CLEAN IPFS keystore: remove NOT created NODE keys SOURCENODEID=$(cat "./TAG/${RR}/TAG_nodeid") @@ -206,7 +218,7 @@ cat /dev/ttyACM0 | while read line; do fi else # AJOUT MEMOIRE SCAN - ./shell/tools/4LETTER.scroll.py "ENSUITE" + ./shell/timeout.sh -t 1 ./shell/tools/4LETTER.spinner.py act+=("$cmd") obj+=("$J") fi @@ -244,7 +256,7 @@ cat /dev/ttyACM0 | while read line; do ./shell/tools/4LETTER.scroll.py "DEJA TAG PASSENGER"; else log "__SUB:tag_READ_X.sh: Transformation du G1 Tag en Rec Tag. ${val[0]} = ${val[1]}" - ./shell/tools/4LETTER.scroll.py "TRASNFORMATION G1TAG ${val[0]} $CUR EN PASSENGER ${FID}"; + ./shell/tools/4LETTER.scroll.py "TRASNFORMATION G1TAG ${val[0]} ZEN EN PASSENGER ${FID}"; log "__SUB:tag_READ_X.sh: $(./shell/tag_OP.sh ${obj[0]} ${obj[0]} 0 $MASTERKEYFILE)" fi CASHBACK="" @@ -256,6 +268,6 @@ cat /dev/ttyACM0 | while read line; do ./shell/timeout.sh -t 2 ./shell/tools/4LETTER.spinner.py fi - ./shell/tools/4LETTER.scroll.py "FLASHER QRCODE" + ./shell/tools/4LETTER.blink.py done diff --git a/shell/tools/4LETTER.blink.py b/shell/tools/4LETTER.blink.py new file mode 100755 index 0000000..5f77418 --- /dev/null +++ b/shell/tools/4LETTER.blink.py @@ -0,0 +1,15 @@ +#!/usr/bin/env python + +import time +import fourletterphat + +fourletterphat.clear() + +fourletterphat.print_str("SCAN") +fourletterphat.set_blink(fourletterphat.HT16K33_BLINK_HALFHZ) +fourletterphat.show() +time.sleep(1) +fourletterphat.set_blink(fourletterphat.HT16K33_BLINK_OFF) +fourletterphat.print_str("CODE") +fourletterphat.show() +time.sleep(0.5)