Skip to content

Commit

Permalink
[embedlite] Add configuration for embedding and pc files
Browse files Browse the repository at this point in the history
This commit also changes GRE_BUILDID to MOZ_BUILDID
  • Loading branch information
rainemak committed Apr 8, 2020
1 parent c0e1980 commit 9a31b76
Show file tree
Hide file tree
Showing 28 changed files with 594 additions and 5 deletions.
5 changes: 3 additions & 2 deletions embedding/embedlite/Makefile.in
Expand Up @@ -2,5 +2,6 @@
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

GRE_BUILDID := $(shell cat $(DEPTH)/config/buildid)
DEFINES += -DGRE_BUILDID=\"$(GRE_BUILDID)\"
MOZ_BUILDID := $(shell awk '{print $$3}' $(DEPTH)/buildid.h)
DEFINES += -DMOZ_BUILDID=\"$(MOZ_BUILDID)\"

2 changes: 1 addition & 1 deletion embedding/embedlite/config/mozconfig.merqtxulrunner
Expand Up @@ -19,7 +19,7 @@ ac_add_options --enable-system-sqlite
ac_add_options --without-x
ac_add_options --with-gl-provider=EGL

ac_add_options --enable-application=browser
ac_add_options --enable-application=embedding/embedlite
ac_add_options --enable-update-channel=nightly
ac_add_options --enable-tests
ac_add_options --enable-default-toolkit=cairo-qt
Expand Down
151 changes: 151 additions & 0 deletions embedding/embedlite/installer/Makefile.in
@@ -0,0 +1,151 @@
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.

STANDALONE_MAKEFILE := 1

NO_PKG_FILES = \
xulrunner-config \
regchrome* \
regxpcom* \
$(NULL)

# We want xpcshell, run-mozilla and install_app.py in the SDK but not in the binary package.
ifndef STAGE_SDK
NO_PKG_FILES += \
xpcshell* \
run-mozilla* \
install_app.py \
$(NULL)
endif

# If we're on mac, we don't want an end-user-facing DMG, we want a .tar.bz2
# which developers then use to package their application.

ifeq (cocoa,$(MOZ_WIDGET_TOOLKIT))
MOZ_PKG_FORMAT = BZ2
_APPNAME = XUL.framework
_BINPATH = /$(_APPNAME)/Versions/Current
_RESPATH := $(_BINPATH)
endif

include $(topsrcdir)/config/rules.mk
MOZ_PKG_DUPEFLAGS = -f $(srcdir)/allowed-dupes.mn

INSTALL_SDK = 1

include $(topsrcdir)/toolkit/mozapps/installer/signing.mk
include $(topsrcdir)/toolkit/mozapps/installer/packager.mk

# Add pkg-config files to the install:: target

pkg_config_files = \
libxul.pc \
libxul-embedding.pc \
mozilla-js.pc \
mozilla-plugin.pc \
$(NULL)

ifdef MOZ_NATIVE_NSPR
NSPR_NAME=nspr
NSPR_VERSION=$(shell $(NSPR_CONFIG) --version)
else
pkg_config_files += mozilla-nspr.pc
NSPR_NAME=mozilla-nspr
FULL_NSPR_CFLAGS=-I\$${includedir}
FULL_NSPR_LIBS=$(subst $(prefix),\$${sdkdir},$(shell $(DEPTH)/nsprpub/config/nspr-config --libs))
NSPR_VERSION=$(shell $(DEPTH)/nsprpub/config/nspr-config --version)
endif

MOZ_XUL_LINK = -lxpcomglue_s -lxul
ifdef JS_SHARED_LIBRARY
MOZ_JS_LINK = -lmozjs
else
MOZ_JS_LINK = $(MOZ_XUL_LINK)
endif

$(warning FULL_NSPR_CFLAGS=$(FULL_NSPR_CFLAGS))

ifndef MOZ_NATIVE_NSS
pkg_config_files += mozilla-nss.pc
endif

%.pc: $(srcdir)/%.pc.in $(GLOBAL_DEPS)
cat $< | sed \
-e "s|%prefix%|$(prefix)|" \
-e "s|%includedir%|$(includedir)|" \
-e "s|%idldir%|$(idldir)|" \
-e "s|%sdkdir%|$(sdkdir)|" \
-e "s|%MOZ_APP_NAME%|$(MOZ_APP_NAME)|" \
-e "s|%MOZILLA_VERSION%|$(MOZ_APP_VERSION)|" \
-e "s|%WCHAR_CFLAGS%|$(WCHAR_CFLAGS)|" \
-e "s|%FULL_NSPR_LIBS%|$(FULL_NSPR_LIBS)|" \
-e "s|%FULL_NSPR_CFLAGS%|$(FULL_NSPR_CFLAGS)|" \
-e "s|%NSPR_NAME%|$(NSPR_NAME)|" \
-e "s|%NSPR_VERSION%|$(NSPR_VERSION)|" \
-e "s|%MOZ_XUL_LINK%|$(MOZ_XUL_LINK)|" \
-e "s|%MOZ_JS_LINK%|$(MOZ_JS_LINK)|" > $@
chmod 644 $@

install:: $(pkg_config_files)
@echo pkg_config_file: $(pkg_config_files)
$(SYSINSTALL) $(IFLAGS1) $^ $(DESTDIR)$(libdir)/pkgconfig

GARBAGE += $(pkg_config_files)

GARBAGE += debian/changelog

DEBDESTDIR=debian/$(MOZ_BUILD_APP)

MOZ_BUILDID := $(shell awk '{print $$3}' $(DEPTH)/buildid.h)
DEFINES += -DMOZ_BUILDID=\"$(MOZ_BUILDID)\"

MOZ_DEB_TIMESTAMP = "$(shell date +"%a, %d %b %Y %T %z" )"

DEFINES += \
-DGRE_MILESTONE=$(GRE_MILESTONE) \
-DMOZ_BUILDID=$(MOZ_BUILDID) \
-DMOZ_DEB_TIMESTAMP=$(MOZ_DEB_TIMESTAMP) \
-DMOZ_APP_NAME=$(MOZ_APP_NAME) \
-Dinstalldir=$(installdir) \
$(NULL)

ifeq ($(OS_TARGET),Linux)
debian/changelog: $(srcdir)/debian/changelog.in $(DIST)/bin/platform.ini
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)

debian/xulrunner.links: $(srcdir)/debian/xulrunner.links.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)

debian/xulrunner.service: $(srcdir)/debian/xulrunner.service.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)

debian/prerm: $(srcdir)/debian/prerm.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)

debian/postinst: $(srcdir)/debian/postinst.in
$(call py_action,preprocessor, \
$(AUTOMATION_PPARGS) $(DEFINES) $(ACDEFINES) $^ -o $@)

package:
$(MAKE) package -C $(DEPTH)

deb: package debian/changelog debian/xulrunner.service debian/xulrunner.links
$(NSINSTALL) $(topsrcdir)/$(MOZ_BUILD_APP)/installer/debian .
rm -fr $(DEBDESTDIR)
$(NSINSTALL) -D $(DEBDESTDIR)/$(installdir)
cp -pRL $(DEPTH)/dist/$(MOZ_BUILD_APP)/* $(DEBDESTDIR)/$(installdir)
$(NSINSTALL) -D $(DEBDESTDIR)/usr/share/dbus-1/services/
cp debian/$(MOZ_BUILD_APP).service $(DEBDESTDIR)/usr/share/dbus-1/services/org.mozilla.$(MOZ_BUILD_APP).service
dh_link; fakeroot dh_fixperms; fakeroot dh_installdeb; fakeroot dh_shlibdeps; fakeroot dh_gencontrol; fakeroot dh_md5sums; fakeroot dh_builddeb;
endif

DEB_BUILD_ARCH = $(shell dpkg-architecture -qDEB_BUILD_ARCH)
# package name comes from xulrunner/installer/debian/changelog.in
DEB_PKG_NAME = $(MOZ_PKG_APPNAME)_$(GRE_MILESTONE)-$(MOZ_BUILDID)_$(DEB_BUILD_ARCH).deb
# relative to $(DIST)
UPLOAD_EXTRA_FILES += ../xulrunner/$(DEB_PKG_NAME)
161 changes: 161 additions & 0 deletions embedding/embedlite/installer/allowed-dupes.mn
@@ -0,0 +1,161 @@
# Known duplicate files
# This file is ideally removed, but some existing files will be grandfathered in
# See bug 1303184
#
# PLEASE DO NOT ADD MORE EXCEPTIONS TO THIS LIST
#

# For android multilocale; see bug 1313702
chrome/en-US/locale/branding/brand.dtd
chrome/en-US/locale/branding/brand.properties
chrome/en-US/locale/en-US/browser/aboutAccounts.dtd
chrome/en-US/locale/en-US/browser/aboutAccounts.properties
chrome/en-US/locale/en-US/browser/aboutAddons.dtd
chrome/en-US/locale/en-US/browser/aboutAddons.properties
chrome/en-US/locale/en-US/browser/aboutDownloads.dtd
chrome/en-US/locale/en-US/browser/aboutDownloads.properties
chrome/en-US/locale/en-US/browser/aboutHealthReport.dtd
chrome/en-US/locale/en-US/browser/aboutHome.dtd
chrome/en-US/locale/en-US/browser/aboutHome.properties
chrome/en-US/locale/en-US/browser/aboutLogins.dtd
chrome/en-US/locale/en-US/browser/aboutLogins.properties
chrome/en-US/locale/en-US/browser/checkbox.dtd
chrome/en-US/locale/en-US/browser/config.dtd
chrome/en-US/locale/en-US/browser/config.properties
chrome/en-US/locale/en-US/browser/devicePrompt.properties
chrome/en-US/locale/en-US/browser/handling.properties
chrome/en-US/locale/en-US/browser/passwordmgr.properties
chrome/en-US/locale/en-US/browser/phishing.dtd
chrome/en-US/locale/en-US/browser/sync.properties
chrome/en-US/locale/en-US/browser/overrides/aboutAbout.dtd
chrome/en-US/locale/en-US/browser/overrides/global.dtd
chrome/en-US/locale/en-US/browser/overrides/global/mozilla.dtd
chrome/en-US/locale/en-US/browser/overrides/intl.css
chrome/en-US/locale/en-US/browser/region.properties
chrome/en-US/locale/en-US/browser/webcompatReporter.properties
chrome/en-US/locale/en-US/browser/searchplugins/amazon-co-uk.xml
chrome/en-US/locale/en-US/browser/searchplugins/amazon-de.xml
chrome/en-US/locale/en-US/browser/searchplugins/amazon-en-GB.xml
chrome/en-US/locale/en-US/browser/searchplugins/amazon-in.xml
chrome/en-US/locale/en-US/browser/searchplugins/amazondotcom.xml
chrome/en-US/locale/en-US/browser/searchplugins/bolcom-fy-NL.xml
chrome/en-US/locale/en-US/browser/searchplugins/bolcom-nl.xml
chrome/en-US/locale/en-US/browser/searchplugins/bing.xml
chrome/en-US/locale/en-US/browser/searchplugins/duckduckgo.xml
chrome/en-US/locale/en-US/browser/searchplugins/google-nocodes.xml
chrome/en-US/locale/en-US/browser/searchplugins/google.xml
chrome/en-US/locale/en-US/browser/searchplugins/gulesider-mobile-NO.xml
chrome/en-US/locale/en-US/browser/searchplugins/list.txt
chrome/en-US/locale/en-US/browser/searchplugins/qwant.xml
chrome/en-US/locale/en-US/browser/searchplugins/rediff.xml
chrome/en-US/locale/en-US/browser/searchplugins/twitter.xml
chrome/en-US/locale/en-US/browser/searchplugins/wikipedia.xml
chrome/en-US/locale/en-US/browser/searchplugins/wikipedia-es.xml
chrome/en-US/locale/en-US/browser/searchplugins/wikipedia-fr.xml
chrome/en-US/locale/en-US/browser/searchplugins/wikipedia-hi.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-de.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-en-GB.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-es.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-espanol.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-france.xml
chrome/en-US/locale/en-US/browser/searchplugins/yahoo-in.xml

# Some of these are common with desktop
chrome/en-US/locale/en-US/browser/overrides/AccessFu.properties
chrome/en-US/locale/en-US/browser/overrides/about.dtd
chrome/en-US/locale/en-US/browser/overrides/aboutReader.properties
chrome/en-US/locale/en-US/browser/overrides/aboutRights.dtd
chrome/en-US/locale/en-US/browser/overrides/charsetMenu.properties
chrome/en-US/locale/en-US/browser/overrides/commonDialogs.properties
chrome/en-US/locale/en-US/browser/overrides/crashreporter/crashes.dtd
chrome/en-US/locale/en-US/browser/overrides/crashreporter/crashes.properties
chrome/en-US/locale/en-US/browser/overrides/dom/dom.properties
chrome/en-US/locale/en-US/browser/overrides/global/aboutSupport.dtd
chrome/en-US/locale/en-US/browser/overrides/global/aboutSupport.properties
chrome/en-US/locale/en-US/browser/overrides/global/aboutTelemetry.dtd
chrome/en-US/locale/en-US/browser/overrides/global/aboutTelemetry.properties
chrome/en-US/locale/en-US/browser/overrides/global/aboutWebrtc.properties
chrome/en-US/locale/en-US/browser/overrides/intl.properties
chrome/en-US/locale/en-US/browser/overrides/passwordmgr.properties
chrome/en-US/locale/en-US/browser/overrides/plugins.properties
chrome/en-US/locale/en-US/browser/overrides/plugins/pluginproblem.dtd
chrome/en-US/locale/en-US/browser/overrides/search/search.properties
chrome/en-US/locale/en-US/global-platform/mac/intl.properties
chrome/en-US/locale/en-US/global-platform/unix/accessible.properties
chrome/en-US/locale/en-US/global-platform/unix/intl.properties
chrome/en-US/locale/en-US/global-platform/unix/platformKeys.properties
chrome/en-US/locale/en-US/global-platform/win/accessible.properties
chrome/en-US/locale/en-US/global-platform/win/intl.properties
chrome/en-US/locale/en-US/global-platform/win/platformKeys.properties
chrome/en-US/locale/en-US/global/AccessFu.properties
chrome/en-US/locale/en-US/global/about.dtd
chrome/en-US/locale/en-US/global/aboutAbout.dtd
chrome/en-US/locale/en-US/global/aboutReader.properties
chrome/en-US/locale/en-US/global/aboutRights.dtd
chrome/en-US/locale/en-US/global/aboutSupport.dtd
chrome/en-US/locale/en-US/global/aboutSupport.properties
chrome/en-US/locale/en-US/global/aboutTelemetry.dtd
chrome/en-US/locale/en-US/global/aboutTelemetry.properties
chrome/en-US/locale/en-US/global/aboutWebrtc.properties
chrome/en-US/locale/en-US/global/charsetMenu.properties
chrome/en-US/locale/en-US/global/commonDialogs.properties
chrome/en-US/locale/en-US/global/crashes.dtd
chrome/en-US/locale/en-US/global/crashes.properties
chrome/en-US/locale/en-US/global/dom/dom.properties
chrome/en-US/locale/en-US/global/global.dtd
chrome/en-US/locale/en-US/global/intl.css
chrome/en-US/locale/en-US/global/intl.properties
chrome/en-US/locale/en-US/global/mozilla.dtd
chrome/en-US/locale/en-US/global/plugins.properties
chrome/en-US/locale/en-US/global/search/search.properties
chrome/en-US/locale/en-US/passwordmgr/passwordmgr.properties
chrome/en-US/locale/en-US/pluginproblem/pluginproblem.dtd
chrome/toolkit/skin/classic/global/autocomplete.css
chrome/toolkit/skin/classic/global/button.css
chrome/toolkit/skin/classic/global/checkbox.css
chrome/toolkit/skin/classic/global/dialog.css
chrome/toolkit/skin/classic/global/dropmarker.css
chrome/toolkit/skin/classic/global/global.css
chrome/toolkit/skin/classic/global/groupbox.css
chrome/toolkit/skin/classic/global/listbox.css
chrome/toolkit/skin/classic/global/menu.css
chrome/toolkit/skin/classic/global/menulist.css
chrome/toolkit/skin/classic/global/numberbox.css
chrome/toolkit/skin/classic/global/popup.css
chrome/toolkit/skin/classic/global/preferences.css
chrome/toolkit/skin/classic/global/progressmeter.css
chrome/toolkit/skin/classic/global/radio.css
chrome/toolkit/skin/classic/global/resizer.css
chrome/toolkit/skin/classic/global/richlistbox.css
chrome/toolkit/skin/classic/global/scale.css
chrome/toolkit/skin/classic/global/scrollbars.css
chrome/toolkit/skin/classic/global/scrollbox.css
chrome/toolkit/skin/classic/global/spinbuttons.css
chrome/toolkit/skin/classic/global/splitter.css
chrome/toolkit/skin/classic/global/tabbox.css
chrome/toolkit/skin/classic/global/textbox.css
chrome/toolkit/skin/classic/global/toolbar.css
chrome/toolkit/skin/classic/global/toolbarbutton.css
chrome/toolkit/skin/classic/global/tree.css
chrome/toolkit/skin/classic/global/wizard.css
chrome/toolkit/skin/classic/mozapps/downloads/downloadButtons.png
chrome/toolkit/skin/classic/mozapps/update/downloadButtons.png
components/FxAccountsPush.js
modules/FxAccountsPush.js
modules/commonjs/sdk/ui/button/view/events.js
modules/commonjs/sdk/ui/state/events.js
modules/devtools/Console.jsm
modules/devtools/Loader.jsm
modules/devtools/Simulator.jsm
modules/devtools/shared/Console.jsm
modules/devtools/shared/Loader.jsm
modules/devtools/shared/apps/Simulator.jsm
res/table-remove-column-active.gif
res/table-remove-column-hover.gif
res/table-remove-column.gif
res/table-remove-row-active.gif
res/table-remove-row-hover.gif
res/table-remove-row.gif
modules/commonjs/index.js
chrome/toolkit/content/global/XPCNativeWrapper.js
7 changes: 7 additions & 0 deletions embedding/embedlite/installer/debian/changelog.in
@@ -0,0 +1,7 @@
# if the naming changes please modify DEB_PKG_NAME in xulrunner/installer/Makefile.in as well
#filter substitution
xulrunner (@GRE_MILESTONE@-@GRE_BUILDID@) unstable; urgency=low

* Mozilla Nightly (Closes: #nnnn) <nnnn is the bug number of your ITP>

-- Mozilla Runtime <mobile-feedback@mozilla.com> @MOZ_DEB_TIMESTAMP@
1 change: 1 addition & 0 deletions embedding/embedlite/installer/debian/compat
@@ -0,0 +1 @@
4
48 changes: 48 additions & 0 deletions embedding/embedlite/installer/debian/control
@@ -0,0 +1,48 @@
Source: xulrunner
Section: user/network
Priority: extra
Maintainer: Mobile Feedback <mobile-feedback@mozilla.com>
Build-Depends: debhelper (>= 5)
Standards-Version: 3.7.2

Package: xulrunner
Architecture: any
Depends: ${shlibs:Depends}
Description: Web and JavaScript engine used by the Firefox Web browser
The Mozilla runtime is the modern browser engine, also known as "Gecko," that powers Firefox and can be embedded by other applications
XB-Maemo-Display-Name: Mozilla Runtime
XB-Maemo-Icon-26:
MB5!.1PT*&@H````-24A$4@```!H````:"`8```"I2DS.````"7!(67,```L3
M```+$P$`FIP8```%;$E$051(B:667XQ4U1W'/_>>>V?NG=F9V3^S_W%9<'#!
M/Q1;NQ:EQH@:T2"EH>&A34R;]$U?Q%9-VH:41BUJFV"-B<8'^Z!-VP=E?37&
M5=18L"SACVMVH<M.9W>8V9G9N7-G[O_3AP6$LD"$;W*3<T_R^W[.]Y=S3@Z<
ME90H_)\DE\Y=J]3SHW_\1)6O#FV2NVD'D*\,W<T;JWK.0W>3OA[012N68]LW
MD1W^!8?W_XGANQ^C5?V$(V/_8L.VGU.:.JG\\M@[UPK2SD/V#=U,K=QDW;TF
M#S_[&HZC4,^O9_T6'84VWO[PI]>32/MFV.URZ^;G273UT7^7`3&)#%*!TM"U
MS]ZHTC?\B/SUD7\J>\E?,TC^'4%LA4?DS\O^V]<H<L!I.6`:,5S[:#B^T)?1
M\MJZ>]YF8:GLB3@/WIQ!,U1F9AH<V]VX&DB1N]'HS6WFN]L>8>"V`6(=O;)S
M8]O<?"!E%/+ZFZ_R_'-[U;4CZTX6NA_8;VZX_X>IWO3W4\,]W;II4CE3MZJS
M9R9JIPICSOBQ,4Z_4+U<HH@H?H"W7CY`@,&NEUY1>M;?GFBC^=2NWR-434HU
M;OY@\]:'8OTW;3]N&@RM74ER1195Z!0S1E^QS5B3CZL[BHJ<L$_L^1T'?[O_
MDD07_LCQQW]$;M-3M&JEL8EJ[M$?/QN"2*OI[-"JW(AX[&<[J:174NK(D<T-
M(F*"N>EYBJ<7*)VI4%EHL'!ZWG7R\[_AT)Z7+O06YR%_&>PBU;V#RLE]%/]S
M5/A6YK7WIP+1WCLJA"Z:C44*E1H=]SZ*TMF-D=31@?J9&E:Q@EVW<2IUM$Q"
M\U8/W1>MW9)GXMW#Y_R_.;!6(^+SO[VH;/[K%XN'QJ>/C7VR+]CVAY1^XRVJ
M%A?(9`IO=`MS'8-XAH[M!5B-%JUZ`]_U20UT0;-%Z_@I8J&OJ<.]S['QF=RR
MK;M(]^S=R<8-[PA148S\89*WW$GVUN^1T049324I)-;D?VG,E:F7+%+?N9'%
M:I7J=!&W+TLSE<;Y^."?>>^))R].=+%4#+&3,%1"LX?6Z`[\U`W87\]0*Y2H
MN1YU)\0UX]A^2*0+HJ2!.;*2MM4K$%T91,M%B2>VPM;LN5VWC+9T0>P.K!;,
M%8AL"RN10$G$"7K:(1G#C1N8G2F2=XP02/!5B=-R\<(63!>1PH!(K"*W)L<4
MY>5!;4X/]<5V)AM0KX(J"!(F]722T/.(!KHQLYTT58FN0A!&1&Z(W_+P\B6\
M`U_BZW%D6U805FX`/E\>%/D&MB/(SX,:@6&"ZQ`T&MC51?SV#*X21Q,0DZ`&
M+J$?X9>K^">F""HE@DH-?!>D;5R^=:%E4;-<'#N!],#WH!D#31`,KB!038)\
M$5W5<%4)00"A@CST;[P3D_BVA73J$'J`6[\\R)THXVS,T[ZJ`]\#Q8;:/&@Z
M%(`C<;QL%X$O(!T#1<!"!8X>)5I<`,^&R`.$!<Q<83-0I5[X"*7S-M(IJ!6@
M50-A@&-#N0"#JXFZ^J&B@YF&\@($$AP+\``)A!,P>Q(NN!DN;9_2Q._8CB\,
M(@]:<Q#Y$#H0^-!8A,(T%&?`5T#)0*B"-7T6I$CP_PBS!ZX,HEP@3/3C)D:)
MXA"5(*Q!%"Y]01-D"%*'P`17!3L`KP'2!J(/8'8/>,VK@(A@]CBH:PGM'+)\
M=EH#G*55JQF(C8"O@]T`IP&1!()).+4+ZE^=,[L2"&`1YKZ$L!=J-X&B0AIH
M`C;(&O@.!&6(3H.<!N8_A9E?06W\*M[+:A!23T/J('2UH$TNG2!#0DI".H#,
M)&1>!-8M9_!MWFTQB*V&Q"AX(V`,@-3`*X*<`O\@^">6HEX?Z$*90/QLO<]2
:+Z,K%?P/&D=O=_6]@+\`````245.1*Y"8((`
`

0 comments on commit 9a31b76

Please sign in to comment.