<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Mike Pesate on Medium]]></title>
        <description><![CDATA[Stories by Mike Pesate on Medium]]></description>
        <link>https://medium.com/@mpesate?source=rss-e597980a604f------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*19g759Yy5q5Pq--4</url>
            <title>Stories by Mike Pesate on Medium</title>
            <link>https://medium.com/@mpesate?source=rss-e597980a604f------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Tue, 14 Jul 2026 05:48:28 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@mpesate/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[Understanding Publishers in SwiftUI and Combine]]></title>
            <link>https://medium.com/bumble-tech/understanding-publishers-in-swiftui-and-combine-27806aa78ba1?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/27806aa78ba1</guid>
            <category><![CDATA[swift-programming]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[swiftui]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Wed, 20 Sep 2023 10:37:11 GMT</pubDate>
            <atom:updated>2023-09-20T10:37:11.012Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-H4kxNrBPeSp-w3OL7bu4Q.png" /><figcaption>Understanding Publishers in SwiftUI and Combine</figcaption></figure><p>SwiftUI and <a href="https://www.swiftbysundell.com/discover/combine/">Combine</a> have been around for a couple of years and are fast becoming more mainstream, as they’re adopted as the main tools to develop new iOS and macOS (and other appleOSs) applications.</p><p>Embedded into the heart of these new tools is a very versatile and useful component: Publisher.</p><p>But now, you might be wondering:</p><h3>What’s a publisher?</h3><p>A publisher is nothing more than an object that emits a stream of values over time. These values can be consumed by one or more subscribers, which can then update the state of the user interface or perform other actions.</p><p>In other words:<strong> Publishers are the source of data and subscribers are the consumers of that data.</strong></p><p>A<em> </em>real life example of a publisher would be an email mailing list. Like the one you never subscribed to, but from whom you keep receiving emails. They’d be a publisher in this scenario and you, and anyone else receiving these emails, would be the subscribers.</p><h4>How do we identify publishers in code?</h4><p>A publisher is every entity that conforms to the publisher protocol. It could be ready-made, provided by Apple inside the combine framework, or it could be one that you or someone else defined from scratch.</p><blockquote>How do we go about instantiating and using publishers in our apps?</blockquote><p>I’m very glad you asked that.</p><h3>Harnessing the power of publishers</h3><p>Combine provides us with a few ready-to-use publishers, as mentioned above, there are more, but to keep this short and sweet let’s go over the most frequently used ones:</p><ul><li><a href="https://developer.apple.com/documentation/combine/currentvaluesubject"><strong>CurrentValueSubject</strong></a></li><li><a href="https://developer.apple.com/documentation/combine/passthroughsubject"><strong>PassthroughSubject</strong></a></li><li><a href="https://developer.apple.com/documentation/combine/just"><strong>Just</strong></a></li></ul><p>You might be wondering why these “publishers” are suffixed with the word “Subject”. This is how Apple explains it:</p><blockquote>A subject is a publisher that you can use to ”inject” values into a stream.</blockquote><p>In practice, this means that a subject allows other entities to assign a value to be distributed amongst all its subscribers. This is accomplished with the exposure of send(_ value:). You’ll see how this works in the examples below.</p><h3>Using a publisher</h3><p>Let’s focus on the publishers that you and everyone else will be using the most:</p><h4>CurrentValueSubject</h4><p>This publisher emits <strong>AND</strong> stores the current value of a property. Meaning that when a new value is assigned it will be sent to all the subscribers as expected, but, it will also be stored so it can be requested later on for immediate use or requested by new subscribers attached after the value was emitted.</p><pre>import Combine<br><br>/*<br>* Let&#39;s create a new instance.<br>* You might notice that publishers need to define Result types<br>* One for Success, which in our case is Int<br>* and one for Failure, which should represent an Error type but<br>* for the purposes of our example we will just say errors Never happen.<br>*/<br>let subject = CurrentValueSubject&lt;Int, Never&gt;(0)<br><br>// We can consult the value stored right away<br>print(&quot;\(subject.value)&quot;) // &quot;0&quot;<br><br>// We can subscribe using `sink` and that will also be called right away<br>// and also when a new value is emitted.<br>let cancellable = subject.sink { newValue in<br>   print(&quot;\(newValue)&quot;) // &quot;0&quot; the first time<br>}<br><br>// Let&#39;s update the value<br>subject.send(10)<br><br>print(&quot;\(subject.value)&quot;) // &quot;10&quot;<br><br>// Sink will also print &quot;10&quot;</pre><p>In juxtaposition to the CurrentValueSubject, which can be initialised with an initial value and that value can be requested by old and new subscribers, we have:</p><h4>PassthroughSubject</h4><p>This<strong> </strong>publisher is initialised with no initial value and can emit multiple values over time but won’t store any of them for future references. The subscriber is attached to the publisher and it will receive all values sent to the publisher using the send(_:) method. However, if a subscriber attaches after a value has been emitted, they won’t be notified. Let’s see this in code:</p><pre>import Combine<br><br>/*<br> * Again, we are defining a new publisher with no error type<br> * to keep the examples as simple as possible.<br> * As you can see, this Publisher doesn&#39;t get an initial value<br> */<br>let subject = PassthroughSubject&lt;Int, Never&gt;() <br><br>/*<br> * It sends this value to any subscriber,<br> * but because at this point in time it has none,<br> * no one will ever know this happened.<br> */<br>subject.send(0) <br><br>/*<br> * Now we listen for new values<br> * But in contrast to CurrentValueSubject nothing will happen<br> * at the time of subscribing because there&#39;s no value present<br> */<br>let cancellable = subject.sink { newValue in<br>    print(&quot;\(newValue)&quot;) <br>}<br><br>subject.send(10) // print appears in console &quot;10&quot;</pre><p>Now, there’s one more publisher that has a similar behaviour to <strong>CurrentValueSubject </strong>but with a huge caveat.</p><h4>Just</h4><p>This<strong> </strong>publisher immediately sends a single value to the subscriber and then completes never to be heard from again, with new values that is. You can always attach a new subscriber and receive the value again <strong>just once</strong>.</p><pre>import Combine<br><br>// Create a new Just publisher with an initial value<br>let subject = Just&lt;Int&gt;(10)<br><br>// Attach to listen to that value and process it<br>let cancellable = subject.sink(<br>   // This is the first time completion is being mentioned.<br>   // More on that after this block<br>   receiveCompletion: { _ in<br>       print(&quot;Publisher completed&quot;)<br>   }, receiveValue: { value in // This is where the value gets send to<br>       print(&quot;\(value)&quot;)<br>   }<br>)<br><br>// --- Console Prints<br>// &quot;10&quot;<br>// &quot;Publisher completed&quot;</pre><p>What is receiveCompletion(..)? As with most things in life, publishers have a beginning and may also have an end. Meaning, in the case of <strong>Just,</strong> that after that initial value nothing else will ever be provided to that subscriber.</p><p>However, <strong>CurrentValueSubject </strong>and <strong>PassthroughSubject</strong> do not close themselves for business after sending one value or two or infinite. For these, you’d have to tell them to send a completion instead of a value, thus notifying the subscribers that they are closed for business and will no longer provide new values. Let’s see this in action:</p><pre>import Combine<br><br>// Just as on the first example we create a new publisher<br>let subject = CurrentValueSubject&lt;Int, Never&gt;(0)<br><br>// Then we attach a lister to it.<br>// However, this time it comes with the completion closure<br>let cancellable = subject.sink(<br>   receiveCompletion: { _ in<br>       print(&quot;Publisher completed&quot;)<br>   }, receiveValue: { value in<br>       print(&quot;\(value)&quot;)<br>   }<br>)<br><br>subject.send(completion: .finished)<br>subject.send(10)<br><br>// --- Console output<br>// &quot;0&quot;<br>// &quot;Publisher completed&quot;<br>//</pre><p>What happened to that subject.send(10)? It gets lost in the ether. The publisher is no longer taking new values so “10” will not get distributed to the subscribers.</p><p>But you may ask:</p><blockquote>We know that a CurrentValueSubject stores the initial value, what happens if we attach a new subscriber to it?</blockquote><p>Good question! Here’s an example code. Run it in your project or a playground and let me know what happens:</p><pre>import Combine<br><br>let subject = CurrentValueSubject&lt;Int, Never&gt;(0)<br>subject.send(completion: .finished)<br><br>let cancellable = subject.sink(<br>   receiveCompletion: { _ in<br>       print(&quot;Publisher completed&quot;)<br>   }, receiveValue: { value in<br>       print(&quot;\(value)&quot;)<br>   }<br>)<br><br>// Quiz: What&#39;s printed when running this code?</pre><h3>Conclusion</h3><p>Publishers are a powerful tool. They allow a developer to distribute, react and transform data easily. These were Just (pun intended) the most basic and common examples of publishers. There’s more to them and I encourage you to go and find out more about them. Publishers can be combined with others, they can be created by you for specific use cases.</p><p>Getting well acquainted with publishers is going to be a must very very soon, if it isn’t already.</p><h3>Useful links</h3><ul><li><a href="https://developer.apple.com/documentation/combine">Combine Documentation</a></li><li><a href="https://developer.apple.com/documentation/combine/currentvaluesubject">CurrentValueSubject</a></li><li><a href="https://developer.apple.com/documentation/combine/passthroughsubject">PassthroughSubject</a></li><li><a href="https://developer.apple.com/documentation/combine/just">Just</a></li></ul><h3>Bonus section on Just</h3><p>When I started to learn about publishers, I could immediately see the uses of them in real world examples, except for <strong>Just</strong>. It took me a while to figure that one out.</p><p>So, here’s an IRL example of how <strong>Just </strong>might be used.</p><pre>// Function to retrieve an image from a given URL<br>func imagePublisher(for url: URL) -&gt; AnyPublisher&lt;UIImage, Error&gt; {<br>   // But first you check to see if you already downloaded that image<br>   if let image = cache.image(for: url) {<br>       // If so, why wait? return that with a Just publisher<br>       return Just&lt;UIImage&gt;(image)<br>           // Even though Just doesn&#39;t seem have an Failure type,<br>           // it actually has Never.<br>           // We then need to change this to match the expected<br>           // Failure declared by the function.<br>           .setFailureType(to: Error.self)<br>           // You&#39;ll probably want to get the response on the main thread<br>           .receive(on: DispatchQueue.main)<br>           // Then type erase to match the expected return type<br>           .eraseToAnyPublisher()<br>   }<br>   //....<br>}</pre><p>I hope this provides more insight into how to apply publishers in your projects.</p><p>Have fun with this new information!</p><p>If you enjoyed this article or it helped you in any way. Do let me know by clapping, commenting or highlighting the portions that you found the most interesting.</p><p>You can also find me on <a href="https://es.linkedin.com/in/mikepesate">LinkedIn</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=27806aa78ba1" width="1" height="1" alt=""><hr><p><a href="https://medium.com/bumble-tech/understanding-publishers-in-swiftui-and-combine-27806aa78ba1">Understanding Publishers in SwiftUI and Combine</a> was originally published in <a href="https://medium.com/bumble-tech">Bumble Tech</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Mastering Type-Level Programming in Swift: A Comprehensive Guide]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Explore the Power of Swift&#x2019;s Type System and Learn How to Write Elegant, Reusable Code Using Type-Level Abstractions</p><p class="medium-feed-link"><a href="https://medium.com/@mpesate/mastering-type-level-programming-in-swift-a-comprehensive-guide-4982a42ebb47?source=rss-e597980a604f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@mpesate/mastering-type-level-programming-in-swift-a-comprehensive-guide-4982a42ebb47?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/4982a42ebb47</guid>
            <category><![CDATA[type-erasure]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[dependent-types]]></category>
            <category><![CDATA[reusable-code]]></category>
            <category><![CDATA[typelevel-programming]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Fri, 10 Mar 2023 18:01:36 GMT</pubDate>
            <atom:updated>2023-03-10T18:01:36.566Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[How to Write Functional Code in Swift]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Learn how to use functional programming methods in Swift</p><p class="medium-feed-link"><a href="https://medium.com/@mpesate/how-to-write-functional-code-in-swift-e3bc66c37a5c?source=rss-e597980a604f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@mpesate/how-to-write-functional-code-in-swift-e3bc66c37a5c?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/e3bc66c37a5c</guid>
            <category><![CDATA[compactmap]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[maps]]></category>
            <category><![CDATA[filters]]></category>
            <category><![CDATA[functional-programming]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Fri, 10 Mar 2023 17:28:18 GMT</pubDate>
            <atom:updated>2023-03-10T17:28:18.896Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Enhance Your Swift Code with a Dependency Injection System]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Master Dependency Injection in Swift: A Guide to Streamlining Your Code for Better Performance and Maintainability</p><p class="medium-feed-link"><a href="https://medium.com/@mpesate/enhance-your-swift-code-with-a-dependency-injection-system-52c606b96b68?source=rss-e597980a604f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@mpesate/enhance-your-swift-code-with-a-dependency-injection-system-52c606b96b68?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/52c606b96b68</guid>
            <category><![CDATA[dependency-injection]]></category>
            <category><![CDATA[swift-programming]]></category>
            <category><![CDATA[code-reusability]]></category>
            <category><![CDATA[performance-optimization]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Tue, 07 Feb 2023 11:27:10 GMT</pubDate>
            <atom:updated>2023-02-07T11:27:10.722Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The Do’s and Don’ts of Code Reviews]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/the-dos-and-don-ts-of-code-reviews-77032ba3a30c?source=rss-e597980a604f------2"><img src="https://cdn-images-1.medium.com/max/2600/0*m5IYOETChkiDrN2G" width="5184"></a></p><p class="medium-feed-snippet">Reduce team friction by having healthier code review cultures</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/the-dos-and-don-ts-of-code-reviews-77032ba3a30c?source=rss-e597980a604f------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/the-dos-and-don-ts-of-code-reviews-77032ba3a30c?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/77032ba3a30c</guid>
            <category><![CDATA[git]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[coding]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Mon, 25 Jan 2021 13:03:25 GMT</pubDate>
            <atom:updated>2021-01-28T08:03:11.138Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[The Formatter Family]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/geekculture/the-formatter-family-b0f899760943?source=rss-e597980a604f------2"><img src="https://cdn-images-1.medium.com/max/800/1*xvOHXEJ8g5BI1y35t231tA.jpeg" width="800"></a></p><p class="medium-feed-snippet">Formating numbers, prices, or even dates is one of the most common things to do on any application. Luckily Apple has our back!</p><p class="medium-feed-link"><a href="https://medium.com/geekculture/the-formatter-family-b0f899760943?source=rss-e597980a604f------2">Continue reading on Geek Culture »</a></p></div>]]></description>
            <link>https://medium.com/geekculture/the-formatter-family-b0f899760943?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/b0f899760943</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[formatter]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Wed, 13 Jan 2021 23:46:11 GMT</pubDate>
            <atom:updated>2021-01-14T12:23:05.588Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[10 Tips and Shortcuts You Should Be Using Right Now in Xcode]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/better-programming/10-tips-shortcuts-you-should-be-using-right-now-on-xcode-2e9e1b01511e?source=rss-e597980a604f------2"><img src="https://cdn-images-1.medium.com/max/1400/1*-xfCo4HM6bQ4kieiOHOTGQ.png" width="1400"></a></p><p class="medium-feed-snippet">A collection of shortcuts and tips that will help you master Xcode and write code faster</p><p class="medium-feed-link"><a href="https://medium.com/better-programming/10-tips-shortcuts-you-should-be-using-right-now-on-xcode-2e9e1b01511e?source=rss-e597980a604f------2">Continue reading on Better Programming »</a></p></div>]]></description>
            <link>https://medium.com/better-programming/10-tips-shortcuts-you-should-be-using-right-now-on-xcode-2e9e1b01511e?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/2e9e1b01511e</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[tips-and-tricks]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[shortcuts]]></category>
            <category><![CDATA[xcode]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Thu, 12 Nov 2020 11:03:04 GMT</pubDate>
            <atom:updated>2020-11-18T16:07:46.118Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Bonjour: How to Stream Data in 2 Easy Steps]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://itnext.io/bonjour-how-to-stream-data-in-2-easy-steps-f335bded87?source=rss-e597980a604f------2"><img src="https://cdn-images-1.medium.com/max/1094/1*MYmjWO6XrIFvrDbDHorziQ.png" width="1094"></a></p><p class="medium-feed-snippet">Send data using streams from one device to the next</p><p class="medium-feed-link"><a href="https://itnext.io/bonjour-how-to-stream-data-in-2-easy-steps-f335bded87?source=rss-e597980a604f------2">Continue reading on ITNEXT »</a></p></div>]]></description>
            <link>https://itnext.io/bonjour-how-to-stream-data-in-2-easy-steps-f335bded87?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/f335bded87</guid>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[networking]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swift]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Mon, 02 Nov 2020 09:02:23 GMT</pubDate>
            <atom:updated>2020-11-02T09:34:30.053Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Bonjour: Share data across devices without a backend.]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://itnext.io/bonjour-share-data-across-devices-without-a-backend-36faee520e14?source=rss-e597980a604f------2"><img src="https://cdn-images-1.medium.com/max/2600/0*tjN6p8oX7uZJOaYr" width="3600"></a></p><p class="medium-feed-snippet">Recently I found myself trying to achieve something different than what I normally do. I needed to share some information between iOS&#x2026;</p><p class="medium-feed-link"><a href="https://itnext.io/bonjour-share-data-across-devices-without-a-backend-36faee520e14?source=rss-e597980a604f------2">Continue reading on ITNEXT »</a></p></div>]]></description>
            <link>https://itnext.io/bonjour-share-data-across-devices-without-a-backend-36faee520e14?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/36faee520e14</guid>
            <category><![CDATA[zeroconf]]></category>
            <category><![CDATA[bonjour]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[network]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Sat, 17 Oct 2020 17:26:21 GMT</pubDate>
            <atom:updated>2020-11-02T09:17:47.980Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[A few Swift tricks that you might not know]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">Over the years we all come across that one article, post or even video that shows us a couple of neat tricks that we love and continue to&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/@mpesate/a-few-swift-tricks-that-you-might-not-know-7d14afbd5f71?source=rss-e597980a604f------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@mpesate/a-few-swift-tricks-that-you-might-not-know-7d14afbd5f71?source=rss-e597980a604f------2</link>
            <guid isPermaLink="false">https://medium.com/p/7d14afbd5f71</guid>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[ios-app-development]]></category>
            <category><![CDATA[mobile-app-development]]></category>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[swift]]></category>
            <dc:creator><![CDATA[Mike Pesate]]></dc:creator>
            <pubDate>Mon, 26 Nov 2018 09:20:34 GMT</pubDate>
            <atom:updated>2020-09-23T11:16:44.704Z</atom:updated>
        </item>
    </channel>
</rss>