Well, that bead only dispatches "dataProvidedChanged" regardless of the
reason. And it does so after the data as changed. We want to know before
the data changes so we can save the selection and then after the data
changes so it can be restored, if possible. We need something to send out
an event prior to the changes.

ArrayList only sends post-change events. If we listen for when the
selectedIndex changes, then we can keep a reference to the item selected.
When ArrayList is updated and sends, say a "itemAdded" event, the model
must not change the selectedIndex (thus dispatching a event and wiping out
our save). 

I think the right way to do this is:

ArrayList - sends itemAdded, itemRemoved, itemUpdated events. This is what
it does now.

DynamicArrayList - extends ArrayList, and sends itemAdding, itemRemoving,
and itemUpdating events prior to making the changes and then calls the
super function to dispatch the normal post-change event.

DynamicArrayListSelectionModel listens for the "-ing" events and saves the
current selection. When it receives the "-ed" event, it restores the
selection.

I think this will work and should not be disruptive.

On 1/3/18, 12:26 PM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> wrote:

>Hi Peter,
>
>What about DataProviderItemsChangeNotifier - It exactly doing what you are
>saying and what that restoration bead needs. What do you think ?
>
>Thanks, Piotr
>
>
>2018-01-03 18:05 GMT+01:00 Peter Ent <p...@adobe.com.invalid>:
>
>> I've spent this morning wrestling with this.
>>
>> Right now when a model (eg, ArraySelectionModel,
>>ArrayListSelectionModel)
>> has its dataProvider replaced, it will set the selectedIndex to -1 (and
>> selectedItem to null) if the dataProvider is being set to null;
>>otherwise
>> it leaves the values unchanged unless the current value exceeds the size
>> of the new dataProvider.
>>
>> A typical way to change things is to update the dataProvider and then
>>set
>> the list.dataProvider to null (selectedIndex becomes -1, dispatches
>> "selectedIndexChanged") followed setting list.dataProvider back to the
>> original dataProvider. This is done because we did not have a dynamic
>> system. Reseting the selection in this cause falls on the application
>> writer.
>>
>> For dynamic data, I think we also need a dynamic model (eg,
>> DynamicCollectionViewSelectionModel) which is tuned into the needs of a
>> dynamic system.
>>
>> Before changing a dataProvider, the DyanmicCollectionViewSelectionModel
>> will dispatch a "dataProviderChanging" event. This would give a
>>selection
>> restoration bead the opportunity to store the current selection. Then
>>upon
>> receiving the "dataProviderChanged" event, restore the selection.
>>
>> Unfortunately, the selection restoration bead still does not know when
>>an
>> item will be added or removed. While the model can listen for a complete
>> replacement of the dataProvider and warning with a
>>"dataProviderChanging"
>> event, then is no "itemAdding" or "itemRemoving" event prior to an item
>> being added or removed. To do this, we will need to having a new
>> collection view that extends ArrayList and dispatches those extra
>>events.
>> Then the selection restoration bead can operate correctly.
>>
>> This is my current thinking.
>>
>> —peter
>>
>>
>> On 1/2/18, 4:43 PM, "Alex Harui" <aha...@adobe.com.INVALID> wrote:
>>
>> >And this one reason we have beads as a pattern.  There is no one right
>>way
>> >to preserve selection and selection should not always be preserved for
>> >certain kinds of data provider changes.  So, create a bead that
>>performs
>> >the selection preservation you need and give it a name that makes it
>>clear
>> >what it does.  Then others can create similar beads for other
>>strategies.
>> >
>> >My 2 cents,
>> >-Alex
>> >
>> >On 1/2/18, 1:26 PM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> wrote:
>> >
>> >>Peter,
>> >>
>> >>You didn't misread, but my thoughts probably didn't far away into
>>problem
>> >>resolution. That's why I was surprise why I haven't thought about
>> >>preserving selection. :)
>> >>
>> >>Thanks, Piotr
>> >>
>> >>
>> >>2018-01-02 22:10 GMT+01:00 Peter Ent <p...@adobe.com.invalid>:
>> >>
>> >>> I thought because you mentioned that rollover and selection were
>>messed
>> >>> up, that was the thing needing attention. I must have misread your
>> >>>email;
>> >>> I'll go back.
>> >>>
>> >>> In the meantime, I have a Button that inserts an item into the
>> >>> dataProvider. Before doing this I am:
>> >>>
>> >>> var oldSelection:Object = list.selectedItem; // or selectedIndex??
>> >>>
>> >>>
>> >>> then update the dataProvider by inserting an item into it. For a
>>List
>> >>>with
>> >>> the standard bead set, I have to:
>> >>>
>> >>> list.dataProvider = null;
>> >>> list.dataProvider = applicationModel.dataProvider;
>> >>>
>> >>> After that, I just restore the selection: list.dataProvider =
>> >>>oldSelection
>> >>>
>> >>> Need to figure out if the dataProvider will change, save the
>>selection,
>> >>> allow the change, then restore it.
>> >>>
>> >>> —peter
>> >>>
>> >>> On 1/2/18, 3:58 PM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com>
>> wrote:
>> >>>
>> >>> >How are you doing that preservation, by simply saving item
>>somewhere
>> >>> >before
>> >>> >remove/add operation ?
>> >>> >
>> >>> >I'm not following the part where we you wanted some opinion.
>>Actually
>> >>>in
>> >>> >case of refreshing I didn't even thing about saving selection, but
>> >>>it's
>> >>> >true that it should happen! It's surprises me that in my app I
>>forgot
>> >>> >about
>> >>> >that. :)
>> >>> >
>> >>> >Thanks, Piotr
>> >>> >
>> >>> >
>> >>> >2018-01-02 21:44 GMT+01:00 Peter Ent <p...@adobe.com.invalid>:
>> >>> >
>> >>> >> The first task is to determine if a list's selectedIndex or
>> >>>selectedItem
>> >>> >> should be preserved.
>> >>> >>
>> >>> >> For selectedIndex, adding or removing an item will get the same
>>row
>> >>> >> selected until that row no longer exists.
>> >>> >>
>> >>> >> For selectedItem, adding or removing an item will keep the same
>>item
>> >>> >> selected until that item no longer exists. For example, if the
>>4th
>> >>>item
>> >>> >>is
>> >>> >> "red" and you insert an item at position 2, "red" remains
>>selected
>> >>>by
>> >>> >> shifts down a row.
>> >>> >>
>> >>> >> I can see this working both ways.
>> >>> >>
>> >>> >> In either case, first preserving the selection (index or item)
>> >>>before
>> >>> >>the
>> >>> >> add or remove and then restoring it works fine - I did this in
>> >>> >>application
>> >>> >> code, not in framework code. Works very nicely, as a matter of
>>fact.
>> >>> >>Works
>> >>> >> for both traditional lists and dynamic lists with the new beads
>> >>>(yours,
>> >>> >> Piotr, or my new collection ones). Its *very simple* code.
>> >>> >>
>> >>> >> So once we decide which selection is preserved, we need to decide
>> >>>where
>> >>> >> that goes. Even though this code is just a couple of lines, in
>>the
>> >>>PAYG
>> >>> >> world, not every app needs this so it must go into additional
>>beads
>> >>> >>since
>> >>> >> it is added functionality.
>> >>> >>
>> >>> >> —peter
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >>
>> >>> >> On 1/2/18, 1:31 PM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com>
>> >>>wrote:
>> >>> >>
>> >>> >> >Hi Peter,
>> >>> >> >
>> >>> >> >Welcome after vacation! I sense all ideas when I'm working with
>> >>>that
>> >>> >> >stuff.
>> >>> >> >I think you will see the issue with indexes, even if it's not
>>the
>> >>>case
>> >>> >> >with
>> >>> >> >removing from the list. I will wait for your review with that
>>index
>> >>> >> >refresh.
>> >>> >> >
>> >>> >> >Thank you so much! :)
>> >>> >> >
>> >>> >> >
>> >>> >> >2018-01-02 19:10 GMT+01:00 Peter Ent <p...@adobe.com.invalid>:
>> >>> >> >
>> >>> >> >> Hi,
>> >>> >> >>
>> >>> >> >> Catching up and building stuff. I'm going to repeat some
>>things
>> >>>for
>> >>> >>the
>> >>> >> >> befit of anyone joining Royale for 2018 (and to refresh my own
>> >>> >>thoughts
>> >>> >> >> coming off of holiday!).
>> >>> >> >>
>> >>> >> >> The initial idea of List and related classes was their beads
>>were
>> >>>to
>> >>> >>be
>> >>> >> >> almost static. You'd have data that you would use to create
>>the
>> >>> >> >> dataProvider to the list and when set, would cause the
>> >>>itemRenderers
>> >>> >>to
>> >>> >> >>be
>> >>> >> >> deleted and replaced. Even something as simple as adding new
>>data
>> >>>to
>> >>> >>the
>> >>> >> >> end of the dataProvider would require this reset: you'd have
>>to
>> >>>clear
>> >>> >> >>the
>> >>> >> >> dataProvider (list.dataProver = null) and set it again or
>>create
>> >>>a
>> >>> >> >> completely new dataProvider and set that to the list.
>> >>> >> >>
>> >>> >> >> The selected item and index should, in this case, be cleared.
>>I'd
>> >>> >>have
>> >>> >> >>to
>> >>> >> >> run a test to see if that really happens as I don't remember.
>>If
>> >>>you
>> >>> >> >>want
>> >>> >> >> to reset them back (assuming that index still existed) you
>>would
>> >>> >>write a
>> >>> >> >> bead to do it.
>> >>> >> >>
>> >>> >> >> Now we are at the dynamic stage where we want to handle
>>runtime
>> >>> >>updates
>> >>> >> >>to
>> >>> >> >> the dataProvider and create just new itemRenderers and insert
>> >>>them or
>> >>> >> >> remove itemRenderers when data is deleted from the
>>dataProvider.
>> >>> >> >>
>> >>> >> >> Alex believes that the initial creation and insertions are the
>> >>>most
>> >>> >> >>common
>> >>> >> >> of the dynamic actions; removals being less common. As such in
>> >>>the
>> >>> >>PAYG
>> >>> >> >> world you would have a bead that handled a replacement of the
>> >>> >> >>dataProvider
>> >>> >> >> (which covers the initialization step) and a bead which
>>handled
>> >>> >> >>additions
>> >>> >> >> and a bead to handle removals. There's a lot of duplication of
>> >>>code
>> >>> >>in
>> >>> >> >> these and under a non-PAYG system you'd just combine these
>>into a
>> >>> >>single
>> >>> >> >> bead to do initialize, add, and removal.
>> >>> >> >>
>> >>> >> >> In the dynamic beads, the selection should be preserved. That
>> >>> >> >>information
>> >>> >> >> is stored in the model. The model doesn't do much else accept
>> >>>keep
>> >>> >>the
>> >>> >> >> data. The standard view bead would not know about these extra
>> >>>events
>> >>> >>so
>> >>> >> >> yes, we'd need another view bead to intercept those events and
>> >>> >>re-apply
>> >>> >> >>or
>> >>> >> >> adjust the selection.
>> >>> >> >>
>> >>> >> >> ‹peter
>> >>> >> >>
>> >>> >> >> On 12/30/17, 4:29 PM, "Piotr Zarzycki"
>> >>><piotrzarzyck...@gmail.com>
>> >>> >> >>wrote:
>> >>> >> >>
>> >>> >> >> >Peter,
>> >>> >> >> >
>> >>> >> >> >I have figure out what is wrong in case of List. I reported
>>in
>> >>>the
>> >>> >> >> >previous
>> >>> >> >> >email that in the ListExample once you remove one item,
>> >>>something is
>> >>> >> >>wrong
>> >>> >> >> >with selection. Issue happened when you removing item in the
>> >>>middle
>> >>> >>of
>> >>> >> >> >collection.
>> >>> >> >> >
>> >>> >> >> >Let's say that you have 5 items and you are removing item
>>with
>> >>> >>index =
>> >>> >> >>2.
>> >>> >> >> >Removing will work properly, but StringItemRenderer ->
>> >>> >> >> >DataItemRenderer -> UIItemRendererBase
>> >>> >> >> ><- has property "index" which is basically not being
>>refreshed
>> >>>after
>> >>> >> >> >remove. In the result renderers has following indexes:
>> >>> >> >> >
>> >>> >> >> >0,
>> >>> >> >> >1,
>> >>> >> >> >3,
>> >>> >> >> >4
>> >>> >> >> >
>> >>> >> >> >Which is messes up selection and roll over color changes. How
>> >>> >>actually
>> >>> >> >>fix
>> >>> >> >> >that ? My first thought was that ListView should listen for
>> >>> >> >>"layoutNeeded"
>> >>> >> >> >(we are dispatching that event after remove, add etc.) and
>> >>>refresh
>> >>> >> >>indexes
>> >>> >> >> >of all renderers.
>> >>> >> >> >
>> >>> >> >> >The second thought is that ListView should listen for remove
>> >>>event,
>> >>> >> >>where
>> >>> >> >> >we will have index of removed row, so we will be able loop
>> >>>through
>> >>> >> >>part of
>> >>> >> >> >the collection and refresh rest of the indexes. It is more
>> >>> >>efficient,
>> >>> >> >>but
>> >>> >> >> >maybe this is job for new type of View (bead) -
>>ListRemoveView
>> >>>bead
>> >>> >>?
>> >>> >> >> >
>> >>> >> >> >Looking forward to your thought once you get back from
>>Vacation.
>> >>>:)
>> >>> >> >> >
>> >>> >> >> >Thanks, Piotr
>> >>> >> >> >
>> >>> >> >> >
>> >>> >> >> >
>> >>> >> >> >2017-12-22 15:05 GMT+01:00 Piotr Zarzycki
>> >>> >><piotrzarzyck...@gmail.com>:
>> >>> >> >> >
>> >>> >> >> >> Hi Peter,
>> >>> >> >> >>
>> >>> >> >> >> I haven't checked your branch yet, but I just pushed
>>couple of
>> >>> >> >>things to
>> >>> >> >> >> the develop which I needed for my examples. Here is the
>>list
>> >>>of
>> >>> >>beads
>> >>> >> >> >>which
>> >>> >> >> >> we currently have and can be used for List. I think names
>>are
>> >>>self
>> >>> >> >> >> explanatory.
>> >>> >> >> >>
>> >>> >> >> >> DynamicAddItemRendererForArrayListData
>> >>> >> >> >>
>> >>> >> >> >> DynamicUpdateItemRendererForArrayListData
>> >>> >> >> >>
>> >>> >> >> >> DynamicRemoveItemRendererForArrayListData
>> >>> >> >> >>
>> >>> >> >> >> DynamicRemoveAllItemRendererForArrayListData
>> >>> >> >> >>
>> >>> >> >> >> DynamicRemoveAllByNullItemRendererForArrayListData
>> >>> >> >> >>
>> >>> >> >> >> All beads above should be used once you set for your list:
>> >>> >> >> >>IDataProviderItemRendererMapper:
>> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >>> >> >> DataItemRendererFactoryForAr
>> >>> >> >> >>rayList")
>> >>> >> >> >>
>> >>> >> >> >> We have also DynamicItemsRendererFactoryForArrayListData -
>> >>>which
>> >>> >>is
>> >>> >> >> >>doing actually two things. Create all items once someone set
>> >>> >> >> >>dataProvider (the same logic as in
>> >>> >> >>DataItemRendererFactoryForArrayList)
>> >>> >> >> >>AND handle adding to
>> >>> >> >> >>
>> >>> >> >> >> ArrayList (the same logic as in
>> >>> >> >>DynamicAddItemRendererForArrayListData)
>> >>> >> >> >>- It duplicates logic from those both beads.
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >> Two Scenarios with
>> >>>DynamicItemsRendererFactoryForArrayListData:
>> >>> >> >> >>
>> >>> >> >> >> 1) If we use DynamicItemsRendererFactoryForArrayListData
>> >>>simply
>> >>> in
>> >>> >> >>the
>> >>> >> >> >>List as it is in our ListExample [1] we don't have to
>>remember
>> >>>to
>> >>> >> >>setup:
>> >>> >> >> >>
>> >>> >> >> >> IDataProviderItemRendererMapper:
>> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >>> >> >> DataItemRendererFactoryForAr
>> >>> >> >> >>rayList").
>> >>> >> >> >>
>> >>> >> >> >> However in that scenario we will have in List totally
>>useless
>> >>>bead
>> >>> >> >> >>DataItemRendererFactoryForArray which is being added default
>> to
>> >>> the
>> >>> >> >> List.
>> >>> >> >> >>
>> >>> >> >> >> 2) If we use DynamicItemsRendererFactoryForArrayListData
>>and
>> >>>we
>> >>> >>add
>> >>> >> >>in
>> >>> >> >> >>CSS  IDataProviderItemRendererMapper:
>> >>> >> >> >>ClassReference("org.apache.royale.html.beads.
>> >>> >> >> DataItemRendererFactoryForAr
>> >>> >> >> >>rayList")
>> >>> >> >> >>
>> >>> >> >> >> I'm not sure what can happen actually, cause both beads are
>> >>>using
>> >>> >>the
>> >>> >> >> >>same logic to create item renderers. Can be situation when
>>one
>> >>> >>bead is
>> >>> >> >> >>create renderers and second one re do this work again ? :)
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >> Thanks, Piotr
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >> [1]
>> >>> >> >> >>https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> https%3A%2F%2Fgithub.c
>> >>> >> >> >>om%2Fapache%2Froyale-asjs%2Fblob%
>> 2F24b09c787fc1da2d0a19895a2b2d
>> >>> >> >> 4a440e26c5
>> >>> >> >> >>97%2Fexamples%2Froyale%2FListExample%2Fsrc%2Fmain%
>> >>> >> >> 2Froyale%2FMyInitialVie
>> >>> >> >> >>w.mxml%23L69&data=02%7C01%7Cpent%40adobe.com%
>> >>> >> >> 7C94d879f8f6054e10c75508d54f
>> >>> >> >> >>cc6fe8%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%
>> >>> >> >> 7C636502661827506659&sd
>> >>> >> >> >>ata=W4Ih5Q0IGhGNvOX9jrmn580Qw4ljo%2BavjqABV4%2BJr%2Bc%3D&
>> >>> reserved=0
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >> 2017-12-19 20:35 GMT+01:00 Olaf Krueger
>> >>><m...@olafkrueger.net>:
>> >>> >> >> >>
>> >>> >> >> >>> Peter, great to read something about these "Collections"
>>and
>> >>> >> >> >>>"Hierarchical
>> >>> >> >> >>> data" stuff here!
>> >>> >> >> >>> Thanks for working on this, have a nice time and enjoy
>>your
>> >>> >>break!
>> >>> >> >> >>>
>> >>> >> >> >>> Olaf
>> >>> >> >> >>>
>> >>> >> >> >>>
>> >>> >> >> >>>
>> >>> >> >> >>> --
>> >>> >> >> >>> Sent from:
>> >>> >> >> >>>https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> http%3A%2F%2Fapache-r
>> >>> >> >> 
>>>>>oyale-development.20373.n8.nabble.com%2F&data=02%7C01%7Cpent%
>> >>> >> >> 40adobe.com
>> >>> >> >> >>>%7C94d879f8f6054e10c75508d54fcc6fe8%
>> >>> 7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> >> cee1%7
>> >>> >> >>
>> >>>>>>C0%7C0%7C636502661827506659&sdata=Zb1nVaD5dUx1Y89Q1jj4LxqBhtlxoZ
>> >>> >> >> FlwDFJAq
>> >>> >> >> >>>ruTsY%3D&reserved=0
>> >>> >> >> >>>
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >>
>> >>> >> >> >> --
>> >>> >> >> >>
>> >>> >> >> >> Piotr Zarzycki
>> >>> >> >> >>
>> >>> >> >> >> Patreon:
>> >>> >> >> >>*https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> https%3A%2F%2Fwww.pat
>> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com
>> >>> >> >> %7C94d879f8f6054e
>> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> >> cee1%7C0%7C0%7C636502661
>> >>> >> >> >>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >>> >> >> FXtA%3D&reserv
>> >>> >> >> >>ed=0
>> >>> >> >> >>
>> >>> >> >> >><https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> https%3A%2F%2Fwww.pat
>> >>> >> >> >>reon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com
>> >>> >> >> %7C94d879f8f6054e
>> >>> >> >> >>10c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> >> cee1%7C0%7C0%7C636502661
>> >>> >> >> >>827506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >>> >> >> FXtA%3D&reserv
>> >>> >> >> >>ed=0>*
>> >>> >> >> >>
>> >>> >> >> >
>> >>> >> >> >
>> >>> >> >> >
>> >>> >> >> >--
>> >>> >> >> >
>> >>> >> >> >Piotr Zarzycki
>> >>> >> >> >
>> >>> >> >> >Patreon:
>> >>> >> >> >*https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> https%3A%2F%2Fwww.patr
>> >>> >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> >> >> 7C94d879f8f6054e10
>> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> >> cee1%7C0%7C0%7C636502661827
>> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >>> >> >> FXtA%3D&reserved=0
>> >>> >> >> ><https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> >> https%3A%2F%2Fwww.patr
>> >>> >> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> >> >> 7C94d879f8f6054e10
>> >>> >> >> >c75508d54fcc6fe8%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> >> cee1%7C0%7C0%7C636502661827
>> >>> >> >> >506659&sdata=sjS%2Fmydo1M%2FGkkREJsc5CRyA1uFXRUK76zEHFeg
>> >>> >> >> FXtA%3D&reserved=0
>> >>> >> >> >>*
>> >>> >> >>
>> >>> >> >>
>> >>> >> >
>> >>> >> >
>> >>> >> >--
>> >>> >> >
>> >>> >> >Piotr Zarzycki
>> >>> >> >
>> >>> >> >Patreon:
>> >>> >> >*https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> https%3A%2F%2Fwww.patr
>> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> >> 7C96bb80bb6fef4b94
>> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> cee1%7C0%7C0%7C636505147194
>> >>> >>
>> >>> >>>474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V
>> >>> Kv3Br5KkZfFI%3D&reserved=0
>> >>> >> ><https://na01.safelinks.protection.outlook.com/?url=
>> >>> >> https%3A%2F%2Fwww.patr
>> >>> >> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> >> 7C96bb80bb6fef4b94
>> >>> >> >089008d5520f1a9f%7Cfa7b1b5a7b34438794aed2c178de
>> >>> >> cee1%7C0%7C0%7C636505147194
>> >>> >> >474371&sdata=D3%2FGi2wtNJLEO716RK18TbD1VMFdB3V
>> >>> >> Kv3Br5KkZfFI%3D&reserved=0>*
>> >>> >>
>> >>> >>
>> >>> >
>> >>> >
>> >>> >--
>> >>> >
>> >>> >Piotr Zarzycki
>> >>> >
>> >>> >Patreon:
>> >>> >*https://na01.safelinks.protection.outlook.com/?url=
>> >>> https%3A%2F%2Fwww.patr
>> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> 7C61ec983f6a9747bd
>> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de
>> >>> cee1%7C0%7C0%7C636505235128
>> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2%
>> >>> 2FUjH2EhucTbxR8Q%3D&rese
>> >>> >rved=0
>> >>> ><https://na01.safelinks.protection.outlook.com/?url=
>> >>> https%3A%2F%2Fwww.patr
>> >>> >eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%
>> >>> 7C61ec983f6a9747bd
>> >>> >cd7d08d552239493%7Cfa7b1b5a7b34438794aed2c178de
>> >>> cee1%7C0%7C0%7C636505235128
>> >>> >887083&sdata=Y%2BHjYn%2BGj%2Bhb0VVVy7fSW%2BGEvQo2%
>> >>> 2FUjH2EhucTbxR8Q%3D&rese
>> >>> >rved=0>*
>> >>>
>> >>>
>> >>
>> >>
>> >>--
>> >>
>> >>Piotr Zarzycki
>> >>
>> >>Patreon:
>> >>*https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>> >>r
>> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C4ed02057c74e4
>> >>5
>> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C636505251
>> >>9
>> 
>>>>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf3QaT4qEcsnWE4%3D&reserved=
>>>>0
>> >><https://na01.safelinks.protection.outlook.com/?url=
>> https%3A%2F%2Fwww.pat
>> >>r
>> >>eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com
>> %7C4ed02057c74e4
>> >>5
>> >>0da30908d552277e71%7Cfa7b1b5a7b34438794aed2c178de
>> cee1%7C0%7C0%7C636505251
>> >>9
>> >>40120787&sdata=aJzPBX5fyLQVXr21gO9aLOIIQhVMgf
>> 3QaT4qEcsnWE4%3D&reserved=0>
>> >>*
>> >
>>
>>
>
>
>-- 
>
>Piotr Zarzycki
>
>Patreon: 
>*https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr
>eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cbc91b6fdde6b490b
>314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636505971860
>386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved=0
><https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.patr
>eon.com%2Fpiotrzarzycki&data=02%7C01%7Cpent%40adobe.com%7Cbc91b6fdde6b490b
>314408d552cf1a3d%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636505971860
>386569&sdata=6jY4KSQS6PyNDnWtW3XBVP69nGU%2FHJYfyxHdhurBwh0%3D&reserved=0>*

Reply via email to