From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: multipart/mixed; boundary="===============7533752928652773032==" MIME-Version: 1.0 From: Harris, James R Subject: Re: [SPDK] About per client QoS (IOPS rate limiting) Date: Thu, 12 Apr 2018 18:11:26 +0000 Message-ID: In-Reply-To: C4CE0E59D8C78F49A2AB85096897D2DB9E2703AD@fmsmsx116.amr.corp.intel.com List-ID: To: spdk@lists.01.org --===============7533752928652773032== Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable I agree that this should probably go into a new vbdev module. We do want t= o keep the existing pass-through module as the example which is as simple a= s possible. Then if we find we need other changes to support Gang=E2=80=99= s per-client use case, we don=E2=80=99t have to worry about further complic= ating the example. The question is then what to name it. I don=E2=80=99t think =E2=80=9Cqos= =E2=80=9D is the best name =E2=80=93 since this module isn=E2=80=99t actual= ly doing any QoS work =E2=80=93 it just enables per-client QoS. All of the= QoS work is done in the common bdev layer =E2=80=93 not a bdev module. Ma= ybe something along the lines of =E2=80=9Cshared_passthru=E2=80=9D? I don= =E2=80=99t particularly care for that name either =E2=80=93 if anyone has a= nother idea, please advise. This new module can also utilize the spdk_bdev_part API to significantly si= mplify the code. Paul purposely did not use spdk_bdev_part in the passthru= example because he wanted to explicitly show how everything should be impl= emented in the example bdev module itself. But for this module, since it= =E2=80=99s not an example module, we don=E2=80=99t have that same concern. -Jim From: SPDK on behalf of "Kariuki, John K" Reply-To: Storage Performance Development Kit Date: Thursday, April 12, 2018 at 10:01 AM To: Storage Performance Development Kit Subject: Re: [SPDK] About per client QoS (IOPS rate limiting) Gang/Paul Does this functionality belong in the passthru bdev or should it be impleme= nted in another vbdev called something like =E2=80=9Cqos=E2=80=9D? My under= standing of the passthru bdev is that it=E2=80=99s a template that anyone l= ooking to build a vbdev can use as a starting point. It has all the functio= ns needed to create an SPDK module stub out so that someone can pick it up,= make a copy and a few modifications and then they are off to the races imp= lementing their new virtual bdev From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Cao, Gang Sent: Tuesday, April 10, 2018 6:05 PM To: Storage Performance Development Kit Subject: Re: [SPDK] About per client QoS (IOPS rate limiting) Yes. It=E2=80=99s a good extension to couple with the vbdev and bdev to mee= t the client=E2=80=99s QoS goal. For a client, from my understanding, a =E2= =80=9Cdevice=E2=80=9D will always be linked through its own specific =E2=80= =9Cconnection=E2=80=9D. The per client (or the per connection) QoS can be a= lso achieved by the per =E2=80=9Cdevice=E2=80=9D. The other comment is that to move this QoS rate limiting from the client si= de to the target side. Client can has its own QoS for the connection before= submitting I/Os and with this work, it can also let the target side to do = the similar thing and may not need a QoS at client side. Thanks, Gang From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Luse, Paul E Sent: Tuesday, April 10, 2018 11:56 PM To: Storage Performance Development Kit > Subject: Re: [SPDK] About per client QoS (IOPS rate limiting) Hi Gang, This is pretty cool. So essentially the PT vbdev is just a per-client hook= for QoS? Thx Paul From: SPDK [mailto:spdk-bounces(a)lists.01.org] On Behalf Of Cao, Gang Sent: Monday, April 9, 2018 9:03 PM To: Storage Performance Development Kit > Subject: [SPDK] About per client QoS (IOPS rate limiting) Hi all, There has been some work done to have SPDK support the QoS per bdev which m= eans that each bdev has its assigned IOPS rate limiting. This QoS functiona= lity is below the storage protocols like NVMe-oF, iSCSI and so on. At the time of last PRC SPDK summit, there are some questions on the per cl= ient QoS (i.e., the NVMe-oF iniator / host) besides the per bdev QoS. Each = client like NVMe-oF initiator can see its own IOPS rate limiting not matter= whether the connected device is exclusive or shared at the target side. Based on Paul=E2=80=99s great stuff of the Passthru vbdev, I=E2=80=99ve upd= ated through below three patches to achieve the per client QoS. Each client= sees its own passthru vbdev and QoS assigned on this vbdev. These vbdev sh= ares the same bdev. Currently it only supports shareable and read only vbde= v on same bdev. https://review.gerrithub.io/#/c/406888/ vbdev: update and have a create= _passthru_disk function https://review.gerrithub.io/#/c/406891/ vbdev: add the construct_passth= ru_bdev RPC method https://review.gerrithub.io/#/c/406977/ vbdev: make the passthru vbdev = share the same underlying bdev The possible usage as following: [Take NVMe-oF target as example] 1. In the nvmf.conf file, # Configure the Passthru vbdev on same bdev like Malloc0 [Passthru] PT Malloc0 PT0 PT Malloc0 PT1 # The subsystem is configured with shareable bdev by Passthru vbdevs [Subsystem2] NQN nqn.2016-06.io.spdk:cnode2 Listen RDMA 192.168.2.21:4420 AllowAnyHost No Host nqn.2016-06.io.spdk:init SN SPDK00000000000002 Namespace PT0 >>>> This can be connected by one client Namespace PT1 >>>> This can be connected by another client # Assign different QoS IOPS limiting on Passthru vbdevs [QoS] Limit_IOPS PT0 20000 Limit_IOPS PT1 30000 2. Use RPC method to add the Passthru vbdev at runtime a. python ./scripts/rpc.py construct_passthru_bdev Malloc0 PT3 b. python ./scripts/rpc.py nvmf_subsystem_add_ns nqn.2016-06.io.spdk:cnode2= PT3 c. python ./scripts/rpc.py enable_bdev_qos PT3 20000 If there is any concern or comment, please feel free to let me know. Thanks, Gang --===============7533752928652773032== Content-Type: text/html MIME-Version: 1.0 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="attachment.html" PGh0bWwgeG1sbnM6bz0idXJuOnNjaGVtYXMtbWljcm9zb2Z0LWNvbTpvZmZpY2U6b2ZmaWNlIiB4 bWxuczp3PSJ1cm46c2NoZW1hcy1taWNyb3NvZnQtY29tOm9mZmljZTp3b3JkIiB4bWxuczptPSJo dHRwOi8vc2NoZW1hcy5taWNyb3NvZnQuY29tL29mZmljZS8yMDA0LzEyL29tbWwiIHhtbG5zPSJo dHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwIj4NCjxoZWFkPg0KPG1ldGEgaHR0cC1lcXVp dj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9dXRmLTgiPg0KPG1l dGEgbmFtZT0iVGl0bGUiIGNvbnRlbnQ9IiI+DQo8bWV0YSBuYW1lPSJLZXl3b3JkcyIgY29udGVu dD0iIj4NCjxtZXRhIG5hbWU9IkdlbmVyYXRvciIgY29udGVudD0iTWljcm9zb2Z0IFdvcmQgMTUg KGZpbHRlcmVkIG1lZGl1bSkiPg0KPHN0eWxlPjwhLS0NCi8qIEZvbnQgRGVmaW5pdGlvbnMgKi8N CkBmb250LWZhY2UNCgl7Zm9udC1mYW1pbHk6IkNhbWJyaWEgTWF0aCI7DQoJcGFub3NlLTE6MiA0 IDUgMyA1IDQgNiAzIDIgNDt9DQpAZm9udC1mYWNlDQoJe2ZvbnQtZmFtaWx5OkRlbmdYaWFuOw0K CXBhbm9zZS0xOjIgMSA2IDAgMyAxIDEgMSAxIDE7fQ0KQGZvbnQtZmFjZQ0KCXtmb250LWZhbWls eTpDYWxpYnJpOw0KCXBhbm9zZS0xOjIgMTUgNSAyIDIgMiA0IDMgMiA0O30NCi8qIFN0eWxlIERl ZmluaXRpb25zICovDQpwLk1zb05vcm1hbCwgbGkuTXNvTm9ybWFsLCBkaXYuTXNvTm9ybWFsDQoJ e21hcmdpbjowaW47DQoJbWFyZ2luLWJvdHRvbTouMDAwMXB0Ow0KCXRleHQtYWxpZ246anVzdGlm eTsNCglmb250LXNpemU6MTAuNXB0Ow0KCWZvbnQtZmFtaWx5OkNhbGlicmk7fQ0KYTpsaW5rLCBz cGFuLk1zb0h5cGVybGluaw0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6IzA1NjND MTsNCgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCmE6dmlzaXRlZCwgc3Bhbi5Nc29IeXBl cmxpbmtGb2xsb3dlZA0KCXttc28tc3R5bGUtcHJpb3JpdHk6OTk7DQoJY29sb3I6Izk1NEY3MjsN Cgl0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO30NCnNwYW4uRW1haWxTdHlsZTE3DQoJe21zby1z dHlsZS10eXBlOnBlcnNvbmFsOw0KCWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJY29sb3I6d2luZG93 dGV4dDt9DQpzcGFuLkVtYWlsU3R5bGUxOA0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbDsNCglm b250LWZhbWlseTpDYWxpYnJpOw0KCWNvbG9yOiMxRjQ5N0Q7fQ0Kc3Bhbi5FbWFpbFN0eWxlMTkN Cgl7bXNvLXN0eWxlLXR5cGU6cGVyc29uYWw7DQoJZm9udC1mYW1pbHk6Q2FsaWJyaTsNCgljb2xv cjojMUY0OTdEO30NCnNwYW4uRW1haWxTdHlsZTIwDQoJe21zby1zdHlsZS10eXBlOnBlcnNvbmFs Ow0KCWZvbnQtZmFtaWx5OkNhbGlicmk7DQoJY29sb3I6IzFGNDk3RDt9DQpzcGFuLkVtYWlsU3R5 bGUyMQ0KCXttc28tc3R5bGUtdHlwZTpwZXJzb25hbC1yZXBseTsNCglmb250LWZhbWlseTpDYWxp YnJpOw0KCWNvbG9yOndpbmRvd3RleHQ7fQ0Kc3Bhbi5tc29JbnMNCgl7bXNvLXN0eWxlLXR5cGU6 ZXhwb3J0LW9ubHk7DQoJbXNvLXN0eWxlLW5hbWU6IiI7DQoJdGV4dC1kZWNvcmF0aW9uOnVuZGVy bGluZTsNCgljb2xvcjp0ZWFsO30NCi5Nc29DaHBEZWZhdWx0DQoJe21zby1zdHlsZS10eXBlOmV4 cG9ydC1vbmx5Ow0KCWZvbnQtc2l6ZToxMC4wcHQ7fQ0KQHBhZ2UgV29yZFNlY3Rpb24xDQoJe3Np emU6OC41aW4gMTEuMGluOw0KCW1hcmdpbjoxLjBpbiAxLjI1aW4gMS4waW4gMS4yNWluO30NCmRp di5Xb3JkU2VjdGlvbjENCgl7cGFnZTpXb3JkU2VjdGlvbjE7fQ0KLS0+PC9zdHlsZT4NCjwvaGVh ZD4NCjxib2R5IGJnY29sb3I9IndoaXRlIiBsYW5nPSJFTi1VUyIgbGluaz0iIzA1NjNDMSIgdmxp bms9IiM5NTRGNzIiPg0KPGRpdiBjbGFzcz0iV29yZFNlY3Rpb24xIj4NCjxwIGNsYXNzPSJNc29O b3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij5JIGFncmVlIHRoYXQgdGhpcyBz aG91bGQgcHJvYmFibHkgZ28gaW50byBhIG5ldyB2YmRldiBtb2R1bGUuJm5ic3A7IFdlIGRvIHdh bnQgdG8ga2VlcCB0aGUgZXhpc3RpbmcgcGFzcy10aHJvdWdoIG1vZHVsZSBhcyB0aGUgZXhhbXBs ZSB3aGljaCBpcyBhcyBzaW1wbGUgYXMgcG9zc2libGUuJm5ic3A7IFRoZW4gaWYgd2UgZmluZCB3 ZSBuZWVkIG90aGVyIGNoYW5nZXMgdG8gc3VwcG9ydA0KIEdhbmfigJlzIHBlci1jbGllbnQgdXNl IGNhc2UsIHdlIGRvbuKAmXQgaGF2ZSB0byB3b3JyeSBhYm91dCBmdXJ0aGVyIGNvbXBsaWNhdGlu ZyB0aGUgZXhhbXBsZS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFs Ij48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+ PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQi PlRoZSBxdWVzdGlvbiBpcyB0aGVuIHdoYXQgdG8gbmFtZSBpdC4mbmJzcDsgSSBkb27igJl0IHRo aW5rIOKAnHFvc+KAnSBpcyB0aGUgYmVzdCBuYW1lIOKAkyBzaW5jZSB0aGlzIG1vZHVsZSBpc27i gJl0IGFjdHVhbGx5IGRvaW5nIGFueSBRb1Mgd29yayDigJMgaXQganVzdCBlbmFibGVzIHBlci1j bGllbnQgUW9TLiZuYnNwOyBBbGwgb2YgdGhlIFFvUyB3b3JrIGlzIGRvbmUgaW4gdGhlIGNvbW1v bg0KIGJkZXYgbGF5ZXIg4oCTIG5vdCBhIGJkZXYgbW9kdWxlLiZuYnNwOyBNYXliZSBzb21ldGhp bmcgYWxvbmcgdGhlIGxpbmVzIG9mIOKAnHNoYXJlZF9wYXNzdGhydeKAnT8mbmJzcDsgSSBkb27i gJl0IHBhcnRpY3VsYXJseSBjYXJlIGZvciB0aGF0IG5hbWUgZWl0aGVyIOKAkyBpZiBhbnlvbmUg aGFzIGFub3RoZXIgaWRlYSwgcGxlYXNlIGFkdmlzZS48bzpwPjwvbzpwPjwvc3Bhbj48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+PG86cD4m bmJzcDs8L286cD48L3NwYW4+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCI+PHNwYW4gc3R5bGU9 ImZvbnQtc2l6ZToxMS4wcHQiPlRoaXMgbmV3IG1vZHVsZSBjYW4gYWxzbyB1dGlsaXplIHRoZSBz cGRrX2JkZXZfcGFydCBBUEkgdG8gc2lnbmlmaWNhbnRseSBzaW1wbGlmeSB0aGUgY29kZS4mbmJz cDsgUGF1bCBwdXJwb3NlbHkgZGlkIG5vdCB1c2Ugc3Bka19iZGV2X3BhcnQgaW4gdGhlIHBhc3N0 aHJ1IGV4YW1wbGUgYmVjYXVzZSBoZSB3YW50ZWQgdG8gZXhwbGljaXRseSBzaG93IGhvdyBldmVy eXRoaW5nDQogc2hvdWxkIGJlIGltcGxlbWVudGVkIGluIHRoZSBleGFtcGxlIGJkZXYgbW9kdWxl IGl0c2VsZi4mbmJzcDsgQnV0IGZvciB0aGlzIG1vZHVsZSwgc2luY2UgaXTigJlzIG5vdCBhbiBl eGFtcGxlIG1vZHVsZSwgd2UgZG9u4oCZdCBoYXZlIHRoYXQgc2FtZSBjb25jZXJuLjxvOnA+PC9v OnA+PC9zcGFuPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNp emU6MTEuMHB0Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9y bWFsIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+LUppbTxvOnA+PC9vOnA+PC9zcGFu PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0 Ij48bzpwPiZuYnNwOzwvbzpwPjwvc3Bhbj48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIj48c3Bh biBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+PG86cD4mbmJzcDs8L286cD48L3NwYW4+PC9wPg0K PGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjQjVDNERGIDEuMHB0O3Bh ZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1h cmdpbi1sZWZ0Oi41aW4iPjxiPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+RnJvbTogPC9zcGFu Pg0KPC9iPjxzcGFuIHN0eWxlPSJjb2xvcjpibGFjayI+U1BESyAmbHQ7c3Bkay1ib3VuY2VzQGxp c3RzLjAxLm9yZyZndDsgb24gYmVoYWxmIG9mICZxdW90O0thcml1a2ksIEpvaG4gSyZxdW90OyAm bHQ7am9obi5rLmthcml1a2lAaW50ZWwuY29tJmd0Ozxicj4NCjxiPlJlcGx5LVRvOiA8L2I+U3Rv cmFnZSBQZXJmb3JtYW5jZSBEZXZlbG9wbWVudCBLaXQgJmx0O3NwZGtAbGlzdHMuMDEub3JnJmd0 Ozxicj4NCjxiPkRhdGU6IDwvYj5UaHVyc2RheSwgQXByaWwgMTIsIDIwMTggYXQgMTA6MDEgQU08 YnI+DQo8Yj5UbzogPC9iPlN0b3JhZ2UgUGVyZm9ybWFuY2UgRGV2ZWxvcG1lbnQgS2l0ICZsdDtz cGRrQGxpc3RzLjAxLm9yZyZndDs8YnI+DQo8Yj5TdWJqZWN0OiA8L2I+UmU6IFtTUERLXSBBYm91 dCBwZXIgY2xpZW50IFFvUyAoSU9QUyByYXRlIGxpbWl0aW5nKTwvc3Bhbj48c3BhbiBzdHlsZT0i Zm9udC1zaXplOjEyLjBwdDtjb2xvcjpibGFjayI+PG86cD48L286cD48L3NwYW4+PC9wPg0KPC9k aXY+DQo8ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4i PjxzcGFuIHN0eWxlPSJmb250LWZhbWlseTomcXVvdDtUaW1lcyBOZXcgUm9tYW4mcXVvdDsiPjxv OnA+Jm5ic3A7PC9vOnA+PC9zcGFuPjwvcD4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg c3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Nv bG9yOiMxRjQ5N0QiPkdhbmcvUGF1bDwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJN c29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdDtjb2xvcjojMUY0OTdEIj5Eb2VzIHRoaXMgZnVuY3Rpb25hbGl0eSBiZWxvbmcgaW4g dGhlIHBhc3N0aHJ1IGJkZXYgb3Igc2hvdWxkIGl0IGJlIGltcGxlbWVudGVkIGluIGFub3RoZXIg dmJkZXYgY2FsbGVkIHNvbWV0aGluZyBsaWtlIOKAnHFvc+KAnT8gTXkgdW5kZXJzdGFuZGluZyBv ZiB0aGUgcGFzc3RocnUgYmRldiBpcw0KIHRoYXQgaXTigJlzIGEgdGVtcGxhdGUgdGhhdCBhbnlv bmUgbG9va2luZyB0byBidWlsZCBhIHZiZGV2IGNhbiB1c2UgYXMgYSBzdGFydGluZyBwb2ludC4g SXQgaGFzIGFsbCB0aGUgZnVuY3Rpb25zIG5lZWRlZCB0byBjcmVhdGUgYW4gU1BESyBtb2R1bGUg c3R1YiBvdXQgc28gdGhhdCBzb21lb25lIGNhbiBwaWNrIGl0IHVwLCBtYWtlIGEgY29weSBhbmQg YSBmZXcgbW9kaWZpY2F0aW9ucyBhbmQgdGhlbiB0aGV5IGFyZSBvZmYgdG8gdGhlIHJhY2VzDQog aW1wbGVtZW50aW5nIHRoZWlyIG5ldyB2aXJ0dWFsIGJkZXY8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PGEgbmFtZT0i X01haWxFbmRDb21wb3NlIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdDtjb2xvcjojMUY0 OTdEIj4mbmJzcDs8L3NwYW4+PC9hPjxvOnA+PC9vOnA+PC9wPg0KPGRpdj4NCjxkaXYgc3R5bGU9 ImJvcmRlcjpub25lO2JvcmRlci10b3A6c29saWQgI0UxRTFFMSAxLjBwdDtwYWRkaW5nOjMuMHB0 IDBpbiAwaW4gMGluIj4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIGFsaWduPSJsZWZ0IiBzdHlsZT0i bWFyZ2luLWxlZnQ6LjVpbjt0ZXh0LWFsaWduOmxlZnQiPjxhIG5hbWU9Il9fX19fcmVwbHlzZXBh cmF0b3IiPjwvYT48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjExLjBwdCI+RnJvbTo8L3NwYW4+ PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij4gU1BESyBbbWFpbHRvOnNwZGstYm91 bmNlc0BsaXN0cy4wMS5vcmddDQo8Yj5PbiBCZWhhbGYgT2YgPC9iPkNhbywgR2FuZzxicj4NCjxi PlNlbnQ6PC9iPiBUdWVzZGF5LCBBcHJpbCAxMCwgMjAxOCA2OjA1IFBNPGJyPg0KPGI+VG86PC9i PiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7c3Bka0BsaXN0cy4wMS5v cmcmZ3Q7PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gQWJvdXQgcGVyIGNsaWVudCBR b1MgKElPUFMgcmF0ZSBsaW1pdGluZyk8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwv ZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249ImxlZnQiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluO3RleHQtYWxpZ246bGVmdCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMx RjQ5N0QiPlllcy4gSXTigJlzIGEgZ29vZCBleHRlbnNpb24gdG8gY291cGxlIHdpdGggdGhlIHZi ZGV2IGFuZCBiZGV2IHRvIG1lZXQgdGhlIGNsaWVudOKAmXMgUW9TIGdvYWwuIEZvciBhIGNsaWVu dCwgZnJvbSBteSB1bmRlcnN0YW5kaW5nLCBhIOKAnGRldmljZeKAnSB3aWxsIGFsd2F5cyBiZSBs aW5rZWQgdGhyb3VnaCBpdHMgb3duIHNwZWNpZmljDQog4oCcY29ubmVjdGlvbuKAnS4gVGhlIHBl ciBjbGllbnQgKG9yIHRoZSBwZXIgY29ubmVjdGlvbikgUW9TIGNhbiBiZSBhbHNvIGFjaGlldmVk IGJ5IHRoZSBwZXIg4oCcZGV2aWNl4oCdLjwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNz PSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iY29sb3I6 IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj5U aGUgb3RoZXIgY29tbWVudCBpcyB0aGF0IHRvIG1vdmUgdGhpcyBRb1MgcmF0ZSBsaW1pdGluZyBm cm9tIHRoZSBjbGllbnQgc2lkZSB0byB0aGUgdGFyZ2V0IHNpZGUuIENsaWVudCBjYW4gaGFzIGl0 cyBvd24gUW9TIGZvciB0aGUgY29ubmVjdGlvbiBiZWZvcmUgc3VibWl0dGluZyBJL09zIGFuZCB3 aXRoIHRoaXMgd29yaywNCiBpdCBjYW4gYWxzbyBsZXQgdGhlIHRhcmdldCBzaWRlIHRvIGRvIHRo ZSBzaW1pbGFyIHRoaW5nIGFuZCBtYXkgbm90IG5lZWQgYSBRb1MgYXQgY2xpZW50IHNpZGUuPC9z cGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48 L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ PHNwYW4gc3R5bGU9ImNvbG9yOiMxRjQ5N0QiPlRoYW5rcyw8L3NwYW4+PG86cD48L286cD48L3A+ DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5 bGU9ImNvbG9yOiMxRjQ5N0QiPkdhbmc8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImNvbG9yOiMx RjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxkaXY+DQo8ZGl2IHN0eWxlPSJi b3JkZXI6bm9uZTtib3JkZXItdG9wOnNvbGlkICNFMUUxRTEgMS4wcHQ7cGFkZGluZzozLjBwdCAw aW4gMGluIDBpbiI+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBhbGlnbj0ibGVmdCIgc3R5bGU9Im1h cmdpbi1sZWZ0Oi41aW47dGV4dC1hbGlnbjpsZWZ0Ij48Yj48c3BhbiBzdHlsZT0iZm9udC1zaXpl OjExLjBwdCI+RnJvbTo8L3NwYW4+PC9iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0Ij4g U1BESyBbPGEgaHJlZj0ibWFpbHRvOnNwZGstYm91bmNlc0BsaXN0cy4wMS5vcmciPm1haWx0bzpz cGRrLWJvdW5jZXNAbGlzdHMuMDEub3JnPC9hPl0NCjxiPk9uIEJlaGFsZiBPZiA8L2I+THVzZSwg UGF1bCBFPGJyPg0KPGI+U2VudDo8L2I+IFR1ZXNkYXksIEFwcmlsIDEwLCAyMDE4IDExOjU2IFBN PGJyPg0KPGI+VG86PC9iPiBTdG9yYWdlIFBlcmZvcm1hbmNlIERldmVsb3BtZW50IEtpdCAmbHQ7 PGEgaHJlZj0ibWFpbHRvOnNwZGtAbGlzdHMuMDEub3JnIj5zcGRrQGxpc3RzLjAxLm9yZzwvYT4m Z3Q7PGJyPg0KPGI+U3ViamVjdDo8L2I+IFJlOiBbU1BES10gQWJvdXQgcGVyIGNsaWVudCBRb1Mg KElPUFMgcmF0ZSBsaW1pdGluZyk8L3NwYW4+PG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvZGl2 Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249ImxlZnQiIHN0eWxlPSJtYXJnaW4tbGVmdDou NWluO3RleHQtYWxpZ246bGVmdCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNv Tm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZTox MS4wcHQ7Y29sb3I6IzFGNDk3RCI+SGkgR2FuZyw8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZv bnQtc2l6ZToxMS4wcHQ7Y29sb3I6IzFGNDk3RCI+Jm5ic3A7PC9zcGFuPjxvOnA+PC9vOnA+PC9w Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0 eWxlPSJmb250LXNpemU6MTEuMHB0O2NvbG9yOiMxRjQ5N0QiPlRoaXMgaXMgcHJldHR5IGNvb2wu Jm5ic3A7IFNvIGVzc2VudGlhbGx5IHRoZSBQVCB2YmRldiBpcyBqdXN0IGEgcGVyLWNsaWVudCBo b29rIGZvciBRb1M/PC9zcGFuPjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg c3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxzcGFuIHN0eWxlPSJmb250LXNpemU6MTEuMHB0O2Nv bG9yOiMxRjQ5N0QiPiZuYnNwOzwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29O b3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9udC1zaXplOjEx LjBwdDtjb2xvcjojMUY0OTdEIj5UaHg8L3NwYW4+PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+PHNwYW4gc3R5bGU9ImZvbnQtc2l6 ZToxMS4wcHQ7Y29sb3I6IzFGNDk3RCI+UGF1bDwvc3Bhbj48bzpwPjwvbzpwPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48c3BhbiBzdHlsZT0iZm9u dC1zaXplOjExLjBwdDtjb2xvcjojMUY0OTdEIj4mbmJzcDs8L3NwYW4+PG86cD48L286cD48L3A+ DQo8ZGl2Pg0KPGRpdiBzdHlsZT0iYm9yZGVyOm5vbmU7Ym9yZGVyLXRvcDpzb2xpZCAjRTFFMUUx IDEuMHB0O3BhZGRpbmc6My4wcHQgMGluIDBpbiAwaW4iPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIg YWxpZ249ImxlZnQiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluO3RleHQtYWxpZ246bGVmdCI+PGI+ PHNwYW4gc3R5bGU9ImZvbnQtc2l6ZToxMS4wcHQiPkZyb206PC9zcGFuPjwvYj48c3BhbiBzdHls ZT0iZm9udC1zaXplOjExLjBwdCI+IFNQREsgWzxhIGhyZWY9Im1haWx0bzpzcGRrLWJvdW5jZXNA bGlzdHMuMDEub3JnIj5tYWlsdG86c3Bkay1ib3VuY2VzQGxpc3RzLjAxLm9yZzwvYT5dDQo8Yj5P biBCZWhhbGYgT2YgPC9iPkNhbywgR2FuZzxicj4NCjxiPlNlbnQ6PC9iPiBNb25kYXksIEFwcmls IDksIDIwMTggOTowMyBQTTxicj4NCjxiPlRvOjwvYj4gU3RvcmFnZSBQZXJmb3JtYW5jZSBEZXZl bG9wbWVudCBLaXQgJmx0OzxhIGhyZWY9Im1haWx0bzpzcGRrQGxpc3RzLjAxLm9yZyI+c3Bka0Bs aXN0cy4wMS5vcmc8L2E+Jmd0Ozxicj4NCjxiPlN1YmplY3Q6PC9iPiBbU1BES10gQWJvdXQgcGVy IGNsaWVudCBRb1MgKElPUFMgcmF0ZSBsaW1pdGluZyk8L3NwYW4+PG86cD48L286cD48L3A+DQo8 L2Rpdj4NCjwvZGl2Pg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgYWxpZ249ImxlZnQiIHN0eWxlPSJt YXJnaW4tbGVmdDouNWluO3RleHQtYWxpZ246bGVmdCI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+SGkgYWxsLDxvOnA+ PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4i PiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdp bi1sZWZ0Oi41aW4iPlRoZXJlIGhhcyBiZWVuIHNvbWUgd29yayBkb25lIHRvIGhhdmUgU1BESyBz dXBwb3J0IHRoZSBRb1MgcGVyIGJkZXYgd2hpY2ggbWVhbnMgdGhhdCBlYWNoIGJkZXYgaGFzIGl0 cyBhc3NpZ25lZCBJT1BTIHJhdGUgbGltaXRpbmcuIFRoaXMgUW9TIGZ1bmN0aW9uYWxpdHkgaXMg YmVsb3cgdGhlIHN0b3JhZ2UgcHJvdG9jb2xzIGxpa2UgTlZNZS1vRiwgaVNDU0kgYW5kIHNvDQog b24uPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxl ZnQ6LjVpbiI+Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6LjVpbiI+QXQgdGhlIHRpbWUgb2YgbGFzdCBQUkMgU1BESyBzdW1taXQs IHRoZXJlIGFyZSBzb21lIHF1ZXN0aW9ucyBvbiB0aGUgcGVyIGNsaWVudCBRb1MgKGkuZS4sIHRo ZSBOVk1lLW9GIGluaWF0b3IgLyBob3N0KSBiZXNpZGVzIHRoZSBwZXIgYmRldiBRb1MuIEVhY2gg Y2xpZW50IGxpa2UgTlZNZS1vRiBpbml0aWF0b3IgY2FuIHNlZSBpdHMgb3duIElPUFMgcmF0ZSBs aW1pdGluZw0KIG5vdCBtYXR0ZXIgd2hldGhlciB0aGUgY29ubmVjdGVkIGRldmljZSBpcyBleGNs dXNpdmUgb3Igc2hhcmVkIGF0IHRoZSB0YXJnZXQgc2lkZS48bzpwPjwvbzpwPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpw PjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5CYXNl ZCBvbiBQYXVs4oCZcyBncmVhdCBzdHVmZiBvZiB0aGUgUGFzc3RocnUgdmJkZXYsIEnigJl2ZSB1 cGRhdGVkIHRocm91Z2ggYmVsb3cgdGhyZWUgcGF0Y2hlcyB0byBhY2hpZXZlIHRoZSBwZXIgY2xp ZW50IFFvUy4gRWFjaCBjbGllbnQgc2VlcyBpdHMgb3duIHBhc3N0aHJ1IHZiZGV2IGFuZCBRb1Mg YXNzaWduZWQgb24gdGhpcyB2YmRldi4gVGhlc2UgdmJkZXYgc2hhcmVzDQogdGhlIHNhbWUgYmRl di4gQ3VycmVudGx5IGl0IG9ubHkgc3VwcG9ydHMgc2hhcmVhYmxlIGFuZCByZWFkIG9ubHkgdmJk ZXYgb24gc2FtZSBiZGV2LjxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5 bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1z b05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxhIGhyZWY9Imh0dHBzOi8vcmV2aWV3 LmdlcnJpdGh1Yi5pby8jL2MvNDA2ODg4LyI+aHR0cHM6Ly9yZXZpZXcuZ2Vycml0aHViLmlvLyMv Yy80MDY4ODgvPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2YmRldjogdXBkYXRlIGFuZCBo YXZlIGEgY3JlYXRlX3Bhc3N0aHJ1X2Rpc2sgZnVuY3Rpb248bzpwPjwvbzpwPjwvcD4NCjxwIGNs YXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj48YSBocmVmPSJodHRwczov L3Jldmlldy5nZXJyaXRodWIuaW8vIy9jLzQwNjg5MS8iPmh0dHBzOi8vcmV2aWV3LmdlcnJpdGh1 Yi5pby8jL2MvNDA2ODkxLzwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgdmJkZXY6IGFkZCB0 aGUgY29uc3RydWN0X3Bhc3N0aHJ1X2JkZXYgUlBDIG1ldGhvZDxvOnA+PC9vOnA+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjxhIGhyZWY9Imh0dHBz Oi8vcmV2aWV3LmdlcnJpdGh1Yi5pby8jL2MvNDA2OTc3LyI+aHR0cHM6Ly9yZXZpZXcuZ2Vycml0 aHViLmlvLyMvYy80MDY5NzcvPC9hPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2YmRldjogbWFr ZSB0aGUgcGFzc3RocnUgdmJkZXYgc2hhcmUgdGhlIHNhbWUgdW5kZXJseWluZyBiZGV2PG86cD48 L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ Jm5ic3A7PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2lu LWxlZnQ6LjVpbiI+VGhlIHBvc3NpYmxlIHVzYWdlIGFzIGZvbGxvd2luZzo8bzpwPjwvbzpwPjwv cD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5bVGFrZSBO Vk1lLW9GIHRhcmdldCBhcyBleGFtcGxlXTxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjEuJm5ic3A7IEluIHRo ZSBudm1mLmNvbmYgZmlsZSwgPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBz dHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+IyBDb25maWd1cmUgdGhlIFBhc3N0aHJ1IHZiZGV2IG9u IHNhbWUgYmRldiBsaWtlIE1hbGxvYzA8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3Jt YWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5bUGFzc3RocnVdPG86cD48L286cD48L3A+DQo8 cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+UFQgTWFsbG9jMCBQ VDA8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVm dDouNWluIj5QVCBNYWxsb2MwIFBUMTxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xh c3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiMgVGhlIHN1YnN5c3RlbSBp cyBjb25maWd1cmVkIHdpdGggc2hhcmVhYmxlIGJkZXYgYnkgUGFzc3RocnUgdmJkZXZzPG86cD48 L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+ W1N1YnN5c3RlbTJdPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0i bWFyZ2luLWxlZnQ6LjVpbiI+Jm5ic3A7IE5RTiBucW4uMjAxNi0wNi5pby5zcGRrOmNub2RlMjxv OnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41 aW4iPiZuYnNwOyBMaXN0ZW4gUkRNQSAxOTIuMTY4LjIuMjE6NDQyMDxvOnA+PC9vOnA+PC9wPg0K PHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOyBBbGxv d0FueUhvc3QgTm88bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJt YXJnaW4tbGVmdDouNWluIj4mbmJzcDsgSG9zdCBucW4uMjAxNi0wNi5pby5zcGRrOmluaXQ8bzpw PjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWlu Ij4mbmJzcDsgU04gU1BESzAwMDAwMDAwMDAwMDAyPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0i TXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Jm5ic3A7IE5hbWVzcGFjZSBQVDAm bmJzcDsmbmJzcDsgJmd0OyZndDsmZ3Q7Jmd0OyBUaGlzIGNhbiBiZSBjb25uZWN0ZWQgYnkgb25l IGNsaWVudDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdp bi1sZWZ0Oi41aW4iPiZuYnNwOyBOYW1lc3BhY2UgUFQxJm5ic3A7Jm5ic3A7ICZndDsmZ3Q7Jmd0 OyZndDsgVGhpcyBjYW4gYmUgY29ubmVjdGVkIGJ5IGFub3RoZXIgY2xpZW50PG86cD48L286cD48 L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Jm5ic3A7 PG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6 LjVpbiI+IyBBc3NpZ24gZGlmZmVyZW50IFFvUyBJT1BTIGxpbWl0aW5nIG9uIFBhc3N0aHJ1IHZi ZGV2czxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1s ZWZ0Oi41aW4iPltRb1NdPG86cD48L286cD48L3A+DQo8cCBjbGFzcz0iTXNvTm9ybWFsIiBzdHls ZT0ibWFyZ2luLWxlZnQ6LjVpbiI+TGltaXRfSU9QUyBQVDAgMjAwMDA8bzpwPjwvbzpwPjwvcD4N CjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5MaW1pdF9JT1BT IFBUMSAzMDAwMDxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1h cmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1h bCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPjIuIFVzZSBSUEMgbWV0aG9kIHRvIGFkZCB0aGUg UGFzc3RocnUgdmJkZXYgYXQgcnVudGltZTxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05v cm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPmEuIHB5dGhvbiAuL3NjcmlwdHMvcnBjLnB5 IGNvbnN0cnVjdF9wYXNzdGhydV9iZGV2IE1hbGxvYzAgUFQzPG86cD48L286cD48L3A+DQo8cCBj bGFzcz0iTXNvTm9ybWFsIiBzdHlsZT0ibWFyZ2luLWxlZnQ6LjVpbiI+Yi4gcHl0aG9uIC4vc2Ny aXB0cy9ycGMucHkgbnZtZl9zdWJzeXN0ZW1fYWRkX25zIG5xbi4yMDE2LTA2LmlvLnNwZGs6Y25v ZGUyIFBUMzxvOnA+PC9vOnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdp bi1sZWZ0Oi41aW4iPmMuIHB5dGhvbiAuL3NjcmlwdHMvcnBjLnB5IGVuYWJsZV9iZGV2X3FvcyBQ VDMgMjAwMDA8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJn aW4tbGVmdDouNWluIj4mbmJzcDs8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwi IHN0eWxlPSJtYXJnaW4tbGVmdDouNWluIj5JZiB0aGVyZSBpcyBhbnkgY29uY2VybiBvciBjb21t ZW50LCBwbGVhc2UgZmVlbCBmcmVlIHRvIGxldCBtZSBrbm93LjxvOnA+PC9vOnA+PC9wPg0KPHAg Y2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPiZuYnNwOzxvOnA+PC9v OnA+PC9wPg0KPHAgY2xhc3M9Ik1zb05vcm1hbCIgc3R5bGU9Im1hcmdpbi1sZWZ0Oi41aW4iPlRo YW5rcyw8bzpwPjwvbzpwPjwvcD4NCjxwIGNsYXNzPSJNc29Ob3JtYWwiIHN0eWxlPSJtYXJnaW4t bGVmdDouNWluIj5HYW5nPG86cD48L286cD48L3A+DQo8L2Rpdj4NCjwvYm9keT4NCjwvaHRtbD4N Cg== --===============7533752928652773032==--