summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2015-12-24OModule::onFirstClient is unusedNoel Grandin
also move the MutexGuard in revokeClient. No need to hold it while doing an osl_atomic_increment. Save it until we actually need to call onLastClient. Change-Id: Ia87f24b66b0430604a2fe717c95223ff1f5ece6d Reviewed-on: https://gerrit.libreoffice.org/20919 Reviewed-by: Noel Grandin <noelgrandin@gmail.com> Tested-by: Noel Grandin <noelgrandin@gmail.com>
2015-12-24Class ImplGetDevFontList renamed to ImplDeviceFontListChris Sherlock
Change-Id: I1282b61eacc4bac2f049340bd11c9467c0c239c0 Reviewed-on: https://gerrit.libreoffice.org/20918 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23sd: fix not necessary to pass default argumentHenry Castro
Change-Id: I4f4277bdf6b513bfce58d96000c485fbdc82a1b1
2015-12-24vcl: function name change to ImplFindFontFamilyOfDefaultFontChris Sherlock
Changed ImplFindDefaultFontFamily to ImplFindFontFamilyOfDefaultFont because it was misleading before. It was originally FindDefaultFont, which it never was (it found an instance of PhysicalFontFamily, not a specific font face), but when I changed it to ImplFindDefaultFontFamily this is wrong also because it doesn't find a default font family, it finds the default font and then returns that font's PhysicalFontFamily. Whilst this function name is longer, it's also a private function so not going to be used by other classes, thus I think it's better to increase code reading clarity in this instance. Change-Id: Ie39fa5899fece157cdca6789d7b8504e58ceb316 Reviewed-on: https://gerrit.libreoffice.org/20917 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-24vcl: update names of find functions in PhysicalFontCollectionChris Sherlock
The main issue I have with the naming convention is that it doesn't show you clearly what you are finding. We look for FontFamily instances, but later on down the track what if we want to find something else? Change-Id: I0a4267581eafd0bf17548e8d16814b5b49d27ec9 Reviewed-on: https://gerrit.libreoffice.org/20916 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-24vcl: group public find functions, clarify comments in PhysFontCollectionChris Sherlock
Change-Id: I0044a5f467f2620203aa9ebcda57bbd9f81db7e5 Reviewed-on: https://gerrit.libreoffice.org/20915 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23sd tiled rendering: enable map mode to center imagesHenry Castro
In the tiled rendering case the map mode is disabled, and conversion pixel to logical is not computed. Change-Id: I0d54aaa897f0fe0df6e8b55334053dc66b6ea925 Reviewed-on: https://gerrit.libreoffice.org/20912 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Henry Castro <hcastro@collabora.com>
2015-12-23crashtesting: export of ooo40765-1.sxw to docx failsCaolán McNamara
Change-Id: I57d5e085e612908e7a22f444c771ec9fa45485ce
2015-12-23loplugin:unreffunMaxim Monastirsky
Change-Id: If2ad0e252d2cfa204564b86cb2c6d0886d5fa107
2015-12-23guard against missing DropcapMgr and FoundryCaolán McNamara
Change-Id: I1007d4fac2514bc165941c70109cd8e3d57153cd
2015-12-23vcl: private functions in PhysicalFontCollection start with ImplChris Sherlock
Not a fan, but I'll stick with convention and prefix private functions with Impl in PhysicalFontCollection. Change-Id: Ided081a19ec071ecd5c6a5a4929584ae0f3b0f05 Reviewed-on: https://gerrit.libreoffice.org/20881 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23Upload libvisio 0.1.4Fridrich Štrba
Change-Id: Ia4cb506a95a150b8106187719e9104760409dea6
2015-12-23restore removed functionDavid Tardon
It is used by the tubes collaboration stuff. Change-Id: I9e31f0588f6c400716fba29806c1dab462c32a43
2015-12-23add missing includeDavid Tardon
Change-Id: I62c75d4e4f08539038861b58cb213677ae930f7a
2015-12-23vcl: No need for WinGlyphFallbackSubstititution to be friend classChris Sherlock
Change-Id: Ibe742afdbdf2601e33621d81ad2759aa483d368e Reviewed-on: https://gerrit.libreoffice.org/20880 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23vcl: rearrange PhysicalFontCollection function listing orderChris Sherlock
Change-Id: If9492493f0fcbe8a282820d37bccf54af7cc60ec Reviewed-on: https://gerrit.libreoffice.org/20879 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23vcl: make PhysicalFontFamily::FindDefaultFont() privateChris Sherlock
Change-Id: I603a1556051ea15b45e80ed7d6fcf9dbb7b13998 Reviewed-on: https://gerrit.libreoffice.org/20866 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23Access2Base - Support of Hsqldb 2.3Jean-Pierre Ledure
Addition of CLOB and BLOB datatypes Change-Id: If42c0dbb1862f525d2a0a1abf98bd053543a3d3c
2015-12-23convert tubes to VclPtrDavid Tardon
Change-Id: I54fb058ad1ad89183acfd4d2661c10ccffc408d6
2015-12-23New saving behaviorMaxim Monastirsky
Changes in this commit: - AlwaysAllowSave config is gone. Saving is always permitted, unless in a read only document. Also changed the behavior in dbaccess to match sfx2. - The toolbar save button is always enabled, to always give access to the dropdown. That's the case even in a read only document, except that it changes to DROPDOWNONLY, and the save as command icon+tooltip. In table/query designers we still disable the button in read only state. - When the document is modified, the toolbar button gets a special icon to indicate that. TODO: - Icons for the document modified state are still missing. I added some fake links to Tango's links.txt in order to test the new behavior. These links shouldn't stay as-is in a production version! Change-Id: I56c169bf48b78faaf53c2989ce8624f8297ffb6e Reviewed-on: https://gerrit.libreoffice.org/20839 Reviewed-by: Maxim Monastirsky <momonasmon@gmail.com> Tested-by: Maxim Monastirsky <momonasmon@gmail.com>
2015-12-23loplugin:unusedfields in avmediaNoel Grandin
Change-Id: I725a80cf7b6f2b728e650d0f365d063931b17ea7
2015-12-23loplugin:unusedfields in basctlNoel Grandin
Change-Id: I565bd86167c93ece1d65ce8a3b148144f5a7107a
2015-12-23loplugin:unusedfields in basicNoel Grandin
Change-Id: I304f3903f305ba5b538964071ab95b57ebf2f970
2015-12-23tdf#96541 - dialog "About LibreOfficeDev" has lost its logoNoel Grandin
regression from 58d8d8a "tdf#69977: uno::Sequence is expensive" Change-Id: I792b5971a7a3a9532cccb36add5b558c68e397ef
2015-12-23loplugin:unusedfields in chart2Noel Grandin
Change-Id: I8203f84ad8b138932c990032e17ea5d2daf384bb
2015-12-23vcl: Make ImplFindByAttributes public and renameChris Sherlock
Renamed PhysicalFontCollection::ImplFindByAttributes to FindByAttributes. This function is actually useful for finding a font within the collection, so I'm moving it from being a protected function to public because it is actually useful in its own right, not just for PhysicalFontCollection. Note that ImplFontAttrs is a mess anyway, so not going to touch that (yet). Change-Id: I884ddd5118cbbb0f92b157540f7ffcf1bf35609b Reviewed-on: https://gerrit.libreoffice.org/20865 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23vcl: make PhysicalFontFamily::ImplFindBySubstFontAttr privateChris Sherlock
Change-Id: I2e066393b5ee90c96cea0871c68a72b408a8d0b2 Reviewed-on: https://gerrit.libreoffice.org/20864 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23vcl: make PhysicalFontFamily::ImplFindByAliasName privateChris Sherlock
Change-Id: Idb0df528beb9551431fe32a69b54fe8a51cba2eb Reviewed-on: https://gerrit.libreoffice.org/20863 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-23loplugin:unusedfields in connectivityNoel Grandin
Change-Id: I32226b6959b2bfd316de6ed93b070b68ad875562
2015-12-23loplugin:unusedfields in cuiNoel Grandin
Change-Id: I7a1092708881d1d43debf0217a5401c5b65838a5
2015-12-23loplugin:unusedfields in dbaccessNoel Grandin
Change-Id: I5f38bf33deaec17203e1bdcd3a61085266e42501
2015-12-23loplugin:unusedfields in desktopNoel Grandin
Change-Id: Ic816a7faf4d357d16c13f67533b3b409a531d14c
2015-12-23loplugin:unusedfields in eventattacherNoel Grandin
Change-Id: I40c69865661cdca856118cab7c43cbb0eadfdc74
2015-12-23loplugin:unusedfields in extensionsNoel Grandin
Change-Id: I89d33ea8be97f32c090c8fbf739cbf5e150b12c4
2015-12-23loplugin:unusedfields in filterNoel Grandin
Change-Id: Ic35cff139f5f180ff93fe7b1ecbd15de6c474821
2015-12-23loplugin:unusedfields in formsNoel Grandin
Change-Id: I875c07dcfc9fd9537ced1facd88ac712a7dacbbd
2015-12-23loplugin:unusedfields in fpickerNoel Grandin
Change-Id: Ia5d9211a668c25c9891ed69902fe1a4fbb2d8483
2015-12-23loplugin:unusedfields in frameworkNoel Grandin
Change-Id: Ic6cfbe9f0c7589804b7ffddac0350c188d974c3d
2015-12-23loplugin:unusedfields in /includeNoel Grandin
Change-Id: Ia406e727890a365cc89831c96140cad8240f9b61
2015-12-23starmath: Avoid warning C4819Takeshi Abe
Change-Id: I051b2058e7c7f0424faf49f027330b1bbc93c2d9 Reviewed-on: https://gerrit.libreoffice.org/20869 Reviewed-by: Kohei Yoshida <libreoffice@kohei.us> Tested-by: Kohei Yoshida <libreoffice@kohei.us>
2015-12-23starmath: Manage SmEditAccessible's pTextHelper via std::unique_ptrTakeshi Abe
Change-Id: Iefd4314823efec28a8497b5a993fdd01ed12811e Reviewed-on: https://gerrit.libreoffice.org/20849 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
2015-12-23starmath: Assert that a parent always finds its childTakeshi Abe
Change-Id: I6cb75e0d62141dba2809aaec62761cedd8c3257a Reviewed-on: https://gerrit.libreoffice.org/20733 Tested-by: Jenkins <ci@libreoffice.org> Reviewed-by: Kohei Yoshida <libreoffice@kohei.us>
2015-12-22unused code SvpSalFrame::enableDamageTracker(bool)Juergen Funk
used here http://opengrok.libreoffice.org/xref/core/vcl/android/androidinst.cxx#127 Change-Id: If1b0ff8ef4c585e4b36c4735d7928361fb41b238 Reviewed-on: https://gerrit.libreoffice.org/20885 Reviewed-by: Thorsten Behrens <Thorsten.Behrens@CIB.de> Tested-by: Thorsten Behrens <Thorsten.Behrens@CIB.de>
2015-12-22vcl: make PhysicalFontFamily::InitMatchData privateChris Sherlock
Change-Id: I668012226264ce6986ea81815527d32e40645321 Reviewed-on: https://gerrit.libreoffice.org/20862 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>
2015-12-22coverity#1326730 DMI: Dubious method invocationCaolán McNamara
Change-Id: Icf44c82fc485d0172df2a9fb2cbe6b2be61630a1
2015-12-22crashtesting: CreateShellID returns the mediums base url...Caolán McNamara
when it works the way we want it to work, so presumably we can cut out the middle man and use getDocumentBaseURL directly which does the same thing. This has the advantage of being in the IEmbeddedHelper api so assignFrom can be tweaked to pull the src and dest ids arguments to CopyAndGetEmbeddedObject from the src and dest IEmbeddedHelpers always available there. So we ensure we have some ids to present to CopyAndGetEmbeddedObject, avoiding the assert on converting documents such as ooo89433-1.ppt to pdf So the explicit args can apparently be dropped, bubbling up then means we don't need a CloneWithShellIDs (introduced with tdf#71076 and tdf#71767) as normal Clone should now do the right thing. And various other arguments in various callers of these, which are typically filled in with an unhelpful empty OUString placeholder, can go Change-Id: I9c0be0340e72f98b10ee87ada7d2a021fcc39e23
2015-12-22guard against missing ContentContainerCaolán McNamara
Change-Id: I4f2c5d53148deb02d990edc42140c23f02409cea
2015-12-22Fix VclPtr issue in rptui::ONavigatorMaxim Monastirsky
Window ( 7VclVBox()) with live children destroyed: N5rptui13NavigatorTreeE() Change-Id: I974f73afd7dd259135d9bfcd47dd6bc8e7cc0d40
2015-12-22Avoid bad downcast during destructionStephan Bergmann
...as reported by UBSan in CppunitTest_sw_filters_test: > /sw/inc/format.hxx:110:73: runtime error: downcast of address 0x2af2d8024000 which does not point to an object of type 'const SwFormat' > 0x2af2d8024000: note: object is of type 'SwModify' > f2 2a 00 00 70 33 2f 87 f2 2a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 > ^~~~~~~~~~~~~~~~~~~~~~~ > vptr for 'SwModify' > #0 0x2af27bbe8083 in SwFormat::DerivedFrom() const /sw/inc/format.hxx:110:73 > #1 0x2af27bbc8401 in SwFormat::Modify(SfxPoolItem const*, SfxPoolItem const*) /sw/source/core/attr/format.cxx:282:21 > #2 0x2af27e9934a3 in SwFrameFormat::Modify(SfxPoolItem const*, SfxPoolItem const*) /sw/source/core/layout/atrfrm.cxx:2597:5 > #3 0x2af27f8207d5 in SwTableBoxFormat::Modify(SfxPoolItem const*, SfxPoolItem const*) /sw/source/core/table/swtable.cxx:2353:5 > #4 0x2af27bb9cd52 in SwClient::SwClientNotify(SwModify const&, SfxHint const&) /sw/source/core/attr/calbck.cxx:68:9 > #5 0x2af27bba4bee in SwModify::CallSwClientNotify(SfxHint const&) const /sw/inc/calbck.hxx:349:9 > #6 0x2af27bba290b in SwModify::ModifyBroadcast(SfxPoolItem const*, SfxPoolItem const*) /sw/inc/calbck.hxx:173:11 > #7 0x2af27bb9fbc0 in SwModify::NotifyClients(SfxPoolItem const*, SfxPoolItem const*) /sw/source/core/attr/calbck.cxx:143:5 > #8 0x2af27bb9e0e7 in SwModify::~SwModify() /sw/source/core/attr/calbck.cxx:101:5 > #9 0x2af27bbc6bb4 in SwFormat::~SwFormat() /sw/source/core/attr/format.cxx:251:1 > #10 0x2af27e98fdf3 in SwFrameFormat::~SwFrameFormat() /sw/source/core/layout/atrfrm.cxx:2534:1 > #11 0x2af27e9900af in SwFrameFormat::~SwFrameFormat() /sw/source/core/layout/atrfrm.cxx:2525:1 > #12 0x2af27cb1646e in SwDoc::~SwDoc() /sw/source/core/doc/docnew.cxx:592:5 > #13 0x2af27cb1993f in SwDoc::~SwDoc() /sw/source/core/doc/docnew.cxx:385:1 > #14 0x2af282d45bb0 in SwDocShell::RemoveLink() /sw/source/uibase/app/docshini.cxx:472:13 > #15 0x2af282d43596 in SwDocShell::~SwDocShell() /sw/source/uibase/app/docshini.cxx:394:5 > #16 0x2af282d45f46 in SwDocShell::~SwDocShell() /sw/source/uibase/app/docshini.cxx:384:1 > #17 0x2af282d4637f in SwDocShell::~SwDocShell() /sw/source/uibase/app/docshini.cxx:384:1 > #18 0x2af282d464c6 in virtual thunk to SwDocShell::~SwDocShell() /sw/source/uibase/app/docshini.cxx:383:13 > #19 0x2af27420aade in SvRefBase::ReleaseRef() /include/tools/ref.hxx:138:29 > #20 0x2af27420195a in tools::SvRef<SwDocShell>::~SvRef() /include/tools/ref.hxx:49:30 > #21 0x2af2741f6663 in SwFiltersTest::filter(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) /sw/qa/core/filters-test.cxx:130:1 > #22 0x2af2741f368e in SwFiltersTest::load(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int) /sw/qa/core/filters-test.cxx:69:12 > #23 0x2af29a05d1fb in test::FiltersTest::recursiveScan(test::filterStatus, rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) /unotest/source/cpp/filters-test.cxx:129:20 > #24 0x2af29a060741 in test::FiltersTest::testDir(rtl::OUString const&, rtl::OUString const&, rtl::OUString const&, SfxFilterFlags, SotClipboardFormatId, unsigned int, bool) /unotest/source/cpp/filters-test.cxx:154:5 > #25 0x2af2741fa8fa in SwFiltersTest::testCVEs() /sw/qa/core/filters-test.cxx:174:5 > #26 0x2af27421631d in CppUnit::TestCaller<SwFiltersTest>::runTest() /workdir/UnpackedTarball/cppunit/include/cppunit/TestCaller.h:166:6 > #27 0x2af23644866d in CppUnit::TestCaseMethodFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:32:5 > #28 0x2af24e66d0d6 in (anonymous namespace)::Protector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /test/source/vclbootstrapprotector.cxx:57:14 > #29 0x2af236403bb7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #30 0x2af2458a1926 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unobootstrapprotector/unobootstrapprotector.cxx:88:12 > #31 0x2af236403bb7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #32 0x2af241b89d58 in (anonymous namespace)::Prot::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /unotest/source/cpp/unoexceptionprotector/unoexceptionprotector.cxx:63:16 > #33 0x2af236403bb7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #34 0x2af23638b90c in CppUnit::DefaultProtector::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/DefaultProtector.cpp:15:12 > #35 0x2af236403bb7 in CppUnit::ProtectorChain::ProtectFunctor::operator()() const /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:20:12 > #36 0x2af2363ffb61 in CppUnit::ProtectorChain::protect(CppUnit::Functor const&, CppUnit::ProtectorContext const&) /workdir/UnpackedTarball/cppunit/src/cppunit/ProtectorChain.cpp:77:18 > #37 0x2af2364c91c5 in CppUnit::TestResult::protect(CppUnit::Functor const&, CppUnit::Test*, std::string const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:181:10 > #38 0x2af2364451c6 in CppUnit::TestCase::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestCase.cpp:91:5 > #39 0x2af23644bc03 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:5 > #40 0x2af23644ab6d in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3 > #41 0x2af23644bc03 in CppUnit::TestComposite::doRunChildTests(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:64:5 > #42 0x2af23644ab6d in CppUnit::TestComposite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestComposite.cpp:23:3 > #43 0x2af2365078c6 in CppUnit::TestRunner::WrappingSuite::run(CppUnit::TestResult*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:47:5 > #44 0x2af2364c7049 in CppUnit::TestResult::runTest(CppUnit::Test*) /workdir/UnpackedTarball/cppunit/src/cppunit/TestResult.cpp:148:3 > #45 0x2af236508e86 in CppUnit::TestRunner::run(CppUnit::TestResult&, std::string const&) /workdir/UnpackedTarball/cppunit/src/cppunit/TestRunner.cpp:96:3 > #46 0x501b3c in (anonymous namespace)::ProtectedFixtureFunctor::run() const /sal/cppunittester/cppunittester.cxx:281:13 > #47 0x4fc866 in sal_main() /sal/cppunittester/cppunittester.cxx:431:14 > #48 0x4fa822 in main /sal/cppunittester/cppunittester.cxx:338:1 > #49 0x2af2380d2af4 in __libc_start_main (/lib64/libc.so.6+0x21af4) > #50 0x4323c4 in _start (/workdir/LinkTarget/Executable/cppunittester+0x4323c4) Change-Id: Ic1ff73d3184ad2cd97555b7a45fb205e9ec84ac6
2015-12-22vcl: rename ImplFindByTokenNames to FindByTokenNamesChris Sherlock
This is part of the class's public interface, it's not just an implementation function. Therefore the prefix Impl is not needed, so removing it. Change-Id: I118db93e930ff42ef0b712da6cd4a6d04fd1f074 Reviewed-on: https://gerrit.libreoffice.org/20861 Reviewed-by: Chris Sherlock <chris.sherlock79@gmail.com> Tested-by: Chris Sherlock <chris.sherlock79@gmail.com>