14e867904c8295537803c1c8a076e130df5674b58mikesamuel@echo off
24e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs on a Windows system.
34e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Adapted from scripts found at http://www.ericphelps.com/batch/
44e867904c8295537803c1c8a076e130df5674b58mikesamuel:: This will only work on Windows NT or later!
54e867904c8295537803c1c8a076e130df5674b58mikesamuel
64e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Don't affect environment outside of this invocation
74e867904c8295537803c1c8a076e130df5674b58mikesamuelsetlocal
84e867904c8295537803c1c8a076e130df5674b58mikesamuel
94e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
104e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Set up default values
114e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
124e867904c8295537803c1c8a076e130df5674b58mikesamuelset appjar=findbugs.jar
134e867904c8295537803c1c8a076e130df5674b58mikesamuelset javahome=
144e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe
154e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=start "FindBugs"
164e867904c8295537803c1c8a076e130df5674b58mikesamuelset jvmargs=
174e867904c8295537803c1c8a076e130df5674b58mikesamuelset debugArg=
184e867904c8295537803c1c8a076e130df5674b58mikesamuelset conserveSpaceArg=
194e867904c8295537803c1c8a076e130df5674b58mikesamuelset workHardArg=
204e867904c8295537803c1c8a076e130df5674b58mikesamuelset args=
214e867904c8295537803c1c8a076e130df5674b58mikesamuelset javaProps=
224e867904c8295537803c1c8a076e130df5674b58mikesamuelset maxheap=768
234e867904c8295537803c1c8a076e130df5674b58mikesamuel
244e867904c8295537803c1c8a076e130df5674b58mikesamuelREM default UI is gui2
254e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=2
264e867904c8295537803c1c8a076e130df5674b58mikesamuel
274e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Try finding the default FINDBUGS_HOME directory
284e867904c8295537803c1c8a076e130df5674b58mikesamuel:: from the directory path of this script
294e867904c8295537803c1c8a076e130df5674b58mikesamuelset default_findbugs_home=%~dp0..
304e867904c8295537803c1c8a076e130df5674b58mikesamuel
314e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Honor JAVA_HOME environment variable if it is set
324e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%JAVA_HOME%"=="" goto nojavahome
334e867904c8295537803c1c8a076e130df5674b58mikesamuelif not exist "%JAVA_HOME%\bin\javaw.exe" goto nojavahome
344e867904c8295537803c1c8a076e130df5674b58mikesamuelset javahome=%JAVA_HOME%\bin\
354e867904c8295537803c1c8a076e130df5674b58mikesamuel:nojavahome
364e867904c8295537803c1c8a076e130df5674b58mikesamuel
374e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto loop
384e867904c8295537803c1c8a076e130df5674b58mikesamuel
394e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
404e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Process command-line arguments
414e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
424e867904c8295537803c1c8a076e130df5674b58mikesamuel
434e867904c8295537803c1c8a076e130df5674b58mikesamuel:shift2
444e867904c8295537803c1c8a076e130df5674b58mikesamuelshift
454e867904c8295537803c1c8a076e130df5674b58mikesamuel:shift1
464e867904c8295537803c1c8a076e130df5674b58mikesamuelshift
474e867904c8295537803c1c8a076e130df5674b58mikesamuel
484e867904c8295537803c1c8a076e130df5674b58mikesamuel:loop
494e867904c8295537803c1c8a076e130df5674b58mikesamuel
504e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Remove surrounding quotes from %1 and %2
514e867904c8295537803c1c8a076e130df5674b58mikesamuelset firstArg=%~1
524e867904c8295537803c1c8a076e130df5674b58mikesamuelset secondArg=%~2
534e867904c8295537803c1c8a076e130df5674b58mikesamuel
544e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="" goto launch
554e867904c8295537803c1c8a076e130df5674b58mikesamuel
564e867904c8295537803c1c8a076e130df5674b58mikesamuel:: AddMessages
574e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-addMessages" goto notAddMessages
584e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.AddMessages
594e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
604e867904c8295537803c1c8a076e130df5674b58mikesamuel:notAddMessages
614e867904c8295537803c1c8a076e130df5674b58mikesamuel
624e867904c8295537803c1c8a076e130df5674b58mikesamuel:: computeBugHistory
634e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-computeBugHistory" goto notUpdate
644e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.Update
654e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
664e867904c8295537803c1c8a076e130df5674b58mikesamuel:notUpdate
674e867904c8295537803c1c8a076e130df5674b58mikesamuel
684e867904c8295537803c1c8a076e130df5674b58mikesamuel:: convertXmlToText
694e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-xmltotext" goto notXmlToText
704e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.PrintingBugReporter
714e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
724e867904c8295537803c1c8a076e130df5674b58mikesamuel:notXmlToText
734e867904c8295537803c1c8a076e130df5674b58mikesamuel
744e867904c8295537803c1c8a076e130df5674b58mikesamuel:: copyBuggySource
754e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-copyBS" goto notCopyBS
764e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.CopyBuggySource
774e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
784e867904c8295537803c1c8a076e130df5674b58mikesamuel:notCopyBS
794e867904c8295537803c1c8a076e130df5674b58mikesamuel
804e867904c8295537803c1c8a076e130df5674b58mikesamuel:: defectDensity
814e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-defectDensity" goto notDefectDensity
824e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.DefectDensity
834e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
844e867904c8295537803c1c8a076e130df5674b58mikesamuel:notDefectDensity
854e867904c8295537803c1c8a076e130df5674b58mikesamuel
864e867904c8295537803c1c8a076e130df5674b58mikesamuel:: filterBugs
874e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-filterBugs" goto notFilterBugs
884e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.Filter
894e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
904e867904c8295537803c1c8a076e130df5674b58mikesamuel:notFilterBugs
914e867904c8295537803c1c8a076e130df5674b58mikesamuel
924e867904c8295537803c1c8a076e130df5674b58mikesamuel:: listBugDatabaseInfo
934e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-listBugDatabaseInfo" goto notListBugDatabaseInfo
944e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.ListBugDatabaseInfo
954e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
964e867904c8295537803c1c8a076e130df5674b58mikesamuel:notListBugDatabaseInfo
974e867904c8295537803c1c8a076e130df5674b58mikesamuel
984e867904c8295537803c1c8a076e130df5674b58mikesamuel:: mineBugHistory
994e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-mineBugHistory" goto notMineBugHistory
1004e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.MineBugHistory
1014e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1024e867904c8295537803c1c8a076e130df5674b58mikesamuel:notMineBugHistory
1034e867904c8295537803c1c8a076e130df5674b58mikesamuel
1044e867904c8295537803c1c8a076e130df5674b58mikesamuel:: printAppVersion
1054e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-printAppVersion" goto notPrintAppVersion
1064e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.PrintAppVersion
1074e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1084e867904c8295537803c1c8a076e130df5674b58mikesamuel:notPrintAppVersion
1094e867904c8295537803c1c8a076e130df5674b58mikesamuel
1104e867904c8295537803c1c8a076e130df5674b58mikesamuel:: printClass
1114e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-printClass" goto notPrintClass
1124e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.PrintClass
1134e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1144e867904c8295537803c1c8a076e130df5674b58mikesamuel:notPrintClass
1154e867904c8295537803c1c8a076e130df5674b58mikesamuel
1164e867904c8295537803c1c8a076e130df5674b58mikesamuel:: rejarForAnalysis
1174e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-rejar" goto notRejar
1184e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.RejarClassesForAnalysis
1194e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1204e867904c8295537803c1c8a076e130df5674b58mikesamuel:notRejar
1214e867904c8295537803c1c8a076e130df5674b58mikesamuel
1224e867904c8295537803c1c8a076e130df5674b58mikesamuel:: setBugDatabaseInfo
1234e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-setInfo" goto notSetBugDatabaseInfo
1244e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.SetBugDatabaseInfo
1254e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1264e867904c8295537803c1c8a076e130df5674b58mikesamuel:notSetBugDatabaseInfo
1274e867904c8295537803c1c8a076e130df5674b58mikesamuel
1284e867904c8295537803c1c8a076e130df5674b58mikesamuel:: unionBugs
1294e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-unionBugs" goto notUnionBugs
1304e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.UnionResults
1314e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1324e867904c8295537803c1c8a076e130df5674b58mikesamuel:notUnionBugs
1334e867904c8295537803c1c8a076e130df5674b58mikesamuel
1344e867904c8295537803c1c8a076e130df5674b58mikesamuel:: xpathFind
1354e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-xpathFind" goto notXPathFind
1364e867904c8295537803c1c8a076e130df5674b58mikesamuelset fb_mainclass=edu.umd.cs.findbugs.workflow.XPathFind
1374e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1384e867904c8295537803c1c8a076e130df5674b58mikesamuel:notXPathFind
1394e867904c8295537803c1c8a076e130df5674b58mikesamuel
1404e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-gui" goto notGui
1414e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=2
1424e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=javaw.exe
1434e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1444e867904c8295537803c1c8a076e130df5674b58mikesamuel:notGui
1454e867904c8295537803c1c8a076e130df5674b58mikesamuel
1464e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-gui1" goto notGui1
1474e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=1
1484e867904c8295537803c1c8a076e130df5674b58mikesamuelset javaProps=-Dfindbugs.launchUI=1 %javaProps%
1494e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=javaw.exe
1504e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1514e867904c8295537803c1c8a076e130df5674b58mikesamuel:notGui1
1524e867904c8295537803c1c8a076e130df5674b58mikesamuel
1534e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-textui" goto notTextui
1544e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=0
1554e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe
1564e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=
1574e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1584e867904c8295537803c1c8a076e130df5674b58mikesamuel:notTextui
1594e867904c8295537803c1c8a076e130df5674b58mikesamuel
1604e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-debug" goto notDebug
1614e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe
1624e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=
1634e867904c8295537803c1c8a076e130df5674b58mikesamuelset debugArg=-Dfindbugs.debug=true
1644e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1654e867904c8295537803c1c8a076e130df5674b58mikesamuel:notDebug
1664e867904c8295537803c1c8a076e130df5674b58mikesamuel
1674e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-help" goto notHelp
1684e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=help
1694e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe
1704e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=
1714e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1724e867904c8295537803c1c8a076e130df5674b58mikesamuel:notHelp
1734e867904c8295537803c1c8a076e130df5674b58mikesamuel
1744e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%firstArg%"=="-version" goto notVersion
1754e867904c8295537803c1c8a076e130df5674b58mikesamuelset launchUI=version
1764e867904c8295537803c1c8a076e130df5674b58mikesamuelset launcher=java.exe
1774e867904c8295537803c1c8a076e130df5674b58mikesamuelset start=
1784e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
1794e867904c8295537803c1c8a076e130df5674b58mikesamuel:notVersion
1804e867904c8295537803c1c8a076e130df5674b58mikesamuel
1814e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-home" set FINDBUGS_HOME=%secondArg%
1824e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-home" goto shift2
1834e867904c8295537803c1c8a076e130df5674b58mikesamuel
1844e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-jvmArgs" set jvmargs=%secondArg%
1854e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-jvmArgs" goto shift2
1864e867904c8295537803c1c8a076e130df5674b58mikesamuel
1874e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-maxHeap" set maxheap=%secondArg%
1884e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-maxHeap" goto shift2
1894e867904c8295537803c1c8a076e130df5674b58mikesamuel
1904e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-conserveSpace" set conserveSpaceArg=-Dfindbugs.conserveSpace=true
1914e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-conserveSpace" goto shift1
1924e867904c8295537803c1c8a076e130df5674b58mikesamuel
1934e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-workHard" set workHardArg=-Dfindbugs.workHard=true
1944e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-workHard" goto shift1
1954e867904c8295537803c1c8a076e130df5674b58mikesamuel
1964e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-javahome" set javahome=%secondArg%\bin\
1974e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-javahome" goto shift2
1984e867904c8295537803c1c8a076e130df5674b58mikesamuel
1994e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-property" set javaProps=-D%secondArg% %javaProps%
2004e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="-property" goto shift2
2014e867904c8295537803c1c8a076e130df5674b58mikesamuel
2024e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%firstArg%"=="" goto launch
2034e867904c8295537803c1c8a076e130df5674b58mikesamuel
2044e867904c8295537803c1c8a076e130df5674b58mikesamuelset args=%args% "%firstArg%"
2054e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto shift1
2064e867904c8295537803c1c8a076e130df5674b58mikesamuel
2074e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
2084e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs
2094e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
2104e867904c8295537803c1c8a076e130df5674b58mikesamuel:launch
2114e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Make sure FINDBUGS_HOME is set.
2124e867904c8295537803c1c8a076e130df5674b58mikesamuel:: If it isn't, try using the default value based on the
2134e867904c8295537803c1c8a076e130df5674b58mikesamuel:: directory path of the invoked script.
2144e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Note that this will fail miserably if the value of FINDBUGS_HOME
2154e867904c8295537803c1c8a076e130df5674b58mikesamuel:: has quote characters in it.
2164e867904c8295537803c1c8a076e130df5674b58mikesamuelif not "%FINDBUGS_HOME%"=="" goto checkHomeValid
2174e867904c8295537803c1c8a076e130df5674b58mikesamuelset FINDBUGS_HOME=%default_findbugs_home%
2184e867904c8295537803c1c8a076e130df5674b58mikesamuel
2194e867904c8295537803c1c8a076e130df5674b58mikesamuel:checkHomeValid
2204e867904c8295537803c1c8a076e130df5674b58mikesamuelif not exist "%FINDBUGS_HOME%\lib\%appjar%" goto homeNotSet
2214e867904c8295537803c1c8a076e130df5674b58mikesamuel
2224e867904c8295537803c1c8a076e130df5674b58mikesamuel:found_home
2234e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Launch FindBugs!
2244e867904c8295537803c1c8a076e130df5674b58mikesamuelif "%fb_mainclass%"=="" goto runJar
2254e867904c8295537803c1c8a076e130df5674b58mikesamuel"%javahome%%launcher%" %debugArg% %conserveSpaceArg% %workHardArg% %javaProps% "-Dfindbugs.home=%FINDBUGS_HOME%" -Xmx%maxheap%m %jvmargs% "-Dfindbugs.launchUI=%launchUI%" -cp "%FINDBUGS_HOME%\lib\%appjar%" %fb_mainclass% %args%
2264e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end
2274e867904c8295537803c1c8a076e130df5674b58mikesamuel:runjar
2284e867904c8295537803c1c8a076e130df5674b58mikesamuel%start% "%javahome%%launcher%" %debugArg% %conserveSpaceArg% %workHardArg% %javaProps% "-Dfindbugs.home=%FINDBUGS_HOME%" -Xmx%maxheap%m %jvmargs% "-Dfindbugs.launchUI=%launchUI%" -jar "%FINDBUGS_HOME%\lib\%appjar%" %args%
2294e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end
2304e867904c8295537803c1c8a076e130df5674b58mikesamuel
2314e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
2324e867904c8295537803c1c8a076e130df5674b58mikesamuel:: Report that FINDBUGS_HOME is not set (and was not specified)
2334e867904c8295537803c1c8a076e130df5674b58mikesamuel:: ----------------------------------------------------------------------
2344e867904c8295537803c1c8a076e130df5674b58mikesamuel:homeNotSet
2354e867904c8295537803c1c8a076e130df5674b58mikesamuelecho Could not find FindBugs home directory.  There may be a problem
2364e867904c8295537803c1c8a076e130df5674b58mikesamuelecho with the FindBugs installation.  Try setting FINDBUGS_HOME, or
2374e867904c8295537803c1c8a076e130df5674b58mikesamuelecho re-installing.
2384e867904c8295537803c1c8a076e130df5674b58mikesamuelgoto end
2394e867904c8295537803c1c8a076e130df5674b58mikesamuel
2404e867904c8295537803c1c8a076e130df5674b58mikesamuel:end
241