OK. I think that will work for DML components, but what if there’s a bead which needs to add class names? What would be the “right” way to do that? A bead cannot override the function on the strand.
> On Feb 28, 2018, at 10:17 PM, Alex Harui <aha...@adobe.com.INVALID> wrote: > > I think you are missing that the element.className is set to > computeFinalClassNames. So the user is welcome to manipulate the > UIBase.className however they see fit. They can assign it a whole new > space-delimited list if they want. But what gets set on element.className > is computed from typeNames and className by default, and MDL would > override it to factor in fab, raised, colored into the computing of the > final classnames. > > I would prefer that we don't make requirements on users as to what they > can or can't do with the className property, like requiring them to use > addClassName/removeClassNames. MXML and States might set className, as > could any other AS logic. I think folks may even be used to setting > className in JavaScript. So letting UIBase.className be the "variable" > part and having computeFinalClassNames be the way the "fixed" part is > handled makes sense to me. > > Of course, I could be wrong... > -Alex > > On 2/28/18, 12:03 PM, "Harbs" <harbs.li...@gmail.com> wrote: > >> The problem which sparked this whole issue is like this: >> >> 1. We have some components (i.e. in MDL) which add “pieces” to the class >> names (such as “fab”, “raised”, “colored”, etc. >> 2. The client might subsequently set the className to something else. >> 3. When the component sets the “pieces” first and the client sets the >> className later, the client will overwrite these “pieces” which were >> added by the component. >> >> My suggestion to have addClassName() and removeClassName() was to have a >> “safe” way to add class names which would get computed together with the >> className when the className is replaced. >> >> The way you have it seems to just be modifying the existing className >> property. If that’s overwritten by a client, the logic falls apart. >> >> It feels like only having typeNames which are set inside the component >> and className which is set outside the component is not really enough. >> (Unless I’m missing something.) >> >> Harbs >> >>> On Feb 28, 2018, at 9:31 PM, Alex Harui <aha...@adobe.com.INVALID> >>> wrote: >>> >>> On 2/28/18, 10:44 AM, "Harbs" <harbs.li...@gmail.com> wrote: >>> >>>> If it’s not public, I don’t see how a utility method could call it >>>> though. >>> >>> I didn't think the utility methods like addClassName/removeClassName >>> would >>> need to alter computeFinalClassNames(). >>> >>> AIUI, for most UIBase subclasses, the final element.className is a mix >>> of >>> the className property and the typeNames. The typenames are thought to >>> be >>> "fixed" and the space-delimited list of names in className are the ones >>> the user wants to manipulate in their code. So, I would expect them to >>> write: >>> >>> org.apache.royale.utils.addClassName(myComponent, "pinkStyles"); >>> >>> >>> addClassName should just do something like: >>> >>> myComponent.className += value; >>> >>> That will call the className setter that will run: >>> >>> element.className = computeFinalClassNames(); >>> >>> If you call >>> >>> org.apache.royale.utils.removeClassName(myComponent, "pinkStyles"); >>> >>> removeClassName should just do something like: >>> >>> Var s:String = myComponent.className; >>> Var c:int = s.indexOf(nameToRemove + " "); >>> If (c != -1) >>> s = s.substr(0, c) + s.substr(c + nameToRemove.length + 1); >>> Else >>> { >>> c= s.indexOf(" " + nameToRemove); >>> if (c != -1) >>> s = s.substr(0, c); // remove last item >>> } >>> myComponent.className = s; >>> >>> >>> >>> It seems like it should be that simple. What am I missing? >>> >>> -Alex >>> >>> >>>> >>>>> On Feb 28, 2018, at 8:21 PM, Alex Harui <aha...@adobe.com.INVALID> >>>>> wrote: >>>>> >>>>> >>>>> >>>>> On 2/28/18, 9:50 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com >>>>> <mailto:piotrzarzyck...@gmail.com>> wrote: >>>>> >>>>>> Ok Understand, but do you agree that computeFinalClassNames - is >>>>>> something >>>>>> which is in the UIBase ? >>>>> >>>>> Yes, and probably protected instead of public. The one in UIBase just >>>>> appends typenames to className. It gets overridden in MDL where >>>>> needed >>>>> for shadow and other attributes. >>>>> >>>>> My 2 cents, >>>>> -Alex >>>>>> >>>>>> 2018-02-28 18:47 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: >>>>>> >>>>>>> I think that in the shadow setter, it would change _shadow and call >>>>>>> setClassName(computeFinalClassNames()); >>>>>>> >>>>>>> On 2/28/18, 9:33 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Alex, >>>>>>>> >>>>>>>> So we are getting back to the idea where you proposed to have >>>>>>>> function >>>>>>>> which computes everything. >>>>>>>> >>>>>>>> override public function computeFinalClassNames():String >>>>>>>> { >>>>>>>> return super.computeFinalClassNames() + " " + _shadow; >>>>>>>> } >>>>>>>> >>>>>>>> Where does that function should be placed ? Does that function >>>>>>>> should >>>>>>> be >>>>>>>> called in addedToParent plus whenever someone change _shadow ? - >>>>>>>> >>>>>>>> Because I really don't know how to handle scenario where you have >>>>>>>> some >>>>>>>> property isActive = true/false and I need to add/remove class. - In >>>>>>>> the >>>>>>>> first launch I use computeFinalClassNames, but how to handle >>>>>>>> changing >>>>>>> ? >>>>>>>> >>>>>>>> Thanks, Piotr >>>>>>>> >>>>>>>> >>>>>>>> 2018-02-28 18:26 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: >>>>>>>> >>>>>>>>> Hi Piotr, >>>>>>>>> >>>>>>>>> I think am I not communicating the principles effectively. >>>>>>>>> >>>>>>>>> First, IMO, addClassName and removeClassName should not be in >>>>>>>>> UIBase. >>>>>>>>> Lots of apps can be written without needing these methods. I >>>>>>>>> think >>>>>>> they >>>>>>>>> can be written as utility functions. >>>>>>>>> >>>>>>>>> Second, the computation of the final element.className should >>>>>>> represent >>>>>>>>> the state of the component, so I don't get why you need an >>>>>>>>> _internalClassName or should ever set it to "". The computation >>>>>>>>> for >>>>>>> a >>>>>>>>> component with a shadow would be to check the shadow property and >>>>>>>>> if >>>>>>> it >>>>>>>>> is >>>>>>>>> true, add a className for the shadow to the list. Then I think >>>>>>>>> you >>>>>>>>> wouldn't have the problem you showed in the animated GIF. When >>>>>>>>> the >>>>>>>>> classname property is set from the outside by MXMLDataInterpreter >>>>>>>>> or >>>>>>>>> even >>>>>>>>> user-written code, those classNames are added to the list with the >>>>>>>>> typeNames and the shadow className if shadow is true and then set >>>>>>>>> on >>>>>>> the >>>>>>>>> element. >>>>>>>>> >>>>>>>>> Finally, for addClassName and removeClassName, and all other >>>>>>>>> Royale >>>>>>>>> code, >>>>>>>>> we don't want to do much if any parameter checking. That is also >>>>>>>>> just-in-case code. The production code should not be passing in >>>>>>> null or >>>>>>>>> other bad values. And once you fix that, then the checks that you >>>>>>> have >>>>>>>>> written do not add value. I have proposed that there are >>>>>>>>> debug-only >>>>>>>>> code >>>>>>>>> that does parameter checking. There is a goog.DEBUG flag you can >>>>>>>>> use >>>>>>>>> for >>>>>>>>> that. >>>>>>>>> >>>>>>>>> HTH, >>>>>>>>> -Alex >>>>>>>>> >>>>>>>>> On 2/28/18, 12:40 AM, "Piotr Zarzycki" <piotrzarzyck...@gmail.com> >>>>>>>>> wrote: >>>>>>>>> >>>>>>>>>> Hi Alex, >>>>>>>>>> >>>>>>>>>> Sorry about that. Let me show you code and I recorded GIF with >>>>>>> problem >>>>>>>>>> debugging. >>>>>>>>>> >>>>>>>>>> *Code in UIBase which I have implemented:* >>>>>>>>>> addClassName and removeClassName [1]. >>>>>>>>>> addedToParent what is happen with internal field which I have >>>>>>>>>> added >>>>>>> [2] >>>>>>>>>> >>>>>>>>>> *Code for Testing* [3] - I'm adding first className, than shadow. >>>>>>>>>> >>>>>>>>>> *GIF* [4] We are starting from the constructor. Pay attention to >>>>>>>>>> the >>>>>>>>>> moment >>>>>>>>>> where className is being wiped out, later I have to use my >>>>>>>>>> internal >>>>>>>>>> variable to get it back. >>>>>>>>>> >>>>>>>>>> Does that more clean now ? >>>>>>>>>> >>>>>>>>>> [1] >>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>> che.org%2FEumG&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554040718214998& >>>>>>>>>> >>>>>>>>>> sdata=cDT88OF63TdBMPxYY2vwMSIRxD%2FP3DvwHupj%2BQHsofw%3D&reserved= >>>>>>>>>> 0 >>>>>>>>>> [2] >>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>> che.org%2FArmU&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554040718214998& >>>>>>>>>> sdata=m6whImrP70u7kzRxCbErlxCHWef8TKNejwm4Sr7bw7g%3D&reserved=0 >>>>>>>>>> [3] >>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2Fpaste.apa >>>>>>>>>> che.org%2FKrxq&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>> 7Cee5c84b4e3ff4ddb578008d >>>>>>>>>> 57e87046f%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0% >>>>>>>>> 7C636554040718214998& >>>>>>>>>> sdata=tpeUYSQIXGXtES8hyr7zSeet528ZTczSltcNccqRGDo%3D&reserved=0 >>>>>>>>>> [4] >>>>>>>>>> https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2F1drv.ms%2 >>>>>>>>>> >>>>>>>>>> Fu%2Fs!ApVpLyjpHDC2hPtoCi65kIZZPwjSpQ&data=02%7C01%7Caharui%40adob >>>>>>>>>> e >>>>>>> .com >>>>>>>>> %7C >>>>>>>>>> ee5c84b4e3ff4ddb578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>> cee1%7C0%7C >>>>>>>>>> >>>>>>>>>> 0%7C636554040718214998&sdata=eX%2FgZ0MA%2BdQJjcpYtMkk1pw3r0iVkdRa% >>>>>>>>> 2F6TWRTG >>>>>>>>>> 10OY%3D&reserved=0 >>>>>>>>>> >>>>>>>>>> Thanks, >>>>>>>>>> Piotr >>>>>>>>>> >>>>>>>>>> 2018-02-27 23:31 GMT+01:00 Alex Harui <aha...@adobe.com.invalid>: >>>>>>>>>> >>>>>>>>>>> Hi Piotr, >>>>>>>>>>> >>>>>>>>>>> I could not understand this explanation. Might be better to show >>>>>>>>> actual >>>>>>>>>>> code. For example in #3, there is a cssClass variable that I >>>>>>> don't >>>>>>>>> know >>>>>>>>>>> about. Also you mention at the bottom setting something as >>>>>>>>>>> empty, >>>>>>>>> but >>>>>>>>>>> I'm >>>>>>>>>>> not sure what that is. >>>>>>>>>>> >>>>>>>>>>> However, IMO, this code should be in utility functions, not in >>>>>>>>> UIBase. >>>>>>>>>>> I >>>>>>>>>>> think plenty of useful applications can be built without >>>>>>>>>>> changing >>>>>>>>>>> classNames at runtime. >>>>>>>>>>> >>>>>>>>>>> I'm off-line for the next several hours so we can pick this up >>>>>>> again >>>>>>>>> in >>>>>>>>>>> your morning. >>>>>>>>>>> >>>>>>>>>>> Thanks for working on it, >>>>>>>>>>> -Alex >>>>>>>>>>> >>>>>>>>>>> On 2/27/18, 2:21 PM, "Piotr Zarzycki" >>>>>>>>>>> <piotrzarzyck...@gmail.com> >>>>>>>>> wrote: >>>>>>>>>>> >>>>>>>>>>>> Here is how I'm thinking to resolve that issue. I would take >>>>>>> Harb's >>>>>>>>>>>> proposition and add to UIBase addClassName() and >>>>>>> removeClassName(). >>>>>>>>>>> Next >>>>>>>>>>>> I >>>>>>>>>>>> would add internal field _internalClassName:String. >>>>>>>>>>>> >>>>>>>>>>>> addClassName(value): >>>>>>>>>>>> 1) Will check if provided class name exits in _className and in >>>>>>>>>>>> _internalClassName. >>>>>>>>>>>> 2) Will add to _internalClassName += value >>>>>>>>>>>> 3) Assign to the element.className in the following way: >>>>>>>>>>> element.className >>>>>>>>>>>> = cssClass + " " + _className + " " + typeNames; >>>>>>>>>>>> >>>>>>>>>>>> removeClassName(value) >>>>>>>>>>>> 1) Will check if provided classs name exists in _className or >>>>>>>>>>>> in >>>>>>>>>>>> _internalClassName >>>>>>>>>>>> 2) Make a replace to empty string if css class name exists. >>>>>>>>>>>> _className.replace(value, ""); >>>>>>>>>>>> 3) Assign to the element.className: element.className = >>>>>>> _className >>>>>>>>> + " >>>>>>>>>>> " + >>>>>>>>>>>> typeNames; >>>>>>>>>>>> >>>>>>>>>>>> In added to parent we are computing _internalClassName with >>>>>>>>> _className >>>>>>>>>>> and >>>>>>>>>>>> typeNames. Then it's being set as empty. >>>>>>>>>>>> >>>>>>>>>>>> element.className = _internalClassName + " " + _className + " >>>>>>> " + >>>>>>>>>>>> typeNames; >>>>>>>>>>>> >>>>>>>>>>>> I have implemented it and it seems to be working. Waiting for >>>>>>> your >>>>>>>>>>>> thoughts >>>>>>>>>>>> on that solution. The last step where we are adding all three >>>>>>>>> fields is >>>>>>>>>>>> the >>>>>>>>>>>> most important. Points 3 in addClassName and removeClassName >>>>>>>>>>>> are >>>>>>>>>>>> necessary, >>>>>>>>>>>> because user may want to more dynamically manipulate classes >>>>>>>>>>>> once >>>>>>>>>>>> component >>>>>>>>>>>> is created. Ex. "is-active" class is removed and added on >>>>>>>>>>>> demand. >>>>>>>>>>>> >>>>>>>>>>>> Thanks, Piotr >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> 2018-02-27 13:38 GMT+01:00 Piotr Zarzycki >>>>>>>>> <piotrzarzyck...@gmail.com>: >>>>>>>>>>>> >>>>>>>>>>>>> I think I have analyzed everything and have some >>>>>>>>>>>>> implementation >>>>>>>>>>>>> proposition. I will try to provide it later today. >>>>>>>>>>>>> >>>>>>>>>>>>> Thanks, Piotr >>>>>>>>>>>>> >>>>>>>>>>>>> 2018-02-27 13:35 GMT+01:00 Harbs <harbs.li...@gmail.com>: >>>>>>>>>>>>> >>>>>>>>>>>>>> ExpandableSearch broke too. >>>>>>>>>>>>>> >>>>>>>>>>>>>>> On Feb 25, 2018, at 6:15 PM, Piotr Zarzycki >>>>>>>>>>>>>> <piotrzarzyck...@gmail.com> >>>>>>>>>>>>>> wrote: >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> Harbs, >>>>>>>>>>>>>>> >>>>>>>>>>>>>>> If you are using something more than MDL Dialog in your >>>>>>>>>>> application >>>>>>>>>>>>>> it >>>>>>>>>>>>>>> would be great to get feedback whether I didn't break for >>>>>>> you >>>>>>>>>>>>>> anything. >>>>>>>>>>>>>> :) >>>>>>>>>>>>>> >>>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> >>>>>>>>>>>>> -- >>>>>>>>>>>>> >>>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>>> >>>>>>>>>>>>> Patreon: >>>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>> https%3A%2F%2Fwww.pat >>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>> %7C45a065853ba1 >>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>> cee1%7C0%7C0%7C6365536 >>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>> 9liXcy%2BPg%3D&rese >>>>>>>>>>>>> rved=0 >>>>>>>>>>>>> >>>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>> https%3A%2F%2Fwww.pat >>>>>>>>>>>>> reon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com >>>>>>>>>>> %7C45a065853ba1 >>>>>>>>>>>>> 4a295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>> cee1%7C0%7C0%7C6365536 >>>>>>>>>>>>> 69427477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>> 9liXcy%2BPg%3D&rese >>>>>>>>>>>>> rved=0>* >>>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> >>>>>>>>>>>> -- >>>>>>>>>>>> >>>>>>>>>>>> Piotr Zarzycki >>>>>>>>>>>> >>>>>>>>>>>> Patreon: >>>>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>>>> 7C45a065853ba14a >>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>> cee1%7C0%7C0%7C6365536694 >>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>> 9liXcy%2BPg%3D&reserved >>>>>>>>>>>> =0 >>>>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>>>> 7C45a065853ba14a >>>>>>>>>>>> 295d9d08d57e3082b9%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>>>> cee1%7C0%7C0%7C6365536694 >>>>>>>>>>>> 27477536&sdata=tOlZF%2FWAGhqn1toqJCCqjc14NZU56MnZZK >>>>>>>>>>> 9liXcy%2BPg%3D&reserved >>>>>>>>>>>> =0>* >>>>>>>>>>> >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> -- >>>>>>>>>> >>>>>>>>>> Piotr Zarzycki >>>>>>>>>> >>>>>>>>>> Patreon: >>>>>>>>>> *https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>> 7Cee5c84b4e3ff4d >>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>> cee1%7C0%7C0%7C6365540407 >>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%2FqOkmxROz58p7VvQ%2B0EK8VPPc% >>>>>>>>> 3D&reserv >>>>>>>>>> ed=0 >>>>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>>>> https%3A%2F%2Fwww.patr >>>>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% >>>>>>>>> 7Cee5c84b4e3ff4d >>>>>>>>>> db578008d57e87046f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>>>> cee1%7C0%7C0%7C6365540407 >>>>>>>>>> 18214998&sdata=VYtgB8rsurZAHpO%2FVs%2FqOkmxROz58p7VvQ%2B0EK8VPPc% >>>>>>>>> 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%7Caharui%40adobe.com% >>>>>>> 7Cda0fd75922c94d >>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>> cee1%7C0%7C0%7C6365543602 >>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0oJqA6J42ZuhcA%3D&reserv >>>>>>>> ed >>>>>>>> =0 >>>>>>>> <https://na01.safelinks.protection.outlook.com/?url= >>>>>>> https%3A%2F%2Fwww.patr >>>>>>>> eon.com%2Fpiotrzarzycki&data=02%7C01%7Caharui%40adobe.com% >>>>>>> 7Cda0fd75922c94d >>>>>>>> cb789208d57ed16c9f%7Cfa7b1b5a7b34438794aed2c178de >>>>>>> cee1%7C0%7C0%7C6365543602 >>>>>>>> 95549968&sdata=rypScmQqTsmVcrUIZRNnaoZP5VMbI0 >>>>>>> oJqA6J42ZuhcA%3D&reserved=0>* >>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> >>>>>> Piotr Zarzycki >>>>>> >>>>>> Patreon: >>>>>> >>>>>> >>>>>> *https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww. >>>>>> pa >>>>>> tr >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww. >>>>>> pa >>>>>> tr> >>>>>> eon.com >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Feon.c >>>>>> om >>>>>> >>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57edb59 >>>>>> 03 >>>>>> >>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&sdata >>>>>> =G >>>>>> >>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%2Fpiotrzarzy >>>>>> ck >>>>>> i&data=02%7C01%7Caharui%40adobe.com >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ado >>>>>> be >>>>>> >>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57e >>>>>> db >>>>>> >>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&s >>>>>> da >>>>>> >>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&reserved=0>%7Cf25d >>>>>> bf >>>>>> 20138f47 >>>>>> >>>>>> >>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554 >>>>>> 37 >>>>>> 41 >>>>>> >>>>>> >>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserv >>>>>> ed >>>>>> =0 >>>>>> >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww. >>>>>> pa >>>>>> tr >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww. >>>>>> pa >>>>>> tr> >>>>>> eon.com >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Feon.c >>>>>> om >>>>>> >>>>>> %2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57edb59 >>>>>> 03 >>>>>> >>>>>> %7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&sdata >>>>>> =G >>>>>> >>>>>> P3kiCe4imGL1d5mLcQcEGLxLCNgLGK2RheJkPCJgQY%3D&reserved=0>%2Fpiotrzarzy >>>>>> ck >>>>>> i&data=02%7C01%7Caharui%40adobe.com >>>>>> >>>>>> <https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2F40ado >>>>>> be >>>>>> >>>>>> .com%2F&data=02%7C01%7Caharui%40adobe.com%7C75519f53f52b4fde36b108d57e >>>>>> db >>>>>> >>>>>> 5903%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554402926763835&s >>>>>> da >>>>>> >>>>>> ta=r5UrAyOXUfffdyTWxankNj%2F5knjssVb9oxg4tY5sThY%3D&reserved=0>%7Cf25d >>>>>> bf >>>>>> 20138f47 >>>>>> >>>>>> >>>>>> 186d4808d57ed4a8fb%7Cfa7b1b5a7b34438794aed2c178decee1%7C0%7C0%7C636554 >>>>>> 37 >>>>>> 41 >>>>>> >>>>>> >>>>>> 87322476&sdata=bVfz%2BNfVCmLjO4LzijRozHXQoN1VfVRQSetW7oghI4s%3D&reserv >>>>>> ed >>>>>> =0 >>>>>>> * >>>> >>> >> >