From asmariyaz23@gmail.com Fri Aug 28 18:26:31 2015 From: Asma Riyaz To: galaxy-dev@lists.galaxyproject.org Subject: Re: [galaxy-dev] Get dataset/API ids for a dataset Date: Fri, 28 Aug 2015 18:26:10 -0400 Message-ID: In-Reply-To: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============5233725401802794785==" --===============5233725401802794785== Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hi Carl, Finally got it to work with hda.creating_job.output_datasets!!! Thank you so much for your help :) Sincerely, -Asma On Fri, Aug 28, 2015 at 2:38 PM, Carl Eberhard wrote: > Each python ORM object for a dataset has both create_time and update_time. > > If I understand correctly and there's one job that's producing the bam > files and json file you can use 'hda.creating_job.output_datasets' (in > python and where 'hda' is the ORM object for the json file) to get all the > datasets produced by the job that produced the json file (including that > file itself). > > Hope that helps. > > On Thu, Aug 27, 2015 at 1:14 PM, Asma Riyaz wrote: > >> Hi Carl, >> >> Thank you for your help, I was able to access all the dataset ids in >> history with the pointers you gave, but I am not finding an immediate way >> to deduce which original file is from which id. I think if I can get the >> timestamp of the datasets I can use this and the dataset type metadata. >> Would there be a way (with "h" or "trans" objects or something else) to >> grab the timestamp? >> >> Another side question: is there an id that remains common to multiple >> outputs produced from one tool? >> >> Thank you, >> -Asma >> >> On Wed, Aug 26, 2015 at 10:07 AM, Carl Eberhard >> wrote: >> >>> Hi, Asma >>> >>> Sorry for the confusion. You may want to have a look here: >>> http://docs.makotemplates.org/en/latest/index.html >>> >>> Mako is a python templating language. No tag is required to run python >>> in it (when the server is building the page). Simply use the brackets: >>> <% >>> # executes python code while the page is built >>> # here we can access the database since this is server side code >>> %> >>> Make sure you use '<% %>' and not '<%! %>' so that everything is loaded >>> properly. >>> >>> Once you have the dataset ids or urls in an array you can 'print' their >>> JSON into a script tag for use with javascript when the page is loaded on= to >>> the client browser using the mako expression syntax: >>> >>> >>> 'h' is for helpers which are objects that Galaxy puts into all the mako >>> templates and have utility functions. 'dumps' is part of the json library >>> and is 'dump'ing a JSON 's'tring into the template. Notice there are no >>> quotes around the JSON. Mako will print the server side dataset_ids as >>> javascript-usable JSON so they can be used by the page on the client side >>> to build your urls. >>> >>> Essentially you have to use the JSON to communicate between the python >>> and javascript. You cannot use python or python objects (like >>> trans.history) from javascript code directly though. >>> >>> 'trans' should definitely be available and defined. igv.mako is being >>> loaded as part of the visualization framework, correct? >>> >>> If this fails to help, let me know and we can work directly with the >>> code if you'd like. >>> >>> On Tue, Aug 25, 2015 at 1:48 PM, Asma Riyaz >>> wrote: >>> >>>> In addition to my previous attempts, here is another I have tried: >>>> >>>> *in igv.mako:* >>>> >>>> <%! >>>> users_current_history =3D trans.history >>>> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >>>> users_current_history.datasets ] >>>> %> >>>> <%def name=3D"getDataset_ids()"> >>>> <% >>>> return dataset_ids >>>> %> >>>> >>>> >>>> >>>> But this fails again and error appears in galaxy as 'name trans not >>>> defined'. >>>> >>>> -Asma >>>> >>>> On Tue, Aug 25, 2015 at 1:12 PM, Asma Riyaz >>>> wrote: >>>> >>>>> Hello, >>>>> >>>>> I have tried to access user's current history in the >>>>> >>>>> The first console.log shows that 'users_current_history.datasets' is >>>>> undefined. >>>>> >>>>> According this piece of code from Carl, accessing dataset ids should >>>>> be done in python within a mako template tag >>>>> <% >>>>> users_current_history =3D trans.history >>>>> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >>>>> users_current_history.datasets ] >>>>> %> >>>>> >>>>> but all the examples I have seen so far have some html tag associated >>>>> with such code. How can I avoid using these tags and still use python a= lone? >>>>> >>>>> -Asma >>>>> >>>>> >>>>> >>>>> On Fri, Aug 21, 2015 at 11:41 AM, Carl Eberhard < >>>>> carlfeberhard(a)gmail.com> wrote: >>>>> >>>>>> As far as I know, it's best to write tool wrappers as if they were >>>>>> meant to be called outside of Galaxy. In other words, it would not be = best >>>>>> to try and get Galaxy dataset ids within the tool code. >>>>>> >>>>>> If we zoom out on the problem and take a higher view, is the JSON >>>>>> file primary used to launch the visualization or does it have another = use >>>>>> as well? >>>>>> >>>>>> Can/is the JSON passed to IGV directly in javascript? or does it need >>>>>> to be read from the file separately by IGV and independent from the >>>>>> visualization mako and its associated javascript? >>>>>> >>>>>> If the JSON data is only for the visualization, doesn't need to be >>>>>> 100% correct in the file, and can be passed within javascript, you can >>>>>> alter the JSON data directly in the visualization mako/js by decorating >>>>>> with the bam ids before passing it to IGV. In that case, the previous = code >>>>>> (or a cleaner version of it) will begin to get you there. >>>>>> >>>>>> Unfortunately, the previous code should work in the visualization >>>>>> mako only. (With the correction: >>>>>> from galaxy import model >>>>>> instead of >>>>>> import model >>>>>> >>>>>> The trans is an object describing the current WebTransaction >>>>>> (request/response). It allows access to a sqlalchemy (sa) database ses= sion: >>>>>> trans.sa_session >>>>>> >>>>>> On Fri, Aug 21, 2015 at 11:23 AM, Asma Riyaz >>>>>> wrote: >>>>>> >>>>>>> Hi Carl, >>>>>>> >>>>>>> The visualization comes into play after a lab implemented tool in >>>>>>> galaxy is ran; I am not using galaxy's workflow. Is tracing back ids = still >>>>>>> possible in this case with the test case you wrote earlier? >>>>>>> >>>>>>> Also I couldn't figure out what "trans" refers to in your previous >>>>>>> message. >>>>>>> >>>>>>> Thank you, >>>>>>> Asma >>>>>>> >>>>>>> On Thu, Aug 20, 2015 at 3:03 PM, Asma Riyaz >>>>>>> wrote: >>>>>>> >>>>>>>> >>>>>>>> ---------- Forwarded message ---------- >>>>>>>> From: Carl Eberhard >>>>>>>> Date: Thu, Aug 20, 2015 at 2:46 PM >>>>>>>> Subject: Re: [galaxy-dev] Get dataset/API ids for a dataset >>>>>>>> To: Asma Riyaz >>>>>>>> Cc: galaxy-dev >>>>>>>> >>>>>>>> >>>>>>>> If I understand correctly, this begins to sound less like something >>>>>>>> the visualization level can do and more something that needs to be h= andled >>>>>>>> at your tool level. >>>>>>>> >>>>>>>> Let me repeat back what I understand to be the process: >>>>>>>> 1. Your pipeline is activated by the user and some initial step in >>>>>>>> the pipeline creates the JSON file that will configure your visualiz= ation >>>>>>>> 2. Some indeterminate number of bam files are created >>>>>>>> 3. The pipeline finishes and at this point the encoded ids of all >>>>>>>> the bam files created by the pipeline should be used in urls added t= o the >>>>>>>> JSON file from step 1 >>>>>>>> 4. The user then clicks on one of the outputs (the JSON file? Yes ) >>>>>>>> from the pipeline to launch the visualization and the JSON file is r= ead >>>>>>>> >>>>>>>> Do I have that right? When you say pipeline does that mean a Galaxy >>>>>>>> workflow? >>>>>>>> ---> Yes, this is exactly what I want to do. No, not a Galaxy >>>>>>>> workflow, but a pipeline written in the lab which is then converted = to a >>>>>>>> galaxy tool. Is 'hda' available at the tool level as well? I have re= ad >>>>>>>> through the Bioblend API but couldn't figure out a way to query for = only >>>>>>>> those datasets that being worked on by galaxy in current history. >>>>>>>> >>>>>>>> If so, you can access the workflow using the ORM by tracing up from >>>>>>>> the dataset that invoked the visualization and then back down to the= bam >>>>>>>> files that were created in the workflow steps: >>>>>>>> >>>>>>>> <% >>>>>>>> # get the bam datasets created by the workflow that created 'hda' >>>>>>>> # where 'hda' is the dataset the visualization launched from >>>>>>>> import model >>>>>>>> w =3D trans.sa_session.query( model.WorkflowInvocationStep ) >>>>>>>> .filter( WorkflowInvocationStep.job =3D=3D hda.creating_job >>>>>>>> ).one().workflow_invocation >>>>>>>> ids =3D [ d.dataset.id for d in s.job.output_datasets if >>>>>>>> d.dataset.ext =3D=3D 'bam' ] for s in w.steps if s.job ] >>>>>>>> urls =3D [ ... ] >>>>>>>> %> >>>>>>>> >>>>>>>> (The above is really horrible code, but sketches one way you could >>>>>>>> get the ids from the visualization mako) >>>>>>>> >>>>>>>> If it's not a workflow and a pipeline being run from within a >>>>>>>> Galaxy tool wrapper, then the tool wrapper code should be writing th= e ids >>>>>>>> to the JSON file. Is that the case instead? >>>>>>>> --> Yes, tool wrapper code is where the IDs need to inserted. Will >>>>>>>> try using "model" and see where I get with it. >>>>>>>> >>>>>>>> -Thank you, >>>>>>>> Asma >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Aug 20, 2015 at 1:28 PM, Asma Riyaz >>>>>>>> wrote: >>>>>>>> >>>>>>>>> Hi Carl, >>>>>>>>> >>>>>>>>> Thank you for your reply. This definitely helps me get started, my >>>>>>>>> question being: >>>>>>>>> >>>>>>>>> trans.history will get all the dataset ids in users history >>>>>>>>> regardless of which run the datasets are associated with. Hence if = the user >>>>>>>>> has multiple bams loaded in history there will be no way of disting= uishing >>>>>>>>> them. >>>>>>>>> >>>>>>>>> Here is a rough idea of what I am envisioning my pipeline to do: >>>>>>>>> >>>>>>>>> Galaxy pipeline runs -> while it is running, dataset ids that are >>>>>>>>> generated should be retrieved for each output (in my case bams and = JSON >>>>>>>>> file) -> when main pipeline finishes, ids are updated within the JS= ON file >>>>>>>>> -> all the outputs are fed to users history. >>>>>>>>> >>>>>>>>> this way there will be no ambiguity as to which bams are being >>>>>>>>> accessed for viz. Is this intermediate way of getting dataset ids p= ossible? >>>>>>>>> >>>>>>>>> Thank you >>>>>>>>> -Asma >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> >>>>>>>>> On Wed, Aug 19, 2015 at 4:27 PM, Carl Eberhard < >>>>>>>>> carlfeberhard(a)gmail.com> wrote: >>>>>>>>> >>>>>>>>>> Hi, Asma >>>>>>>>>> >>>>>>>>>> If you're looking through datasets via the mako part of your >>>>>>>>>> visualization, you can use: >>>>>>>>>> >>>>>>>>>>> users_current_history =3D trans.history >>>>>>>>>>> dataset_ids =3D [ trans.security.encode_id( d.id ) for d in >>>>>>>>>>> users_current_history.datasets ] >>>>>>>>>> >>>>>>>>>> (or similar) to build the ids needed for the urls. >>>>>>>>>> >>>>>>>>>> If you want to get the info via javascript, you can use something >>>>>>>>>> like the python above and template into a js var: >>>>>>>>>> >>>>>>>>>>> var url =3D "/datasets/${ dna_dataset_id }/display?to_ext=3Dbam" >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> ...or encode and template the history id and use ajax and the api >>>>>>>>>> after the page is served: >>>>>>>>>> >>>>>>>>>>> var historyId =3D "${ trans.security.encode_id( trans.history.id ) >>>>>>>>>>> }"; >>>>>>>>>>> jQuery.ajax( galaxy_config.root + 'api/histories/' + historyId + >>>>>>>>>>> '/contents' ) >>>>>>>>>>> .done( function( response ){ /* will contain summary json >>>>>>>>>>> for each dataset including encoded ids for each */ }) >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> Let me know if that's not what you were looking for or if you >>>>>>>>>> find any problems with it. >>>>>>>>>> >>>>>>>>>> On Wed, Aug 19, 2015 at 11:01 AM, Asma Riyaz < >>>>>>>>>> asmariyaz23(a)gmail.com> wrote: >>>>>>>>>> >>>>>>>>>>> Hello Galaxy-dev, >>>>>>>>>>> >>>>>>>>>>> I thank you so much for all the help you have given me. >>>>>>>>>>> >>>>>>>>>>> I have a question about data set ids in galaxy. As a background, >>>>>>>>>>> I am running my own galaxy instance on a server. A pipeline >>>>>>>>>>> implemented in the lab produces the following files in the histor= y: >>>>>>>>>>> >>>>>>>>>>> 1) 2 BAM files >>>>>>>>>>> 2) A JSON file >>>>>>>>>>> >>>>>>>>>>> My goal is to use this JSON file to pass the path/URL of bam >>>>>>>>>>> files into a custom JS we wrote for visualization purpose. >>>>>>>>>>> >>>>>>>>>>> This JSON file contains among many other details the paths/URLs >>>>>>>>>>> to the above bam files. I am using JSON filetypes to send data to= the JS >>>>>>>>>>> visualization within Galaxy. To do this, I have my own JS which l= oads a BAM >>>>>>>>>>> file from URL provided into an IGV.js track. IGV.js, which is >>>>>>>>>>> responsible for making the tracks, expects a valid URL which is u= pdated in >>>>>>>>>>> the JSON file in this manner: >>>>>>>>>>> >>>>>>>>>>> 1) Extract the API_key and history id from a loaded BAM file >>>>>>>>>>> 2) Edit the JSON file to reflect the BAM file's dataset id to be >>>>>>>>>>> something like this: >>>>>>>>>>> >>>>>>>>>>> { >>>>>>>>>>> "CLL-HL_pilot.r1.fastq": { >>>>>>>>>>> "DNA": "/datasets/36ddb788a0f14eb3/display?to_ext=3Dbam", >>>>>>>>>>> ... >>>>>>>>>>> >>>>>>>>>>> This works fine if I know the API Key for bam files. When a >>>>>>>>>>> pipeline executes dataset ids are generated for each output. I wa= nt to >>>>>>>>>>> access and include these ids in the JSON file and load the update= d JSON >>>>>>>>>>> file into the history with the bams. Is there a way to get the id= s from the >>>>>>>>>>> history in this manner? >>>>>>>>>>> >>>>>>>>>>> Thank you, >>>>>>>>>>> >>>>>>>>>>> Asma >>>>>>>>>>> >>>>>>>>>>> ___________________________________________________________ >>>>>>>>>>> Please keep all replies on the list by using "reply all" >>>>>>>>>>> in your mail client. To manage your subscriptions to this >>>>>>>>>>> and other Galaxy lists, please use the interface at: >>>>>>>>>>> https://lists.galaxyproject.org/ >>>>>>>>>>> >>>>>>>>>>> To search Galaxy mailing lists use the unified search at: >>>>>>>>>>> http://galaxyproject.org/search/mailinglists/ >>>>>>>>>>> >>>>>>>>>> >>>>>>>>>> >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>> >>>>>> >>>>> >>>> >>> >> > --===============5233725401802794785== Content-Type: text/html Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.htm" MIME-Version: 1.0 PGRpdiBkaXI9Imx0ciI+SGkgQ2FybCw8ZGl2Pjxicj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJm b250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij5GaW5hbGx5IGdvdCBpdCB0byB3b3JrIHdpdGjC oDwvc3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+aGRhLmNy ZWF0aW5nX2pvYi5vdXRwdXRfPC9zcGFuPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAw MTkwNzM0OXB4Ij5kYXRhc2V0cyEhITwvc3Bhbj48L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250 LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PHNwYW4gc3R5 bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPlRoYW5rIHlvdSBzbyBtdWNoIGZvciB5 b3VyIGhlbHAgOik8L3NwYW4+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5TaW5jZXJlbHksPC9k aXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+LUFzbWE8 L3NwYW4+PC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNz PSJnbWFpbF9xdW90ZSI+T24gRnJpLCBBdWcgMjgsIDIwMTUgYXQgMjozOCBQTSwgQ2FybCBFYmVy aGFyZCA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzpjYXJsZmViZXJoYXJkQGdt YWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmNhcmxmZWJlcmhhcmRAZ21haWwuY29tPC9hPiZndDs8 L3NwYW4+IHdyb3RlOjxicj48YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJt YXJnaW46MCAwIDAgLjhleDtib3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6 MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2PkVhY2ggcHl0aG9uIE9STSBvYmplY3QgZm9yIGEgZGF0 YXNldCBoYXMgYm90aCBjcmVhdGVfdGltZSBhbmQgdXBkYXRlX3RpbWUuwqA8YnI+PC9kaXY+PGRp dj48YnI+PC9kaXY+SWYgSSB1bmRlcnN0YW5kIGNvcnJlY3RseSBhbmQgdGhlcmUmIzM5O3Mgb25l IGpvYiB0aGF0JiMzOTtzIHByb2R1Y2luZyB0aGUgYmFtIGZpbGVzIGFuZCBqc29uIGZpbGUgeW91 IGNhbiB1c2UgJiMzOTtoZGEuY3JlYXRpbmdfam9iLm91dHB1dF9kYXRhc2V0cyYjMzk7IChpbiBw eXRob24gYW5kIHdoZXJlICYjMzk7aGRhJiMzOTsgaXMgdGhlIE9STSBvYmplY3QgZm9yIHRoZSBq c29uIGZpbGUpIHRvIGdldCBhbGwgdGhlIGRhdGFzZXRzIHByb2R1Y2VkIGJ5IHRoZSBqb2IgdGhh dCBwcm9kdWNlZCB0aGUganNvbiBmaWxlIChpbmNsdWRpbmcgdGhhdCBmaWxlIGl0c2VsZikuPGRp dj48YnI+PC9kaXY+PGRpdj5Ib3BlIHRoYXQgaGVscHMuPC9kaXY+PC9kaXY+PGRpdiBjbGFzcz0i SE9FblpiIj48ZGl2IGNsYXNzPSJoNSI+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2 IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gVGh1LCBBdWcgMjcsIDIwMTUgYXQgMToxNCBQTSwgQXNt YSBSaXlheiA8c3BhbiBkaXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21hcml5YXoyM0Bn bWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwv c3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1h cmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDox ZXgiPjxkaXYgZGlyPSJsdHIiPkhpIENhcmwsPGRpdj48YnI+PC9kaXY+PGRpdj5UaGFuayB5b3Ug Zm9yIHlvdXIgaGVscCwgSSB3YXMgYWJsZSB0byBhY2Nlc3MgYWxsIHRoZSBkYXRhc2V0IGlkcyBp biBoaXN0b3J5IHdpdGggdGhlIHBvaW50ZXJzIHlvdSBnYXZlLCBidXQgSSBhbSBub3QgZmluZGlu ZyBhbiBpbW1lZGlhdGUgd2F5IHRvIGRlZHVjZSB3aGljaCBvcmlnaW5hbCBmaWxlIGlzIGZyb20g d2hpY2ggaWQuIEkgdGhpbmsgaWYgSSBjYW4gZ2V0IHRoZSB0aW1lc3RhbXAgb2YgdGhlIGRhdGFz ZXRzIEkgY2FuIHVzZSB0aGlzIGFuZCB0aGUgZGF0YXNldCB0eXBlIG1ldGFkYXRhLiBXb3VsZCB0 aGVyZSBiZSBhIHdheSAod2l0aCAmcXVvdDtoJnF1b3Q7IG9yICZxdW90O3RyYW5zJnF1b3Q7IG9i amVjdHMgb3Igc29tZXRoaW5nIGVsc2UpIHRvIGdyYWIgdGhlIHRpbWVzdGFtcD88L2Rpdj48ZGl2 Pjxicj48L2Rpdj48ZGl2PkFub3RoZXIgc2lkZSBxdWVzdGlvbjogaXMgdGhlcmUgYW4gaWQgdGhh dCByZW1haW5zIGNvbW1vbiB0byBtdWx0aXBsZSBvdXRwdXRzIHByb2R1Y2VkIGZyb20gb25lIHRv b2w/wqA8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoYW5rIHlvdSw8L2Rpdj48ZGl2Pi1Bc21h PC9kaXY+PC9kaXY+PGRpdj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBj bGFzcz0iZ21haWxfcXVvdGUiPk9uIFdlZCwgQXVnIDI2LCAyMDE1IGF0IDEwOjA3IEFNLCBDYXJs IEViZXJoYXJkIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmNhcmxmZWJlcmhh cmRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+Y2FybGZlYmVyaGFyZEBnbWFpbC5jb208L2E+ Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5 bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmct bGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPkhpLCBBc21hPGRpdj48YnI+PC9kaXY+PGRpdj5Tb3Jy eSBmb3IgdGhlIGNvbmZ1c2lvbi4gWW91IG1heSB3YW50IHRvIGhhdmUgYSBsb29rIGhlcmU6wqA8 YSBocmVmPSJodHRwOi8vZG9jcy5tYWtvdGVtcGxhdGVzLm9yZy9lbi9sYXRlc3QvaW5kZXguaHRt bCIgdGFyZ2V0PSJfYmxhbmsiPmh0dHA6Ly9kb2NzLm1ha290ZW1wbGF0ZXMub3JnL2VuL2xhdGVz dC9pbmRleC5odG1sPC9hPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+TWFrbyBpcyBhIHB5dGhv biB0ZW1wbGF0aW5nIGxhbmd1YWdlLiBObyB0YWcgaXMgcmVxdWlyZWQgdG8gcnVuIHB5dGhvbiBp biBpdCAod2hlbiB0aGUgc2VydmVyIGlzIGJ1aWxkaW5nIHRoZSBwYWdlKS4gU2ltcGx5IHVzZSB0 aGUgYnJhY2tldHM6PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ Jmx0OyU8L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ wqAgwqAgIyBleGVjdXRlcyBweXRob24gY29kZSB3aGlsZSB0aGUgcGFnZSBpcyBidWlsdDwvZm9u dD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj7CoCDCoCAjIGhl cmUgd2UgY2FuIGFjY2VzcyB0aGUgZGF0YWJhc2Ugc2luY2UgdGhpcyBpcyBzZXJ2ZXIgc2lkZSBj b2RlPC9mb250PjwvZGl2PjxkaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDcz NDlweCI+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiUmZ3Q7PC9mb250PjwvZGl2 PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6c21hbGwiPk1ha2Ugc3VyZSB5b3UgdXNlICYjMzk7Jmx0OyUgJSZndDsm IzM5OyBhbmQgbm90ICYjMzk7Jmx0OyUhICUmZ3Q7JiMzOTsgc28gdGhhdCBldmVyeXRoaW5nIGlz IGxvYWRlZCBwcm9wZXJseS48L3NwYW4+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2Ui Pjxicj48L2ZvbnQ+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlw eCI+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPjxicj48L2ZvbnQ+PC9kaXY+PGRp dj5PbmNlIHlvdSBoYXZlIHRoZSBkYXRhc2V0IGlkcyBvciB1cmxzIGluIGFuIGFycmF5IHlvdSBj YW4gJiMzOTtwcmludCYjMzk7IHRoZWlyIEpTT04gaW50byBhIHNjcmlwdCB0YWcgZm9yIHVzZSB3 aXRoIGphdmFzY3JpcHQgd2hlbiB0aGUgcGFnZSBpcyBsb2FkZWQgb250byB0aGUgY2xpZW50IGJy b3dzZXIgdXNpbmcgdGhlIG1ha28gZXhwcmVzc2lvbiBzeW50YXg6wqA8L2Rpdj48ZGl2PjxzcGFu IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4O2ZvbnQtZmFtaWx5Om1vbm9zcGFj ZSxtb25vc3BhY2UiPiZsdDtzY3JpcHQgdHlwZT0mcXVvdDt0ZXh0L2phdmFzY3JpcHQmcXVvdDsm Z3Q7PC9zcGFuPjxicj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0 OXB4Ij48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+dmFyIGRhdGFzZXRJZHMgPSAk eyBoLmR1bXBzKCBkYXRhc2V0X2lkcyApIH07PC9mb250PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQt c2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNl Ij4mbHQ7L3NjcmlwdCZndDs8L2ZvbnQ+PC9kaXY+PGRpdiBzdHlsZT0iZm9udC1zaXplOjEyLjgw MDAwMDE5MDczNDlweCI+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPjxicj48L2Zv bnQ+PC9kaXY+JiMzOTtoJiMzOTsgaXMgZm9yIGhlbHBlcnMgd2hpY2ggYXJlIG9iamVjdHMgdGhh dCBHYWxheHkgcHV0cyBpbnRvIGFsbCB0aGUgbWFrbyB0ZW1wbGF0ZXMgYW5kIGhhdmUgdXRpbGl0 eSBmdW5jdGlvbnMuICYjMzk7ZHVtcHMmIzM5OyBpcyBwYXJ0IG9mIHRoZSBqc29uIGxpYnJhcnkg YW5kIGlzICYjMzk7ZHVtcCYjMzk7aW5nIGEgSlNPTiAmIzM5O3MmIzM5O3RyaW5nIGludG8gdGhl IHRlbXBsYXRlLiBOb3RpY2UgdGhlcmUgYXJlIG5vIHF1b3RlcyBhcm91bmQgdGhlIEpTT04uIE1h a28gd2lsbCBwcmludCB0aGUgc2VydmVyIHNpZGUgZGF0YXNldF9pZHMgYXMgamF2YXNjcmlwdC11 c2FibGUgSlNPTiBzbyB0aGV5IGNhbiBiZSB1c2VkIGJ5IHRoZSBwYWdlIG9uIHRoZSBjbGllbnQg c2lkZSB0byBidWlsZCB5b3VyIHVybHMuPGJyPjxicj5Fc3NlbnRpYWxseSB5b3UgaGF2ZSB0byB1 c2UgdGhlIEpTT04gdG8gY29tbXVuaWNhdGUgYmV0d2VlbiB0aGUgcHl0aG9uIGFuZCBqYXZhc2Ny aXB0LiBZb3UgY2Fubm90IHVzZSBweXRob24gb3IgcHl0aG9uIG9iamVjdHMgKGxpa2UgdHJhbnMu aGlzdG9yeSkgZnJvbSBqYXZhc2NyaXB0IGNvZGUgZGlyZWN0bHkgdGhvdWdoLjxicj48ZGl2Pjxi cj48L2Rpdj48ZGl2PiYjMzk7dHJhbnMmIzM5OyBzaG91bGQgZGVmaW5pdGVseSBiZSBhdmFpbGFi bGUgYW5kIGRlZmluZWQuIGlndi5tYWtvIGlzIGJlaW5nIGxvYWRlZCBhcyBwYXJ0IG9mIHRoZSB2 aXN1YWxpemF0aW9uIGZyYW1ld29yaywgY29ycmVjdD88L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2 PklmIHRoaXMgZmFpbHMgdG8gaGVscCwgbGV0IG1lIGtub3cgYW5kIHdlIGNhbiB3b3JrIGRpcmVj dGx5IHdpdGggdGhlIGNvZGUgaWYgeW91JiMzOTtkIGxpa2UuPGJyPjwvZGl2PjwvZGl2PjxkaXY+ PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3Rl Ij5PbiBUdWUsIEF1ZyAyNSwgMjAxNSBhdCAxOjQ4IFBNLCBBc21hIFJpeWF6IDxzcGFuIGRpcj0i bHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNvbSIgdGFyZ2V0PSJf YmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJs b2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9y ZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+ SW4gYWRkaXRpb24gdG8gbXkgcHJldmlvdXMgYXR0ZW1wdHMsIGhlcmUgaXMgYW5vdGhlciBJIGhh dmUgdHJpZWQ6PGRpdj48YnI+PC9kaXY+PGRpdj48dT48Zm9udCBjb2xvcj0iIzAwMDBmZiI+aW4g aWd2Lm1ha286PC9mb250PjwvdT48L2Rpdj48ZGl2Pjx1Pjxmb250IGNvbG9yPSIjMDAwMGZmIj48 YnI+PC9mb250PjwvdT48L2Rpdj48ZGl2PjxkaXY+wqAgwqAgJmx0OyUhPC9kaXY+PHNwYW4+PGRp dj7CoCDCoCDCoCB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSB0cmFucy5oaXN0b3J5PC9kaXY+PGRp dj7CoCDCoCDCoCBkYXRhc2V0X2lkcyA9IFsgdHJhbnMuc2VjdXJpdHkuZW5jb2RlX2lkKCA8YSBo cmVmPSJodHRwOi8vZC5pZCIgdGFyZ2V0PSJfYmxhbmsiPmQuaWQ8L2E+ICkgZm9yIGQgaW4gdXNl cnNfY3VycmVudF9oaXN0b3J5LmRhdGFzZXRzIF08L2Rpdj48ZGl2PsKgIMKgICUmZ3Q7PC9kaXY+ PC9zcGFuPjxkaXY+wqAgwqAgJmx0OyVkZWYgbmFtZT0mcXVvdDtnZXREYXRhc2V0X2lkcygpJnF1 b3Q7Jmd0OzwvZGl2PjxkaXY+wqAgwqAgwqAgwqAmbHQ7JTwvZGl2PjxkaXY+wqAgwqAgwqAgwqAg wqByZXR1cm4gZGF0YXNldF9pZHM8L2Rpdj48ZGl2PsKgIMKgIMKgIMKgJSZndDs8L2Rpdj48ZGl2 PsKgIMKgICZsdDsvJWRlZiZndDs8L2Rpdj48L2Rpdj48ZGl2PsKgIMKgJmx0O3NjcmlwdCZndDs8 L2Rpdj48ZGl2PsKgIMKgIMKgPHNwYW4+dmFyPC9zcGFuPjxzcGFuPiBkYXRhc2V0X2lkcyA9IDwv c3Bhbj48c3Bhbj4mIzM5OyR7Z2V0RGF0YXNldF9pZHMoKX0mIzM5Ozwvc3Bhbj48c3Bhbj47PC9z cGFuPjwvZGl2PjxkaXY+PHNwYW4+wqAgwqAgwqA8L3NwYW4+PHNwYW4+Y29uc29sZS5sb2c8L3Nw YW4+PHNwYW4+KDwvc3Bhbj48c3Bhbj5kYXRhc2V0X2lkczwvc3Bhbj48c3Bhbj4pPC9zcGFuPjxz cGFuPjs8L3NwYW4+PC9kaXY+CgoKCgoKCgoKCgoKCgoKCjxkaXY+wqAgwqAmbHQ7L3NjcmlwdCZn dDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAwMGZmIj5CdXQgdGhp cyBmYWlscyBhZ2FpbiBhbmQgZXJyb3IgYXBwZWFycyBpbiBnYWxheHkgYXMgJiMzOTtuYW1lIHRy YW5zIG5vdCBkZWZpbmVkJiMzOTsuPC9mb250PjwvZGl2PjxzcGFuPjxmb250IGNvbG9yPSIjODg4 ODg4Ij48ZGl2Pjxicj48L2Rpdj48ZGl2Pi1Bc21hPC9kaXY+PC9mb250Pjwvc3Bhbj48L2Rpdj48 ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9x dW90ZSI+T24gVHVlLCBBdWcgMjUsIDIwMTUgYXQgMToxMiBQTSwgQXNtYSBSaXlheiA8c3BhbiBk aXI9Imx0ciI+Jmx0OzxhIGhyZWY9Im1haWx0bzphc21hcml5YXoyM0BnbWFpbC5jb20iIHRhcmdl dD0iX2JsYW5rIj5hc21hcml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJy PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4 O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJs dHIiPkhlbGxvLDxkaXY+PGJyPjwvZGl2PjxkaXY+SSBoYXZlIHRyaWVkIHRvIGFjY2VzcyB1c2Vy JiMzOTtzIGN1cnJlbnQgaGlzdG9yeSBpbiB0aGUgJmx0O3NjcmlwdCZndDsgdGFncyBpbiBtYWtv IHRlbXBsYXRlOjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+Jmx0O3NjcmlwdCZndDs8L2Rpdj48 ZGl2PnZhciB1c2Vyc19jdXJyZW50X2hpc3RvcnkgPSAmIzM5OyR7dHJhbnMuaGlzdG9yeX0mIzM5 Ozs8YnI+PC9kaXY+PGRpdj5jb25zb2xlLmxvZyjCoHVzZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRh c2V0c8KgKTs8YnI+PC9kaXY+PGRpdj5mb3IgKHZhciBkYXRhc2V0IGluIHVzZXJzX2N1cnJlbnRf aGlzdG9yeS5kYXRhc2V0cykgezxicj48L2Rpdj48ZGl2PjxkaXY+wqAgwqAgY29uc29sZS5sb2co IGRhdGFzZXQgKTs8L2Rpdj48L2Rpdj48ZGl2Pn08YnI+PC9kaXY+PGRpdj4mbHQ7L3NjcmlwdCZn dDs8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAwMGZmIj5UaGUgZmly c3QgY29uc29sZS5sb2cgc2hvd3MgdGhhdCAmIzM5O3VzZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRh c2V0cyYjMzk7IGlzIHVuZGVmaW5lZC48L2ZvbnQ+PC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj5B Y2NvcmRpbmcgdGhpcyBwaWVjZSBvZiBjb2RlIGZyb20gQ2FybCwgYWNjZXNzaW5nIGRhdGFzZXQg aWRzIHNob3VsZCBiZSBkb25lIGluIHB5dGhvbiB3aXRoaW4gYSBtYWtvIHRlbXBsYXRlIHRhZ8Kg PC9kaXY+PGRpdj4mbHQ7JcKgPC9kaXY+PHNwYW4+PGRpdj48ZGl2PsKgdXNlcnNfY3VycmVudF9o aXN0b3J5ID0gdHJhbnMuaGlzdG9yeTwvZGl2PjxkaXY+wqAgZGF0YXNldF9pZHMgPSBbIHRyYW5z LnNlY3VyaXR5LmVuY29kZV9pZCggPGEgaHJlZj0iaHR0cDovL2QuaWQiIHRhcmdldD0iX2JsYW5r Ij5kLmlkPC9hPiApIGZvciBkIGluIMKgIMKgIMKgIMKgIMKgdXNlcnNfY3VycmVudF9oaXN0b3J5 LmRhdGFzZXRzIF08L2Rpdj48L2Rpdj48L3NwYW4+PGRpdj4lJmd0OzwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+PGZvbnQgY29sb3I9IiMwMDAwZmYiPmJ1dCBhbGwgdGhlIGV4YW1wbGVzIEkgaGF2 ZSBzZWVuIHNvIGZhciBoYXZlIHNvbWUgaHRtbCB0YWcgYXNzb2NpYXRlZCB3aXRoIHN1Y2ggY29k ZS4gSG93IGNhbiBJIGF2b2lkIHVzaW5nIHRoZXNlIHRhZ3MgYW5kIHN0aWxsIHVzZSBweXRob24g YWxvbmU/PC9mb250PjwvZGl2PjxzcGFuPjxmb250IGNvbG9yPSIjODg4ODg4Ij48ZGl2Pjxicj48 L2Rpdj48ZGl2Pi1Bc21hPC9kaXY+PGRpdj48YnI+PC9kaXY+PGRpdj48YnI+PC9kaXY+PC9mb250 Pjwvc3Bhbj48L2Rpdj48ZGl2PjxkaXY+PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2 IGNsYXNzPSJnbWFpbF9xdW90ZSI+T24gRnJpLCBBdWcgMjEsIDIwMTUgYXQgMTE6NDEgQU0sIENh cmwgRWJlcmhhcmQgPHNwYW4gZGlyPSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86Y2FybGZlYmVy aGFyZEBnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5jYXJsZmViZXJoYXJkQGdtYWlsLmNvbTwv YT4mZ3Q7PC9zcGFuPiB3cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBz dHlsZT0ibWFyZ2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGlu Zy1sZWZ0OjFleCI+PGRpdiBkaXI9Imx0ciI+QXMgZmFyIGFzIEkga25vdywgaXQmIzM5O3MgYmVz dCB0byB3cml0ZSB0b29sIHdyYXBwZXJzIGFzIGlmIHRoZXkgd2VyZSBtZWFudCB0byBiZSBjYWxs ZWQgb3V0c2lkZSBvZiBHYWxheHkuIEluIG90aGVyIHdvcmRzLCBpdCB3b3VsZCBub3QgYmUgYmVz dCB0byB0cnkgYW5kIGdldCBHYWxheHkgZGF0YXNldCBpZHMgd2l0aGluIHRoZSB0b29sIGNvZGUu PGRpdj48YnI+PC9kaXY+PGRpdj5JZiB3ZSB6b29tIG91dCBvbiB0aGUgcHJvYmxlbSBhbmQgdGFr ZSBhIGhpZ2hlciB2aWV3LCBpcyB0aGUgSlNPTiBmaWxlIHByaW1hcnkgdXNlZCB0byBsYXVuY2gg dGhlIHZpc3VhbGl6YXRpb24gb3IgZG9lcyBpdCBoYXZlIGFub3RoZXIgdXNlIGFzIHdlbGw/wqA8 L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkNhbi9pcyB0aGUgSlNPTiBwYXNzZWQgdG8gSUdWIGRp cmVjdGx5IGluIGphdmFzY3JpcHQ/IG9yIGRvZXMgaXQgbmVlZCB0byBiZSByZWFkIGZyb20gdGhl IGZpbGUgc2VwYXJhdGVseSBieSBJR1YgYW5kIGluZGVwZW5kZW50IGZyb20gdGhlIHZpc3VhbGl6 YXRpb24gbWFrbyBhbmQgaXRzIGFzc29jaWF0ZWQgamF2YXNjcmlwdD/CoDwvZGl2PjxkaXY+PGJy PjwvZGl2PjxkaXY+SWYgdGhlIEpTT04gZGF0YSBpcyBvbmx5IGZvciB0aGUgdmlzdWFsaXphdGlv biwgZG9lc24mIzM5O3QgbmVlZCB0byBiZSAxMDAlIGNvcnJlY3QgaW4gdGhlIGZpbGUsIGFuZCBj YW4gYmUgcGFzc2VkIHdpdGhpbiBqYXZhc2NyaXB0LCB5b3UgY2FuIGFsdGVyIHRoZSBKU09OIGRh dGEgZGlyZWN0bHkgaW4gdGhlIHZpc3VhbGl6YXRpb24gbWFrby9qcyBieSBkZWNvcmF0aW5nIHdp dGggdGhlIGJhbSBpZHMgYmVmb3JlIHBhc3NpbmcgaXQgdG8gSUdWLiBJbiB0aGF0IGNhc2UsIHRo ZSBwcmV2aW91cyBjb2RlIChvciBhIGNsZWFuZXIgdmVyc2lvbiBvZiBpdCkgd2lsbCBiZWdpbiB0 byBnZXQgeW91IHRoZXJlLjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlVuZm9ydHVuYXRl bHksIHRoZSBwcmV2aW91cyBjb2RlIHNob3VsZCB3b3JrIGluIHRoZSB2aXN1YWxpemF0aW9uIG1h a28gb25seS4gKFdpdGggdGhlIGNvcnJlY3Rpb246PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25v c3BhY2UsIG1vbm9zcGFjZSI+ZnJvbSBnYWxheHkgaW1wb3J0IG1vZGVsPC9mb250PjwvZGl2Pjxk aXY+aW5zdGVhZCBvZjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2Ui PmltcG9ydCBtb2RlbDwvZm9udD48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSB0cmFucyBp cyBhbiBvYmplY3QgZGVzY3JpYmluZyB0aGUgY3VycmVudCBXZWJUcmFuc2FjdGlvbiAocmVxdWVz dC9yZXNwb25zZSkuIEl0IGFsbG93cyBhY2Nlc3MgdG8gYSBzcWxhbGNoZW15IChzYSkgZGF0YWJh c2Ugc2Vzc2lvbjogdHJhbnMuc2Ffc2Vzc2lvbjwvZGl2PjwvZGl2PjxkaXY+PGRpdj48ZGl2IGNs YXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBGcmksIEF1 ZyAyMSwgMjAxNSBhdCAxMToyMyBBTSwgQXNtYSBSaXlheiA8c3BhbiBkaXI9Imx0ciI+Jmx0Ozxh IGhyZWY9Im1haWx0bzphc21hcml5YXoyM0BnbWFpbC5jb20iIHRhcmdldD0iX2JsYW5rIj5hc21h cml5YXoyM0BnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNs YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFw eCAjY2NjIHNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPjxkaXY+SGkgQ2Fy bCw8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PlRoZSB2aXN1YWxpemF0aW9uIGNvbWVzIGludG8g cGxheSBhZnRlciBhIGxhYiBpbXBsZW1lbnRlZCB0b29sIGluIGdhbGF4eSBpcyByYW47IEkgYW0g bm90IHVzaW5nIGdhbGF4eSYjMzk7cyB3b3JrZmxvdy4gSXMgdHJhY2luZyBiYWNrIGlkcyBzdGls bCBwb3NzaWJsZSBpbiB0aGlzIGNhc2Ugd2l0aCB0aGUgdGVzdCBjYXNlIHlvdSB3cm90ZSBlYXJs aWVyPzwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+QWxzbyBJIGNvdWxkbiYjMzk7dCBmaWd1cmUg b3V0IHdoYXQgJnF1b3Q7dHJhbnMmcXVvdDsgcmVmZXJzIHRvIGluIHlvdXIgcHJldmlvdXMgbWVz c2FnZS7CoDwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91LDwvZGl2PjxkaXY+QXNt YTwvZGl2PjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYgY2xhc3M9 ImdtYWlsX3F1b3RlIj5PbiBUaHUsIEF1ZyAyMCwgMjAxNSBhdCAzOjAzIFBNLCBBc21hIFJpeWF6 IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNv bSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3 cm90ZTo8YnI+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjAg MCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFleCI+PGRp diBkaXI9Imx0ciI+PGJyPjxkaXYgY2xhc3M9ImdtYWlsX3F1b3RlIj48c3Bhbj4tLS0tLS0tLS0t IEZvcndhcmRlZCBtZXNzYWdlIC0tLS0tLS0tLS08YnI+RnJvbTogPGIgY2xhc3M9ImdtYWlsX3Nl bmRlcm5hbWUiPkNhcmwgRWJlcmhhcmQ8L2I+IDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0i bWFpbHRvOmNhcmxmZWJlcmhhcmRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+Y2FybGZlYmVy aGFyZEBnbWFpbC5jb208L2E+Jmd0Ozwvc3Bhbj48YnI+RGF0ZTogVGh1LCBBdWcgMjAsIDIwMTUg YXQgMjo0NiBQTTxicj5TdWJqZWN0OiBSZTogW2dhbGF4eS1kZXZdIEdldCBkYXRhc2V0L0FQSSBp ZHMgZm9yIGEgZGF0YXNldDxicj5UbzogQXNtYSBSaXlheiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFz bWFyaXlhejIzQGdtYWlsLmNvbSIgdGFyZ2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNv bTwvYT4mZ3Q7PGJyPkNjOiBnYWxheHktZGV2ICZsdDs8YSBocmVmPSJtYWlsdG86Z2FsYXh5LWRl dkBsaXN0cy5nYWxheHlwcm9qZWN0Lm9yZyIgdGFyZ2V0PSJfYmxhbmsiPmdhbGF4eS1kZXZAbGlz dHMuZ2FsYXh5cHJvamVjdC5vcmc8L2E+Jmd0Ozxicj48YnI+PGJyPjwvc3Bhbj48ZGl2IGRpcj0i bHRyIj48c3Bhbj5JZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB0aGlzIGJlZ2lucyB0byBzb3Vu ZCBsZXNzIGxpa2Ugc29tZXRoaW5nIHRoZSB2aXN1YWxpemF0aW9uIGxldmVsIGNhbiBkbyBhbmQg bW9yZSBzb21ldGhpbmcgdGhhdCBuZWVkcyB0byBiZSBoYW5kbGVkIGF0IHlvdXIgdG9vbCBsZXZl bC48ZGl2Pjxicj48L2Rpdj48ZGl2PkxldCBtZSByZXBlYXQgYmFjayB3aGF0IEkgdW5kZXJzdGFu ZCB0byBiZSB0aGUgcHJvY2Vzczo8L2Rpdj48ZGl2PjEuIFlvdXIgcGlwZWxpbmUgaXMgYWN0aXZh dGVkIGJ5IHRoZSB1c2VyIGFuZCBzb21lIGluaXRpYWwgc3RlcCBpbiB0aGUgcGlwZWxpbmUgY3Jl YXRlcyB0aGUgSlNPTiBmaWxlIHRoYXQgd2lsbCBjb25maWd1cmUgeW91ciB2aXN1YWxpemF0aW9u PC9kaXY+PGRpdj4yLiBTb21lIGluZGV0ZXJtaW5hdGUgbnVtYmVyIG9mIGJhbSBmaWxlcyBhcmUg Y3JlYXRlZDwvZGl2PjxkaXY+My4gVGhlIHBpcGVsaW5lIGZpbmlzaGVzIGFuZCBhdCB0aGlzIHBv aW50IHRoZSBlbmNvZGVkIGlkcyBvZiBhbGwgdGhlIGJhbSBmaWxlcyBjcmVhdGVkIGJ5IHRoZSBw aXBlbGluZSBzaG91bGQgYmUgdXNlZCBpbiB1cmxzIGFkZGVkIHRvIHRoZSBKU09OIGZpbGUgZnJv bSBzdGVwIDE8L2Rpdj48L3NwYW4+PGRpdj40LiBUaGUgdXNlciB0aGVuIGNsaWNrcyBvbiBvbmUg b2YgdGhlIG91dHB1dHMgKHRoZSBKU09OIGZpbGU/IFllcyApIGZyb20gdGhlIHBpcGVsaW5lIHRv IGxhdW5jaCB0aGUgdmlzdWFsaXphdGlvbiBhbmQgdGhlIEpTT04gZmlsZSBpcyByZWFkPC9kaXY+ PHNwYW4+PGRpdj48YnI+PC9kaXY+PGRpdj5EbyBJIGhhdmUgdGhhdCByaWdodD8gV2hlbiB5b3Ug c2F5IHBpcGVsaW5lIGRvZXMgdGhhdCBtZWFuIGEgR2FsYXh5IHdvcmtmbG93Pzxicj48L2Rpdj48 L3NwYW4+PGRpdj4tLS0mZ3Q7IFllcywgdGhpcyBpcyBleGFjdGx5IHdoYXQgSSB3YW50IHRvIGRv LiBObywgbm90IGEgR2FsYXh5IHdvcmtmbG93LCBidXQgYSBwaXBlbGluZSB3cml0dGVuIGluIHRo ZSBsYWIgd2hpY2ggaXMgdGhlbiBjb252ZXJ0ZWQgdG8gYSBnYWxheHkgdG9vbC4gSXMgJiMzOTto ZGEmIzM5OyBhdmFpbGFibGUgYXQgdGhlIHRvb2wgbGV2ZWwgYXMgd2VsbD8gSSBoYXZlIHJlYWQg dGhyb3VnaCB0aGUgQmlvYmxlbmQgQVBJIGJ1dCBjb3VsZG4mIzM5O3QgZmlndXJlIG91dCBhIHdh eSB0byBxdWVyeSBmb3Igb25seSB0aG9zZSBkYXRhc2V0cyB0aGF0IGJlaW5nIHdvcmtlZCBvbiBi eSBnYWxheHkgaW4gY3VycmVudCBoaXN0b3J5Ljxicj48L2Rpdj48c3Bhbj48ZGl2Pjxicj48L2Rp dj48ZGl2PklmIHNvLCB5b3UgY2FuIGFjY2VzcyB0aGUgd29ya2Zsb3cgdXNpbmcgdGhlIE9STSBi eSB0cmFjaW5nIHVwIGZyb20gdGhlIGRhdGFzZXQgdGhhdCBpbnZva2VkIHRoZSB2aXN1YWxpemF0 aW9uIGFuZCB0aGVuIGJhY2sgZG93biB0byB0aGUgYmFtIGZpbGVzIHRoYXQgd2VyZSBjcmVhdGVk IGluIHRoZSB3b3JrZmxvdyBzdGVwczo8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxmb250IGZh Y2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4mbHQ7JTwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGZh Y2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj4jIGdldCB0aGUgYmFtIGRhdGFzZXRzIGNyZWF0ZWQg YnkgdGhlIHdvcmtmbG93IHRoYXQgY3JlYXRlZCAmIzM5O2hkYSYjMzk7PC9mb250PjwvZGl2Pjxk aXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPiMgd2hlcmUgJiMzOTtoZGEmIzM5 OyBpcyB0aGUgZGF0YXNldCB0aGUgdmlzdWFsaXphdGlvbiBsYXVuY2hlZCBmcm9tPC9mb250Pjwv ZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPmltcG9ydCBtb2RlbDwv Zm9udD48L2Rpdj48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj53ID0gdHJh bnMuc2Ffc2Vzc2lvbi5xdWVyeSggbW9kZWwuV29ya2Zsb3dJbnZvY2F0aW9uU3RlcCApPC9mb250 PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3NwYWNlLCBtb25vc3BhY2UiPsKgIMKgIC5maWx0 ZXIoIFdvcmtmbG93SW52b2NhdGlvblN0ZXAuam9iID09IGhkYS5jcmVhdGluZ19qb2IgKS5vbmUo KS53b3JrZmxvd19pbnZvY2F0aW9uPC9mb250PjwvZGl2PjxkaXY+PGZvbnQgZmFjZT0ibW9ub3Nw YWNlLCBtb25vc3BhY2UiPmlkcyA9IFsgPGEgaHJlZj0iaHR0cDovL2QuZGF0YXNldC5pZCIgdGFy Z2V0PSJfYmxhbmsiPmQuZGF0YXNldC5pZDwvYT4gZm9yIGQgaW4gcy5qb2Iub3V0cHV0X2RhdGFz ZXRzIGlmIGQuZGF0YXNldC5leHQgPT0gJiMzOTtiYW0mIzM5OyBdIGZvciBzIGluIHcuc3RlcHMg aWYgcy5qb2IgXTxicj48L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1v bm9zcGFjZSI+dXJscyA9IFsgLi4uIF08L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBmYWNlPSJtb25v c3BhY2UsIG1vbm9zcGFjZSI+JSZndDs8YnI+PC9mb250PjwvZGl2PjxkaXY+PGJyPjwvZGl2Pjxk aXY+KFRoZSBhYm92ZSBpcyByZWFsbHkgaG9ycmlibGUgY29kZSwgYnV0IHNrZXRjaGVzIG9uZSB3 YXkgeW91IGNvdWxkIGdldCB0aGUgaWRzIGZyb20gdGhlIHZpc3VhbGl6YXRpb24gbWFrbyk8L2Rp dj48ZGl2Pjxicj48L2Rpdj48ZGl2PklmIGl0JiMzOTtzIG5vdCBhIHdvcmtmbG93IGFuZCBhIHBp cGVsaW5lIGJlaW5nIHJ1biBmcm9tIHdpdGhpbiBhIEdhbGF4eSB0b29sIHdyYXBwZXIsIHRoZW4g dGhlIHRvb2wgd3JhcHBlciBjb2RlIHNob3VsZCBiZSB3cml0aW5nIHRoZSBpZHMgdG8gdGhlIEpT T04gZmlsZS4gSXMgdGhhdCB0aGUgY2FzZSBpbnN0ZWFkPzwvZGl2Pjwvc3Bhbj48ZGl2Pi0tJmd0 OyBZZXMsIHRvb2wgd3JhcHBlciBjb2RlIGlzIHdoZXJlIHRoZSBJRHMgbmVlZCB0byBpbnNlcnRl ZC4gV2lsbCB0cnkgdXNpbmcgJnF1b3Q7bW9kZWwmcXVvdDsgYW5kIHNlZSB3aGVyZSBJIGdldCB3 aXRoIGl0LjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+LVRoYW5rIHlvdSw8L2Rpdj48ZGl2PkFz bWE8L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48L2Rpdj48ZGl2PjxkaXY+PGRp dj48ZGl2PjxkaXYgY2xhc3M9ImdtYWlsX2V4dHJhIj48YnI+PGRpdiBjbGFzcz0iZ21haWxfcXVv dGUiPk9uIFRodSwgQXVnIDIwLCAyMDE1IGF0IDE6MjggUE0sIEFzbWEgUml5YXogPHNwYW4gZGly PSJsdHIiPiZsdDs8YSBocmVmPSJtYWlsdG86YXNtYXJpeWF6MjNAZ21haWwuY29tIiB0YXJnZXQ9 Il9ibGFuayI+YXNtYXJpeWF6MjNAZ21haWwuY29tPC9hPiZndDs8L3NwYW4+IHdyb3RlOjxicj48 YmxvY2txdW90ZSBjbGFzcz0iZ21haWxfcXVvdGUiIHN0eWxlPSJtYXJnaW46MCAwIDAgLjhleDti b3JkZXItbGVmdDoxcHggI2NjYyBzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRy Ij5IaSBDYXJsLDxkaXY+PGJyPjwvZGl2PjxkaXY+VGhhbmsgeW91IGZvciB5b3VyIHJlcGx5LiBU aGlzIGRlZmluaXRlbHkgaGVscHMgbWUgZ2V0IHN0YXJ0ZWQsIG15IHF1ZXN0aW9uIGJlaW5nOjwv ZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAx OTA3MzQ5cHgiPnRyYW5zLmhpc3Rvcnkgd2lsbCBnZXQgYWxsIHRoZSBkYXRhc2V0IGlkcyBpbiB1 c2VycyBoaXN0b3J5IHJlZ2FyZGxlc3Mgb2Ygd2hpY2ggcnVuIHRoZSBkYXRhc2V0cyBhcmUgYXNz b2NpYXRlZCB3aXRoLiBIZW5jZSBpZiB0aGUgdXNlciBoYXMgbXVsdGlwbGUgYmFtcyBsb2FkZWQg aW4gaGlzdG9yeSB0aGVyZSB3aWxsIGJlIG5vIHdheSBvZiBkaXN0aW5ndWlzaGluZyB0aGVtLjwv c3Bhbj48L2Rpdj48ZGl2Pjxicj48L2Rpdj48ZGl2PkhlcmUgaXMgYSByb3VnaCBpZGVhIG9mIHdo YXQgSSBhbSBlbnZpc2lvbmluZyBteSBwaXBlbGluZSB0byBkbzo8L2Rpdj48ZGl2Pjxicj48L2Rp dj48ZGl2PkdhbGF4eSBwaXBlbGluZSBydW5zIC0mZ3Q7IHdoaWxlIGl0IGlzIHJ1bm5pbmcsIGRh dGFzZXQgaWRzIHRoYXQgYXJlIGdlbmVyYXRlZCBzaG91bGQgYmUgcmV0cmlldmVkIGZvciBlYWNo IG91dHB1dCAoaW4gbXkgY2FzZSBiYW1zIGFuZCBKU09OIGZpbGUpIC0mZ3Q7IHdoZW4gbWFpbiBw aXBlbGluZSBmaW5pc2hlcywgaWRzIGFyZSB1cGRhdGVkIHdpdGhpbiB0aGUgSlNPTiBmaWxlIC0m Z3Q7IGFsbCB0aGUgb3V0cHV0cyBhcmUgZmVkIHRvIHVzZXJzIGhpc3RvcnkuPC9kaXY+PGRpdj48 YnI+PC9kaXY+PGRpdj50aGlzIHdheSB0aGVyZSB3aWxsIGJlIG5vIGFtYmlndWl0eSBhcyB0byB3 aGljaCBiYW1zIGFyZSBiZWluZyBhY2Nlc3NlZCBmb3Igdml6LiBJcyB0aGlzIGludGVybWVkaWF0 ZSB3YXkgb2YgZ2V0dGluZyBkYXRhc2V0IGlkcyBwb3NzaWJsZT/CoDwvZGl2PjxkaXY+PGJyPjwv ZGl2PjxkaXY+VGhhbmsgeW91PC9kaXY+PHNwYW4+PGZvbnQgY29sb3I9IiM4ODg4ODgiPjxkaXY+ LUFzbWE8L2Rpdj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4 Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXY+PGJyPjwvZGl2PjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQt c2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxicj48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGJyPjwvc3Bhbj48L2Rpdj48L2ZvbnQ+ PC9zcGFuPjwvZGl2PjxkaXY+PGRpdj48ZGl2IGNsYXNzPSJnbWFpbF9leHRyYSI+PGJyPjxkaXYg Y2xhc3M9ImdtYWlsX3F1b3RlIj5PbiBXZWQsIEF1ZyAxOSwgMjAxNSBhdCA0OjI3IFBNLCBDYXJs IEViZXJoYXJkIDxzcGFuIGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmNhcmxmZWJlcmhh cmRAZ21haWwuY29tIiB0YXJnZXQ9Il9ibGFuayI+Y2FybGZlYmVyaGFyZEBnbWFpbC5jb208L2E+ Jmd0Ozwvc3Bhbj4gd3JvdGU6PGJyPjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5 bGU9Im1hcmdpbjowIDAgMCAuOGV4O2JvcmRlci1sZWZ0OjFweCAjY2NjIHNvbGlkO3BhZGRpbmct bGVmdDoxZXgiPjxkaXYgZGlyPSJsdHIiPkhpLCBBc21hPGRpdj48YnI+PC9kaXY+PGRpdj5JZiB5 b3UmIzM5O3JlIGxvb2tpbmcgdGhyb3VnaCBkYXRhc2V0cyB2aWEgdGhlIG1ha28gcGFydCBvZiB5 b3VyIHZpc3VhbGl6YXRpb24sIHlvdSBjYW4gdXNlOjwvZGl2PjxkaXY+PGJsb2NrcXVvdGUgY2xh c3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1s ZWZ0LXdpZHRoOjFweDtib3JkZXItbGVmdC1jb2xvcjpyZ2IoMjA0LDIwNCwyMDQpO2JvcmRlci1s ZWZ0LXN0eWxlOnNvbGlkO3BhZGRpbmctbGVmdDoxZXgiPjxmb250IGZhY2U9Im1vbm9zcGFjZSwg bW9ub3NwYWNlIj51c2Vyc19jdXJyZW50X2hpc3RvcnkgPSB0cmFucy5oaXN0b3J5PGJyPjwvZm9u dD48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+ZGF0YXNldF9pZHMgPSBbIHRyYW5z LnNlY3VyaXR5LmVuY29kZV9pZCggPGEgaHJlZj0iaHR0cDovL2QuaWQiIHRhcmdldD0iX2JsYW5r Ij5kLmlkPC9hPiApIGZvciBkIGluIHVzZXJzX2N1cnJlbnRfaGlzdG9yeS5kYXRhc2V0cyBdPC9m b250PjwvYmxvY2txdW90ZT48L2Rpdj4ob3Igc2ltaWxhcikgdG8gYnVpbGQgdGhlIGlkcyBuZWVk ZWQgZm9yIHRoZSB1cmxzLjxkaXY+PGJyPjxkaXY+SWYgeW91IHdhbnQgdG8gZ2V0IHRoZSBpbmZv IHZpYSBqYXZhc2NyaXB0LCB5b3UgY2FuIHVzZSBzb21ldGhpbmcgbGlrZSB0aGUgcHl0aG9uIGFi b3ZlIGFuZCB0ZW1wbGF0ZSBpbnRvIGEganMgdmFyOjwvZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJn bWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXItbGVmdC13 aWR0aDoxcHg7Ym9yZGVyLWxlZnQtY29sb3I6cmdiKDIwNCwyMDQsMjA0KTtib3JkZXItbGVmdC1z dHlsZTpzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9z cGFjZSI+dmFyIHVybCA9wqAmcXVvdDsvZGF0YXNldHMvJHsgZG5hX2RhdGFzZXRfaWQgfS9kaXNw bGF5P3RvX2V4dD1iYW0mcXVvdDs8L2ZvbnQ+PC9ibG9ja3F1b3RlPjxkaXY+PGJyPjwvZGl2Pjxk aXY+Li4ub3IgZW5jb2RlIGFuZCB0ZW1wbGF0ZSB0aGUgaGlzdG9yeSBpZCBhbmQgdXNlIGFqYXgg YW5kIHRoZSBhcGkgYWZ0ZXIgdGhlIHBhZ2UgaXMgc2VydmVkOjwvZGl2PjxibG9ja3F1b3RlIGNs YXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4IDBweCAwLjhleDtib3JkZXIt bGVmdC13aWR0aDoxcHg7Ym9yZGVyLWxlZnQtY29sb3I6cmdiKDIwNCwyMDQsMjA0KTtib3JkZXIt bGVmdC1zdHlsZTpzb2xpZDtwYWRkaW5nLWxlZnQ6MWV4Ij48Zm9udCBmYWNlPSJtb25vc3BhY2Us IG1vbm9zcGFjZSI+dmFyIGhpc3RvcnlJZCA9ICZxdW90OyR7IHRyYW5zLnNlY3VyaXR5LmVuY29k ZV9pZCjCoDxhIGhyZWY9Imh0dHA6Ly90cmFucy5oaXN0b3J5LmlkIiB0YXJnZXQ9Il9ibGFuayI+ dHJhbnMuaGlzdG9yeS5pZDwvYT7CoCkgfSZxdW90Ozs8YnI+PC9mb250Pjxmb250IGZhY2U9Im1v bm9zcGFjZSwgbW9ub3NwYWNlIj5qUXVlcnkuYWpheCggZ2FsYXh5X2NvbmZpZy5yb290ICsgJiMz OTthcGkvaGlzdG9yaWVzLyYjMzk7ICsgaGlzdG9yeUlkICsgJiMzOTsvY29udGVudHMmIzM5OyAp PGJyPjwvZm9udD48Zm9udCBmYWNlPSJtb25vc3BhY2UsIG1vbm9zcGFjZSI+wqAgwqAgLmRvbmUo IGZ1bmN0aW9uKCByZXNwb25zZSApeyAvKiB3aWxsIGNvbnRhaW4gc3VtbWFyeSBqc29uIGZvciBl YWNoIGRhdGFzZXQgaW5jbHVkaW5nIGVuY29kZWQgaWRzIGZvciBlYWNoICovIH0pPC9mb250Pjwv YmxvY2txdW90ZT48ZGl2Pjxmb250IGZhY2U9Im1vbm9zcGFjZSwgbW9ub3NwYWNlIj48YnI+PC9m b250PjwvZGl2PkxldCBtZSBrbm93IGlmIHRoYXQmIzM5O3Mgbm90IHdoYXQgeW91IHdlcmUgbG9v a2luZyBmb3Igb3IgaWYgeW91IGZpbmQgYW55IHByb2JsZW1zIHdpdGggaXQuPC9kaXY+PC9kaXY+ PGRpdiBjbGFzcz0iZ21haWxfZXh0cmEiPjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRp dj48ZGl2Pk9uIFdlZCwgQXVnIDE5LCAyMDE1IGF0IDExOjAxIEFNLCBBc21hIFJpeWF6IDxzcGFu IGRpcj0ibHRyIj4mbHQ7PGEgaHJlZj0ibWFpbHRvOmFzbWFyaXlhejIzQGdtYWlsLmNvbSIgdGFy Z2V0PSJfYmxhbmsiPmFzbWFyaXlhejIzQGdtYWlsLmNvbTwvYT4mZ3Q7PC9zcGFuPiB3cm90ZTo8 YnI+PC9kaXY+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1b3RlIiBzdHlsZT0ibWFy Z2luOjAgMCAwIC44ZXg7Ym9yZGVyLWxlZnQ6MXB4ICNjY2Mgc29saWQ7cGFkZGluZy1sZWZ0OjFl eCI+PGRpdj48ZGl2PjxkaXYgZGlyPSJsdHIiPjxkaXY+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox Mi44MDAwMDAxOTA3MzQ5cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5IZWxsbyBHYWxheHktZGV2 LDwvZm9udD48L3NwYW4+PC9kaXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAw MDE5MDczNDlweCI+PGZvbnQgY29sb3I9IiMwMDAwMDAiPjxicj48L2ZvbnQ+PC9zcGFuPjwvZGl2 PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0i IzAwMDAwMCI+SSB0aGFuayB5b3Ugc28gbXVjaCBmb3IgYWxsIHRoZSBoZWxwIHlvdSBoYXZlIGdp dmVuIG1lLsKgPC9mb250Pjwvc3Bhbj48ZGl2PjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTIuODAw MDAwMTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0iIzAwMDAwMCI+PGJyPjwvZm9udD48L3NwYW4+PC9k aXY+PGRpdj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGZvbnQg Y29sb3I9IiMwMDAwMDAiPkkgaGF2ZSBhIHF1ZXN0aW9uIGFib3V0IGRhdGEgc2V0IGlkcyBpbiBn YWxheHkuIEFzIGEgYmFja2dyb3VuZCwgSSBhbSBydW5uaW5nIG15IG93biBnYWxheHkgaW5zdGFu Y2Ugb24gYSBzZXJ2ZXIuwqA8L2ZvbnQ+PC9zcGFuPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoMCww LDApO2ZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPkEgcGlwZWxpbmUgaW1wbGVtZW50ZWQg aW4gdGhlIGxhYiBwcm9kdWNlcyB0aGUgZm9sbG93aW5nIGZpbGVzIGluIHRoZSBoaXN0b3J5Ojwv c3Bhbj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PGRpdj48Zm9u dCBjb2xvcj0iIzAwMDAwMCI+PGJyPjwvZm9udD48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMDAw MDAwIj4xKSAyIEJBTSBmaWxlczxicj48L2ZvbnQ+PC9kaXY+PGRpdj48Zm9udCBjb2xvcj0iIzAw MDAwMCI+MikgQSBKU09OIGZpbGU8L2ZvbnQ+PC9kaXY+PGRpdj48YnI+PC9kaXY+PC9zcGFuPjxk aXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xv cjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5OiYjMzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2 ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0 MzAyMDYyOTg4cHgiPk15IGdvYWwgaXMgdG8gdXNlIHRoaXMgSlNPTiBmaWxlwqA8L3NwYW4+PHNw YW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6JiMzOTtIZWx2ZXRpY2Eg TmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xpbmUt aGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+dG8gcGFzcyB0aGUgcGF0aC9VUkwgb2YgYmFtIGZp bGVzIGludG8gYSBjdXN0b20gSlMgd2Ugd3JvdGUgZm9yIHZpc3VhbGl6YXRpb24gcHVycG9zZS48 L3NwYW4+PGJyPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgi PjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQtZmFtaWx5OiYjMzk7SGVsdmV0 aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjtmb250LXNpemU6MTNweDts aW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjxicj48L3NwYW4+PC9kaXY+PGRpdiBzdHls ZT0iZm9udC1zaXplOjEyLjgwMDAwMDE5MDczNDlweCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox Mi44MDAwMDAxOTA3MzQ5cHgiPlRoaXMgSlNPTiBmaWxlIGNvbnRhaW5zIGFtb25nIG1hbnkgb3Ro ZXIgZGV0YWlscyB0aGUgcGF0aHMvVVJMcyB0byB0aGUgYWJvdmUgYmFtIGZpbGVzLiBJIGFtIHVz aW5nIEpTT04gZmlsZXR5cGVzIHRvIHNlbmQgZGF0YSB0byB0aGUgSlMgdmlzdWFsaXphdGlvbiB3 aXRoaW4gR2FsYXh5LiBUbyBkbyB0aGlzLCBJIGhhdmUgbXkgb3duIEpTIHdoaWNoIGxvYWRzIGEg QkFNIGZpbGUgZnJvbSBVUkwgcHJvdmlkZWQgaW50byBhbiBJR1YuanMgdHJhY2suwqA8L3NwYW4+ PHNwYW4gc3R5bGU9ImNvbG9yOnJnYig1MSw1MSw1MSk7Zm9udC1mYW1pbHk6JiMzOTtIZWx2ZXRp Y2EgTmV1ZSYjMzk7LEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmO2ZvbnQtc2l6ZToxM3B4O2xp bmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+SUdWLmpzLCB3aGljaCBpcyByZXNwb25zaWJs ZSBmb3IgbWFraW5nIHRoZSB0cmFja3MsIGV4cGVjdHMgYSB2YWxpZCBVUkwgd2hpY2ggaXMgdXBk YXRlZCBpbiB0aGUgSlNPTiBmaWxlIGluIHRoaXMgbWFubmVyOjwvc3Bhbj48YnI+PC9kaXY+PGRp dj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48c3BhbiBzdHlsZT0i Y29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5O0hlbHZldGljYSBOZXVlJiMzOTss SGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGluZS1oZWlnaHQ6MTgu NTcxNDMwMjA2Mjk4OHB4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZTox Mi44MDAwMDAxOTA3MzQ5cHgiPjxzcGFuIHN0eWxlPSJjb2xvcjpyZ2IoNTEsNTEsNTEpO2ZvbnQt ZmFtaWx5OiYjMzk7SGVsdmV0aWNhIE5ldWUmIzM5OyxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJp Zjtmb250LXNpemU6MTNweDtsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPjEpIEV4dHJh Y3QgdGhlIEFQSV9rZXkgYW5kIGhpc3RvcnkgaWQgZnJvbSBhIGxvYWRlZCBCQU0gZmlsZTwvc3Bh bj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48c3BhbiBz dHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5O0hlbHZldGljYSBOZXVl JiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGluZS1oZWln aHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij4yKSBFZGl0IHRoZSBKU09OIGZpbGUgdG8gcmVmbGVjdCB0 aGUgQkFNIGZpbGUmIzM5O3MgZGF0YXNldCBpZCB0byBiZSBzb21ldGhpbmcgbGlrZSB0aGlzOjwv c3Bhbj48L2Rpdj48ZGl2IHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48c3Bh biBzdHlsZT0iY29sb3I6cmdiKDUxLDUxLDUxKTtmb250LWZhbWlseTomIzM5O0hlbHZldGljYSBO ZXVlJiMzOTssSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7Zm9udC1zaXplOjEzcHg7bGluZS1o ZWlnaHQ6MTguNTcxNDMwMjA2Mjk4OHB4Ij48YnI+PC9zcGFuPjwvZGl2PjxkaXYgc3R5bGU9ImZv bnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgiPjxwcmUgc3R5bGU9IndoaXRlLXNwYWNlOnByZS13 cmFwO2ZvbnQtZmFtaWx5Ok1lbmxvLE1vbmFjbyxDb25zb2xhcywmIzM5O0NvdXJpZXIgTmV3JiMz OTssbW9ub3NwYWNlO2ZvbnQtc2l6ZToxM3B4O3BhZGRpbmc6OS41cHg7bWFyZ2luLXRvcDowcHg7 bWFyZ2luLWJvdHRvbToxMHB4O2xpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweDtjb2xvcjpy Z2IoNTEsNTEsNTEpO3dvcmQtYnJlYWs6YnJlYWstYWxsO3dvcmQtd3JhcDpicmVhay13b3JkO2Jv cmRlcjoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtib3JkZXItcmFkaXVzOjRweDtvdmVyZmxv dzphdXRvO2JhY2tncm91bmQtY29sb3I6cmdiKDI0NSwyNDUsMjQ1KSI+ewogICZxdW90O0NMTC1I TF9waWxvdC5yMS5mYXN0cSZxdW90OzogewogICAgJnF1b3Q7RE5BJnF1b3Q7OiAmcXVvdDs8c3Bh biBzdHlsZT0iY29sb3I6cmdiKDAsMCwwKTtmb250LWZhbWlseTptb25vc3BhY2Usc2VyaWY7Zm9u dC1zaXplOjEwcHg7bGluZS1oZWlnaHQ6bm9ybWFsO2JhY2tncm91bmQtY29sb3I6cmdiKDI1NSwy NTUsMjU1KSI+L2RhdGFzZXRzLzM2ZGRiNzg4YTBmMTRlYjMvZGlzcGxheT90b19leHQ9YmFtPC9z cGFuPjxzcGFuIHN0eWxlPSJsaW5lLWhlaWdodDoxOC41NzE0MzAyMDYyOTg4cHgiPiZxdW90OywK ICAgIC4uLjwvc3Bhbj48L3ByZT48L2Rpdj48ZGl2Pjxmb250IGNvbG9yPSIjMzMzMzMzIiBmYWNl PSJIZWx2ZXRpY2EgTmV1ZSwgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiI+PHNwYW4gc3R5 bGU9ImxpbmUtaGVpZ2h0OjE4LjU3MTQzMDIwNjI5ODhweCI+VGhpcyB3b3JrcyBmaW5lIGlmIEkg a25vdyB0aGUgQVBJIEtleSBmb3IgYmFtIGZpbGVzLiBXaGVuIGEgcGlwZWxpbmUgZXhlY3V0ZXMg ZGF0YXNldCBpZHMgYXJlIGdlbmVyYXRlZCBmb3IgZWFjaCBvdXRwdXQuIEkgd2FudCB0byBhY2Nl c3MgYW5kIGluY2x1ZGUgdGhlc2UgaWRzIGluIHRoZSBKU09OIGZpbGUgYW5kIGxvYWQgdGhlIHVw ZGF0ZWQgSlNPTiBmaWxlIGludG8gdGhlIGhpc3Rvcnkgd2l0aCB0aGUgYmFtcy4gSXMgdGhlcmUg YSB3YXkgdG8gZ2V0IHRoZSBpZHMgZnJvbSB0aGUgaGlzdG9yeSBpbiB0aGlzIG1hbm5lcj88L3Nw YW4+PC9mb250PjwvZGl2PjxkaXYgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAxOTA3MzQ5cHgi PjxwIHN0eWxlPSJmb250LXNpemU6MTIuODAwMDAwMTkwNzM0OXB4Ij48Zm9udCBjb2xvcj0iIzAw MDAwMCI+VGhhbmsgeW91LDwvZm9udD48L3A+PHAgc3R5bGU9ImZvbnQtc2l6ZToxMi44MDAwMDAx OTA3MzQ5cHgiPjxmb250IGNvbG9yPSIjMDAwMDAwIj5Bc21hPC9mb250PjwvcD48L2Rpdj48L2Rp dj48L2Rpdj48L2Rpdj4KPGJyPjwvZGl2PjwvZGl2Pl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fPGJyPgpQbGVhc2Uga2VlcCBhbGwgcmVw bGllcyBvbiB0aGUgbGlzdCBieSB1c2luZyAmcXVvdDtyZXBseSBhbGwmcXVvdDs8YnI+CmluIHlv dXIgbWFpbCBjbGllbnQuwqAgVG8gbWFuYWdlIHlvdXIgc3Vic2NyaXB0aW9ucyB0byB0aGlzPGJy PgphbmQgb3RoZXIgR2FsYXh5IGxpc3RzLCBwbGVhc2UgdXNlIHRoZSBpbnRlcmZhY2UgYXQ6PGJy PgrCoCA8YSBocmVmPSJodHRwczovL2xpc3RzLmdhbGF4eXByb2plY3Qub3JnLyIgcmVsPSJub3Jl ZmVycmVyIiB0YXJnZXQ9Il9ibGFuayI+aHR0cHM6Ly9saXN0cy5nYWxheHlwcm9qZWN0Lm9yZy88 L2E+PGJyPgo8YnI+ClRvIHNlYXJjaCBHYWxheHkgbWFpbGluZyBsaXN0cyB1c2UgdGhlIHVuaWZp ZWQgc2VhcmNoIGF0Ojxicj4KwqAgPGEgaHJlZj0iaHR0cDovL2dhbGF4eXByb2plY3Qub3JnL3Nl YXJjaC9tYWlsaW5nbGlzdHMvIiByZWw9Im5vcmVmZXJyZXIiIHRhcmdldD0iX2JsYW5rIj5odHRw Oi8vZ2FsYXh5cHJvamVjdC5vcmcvc2VhcmNoL21haWxpbmdsaXN0cy88L2E+PGJyPjwvYmxvY2tx dW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvZGl2 PjwvZGl2PjwvYmxvY2txdW90ZT48L2Rpdj48YnI+PC9kaXY+CjwvZGl2PjwvZGl2PjwvZGl2Pjwv ZGl2PjwvZGl2Pjxicj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj48L2Rpdj48 L2Rpdj48L2Rpdj4KPC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9i bG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2 Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9k aXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9j a3F1b3RlPjwvZGl2Pjxicj48L2Rpdj4KPC9kaXY+PC9kaXY+PC9ibG9ja3F1b3RlPjwvZGl2Pjxi cj48L2Rpdj4K --===============5233725401802794785==--