MBS Xojo Plugins, version 23.1pr5

New in this prerelease of the 23.1 plugins: Download: monkeybreadsoftware.de/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.1pr5

New in this prerelease of version 13.1 of the MBS FileMaker Plugin:
  • Updated DynaPDF to version 4.0.72.208.
  • Changed SQL functions to log SQL statements when trace is active.
  • Added flag 32 for Text.TextToHTML function to use paragraphs.
  • Adjusted various internals for future FileMaker versions.
Download at monkeybreadsoftware.com/filemaker/files/Prerelease/, in DropBox folder or ask for being added to the DropBox shared folder.

Improved threading for Xojo

While Xojo has some threading support, it could do better and today we think what would be needed for this.

Allow callbacks on other threads

Several modern APIs on all platforms may require you to provide a callback function, so you may just have a little global method called with a parameter. You remember the parameter and regularly check with a timer if the value was set. e.g. a code like this:

Sub MyCallback(granted as boolean) GlobalModule.isGranted = granted GlobalModule.gotResult = True End Sub

This is the most simple way to do a callback, which may receive on a non-Xojo thread from the OS or a library. The code generated by the compiler looks like this translated back into Xojo code:

Sub MyCallback2(granted as boolean) StackCheck Var currentException = GetCurrentException If currentException = Nil Then GlobalModule.isGranted = granted GlobalModule.gotResult = True End If If CurrentException <> Nil Then ReraiseException(CurrentException) UnlockObject(CurrentException) End If End Sub
(more)

Build archives on the fly

For 13.1 we get new Archive functions to build a zip archive on the fly. One of the use of deprecated ZipFile functions was to assemble an archive in memory from various files or containers. You can now do that with our Archive.Create function. Just call it to either start an on-disk or in-memory archive using the compression format and compression filter of your choice. We usually use zip for maximum compatibly, but you can also do tar or 7zip. 

 

Next you can add content. For that you may use Archive.AddContainer to pass a container value as variable or pass a field reference. We read the content of the container and compress it in memory. If you have existing files on disk, you can use Archive.AddFile function. Please note that you can pass a list of files with relative path parts, e.g. "Documents/email.pdf¶Documents/answer.pdf" and then the base path to find them like "C:\Users\cs\Desktop\". The relative file paths end up in the archive, so they are used when expanding the archive. If you like to add a file based of text, you can use Archive.AddText to create a text file directly in the new archive.

 

Let us show you an example script to zip up a few PDFs in records:

 

Set Variable [ $r ; Value: MBS( "Archive.Create"; "zip"; "deflate") ] 

If [ MBS("IsError") ] 

Show Custom Dialog [ "Failed to create zip archive." ; $r ] 

Exit Script [ Text Result:    ] 

End If

Go to Record/Request/Page [ First ]

Set Variable [ $destPage ; Value: 1 ] 

Loop

Set Variable [ $r ; Value: MBS( "Archive.AddContainer"; Merge PDFs::InputPDF) ] 

Go to Record/Request/Page [ Next ; Exit after last: On ]

End Loop

Set Variable [ $zip ; Value: MBS( "Archive.Close"; "test.zip") ] 

If [ MBS("IsError") ] 

Show Custom Dialog [ "Failed to create zip archive." ; $r ] 

Else

Set Field [ Merge PDFs::FinalPDF ; $zip ] 

End If

 

As you see, we create an in-memory archive, loop over records and add PDF containers to it. Then we close the archive passing the file name and store it in a container field.

 
(more)

Two months until the Xojo Developer Conference

Just two months left until the XDC 2023 in London, England. Tickets are still available for $525 USD.

It will be held April 26-28, 2023 in London, England at the Hilton London Euston. This conferences is the best place to meet Xojo developers from around the world in real live, make contacts, present yourself as expert and learn what is new in Xojo. Tickets are available in the Xojo store and if you bring your partner, you can order an extra guest ticket for the dinner events.

Check out the conference highlights video if you want to see what it's like - or ask one of the many attendees from the forum!

Wether you are full or part time Xojo developer, this is your chance to learn all about the Web 2.0 framework, the Android progress and what's new in the Xojo world. The first sessions are already listed, so check the list and the schedule.

To get there, please use public transportation. The piccadilly line brings you right from Heathrow Airport to Russell Square Station, near the hotel. That trip should cost about 3 £ and you may just pay by tap in/out with your NFC enabled credit card or phone. Otherwise buy an Oyster card and load money on it if you don't have such a card. If you come by Eurostar train through the tunnel from France, you can exit Pancras station and just walk to the hotel.

See you soon there!

15 years

This blog has his 15th anniversary today. We hope you enjoy reading it!



If you have idea for future blog posts, please let us know.

MBS Xojo Plugins, version 23.1pr4

New in this prerelease of the 23.1 plugins:
  • Fixed a problem with LinuxMoveMouse method in RemoteControlMBS module not working correctly.
  • Fixed problem in BarcodeGeneratorMBS, where a warning from the zint library would be treated as an error.
  • Updated LCMS2 library to version 2.15rc1.
  • Updated CURL library to version 7.88.1.
  • Added WebView2CookieManagerMBS and WebView2CookieMBS classes.
  • Updated libxml to version 2.10.3.
  • Disabled FTP access in libxml to avoid unintended network access.
  • Fixed problem in SVG method in BarcodeGeneratorMBS class to work again.
  • Updated SQLite to version 3.41.0.
  • Fixed a bug in GetStoreProductsAsync method in WindowsStoreContextMBS class.
  • Added GetAppLicenseSync method in WindowsStoreContextMBS class.
  • Added PrintToPdf method and PrintCompleted event to WebView2ControlMBS class.
  • Added boolean return to SetNeedAppearance method in DynaPDFMBS class.
Download: monkeybreadsoftware.de/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.1pr4

New in this prerelease of version 13.1 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/, in DropBox folder or ask for being added to the DropBox shared folder.

Twelve months of War by Russia in Ukraine

Since their invasion of Ukraine, the Russian military has bombarded Ukraine for twelve months. As of today, both sides still belief they can win the war, so we have no negotiations. And don't be fouled: This war could be over tomorrow, when Russia decides to move out of Ukraine.

And I don't think the majority of Russian people supports this war. The average Russians has no benefit and may see their relatives and friends get conscripted and die in a war they don't want. The war is certainly not about supporting some Russian people in Ukraine, but more likely to get a land bridge to Crimea with the Russian naval base in Sevastopol. And no idea why they didn't start 20 years ago to move the base to Russian territory on the Black Sea.

The biggest change for us in all the war time is to get independent on our power supply. Shortly after the invasion started, we requested offers for photovoltaik systems. Solar cells, battery pack and a controller system to make sure we use our own power as long as possible and just use the grid as backup. And when I look around on the other houses, I see quite a lot of people coming to the same conclusion: We as a country have to reduce imports of fossil fuel and what individual houses owners can do is to first to use solar energy to heat water (to support e.g. a gas heating) and second to use photovoltaics to make our own power. Don't forget the battery to store power and use your own energy at night.

As of today our photovoltaik system is working and already produces a lot of energy. On sunny winter days about 50 kWh, which is enough to fill the battery and serve our own needs. And even on cloudy days it produces a few kWh and reduces our power purchases a lot. We ordered a battery extension already to make sure we can store more energy to avoid buying energy even further. And we ordered the extension to run the system standalone without power from the grid.

On a bigger level like state or county, we can support efforts to build wind turbines and new power cables to connect them. We may get wind turbines nearby in the next years here. Not as efficient as a the coast, but a possibility to reuse an older one from the coast, which got replaced with a better one and is paid off.

This war changes the world and in a few years, it may be over. But the world will be different and I expect Russia will not come back to its previous power and less exports as they used to. Not to mentioned that they loose a lot of people in the war or due to evading conscriptions.

Let's do our best to help the Ukraines to get back peace by kicking out the Russian Army!

MBS Xojo Plugins, version 23.1pr3

New in this prerelease of the 23.1 plugins: Download: monkeybreadsoftware.de/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.1pr3

New in this prerelease of version 13.1 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/, in DropBox folder or ask for being added to the DropBox shared folder.

Moving data from ODBC to FileMaker via script

You have a SQL data source and you like to get JSON from it inside FileMaker to pass that JSON on to a web services or DATA API? Or you have a SQL source and you like to move records from it to FileMaker easily? Or other direction?

 

Since MBS Plugin supports CubeSQL, Centura SQLBase, DB2, DuckDB, Firebird, Informix, InterBase, MariaDB, Microsoft Access, Microsoft SQL Server, MySQL, ODBC, Oracle Database Server, PostgreSQL, SQL Anywhere, SQLite, SQLCipher and Sybase as data source, we can help here. ODBC itself can of course be used for many more here.

 

Let us show you a script to connect to a data source by its name used in the system. This means you define in ODBC control panel on macOS, Windows or Linux to define an ODBC data source. You can use the GUI on each operation system to enter the credentials and store them there, install required driver or set whatever parameter is needed. You can alternatively check our help page for SQL.Connect to see how to put these parameters to connect into the connection string.

 

Once you are connected, you can run a SQL command with SQL.NewCommand and SQL.Execute and grab some records. You may put in the field names in the query if you like to define the order or only pick a few fields. If your field names contains special characters like spaces, please use \" when coding them, e.g. \"My Field\". You may rename a column with AS command inside the SQL like e.g. CityName as City. And you can always put in static data as text, date or number or even use SQL functions like concating two texts like e.g. (FirstName || ' ' || LastName) as FullName. Of course these things are depending on what database you talk to and for SQL Server you would use CONCAT() function like this: CONCAT(FirstName, ' ', LastName) as FullName.

(more)

More follow up on oAuth for Office 365

There is more to come based on questions and feedback.

IMAP

If you like to change our IMAP example to use oAuth, please use script steps like this:

Set Variable [ $r ; Value: MBS("CURL.SetOptionURL"; $curl; "imaps://outlook.office365.com/INBOX") ]
Set Variable [ $r ; Value: MBS("CURL.SetOptionXOAuth2Bearer"; $curl; "eyJ0eXAiOi...") ] // your oAuth token
Set Variable [ $r ; Value: MBS("CURL.SetOptionUserName"; $curl; "test@outlook.com") ] // no password needed!

You remove the CURL.SetOptionPassword there and add the CURL.SetOptionXOAuth2Bearer with the token. For the URL make sure you have the imaps protocol with the s. A typo in the URL and nothing will work. Don't forget the user name, which is usually the email from the account. This may be or may not be the same as the from or sender email. (more)

HiDPI for ChartDirector

As you may know we have with ChartDirector a powerful library to make high quality charts for all operation systems and output them as pictures or PDF documents. We can show them interactively in a control to let the user click on values with the mouse.



As you may know we added 7 years ago the ScaleFactor property to the CDBaseChartMBS class. It allows you to set a scale factor, which is used by our plugin to multiple all size values before passing them to ChartDirector. This way we got scaling for HiDPI into ChartDirector years before it was built-in. (more)

MBS SQL Plugin Tips and Tricks

As you may know we have our own MBS Xojo SQL Plugin for Xojo, which is an alternative to the built-in database classes in Xojo. Let us show you how we do a few things with our plugin, which you may not do like this with the official database plugins in Xojo.

The MBS Xojo SQL Plugin is a Xojo plugin for accessing multiple SQL databases (CubeSQL, Centura SQLBase, DB2, DuckDB, Firebird, Informix, InterBase, MariaDB, Microsoft Access, Microsoft SQL Server, MySQL, ODBC, Oracle Database Server, PostgreSQL, SQL Anywhere, SQLite, SQLCipher and Sybase). It uses native APIs of target DBMS so applications developed with this plugin run swiftly and efficiently. The product also provides a low-level interface that allows developers to access database-specific features. By encapsulating a vendor's API, the plugin acts as middleware and delivers database portability.

Trace Log

Our plugin has a Trace event in SQLDatabaseMBS and SQLConnectionMBS classes. You may decide to either subclass these classes and implement the event. Or you use addHandler to connect the event to your method to log SQL requests. The trace event provides all SQL run by the plugin and is at a low level, so it catches also the insert statements made by AddRow or InsertRecord methods.

e.g. like this sample implementation, which uses a TraceEnabled boolean property in SQLDatabaseMBS subclass to toggle whether we log SQL for debugging:

Sub Trace(traceInfo As Integer, SQL As String, Command As SQLCommandMBS) If TraceEnabled Then System.DebugLog SQL End If End Sub
(more)

MBS @ FMTraining.TV - MBS Plugin 13.0

Check out the FMTraining.tv website. Richard Carlton and his team do a daily free live stream about FileMaker to watch.

A few days ago Christian Schmitz from Monkeybread Software joined a live episode to talk a bit about the MBS FileMaker Plugin. Watch it on YouTube.

We talk about what is new in MBS FileMaker Plugin 13.0 including MongoDB, DynaPDF, CURL, new checkboxes in preferences and more.

(more)

OCR on Windows in FileMaker

Did you know that Windows 10 has a built-in OCR engine?

For MBS FileMaker Plugin 13.1 we add new WindowsOCR functions. These functions allow the plugin on Windows 10 to use the built-in OCR classes and expose them as functions to you in FileMaker. This was made possible by dropping Windows 7 support, so we can now use the functionality from Windows 8 to use these classes. Although if you call them on Windows 8, they will return an error. Please use WindowsOCR.Available in your script to check whether it returns 1.

Once you know you run on Windows 10 (or 11), you can check the available languages with WindowsOCR.AvailableRecognizerLanguages function. This function can return you the list of languages with either display name (in user's language), language tag or the name within the language itself. e.g. "German" vs. "Deutsch". You can use our WindowsOCR.CurrentInputMethodLanguageTag function to query what language the user has for the current method of input. The user may have multiple languages installed, but this one is used when you create a recognizer without specifying the language.

(more)

Windows OCR for Xojo

For MBS Xojo Plugins 23.1 we add new classes to use the built-in OCR in Windows 10. Similar to the Vision framework on macOS, these classes provide an easy way to use the text recognition in Windows. We got these classes:

You can query the available languages on your computer with the AvailableRecognizerLanguages method. This usually only includes the installed language packs for Windows like in Germany the German one. But you can go to system settings and install another language if you need it.

(more)

Regular Expressions in Script Search

You are an advanced developer using FileMaker? Then you probably know regular expressions already. Where you can write search terms to find interesting things in texts. Let us use them for our search field.

The old way to search was to enter multiple texts. We split by space characters and take each word and search for all them in a line. If all are found, the line turns yellow. That is what you know and we expect that the majority of users only types one thing to find. But there is a small fraction of power users, that ask for more.

For version 13.1 we use regular expressions for each of this words, so you can do OR searches or search with wildcards better. But since you like to search for $ variables, we escape a $ or $$ on the beginning of the search word for you. Otherwise you may do backslashes for escaping some special characters like $ or brackets.

Let us show you a few examples: (more)

MBS Xojo Plugins, version 23.1pr2

New in this prerelease of the 23.1 plugins:
  • Fixed a crash in ToHTML method in JSONMBS class.
  • Added Command and Aggregate methods to MongoCollectionMBS class.
  • Added Aggregate method to MongoDatabaseMBS class.
  • Updated LibXL to version 4.1.
  • Added IsWriteProtected method to XLBookMBS class.
  • Added TabColor, DefaultRowHeight and GetTabRgbColor method to XLSheetMBS class.
  • Added AddSelectionRange, GetActiveCell, GetTabRgbColor, RemoveSelection, SelectionRange and SetActiveCell to XLSheetMBS class.
  • Improved CallDelegateCrashSafeMBS to check for stack corruption and prevent recursion.
  • Improved CallDelegateCrashSafeMBS to catch trace trap signals and C++ exceptions.
  • Updated tiff library to version 4.5.0.
  • Improved WindowsOCREngineMBS class.
Download: monkeybreadsoftware.de/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.1pr2

New in this prerelease of version 13.1 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/, in DropBox folder or ask for being added to the DropBox shared folder.

Time Machine once a day

We got a bit annoyed with the NAS being busy all day with various backups. And whenever two or three Macs do their Time Machine backups at the same time, the performance of the NAS goes way down with all the seeking of the hard disks.

Let's change Time Machine to run less often. As you may know Apple doesn't allow much configuration there for the backup interval and you can't change the system launch agent. But we can disable Time Machine in system preferences and make our own launch agent.

First you make a new text file (e.g. with BBEdit) with this content:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <key>Label</key>
  <string>com.monkeybreadsoftware.runbackup</string>
  <key>ProgramArguments</key>
  <array>
    <string>/usr/bin/tmutil</string>
    <string>startbackup</string>
    <string>--auto</string>
    <string>--rotation</string>
  </array>

  <key>StartInterval</key>
  <integer>43200</integer>
    
  <key>StandardOutPath</key>
  <string>/tmp/runbackup.output.log</string>
  <key>StandardErrorPath</key>
  <string>/tmp/runbackup.error.log</string>
  
</dict>
</plist>
(more)

LibXL 4.1.0 has been released

LibXL version 4.1.0 is available with this news:

  • added the conditional formatting support for xlsx files
    (new ConditionalFormatting and ConditionalFormat classes)
  • added the possibility to get/set an active cell and selection ranges
  • added the possibility to get a color from sheet tabs
  • improved the string overwriting performance for xls files
  • improved the reading performance for xlsx files
  • improved the sorting performance in AutoFilter (xlsx)
  • added ARM64 support for Windows
  • fixed a bug with cutting sheet names to less than 31 characters in Chinese
  • fixed a bug with loading some xls files ("Label size is incorrect")
  • fixed a bug with union multiple column filters in the Sheet::applyFilter() method (xlsx)
  • fixed an issue with loading some xls files (error message "invalid jpg file")
  • fixed an issue with encoding dates before the 1st of March 1900 in the Book::datePack()
  • fixed an issue with loading some xlsx files with special unicode character BOM (byte order mark) at unexpected position inside XML files
  • fixed issues with copying existing sheet with named ranges in the Book::insertSheet() what led to corrupted output files
  • fixed a new-delete-type-mismatch memory issue on Linux and now LibXL works with jemalloc properly
  • fixed an issue with saving UTF-8 encoded filename in the Book::save() method on Windows (xlsx)
  • fixed a hanging issue with loading some xls files
  • fixed a bug with saving xlsx files with a lot of OLE objects
  • removed the PY_SSIZE_T_CLEAN warning in python interface

The LibXL library can be used with MBS Plugins in Xojo and FileMaker. Updated plugins will be available soon. As usual we add the new functions soon. If you need help or want to try the new version early, let me know.


Workshop zum MBS FileMaker Plugin @ Denkform

For our German speaking clients we have a workshop day:

In Zusammenarbeit mit der DenkForm GmbH bieten wir eine Schulung zum MBS Plugin an. Am 29. März, 15. Juni, 27. September und 29. November 2023 können Sie in Wiesbaden an einer eintägigen Schulung teilnehmen.

Lernen Sie die über 7000 Funktionen einmal näher kennen und wie Sie sie effektiv einsetzen. Sammeln Sie Ideen und verbessern Sie ihre FileMaker Lösungen durch den Einsatz unseres Plugins.

Das Monkeybread Software Plugin für FileMaker stellt eine vielseitige Erweiterung der eigenen Datenbank dar. Der Kurs bietet nicht nur einen tiefgreifenden Überblick in die Benutzung und Entwicklung, sondern bietet auch die Chance das Plugin günstiger zu erstehen.

  • Einführung in das MBS Plugin
  • Überblick über die Funktionsbereiche
  • Neues im MBS Plugin dieses Jahr
  • Rundgang durch ausgewählte Beispiele
  • Gemeinsames Implementieren von Plugin Funktionen in eine Datenbank:
    • Upload/Download mit CURL auf einen HTTP/FTP Server
    • Ausfüllen eines Formulares auf einer Webseite
    • Bilder bearbeiten
    • PDF Verarbeitung
    • Druckerfunktionen
    • Web Hooks.
  • Fragen und Antworten

Die Themen können je nach den Interessen der Teilnehmer geändert werden und wir zeigen natürlich gerne, was gerade neu und gefragt ist.

Die Teilnahme kostet 238 Euro inkl. MWSt. und Verpflegung. Details und Anmeldung bei der Denkform.


LiveText for Windows

You may know the GetLiveText function in FileMaker 19.5 and newer?

We had our Vision.RecognizeText function since MBS FileMaker Plugin 9.4 in 2019. We improved our function over time, so e.g. it works on PDF documents since version 12.3.
Vision database screenshot on Windows
For the next version 13.1 (now in beta), you can use our function even on Windows to quickly recognize text from images. If you need more control, you can always go to the WindowsOCR functions.

To learn which languages are available, you can use the Vision.SupportedRecognitionLanguages function. If you need more languages, you can install language packs on Windows, but usually there is only the language installed for the current user's language.

MBS Xojo Plugins, version 23.1pr1

New in this prerelease of the 23.1 plugins:
  • Added OCR classes for Windows: WindowsOCREngineMBS, WindowsOCRExceptionMBS, WindowsOCRLanguageMBS, WindowsOCRLineMBS, WindowsOCRResultMBS and WindowsOCRWordMBS classes.
  • Added ChangeNamedDest method to DynaPDFMBS class.
  • Added kpvPDFUA1 constant to DynaPDFMBS class to use PDF/UA-1.
  • Added krfRenderPrintState constant to DynaPDFRasterImageMBS and DynaPDFMBS classes.
  • Added LoadLibrary, LibraryError and Available to JSContextMBS class.
  • Added NamedDest and Action properties to DynaPDFBookmarkMBS class.
  • Added optional rectangle parameter for OpenTag() function in DynaPDFMBS class.
  • Added Options and TLS properties to MongoURIMBS class.
  • Added support for JSContextMBS class to work on Windows and Linux if you provide a JavaScriptEngine library file to load.
  • Added YieldToRB property to LCMS2TransformMBS class.
  • Changed DatabaseName property in MongoURIMBS to be writable.
  • Deprecated isLeopard, isSnowLeopard, isLion, isMountainLion, isWindows2000, isWindowsXP and isWindowsVista in SystemInformationMBS module since our plugins don't run there anymore.
  • Deprecated WinCSDVersion and WindowsAero properties in SystemInformationMBS module.
  • Deprecated WinServicePackMajor and WinServicePackMinor properties in SystemInformationMBS module.
  • Fixed a bug with library loading for aarch64 on Linux for libiconv, libidn2 and libldap.
  • Fixed isMonterey and isVentura to report correctly SystemInformationMBS module, broken in 23.0.
  • Improved our BluetoothLE plugin classes for Windows to not leak objects on calling events.
  • Patched SQLAPI to work again with Field() query without FetchNext.
  • Removed 32-bit plugin parts for macOS.
  • Removed PictureFromXFaceStringMBS, PictureFromXFaceMemoryBlockMBS, PictureFromXFaceMemoryBlockMBS and XFaceStringFromPictureMBS functions.
  • Removed WindowsGrowlMBS, GrowlMBS, GrowlNotificationMBS and GrowlApplicationBridgeMBS classes.
  • Updated DynaPDF to version 4.0.71.204.
  • Updated XL Plugin to include library for Windows 64-bit ARM.
Download: monkeybreadsoftware.de/xojo/download/plugin/Prerelease/ or from DropBox.
Or ask us to be added to our shared DropBox folder.

MBS FileMaker Plugin, version 13.1pr1

New in this prerelease of version 13.1 of the MBS FileMaker Plugin: Download at monkeybreadsoftware.com/filemaker/files/Prerelease/, in DropBox folder or ask for being added to the DropBox shared folder.

Archives

Jun 2024
May 2024
Apr 2024
Mar 2024
Feb 2024
Jan 2024
Dec 2023
Nov 2023
Oct 2023
Sep 2023
Aug 2023
Jul 2023
Jun 2023
May 2023
Apr 2023
Mar 2023
Feb 2023
Jan 2023
Dec 2022
Nov 2022
Oct 2022
Sep 2022
Aug 2022
Jul 2022
Jun 2022
May 2022
Apr 2022
Mar 2022
Feb 2022
Jan 2022
Dec 2021
Nov 2021
Oct 2021
Sep 2021
Aug 2021
Jul 2021
Jun 2021
May 2021
Apr 2021
Mar 2021
Feb 2021
Jan 2021
Dec 2020
Nov 2020
Oct 2020
Sep 2020
Aug 2020
Jul 2020
Jun 2020
May 2020
Apr 2020
Mar 2020
Feb 2020
Jan 2020
Dec 2019
Nov 2019
Oct 2019
Sep 2019
Aug 2019
Jul 2019
Jun 2019
May 2019
Apr 2019
Mar 2019
Feb 2019
Jan 2019
Dec 2018
Nov 2018
Oct 2018
Sep 2018
Aug 2018
Jul 2018
Jun 2018
May 2018
Apr 2018
Mar 2018
Feb 2018
Jan 2018
Dec 2017
Nov 2017
Oct 2017
Sep 2017
Aug 2017
Jul 2017
Jun 2017
May 2017
Apr 2017
Mar 2017
Feb 2017
Jan 2017
Dec 2016
Nov 2016
Oct 2016
Sep 2016
Aug 2016
Jul 2016
Jun 2016
May 2016
Apr 2016
Mar 2016
Feb 2016
Jan 2016
Dec 2015
Nov 2015
Oct 2015
Sep 2015
Aug 2015
Jul 2015
Jun 2015
May 2015
Apr 2015
Mar 2015
Feb 2015
Jan 2015
Dec 2014
Nov 2014
Oct 2014
Sep 2014
Aug 2014
Jul 2014
Jun 2014
May 2014
Apr 2014
Mar 2014
Feb 2014
Jan 2014
Dec 2013
Nov 2013
Oct 2013
Sep 2013
Aug 2013
Jul 2013
Jun 2013
May 2013
Apr 2013
Mar 2013
Feb 2013
Jan 2013
Dec 2012
Nov 2012
Oct 2012
Sep 2012
Aug 2012
Jul 2012
Jun 2012
May 2012
Apr 2012
Mar 2012
Feb 2012
Jan 2012
Dec 2011
Nov 2011
Oct 2011
Sep 2011
Aug 2011
Jul 2011
Jun 2011
May 2011
Apr 2011
Mar 2011
Feb 2011
Jan 2011
Dec 2010
Nov 2010
Oct 2010
Sep 2010
Aug 2010
Jul 2010
Jun 2010
May 2010
Apr 2010
Mar 2010
Feb 2010
Jan 2010
Dec 2009
Nov 2009
Oct 2009
Sep 2009
Aug 2009
Jul 2009
Apr 2009
Mar 2009
Feb 2009
Dec 2008
Nov 2008
Oct 2008
Aug 2008
May 2008
Apr 2008
Mar 2008
Feb 2008