From bc92c01b07ccb6a695b955eac7a075e72d8d45c9 Mon Sep 17 00:00:00 2001 From: Rob Reynolds Date: Sun, 21 Aug 2016 13:43:08 -0500 Subject: [PATCH] initial checkin --- .gitignore | 25 + LICENSE.md | 202 +++ README.md | 0 automatic/_output/README.md | 0 icons/1password.png | Bin 0 -> 9080 bytes icons/README.md | 0 ketarin/README.md | 0 manual/README.md | 0 ops/ketarinupdate.cmd | 29 + setup/KetarinSettings.xml | 2665 +++++++++++++++++++++++++++++++++++ 10 files changed, 2921 insertions(+) create mode 100644 .gitignore create mode 100644 LICENSE.md create mode 100644 README.md create mode 100644 automatic/_output/README.md create mode 100644 icons/1password.png create mode 100644 icons/README.md create mode 100644 ketarin/README.md create mode 100644 manual/README.md create mode 100644 ops/ketarinupdate.cmd create mode 100644 setup/KetarinSettings.xml diff --git a/.gitignore b/.gitignore new file mode 100644 index 000000000..aeebc167c --- /dev/null +++ b/.gitignore @@ -0,0 +1,25 @@ +*~ +*.bak +*.cache +*.nupkg +*.old +*.orig +*.swp +*.swo +*.suo +*.test +*.work +*.handover +*.new +*.exist +*-orig.* +Thumbs.db +.DS_Store +_ReSharper* +*.resharper +New folder* +New Text Document*.txt +obj +*/working +ketarin/soluto.xml +*.stackdump \ No newline at end of file diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..e06d20818 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,202 @@ +Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "{}" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright {yyyy} {name of copyright owner} + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/README.md b/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/automatic/_output/README.md b/automatic/_output/README.md new file mode 100644 index 000000000..e69de29bb diff --git a/icons/1password.png b/icons/1password.png new file mode 100644 index 0000000000000000000000000000000000000000..3d80ade278fadee92f5ad8d7fff8fb8e4d3cead1 GIT binary patch literal 9080 zcmV-;BZu6HP)C00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px&08mU+MNDaNDoJSo000640s;X73JMAY1OyHa4gdfE z7#J8jTX+Kl0{{R3V|SDQ000320VGkK0|NsB0s>obi~#`wY=WNw0Rd8Rs|E)L0000a zFh3wjj{yMz1_lOJceZketR+HT2L}g4WUVeaMgRZ+eU7b-nXFM~fn$24WPYt#S6QyI zwq0CZB1e3{!N7igenDG)V0^bgKR^@|6rHBEPEAh0z`!ITBrq^AqN}-@nwo!pe=I93 zGchwKB`2e$r$AexYk{gZP;aE9q>he`+}zwoMn-IFY-e|vr>Cc^tgMlckt!-G9v&Wm zfPk~Jv*_sP=jZ3_?CizG#pLAVgMxw`9UcGw{{R30;^N{K78iDQb{QHPo12@$!od*| z5|fjYd3kyK{QZD{fWE%I1_lO~mzR)`ke;5Nva+(^;NbW7_Y4dSgoK12ARx81wXd$O z#l^(Z($al>eL6ckySuxhqM{`wC9A8d)YQ}{DJd*1Ey~Kuhlht>UtmZ|O328_?(Xhe zTU+Yt>T7IlZ*OliG&If4%;x6i^Yim`baXE;G2GnTV`F1!X=#g!ic(Tij*X3_rKM(O zW^!?HA|oUD`uy?r{7z0zK0iOXxVY@``qGm{pzePnxbhPBj)#{(T;b5QIhpE>vmKw%WSI;7nd_p0CwGW`tvj z#MkEc!_4C%V6aGt&8@}e)!prSyy_Y#HFuQBc9OM*oXm`|+jE`L=j-!WfWRtNky(nb zP>|Gsqth%}q0rapew)r~rqh1H?JiV-Pk5Pso57LH@;-F1G-#%Eui6tJEJkpYW1GiC zQ)5JazGs8JV3fH`b+(+(?>R_SHer%mi^G75n5@_FQh=qBrNpJi>~emNkHh4++w*Lq z#HqN^XmWnGz|oMOvYqN8rT_o{R&-KMQvm%mW>gOr0!s+~D?R>1UjB5m{hIw9@Wh7w z{v_!B{r=Ye{`2SM`TOdv>5KmLuJ`^?>*L=js(=2;!)NZ!^6uC8Sld!M-0z;l>xV>c zrsHkI$AkOb{xg3703WnTL_t(|+U!?bOdIJHPNgL%$}_RlhvZ=eT`pRbDA1%tLaQXZ z-TS4LkQdGD7+Z6(H9HqycAVJ8_`=wmF*ak@n6Y81aS#|;&dbX9!Lp@5B#=OAEBTG5 zJfgfsN>>%h_Ka=V?Y2qCt$E2OFc$v*^L=y9cmDtQ*s(WwgEx343}3z4`C9qE3V!kB z>r*iN*%hZTFI|0I{9guD4CC|CyTgb7>g+smqVxZikCgRq&tqlV8kBRu_i3 z^O`?8_E^{=p3%YgU%CU&jd*yACRs%S6O2+J2TbYcRK%Fi8zWQE^nYrIYSiGlms*K) zBT8Q5{aju$vKZm9N*;FsRVYDKWm#1PN_X!~Uv^2*4$mq!2oAS2mqe1S)KaA4Di z8iOD>5%M?SEd&AQA@5yGOx~QI zcR1$fZ%!rxGvhRYxKyPOJnWAsKRWOd?0D`98fnJU{5+3>5A!63=kj@W;XA-znm^xN zyMAMOeln1vF;Z1>hYpRPS6;LZ9RsSnoz^reYE2({2#hsKnrQ(Z+!u@a0*T4_>1&|k z#=^}+h{j#4XR56r?N$dmUWEVTh!SbX3i@5)5bN=S4+V@6;XD)s_5gy6(=(arYr2NO zIDx2K@E{4w$jKK-|HoWAol(Dv#3#R@C5sz;h+!^kUSkOiZvq2A{aJZ7Ie-27^n4;b zi>L=jMU?yaxyvv>7Fy|_a0>_#p8oo4m*zns1qwl+a2`Sr$}X3zccLnjpo0_yEVgic z+L1{Sh~RG7Fz{jjI^{?NYAX`L?79D{veCQV@1cpj1bQhGl|5ai$`-( z-i=|hRdN?5+GwV#R{h6m!x@=k5lmo{3yxwejG|WCM;3259HMyrO5g~LfmYPgzs6X0|E!^h zf!oSS&lfXc3@Jc)CZf*xrK9qHY8N69XiP+iP^LJED443S-Mx3F#-h~s;Tc)uJm5na zMr5nzZ=~niNVi|o6U#psdReE6Dad3o6Cw~1GLVi4_D_$-f9eAy7mcRV98QE1#f(Z} zlykKA@4IOTUNDEk&RoF)KIEG|{XPbDDR?B=W7%1V&^It^{kgmd$2s@M#ls`kT4*&Rs)~ zQ^8plLWBvzVv9}%(b*%l!X>j{4NlomFP2)&EK&mERC;>%qk7z0b{7lH5InDsCi;ks zNZ`ZOnvQI(jkb=)14FmsL<9(OkZ zQESv{I~VOUAB-7&Woz zGsnGJ(5O-LQ;TpZg?J>Z6{o$)#SCsiEKvV-AcwdRyI$XU^kXvVa`U{j1tmeY0M!*UK%`vlDZz9gRDN9@L3&=0qSoYgerrPtik99uqI5 zaFo|9_F0oJFyki~?tJflqeZ<_YNB4cAM<_h;&b|l-2STOFK;%fTPw=hbZuAP01_S; z&T|aup9%O(vv!Ndqj>6x2jZzAv%rZSFHI+X0frU0{`Vf}^t-#I-SU!-(q{SM!;Ota zlk*oNvbeRm^fStvkf+kFu3>riZg0O|V3~j~Nz-1B$O-15CmjZ#ga`)pkfwMl7Qi?c z_wIXVc7c7jRN5*nRdv+M)ynSrA&9z2kjE95ifE-pV)t9PEupT6Uh^@1|3IxIe zu~ghddQgT4ee$FPm`DbtOkVqpFYJ*m92lTQzqP)!rempGt*-6=^l)SEeoj<)-i;C@ z>*pAz+QwS7tgl?Eu5UFp?ChWJ;ViNz?3=NBO%%$IrYEG}Ld@%8l(^j+PWo7d^*{l3 zx0*xG`g(O6uvV^aL-@*%8+$MwQY?p}Bt;1@0qj?s0)by&Sb;Qvf-T(=Py`PI^CiPx zdt6~$-q>SZ&@mJyWQsI-O`(`sbotTlGi~}xrLwjHSgNk*I&Omi#Er5reF?I_xe$cF zwzt~~^>vlf+*}z{>l!L&yHUSOG{-^^n51MPJoLEf=&ghabIE2qoeCwLj3S;l+|i$1 zr@y_jef!p}?Pm0ql{;MZbf3s!&uWh4u9OteZ2Rn96Id1tOkb)sykFu~pq3nm2 z+;8_69Av75gp4e8=qy{YaK6ZKRV&VvTCyy`*;@Q9*LiWB;X2Eg9y#vp(2$aJkT{;Z zIP(uJ=`q?6Mmn1N<+gofCkIROfuJA!JfHXL`8;nw&qt1n)?t{eis5t^9N3m$Sy@>v z&SbO2rI}(oF1{R-NI#9bSa>}}g91S)%9|qS&t!|mY<6bp$>M#O_OONUuG_&C&a_Dy!oN!Xl>XvwU^|T8m#gr0Hp$a8{gsKUt5nN~0*|Tqib8(Y}PkCOE*}OmO`J~TY zJIH4svc*jHD7y`jExopGPoqZS9xl*0p&+Inlr7r&+s|K*{%*ppBt|Av zQH9nNL_yL)97=%SW?q+U{ZcDtGV{j>54Sq6%f$L}O!TH&U!YcuSClD&nczZkdS2L^Gw!96HwKJEtcq~k* z5(_V2$;ok4KwSW!prbTA)bv#P`|XCU-e@#S#YUrr01$nhyFq zGZaD%@H~%L80Nj&Uj^|@HdAdjtBv{MlbI~&SAOtYq7f1pDwLQUN!mUHKY|Z25o{Tv zocM<|TfSCnHnWXpv(ci@R2)~m7-k`mJfISaF?Q{YQ|LxiCWt@;#*le;ezeC?tS^NVHBg7Y%~ENz2~#1< zeAUr23Q0*w9tjYH9KG?=Gb|txB#{d7B##fdhkE*_0FuX7;i=q)lNRjk7o%x=Qeb5H= zR+JW@C0;!GL6%LP^O0(ZaK+ph9UUB$P!!c|AJT0f5;78aX0Ly(QfbuITC;(mZ}(E( z>GVKyBx;DFJbU5oQy@<0qLd<7QS)+G@Z;V6{msf+WeuWIX|6o}W^raKKpF(?pbx0sBpdqZ^_Q1Z$Q0tL3?kxd%@PF+eeX zkrZin7}gH}P6jG^>_b!ZxZx2ZB=pfjE(Z+j8--Vg6?+Zcb;s@%Ob9cYPDbt_C>6Q> z?kRu|CPOqTCkz(XogM+Z)aB?tI5?=U)yjLz>&wd z7&3XfCAg4eEx$CVx@c<1?RQ@8+U@9Q0W8A?9DVWagThmhi!)BapXR*N1EYaBbEgg9 zhI844w$DRbA5r8OsSAvoOLI>9m-D}EE-XN{i%!3Lh@xHUpyapM^yaGaSMwvoEr=6fUcK zlIXni``d5Y0Gu_1(zu$GI7~}kc<&UzxHig2;|8=@Q$Egj8T5|fLtZ(S*Ic@s`240FpAFAy`GLDz9lN_9IXT}HE#Stu#Efd= zX8?FDX)=Pxgdr?O9|N>@006$4o7?y&$=&k>V^H(yf#YZaI0e#(nBYSfVs{3-sJn=< z&wu+_J8s?_mN9Rz@5R$k=@>R7#PG+*Izy3$3`TnG_SEKtBKu-UcM#H-2O(4^Vqu4_!()HKbFnr>`+Yqhp< z#p=CjyFa>T22rH+#KZ(hp3ix{&-u=olS7b-q+DXq$j<-_$hAFwuU!ht%e(IzjpfVp z1e8qU_-gH4_u%yO#FRA7j9LcY3{@-Q%*Mo}TuZ6ZcOB!bvTTkMFuC62>WgPl%b+CUsP40YKHQ z$z)Q;%=q+rNw2=+@ZkE|&z|G}(&_n?m6eha|Cm;+@rW&&0szmT-D{Wi`Fdn=8ijDE zzyb(KO&BeM-TGdMUhkV>bjjr8t*V0O@wsNdhaKlgnZAF(sZ^W-+{*!M9L(srh%-9v z6b~e_1d(F^r?$_o1Md4dAdO;RsMTkDK;wi_GSv^-mtID4|dN$SL`!)Z+p^zsC~5{<=Tkx0a>a&*KuK9YjK^brh05R7qS zSUvzWEVszzETPo5yGe!15U(rT6ke-NSzuy@_D>N?v2p6K^7`7^lP4ztK!0PS#B3ss ztXS)EMde~Z(3^C!EbC0NgJGMlbByARM=%7%@Q~lnoh6|AG#aBvNlf|a83MMXstfl6 zWi=cDJL1&XU__Zn^h+zBT?YU!PXK^^daJ=3Yj?V$9+xX2@vynIz!ErPvvES2bc!{a{wTn z-Y6mCOuyBo?RB}F8e=b*JwLQzwL3*+bB7=(4Ur6uVr~w>^0SD{=q-|gh%`mp#c)U9 zYT=gbV(G2UplXP5%OV4Et7PJxNC0?w48ZHBfd%Gp*ywU;lP;Gvs<8*Y*8mV~-Fq`X zpUwizrI%qPy~@V8PbboB5UWf}lS)_x3)OqQ|CHLFaT5Ab?@j%COTV zhoWIOO2&Zq41}PC9g+5F936BB$dJ{IpS+-#)#D1-IZAUriA3WPYVd6B;N{CKfFM7& zu&{oEiqR=T1*?+U1k2l?jCbX&c^sq=pP?{_BtabTf_@b1usC#nC#=BhKRvL$aHYwv z3XXHsXv896qy2}Xn*zbsn>Q=z*&F~Mz!{p6d2YihXVhSbN@U@-Q-A=&SDr~B2p)qF zipifp@B<0yjS{^|WpBFj>C5TGin{PLOr-GCghgYpMmql6nzLYKV|Fer$S=$;tl!6J z1}v7SO1MQL@5~2)I0_J;;TXoZBaS+qJm`%e6_5!8(WMR7ReXACU*1>)b-*4IMawis zjn&crPIT$Sf`t=++3mfhRho>s!;^X~t5Ol2skYM)LNrJqf>3Ty3CvBN$g8{Bz~}-+ zX_r{0yP=xKB4;#Z=bKE{pwEqu5z`ir)$x@Gq~O^BAH$W+h4iuh?8DjJ=NUH{GKXW~ zG5_#b3~y^Y?Rh8}5}pO18*^iUjBAV?x2_aBv%gSL=Z?T~bHLr>m^Qkc z+PoCZZ3_m>@&HetZtt~bVly_cDQ+eMDALxZK8-t?GLaC5p>zmrON37Zd3D%ihQL1v zAr%(K@2ZNOm6l(w$3|T2Fpb*=434DA`9G1UOO57@q2A*{)b4Y-)Q_r(feLyrOl)qo*;3zR2y}GKJ!u3 zS^|o20N!jiH|LJ^d4LBGo<9DuRDWc%Y;m5__Y4O^Jfhlns03Z+==!_7*EtbOa#`8_2vR4|z8J{)*B5vi2kR@0L z06aks01zB~0Av6Cqs7IYvlbk;B;Y-RuZvwjyiiqx zOd91T3NjNOk3r@7?#CR#54*cL3vvMaM}J+u`_0i~(PD;=VL{i+xxdrWkg?l`O`>#Gr1-r;9Ua_Pd|gpDR{^pOlwX)vLoj`c4i4MR1A}s@r$I%@SN%dY(nt z-kv>K2uB}|z#pi=YF-R;?ymygr9 zZK5G=Jj#lb!90RjuXuuN9e4zuV1IxA=s!XXb1PABxD8$9^)rhfzk^|?Lm?ZI4w>A? zv#-8d(OCAGJGkX#6<3=myR^?7fWm{lR;Tzj%oDT<1WT`;XA!at4<79AgD}1THCRM* z76|jlc=?@{*P_4Qf#JkdUmyRvjOJ!vb@|$b&)xyP*!a^Lb*$YtOyW>T@5~bX`HM-#aYbQR_zR4|mM6xtku72si7gWUfFCgfW)cIgA=GBl2v?Kb5qABNkzE%;nvStc z>^Q|J6ph*qYNaZIUBn_%6xLaJ6Dd+8R^4>d_ud(&sZ_Om<}46466ZPZxp(e8_Bp7S zRx=9A3;YMI7RP^gK==CH-bl1IH`7#jIdi*EE=*U2&EGmm0~3KFFa|)p|I@JdFHTN~ zu@ec_IouDQj16{ngxpdb>KD^d<2o=EhX4OWnbHAqWB)^0Q@^n(D{@NND z931cIp$G;8AV6W*i|d~a8)u@jkyYQmLiR^mht;ni#My@xO#MVEG3xVJPSN&kx7d86 zTJ!t$EaBzmlTxx=$_c{JE=0J-5DW%DfWojB*N2CVGf~dOS5AiC4R&@9zP+)sy11M- z)lbDz@IT-f;_l{fAE3(1vATPZr`$5;Mc+37_DseXdhC)Y&bR zK+>BVdPU>q+U(=1kSyfpf$*|*{F*WVqJPrFn4BCRAG_j91C+SzSkJM;4d{U99 zf6M7x3VR)tU{M1OuVExARNuxC4lx!H;ZcXr%Mbd>W?L=H}?l)C^xz zRTjU+afW_AgJ3kO>e;qRBwp6zpBI3T%b^_EJbJ$SbpN=63z=#7^?3j3A1U)dkWnnh zy5TG7N_6zB{tW_;Z!|^H?RrDO1)pS>DZ+d?SEeP=!Ql@5ioC^)ezCuExK+)3I1|Oc z!%q{s|IX^)BnXBRd?k%Ch+bq!c4cYXsK?55z+!%L>tGKzf}_2Itxfv6y3{=o%o7>e zZ$SQV@EraP0-HB56_eG5S|Jocu0LA1Q=+Yw$#M>raWYwDy`0HpnZB-;h#`S-A42$w zD#xY*UfX&6GXl2_3n3*E-17;MHC~hyy*T^B;~eYvq@I%$BgxuHg=#5JtFNdTKFR|k zrjUM{`&|A(V0XEZhDaiXWks9UsSIGKH@{iDd-L9Ofl2@aMPd5h&AWK;P|w}HFUxog zMIgW1b?&(rXJ`Ov@P!jGQPMO?0t3+`QIv?<-pCZ^;;Ro~tMR#FW`pe(rajBPL@&l+ zALJhhU10Xd=|>toUgQB4g@k1wq3l9FG)RFLlE!8X=pRI0(nv*#8R3g!6o(Jz^+10A zg=UYC28dt{27th1fRRcgU8l1ZjfTps(MYp58Wkc%QJIUV&{Ly9VHDzXIk;eZdh?}Pe| zOPf6Fr3g^LX7&2GNEi$n9cy7pU84IUpi@^XLx0000 + + + + + + AuthorGuid + + + System.String:{75a093b7-da5f-493a-b8f0-22c278f874c1} + + + + + LastUpdateCheck + + + AAEAAAD/////AQAAAAAAAAAEAQAAAA9TeXN0ZW0uRGF0ZVRpbWUCAAAABXRpY2tzCGRhdGVEYXRhAAAJEOGhVC47mtII4aFULjua0ogL + + + + + MainForm/Size + + + System.Drawing.Size:2329,476 + + + + + MainForm/Location + + + System.Drawing.Point:-6,1300 + + + + + MainForm/WindowState + + + System.Int32:0 + + + + + olvJobs/Application:Visibility + + + System.Boolean:True + + + + + olvJobs/Application:Width + + + System.Int32:126 + + + + + olvJobs/Application:LastDisplayIndex + + + System.Int32:0 + + + + + olvJobs/Last updated:Visibility + + + System.Boolean:True + + + + + olvJobs/Last updated:Width + + + System.Int32:96 + + + + + olvJobs/Last updated:LastDisplayIndex + + + System.Int32:2 + + + + + olvJobs/Progress:Visibility + + + System.Boolean:True + + + + + olvJobs/Progress:Width + + + System.Int32:100 + + + + + olvJobs/Progress:LastDisplayIndex + + + System.Int32:4 + + + + + olvJobs/Target:Visibility + + + System.Boolean:True + + + + + olvJobs/Target:Width + + + System.Int32:152 + + + + + olvJobs/Target:LastDisplayIndex + + + System.Int32:5 + + + + + olvJobs/Category:Visibility + + + System.Boolean:True + + + + + olvJobs/Category:Width + + + System.Int32:80 + + + + + olvJobs/Category:LastDisplayIndex + + + System.Int32:15 + + + + + olvJobs/Status:Visibility + + + System.Boolean:True + + + + + olvJobs/Status:Width + + + System.Int32:79 + + + + + olvJobs/Status:LastDisplayIndex + + + System.Int32:6 + + + + + olvJobs/LastSortColumn + + + System.String:Application + + + + + olvJobs/LastSortOrder + + + System.Int32:1 + + + + + Ketarin/ShowGroups + + + System.Boolean:True + + + + + Ketarin/ShowStatusBar + + + System.Boolean:False + + + + + Ketarin/ShowLog + + + System.Boolean:True + + + + + Ketarin/AutoScroll + + + System.Boolean:True + + + + + PreUpdateCommand + + + System.String:# Script version: 1.3.0.0 +# +# Changelog +# evaluate custom variables rather than using variables' CachedContent +# +# Requires: +# chocolateypackageupdater +# >=ketarin-1.8.5 +# +# To configure Ketarin: +# 1. Copy this file +# 2. Navigate to: Ketarin >> File >> Settings >> Commands tab +# 3a. >> Before updating an application +# 3b. >> Command >> Powershell script +# 3c. Remove any existing text and paste this file into text area + +# Package variables to be checked for content +$vars = "version","url","url64","checksum","checksumx64","packageGuid","nopush" +$hash = @{} + +# Build hash using $vars for $hash.keys and corresponding content, if any, to $hash.values +foreach ($var in $vars) { + if ($app.variables.ContainsKey($var)) { + #$hash[$var] = $app.variables.item($var).cachedcontent + $hash[$var] = $app.variables.ReplaceAllInString("{$var}") + } else { + $hash[$var] = "{$var}" + } + Write-Host "`$hash[$var] is: $($hash[$var])" +} + +Write-Host @" +Running: +chocopkgup $($hash["nopush"]) `` + --packagename=$app `` + --version=`"$($hash["version"])`" `` + --url=`"$($hash["url"])`" `` + --urlx64=`"$($hash["url64"])`" `` + --checksum=`"$($hash["checksum"])`" `` + --c64=`"$($hash["checksumx64"])`" `` + --pg=`"$($hash["packageguid"])`" `` + --debug +"@ + +# Using corresponding hash values of keys from $vars, set parameters of +# https://chocolatey.org/packages/chocolateypackageupdater +chocopkgup $hash["nopush"] ` + --packagename=$app ` + --version="$($hash["version"])" ` + --url="$($hash["url"])" ` + --urlx64="$($hash["url64"])" ` + --checksum="$($hash["checksum"])" ` + --c64="$($hash["checksumx64"])" ` + --pg="$($hash["packageguid"])" ` + --debug + + + + + PreUpdateCommandType + + + System.String:PowerShell + + + + + CustomColumns + + + System.String:<?xml version="1.0" encoding="utf-16"?> +<dictionary> + <item> + <key> + <string>version</string> + </key> + <value> + <string>{version}</string> + </value> + </item> + <item> + <key> + <string>filesize</string> + </key> + <value> + <string>{filesize:formatfilesize}</string> + </value> + </item> + <item> + <key> + <string>host</string> + </key> + <value> + <string>{url:regex:(?&lt;=//)([\w-]+\.)*(?=[\w-]+\.[\w-]+(?=/))}</string> + </value> + </item> + <item> + <key> + <string>packageGuid</string> + </key> + <value> + <string>{packageGuid}</string> + </value> + </item> + <item> + <key> + <string>fileDate</string> + </key> + <value> + <string>{f:yyyy}-{f:MM}-{f:dd} {f:HH}:{f:mm}</string> + </value> + </item> + <item> + <key> + <string>fixedUrl</string> + </key> + <value> + <string>{property:FixedDownloadUrl:regex:(?&lt;=//).*}</string> + </value> + </item> + <item> + <key> + <string>referer</string> + </key> + <value> + <string>{property:HttpReferer}</string> + </value> + </item> + <item> + <key> + <string>user-agent</string> + </key> + <value> + <string>{property:UserAgent}</string> + </value> + </item> + <item> + <key> + <string>delPrevFile</string> + </key> + <value> + <string>{property:DeletePreviousFile:multireplace:,:True,False:X,}</string> + </value> + </item> + <item> + <key> + <string>varChgInd</string> + </key> + <value> + <string>{property:VariableChangeIndicator}</string> + </value> + </item> + <item> + <key> + <string>cscript</string> + </key> + <value> + <string>{cscript}</string> + </value> + </item> + <item> + <key> + <string>enabled</string> + </key> + <value> + <string>{property:Enabled}</string> + </value> + </item> + <item> + <key> + <string>nopush</string> + </key> + <value> + <string>{nopush}</string> + </value> + </item> + <item> + <key> + <string>domain</string> + </key> + <value> + <string>{url:regex:(?&lt;=//[\w-]+\.)*[\w-]+\.[\w-]+(?=/)}</string> + </value> + </item> + <item> + <key> + <string>checksum64file</string> + </key> + <value> + <string>{checksum64file}</string> + </value> + </item> + <item> + <key> + <string>url64</string> + </key> + <value> + <string>{url64}</string> + </value> + </item> + <item> + <key> + <string>hashInternal</string> + </key> + <value> + <string>{hash}</string> + </value> + </item> + <item> + <key> + <string>hashType</string> + </key> + <value> + <string>{property:HashType:replace:None:}</string> + </value> + </item> + <item> + <key> + <string>proto</string> + </key> + <value> + <string>{url:regex:.*?(?=.//)}</string> + </value> + </item> + <item> + <key> + <string>bytes</string> + </key> + <value> + <string>{filesize}</string> + </value> + </item> + <item> + <key> + <string>hashExternal</string> + </key> + <value> + <string>{checksum}</string> + </value> + </item> + <item> + <key> + <string>checksum64</string> + </key> + <value> + <string>{checksumx64}</string> + </value> + </item> +</dictionary> + + + + + CustomColumn + + + + + + + + CustomColumn2 + + + + + + + + UpdateAtStartup + + + System.Boolean:False + + + + + AvoidFileHippoBeta + + + System.Boolean:True + + + + + ConnectionTimeout + + + AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uRGVjaW1hbAQAAAAFZmxhZ3MCaGkCbG8DbWlkAAAAAAgICAgAAAAAAAAAADwAAAAAAAAACw== + + + + + ThreadCount + + + System.Int32:4 + + + + + RetryCount + + + System.Int32:2 + + + + + UpdateOnlineDatabase + + + System.Boolean:False + + + + + MinimizeToTray + + + System.Boolean:True + + + + + CreateDatabaseBackups + + + System.Boolean:True + + + + + OpenWebsiteOnDoubleClick + + + System.Boolean:False + + + + + ProxyPort + + + AAEAAAD/////AQAAAAAAAAAEAQAAAA5TeXN0ZW0uRGVjaW1hbAQAAAAFZmxhZ3MCaGkCbG8DbWlkAAAAAAgICAgAAAAAAAAAALgiAAAAAAAACw== + + + + + ProxyServer + + + System.String: + + + + + ProxyUser + + + System.String: + + + + + ProxyPassword + + + System.String: + + + + + olvJobs/Version:Visibility + + + System.Boolean:True + + + + + olvJobs/Version:Width + + + System.Int32:99 + + + + + olvJobs/Version:LastDisplayIndex + + + System.Int32:1 + + + + + SetPlaceholderDialog/Size + + + System.Drawing.Size:397,147 + + + + + SetPlaceholderDialog/Location + + + System.Drawing.Point:1118,929 + + + + + SetPlaceholderDialog/WindowState + + + System.Int32:0 + + + + + EditVariablesDialog/Size + + + System.Drawing.Size:1004,492 + + + + + EditVariablesDialog/Location + + + System.Drawing.Point:-11,212 + + + + + EditVariablesDialog/WindowState + + + System.Int32:0 + + + + + ApplicationJobDialog/Size + + + System.Drawing.Size:507,507 + + + + + ApplicationJobDialog/Location + + + System.Drawing.Point:173,12 + + + + + ApplicationJobDialog/WindowState + + + System.Int32:0 + + + + + LogDialog/Size + + + System.Drawing.Size:1825,423 + + + + + LogDialog/Location + + + System.Drawing.Point:-7,747 + + + + + LogDialog/WindowState + + + System.Int32:0 + + + + + ErrorsDialog/Size + + + System.Drawing.Size:1096,965 + + + + + olvErrors/Application:Visibility + + + System.Boolean:True + + + + + olvErrors/Application:Width + + + System.Int32:98 + + + + + olvErrors/Application:LastDisplayIndex + + + System.Int32:-1 + + + + + olvErrors/Error:Visibility + + + System.Boolean:True + + + + + olvErrors/Error:Width + + + System.Int32:952 + + + + + olvErrors/Error:LastDisplayIndex + + + System.Int32:-1 + + + + + olvErrors/LastSortColumn + + + System.String:Application + + + + + olvErrors/LastSortOrder + + + System.Int32:1 + + + + + ProgressDialog/Size + + + System.Drawing.Size:302,112 + + + + + Hotkey: OpenWebsite + + + System.String: + + + + + Hotkey: Edit + + + System.String: + + + + + Hotkey: Update + + + System.String: + + + + + Hotkey: ForceDownload + + + System.String: + + + + + Hotkey: InstallSelected + + + System.String: + + + + + Hotkey: OpenFile + + + System.String: + + + + + Hotkey: OpenFolder + + + System.String: + + + + + Hotkey: CheckUpdate + + + System.String: + + + + + Hotkey: UpdateAndInstall + + + System.String: + + + + + InstallingApplicationsDialog/Size + + + System.Drawing.Size:406,250 + + + + + InstallingApplicationsDialog/Location + + + System.Drawing.Point:164,724 + + + + + InstallingApplicationsDialog/WindowState + + + System.Int32:0 + + + + + olvLog/Time:Visibility + + + System.Boolean:True + + + + + olvLog/Time:Width + + + System.Int32:55 + + + + + olvLog/Time:LastDisplayIndex + + + System.Int32:-1 + + + + + olvLog/Message:Visibility + + + System.Boolean:True + + + + + olvLog/Message:Width + + + System.Int32:310 + + + + + olvLog/Message:LastDisplayIndex + + + System.Int32:-1 + + + + + olvLog/LastSortColumn + + + System.String:Time + + + + + olvLog/LastSortOrder + + + System.Int32:0 + + + + + InstallingApplicationsDialog/Expanded + + + System.Boolean:True + + + + + DefaultCommand + + + System.String://////////////////////////////////////////////////////////////////////////////////////// +/// version 6.8.0.0 +/// +/// Changelog: Calc SHA256 sums +/// Ticket: https://github.com/dtgm/chocolatey-packages/issues/196 +/// + +// REQUIRES: +// global vars: saveDir=corresponds to download location of installer file +// app vars: nopush, checksum64file=corresponds to 64 bit install file +// file vars: same as specified by chocopkgup + +// get package variable 'cscript' +string varCScript = app.Variables.ReplaceAllInString("{cscript}"); + +// determine whether we run this by checking cscript exists AND is 1 or 2 +if ((varCScript == "1") || (varCScript == "2")) { + +// ketarin variables we pass for this script to use +string varAppname = app.Variables.ReplaceAllInString("{appname}"); +string varVersion = app.Variables.ReplaceAllInString("{version}"); +string varChocoPkgOutput = app.Variables.ReplaceAllInString("{chocoPkgOut}"); +string varChecksum = app.Variables.ReplaceAllInString("{checksum}"); +string varChecksumx64 = app.Variables.ReplaceAllInString("{checksumx64}"); +string varChecksum64File = app.Variables.ReplaceAllInString("{checksum64file}"); +// string varChecksum64basefile = app.Variables.ReplaceAllInString("{checksum64file:basefile}"); +string varChecksum64ext = app.Variables.ReplaceAllInString("{checksum64file:ext}"); +string varSaveDir = app.Variables.ReplaceAllInString("{saveDir}"); + +// custom variables used in this script +string saveFileName64 = String.Concat(varAppname, "_64_", varVersion, ".", varChecksum64ext); +string savePath64 = Path.Combine(varSaveDir, saveFileName64); +// equivalent to ketarin variable "{file}" +string savePath = app.PreviousLocation; +string pkgPath = Path.Combine(varChocoPkgOutput, varAppname, varVersion); +string fileNameNuspec = String.Concat(varAppname, ".nuspec"); +string fileUriNuspec = Path.Combine(pkgPath, fileNameNuspec); +string fileNameNupkg = String.Concat(varAppname, ".", varVersion, ".nupkg"); +string fileUriNupkg = Path.Combine(pkgPath, fileNameNupkg); + +/* DEBUG + MessageBox.Show(varSaveDir + System.Environment.NewLine + + saveFileName64 + System.Environment.NewLine + + savePath64);*/ + +// do not re-push package if package already created +DateTime today = DateTime.Today; +DateTime pkgCreateDate = File.GetCreationTime(pkgPath); +if (today > pkgCreateDate) { + return; +} + +// if package variable 'checksum' does not exist or is null +if (varChecksum == "{checksum}") { + // calculate SHA256 from {url} Note we are leveraging ketarin's downloaded copy + System.IO.FileStream fileSha = new System.IO.FileStream(savePath, System.IO.FileMode.Open); + System.Security.Cryptography.SHA256 sha256 = new System.Security.Cryptography.SHA256Managed(); + byte[] retValSha = sha256.ComputeHash(fileSha); + fileSha.Close(); + + // build string from byte value + System.Text.StringBuilder sbSha = new System.Text.StringBuilder(); + for (int i = 0; i < retValSha.Length; i++) { + sbSha.Append(retValSha[i].ToString("x2")); + } + + // find $pkgPath -iname "*.nuspec" -o -iname "*.ps1" -exec sed -i 's/'$sbSha'/{checksum}/g' '{}' \; + string replaceChecksum = sbSha.ToString(); + //MessageBox.Show(replaceChecksum); + List<string> fileList = new List<string>(Directory.GetFiles(pkgPath, "*.ps1", SearchOption.AllDirectories)); + string[] filesNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + fileList.AddRange(filesNuspec); + string[] files = fileList.ToArray(); + foreach (string file in files) { + try { + string contents = File.ReadAllText(file); + //MessageBox.Show(contents); + contents = contents.Replace("{checksum}", replaceChecksum); + //MessageBox.Show(contents); + // Make files writable + // File.SetAttributes(file, FileAttributes.Normal); + File.WriteAllText(file, contents); + } catch (Exception ex) { + Console.WriteLine(ex.Message); + } + } +} + +// only get checksum if checksumx64 does NOT exist and 'checksum64file' DOES exists +if (varChecksumx64 == "{checksumx64}" && varChecksum64File != "{checksum64file}") { + // TODO: verify and validate URI checksum64file points to a downloadable file + + // we must download the file to calculate checksum ... may as well save it + System.Net.WebClient webClient = new System.Net.WebClient(); + webClient.DownloadFile(varChecksum64File, savePath64); + + // calculate SHA256 from file of url pointed to by 'checksum64file' + System.IO.FileStream file64Sha = new System.IO.FileStream(savePath64, System.IO.FileMode.Open); + System.Security.Cryptography.SHA256 sha256_64 = new System.Security.Cryptography.SHA256Managed(); + byte[] retVal64Sha = sha256_64.ComputeHash(file64Sha); + file64Sha.Close(); + + // build string from byte value + System.Text.StringBuilder sb64Sha = new System.Text.StringBuilder(); + for (int i = 0; i < retVal64Sha.Length; i++) { + sb64Sha.Append(retVal64Sha[i].ToString("x2")); + } + + // find $pkgPath -iname "*.nuspec" -o -iname "*.ps1" -exec sed -i 's/'$sb64Sha'/{checksumx64}/g' '{}' \; + // Note chocopkgup will strip 1 set of curly braces so {{checksum}} becomes {checksum} + string replace64Checksum = sb64Sha.ToString(); + //MessageBox.Show(replace64Checksum); + List<string> fileList = new List<string>(Directory.GetFiles(pkgPath, "*.ps1", SearchOption.AllDirectories)); + string[] filesNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + fileList.AddRange(filesNuspec); + string[] files = fileList.ToArray(); + foreach (string file in files) { + try { + string contents = File.ReadAllText(file); + //MessageBox.Show(contents); + contents = contents.Replace("{checksumx64}", replace64Checksum); + //MessageBox.Show(contents); + File.WriteAllText(file, contents); + } catch (Exception ex) { + Console.WriteLine(ex.Message); + } + } +} + +// attempt to fix chocopkgup failure when faced with letters in version variable +// ...what was I thinking? no, seriously. +/* +int checkBeta = varVersion.Split('-').Length; +if ( checkBeta == 2) { + string strPre = varVersion.Split('-')[1]; + string strReplace = String.Concat(strPre, "</version>"); + string strCheck = String.Concat(".", DateTime.Now.ToString("yyyyMMdd"), "</version>"); + string[] fileNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + foreach (string file in fileNuspec) { + string contents = File.ReadAllText(file); + contents = contents.Replace(strCheck, strReplace); + File.WriteAllText(file, contents); + } +} +*/ + +// delete existing nupkg made by chocopkgup; we leverage chocopkgup to create the structure/files in destination +System.Diagnostics.Process process1 = new System.Diagnostics.Process(); +System.Diagnostics.ProcessStartInfo proc1 = new System.Diagnostics.ProcessStartInfo(); +proc1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; +proc1.UseShellExecute = true; +proc1.WorkingDirectory = pkgPath; +proc1.FileName = "cmd.exe"; +proc1.Arguments = "/c "+"del /f " + fileUriNupkg; +process1.StartInfo = proc1; +process1.Start(); + +// create a new nupkg +System.Diagnostics.Process process2 = new System.Diagnostics.Process(); +System.Diagnostics.ProcessStartInfo proc2 = new System.Diagnostics.ProcessStartInfo(); +proc2.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; +proc2.UseShellExecute = true; +proc2.WorkingDirectory = pkgPath; +proc2.FileName = "cmd.exe"; +proc2.Arguments = "/c "+"choco pack "+fileUriNuspec+" -d"; +process2.StartInfo = proc2; +process2.Start(); + +// push the nupkg +if (varCScript == "2") { + System.Diagnostics.Process process3 = new System.Diagnostics.Process(); + System.Diagnostics.ProcessStartInfo proc3 = new System.Diagnostics.ProcessStartInfo(); + proc3.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + proc3.UseShellExecute = true; + proc3.WorkingDirectory = pkgPath; + proc3.FileName = "cmd.exe"; + // find nupkg in pkgPath + string[] pushPkg = Directory.GetFiles(pkgPath, "*.nupkg", SearchOption.TopDirectoryOnly); + foreach (String file in pushPkg) { + proc3.Arguments = "/c "+"cpush " + file + " -d"; + } + process3.StartInfo = proc3; + System.Threading.Thread.Sleep(2000); + process3.Start(); +} +} + + + + + DefaultCommandType + + + System.String:CS + + + + + PostUpdateCommand + + + System.String: + + + + + PostUpdateCommandType + + + System.String:Batch + + + + + DefaultApplication + + + System.String:<?xml version="1.0" encoding="utf-8"?> +<Jobs> + <ApplicationJob xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> + <WebsiteUrl /> + <UserAgent /> + <UserNotes /> + <LastFileSize>0</LastFileSize> + <LastFileDate xsi:nil="true" /> + <IgnoreFileInformation>false</IgnoreFileInformation> + <DownloadBeta>Default</DownloadBeta> + + <CheckForUpdatesOnly>false</CheckForUpdatesOnly> + <VariableChangeIndicator /> + <HashVariable /> + <HashType>None</HashType> + <CanBeShared>true</CanBeShared> + <ShareApplication>false</ShareApplication> + <ExclusiveDownload>false</ExclusiveDownload> + <HttpReferer /> + <SetupInstructions /> + <Variables> + <item> + <key> + <string>nopush</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>Textual</VariableType> + <Regex /> + <TextualContent>--nopush</TextualContent> + <Name>nopush</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>version</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>RegularExpression</VariableType> + <Regex>Last program version.*?([\d\.]+)</Regex> + <Url>x</Url> + <Name>version</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>url</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>Textual</VariableType> + <Regex /> + <TextualContent>{getUrl}</TextualContent> + <Name>url</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>url64</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>Textual</VariableType> + <Regex /> + <TextualContent>{getUrl64}</TextualContent> + <Name>url64</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>getUrl</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>RegularExpression</VariableType> + <Regex>[^ "'&lt;&gt;\*]+\.exe</Regex> + <Url>x</Url> + <Name>getUrl</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>getUrl64</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>RegularExpression</VariableType> + <Regex>[^ "'&lt;&gt;\*]+\.exe</Regex> + <Url>x</Url> + <Name>getUrl64</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>checksum</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>RegularExpression</VariableType> + <Regex>[A-Fa-f0-9]{32}</Regex> + <Url>md5</Url> + <TextualContent>{checksum}</TextualContent> + <Name>checksum</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>checksumx64</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>RegularExpression</VariableType> + <Regex>(?&lt;=ResponseUri: )[^\r\n]+</Regex> + <Url>{url64}</Url> + <TextualContent>{checksum}</TextualContent> + <Name>checksumx64</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>checksum64file</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>Textual</VariableType> + <Regex /> + <TextualContent>{url64}</TextualContent> + <Name>checksum64file</Name> + </UrlVariable> + </value> + </item> + <item> + <key> + <string>cscript</string> + </key> + <value> + <UrlVariable> + <RegexRightToLeft>false</RegexRightToLeft> + <VariableType>Textual</VariableType> + <Regex /> + <TextualContent>0</TextualContent> + <Name>cscript</Name> + </UrlVariable> + </value> + </item> + </Variables> + <ExecuteCommand /> + <ExecutePreCommand /> + <ExecuteCommandType>Batch</ExecuteCommandType> + <ExecutePreCommandType>Batch</ExecutePreCommandType> + <Category /> + <SourceType>FixedUrl</SourceType> + + <DeletePreviousFile>false</DeletePreviousFile> + <Enabled>true</Enabled> + <FileHippoId /> + + <TargetPath>{saveDir}\{appname}_{version}.{url:ext}</TargetPath> + <FixedDownloadUrl>{url}</FixedDownloadUrl> + <Name>x </Name> + </ApplicationJob> +</Jobs> + + + + + olvJobs/x:Visibility + + + System.Boolean:True + + + + + olvJobs/x:Width + + + System.Int32:89 + + + + + olvJobs/x:LastDisplayIndex + + + System.Int32:-1 + + + + + olvJobs/Filesize:Visibility + + + System.Boolean:True + + + + + olvJobs/Filesize:Width + + + System.Int32:68 + + + + + olvJobs/Filesize:LastDisplayIndex + + + System.Int32:5 + + + + + olvJobs/url:Visibility + + + System.Boolean:True + + + + + olvJobs/url:Width + + + System.Int32:147 + + + + + olvJobs/url:LastDisplayIndex + + + System.Int32:-1 + + + + + olvJobs/host:Visibility + + + System.Boolean:True + + + + + olvJobs/host:Width + + + System.Int32:120 + + + + + olvJobs/host:LastDisplayIndex + + + System.Int32:10 + + + + + olvJobs/packageGuid:Visibility + + + System.Boolean:True + + + + + olvJobs/packageGuid:Width + + + System.Int32:77 + + + + + olvJobs/packageGuid:LastDisplayIndex + + + System.Int32:14 + + + + + olvJobs/fileDate:Visibility + + + System.Boolean:True + + + + + olvJobs/fileDate:Width + + + System.Int32:97 + + + + + olvJobs/fileDate:LastDisplayIndex + + + System.Int32:3 + + + + + olvJobs/fixedUrl:Visibility + + + System.Boolean:True + + + + + olvJobs/fixedUrl:Width + + + System.Int32:96 + + + + + olvJobs/fixedUrl:LastDisplayIndex + + + System.Int32:9 + + + + + olvJobs/referer:Visibility + + + System.Boolean:True + + + + + olvJobs/referer:Width + + + System.Int32:65 + + + + + olvJobs/referer:LastDisplayIndex + + + System.Int32:13 + + + + + olvJobs/User-Agent:Visibility + + + System.Boolean:True + + + + + olvJobs/User-Agent:Width + + + System.Int32:80 + + + + + olvJobs/User-Agent:LastDisplayIndex + + + System.Int32:8 + + + + + olvJobs/DeletePreviousFile:Visibility + + + System.Boolean:True + + + + + olvJobs/DeletePreviousFile:Width + + + System.Int32:41 + + + + + olvJobs/DeletePreviousFile:LastDisplayIndex + + + System.Int32:20 + + + + + olvJobs/VariableChangeIndicator:Visibility + + + System.Boolean:True + + + + + olvJobs/VariableChangeIndicator:Width + + + System.Int32:55 + + + + + olvJobs/VariableChangeIndicator:LastDisplayIndex + + + System.Int32:15 + + + + + olvJobs/github:Visibility + + + System.Boolean:True + + + + + olvJobs/github:Width + + + System.Int32:64 + + + + + olvJobs/github:LastDisplayIndex + + + System.Int32:16 + + + + + olvJobs/kde:Visibility + + + System.Boolean:True + + + + + olvJobs/kde:Width + + + System.Int32:49 + + + + + olvJobs/kde:LastDisplayIndex + + + System.Int32:17 + + + + + olvJobs/cscript:Visibility + + + System.Boolean:True + + + + + olvJobs/cscript:Width + + + System.Int32:32 + + + + + olvJobs/cscript:LastDisplayIndex + + + System.Int32:22 + + + + + olvJobs/enabled:Visibility + + + System.Boolean:True + + + + + olvJobs/enabled:Width + + + System.Int32:60 + + + + + olvJobs/enabled:LastDisplayIndex + + + System.Int32:26 + + + + + olvJobs/nopush:Visibility + + + System.Boolean:True + + + + + olvJobs/nopush:Width + + + System.Int32:60 + + + + + olvJobs/nopush:LastDisplayIndex + + + System.Int32:23 + + + + + olvJobs/domainname:Visibility + + + System.Boolean:True + + + + + olvJobs/domainname:Width + + + System.Int32:166 + + + + + olvJobs/domainname:LastDisplayIndex + + + System.Int32:10 + + + + + olvJobs/domain:Visibility + + + System.Boolean:True + + + + + olvJobs/domain:Width + + + System.Int32:141 + + + + + olvJobs/domain:LastDisplayIndex + + + System.Int32:17 + + + + + olvJobs/checksum64file:Visibility + + + System.Boolean:True + + + + + olvJobs/checksum64file:Width + + + System.Int32:91 + + + + + olvJobs/checksum64file:LastDisplayIndex + + + System.Int32:25 + + + + + olvJobs/Target2:Visibility + + + System.Boolean:True + + + + + olvJobs/Target2:Width + + + System.Int32:60 + + + + + olvJobs/Target2:LastDisplayIndex + + + System.Int32:-1 + + + + + olvJobs/AppName:Visibility + + + System.Boolean:True + + + + + olvJobs/AppName:Width + + + System.Int32:164 + + + + + olvJobs/AppName:LastDisplayIndex + + + System.Int32:-1 + + + + + olvJobs/version:Visibility + + + System.Boolean:True + + + + + olvJobs/version:Width + + + System.Int32:120 + + + + + olvJobs/version:LastDisplayIndex + + + System.Int32:1 + + + + + olvJobs/filesize:Visibility + + + System.Boolean:True + + + + + olvJobs/filesize:Width + + + System.Int32:68 + + + + + olvJobs/filesize:LastDisplayIndex + + + System.Int32:8 + + + + + olvJobs/user-agent:Visibility + + + System.Boolean:True + + + + + olvJobs/user-agent:Width + + + System.Int32:60 + + + + + olvJobs/user-agent:LastDisplayIndex + + + System.Int32:12 + + + + + olvJobs/delPrevFile:Visibility + + + System.Boolean:True + + + + + olvJobs/delPrevFile:Width + + + System.Int32:60 + + + + + olvJobs/delPrevFile:LastDisplayIndex + + + System.Int32:27 + + + + + olvJobs/varChangeIndicator:Visibility + + + System.Boolean:True + + + + + olvJobs/varChangeIndicator:Width + + + System.Int32:60 + + + + + olvJobs/varChangeIndicator:LastDisplayIndex + + + System.Int32:20 + + + + + olvJobs/varChgInd:Visibility + + + System.Boolean:True + + + + + olvJobs/varChgInd:Width + + + System.Int32:82 + + + + + olvJobs/varChgInd:LastDisplayIndex + + + System.Int32:16 + + + + + olvJobs/url64:Visibility + + + System.Boolean:True + + + + + olvJobs/url64:Width + + + System.Int32:60 + + + + + olvJobs/url64:LastDisplayIndex + + + System.Int32:24 + + + + + olvJobs/hash:Visibility + + + System.Boolean:True + + + + + olvJobs/hash:Width + + + System.Int32:60 + + + + + olvJobs/hash:LastDisplayIndex + + + System.Int32:24 + + + + + olvJobs/hashType:Visibility + + + System.Boolean:True + + + + + olvJobs/hashType:Width + + + System.Int32:60 + + + + + olvJobs/hashType:LastDisplayIndex + + + System.Int32:18 + + + + + ImportFromDatabaseDialog/Size + + + System.Drawing.Size:524,1596 + + + + + olvApplications/Application name:Visibility + + + System.Boolean:True + + + + + olvApplications/Application name:Width + + + System.Int32:291 + + + + + olvApplications/Application name:LastDisplayIndex + + + System.Int32:-1 + + + + + olvApplications/Last updated:Visibility + + + System.Boolean:True + + + + + olvApplications/Last updated:Width + + + System.Int32:130 + + + + + olvApplications/Last updated:LastDisplayIndex + + + System.Int32:-1 + + + + + olvApplications/Uses:Visibility + + + System.Boolean:True + + + + + olvApplications/Uses:Width + + + System.Int32:40 + + + + + olvApplications/Uses:LastDisplayIndex + + + System.Int32:-1 + + + + + olvApplications/LastSortColumn + + + System.String:Application name + + + + + olvApplications/LastSortOrder + + + System.Int32:1 + + + + + ChooseAppsToInstallDialog/Size + + + System.Drawing.Size:618,433 + + + + + ChooseAppsToInstallDialog/Location + + + System.Drawing.Point:675,637 + + + + + ChooseAppsToInstallDialog/WindowState + + + System.Int32:0 + + + + + olvApps/Name:Visibility + + + System.Boolean:True + + + + + olvApps/Name:Width + + + System.Int32:263 + + + + + olvApps/Name:LastDisplayIndex + + + System.Int32:-1 + + + + + olvApps/LastSortColumn + + + System.String:Name + + + + + olvApps/LastSortOrder + + + System.Int32:1 + + + + + olvLists/Name:Visibility + + + System.Boolean:True + + + + + olvLists/Name:Width + + + System.Int32:80 + + + + + olvLists/Name:LastDisplayIndex + + + System.Int32:-1 + + + + + olvLists/Applications:Visibility + + + System.Boolean:True + + + + + olvLists/Applications:Width + + + System.Int32:80 + + + + + olvLists/Applications:LastDisplayIndex + + + System.Int32:-1 + + + + + olvLists/LastSortColumn + + + System.String:Name + + + + + olvLists/LastSortOrder + + + System.Int32:0 + + + + + ChooseAppsToInstallDialog/ListsView + + + System.Int32:4 + + + + + olvJobs/proto:Visibility + + + System.Boolean:True + + + + + olvJobs/proto:Width + + + System.Int32:60 + + + + + olvJobs/proto:LastDisplayIndex + + + System.Int32:11 + + + + + CopyFileInstructionDialog/Size + + + System.Drawing.Size:402,163 + + + + + olvJobs/bytes:Visibility + + + System.Boolean:True + + + + + olvJobs/bytes:Width + + + System.Int32:71 + + + + + olvJobs/bytes:LastDisplayIndex + + + System.Int32:7 + + + + + olvJobs/hashExtVar:Visibility + + + System.Boolean:True + + + + + olvJobs/hashExtVar:Width + + + System.Int32:60 + + + + + olvJobs/hashExtVar:LastDisplayIndex + + + System.Int32:23 + + + + + olvJobs/hashInternal:Visibility + + + System.Boolean:True + + + + + olvJobs/hashInternal:Width + + + System.Int32:60 + + + + + olvJobs/hashInternal:LastDisplayIndex + + + System.Int32:19 + + + + + olvJobs/hashExternal:Visibility + + + System.Boolean:True + + + + + olvJobs/hashExternal:Width + + + System.Int32:60 + + + + + olvJobs/hashExternal:LastDisplayIndex + + + System.Int32:20 + + + + + olvJobs/checksum64:Visibility + + + System.Boolean:True + + + + + olvJobs/checksum64:Width + + + System.Int32:33 + + + + + olvJobs/checksum64:LastDisplayIndex + + + System.Int32:21 + + + + + + + + + + + + + + + + + + + + chocopkgup {nopush} --packagename={appname} --version={version} --pg="{packageGuid}" --url="{preupdate-url}" --urlx64="{url64}" --packagepath="{file}" --checksum="{checksum}" --c64="{checksumx64}" --debug + //////////////////////////////////////////////////////////////////////////////////////// +/// version 6.5 +/// +/// FIX: do not re-push package if package already created +/// + +// REQUIRES: +// global vars: workdir=corresponds to download location of installer file +// app vars: nopush, checksum64file=corresponds to 64 bit install file +// file vars: same as specified by chocopkgup +string varCScript = app.Variables.ReplaceAllInString("{cscript}"); +if ((varCScript == "1") || (varCScript == "2")) { +string varAppname = app.Variables.ReplaceAllInString("{appname}"); +string varVersion = app.Variables.ReplaceAllInString("{version}"); +string varChocoPkgOutput = app.Variables.ReplaceAllInString("{chocoPkgOutput}"); +string varChecksum = app.Variables.ReplaceAllInString("{checksum}"); +string varChecksumx64 = app.Variables.ReplaceAllInString("{checksumx64}"); +string varChecksum64File = app.Variables.ReplaceAllInString("{checksum64file}"); +string varChecksum64basefile = app.Variables.ReplaceAllInString("{checksum64file:basefile}"); +string varChecksum64ext = app.Variables.ReplaceAllInString("{checksum64file:ext}"); +string varWorkdir = app.Variables.ReplaceAllInString("{workdir}"); +string saveFileName64 = String.Concat(varChecksum64basefile, ".", varChecksum64ext); +// equivalent to ketarin variable "{file}" +//string savePath = app.PreviousLocation; +string savePath = app.PreviousLocation; +string pkgPath = Path.Combine(varChocoPkgOutput, varAppname, varVersion); +string fileNameNuspec = String.Concat(varAppname, ".nuspec"); +string fileUriNuspec = Path.Combine(pkgPath, fileNameNuspec); +string fileNameNupkg = String.Concat(varAppname, ".", varVersion, ".nupkg"); +string fileUriNupkg = Path.Combine(pkgPath, fileNameNupkg); + +// do not re-push package if package already created +DateTime today = DateTime.Today; +DateTime pkgCreateDate = File.GetCreationTime(pkgPath); +if (today > pkgCreateDate) { + return; +} + +if (varChecksum == "{checksum}") { + // calculate SHA1 + System.IO.FileStream fileSha1 = new System.IO.FileStream(savePath, System.IO.FileMode.Open); + System.Security.Cryptography.SHA1 sha1 = new System.Security.Cryptography.SHA1CryptoServiceProvider(); + byte[] retValSha1 = sha1.ComputeHash(fileSha1); + fileSha1.Close(); + + // create a string + System.Text.StringBuilder sbSha1 = new System.Text.StringBuilder(); + for (int i = 0; i < retValSha1.Length; i++) { + sbSha1.Append(retValSha1[i].ToString("x2")); + } + + string replaceChecksum = sbSha1.ToString(); + List<string> fileList = new List<string>(Directory.GetFiles(pkgPath, "*.ps1", SearchOption.AllDirectories)); + string[] filesNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + fileList.AddRange(filesNuspec); + string[] files = fileList.ToArray(); + foreach (string file in files) { + try { + string contents = File.ReadAllText(file); + contents = contents.Replace("{checksum}", replaceChecksum); + // Make files writable + // File.SetAttributes(file, FileAttributes.Normal); + File.WriteAllText(file, contents); + } catch (Exception ex) { + Console.WriteLine(ex.Message); + } + } +} + +// only get checksum if {checksum64file} exists and points to a downloadable file +if (varChecksumx64 == "{checksumx64}" && varChecksum64File != "{checksum64file}") { + string savePath64 = Path.Combine(varWorkdir, saveFileName64); + System.Net.WebClient webClient = new System.Net.WebClient(); + webClient.DownloadFile(varChecksum64File, savePath64); + + // calculate SHA1 + System.IO.FileStream file64Sha1 = new System.IO.FileStream(savePath64, System.IO.FileMode.Open); + System.Security.Cryptography.SHA1 sha164 = new System.Security.Cryptography.SHA1CryptoServiceProvider(); + byte[] retVal64Sha1 = sha164.ComputeHash(file64Sha1); + file64Sha1.Close(); + + // create a string + System.Text.StringBuilder sb64Sha1 = new System.Text.StringBuilder(); + for (int i = 0; i < retVal64Sha1.Length; i++) { + sb64Sha1.Append(retVal64Sha1[i].ToString("x2")); + } + + string replace64Checksum = sb64Sha1.ToString(); + List<string> fileList = new List<string>(Directory.GetFiles(pkgPath, "*.ps1", SearchOption.AllDirectories)); + string[] filesNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + fileList.AddRange(filesNuspec); + string[] files = fileList.ToArray(); + foreach (string file in files) { + try { + string contents = File.ReadAllText(file); + contents = contents.Replace("{checksumx64}", replace64Checksum); + File.WriteAllText(file, contents); + } catch (Exception ex) { + Console.WriteLine(ex.Message); + } + } +} + +int checkBeta = varVersion.Split('-').Length; +if ( checkBeta == 2) { + string strPre = varVersion.Split('-')[1]; + string strReplace = String.Concat(strPre, "</version>"); + string strCheck = String.Concat(".", DateTime.Now.ToString("yyyyMMdd"), "</version>"); + string[] fileNuspec = Directory.GetFiles(pkgPath, "*.nuspec", SearchOption.AllDirectories); + foreach (string file in fileNuspec) { + string contents = File.ReadAllText(file); + contents = contents.Replace(strCheck, strReplace); + File.WriteAllText(file, contents); + } +} + +// delete existing nupkg made by chocopkgup; we leverage chocopkgup to create the structure/files in destination +System.Diagnostics.Process process1 = new System.Diagnostics.Process(); +System.Diagnostics.ProcessStartInfo proc1 = new System.Diagnostics.ProcessStartInfo(); +proc1.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; +proc1.UseShellExecute = true; +proc1.WorkingDirectory = pkgPath; +proc1.FileName = "cmd.exe"; +proc1.Arguments = "/c "+"del /f " + fileUriNupkg; +process1.StartInfo = proc1; +process1.Start(); + +// create a new nupkg +System.Diagnostics.Process process2 = new System.Diagnostics.Process(); +System.Diagnostics.ProcessStartInfo proc2 = new System.Diagnostics.ProcessStartInfo(); +proc2.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; +proc2.UseShellExecute = true; +proc2.WorkingDirectory = pkgPath; +proc2.FileName = "cmd.exe"; +proc2.Arguments = "/c "+"choco pack "+fileUriNuspec+" -d"; +process2.StartInfo = proc2; +process2.Start(); + +// push the nupkg +if (varCScript == "2") { + System.Diagnostics.Process process3 = new System.Diagnostics.Process(); + System.Diagnostics.ProcessStartInfo proc3 = new System.Diagnostics.ProcessStartInfo(); + proc3.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; + proc3.UseShellExecute = true; + proc3.WorkingDirectory = pkgPath; + proc3.FileName = "cmd.exe"; + // find nupkg in pkgPath + string[] pushPkg = Directory.GetFiles(pkgPath, "*.nupkg", SearchOption.TopDirectoryOnly); + foreach (String file in pushPkg) { + proc3.Arguments = "/c "+"cpush " + file + " -d"; + } + process3.StartInfo = proc3; + System.Threading.Thread.Sleep(2000); + process3.Start(); +} +} + + + \ No newline at end of file