From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wolfkin Chiang Subject: "No definition" for "per-file basis in a source code block" mode Date: Mon, 15 Apr 2013 16:34:57 +0800 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=bcaec53f346dbeae7e04da6220bc Return-path: Received: from eggs.gnu.org ([208.118.235.92]:50505) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UResi-00056W-RY for emacs-orgmode@gnu.org; Mon, 15 Apr 2013 04:35:35 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UResN-00047X-S7 for emacs-orgmode@gnu.org; Mon, 15 Apr 2013 04:35:20 -0400 Received: from mail-wg0-f46.google.com ([74.125.82.46]:53259) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UResN-00046p-4a for emacs-orgmode@gnu.org; Mon, 15 Apr 2013 04:34:59 -0400 Received: by mail-wg0-f46.google.com with SMTP id e11so2150509wgh.1 for ; Mon, 15 Apr 2013 01:34:57 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: emacs-orgmode@gnu.org --bcaec53f346dbeae7e04da6220bc Content-Type: multipart/alternative; boundary=bcaec53f346dbeae7a04da6220ba --bcaec53f346dbeae7a04da6220ba Content-Type: text/plain; charset=ISO-8859-1 Hi, All, While I try the "per-file basis in a source code block" mode, It tells me: No definition for class `per-file-class' in `org-export-latex-classes' Please help me to resolve it, thanks! I command $ emacs -D -nw --no-splash --batch --kill --file list.org --funcall org-export-as-latex And it tells me: Loading 00debian-vars... Loading /etc/emacs/site-start.d/50asymptote.el (source)... Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)... Loading debian-ispell... Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)... Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)... Loading /etc/emacs/site-start.d/50emacs-goodies-el.el (source)... Loading /etc/emacs/site-start.d/50geiser.el (source)... Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)... Loading cjk-enc... Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)... Loading /etc/emacs/site-start.d/50org-mode.el (source)... Loading /etc/emacs/site-start.d/50python-docutils.el (source)... Loading /etc/emacs/site-start.d/50thailatex.el (source)... OVERVIEW Exporting to LaTeX... No definition for class `per-file-class' in `org-export-latex-classes' And it is true that this can be right done once I define the `per-file-class' in .emacs. Regards, Wolfkin --bcaec53f346dbeae7a04da6220ba Content-Type: text/html; charset=ISO-8859-1
Hi, All,

While I try the "per-file basis in a source code block" mode,
It tells me:
No definition for class `per-file-class' in `org-export-latex-classes'
Please help me to resolve it, thanks!

I command
$ emacs -D -nw --no-splash --batch --kill --file list.org --funcall org-export-as-latex
And it tells me:
Loading 00debian-vars...
Loading /etc/emacs/site-start.d/50asymptote.el (source)...
Loading /etc/emacs/site-start.d/50dictionaries-common.el (source)...
Loading debian-ispell...
Loading /var/cache/dictionaries-common/emacsen-ispell-default.el (source)...
Loading /var/cache/dictionaries-common/emacsen-ispell-dicts.el (source)...
Loading /etc/emacs/site-start.d/50emacs-goodies-el.el (source)...
Loading /etc/emacs/site-start.d/50geiser.el (source)...
Loading /etc/emacs/site-start.d/50latex-cjk-common.el (source)...
Loading cjk-enc...
Loading /etc/emacs/site-start.d/50latex-cjk-thai.el (source)...
Loading /etc/emacs/site-start.d/50org-mode.el (source)...
Loading /etc/emacs/site-start.d/50python-docutils.el (source)...
Loading /etc/emacs/site-start.d/50thailatex.el (source)...
OVERVIEW
Exporting to LaTeX...
No definition for class `per-file-class' in `org-export-latex-classes'

And it is true that this can be right done once I define the `per-file-class' in .emacs.

Regards,
Wolfkin
--bcaec53f346dbeae7a04da6220ba-- --bcaec53f346dbeae7e04da6220bc Content-Type: application/octet-stream; name="lisp.org" Content-Disposition: attachment; filename="lisp.org" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hfje04vf0 IyAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj CgojK05BTUU6IHNldHVwCiMrQkVHSU5fU1JDIGVtYWNzLWxpc3AgOnJlc3VsdHMgc2lsZW50IDpl eHBvcnRzIG5vbmUKKHJlcXVpcmUgJ29yZy1sYXRleCkKKHJlcXVpcmUgJ29yZy1leHBvcnQtbGF0 ZXgpCih1bmxlc3MgKGZpbmQgInBlci1maWxlLWNsYXNzIiBvcmctZXhwb3J0LWxhdGV4LWNsYXNz ZXMgOmtleSAnY2FyIDp0ZXN0ICdlcXVhbCkKKGFkZC10by1saXN0ICdvcmctZXhwb3J0LWxhdGV4 LWNsYXNzZXMKCSAgICAgJygicGVyLWZpbGUtY2xhc3MiCgkgICAgICAgIlxcZG9jdW1lbnRjbGFz c3tzY3JhcnRjbH0iCgkgICAgICAgKCJcXHNlY3Rpb257JXN9IiAuICJcXHNlY3Rpb24qeyVzfSIp CgkgICAgICAgKCJcXHN1YnNlY3Rpb257JXN9IiAuICJcXHN1YnNlY3Rpb24qeyVzfSIpCgkgICAg ICAgKCJcXHN1YnN1YnNlY3Rpb257JXN9IiAuICJcXHN1YnN1YnNlY3Rpb24qeyVzfSIpCgkgICAg ICAgKCJcXHBhcmFncmFwaHslc30iIC4gIlxccGFyYWdyYXBoKnslc30iKSkpKQojK0VORF9TUkMK CiMgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwoKIytUSVRMRToJVGhlIE5hdHVyZSBvZiBMaXNwCgojK0FVVEhPUjoJQ29mZmVlbXVnCiMrRU1B SUw6CWNvZmZlZW11Z0BnbWFpbC5jb20KIytEQVRFOgkJTW9uZGF5LCBNYXkgOCwgMjAwNgoKIytE RVNDUklQVElPTjoJCiMrS0VZV09SRFM6CQojK0xBTkdVQUdFOgllbgojK09QVElPTlM6CUg6MyBu dW06dCB0b2M6dCBcbjpuaWwgQDp0IDo6dCB8OnQgXjp7fSAtOnQgZjp0ICo6dCA8OnQKIytPUFRJ T05TOglUZVg6dCBMYVRlWDp0IHNraXA6bmlsIGQ6bmlsIHRvZG86dCBwcmk6bmlsIHRhZ3M6bm90 LWluLXRvYwojK0lORk9KU19PUFQ6CXZpZXc6bmlsIHRvYzp0IGx0b2M6dCBtb3VzZTp1bmRlcmxp bmUgYnV0dG9uczowIHBhdGg6aHR0cDovL29yZ21vZGUub3JnL29yZy1pbmZvLmpzCgojK0VYUE9S VF9TRUxFQ1RfVEFHUzogZXhwb3J0CiMrRVhQT1JUX0VYQ0xVREVfVEFHUzogbm9leHBvcnQKCiMg IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoK IytMQVRFWF9DTEFTUzogcGVyLWZpbGUtY2xhc3MKCiMrTGFUZVhfSEVBREVSOiBcdXNlcGFja2Fn ZXtnZW9tZXRyeX0KIytMYVRlWF9IRUFERVI6IFxnZW9tZXRyeXtsZWZ0PTEuNWluLHJpZ2h0PTEu NWluLHRvcD0xLjVpbixib3R0b209MS41aW59CgojK0xhVGVYX0hFQURFUjogXHVzZXBhY2thZ2V7 aW5kZW50Zmlyc3R9CiMrTGFUZVhfSEVBREVSOiBcbGluZXNwcmVhZHsxLjN9CgojICMrTGFUZVhf SEVBREVSOiBcdXNlcGFja2FnZXtDSkt9CiMgIytMYVRlWF9IRUFERVI6IFxiZWdpbntDSkt9e1VU Rjh9e2dic259CgojICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKCiogSW50cm9kdWN0aW9uCgpXaGVuIEkgZmlyc3Qgc3R1bWJsZWQgaW50byBM aXNwIGFkdm9jYWN5IG9uIHZhcmlvdXMgY29ybmVycyBvZiB0aGUgd2ViIEkKd2FzIGFscmVhZHkg YW4gZXhwZXJpZW5jZWQgcHJvZ3JhbW1lci4gQXQgdGhhdCBwb2ludCBJIGhhZCBncm9ra2VkIHdo YXQKc2VlbWVkIGF0IHRoZSB0aW1lIGEgd2lkZSByYW5nZSBvZiBwcm9ncmFtbWluZyBsYW5ndWFn ZXMuIEkgd2FzIHByb3VkIHRvCmhhdmUgdGhlIHVzdWFsIHN1c3BlY3RzIChDKyssIEphdmEsIEMj LCBldGMuKSBvbiBteSBzZXJ2aWNlIHJlY29yZCBhbmQKd2FzIHVuZGVyIGltcHJlc3Npb24gdGhh dCBJIGtuZXcgZXZlcnl0aGluZyB0aGVyZSBpcyB0byBrbm93IGFib3V0CnByb2dyYW1taW5nIGxh bmd1YWdlcy4gSSBjb3VsZG4ndCBoYXZlIHBvc3NpYmx5IGJlZW4gbW9yZSB3cm9uZy4KCk15IGlu aXRpYWwgYXR0ZW1wdCB0byBsZWFybiBMaXNwIGNhbWUgdG8gYSBjcmFzaGluZyBoYWx0IGFzIHNv b24gYXMgSQpzYXcgc29tZSBzYW1wbGUgY29kZS4gSSBzdXBwb3NlIHRoZSBzYW1lIHRob3VnaHQg cmFuIHRocm91Z2ggbXkgbWluZAp0aGF0IHJhbiB0aHJvdWdoIHRob3VzYW5kcyBvZiBvdGhlciBt aW5kcyB3aG8gd2VyZSBldmVyIGluIG15IHNob2VzOgoiV2h5IG9uIEVhcnRoIHdvdWxkIGFueW9u ZSB3YW50IHRvIHVzZSBhIGxhbmd1YWdlIHdpdGggc3VjaCBob3JyaWZpYwpzeW50YXg/ISIgSSBj b3VsZG4ndCBiZSBib3RoZXJlZCB0byBsZWFybiBhIGxhbmd1YWdlIGlmIGl0cyBjcmVhdG9ycwpj b3VsZG4ndCBiZSBib3RoZXJlZCB0byBnaXZlIGl0IGEgcGxlYXNhbnQgc3ludGF4LiBBZnRlciBh bGwsIEkgd2FzCmFsbW9zdCBibGluZGVkIGJ5IHRoZSBpbmZhbW91cyBMaXNwIHBhcmVudGhlc2Vz IQoKVGhlIG1vbWVudCBJIHJlZ2FpbmVkIG15IHNpZ2h0IEkgY29tbXVuaWNhdGVkIG15IGZydXN0 cmF0aW9ucyB0byBzb21lCm1lbWJlcnMgb2YgdGhlIExpc3Agc2VjdC4gQWxtb3N0IGltbWVkaWF0 ZWx5IEkgd2FzIGJvbWJhcmRlZCBieSBhCnN0YW5kYXJkIHNldCBvZiByZXNwb25zZXM6IExpc3An cyBwYXJlbnRoZXNlcyBhcmUgb25seSBhIHN1cGVyZmljaWFsCm1hdHRlciwgTGlzcCBoYXMgYSBo dWdlIGJlbmVmaXQgb2YgY29kZSBhbmQgZGF0YSBiZWluZyBleHByZXNzZWQgaW4gdGhlCnNhbWUg bWFubmVyICh3aGljaCwgb2J2aW91c2x5LCBpcyBhIGh1Z2UgaW1wcm92ZW1lbnQgb3ZlciBYTUwp LCBMaXNwIGhhcwp0cmVtZW5kb3VzbHkgcG93ZXJmdWwgbWV0YXByb2dyYW1taW5nIGZhY2lsaXRp ZXMgdGhhdCBhbGxvdyBwcm9ncmFtcyB0bwp3cml0ZSBjb2RlIGFuZCBtb2RpZnkgdGhlbXNlbHZl cywgTGlzcCBhbGxvd3MgZm9yIGNyZWF0aW9uIG9mCm1pbmktbGFuZ3VhZ2VzIHNwZWNpZmljIHRv IHRoZSBwcm9ibGVtIGF0IGhhbmQsIExpc3AgYmx1cnMgdGhlCmRpc3RpbmN0aW9uIGJldHdlZW4g cnVuIHRpbWUgYW5kIGNvbXBpbGUgdGltZSwgTGlzcCwgTGlzcCwgTGlzcC4uLiBUaGUKbGlzdCB3 YXMgdmVyeSBpbXByZXNzaXZlLiBOZWVkbGVzcyB0byBzYXkgbm9uZSBvZiBpdCBtYWRlIHNlbnNl LiBOb2JvZHkKY291bGQgaWxsdXN0cmF0ZSB0aGUgdXNlZnVsbmVzcyBvZiB0aGVzZSBmZWF0dXJl cyB3aXRoIHNwZWNpZmljIGV4YW1wbGVzCmJlY2F1c2UgdGhlc2UgdGVjaG5pcXVlcyBhcmUgc3Vw cG9zZWRseSBvbmx5IHVzZWZ1bCBpbiBsYXJnZSBzb2Z0d2FyZQpzeXN0ZW1zLiBBZnRlciBtYW55 IGhvdXJzIG9mIGRlYmF0aW5nIHRoYXQgY29udmVudGlvbmFsIHByb2dyYW1taW5nCmxhbmd1YWdl cyBkbyB0aGUgam9iIGp1c3QgZmluZSwgSSBnYXZlIHVwLiBJIHdhc24ndCBhYm91dCB0byBpbnZl c3QKbW9udGhzIGludG8gbGVhcm5pbmcgYSBsYW5ndWFnZSB3aXRoIGEgdGVycmlibGUgc3ludGF4 IGluIG9yZGVyIHRvCnVuZGVyc3RhbmQgb2JzY3VyZSBmZWF0dXJlcyB0aGF0IGhhZCBubyB1c2Vm dWwgZXhhbXBsZXMuIE15IHRpbWUgaGFzIG5vdAp5ZXQgY29tZS4KCkZvciBtYW55IG1vbnRocyB0 aGUgTGlzcCBhZHZvY2F0ZXMgcHJlc3NlZCBvbi4gSSB3YXMgYmFmZmxlZC4gTWFueQpleHRyZW1l bHkgaW50ZWxsaWdlbnQgcGVvcGxlIEkga25ldyBhbmQgaGFkIG11Y2ggcmVzcGVjdCBmb3Igd2Vy ZQpwcmFpc2luZyBMaXNwIHdpdGggYWxtb3N0IHJlbGlnaW91cyBkZWRpY2F0aW9uLiBUaGVyZSBo YWQgdG8gYmUKc29tZXRoaW5nIHRoZXJlLCBzb21ldGhpbmcgSSBjb3VsZG4ndCBhZmZvcmQgbm90 IHRvIGdldCBteSBoYW5kcyBvbiEKRXZlbnR1YWxseSBteSB0aGlyc3QgZm9yIGtub3dsZWRnZSB3 b24gbWUgb3Zlci4gSSB0b29rIHRoZSBwbHVuZ2UsIGJpdAp0aGUgYnVsbGV0LCBnb3QgbXkgaGFu ZHMgZGlydHksIGFuZCBiZWdhbiBtb250aHMgb2YgbWluZCBiZW5kaW5nCmV4ZXJjaXNlcy4gSXQg d2FzIGEgam91cm5leSBvbiBhbiBlbmRsZXNzIGxha2Ugb2YgZnJ1c3RyYXRpb24uIEkgdHVybmVk Cm15IG1pbmQgaW5zaWRlIG91dCwgcmluc2VkIGl0LCBhbmQgcHV0IGl0IGJhY2sgaW4gcGxhY2Uu IEkgd2VudCB0aHJvdWdoCnNldmVuIHJpbmdzIG9mIGhlbGwgYW5kIGNhbWUgYmFjay4gQW5kIHRo ZW4gSSBnb3QgaXQuCgpUaGUgZW5saWdodGVubWVudCBjYW1lIGluc3RhbnRhbmVvdXNseS4gT25l IG1vbWVudCBJIHVuZGVyc3Rvb2Qgbm90aGluZywKYW5kIHRoZSBuZXh0IG1vbWVudCBldmVyeXRo aW5nIGNsaWNrZWQgaW50byBwbGFjZS4gSSd2ZSBhY2hpZXZlZApuaXJ2YW5hLiBEb3plbnMgb2Yg dGltZXMgSSBoZWFyZCBFcmljIFJheW1vbmQncyBzdGF0ZW1lbnQgcXVvdGVkIGJ5CmRpZmZlcmVu dCBwZW9wbGU6ICJMaXNwIGlzIHdvcnRoIGxlYXJuaW5nIGZvciB0aGUgcHJvZm91bmQgZW5saWdo dGVubWVudApleHBlcmllbmNlIHlvdSB3aWxsIGhhdmUgd2hlbiB5b3UgZmluYWxseSBnZXQgaXQ7 IHRoYXQgZXhwZXJpZW5jZSB3aWxsCm1ha2UgeW91IGEgYmV0dGVyIHByb2dyYW1tZXIgZm9yIHRo ZSByZXN0IG9mIHlvdXIgZGF5cywgZXZlbiBpZiB5b3UKbmV2ZXIgYWN0dWFsbHkgdXNlIExpc3Ag aXRzZWxmIGEgbG90LiIgSSBuZXZlciB1bmRlcnN0b29kIHRoaXMKc3RhdGVtZW50LiBJIG5ldmVy IGJlbGlldmVkIGl0IGNvdWxkIGJlIHRydWUuIEFuZCBmaW5hbGx5LCBhZnRlciBhbGwgdGhlCnBh aW4sIGl0IG1hZGUgc2Vuc2UhIFRoZXJlIHdhcyBtb3JlIHRydXRoIHRvIGl0IHRoYW4gSSBldmVy IGNvdWxkIGhhdmUKaW1hZ2luZWQuIEkndmUgYWNoaWV2ZWQgYW4gYWxtb3N0IGRpdmluZSBzdGF0 ZSBvZiBtaW5kLCBhbiBpbnN0YW50YW5lb3VzCmVubGlnaHRlbm1lbnQgZXhwZXJpZW5jZSB0aGF0 IHR1cm5lZCBteSB2aWV3IG9mIGNvbXB1dGVyIHNjaWVuY2Ugb24gaXRzCmhlYWQgaW4gbGVzcyB0 aGFuIGEgc2luZ2xlIHNlY29uZC4KClRoYXQgdmVyeSBzZWNvbmQgSSBiZWNhbWUgYSBtZW1iZXIg b2YgdGhlIExpc3AgY3VsdC4gSSBmZWx0IHNvbWV0aGluZyBhCm5pbmppdHN1IG1hc3RlciBtdXN0 IGZlZWw6IEkgaGFkIHRvIHNwcmVhZCBteSBuZXdmb3VuZCBrbm93bGVkZ2UgdG8gYXQKbGVhc3Qg dGVuIGxvc3Qgc291bHMgaW4gdGhlIGNvdXJzZSBvZiBteSBsaWZldGltZS4gSSB0b29rIHRoZSB1 c3VhbApwYXRoLiBJIHdhcyByZWhhc2hpbmcgdGhlIHNhbWUgYXJndW1lbnRzIHRoYXQgd2VyZSBn aXZlbiB0byBtZSBmb3IgeWVhcnMKKG9ubHkgbm93IHRoZXkgYWN0dWFsbHkgbWFkZSBzZW5zZSEp LCBob3BpbmcgdG8gY29udmVydCB1bnN1c3BlY3RpbmcKYnlzdGFuZGVycy4gSXQgZGlkbid0IHdv cmsuIE15IHBlcnNpc3RlbmNlIHNwYXJrZWQgYSBmZXcgcGVvcGxlJ3MKaW50ZXJlc3QgYnV0IHRo ZWlyIGN1cmlvc2l0eSBkd2luZGxlZCBhdCB0aGUgbWVyZSBzaWdodCBvZiBzYW1wbGUgTGlzcApj b2RlLiBQZXJoYXBzIHllYXJzIG9mIGFkdm9jYWN5IHdvdWxkIGZvcmdlIGEgZmV3IG5ldyBMaXNw ZXJzLCBidXQgSQp3YXNuJ3Qgc2F0aXNmaWVkLiBUaGVyZSBoYWQgdG8gYmUgYSBiZXR0ZXIgd2F5 LgoKSSBnYXZlIHRoZSBtYXR0ZXIgY2FyZWZ1bCB0aG91Z2h0LiBJcyB0aGVyZSBzb21ldGhpbmcg aW5oZXJlbnRseSBoYXJkCmFib3V0IExpc3AgdGhhdCBwcmV2ZW50cyB2ZXJ5IGludGVsbGlnZW50 LCBleHBlcmllbmNlZCBwcm9ncmFtbWVycyBmcm9tCnVuZGVyc3RhbmRpbmcgaXQ/IE5vLCB0aGVy ZSBpc24ndC4gQWZ0ZXIgYWxsLCBJIGdvdCBpdCwgYW5kIGlmIEkgY2FuIGRvCml0LCBhbnlib2R5 IGNhbi4gVGhlbiB3aGF0IGlzIGl0IHRoYXQgbWFrZXMgTGlzcCBzbyBoYXJkIHRvIHVuZGVyc3Rh bmQ/ClRoZSBhbnN3ZXIsIGFzIHN1Y2ggdGhpbmdzIHVzdWFsbHkgZG8sIGNhbWUgdW5leHBlY3Rl ZGx5LiBPZiBjb3Vyc2UhClRlYWNoaW5nIGFueWJvZHkgYW55dGhpbmcgaW52b2x2ZXMgYnVpbGRp bmcgYWR2YW5jZWQgY29uY2VwdHMgb24gdG9wIG9mCmNvbmNlcHRzIHRoZXkgYWxyZWFkeSB1bmRl cnN0YW5kISBJZiB0aGUgcHJvY2VzcyBpcyBtYWRlIGludGVyZXN0aW5nIGFuZAp0aGUgbWF0dGVy IGlzIGV4cGxhaW5lZCBwcm9wZXJseSB0aGUgbmV3IGNvbmNlcHRzIGJlY29tZSBhcyBpbnR1aXRp dmUgYXMKdGhlIG9yaWdpbmFsIGJ1aWxkaW5nIGJsb2NrcyB0aGF0IGFpZGVkIHRoZWlyIHVuZGVy c3RhbmRpbmcuIFRoYXQgd2FzCnRoZSBwcm9ibGVtISBNZXRhcHJvZ3JhbW1pbmcsIGNvZGUgYW5k IGRhdGEgaW4gb25lIHJlcHJlc2VudGF0aW9uLApzZWxmLW1vZGlmeWluZyBwcm9ncmFtcywgZG9t YWluIHNwZWNpZmljIG1pbmktbGFuZ3VhZ2VzLCBub25lIG9mIHRoZQpleHBsYW5hdGlvbnMgZm9y IHRoZXNlIGNvbmNlcHRzIHJlZmVyZW5jZWQgZmFtaWxpYXIgdGVycml0b3J5LiBIb3cgY291bGQK SSBleHBlY3QgYW55b25lIHRvIHVuZGVyc3RhbmQgdGhlbSEgTm8gd29uZGVyIHBlb3BsZSB3YW50 ZWQgc3BlY2lmaWMKZXhhbXBsZXMuIEkgY291bGQgYXMgd2VsbCBoYXZlIGJlZW4gc3BlYWtpbmcg aW4gTWFydGlhbiEKCkkgc2hhcmVkIG15IGlkZWFzIHdpdGggZmVsbG93IExpc3BlcnMuICJXZWxs LCBvZiBjb3Vyc2UgdGhlc2UgY29uY2VwdHMKYXJlbid0IGV4cGxhaW5lZCBpbiB0ZXJtcyBvZiBm YW1pbGlhciB0ZXJyaXRvcnkiLCB0aGV5IHNhaWQuICJUaGV5IGFyZQpzbyBkaWZmZXJlbnQsIHRo ZXkncmUgdW5saWtlIGFueXRoaW5nIHRoZXNlIHBlb3BsZSBoYXZlIGxlYXJuZWQgYmVmb3JlLiIK VGhpcyB3YXMgYSBwb29yIGV4Y3VzZS4gIkkgZG8gbm90IGJlbGlldmUgdGhpcyB0byBiZSB0cnVl IiwgSSBzYWlkLiBUaGUKcmVzcG9uc2Ugd2FzIHVuYW5pbW91czogIldoeSBkb24ndCB5b3UgZ2l2 ZSBpdCBhIHRyeT8iIFNvIEkgZGlkLiBUaGlzCmFydGljbGUgaXMgYSBwcm9kdWN0IG9mIG15IGVm Zm9ydHMuIEl0IGlzIG15IGF0dGVtcHQgdG8gZXhwbGFpbiBMaXNwIGluCmZhbWlsaWFyLCBpbnR1 aXRpdmUgY29uY2VwdHMuIEkgdXJnZSBicmF2ZSBzb3VscyB0byByZWFkIG9uLiBHcmFiIHlvdXIK ZmF2b3JpdGUgZHJpbmsuIFRha2UgYSBkZWVwIGJyZWF0aC4gUHJlcGFyZSB0byBiZSBibG93biBh d2F5LiBPaCwgYW5kCm1heSB0aGUgRm9yY2UgYmUgd2l0aCB5b3UuCgoqIFhNTCBSZWxvYWRlZAoK QSB0aG91c2FuZCBtaWxlIGpvdXJuZXkgc3RhcnRzIHdpdGggYSBzaW5nbGUgc3RlcC4gQSBqb3Vy bmV5IHRvCmVubGlnaHRlbm1lbnQgaXMgbm8gZXhjZXB0aW9uIGFuZCBvdXIgZmlyc3Qgc3RlcCBq dXN0IGhhcHBlbnMgdG8gYmUgWE1MLgpXaGF0IG1vcmUgY291bGQgcG9zc2libHkgYmUgc2FpZCBh Ym91dCBYTUwgdGhhdCBoYXNuJ3QgYWxyZWFkeSBiZWVuCnNhaWQ/IEl0IHR1cm5zIG91dCwgcXVp dGUgYSBiaXQuIFdoaWxlIHRoZXJlJ3Mgbm90aGluZyBwYXJ0aWN1bGFybHkKaW50ZXJlc3Rpbmcg YWJvdXQgWE1MIGl0c2VsZiwgaXRzIHJlbGF0aW9uc2hpcCB0byBMaXNwIGlzIGZhc2NpbmF0aW5n LgpYTUwgaXMgdGhlIGFsbCB0b28gZmFtaWxpYXIgY29uY2VwdCB0aGF0IExpc3AgYWR2b2NhdGVz IG5lZWQgc28gbXVjaC4gSXQKaXMgb3VyIGJyaWRnZSB0byBjb252ZXlpbmcgdW5kZXJzdGFuZGlu ZyB0byByZWd1bGFyIHByb2dyYW1tZXJzLiBTbwpsZXQncyByZXZpdmUgdGhlIGRlYWQgaG9yc2Us IHRha2Ugb3V0IHRoZSBzdGljaywgYW5kIHZlbnR1cmUgaW50byBYTUwKd2lsZGVybmVzcyB0aGF0 IG5vIG9uZSBkYXJlZCB2ZW50dXJlIGludG8gYmVmb3JlIHVzLiBJdCdzIHRpbWUgdG8gc2VlCnRo ZSBhbGwgdG9vIGZhbWlsaWFyIG1vb24gZnJvbSB0aGUgb3RoZXIgc2lkZS4KClN1cGVyZmljaWFs bHkgWE1MIGlzIG5vdGhpbmcgbW9yZSB0aGFuIGEgc3RhbmRhcmRpemVkIHN5bnRheCB1c2VkIHRv CmV4cHJlc3MgYXJiaXRyYXJ5IGhpZXJhcmNoaWNhbCBkYXRhIGluIGh1bWFuIHJlYWRhYmxlIGZv cm0uIFRvLWRvIGxpc3RzLAp3ZWIgcGFnZXMsIG1lZGljYWwgcmVjb3JkcywgYXV0byBpbnN1cmFu Y2UgY2xhaW1zLCBjb25maWd1cmF0aW9uIGZpbGVzCmFyZSBhbGwgZXhhbXBsZXMgb2YgcG90ZW50 aWFsIFhNTCB1c2UuIExldCdzIHVzZSBhIHNpbXBsZSB0by1kbyBsaXN0IGFzCmFuIGV4YW1wbGUg KGluIGEgY291cGxlIG9mIHNlY3Rpb25zIHlvdSdsbCBzZWUgaXQgaW4gYSB3aG9sZSBuZXcgbGln aHQpOgoKIytCRUdJTl9FWEFNUExFCiAgICA8dG9kbyBuYW1lPSJob3VzZXdvcmsiPgogICAgICAg IDxpdGVtIHByaW9yaXR5PSJoaWdoIj5DbGVhbiB0aGUgaG91c2UuPC9pdGVtPgogICAgICAgIDxp dGVtIHByaW9yaXR5PSJtZWRpdW0iPldhc2ggdGhlIGRpc2hlcy48L2l0ZW0+CiAgICAgICAgPGl0 ZW0gcHJpb3JpdHk9Im1lZGl1bSI+QnV5IG1vcmUgc29hcC48L2l0ZW0+CiAgICA8L3RvZG8+CiMr RU5EX0VYQU1QTEUKCldoYXQgaGFwcGVucyBpZiB3ZSB1bmxlYXNoIG91ciBmYXZvcml0ZSBYTUwg cGFyc2VyIG9uIHRoaXMgdG8tZG8gbGlzdD8KT25jZSB0aGUgZGF0YSBpcyBwYXJzZWQsIGhvdyBp cyBpdCByZXByZXNlbnRlZCBpbiBtZW1vcnk/IFRoZSBtb3N0Cm5hdHVyYWwgcmVwcmVzZW50YXRp b24gaXMsIG9mIGNvdXJzZSwgYSB0cmVlIC0gYSBwZXJmZWN0IGRhdGEgc3RydWN0dXJlCmZvciBo aWVyYXJjaGljYWwgZGF0YS4gQWZ0ZXIgYWxsIGlzIHNhaWQgYW5kIGRvbmUsIFhNTCBpcyByZWFs bHkganVzdCBhCnRyZWUgc2VyaWFsaXplZCB0byBhIGh1bWFuIHJlYWRhYmxlIGZvcm0uIEFueXRo aW5nIHRoYXQgY2FuIGJlCnJlcHJlc2VudGVkIGluIGEgdHJlZSBjYW4gYmUgcmVwcmVzZW50ZWQg aW4gWE1MIGFuZCB2aWNlIHZlcnNhLiBJIGhvcGUKeW91IHVuZGVyc3RhbmQgdGhpcyBpZGVhLiBJ dCdzIHZlcnkgaW1wb3J0YW50IGZvciB3aGF0J3MgY29taW5nIG5leHQuCgpMZXQncyB0YWtlIHRo aXMgYSBsaXR0bGUgZnVydGhlci4gV2hhdCBvdGhlciB0eXBlIG9mIGRhdGEgaXMgb2Z0ZW4KcmVw cmVzZW50ZWQgYXMgYSB0cmVlPyBBdCB0aGlzIHBvaW50IHRoZSBsaXN0IGlzIGFzIGdvb2QgYXMg aW5maW5pdGUgc28KSSdsbCBnaXZlIHlvdSBhIGhpbnQgYXQgd2hhdCBJJ20gZ2V0dGluZyBhdCAt IHRyeSB0byByZW1lbWJlciB5b3VyIG9sZApjb21waWxlciBjb3Vyc2UuIElmIHlvdSBoYXZlIGEg dmFndWUgcmVjb2xsZWN0aW9uIHRoYXQgc291cmNlIGNvZGUgaXMKc3RvcmVkIGluIGEgdHJlZSBh ZnRlciBpdCdzIHBhcnNlZCwgeW91J3JlIG9uIHRoZSByaWdodCB0cmFjay4gQW55CmNvbXBpbGVy IGluZXZpdGFibHkgcGFyc2VzIHRoZSBzb3VyY2UgY29kZSBpbnRvIGFuIGFic3RyYWN0IHN5bnRh eCB0cmVlLgpUaGlzIGlzbid0IHN1cnByaXNpbmcgc2luY2Ugc291cmNlIGNvZGUgaXMgaGllcmFy Y2hpY2FsOiBmdW5jdGlvbnMKY29udGFpbiBhcmd1bWVudHMgYW5kIGJsb2NrcyBvZiBjb2RlLiBC bG9ja3Mgb2YgY29kZSBjb250YWluIGV4cHJlc3Npb25zCmFuZCBzdGF0ZW1lbnRzLiBFeHByZXNz aW9ucyBjb250YWluIHZhcmlhYmxlcyBhbmQgb3BlcmF0b3JzLiBBbmQgc28gaXQKZ29lcy4KCkxl dCdzIGFwcGx5IG91ciBjb3JvbGxhcnkgdGhhdCBhbnkgdHJlZSBjYW4gZWFzaWx5IGJlIHNlcmlh bGl6ZWQgaW50bwpYTUwgdG8gdGhpcyBpZGVhLiBJZiBhbGwgc291cmNlIGNvZGUgaXMgZXZlbnR1 YWxseSByZXByZXNlbnRlZCBhcyBhCnRyZWUsIGFuZCBhbnkgdHJlZSBjYW4gYmUgc2VyaWFsaXpl ZCBpbnRvIFhNTCwgdGhlbiBhbGwgc291cmNlIGNvZGUgY2FuCmJlIGNvbnZlcnRlZCB0byBYTUws IHJpZ2h0PyBMZXQncyBpbGx1c3RyYXRlIHRoaXMgaW50ZXJlc3RpbmcgcHJvcGVydHkKYnkgYSBz aW1wbGUgZXhhbXBsZS4gQ29uc2lkZXIgdGhlIGZ1bmN0aW9uIGJlbG93OgoKIytCRUdJTl9FWEFN UExFCiAgICAgICAgICAgICAgICAgICAKICAgIGludCBhZGQoaW50IGFyZzEsIGludCBhcmcyKQog ICAgewogICAgICAgIHJldHVybiBhcmcxICsgYXJnMjsKICAgIH0KIytFTkRfRVhBTVBMRQoKQ2Fu IHlvdSBjb252ZXJ0IHRoaXMgZnVuY3Rpb24gZGVmaW5pdGlvbiB0byBpdHMgWE1MIGVxdWl2YWxl bnQ/IFR1cm5zCm91dCwgaXQncyByZWFzb25hYmx5IHNpbXBsZS4gTmF0dXJhbGx5IHRoZXJlIGFy ZSBtYW55IHdheXMgdG8gZG8gdGhpcy4KSGVyZSBpcyBvbmUgd2F5IHRoZSByZXN1bHRpbmcgWE1M IGNhbiBsb29rIGxpa2U6CgojK0JFR0lOX0VYQU1QTEUKICAgIDxkZWZpbmUtZnVuY3Rpb24gcmV0 dXJuLXR5cGU9ImludCIgbmFtZT0iYWRkIj4KICAgICAgICA8YXJndW1lbnRzPgogICAgICAgICAg ICA8YXJndW1lbnQgdHlwZT0iaW50Ij5hcmcxPC9hcmd1bWVudD4KICAgICAgICAgICAgPGFyZ3Vt ZW50IHR5cGU9ImludCI+YXJnMjwvYXJndW1lbnQ+CiAgICAgICAgPC9hcmd1bWVudHM+CiAgICAg ICAgPGJvZHk+CiAgICAgICAgICAgIDxyZXR1cm4+CiAgICAgICAgICAgICAgICA8YWRkIHZhbHVl MT0iYXJnMSIgdmFsdWUyPSJhcmcyIiAvPgogICAgICAgICAgICA8L3JldHVybj4KICAgICAgICA8 L2JvZHk+CiAgICA8L2RlZmluZT4KIytFTkRfRVhBTVBMRQoKV2UgY2FuIGdvIHRocm91Z2ggdGhp cyByZWxhdGl2ZWx5IHNpbXBsZSBleGVyY2lzZSB3aXRoIGFueSBsYW5ndWFnZS4gV2UKY2FuIHR1 cm4gYW55IHNvdXJjZSBjb2RlIGludG8gWE1MLCBhbmQgd2UgY2FuIHRyYW5zZm9ybSB0aGUgcmVz dWx0aW5nClhNTCBiYWNrIHRvIG9yaWdpbmFsIHNvdXJjZSBjb2RlLiBXZSBjYW4gd3JpdGUgYSBj b252ZXJ0ZXIgdGhhdCB0dXJucwpKYXZhIGludG8gWE1MIGFuZCBhIGNvbnZlcnRlciB0aGF0IHR1 cm5zIFhNTCBiYWNrIHRvIEphdmEuIFdlIGNvdWxkIGRvCnRoZSBzYW1lIGZvciBDKysuIChJbiBj YXNlIHlvdSdyZSB3b25kZXJpbmcgaWYgYW55b25lIGlzIGNyYXp5IGVub3VnaCB0bwpkbyBpdCwg dGFrZSBhIGxvb2sgYXQgW1todHRwOi8vd3d3LmdjY3htbC5vcmddW0dDQy1YTUxdXSkuIEZ1cnRo ZXJtb3JlLApmb3IgbGFuZ3VhZ2VzIHRoYXQgc2hhcmUgY29tbW9uIGZlYXR1cmVzIGJ1dCB1c2Ug ZGlmZmVyZW50IHN5bnRheCAod2hpY2gKdG8gc29tZSBleHRlbnQgaXMgdHJ1ZSBhYm91dCBtb3N0 IG1haW5zdHJlYW0gbGFuZ3VhZ2VzKSB3ZSBjb3VsZCBjb252ZXJ0CnNvdXJjZSBjb2RlIGZyb20g b25lIGxhbmd1YWdlIHRvIGFub3RoZXIgdXNpbmcgWE1MIGFzIGFuIGludGVybWVkaWFyeQpyZXBy ZXNlbnRhdGlvbi4gV2UgY291bGQgdXNlIG91ciBKYXZhMlhNTCBjb252ZXJ0ZXIgdG8gY29udmVy dCBhIEphdmEKcHJvZ3JhbSB0byBYTUwuIFdlIGNvdWxkIHRoZW4gcnVuIGFuIFhNTDJDUFAgY29u dmVydGVyIG9uIHRoZSByZXN1bHRpbmcKWE1MIGFuZCB0dXJuIGl0IGludG8gQysrIGNvZGUuIFdp dGggYW55IGx1Y2sgKGlmIHdlIGF2b2lkIHVzaW5nIGZlYXR1cmVzCm9mIEphdmEgdGhhdCBkb24n dCBleGlzdCBpbiBDKyspIHdlJ2xsIGdldCBhIHdvcmtpbmcgQysrIHByb2dyYW0uIE5lYXQsCmVo PwoKQWxsIHRoaXMgZWZmZWN0aXZlbHkgbWVhbnMgdGhhdCB3ZSBjYW4gdXNlIFhNTCBmb3IgZ2Vu ZXJpYyBzdG9yYWdlIG9mCnNvdXJjZSBjb2RlLiBXZSdkIGJlIGFibGUgdG8gY3JlYXRlIGEgd2hv bGUgY2xhc3Mgb2YgcHJvZ3JhbW1pbmcKbGFuZ3VhZ2VzIHRoYXQgdXNlIHVuaWZvcm0gc3ludGF4 LCBhcyB3ZWxsIGFzIHdyaXRlIHRyYW5zZm9ybWVycyB0aGF0CmNvbnZlcnQgZXhpc3Rpbmcgc291 cmNlIGNvZGUgdG8gWE1MLiBJZiB3ZSB3ZXJlIHRvIGFjdHVhbGx5IGFkb3B0IHRoaXMKaWRlYSwg Y29tcGlsZXJzIGZvciBkaWZmZXJlbnQgbGFuZ3VhZ2VzIHdvdWxkbid0IG5lZWQgdG8gaW1wbGVt ZW50CnBhcnNlcnMgZm9yIHRoZWlyIHNwZWNpZmljIGdyYW1tYXJzIC0gdGhleSdkIHNpbXBseSB1 c2UgYW4gWE1MIHBhcnNlciB0bwp0dXJuIFhNTCBkaXJlY3RseSBpbnRvIGFuIGFic3RyYWN0IHN5 bnRheCB0cmVlLgoKQnkgbm93IHlvdSdyZSBwcm9iYWJseSB3b25kZXJpbmcgd2h5IEkndmUgZW1i YXJrZWQgb24gdGhlIFhNTCBjcnVzYWRlCmFuZCB3aGF0IGl0IGhhcyB0byBkbyB3aXRoIExpc3Ag KGFmdGVyIGFsbCwgTGlzcCB3YXMgY3JlYXRlZCBhYm91dAp0aGlydHkgeWVhcnMgYmVmb3JlIFhN TCkuIEkgcHJvbWlzZSB0aGF0IGV2ZXJ5dGhpbmcgd2lsbCBiZWNvbWUgY2xlYXIKc29vbiBlbm91 Z2guIEJ1dCBiZWZvcmUgd2UgdGFrZSBvdXIgc2Vjb25kIHN0ZXAsIGxldCdzIGdvIHRocm91Z2gg YQpzbWFsbCBwaGlsb3NvcGhpY2FsIGV4ZXJjaXNlLiBUYWtlIGEgZ29vZCBsb29rIGF0IHRoZSBY TUwgdmVyc2lvbiBvZiBvdXIKImFkZCIgZnVuY3Rpb24gYWJvdmUuIEhvdyB3b3VsZCB5b3UgY2xh c3NpZnkgaXQ/IElzIGl0IGRhdGEgb3IgY29kZT8gSWYKeW91IHRoaW5rIGFib3V0IGl0IGZvciBh IG1vbWVudCB5b3UnbGwgcmVhbGl6ZSB0aGF0IHRoZXJlIGFyZSBnb29kCnJlYXNvbnMgdG8gcHV0 IHRoaXMgWE1MIHNuaXBwZXQgaW50byBib3RoIGNhdGVnb3JpZXMuIEl0J3MgWE1MIGFuZCBpdCdz Cmp1c3QgaW5mb3JtYXRpb24gZW5jb2RlZCBpbiBhIHN0YW5kYXJkaXplZCBmb3JtYXQuIFdlJ3Zl IGFscmVhZHkKZGV0ZXJtaW5lZCB0aGF0IGl0IGNhbiBiZSBnZW5lcmF0ZWQgZnJvbSBhIHRyZWUg ZGF0YSBzdHJ1Y3R1cmUgaW4gbWVtb3J5Cih0aGF0J3MgZWZmZWN0aXZlbHkgd2hhdCBHQ0MtWE1M IGRvZXMpLiBJdCdzIGx5aW5nIGFyb3VuZCBpbiBhIGZpbGUgd2l0aApubyBhcHBhcmVudCB3YXkg dG8gZXhlY3V0ZSBpdC4gV2UgY2FuIHBhcnNlIGl0IGludG8gYSB0cmVlIG9mIFhNTCBub2Rlcwph bmQgZG8gdmFyaW91cyB0cmFuc2Zvcm1hdGlvbnMgb24gaXQuIEl0J3MgZGF0YS4gQnV0IHdhaXQg YSBtb21lbnQhIFdoZW4KYWxsIGlzIHNhaWQgYW5kIGRvbmUgaXQncyB0aGUgc2FtZSAiYWRkIiBm dW5jdGlvbiB3cml0dGVuIHdpdGggYQpkaWZmZXJlbnQgc3ludGF4LCByaWdodD8gT25jZSBwYXJz ZWQsIGl0cyB0cmVlIGNvdWxkIGJlIGZlZCBpbnRvIGEKY29tcGlsZXIgYW5kIHdlIGNvdWxkIGV4 ZWN1dGUgaXQuIFdlIGNvdWxkIGVhc2lseSB3cml0ZSBhIHNtYWxsCmludGVycHJldGVyIGZvciB0 aGlzIFhNTCBjb2RlIGFuZCB3ZSBjb3VsZCBleGVjdXRlIGl0IGRpcmVjdGx5LgpBbHRlcm5hdGl2 ZWx5LCB3ZSBjb3VsZCB0cmFuc2Zvcm0gaXQgaW50byBKYXZhIG9yIEMrKyBjb2RlLCBjb21waWxl IGl0LAphbmQgcnVuIGl0LiBJdCdzIGNvZGUuCgpTbywgd2hlcmUgYXJlIHdlPyBMb29rcyBsaWtl IHdlJ3ZlIGp1c3QgYXJyaXZlZCB0byBhbiBpbnRlcmVzdGluZyBwb2ludC4KQSBjb25jZXB0IHRo YXQgaGFzIHRyYWRpdGlvbmFsbHkgYmVlbiBzbyBoYXJkIHRvIHVuZGVyc3RhbmQgaXMgbm93CmFt YXppbmdseSBzaW1wbGUgYW5kIGludHVpdGl2ZS4gQ29kZSBpcyBhbHNvIGFsd2F5cyBkYXRhISBE b2VzIGl0IG1lYW4KdGhhdCBkYXRhIGlzIGFsc28gYWx3YXlzIGNvZGU/IEFzIGNyYXp5IGFzIHRo aXMgc291bmRzIHRoaXMgdmVyeSB3ZWxsCm1pZ2h0IGJlIHRoZSBjYXNlLiBSZW1lbWJlciBob3cg SSBwcm9taXNlZCB0aGF0IHlvdSdsbCBzZWUgb3VyIHRvLWRvCmxpc3QgaW4gYSB3aG9sZSBuZXcg bGlnaHQ/IExldCBtZSByZWl0ZXJhdGUgb24gdGhhdCBwcm9taXNlLiBCdXQgd2UKYXJlbid0IHJl YWR5IHRvIGRpc2N1c3MgdGhpcyBqdXN0IHlldC4gRm9yIG5vdyBsZXQncyBjb250aW51ZSB3YWxr aW5nCmRvd24gb3VyIHBhdGguCgpBIGxpdHRsZSBlYXJsaWVyIEkgbWVudGlvbmVkIHRoYXQgd2Ug Y291bGQgZWFzaWx5IHdyaXRlIGFuIGludGVycHJldGVyCnRvIGV4ZWN1dGUgb3VyIFhNTCBzbmlw cGV0IG9mIHRoZSBhZGQgZnVuY3Rpb24uIE9mIGNvdXJzZSB0aGlzIHNvdW5kcwpsaWtlIGEgcHVy ZWx5IHRoZW9yZXRpY2FsIGV4ZXJjaXNlLiBXaG8gaW4gdGhlaXIgcmlnaHQgbWluZCB3b3VsZCB3 YW50CnRvIGRvIHRoYXQgZm9yIHByYWN0aWNhbCBwdXJwb3Nlcz8gV2VsbCwgaXQgdHVybnMgb3V0 IHF1aXRlIGEgZmV3IHBlb3BsZQp3b3VsZCBkaXNhZ3JlZS4gWW91J3ZlIGxpa2VseSBlbmNvdW50 ZXJlZCBhbmQgdXNlZCB0aGVpciB3b3JrIGF0IGxlYXN0Cm9uY2UgaW4geW91ciBjYXJlZXIsIHRv by4gRG8gSSBoYXZlIHlvdSBvdXQgb24gdGhlIGVkZ2Ugb2YgeW91ciBzZWF0PyBJZgpzbywgbGV0 J3MgbW92ZSBvbiEKCiogQW50IFJlbG9hZGVkCgpOb3cgdGhhdCB3ZSd2ZSBtYWRlIHRoZSB0cmlw IHRvIHRoZSBkYXJrIHNpZGUgb2YgdGhlIG1vb24sIGxldCdzIG5vdApsZWF2ZSBxdWl0ZSB5ZXQu IFdlIG1heSBzdGlsbCBsZWFybiBzb21ldGhpbmcgYnkgZXhwbG9yaW5nIGl0IGEgbGl0dGxlCm1v cmUsIHNvIGxldCdzIHRha2UgYW5vdGhlciBzdGVwLiBXZSBiZWdpbiBieSBjbG9zaW5nIG91ciBl eWVzIGFuZApyZW1lbWJlcmluZyBhIGNvbGQgcmFpbnkgbmlnaHQgaW4gdGhlIHdpbnRlciBvZiAy MDAwLiBBIHByb21pbmVudApkZXZlbG9wZXIgYnkgdGhlIG5hbWUgb2YgSmFtZXMgRHVuY2FuIERh dmlkc29uW2ZuOjFdIHdhcwpoYWNraW5nIGhpcyB3YXkgdGhyb3VnaCBbW2h0dHA6Ly90b21jYXQu YXBhY2hlLm9yZy9dW1RvbWNhdF1dIHNlcnZsZXQKY29udGFpbmVyLiBBcyB0aGUgdGltZSBjYW1l IHRvIGJ1aWxkIHRoZSBjaGFuZ2VzIGhlIGNhcmVmdWxseSBzYXZlZCBhbGwKaGlzIGZpbGVzIGFu ZCByYW4gL21ha2UvLiBFcnJvcnMuIExvdHMgb2YgZXJyb3JzLiBTb21ldGhpbmcgd2FzIHdyb25n LgpBZnRlciBjYXJlZnVsIGV4YW1pbmF0aW9uIEphbWVzIGV4Y2xhaW1lZDogIklzIG15IGNvbW1h bmQgbm90IGV4ZWN1dGluZwpiZWNhdXNlIEkgaGF2ZSBhIHNwYWNlIGluIGZyb250IG9mIG15IHRh Yj8hIiBJbmRlZWQsIHRoaXMgd2FzIHRoZQpwcm9ibGVtLiBBZ2Fpbi4gSmFtZXMgaGFzIGhhZCBl bm91Z2guIEhlIGNvdWxkIHNlbnNlIHRoZSBmdWxsIG1vb24KdGhyb3VnaCB0aGUgY2xvdWRzIGFu ZCBpdCBtYWRlIGhpbSBhZHZlbnR1cm91cy4gSGUgY3JlYXRlZCBhIGZyZXNoIEphdmEKcHJvamVj dCBhbmQgcXVpY2tseSBoYWNrZWQgdG9nZXRoZXIgYSBzaW1wbGUgYnV0IHN1cnByaXNpbmdseSB1 c2VmdWwKdXRpbGl0eS4gVGhpcyBzcGFyayBvZiBnZW5pdXMgdXNlZCBKYXZhIHByb3BlcnR5IGZp bGVzIGZvciBpbmZvcm1hdGlvbgpvbiBob3cgdG8gYnVpbGQgdGhlIHByb2plY3QuIEphbWVzIGNv dWxkIG5vdyB3cml0ZSB0aGUgZXF1aXZhbGVudCBvZiB0aGUKbWFrZWZpbGUgaW4gYSBuaWNlIGZv cm1hdCB3aXRob3V0IHdvcnJ5aW5nIGFib3V0IHRoZSBkYW1uZWQgc3BhY2VzIGV2ZXIKYWdhaW4u IEhpcyB1dGlsaXR5IGRpZCBhbGwgdGhlIGhhcmQgd29yayBieSBpbnRlcnByZXRpbmcgdGhlIHBy b3BlcnR5CmZpbGUgYW5kIHRha2luZyBhcHByb3ByaWF0ZSBhY3Rpb25zIHRvIGJ1aWxkIHRoZSBw cm9qZWN0LiBJdCB3YXMgbmVhdC4KQW5vdGhlciBOZWF0IFRvb2wuIFtbaHR0cDovL2FudC5hcGFj aGUub3JnL11bQW50XV0uCgpBZnRlciB1c2luZyBBbnQgdG8gYnVpbGQgVG9tY2F0IGZvciBhIGZl dyBtb250aHMgaXQgYmVjYW1lIGNsZWFyIHRoYXQKSmF2YSBwcm9wZXJ0eSBmaWxlcyBhcmUgbm90 IHN1ZmZpY2llbnQgdG8gZXhwcmVzcyBjb21wbGljYXRlZCBidWlsZAppbnN0cnVjdGlvbnMuIEZp bGVzIG5lZWRlZCB0byBiZSBjaGVja2VkIG91dCwgY29waWVkLCBjb21waWxlZCwgc2VudCB0bwph bm90aGVyIG1hY2hpbmUsIGFuZCB1bml0IHRlc3RlZC4gSW4gY2FzZSBvZiBmYWlsdXJlIGUtbWFp bHMgbmVlZGVkIHRvCmJlIHNlbnQgb3V0IHRvIGFwcHJvcHJpYXRlIHBlb3BsZS4gSW4gY2FzZSBv ZiBzdWNjZXNzICJCYWQgdG8gdGhlIEJvbmUiCm5lZWRlZCB0byBiZSBwbGF5ZWQgYXQgdGhlIGhp Z2hlc3QgcG9zc2libGUgdm9sdW1lLiBBdCB0aGUgZW5kIG9mIHRoZQp0cmFjayB2b2x1bWUgaGFk IHRvIGJlIHJlc3RvcmVkIHRvIGl0cyBvcmlnaW5hbCBsZXZlbC4gWWVzLCBKYXZhCnByb3BlcnR5 IGZpbGVzIGRpZG4ndCBjdXQgaXQgYW55bW9yZS4gSmFtZXMgbmVlZGVkIGEgbW9yZSBmbGV4aWJs ZQpzb2x1dGlvbi4gSGUgZGlkbid0IGZlZWwgbGlrZSB3cml0aW5nIGhpcyBvd24gcGFyc2VyIChl c3BlY2lhbGx5IHNpbmNlCmhlIHdhbnRlZCBhbiBpbmR1c3RyeSBzdGFuZGFyZCBzb2x1dGlvbiku IFhNTCBzZWVtZWQgbGlrZSBhIHJlYXNvbmFibGUKYWx0ZXJuYXRpdmUuIEluIGEgY291cGxlIG9m IGRheXMgQW50IHdhcyBwb3J0ZWQgdG8gWE1MLiBJdCB3YXMgdGhlIGJlc3QKdGhpbmcgc2luY2Ug c2xpY2VkIGJyZWFkLgoKU28gaG93IGRvZXMgQW50IHdvcms/IEl0J3MgcHJldHR5IHNpbXBsZS4g SXQgdGFrZXMgYW4gWE1MIGZpbGUgd2l0aApzcGVjaWZpYyBidWlsZCBpbnN0cnVjdGlvbnMgKHlv dSBkZWNpZGUgaWYgdGhleSdyZSBkYXRhIG9yIGNvZGUpIGFuZAppbnRlcnByZXRzIHRoZW0gYnkg cnVubmluZyBzcGVjaWFsaXplZCBKYXZhIGNvZGUgZm9yIGVhY2ggWE1MIGVsZW1lbnQuCkl0J3Mg YWN0dWFsbHkgbXVjaCBzaW1wbGVyIHRoYW4gaXQgc291bmRzLiBBIHNpbXBsZSBYTUwgaW5zdHJ1 Y3Rpb24gbGlrZQp0aGUgb25lIGJlbG93IGNhdXNlcyBhIEphdmEgY2xhc3Mgd2l0aCBhbiBlcXVp dmFsZW50IG5hbWUgdG8gYmUgbG9hZGVkCmFuZCBpdHMgY29kZSB0byBiZSBleGVjdXRlZC4KCiMr QkVHSU5fRVhBTVBMRQogICAgPGNvcHkgdG9kaXI9Ii4uL25ldy9kaXIiPgogICAgICAgIDxmaWxl c2V0IGRpcj0ic3JjX2RpciIvPgogICAgPC9jb3B5PgojK0VORF9FWEFNUExFCgpUaGUgc25pcHBl dCBhYm92ZSBjb3BpZXMgYSBzb3VyY2UgZGlyZWN0b3J5IHRvIGEgZGVzdGluYXRpb24gZGlyZWN0 b3J5LgpBbnQgbG9jYXRlcyBhICJjb3B5IiB0YXNrIChhIEphdmEgY2xhc3MsIHJlYWxseSksIHNl dHMgYXBwcm9wcmlhdGUKcGFyYW1ldGVycyAodG9kaXIgYW5kIGZpbGVzZXQpIGJ5IGNhbGxpbmcg YXBwcm9wcmlhdGUgSmF2YSBtZXRob2RzIGFuZAp0aGVuIGV4ZWN1dGVzIHRoZSB0YXNrLiBBbnQg Y29tZXMgd2l0aCBhIHNldCBvZiBjb3JlIHRhc2tzIGFuZCBhbnlvbmUKY2FuIGV4dGVuZCBpdCB3 aXRoIHRhc2tzIG9mIHRoZWlyIG93biBzaW1wbHkgYnkgd3JpdGluZyBKYXZhIGNsYXNzZXMKdGhh dCBmb2xsb3cgY2VydGFpbiBjb252ZW50aW9ucy4gQW50IGZpbmRzIHRoZXNlIGNsYXNzZXMgYW5k IGV4ZWN1dGVzCnRoZW0gd2hlbmV2ZXIgWE1MIGVsZW1lbnRzIHdpdGggYXBwcm9wcmlhdGUgbmFt ZXMgYXJlIGVuY291bnRlcmVkLgpQcmV0dHkgc2ltcGxlLiBFZmZlY3RpdmVseSBBbnQgYWNjb21w bGlzaGVzIHdoYXQgd2Ugd2VyZSB0YWxraW5nIGFib3V0CmluIHRoZSBwcmV2aW91cyBzZWN0aW9u OiBpdCBhY3RzIGFzIGFuIGludGVycHJldGVyIGZvciBhIGxhbmd1YWdlIHRoYXQKdXNlcyBYTUwg YXMgaXRzIHN5bnRheCBieSB0cmFuc2xhdGluZyBYTUwgZWxlbWVudHMgdG8gYXBwcm9wcmlhdGUg SmF2YQppbnN0cnVjdGlvbnMuIFdlIGNvdWxkIHdyaXRlIGFuICJhZGQiIHRhc2sgYW5kIGhhdmUg QW50IGV4ZWN1dGUgaXQgd2hlbgppdCBlbmNvdW50ZXJzIHRoZSBYTUwgc25pcHBldCBmb3IgYWRk aXRpb24gcHJlc2VudGVkIGluIHRoZSBwcmV2aW91cwpzZWN0aW9uISBDb25zaWRlcmluZyB0aGF0 IEFudCBpcyBhbiBleHRyZW1lbHkgcG9wdWxhciBwcm9qZWN0LCB0aGUgaWRlYXMKcHJlc2VudGVk IGluIHRoZSBwcmV2aW91cyBzZWN0aW9uIHN0YXJ0IGxvb2tpbmcgbW9yZSBzYW5lLiBBZnRlciBh bGwsCnRoZXkncmUgYmVpbmcgdXNlZCBldmVyeSBkYXkgaW4gd2hhdCBwcm9iYWJseSBhbW91bnRz IHRvIHRob3VzYW5kcyBvZgpjb21wYW5pZXMhCgpTbyBmYXIgSSd2ZSBzYWlkIG5vdGhpbmcgYWJv dXQgd2h5IEFudCBhY3R1YWxseSBnb2VzIHRocm91Z2ggYWxsIHRoZQp0cm91YmxlIG9mIGludGVy cHJldGluZyBYTUwuIERvbid0IHRyeSB0byBsb29rIGZvciB0aGUgYW5zd2VyIG9uIGl0cwp3ZWJz aXRlIGVpdGhlciAtIHlvdSdsbCBmaW5kIG5vdGhpbmcgb2YgdmFsdWUuIE5vdGhpbmcgcmVsZXZh bnQgdG8gb3VyCmRpc2N1c3Npb24sIGFueXdheS4gTGV0J3MgdGFrZSBhbm90aGVyIHN0ZXAuIEl0 J3MgdGltZSB0byBmaW5kIG91dCB3aHkuCgoqIFdoeSBYTUw/CgpTb21ldGltZXMgcmlnaHQgZGVj aXNpb25zIGFyZSBtYWRlIHdpdGhvdXQgZnVsbCBjb25zY2lvdXMgdW5kZXJzdGFuZGluZwpvZiBh bGwgdGhlIGlzc3VlcyBpbnZvbHZlZC4gSSdtIG5vdCBzdXJlIGlmIEphbWVzIGtuZXcgd2h5IGhl IGNob3NlIFhNTAotIGl0IHdhcyBsaWtlbHkgYSBzdWJjb25zY2lvdXMgZGVjaXNpb24uIEF0IHRo ZSB2ZXJ5IGxlYXN0LCB0aGUgcmVhc29ucwpJIHNhdyBvbiBBbnQncyB3ZWJzaXRlIGZvciB1c2lu ZyBYTUwgYXJlIGFsbCB0aGUgd3JvbmcgcmVhc29ucy4gSXQKYXBwZWFycyB0aGF0IHRoZSBtYWlu IGNvbmNlcm5zIHJldm9sdmVkIGFyb3VuZCBwb3J0YWJpbGl0eSBhbmQKZXh0ZW5zaWJpbGl0eS4g SSBmYWlsIHRvIHNlZSBob3cgWE1MIGhlbHBzIGFkdmFuY2UgdGhlc2UgZ29hbHMgaW4gQW50J3MK Y2FzZS4gV2hhdCBpcyB0aGUgYWR2YW50YWdlIG9mIHVzaW5nIGludGVycHJldGVkIFhNTCBvdmVy IHNpbXBsZSBKYXZhCnNvdXJjZSBjb2RlPyBXaHkgbm90IGNyZWF0ZSBhIHNldCBvZiBjbGFzc2Vz IHdpdGggYSBuaWNlIEFQSSBmb3IKY29tbW9ubHkgdXNlZCB0YXNrcyAoY29weWluZyBkaXJlY3Rv cmllcywgY29tcGlsaW5nLCBldGMuKSBhbmQgdXNpbmcKdGhvc2UgZGlyZWN0bHkgZnJvbSBKYXZh IHNvdXJjZSBjb2RlPyBUaGlzIHdvdWxkIHJ1biBvbiBldmVyeSBwbGF0Zm9ybQp0aGF0IHJ1bnMg SmF2YSAod2hpY2ggQW50IHJlcXVpcmVzIGFueXdheSksIGl0J3MgaW5maW5pdGVseSBleHRlbnNp YmxlLAphbmQgaXQgaGFzIHRoZSBiZW5lZml0IG9mIGhhdmluZyBhIG1vcmUgcGxlYXNhbnQsIGZh bWlsaWFyIHN5bnRheC4gU28Kd2h5IFhNTD8gQ2FuIHdlIGZpbmQgYSBnb29kIHJlYXNvbiBmb3Ig dXNpbmcgaXQ/CgpJdCB0dXJucyBvdXQgdGhhdCB3ZSBjYW4gKGFsdGhvdWdoIGFzIEkgbWVudGlv bmVkIGVhcmxpZXIgSSdtIG5vdCBzdXJlCmlmIEphbWVzIHdhcyBjb25zY2lvdXNseSBhd2FyZSBv ZiBpdCkuIFhNTCBoYXMgdGhlIHByb3BlcnR5IG9mIGJlaW5nIGZhcgptb3JlIGZsZXhpYmxlIGlu IHRlcm1zIG9mIGludHJvZHVjdGlvbiBvZiBzZW1hbnRpYyBjb25zdHJ1Y3RzIHRoYW4gSmF2YQpj b3VsZCBldmVyIGhvcGUgdG8gYmUuIERvbid0IHdvcnJ5LCBJJ20gbm90IGZhbGxpbmcgaW50byB0 aGUgdHJhcCBvZgp1c2luZyBiaWcgd29yZHMgdG8gZGVzY3JpYmUgaW5jb21wcmVoZW5zaWJsZSBj b25jZXB0cy4gVGhpcyBpcyBhY3R1YWxseQphIHJlbGF0aXZlbHkgc2ltcGxlIGlkZWEsIHRob3Vn aCBpdCBtYXkgdGFrZSBzb21lIGVmZm9ydCB0byBleHBsYWluLgpCdWNrbGUgeW91ciBzZWF0LWJl bHQuIFdlJ3JlIGFib3V0IHRvIG1ha2UgYSBnaWFudCBsZWFwIHRvd2FyZHMKYWNoaWV2aW5nIG5p cnZhbmEuCgpIb3cgY2FuIHdlIHJlcHJlc2VudCAnY29weScgZXhhbXBsZSBhYm92ZSBpbiBKYXZh IGNvZGU/IEhlcmUncyBvbmUgd2F5CnRvIGRvIGl0OgoKIytCRUdJTl9FWEFNUExFCiAgICBDb3B5 VGFzayBjb3B5ID0gbmV3IENvcHlUYXNrKCk7CiAgICBGaWxlc2V0IGZpbGVzZXQgPSBuZXcgRmls ZXNldCgpOwoKICAgIGZpbGVzZXQuc2V0RGlyKCJzcmNfZGlyIik7CiAgICBjb3B5LnNldFRvRGly KCIuLi9uZXcvZGlyIik7CiAgICBjb3B5LnNldEZpbGVzZXQoZmlsZXNldCk7CgogICAgY29weS5l eGVjdXRlKCk7CiMrRU5EX0VYQU1QTEUKClRoZSBjb2RlIGlzIGFsbW9zdCB0aGUgc2FtZSwgYWxi ZWl0IGEgbGl0dGxlIGxvbmdlciB0aGFuIHRoZSBvcmlnaW5hbApYTUwuIFNvIHdoYXQncyBkaWZm ZXJlbnQ/IFRoZSBhbnN3ZXIgaXMgdGhhdCB0aGUgWE1MIHNuaXBwZXQgaW50cm9kdWNlcwphIHNw ZWNpYWwgc2VtYW50aWMgY29uc3RydWN0IGZvciBjb3B5aW5nLiBJZiB3ZSBjb3VsZCBkbyBpdCBp biBKYXZhIGl0CndvdWxkIGxvb2sgbGlrZSB0aGlzOgoKIytCRUdJTl9FWEFNUExFCiAgICAgICAg ICAgCiAgICBjb3B5KCIuLi9uZXcvZGlyIikKICAgIHsKICAgICAgICBmaWxlc2V0KCJzcmNfZGly Iik7CiAgICB9CiMrRU5EX0VYQU1QTEUKCkNhbiB5b3Ugc2VlIHRoZSBkaWZmZXJlbmNlPyBUaGUg Y29kZSBhYm92ZSAoaWYgaXQgd2VyZSBwb3NzaWJsZSBpbiBKYXZhKQppcyBhIHNwZWNpYWwgb3Bl cmF0b3IgZm9yIGNvcHlpbmcgZmlsZXMgLSBzaW1pbGFyIHRvIGEgL2Zvci8gbG9vcCBvciBhCm5l dyAvZm9yZWFjaC8gY29uc3RydWN0IGludHJvZHVjZWQgaW4gSmF2YSA1LiBJZiB3ZSBoYWQgYW4g YXV0b21hdGljCmNvbnZlcnRlciBmcm9tIFhNTCB0byBKYXZhIGl0IHdvdWxkIGxpa2VseSBwcm9k dWNlIHRoZSBhYm92ZSBnaWJiZXJpc2guClRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCBKYXZh J3MgYWNjZXB0ZWQgc3ludGF4IHRyZWUgZ3JhbW1hciBpcyBmaXhlZApieSB0aGUgbGFuZ3VhZ2Ug c3BlY2lmaWNhdGlvbiAtIHdlIGhhdmUgbm8gd2F5IG9mIG1vZGlmeWluZyBpdC4gV2UgY2FuCmFk ZCBwYWNrYWdlcywgY2xhc3NlcywgbWV0aG9kcywgYnV0IHdlIGNhbm5vdCBleHRlbmQgSmF2YSB0 byBtYWtlCmFkZGl0aW9uIG9mIG5ldyBvcGVyYXRvcnMgcG9zc2libGUuIFlldCB3ZSBjYW4gZG8g aXQgdG8gb3VyIGhlYXJ0J3MKY29udGVudCBpbiBYTUwgLSBpdHMgc3ludGF4IHRyZWUgaXNuJ3Qg cmVzdHJpY3RlZCBieSBhbnl0aGluZyBleGNlcHQgb3VyCmludGVycHJldGVyISBJZiB0aGUgaWRl YSBpcyBzdGlsbCB1bmNsZWFyLCBjb25zaWRlciBpbnRyb2R1Y2luZyBhCnNwZWNpYWwgb3BlcmF0 b3IgJ3VubGVzcycgdG8gSmF2YToKCiMrQkVHSU5fRVhBTVBMRQogICAgICAgICAgICAgICAgICAg CiAgICB1bmxlc3Moc29tZU9iamVjdC5jYW5GbHkoKSkKICAgIHsKICAgICAgICBzb21lT2JqZWN0 LnRyYW5zcG9ydEJ5R3JvdW5kKCk7CiAgICB9CiMrRU5EX0VYQU1QTEUKCkluIHRoZSBwcmV2aW91 cyB0d28gZXhhbXBsZXMgd2UgZXh0ZW5kIHRoZSBKYXZhIGxhbmd1YWdlIHRvIGludHJvZHVjZSBh bgpvcGVyYXRvciBmb3IgY29weWluZyBmaWxlcyBhbmQgYSBjb25kaXRpb25hbCBvcGVyYXRvciAv dW5sZXNzLy4gV2Ugd291bGQKZG8gdGhpcyBieSBtb2RpZnlpbmcgdGhlIGFic3RyYWN0IHN5bnRh eCB0cmVlIGdyYW1tYXIgdGhhdCBKYXZhIGNvbXBpbGVyCmFjY2VwdHMuIE5hdHVyYWxseSB3ZSBj YW5ub3QgZG8gaXQgd2l0aCBzdGFuZGFyZCBKYXZhIGZhY2lsaXRpZXMsIGJ1dCB3ZQpjYW4gZWFz aWx5IGRvIGl0IGluIFhNTC4gQmVjYXVzZSBvdXIgWE1MIGludGVycHJldGVyIHBhcnNlcyB0aGUg YWJzdHJhY3QKc3ludGF4IHRyZWUgdGhhdCByZXN1bHRzIGZyb20gaXQsIHdlIGNhbiBleHRlbmQg aXQgdG8gaW5jbHVkZSBhbnkKb3BlcmF0b3Igd2UgbGlrZS4KCkZvciBjb21wbGV4IG9wZXJhdG9y cyB0aGlzIGFiaWxpdHkgcHJvdmlkZXMgdHJlbWVuZG91cyBiZW5lZml0cy4gQ2FuIHlvdQppbWFn aW5lIHdyaXRpbmcgc3BlY2lhbCBvcGVyYXRvcnMgZm9yIGNoZWNraW5nIG91dCBzb3VyY2UgY29k ZSwKY29tcGlsaW5nIGZpbGVzLCBydW5uaW5nIHVuaXQgdGVzdGluZywgc2VuZGluZyBlbWFpbD8g VHJ5IHRvIGNvbWUgdXAKd2l0aCBzb21lLiBJZiB5b3UncmUgZGVhbGluZyB3aXRoIGEgc3BlY2lh bGl6ZWQgcHJvYmxlbSAoaW4gb3VyIGNhc2UKaXQncyBidWlsZGluZyBwcm9qZWN0cykgdGhlc2Ug b3BlcmF0b3JzIGNhbiBkbyB3b25kZXJzIHRvIGRlY3JlYXNlIHRoZQphbW91bnQgb2YgY29kZSB5 b3UgaGF2ZSB0byB0eXBlIGFuZCB0byBpbmNyZWFzZSBjbGFyaXR5IGFuZCBjb2RlIHJldXNlLgpJ bnRlcnByZXRlZCBYTUwgbWFrZXMgdGhpcyBleHRyZW1lbHkgZWFzeSB0byBhY2NvbXBsaXNoIGJl Y2F1c2UgaXQncyBhCnNpbXBsZSBkYXRhIGZpbGUgdGhhdCBzdG9yZXMgaGllcmFyY2hpY2FsIGRh dGEuIFdlIGRvIG5vdCBoYXZlIHRoaXMKb3B0aW9uIGluIEphdmEgYmVjYXVzZSBpdCdzIGhpZXJh cmNoaWNhbCBzdHJ1Y3R1cmUgaXMgZml4ZWQgKGFzIHlvdSB3aWxsCnNvb24gZmluZCBvdXQsIHdl IGRvIGhhdmUgdGhpcyBvcHRpb24gaW4gTGlzcCkuIFBlcmhhcHMgdGhpcyBpcyBvbmUgb2YKdGhl IHJlYXNvbnMgd2h5IEFudCBpcyBzbyBzdWNjZXNzZnVsPwoKSSB1cmdlIHlvdSB0byB0YWtlIGEg bG9vayBhdCByZWNlbnQgZXZvbHV0aW9uIG9mIEphdmEgYW5kIEMjIChlc3BlY2lhbGx5CnRoZSBy ZWNlbnRseSByZWxlYXNlZCBzcGVjaWZpY2F0aW9uIGZvciBDIyAzLjApLiBUaGUgbGFuZ3VhZ2Vz IGFyZSBiZWluZwpldm9sdmVkIGJ5IGFic3RyYWN0aW5nIGF3YXkgY29tbW9ubHkgdXNlZCBmdW5j dGlvbmFsaXR5IGFuZCBhZGRpbmcgaXQgaW4KdGhlIGZvcm0gb2Ygb3BlcmF0b3JzLiBOZXcgQyMg b3BlcmF0b3JzIGZvciBidWlsdC1pbiBxdWVyaWVzIGlzIG9uZQpleGFtcGxlLiBUaGlzIGlzIGFj Y29tcGxpc2hlZCBieSByZWxhdGl2ZWx5IHRyYWRpdGlvbmFsIG1lYW5zOiBsYW5ndWFnZQpjcmVh dG9ycyBtb2RpZnkgdGhlIGFjY2VwdGVkIGFic3RyYWN0IHN5bnRheCB0cmVlIGFuZCBhZGQKaW1w bGVtZW50YXRpb25zIG9mIGNlcnRhaW4gZmVhdHVyZXMuIEltYWdpbmUgdGhlIHBvc3NpYmlsaXRp ZXMgaWYgdGhlCnByb2dyYW1tZXIgY291bGQgbW9kaWZ5IHRoZSBhYnN0cmFjdCBzeW50YXggdHJl ZSBoaW1zZWxmISBXaG9sZSBuZXcKc3ViLWxhbmd1YWdlcyBjb3VsZCBiZSBidWlsdCBmb3Igc3Bl Y2lhbGl6ZWQgZG9tYWlucyAoZm9yIGV4YW1wbGUgYQpsYW5ndWFnZSBmb3IgYnVpbGRpbmcgcHJv amVjdHMsIGxpa2UgQW50KS4gQ2FuIHlvdSBjb21lIHVwIHdpdGggb3RoZXIKZXhhbXBsZXM/IFRo aW5rIGFib3V0IHRoZXNlIGNvbmNlcHRzIGZvciBhIGJpdCwgYnV0IGRvbid0IHdvcnJ5IGFib3V0 CnRoZW0gdG9vIG11Y2guIFdlJ2xsIGNvbWUgYmFjayB0byB0aGVzZSBpc3N1ZXMgYWZ0ZXIgaW50 cm9kdWNpbmcgYSBmZXcKbW9yZSBpZGVhcy4gQnkgdGhlbiB0aGluZ3Mgd2lsbCBiZSBhIGxpdHRs ZSBtb3JlIGNsZWFyLgoKKiBBbG1vc3QgTGlzcAoKTGV0J3MgZm9yZ2V0IGFib3V0IHRoZSBvcGVy YXRvciBidXNpbmVzcyBmb3IgdGhlIG1vbWVudCBhbmQgdHJ5IHRvCmV4cGFuZCBvdXIgaG9yaXpv bnMgYmV5b25kIHRoZSBjb25zdHJhaW50cyBvZiBBbnQncyBkZXNpZ24uIEkgbWVudGlvbmVkCmVh cmxpZXIgdGhhdCBBbnQgY2FuIGJlIGV4dGVuZGVkIGJ5IHdyaXRpbmcgY29udmVudGlvbmFsIEph dmEgY2xhc3Nlcy4KQW50IGludGVycHJldGVyIHRoZW4gYXR0ZW1wdHMgdG8gbWF0Y2ggWE1MIGVs ZW1lbnRzIHRvIGFwcHJvcHJpYXRlbHkKbmFtZWQgSmF2YSBjbGFzc2VzIGFuZCBpZiB0aGUgbWF0 Y2ggaXMgZm91bmQgdGhlIHRhc2sgaXMgZXhlY3V0ZWQuIEFuCmludGVyZXN0aW5nIHF1ZXN0aW9u IGJlZ3MgdG8gYmUgYXNrZWQuIFdoeSBub3QgZXh0ZW5kIEFudCBpbiBBbnQgaXRzZWxmPwpBZnRl ciBhbGwsIGNvcmUgdGFza3MgY29udGFpbiBhIGxvdCBvZiBjb252ZW50aW9uYWwgcHJvZ3JhbW1p bmcgbGFuZ3VhZ2UKY29uc3RydWN0cyAoJ2lmJyBiZWluZyBhIHBlcmZlY3QgZXhhbXBsZSkuIElm IEFudCBwcm92aWRlZCBjb25zdHJ1Y3RzIHRvCmRldmVsb3AgdGFza3MgaW4gQW50IGl0c2VsZiB3 ZSdkIHJlYWNoIGEgaGlnaGVyIGRlZ3JlZSBvZiBwb3J0YWJpbGl0eS4KV2UnZCBiZSBkZXBlbmRl bnQgb24gYSBjb3JlIHNldCBvZiB0YXNrcyAoYSBzdGFuZGFyZCBsaWJyYXJ5LCBpZiB5b3UKd2ls bCkgYW5kIHdlIHdvdWxkbid0IGNhcmUgaWYgSmF2YSBydW50aW1lIGlzIHByZXNlbnQ6IHRoZSBj b3JlIHNldApjb3VsZCBiZSBpbXBsZW1lbnRlZCBpbiBhbnl0aGluZy4gVGhlIHJlc3Qgb2YgdGhl IHRhc2tzIHdvdWxkIGJlIGJ1aWx0Cm9uIHRvcCBvZiB0aGUgY29yZSB1c2luZyBBbnQtWE1MIGl0 c2VsZi4gQW50IHdvdWxkIHRoZW4gYmVjb21lIGEKZ2VuZXJpYywgZXh0ZW5zaWJsZSwgWE1MLWJh c2VkIHByb2dyYW1taW5nIGxhbmd1YWdlLiBDb25zaWRlciB0aGUKcG9zc2liaWxpdGllczoKCiMr QkVHSU5fRVhBTVBMRQogICAgPHRhc2sgbmFtZT0iVGVzdCI+CiAgICAgICAgPGVjaG8gbWVzc2Fn ZT0iSGVsbG8gV29ybGQhIi8+CiAgICA8L3Rhc2s+CiAgICA8VGVzdCAvPgojK0VORF9FWEFNUExF CgpJZiBhbnQgc3VwcG9ydGVkIHRoZSAidGFzayIgY29uc3RydWN0LCB0aGUgZXhhbXBsZSBhYm92 ZSB3b3VsZCBwcmludAoiSGVsbG8gV29ybGQhIi4gSW4gZmFjdCwgd2UgY291bGQgd3JpdGUgYSAi dGFzayIgdGFzayBpbiBKYXZhIGFuZCBtYWtlCkFudCBhYmxlIHRvIGV4dGVuZCBpdHNlbGYgdXNp bmcgQW50LVhNTCEgQW50IHdvdWxkIHRoZW4gYmUgYWJsZSB0byBidWlsZAptb3JlIGNvbXBsaWNh dGVkIHByaW1pdGl2ZXMgb24gdG9wIG9mIHNpbXBsZSBvbmVzLCBqdXN0IGxpa2UgYW55IG90aGVy CnByb2dyYW1taW5nIGxhbmd1YWdlISBUaGlzIGlzIGFuIGV4YW1wbGUgb2YgIlhNTCIgYmFzZWQg cHJvZ3JhbW1pbmcKbGFuZ3VhZ2Ugd2Ugd2VyZSB0YWxraW5nIGFib3V0IGluIHRoZSBiZWdpbm5p bmcgb2YgdGhpcyB0dXRvcmlhbC4gTm90CnZlcnkgdXNlZnVsIChjYW4geW91IHRlbGwgd2h5Pykg YnV0IHByZXR0eSBkYW1uIGNvb2wuCgpCeSB0aGUgd2F5LCB0YWtlIGEgbG9vayBhdCBvdXIgJ1Rl c3QnIHRhc2sgb25jZSBhZ2Fpbi4gQ29uZ3JhdHVsYXRpb25zLgpZb3UncmUgbG9va2luZyBhdCBM aXNwIGNvZGUuIFdoYXQgb24gRWFydGggYW0gSSB0YWxraW5nIGFib3V0PyBJdApkb2Vzbid0IGxv b2sgYW55dGhpbmcgbGlrZSBMaXNwPyBEb24ndCB3b3JyeSwgd2UnbGwgZml4IHRoYXQgaW4gYSBi aXQuCkNvbmZ1c2VkPyBHb29kLiBMZXQncyBjbGVhciBpdCBhbGwgdXAhCgoqIEEgQmV0dGVyIFhN TAoKSSBtZW50aW9uZWQgaW4gdGhlIHByZXZpb3VzIHNlY3Rpb24gdGhhdCBzZWxmLWV4dGVuZGlu ZyBBbnQgd291bGRuJ3QgYmUKdmVyeSB1c2VmdWwuIFRoZSByZWFzb24gZm9yIHRoYXQgaXMgWE1M J3MgdmVyYm9zaXR5LiBJdCdzIG5vdCB0b28gYmFkCmZvciBkYXRhIGZpbGVzIGJ1dCB0aGUgbW9t ZW50IHlvdSB0cnkgd3JpdGluZyByZWFzb25hYmx5IGNvbXBsZXggY29kZQp0aGUgYW1vdW50IG9m IHR5cGluZyB5b3UgaGF2ZSB0byBkbyBxdWlja2x5IHN0YXJ0cyB0byBnZXQgaW4gdGhlIHdheSBh bmQKcHJvZ3Jlc3NlcyB0byBiZWNvbWluZyB1bnVzYWJsZSBmb3IgYW55IHJlYWwgcHJvamVjdC4g SGF2ZSB5b3UgZXZlcgp0cmllZCB3cml0aW5nIEFudCBidWlsZCBzY3JpcHRzPyBJIGhhdmUsIGFu ZCBvbmNlIHRoZXkgZ2V0IGNvbXBsZXgKZW5vdWdoIGhhdmluZyB0byBkbyBpdCBpbiBYTUwgYmVj b21lcyByZWFsbHkgYW5ub3lpbmcuIEltYWdpbmUgaGF2aW5nIHRvCnR5cGUgYWxtb3N0IGV2ZXJ5 dGhpbmcgaW4gSmF2YSB0d2ljZSBiZWNhdXNlIHlvdSBoYXZlIHRvIGNsb3NlIGV2ZXJ5CmVsZW1l bnQuIFdvdWxkbid0IHRoYXQgZHJpdmUgeW91IG51dHM/CgpUaGUgc29sdXRpb24gdG8gdGhpcyBw cm9ibGVtIGludm9sdmVzIHVzaW5nIGEgbGVzcyB2ZXJib3NlIGFsdGVybmF0aXZlCnRvIFhNTC4g UmVtZW1iZXIsIFhNTCBpcyBqdXN0IGEgZm9ybWF0IGZvciByZXByZXNlbnRpbmcgaGllcmFyY2hp Y2FsCmRhdGEuIFdlIGRvbid0IGhhdmUgdG8gdXNlIFhNTCdzIGFuZ2xlIGJyYWNrZXRzIHRvIHNl cmlhbGl6ZSB0cmVlcy4gV2UKY291bGQgY29tZSB1cCB3aXRoIG1hbnkgb3RoZXIgZm9ybWF0cy4g T25lIHN1Y2ggZm9ybWF0IChpbmNpZGVudGFsbHksCnRoZSBvbmUgTGlzcCB1c2VzKSBpcyBjYWxs ZWQgYW4gcy1leHByZXNzaW9uLiBTLWV4cHJlc3Npb25zIGFjY29tcGxpc2gKdGhlIHNhbWUgZ29h bHMgYXMgWE1MLiBUaGV5J3JlIGp1c3QgYSBsb3QgbGVzcyB2ZXJib3NlLCB3aGljaCBtYWtlcyB0 aGVtCm11Y2ggYmV0dGVyIHN1aXRlZCBmb3IgdHlwaW5nIGNvZGUuIEkgd2lsbCBleHBsYWluIHMt ZXhwcmVzc2lvbnMgaW4gYQpsaXR0bGUgd2hpbGUsIGJ1dCBiZWZvcmUgSSBkbyBJIGhhdmUgdG8g Y2xlYXIgdXAgYSBmZXcgdGhpbmdzIGFib3V0IFhNTC4KTGV0J3MgY29uc2lkZXIgb3VyIFhNTCBl eGFtcGxlIGZvciBjb3B5aW5nIGZpbGVzOgoKIytCRUdJTl9FWEFNUExFCiAgICA8Y29weSB0b2Rp cj0iLi4vbmV3L2RpciI+CiAgICAgICAgPGZpbGVzZXQgZGlyPSJzcmNfZGlyIi8+CiAgICA8L2Nv cHk+CiMrRU5EX0VYQU1QTEUKClRoaW5rIG9mIHdoYXQgdGhlIHBhcnNlIHRyZWUgb2YgdGhpcyBz bmlwcGV0IHdvdWxkIGxvb2sgbGlrZSBpbiBtZW1vcnkuCldlJ2QgaGF2ZSBhICdjb3B5JyBub2Rl IHRoYXQgY29udGFpbnMgYSBmaWxlc2V0IG5vZGUuIEJ1dCB3aGF0IGFib3V0CmF0dHJpYnV0ZXM/ IEhvdyBkbyB0aGV5IGZpdCBpbnRvIG91ciBwaWN0dXJlPyBJZiB5b3UndmUgZXZlciB1c2VkIFhN TCB0bwpkZXNjcmliZSBkYXRhIGFuZCB3b25kZXJlZCB3aGV0aGVyIHlvdSBzaG91bGQgdXNlIGFu IGVsZW1lbnQgb3IgYW4KYXR0cmlidXRlLCB5b3UncmUgbm90IGFsb25lLiBOb2JvZHkgY2FuIHJl YWxseSBmaWd1cmUgdGhpcyBvdXQgYW5kIGRvaW5nCml0IHJpZ2h0IHRlbmRzIHRvIGJlIGJsYWNr IG1hZ2ljIHJhdGhlciB0aGFuIHNjaWVuY2UuIFRoZSByZWFzb24gZm9yCnRoYXQgaXMgdGhhdCBh dHRyaWJ1dGVzIGFyZSByZWFsbHkgc3Vic2V0cyBvZiBlbGVtZW50cy4gQW55dGhpbmcKYXR0cmli dXRlcyBjYW4gZG8sIGVsZW1lbnRzIGNhbiBkbyBhcyB3ZWxsLiBUaGUgcmVhc29uIGF0dHJpYnV0 ZXMgd2VyZQppbnRyb2R1Y2VkIGlzIHRvIGN1cmIgWE1MJ3MgdmVyYm9zaXR5LiBUYWtlIGEgbG9v ayBhdCBhbm90aGVyIHZlcnNpb24gb2YKb3VyICdjb3B5JyBzbmlwcGV0OgoKIytCRUdJTl9FWEFN UExFCiAgICA8Y29weT4KICAgICAgICA8dG9kaXI+Li4vbmV3L2RpcjwvdG9kaXI+CiAgICAgICAg PGZpbGVzZXQ+CiAgICAgICAgICAgIDxkaXI+c3JjX2RpcjwvZGlyPgogICAgICAgIDwvZmlsZXNl dD4KICAgIDwvY29weT4KIytFTkRfRVhBTVBMRQoKVGhlIHR3byBzbmlwcGV0cyBob2xkIGV4YWN0 bHkgdGhlIHNhbWUgaW5mb3JtYXRpb24uIEhvd2V2ZXIsIHdlIHVzZQphdHRyaWJ1dGVzIHRvIGF2 b2lkIHR5cGluZyB0aGUgc2FtZSB0aGluZyBtb3JlIHRoYW4gb25jZS4gSW1hZ2luZSBpZgphdHRy aWJ1dGVzIHdlcmVuJ3QgcGFydCBvZiBYTUwgc3BlY2lmaWNhdGlvbi4gV3JpdGluZyBhbnl0aGlu ZyBpbiBYTUwKd291bGQgZHJpdmUgdXMgbnV0cyEKCk5vdyB0aGF0IHdlIGdvdCBhdHRyaWJ1dGVz IG91dCBvZiB0aGUgd2F5LCBsZXQncyBsb29rIGF0IHMtZXhwcmVzc2lvbnMuClRoZSByZWFzb24g d2UgdG9vayB0aGlzIGRldG91ciBpcyB0aGF0IHMtZXhwcmVzc2lvbnMgZG8gbm90IGhhdmUKYXR0 cmlidXRlcy4gQmVjYXVzZSB0aGV5J3JlIGEgbG90IGxlc3MgdmVyYm9zZSwgYXR0cmlidXRlcyBh cmUgc2ltcGx5CnVubmVjZXNzYXJ5LiBUaGlzIGlzIG9uZSB0aGluZyB3ZSBuZWVkIHRvIGtlZXAg aW4gbWluZCB3aGVuIHRyYW5zZm9ybWluZwpYTUwgdG8gcy1leHByZXNzaW9ucy4gTGV0J3MgdGFr ZSBhIGxvb2sgYXQgYW4gZXhhbXBsZS4gV2UgY291bGQKdHJhbnNsYXRlIGFib3ZlIHNuaXBwZXQg dG8gcy1leHByZXNzaW9ucyBsaWtlIHRoaXM6CgojK0JFR0lOX0VYQU1QTEUKICAgIChjb3B5CiAg ICAgICAgKHRvZGlyICIuLi9uZXcvZGlyIikKICAgICAgICAoZmlsZXNldCAoZGlyICJzcmNfZGly IikpKQojK0VORF9FWEFNUExFCgpUYWtlIGEgZ29vZCBsb29rIGF0IHRoaXMgcmVwcmVzZW50YXRp b24uIFdoYXQncyBkaWZmZXJlbnQ/IEFuZ2xlCmJyYWNrZXRzIHNlZW0gdG8gYmUgcmVwbGFjZWQg YnkgcGFyZW50aGVzZXMuIEluc3RlYWQgb2YgZW5jbG9zaW5nIGVhY2gKZWxlbWVudCBpbnRvIGEg cGFpciBvZiBwYXJlbnRoZXNlcyBhbmQgdGhlbiBjbG9zaW5nIGVhY2ggZWxlbWVudCB3aXRoIGEK IigvZWxlbWVudCkiIHdlIHNpbXBseSBza2lwIHRoZSBzZWNvbmQgcGFyZW50aGVzaXMgaW4gIihl bGVtZW50IiBhbmQKcHJvY2VlZC4gVGhlIGVsZW1lbnQgaXMgdGhlbiBjbG9zZWQgbGlrZSB0aGlz OiAiKSIuIFRoYXQncyBpdCEgVGhlCnRyYW5zbGF0aW9uIGlzIG5hdHVyYWwgYW5kIHZlcnkgc2lt cGxlLiBJdCdzIGFsc28gYSBsb3QgZWFzaWVyIHRvIHR5cGUuCkRvIHBhcmVudGhlc2VzIGJsaW5k IGZpcnN0IHRpbWUgdXNlcnM/IE1heWJlLCBidXQgbm93IHRoYXQgd2UncmUKdW5kZXJzdGFuZCB0 aGUgcmVhc29uaW5nIGJlaGluZCB0aGVtIHRoZXkncmUgYSBsb3QgZWFzaWVyIHRvIGhhbmRsZS4g QXQKdGhlIHZlcnkgbGVhc3QgdGhleSdyZSBiZXR0ZXIgdGhhbiBhcnRocml0aXMgaW5kdWNpbmcg dmVyYm9zaXR5IG9mIFhNTC4KQWZ0ZXIgeW91IGdldCB1c2VkIHRvIHMtZXhwcmVzc2lvbnMgd3Jp dGluZyBjb2RlIGluIHRoZW0gaXMgbm90IG9ubHkKZG9hYmxlIGJ1dCB2ZXJ5IHBsZWFzYW50LiBB bmQgdGhleSBwcm92aWRlIGFsbCB0aGUgYmVuZWZpdHMgb2Ygd3JpdGluZwpjb2RlIGluIFhNTCAo bWFueSBvZiB3aGljaCB3ZSdyZSB5ZXQgdG8gZXhwbG9yZSkuIExldCdzIHRha2UgYSBsb29rIGF0 Cm91ciAndGFzaycgY29kZSBpbiBzb21ldGhpbmcgdGhhdCBsb29rcyBhIGxvdCBtb3JlIGxpa2Ug bGlzcDoKCiMrQkVHSU5fRVhBTVBMRQogICAgKHRhc2sgKG5hbWUgIlRlc3QiKQogICAgICAgIChl Y2hvIChtZXNzYWdlICJIZWxsbyBXb3JsZCEiKSkpCgogICAgKFRlc3QpCiMrRU5EX0VYQU1QTEUK ClMtZXhwcmVzc2lvbnMgYXJlIGNhbGxlZCBsaXN0cyBpbiBMaXNwIGxpbmdvLiBDb25zaWRlciBv dXIgJ3Rhc2snCmVsZW1lbnQgYWJvdmUuIElmIHdlIHJld3JpdGUgaXQgd2l0aG91dCBhIGxpbmUg YnJlYWsgYW5kIHdpdGggY29tYXMKaW5zdGVhZCBvZiBzcGFjZXMgaXQncyBzdGFydGluZyB0byBs b29rIHN1cnByaXNpbmdseSBsaWtlIGEgbGlzdCBvZgplbGVtZW50cyBhbmQgb3RoZXIgbGlzdHMg KHRoZSBmb3JtYXR0aW5nIGlzIGFkZGVkIHRvIG1ha2UgaXQgZWFzaWVyIHRvCnNlZSBuZXN0ZWQg bGlzdHMpOgoKIytCRUdJTl9FWEFNUExFCiAgICAodGFzaywgKG5hbWUsICJ0ZXN0IiksIChlY2hv LCAobWVzc2FnZSwgIkhlbGxvIFdvcmxkISIpKSkKIytFTkRfRVhBTVBMRQoKV2UgY291bGQgZG8g dGhlIHNhbWUgd2l0aCBYTUwuIE9mIGNvdXJzZSB0aGUgbGluZSBhYm92ZSBpc24ndCByZWFsbHkg YQpsaXN0LCBpdCdzIGEgdHJlZSwganVzdCBsaWtlIGl0cyBYTUwtYWx0ZXJuYXRpdmUuIERvbid0 IGxldCByZWZlcmVuY2VzCnRvIGxpc3RzIGNvbmZ1c2UgeW91LCBpdCdzIGp1c3QgdGhhdCBsaXN0 cyB0aGF0IGNvbnRhaW4gb3RoZXIgbGlzdHMgYW5kCnRyZWVzIGFyZSBlZmZlY3RpdmVseSB0aGUg c2FtZSB0aGluZy4gTGlzcCBtYXkgc3RhbmQgZm9yIExpc3QKUHJvY2Vzc2luZywgYnV0IGl0J3Mg cmVhbGx5IHRyZWUgcHJvY2Vzc2luZyAtIG5vIGRpZmZlcmVudCB0aGFuCnByb2Nlc3NpbmcgWE1M IG5vZGVzLgoKV2hldy4gQWZ0ZXIgbXVjaCByYW1ibGluZyB3ZSBmaW5hbGx5IGdvdCB0byBzb21l dGhpbmcgdGhhdCBsb29rcyBsaWtlCkxpc3AgKGFuZCBpcyBMaXNwLCByZWFsbHkpLiBCeSBub3cg dGhlIG15c3RlcmlvdXMgTGlzcCBwYXJlbnRoZXNlcyBhcwp3ZWxsIGFzIHNvbWUgY2xhaW1zIG1h ZGUgYnkgTGlzcCBhZHZvY2F0ZXMgc2hvdWxkIGJlY29tZSBtb3JlIGNsZWFyLiBCdXQKd2Ugc3Rp bGwgaGF2ZSBhIGxvdCBvZiBncm91bmQgdG8gY292ZXIuIFJlYWR5PyBMZXQncyBtb3ZlIG9uIQoK KiBDIE1hY3JvcyBSZWxvYWRlZAoKQnkgbm93IHlvdSBtdXN0IGJlIHRpcmVkIG9mIGFsbCB0aGUg WE1MIHRhbGsuIEknbSB0aXJlZCBvZiBpdCBhcyB3ZWxsLgpJdCdzIHRpbWUgdG8gdGFrZSBhIGJy ZWFrIGZyb20gYWxsIHRoZSB0cmVlcywgcy1leHByZXNzaW9ucywgYW5kIEFudApidXNpbmVzcy4g SW5zdGVhZCwgbGV0J3MgZ28gYmFjayB0byBldmVyeSBwcm9ncmFtbWVyJ3Mgcm9vdHMuIEl0J3Mg dGltZQp0byB0YWxrIGFib3V0IEMgcHJlcHJvY2Vzc29yLiBXaGF0J3MgQyBnb3QgdG8gZG8gd2l0 aCBhbnl0aGluZywgSSBoZWFyCnlvdSBhc2s/IFdlbGwsIHdlIG5vdyBrbm93IGVub3VnaCB0byBn ZXQgaW50byBtZXRhcHJvZ3JhbW1pbmcgYW5kCmRpc2N1c3MgY29kZSB0aGF0IHdyaXRlcyBvdGhl ciBjb2RlLiBVbmRlcnN0YW5kaW5nIHRoaXMgdGVuZHMgdG8gYmUgaGFyZApzaW5jZSBhbGwgdHV0 b3JpYWxzIGRpc2N1c3MgaXQgaW4gdGVybXMgb2YgbGFuZ3VhZ2VzIHRoYXQgeW91IGRvbid0Cmtu b3cuIEJ1dCB0aGVyZSBpcyBub3RoaW5nIGhhcmQgYWJvdXQgdGhlIGNvbmNlcHQuIEkgYmVsaWV2 ZSB0aGF0IGEKbWV0YXByb2dyYW1taW5nIGRpc2N1c3Npb24gYmFzZWQgb24gQyB3aWxsIG1ha2Ug dGhlIHdob2xlIHRoaW5nIG11Y2gKZWFzaWVyIHRvIHVuZGVyc3RhbmQuIFNvLCBsZXQncyBzZWUg KHB1biBpbnRlbmRlZCkuCgpXaHkgd291bGQgYW55b25lIHdhbnQgdG8gd3JpdGUgYSBwcm9ncmFt IHRoYXQgd3JpdGVzIHByb2dyYW1zPyBIb3cgY2FuCndlIHVzZSBzb21ldGhpbmcgbGlrZSB0aGlz IGluIHRoZSByZWFsIHdvcmxkPyBXaGF0IG9uIEVhcnRoIGlzCm1ldGFwcm9ncmFtbWluZywgYW55 d2F5PyBZb3UgYWxyZWFkeSBrbm93IGFsbCB0aGUgYW5zd2VycywgeW91IGp1c3QKZG9uJ3Qga25v dyBpdCB5ZXQuIEluIG9yZGVyIHRvIHVubG9jayB0aGUgaGlkZGVuIHZhdWx0IG9mIGRpdmluZQpr bm93bGVkZ2UgbGV0J3MgY29uc2lkZXIgYSByYXRoZXIgbXVuZGFuZSB0YXNrIG9mIHNpbXBsZSBk YXRhYmFzZSBhY2Nlc3MKZnJvbSBjb2RlLiBXZSd2ZSBhbGwgYmVlbiB0aGVyZS4gV3JpdGluZyBT UUwgcXVlcmllcyBhbGwgb3ZlciB0aGUgY29kZQp0byBtb2RpZnkgZGF0YSB3aXRoaW4gdGFibGVz IHR1cm5zIGludG8gcmVwZXRpdGl2ZSBoZWxsIHNvb24gZW5vdWdoLgpFdmVuIHdpdGggdGhlIG5l dyBDIyAzLjAgTElOUSBzdHVmZiB0aGlzIGlzIGEgaHVnZSBwYWluLiBXcml0aW5nIGEgZnVsbApT UUwgcXVlcnkgKGFsYmVpdCB3aXRoIGEgbmljZSBidWlsdCBpbiBzeW50YXgpIHRvIGdldCBzb21l b25lJ3MgbmFtZSBvcgp0byBtb2RpZnkgc29tZW9uZSdzIGFkZHJlc3MgaXNuJ3QgZXhhY3RseSBh IHByb2dyYW1tZXIncyBpZGVhIG9mCmNvbWZvcnQuIFdoYXQgZG8gd2UgZG8gdG8gc29sdmUgdGhl c2UgcHJvYmxlbXM/IEVudGVyIGRhdGEgYWNjZXNzCmxheWVycy4KClRoZSBpZGVhIGlzIHNpbXBs ZSBlbm91Z2guIFlvdSBhYnN0cmFjdCBkYXRhYmFzZSBhY2Nlc3MgKGF0IGxlYXN0CnRyaXZpYWwg cXVlcmllcywgYW55d2F5KSBieSBjcmVhdGluZyBhIHNldCBvZiBjbGFzc2VzIHRoYXQgbWlycm9y IHRoZQp0YWJsZXMgaW4gdGhlIGRhdGFiYXNlIGFuZCB1c2UgYWNjZXNzb3IgbWV0aG9kcyB0byBl eGVjdXRlIGFjdHVhbApxdWVyaWVzLiBUaGlzIHNpbXBsaWZpZXMgZGV2ZWxvcG1lbnQgdHJlbWVu ZG91c2x5IC0gaW5zdGVhZCBvZiB3cml0aW5nClNRTCBxdWVyaWVzIHdlIG1ha2Ugc2ltcGxlIG1l dGhvZCBjYWxscyAob3IgcHJvcGVydHkgYXNzaWdubWVudHMsCmRlcGVuZGluZyBvbiB5b3VyIGxh bmd1YWdlIG9mIGNob2ljZSkuIEFueW9uZSB3aG8gaGFzIGV2ZXIgdXNlZCBldmVuIHRoZQpzaW1w bGVzdCBvZiBkYXRhIGFjY2VzcyBsYXllcnMga25vd3MgaG93IG11Y2ggdGltZSBpdCBjYW4gc2F2 ZS4gT2YKY291cnNlIGFueW9uZSB3aG8gaGFzIGV2ZXIgd3JpdHRlbiBvbmUga25vd3MgaG93IG11 Y2ggdGltZSBpdCBjYW4ga2lsbCAtCndyaXRpbmcgYSBzZXQgb2YgY2xhc3NlcyB0aGF0IG1pcnJv ciB0YWJsZXMgYW5kIGNvbnZlcnQgYWNjZXNzb3JzIHRvIFNRTApxdWVyaWVzIHRha2VzIGEgY29u c2lkZXJhYmxlIGNodW5rIG9mIHRpbWUuIFRoaXMgc2VlbXMgZXNwZWNpYWxseSBzaWxseQpzaW5j ZSBtb3N0IG9mIHRoZSB3b3JrIGlzIG1hbnVhbDogb25jZSB5b3UgZmlndXJlIG91dCB0aGUgZGVz aWduIGFuZApkZXZlbG9wIGEgdGVtcGxhdGUgZm9yIHlvdXIgdHlwaWNhbCBkYXRhIGFjY2VzcyBj bGFzcyB5b3UgZG9uJ3QgbmVlZCB0bwpkbyBhbnkgdGhpbmtpbmcuIFlvdSBqdXN0IHdyaXRlIGNv ZGUgYmFzZWQgb24gdGhlIHNhbWUgdGVtcGxhdGUgb3ZlciBhbmQKb3ZlciBhbmQgb3ZlciBhbmQg b3ZlciBhZ2Fpbi4gTWFueSBwZW9wbGUgZmlndXJlZCBvdXQgdGhhdCB0aGVyZSBpcyBhCmJldHRl ciB3YXkgLSB0aGVyZSBhcmUgcGxlbnR5IG9mIHRvb2xzIHRoYXQgY29ubmVjdCB0byB0aGUgZGF0 YWJhc2UsCmdyYWIgdGhlIHNjaGVtYSwgYW5kIHdyaXRlIGNvZGUgZm9yIHlvdSBiYXNlZCBvbiBh IHByZWRlZmluZWQgKG9yIGEKY3VzdG9tKSB0ZW1wbGF0ZS4KCkFueW9uZSB3aG8gaGFzIGV2ZXIg dXNlZCBzdWNoIGEgdG9vbCBrbm93cyB3aGF0IGFuIGFtYXppbmcgdGltZSBzYXZlciBpdApjYW4g YmUuIEluIGEgZmV3IGNsaWNrcyB5b3UgY29ubmVjdCB0aGUgdG9vbCB0byB0aGUgZGF0YWJhc2Us IGdldCBpdCB0bwpnZW5lcmF0ZSB0aGUgZGF0YSBhY2Nlc3MgbGF5ZXIgc291cmNlIGNvZGUsIGFk ZCB0aGUgZmlsZXMgdG8geW91cgpwcm9qZWN0IGFuZCB2b2lsw6AgLSB0ZW4gbWludXRlcyB3b3J0 aCBvZiB3b3JrIGRvIGEgYmV0dGVyIGpvYiB0aGFuCmh1bmRyZWRzIG9mIG1hbi1ob3VycyB0aGF0 IHdlcmUgcmVxdWlyZWQgcHJldmlvdXNseS4gV2hhdCBoYXBwZW5zIGlmCnlvdXIgZGF0YWJhc2Ug c2NoZW1hIGNoYW5nZXM/IFdlbGwsIHlvdSBqdXN0IGhhdmUgdG8gZ28gdGhyb3VnaCB0aGlzCnNo b3J0IHByb2Nlc3MgYWdhaW4uIE9mIGNvdXJzZSBzb21lIG9mIHRoZSBiZXN0IHRvb2xzIGxldCB5 b3UgYXV0b21hdGUKdGhpcyAtIHlvdSBzaW1wbHkgYWRkIHRoZW0gYXMgYSBwYXJ0IG9mIHlvdXIg YnVpbGQgc3RlcCBhbmQgZXZlcnkgdGltZQp5b3UgY29tcGlsZSB5b3VyIHByb2plY3QgZXZlcnl0 aGluZyBpcyBkb25lIGZvciB5b3UgYXV0b21hdGljYWxseS4gVGhpcwppcyBwZXJmZWN0ISBZb3Ug YmFyZWx5IGhhdmUgdG8gZG8gYW55dGhpbmcgYXQgYWxsLiBJZiB0aGUgc2NoZW1hIGV2ZXIKY2hh bmdlcyB5b3VyIGRhdGEgYWNjZXNzIGxheWVyIGNvZGUgdXBkYXRlcyBhdXRvbWF0aWNhbGx5IGF0 IGNvbXBpbGUKdGltZSBhbmQgYW55IG9ic29sZXRlIGFjY2VzcyBpbiB5b3VyIGNvZGUgd2lsbCBy ZXN1bHQgaW4gY29tcGlsZXIKZXJyb3JzIQoKRGF0YSBhY2Nlc3MgbGF5ZXJzIGFyZSBvbmUgZ29v ZCBleGFtcGxlLCBidXQgdGhlcmUgYXJlIHBsZW50eSBvZiBvdGhlcnMuCkZyb20gYm9pbGVycGxh dGUgR1VJIGNvZGUsIHRvIHdlYiBjb2RlLCB0byBDT00gYW5kIENPUkJBIHN0dWJzLCB0byBNRkMK YW5kIEFUTCwgLSB0aGVyZSBhcmUgcGxlbnR5IG9mIGV4YW1wbGVzIHdoZXJlIHRoZSBzYW1lIGNv ZGUgaXMgd3JpdHRlbgpvdmVyIGFuZCBvdmVyIGFnYWluLiBTaW5jZSB3cml0aW5nIHRoaXMgY29k ZSBpcyBhIHRhc2sgdGhhdCBjYW4gYmUKYXV0b21hdGVkIGNvbXBsZXRlbHkgYW5kIGEgcHJvZ3Jh bW1lcidzIHRpbWUgaXMgZmFyIG1vcmUgZXhwZW5zaXZlIHRoYW4KQ1BVIHRpbWUsIHBsZW50eSBv ZiB0b29scyBoYXZlIGJlZW4gY3JlYXRlZCB0aGF0IGdlbmVyYXRlIHRoaXMKYm9pbGVycGxhdGUg Y29kZSBhdXRvbWF0aWNhbGx5LiBXaGF0IGFyZSB0aGVzZSB0b29scywgZXhhY3RseT8gV2VsbCwK dGhleSBhcmUgcHJvZ3JhbXMgdGhhdCB3cml0ZSBwcm9ncmFtcy4gVGhleSBwZXJmb3JtIGEgc2lt cGxlIHRhc2sgdGhhdApoYXMgYSBteXN0ZXJpb3VzIG5hbWUgb2YgbWV0YXByb2dyYW1taW5nLiBU aGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0LgoKV2UgY291bGQgY3JlYXRlIGFuZCB1c2Ugc3VjaCB0 b29scyBpbiBtaWxsaW9ucyBvZiBzY2VuYXJpb3MgYnV0IG1vcmUKb2Z0ZW4gdGhhbiBub3Qgd2Ug ZG9uJ3QuIFdoYXQgaXQgYm9pbHMgZG93biB0byBpcyBhIHN1YmNvbnNjaW91cwpjYWxjdWxhdGlv biAtIGlzIGl0IHdvcnRoIGl0IGZvciBtZSB0byBjcmVhdGUgYSBzZXBhcmF0ZSBwcm9qZWN0LCB3 cml0ZQphIHdob2xlIHRvb2wgdG8gZ2VuZXJhdGUgc29tZXRoaW5nLCBhbmQgdGhlbiB1c2UgaXQs IGlmIEkgb25seSBoYXZlIHRvCndyaXRlIHRoZXNlIHZlcnkgc2ltaWxhciBwaWVjZXMgYWJvdXQg c2V2ZW4gdGltZXM/IE9mIGNvdXJzZSBub3QuIERhdGEKYWNjZXNzIGxheWVycyBhbmQgQ09NIHN0 dWJzIGFyZSB3cml0dGVuIGh1bmRyZWRzLCB0aG91c2FuZHMgb2YgdGltZXMuClRoaXMgaXMgd2h5 IHRoZXJlIGFyZSB0b29scyBmb3IgdGhlbS4gRm9yIHNpbWlsYXIgcGllY2VzIG9mIGNvZGUgdGhh dApyZXBlYXQgb25seSBhIGZldyB0aW1lcywgb3IgZXZlbiBhIGZldyBkb3plbiB0aW1lcywgd3Jp dGluZyBjb2RlCmdlbmVyYXRpb24gdG9vbHMgaXNuJ3QgZXZlbiBjb25zaWRlcmVkLiBUaGUgdHJv dWJsZSB0byBjcmVhdGUgc3VjaCBhCnRvb2wgbW9yZSBvZnRlbiB0aGFuIG5vdCBmYXIgb3V0d2Vp Z2hzIHRoZSBiZW5lZml0IG9mIHVzaW5nIG9uZS4gSWYgb25seQpjcmVhdGluZyBzdWNoIHRvb2xz IHdhcyBtdWNoIGVhc2llciwgd2UgY291bGQgdXNlIHRoZW0gbW9yZSBvZnRlbiwgYW5kCnBlcmhh cHMgc2F2ZSBtYW55IGhvdXJzIG9mIG91ciB0aW1lLiBMZXQncyBzZWUgaWYgd2UgY2FuIGFjY29t cGxpc2ggdGhpcwppbiBhIHJlYXNvbmFibGUgbWFubmVyLgoKU3VycHJpc2luZ2x5IEMgcHJlcHJv Y2Vzc29yIGNvbWVzIHRvIHRoZSByZXNjdWUuIFdlJ3ZlIGFsbCB1c2VkIGl0IGluIEMKYW5kIEMr Ky4gT24gb2NjYXNpb24gd2UgYWxsIHdpc2ggSmF2YSBoYWQgaXQuIFdlIHVzZSBpdCB0byBleGVj dXRlCnNpbXBsZSBpbnN0cnVjdGlvbnMgYXQgY29tcGlsZSB0aW1lIHRvIG1ha2Ugc21hbGwgY2hh bmdlcyB0byBvdXIgY29kZQoobGlrZSBzZWxlY3RpdmVseSByZW1vdmluZyBkZWJ1ZyBzdGF0ZW1l bnRzKS4gTGV0J3MgbG9vayBhdCBhIHF1aWNrCmV4YW1wbGU6CgojK0JFR0lOX0VYQU1QTEUKICAg ICNkZWZpbmUgdHJpcGxlKFgpICAgIFggKyBYICsgWAojK0VORF9FWEFNUExFCgpXaGF0IGRvZXMg dGhpcyBsaW5lIGRvPyBJdCdzIGEgc2ltcGxlIGluc3RydWN0aW9uIHdyaXR0ZW4gaW4gdGhlCnBy ZXByb2Nlc3NvciBsYW5ndWFnZSB0aGF0IGluc3RydWN0cyBpdCB0byByZXBsYWNlIGFsbCBpbnN0 YW5jZXMgb2YKL3RyaXBsZShYKS8gd2l0aCAvWCArIFggKyBYLy4gRm9yIGV4YW1wbGUgYWxsIGlu c3RhbmNlcyBvZiAnL3RyaXBsZSg1KS8nCndpbGwgYmUgcmVwbGFjZWQgd2l0aCAnLzUgKyA1ICsg NS8nIGFuZCB0aGUgcmVzdWx0aW5nIGNvZGUgd2lsbCBiZQpjb21waWxlZCBieSB0aGUgQyBjb21w aWxlci4gV2UncmUgcmVhbGx5IGRvaW5nIGEgdmVyeSBwcmltaXRpdmUgdmVyc2lvbgpvZiBjb2Rl IGdlbmVyYXRpb24gaGVyZS4gSWYgb25seSBDIHByZXByb2Nlc3NvciB3YXMgYSBsaXR0bGUgbW9y ZQpwb3dlcmZ1bCBhbmQgaW5jbHVkZWQgd2F5cyB0byBjb25uZWN0IHRvIHRoZSBkYXRhYmFzZSBh bmQgYSBmZXcgbW9yZQpzaW1wbGUgY29uc3RydWN0cywgd2UgY291bGQgdXNlIGl0IHRvIGRldmVs b3Agb3VyIGRhdGEgYWNjZXNzIGxheWVyCnJpZ2h0IHRoZXJlLCBmcm9tIHdpdGhpbiBvdXIgcHJv Z3JhbSEgQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBleGFtcGxlCnRoYXQgdXNlcyBhbiBpbWFnaW5h cnkgZXh0ZW5zaW9uIG9mIHRoZSBDIHByZXByb2Nlc3NvcjoKCiMrQkVHSU5fRVhBTVBMRQogICAg I2dldC1kYi1zY2hlbWEoIjEyNy4wLjAuMSwgdW4sIHB3ZCIpOwogICAgI2l0ZXJhdGUtdGhyb3Vn aC10YWJsZXMKICAgICNmb3ItZWFjaC10YWJsZQogICAgICAgIGNsYXNzICN0YWJsZS1uYW1lCiAg ICAgICAgewogICAgICAgIH07CiAgICAjZW5kLWZvci1lYWNoCiMrRU5EX0VYQU1QTEUKCldlJ3Zl IGp1c3QgY29ubmVjdGVkIHRvIHRoZSBkYXRhYmFzZSBzY2hlbWEsIGl0ZXJhdGVkIHRocm91Z2gg YWxsIHRoZQp0YWJsZXMsIGFuZCBjcmVhdGVkIGFuIGVtcHR5IGNsYXNzIGZvciBlYWNoLiBBbGwg aW4gYSBjb3VwbGUgb2YgbGluZXMKcmlnaHQgd2l0aGluIG91ciBzb3VyY2UgY29kZSEgTm93IGV2 ZXJ5IHRpbWUgd2UgcmVjb21waWxlIHRoZSBmaWxlIHdoZXJlCmFib3ZlIGNvZGUgYXBwZWFycyB3 ZSdsbCBnZXQgYSBmcmVzaGx5IGJ1aWx0IHNldCBvZiBjbGFzc2VzIHRoYXQKYXV0b21hdGljYWxs eSB1cGRhdGUgYmFzZWQgb24gdGhlIHNjaGVtYS4gV2l0aCBhIGxpdHRsZSBpbWFnaW5hdGlvbiB5 b3UKY2FuIHNlZSBob3cgd2UgY291bGQgYnVpbGQgYSBmdWxsIGRhdGEgYWNjZXNzIGxheWVyIHN0 cmFpZ2h0IGZyb20gd2l0aGluCm91ciBwcm9ncmFtLCB3aXRob3V0IHRoZSB1c2Ugb2YgYW55IGV4 dGVybmFsIHRvb2xzISBPZiBjb3Vyc2UgdGhpcyBoYXMgYQpjZXJ0YWluIGRpc2FkdmFudGFnZSAo YXNpZGUgZnJvbSB0aGUgZmFjdCB0aGF0IHN1Y2ggYW4gYWR2YW5jZWQgdmVyc2lvbgpvZiBDIHBy ZXByb2Nlc3NvciBkb2Vzbid0IGV4aXN0KSAtIHdlJ2QgaGF2ZSB0byBsZWFybiBhIHdob2xlIG5l dwoiY29tcGlsZS10aW1lIGxhbmd1YWdlIiB0byBkbyB0aGlzIHNvcnQgb2Ygd29yay4gRm9yIGNv bXBsZXggY29kZQpnZW5lcmF0aW9uIHRoaXMgbGFuZ3VhZ2Ugd291bGQgaGF2ZSB0byBiZSB2ZXJ5 IGNvbXBsZXggYXMgd2VsbCwgaXQgd291bGQKaGF2ZSB0byBzdXBwb3J0IG1hbnkgbGlicmFyaWVz IGFuZCBsYW5ndWFnZSBjb25zdHJ1Y3RzLiBGb3IgZXhhbXBsZSwgaWYKb3VyIGdlbmVyYXRlZCBj b2RlIGRlcGVuZGVkIG9uIHNvbWUgZmlsZSBsb2NhdGVkIGF0IHNvbWUgZnRwIHNlcnZlciB0aGUK cHJlcHJvY2Vzc29yIHdvdWxkIGhhdmUgdG8gYmUgYWJsZSB0byBjb25uZWN0IHRvIGZ0cC4gSXQn cyBhIHNoYW1lIHRvCmNyZWF0ZSBhbmQgbGVhcm4gYSBuZXcgbGFuZ3VhZ2UganVzdCB0byBkbyB0 aGlzLiBFc3BlY2lhbGx5IHNpbmNlIHRoZXJlCmFyZSBzbyBtYW55IG5pY2UgbGFuZ3VhZ2VzIGFs cmVhZHkgb3V0IHRoZXJlLiBPZiBjb3Vyc2UgaWYgd2UgYWRkIGEKbGl0dGxlIGNyZWF0aXZpdHkg d2UgY2FuIGVhc2lseSBhdm9pZCB0aGlzIHBpdGZhbGwuCgpXaHkgbm90IHJlcGxhY2UgdGhlIHBy ZXByb2Nlc3NvciBsYW5ndWFnZSB3aXRoIEMvQysrIGl0c2VsZj8gV2UnZCBoYXZlCmZ1bGwgcG93 ZXIgb2YgdGhlIGxhbmd1YWdlIGF0IGNvbXBpbGUgdGltZSBhbmQgd2UnZCBvbmx5IG5lZWQgdG8g bGVhcm4gYQpmZXcgc2ltcGxlIGRpcmVjdGl2ZXMgdG8gZGlmZmVyZW50aWF0ZSBiZXR3ZWVuIGNv bXBpbGUgdGltZSBhbmQgcnVudGltZQpjb2RlIQoKIytCRUdJTl9FWEFNUExFCiAgICA8JQogICAg ICAgIGNvdXQgPDwgIkVudGVyIGEgbnVtYmVyOiAiOwogICAgICAgIGNpbiA+PiBuOwogICAgJT4K ICAgIGZvcihpbnQgaSA9IDA7IGkgPCA8JT0gbiAlPjsgaSsrKQogICAgewogICAgICAgIGNvdXQg PDwgImhlbGxvIiA8PCBlbmRsOwogICAgfQojK0VORF9FWEFNUExFCgpDYW4geW91IHNlZSB3aGF0 IGhhcHBlbnMgaGVyZT8gRXZlcnl0aGluZyB0aGF0J3MgYmV0d2VlbiA8JSBhbmQgJT4gdGFncwpy dW5zIHdoZW4gdGhlIHByb2dyYW0gaXMgY29tcGlsZWQuIEFueXRoaW5nIG91dHNpZGUgb2YgdGhl c2UgdGFncyBpcwpub3JtYWwgY29kZS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUgeW91J2Qgc3RhcnQg Y29tcGlsaW5nIHlvdXIgcHJvZ3JhbSBpbgp0aGUgZGV2ZWxvcG1lbnQgZW52aXJvbm1lbnQuIFRo ZSBjb2RlIGJldHdlZW4gdGhlIHRhZ3Mgd291bGQgYmUgY29tcGlsZWQKYW5kIHRoZW4gcmFuLiBZ b3UnZCBnZXQgYSBwcm9tcHQgdG8gZW50ZXIgYSBudW1iZXIuIFlvdSdkIGVudGVyIG9uZSBhbmQK aXQgd291bGQgYmUgcGxhY2VkIGluc2lkZSB0aGUgZm9yIGxvb3AuIFRoZSBmb3IgbG9vcCB3b3Vs ZCB0aGVuIGJlCmNvbXBpbGVkIGFzIHVzdWFsIGFuZCB5b3UnZCBiZSBhYmxlIHRvIGV4ZWN1dGUg aXQuIEZvciBleGFtcGxlLCBpZiB5b3UnZAplbnRlciA1IGR1cmluZyB0aGUgY29tcGlsYXRpb24g b2YgeW91ciBwcm9ncmFtLCB0aGUgcmVzdWx0aW5nIGNvZGUgd291bGQKbG9vayBsaWtlIHRoaXM6 CgojK0JFR0lOX0VYQU1QTEUKICAgIGZvcihpbnQgaSA9IDA7IGkgPCA1OyBpKyspCiAgICB7CiAg ICAgICAgY291dCA8PCAiaGVsbG8iIDw8IGVuZGw7CiAgICB9CiMrRU5EX0VYQU1QTEUKClNpbXBs ZSBhbmQgZWZmZWN0aXZlLiBObyBuZWVkIGZvciBhIHNwZWNpYWwgcHJlcHJvY2Vzc29yIGxhbmd1 YWdlLiBXZQpnZXQgZnVsbCBwb3dlciBvZiBvdXIgaG9zdCBsYW5ndWFnZSAoaW4gdGhpcyBjYXNl IEMvQysrKSBhdCBjb21waWxlCnRpbWUuIFdlIGNvdWxkIGVhc2lseSBjb25uZWN0IHRvIGEgZGF0 YWJhc2UgYW5kIGdlbmVyYXRlIG91ciBkYXRhIGFjY2VzcwpsYXllciBzb3VyY2UgY29kZSBhdCBj b21waWxlIHRpbWUgaW4gdGhlIHNhbWUgd2F5IEpTUCBvciBBU1AgZ2VuZXJhdGUKSFRNTCEgQ3Jl YXRpbmcgc3VjaCB0b29scyB3b3VsZCBhbHNvIGJlIHRyZW1lbmRvdXNseSBxdWljayBhbmQgc2lt cGxlLgpXZSdkIG5ldmVyIGhhdmUgdG8gY3JlYXRlIG5ldyBwcm9qZWN0cyB3aXRoIHNwZWNpYWxp emVkIEdVSXMuIFdlIGNvdWxkCmlubGluZSBvdXIgdG9vbHMgcmlnaHQgaW50byBvdXIgcHJvZ3Jh bXMuIFdlIHdvdWxkbid0IGhhdmUgdG8gd29ycnkKYWJvdXQgd2hldGhlciB3cml0aW5nIHN1Y2gg dG9vbHMgaXMgd29ydGggaXQgYmVjYXVzZSB3cml0aW5nIHRoZW0gd291bGQKYmUgc28gZmFzdCAt IHdlIGNvdWxkIHNhdmUgdHJlbWVuZG91cyBhbW91bnRzIG9mIHRpbWUgYnkgY3JlYXRpbmcgc2lt cGxlCmJpdHMgb2YgY29kZSB0aGF0IGRvIG11bmRhbmUgY29kZSBnZW5lcmF0aW9uIGZvciB1cyEK CiogSGVsbG8sIExpc3AhCgpFdmVyeXRoaW5nIHdlJ3ZlIGxlYXJuZWQgYWJvdXQgTGlzcCBzbyBm YXIgY2FuIGJlIHN1bW1hcml6ZWQgYnkgYSBzaW5nbGUKc3RhdGVtZW50OiBMaXNwIGlzIGV4ZWN1 dGFibGUgWE1MIHdpdGggYSBmcmllbmRsaWVyIHN5bnRheC4gV2UgaGF2ZW4ndApzYWlkIGEgc2lu Z2xlIHdvcmQgYWJvdXQgaG93IExpc3AgYWN0dWFsbHkgb3BlcmF0ZXMuIEl0J3MgdGltZSB0byBm aWxsCnRoaXMgZ2FwW2ZuOjJdLgoKTGlzcCBoYXMgYSBudW1iZXIgb2YgYnVpbHQgaW4gZGF0YSB0 eXBlcy4gSW50ZWdlcnMgYW5kIHN0cmluZ3MsIGZvcgpleGFtcGxlLCBhcmVuJ3QgbXVjaCBkaWZm ZXJlbnQgZnJvbSB3aGF0IHlvdSdyZSB1c2VkIHRvLiBUaGUgbWVhbmluZyBvZgovNzEvIG9yIC8i aGVsbG8iLyBpcyByb3VnaGx5IHRoZSBzYW1lIGluIExpc3AgYXMgaW4gQysrIG9yIEphdmEuIFdo YXQgaXMKb2YgbW9yZSBpbnRlcmVzdCB0byB1cyBhcmUgL3N5bWJvbHMvLCAvbGlzdHMvLCBhbmQg L2Z1bmN0aW9ucy8uIEkgd2lsbApzcGVuZCB0aGUgcmVzdCBvZiB0aGlzIHNlY3Rpb24gZGVzY3Jp YmluZyB0aGVzZSBkYXRhIHR5cGVzIGFzIHdlbGwgYXMKaG93IGEgTGlzcCBlbnZpcm9ubWVudCBj b21waWxlcyBhbmQgZXhlY3V0ZXMgdGhlIHNvdXJjZSBjb2RlIHlvdSB0eXBlCmludG8gaXQgKHRo aXMgaXMgY2FsbGVkIC9ldmFsdWF0aW9uLyBpbiBMaXNwIGxpbmdvKS4gR2V0dGluZyB0aHJvdWdo CnRoaXMgc2VjdGlvbiBpbiBvbmUgcGllY2UgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5n IHRydWUgcG90ZW50aWFsCm9mIExpc3AncyBtZXRhcHJvZ3JhbW1pbmcsIHRoZSB1bml0eSBvZiBj b2RlIGFuZCBkYXRhLCBhbmQgdGhlIG5vdGlvbiBvZgpkb21haW4gc3BlY2lmaWMgbGFuZ3VhZ2Vz LiBEb24ndCB0aGluayBvZiB0aGlzIHNlY3Rpb24gYXMgYSBjaG9yZQp0aG91Z2gsIEknbGwgdHJ5 IHRvIG1ha2UgaXQgZnVuIGFuZCBhY2Nlc3NpYmxlLiBIb3BlZnVsbHkgeW91IGNhbiBwaWNrCnVw IGEgZmV3IGludGVyZXN0aW5nIGlkZWFzIG9uIHRoZSB3YXkuIE9rLiBMZXQncyBzdGFydCB3aXRo IExpc3AncwpzeW1ib2xzLgoKQSBzeW1ib2wgaW4gTGlzcCBpcyByb3VnaGx5IGVxdWl2YWxlbnQg dG8gQysrIG9yIEphdmEncyBub3Rpb24gb2YgYW4KaWRlbnRpZmllci4gSXQncyBhIG5hbWUgeW91 IGNhbiB1c2UgdG8gYWNjZXNzIGEgdmFyaWFibGUgKGxpa2UKL2N1cnJlbnRUaW1lLywgL2FycmF5 Q291bnQvLCAvbi8sIGV0Yy4pIFRoZSBkaWZmZXJlbmNlIGlzIHRoYXQgYSBzeW1ib2wKaW4gTGlz cCBpcyBhIGxvdCBtb3JlIGxpYmVyYWwgdGhhbiBpdHMgbWFpbnN0cmVhbSBpZGVudGlmaWVyCmFs dGVybmF0aXZlLiBJbiBDKysgb3IgSmF2YSB5b3UncmUgbGltaXRlZCB0byBhbHBoYW51bWVyaWMg Y2hhcmFjdGVycwphbmQgYW4gdW5kZXJzY29yZS4gSW4gTGlzcCwgeW91IGFyZSBub3QuIEZvciBl eGFtcGxlIC8rLyBpcyBhIHZhbGlkCnN5bWJvbC4gU28gaXMgLy0vLCAvPS8sIC9oZWxsby13b3Js ZC8sIC9oZWxsbyt3b3JsZC8sIC8qLywgZXRjLiAoeW91IGNhbgpmaW5kIHRoZSBleGFjdCBkZWZp bml0aW9uIG9mIHZhbGlkIExpc3Agc3ltYm9scyBvbmxpbmUpLiBZb3UgY2FuIGFzc2lnbgp0byB0 aGVzZSBzeW1ib2xzIGFueSBkYXRhLXR5cGUgeW91IGxpa2UuIExldCdzIGlnbm9yZSBMaXNwIHN5 bnRheCBhbmQKdXNlIHBzZXVkby1jb2RlIGZvciBub3cuIEFzc3VtZSB0aGF0IGEgZnVuY3Rpb24g L3NldC8gYXNzaWducyBzb21lIHZhbHVlCnRvIGEgc3ltYm9sIChsaWtlIC89LyBkb2VzIGluIEph dmEgb3IgQysrKS4gVGhlIGZvbGxvd2luZyBhcmUgYWxsIHZhbGlkCmV4YW1wbGVzOgoKIytCRUdJ Tl9FWEFNUExFCiAgICBzZXQodGVzdCwgNSkgICAgICAgICAgICAvLyBzeW1ib2wgJ3Rlc3QnIHdp bGwgZXF1YWwgYW4gaW50ZWdlciA1CiAgICBzZXQoPSwgNSkgICAgICAgICAgICAgICAvLyBzeW1i b2wgJz0nIHdpbGwgZXF1YWwgYW4gaW50ZWdlciA1CiAgICBzZXQodGVzdCwgImhlbGxvIikgICAg ICAvLyBzeW1ib2wgJ3Rlc3QnIHdpbGwgZXF1YWwgYSBzdHJpbmcgImhlbGxvIgogICAgc2V0KHRl c3QsID0pICAgICAgICAgICAgLy8gYXQgdGhpcyBwb2ludCBzeW1ib2wgJz0nIGlzIGVxdWFsIHRv IDUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoZXJlZm9yZSBzeW1ib2wgJ3Rlc3Qn IHdpbGwgZXF1YWwgdG8gNQogICAgc2V0KCosICJoZWxsbyIpICAgICAgICAgLy8gc3ltYm9sICcq JyB3aWxsIGVxdWFsIGEgc3RyaW5nICJoZWxsbyIKIytFTkRfRVhBTVBMRQoKQXQgdGhpcyBwb2lu dCBzb21ldGhpbmcgbXVzdCBzbWVsbCB3cm9uZy4gSWYgd2UgY2FuIGFzc2lnbiBzdHJpbmdzIGFu ZAppbnRlZ2VycyB0byBzeW1ib2xzIGxpa2UgLyovLCBob3cgZG9lcyBMaXNwIGRvIG11bHRpcGxp Y2F0aW9uPyBBZnRlcgphbGwsIC8qLyBtZWFucyBtdWx0aXBseSwgcmlnaHQ/IFRoZSBhbnN3ZXIg aXMgcHJldHR5IHNpbXBsZS4gRnVuY3Rpb25zCmluIExpc3AgYXJlbid0IHNwZWNpYWwuIFRoZXJl IGlzIGEgZGF0YS10eXBlLCBmdW5jdGlvbiwganVzdCBsaWtlCmludGVnZXIgYW5kIHN0cmluZywg dGhhdCB5b3UgYXNzaWduIHRvIHN5bWJvbHMuIEEgbXVsdGlwbGljYXRpb24KZnVuY3Rpb24gaXMg YnVpbHQgaW50byBMaXNwIGFuZCBpcyBhc3NpZ25lZCB0byBhIHN5bWJvbCAvKi8uIFlvdSBjYW4K cmVhc3NpZ24gYSBkaWZmZXJlbnQgdmFsdWUgdG8gLyovIGFuZCB5b3UnZCBsb3NlIHRoZSBtdWx0 aXBsaWNhdGlvbgpmdW5jdGlvbi4gT3IgeW91IGNhbiBzdG9yZSB0aGUgdmFsdWUgb2YgdGhlIGZ1 bmN0aW9uIGluIHNvbWUgb3RoZXIKdmFyaWFibGUuIEFnYWluLCB1c2luZyBwc2V1ZG8tY29kZToK CiMrQkVHSU5fRVhBTVBMRQogICAgKigzLCA0KSAgICAgICAgICAgICAgICAgLy8gbXVsdGlwbGll cyAzIGJ5IDQsIHJlc3VsdGluZyBpbiAxMgogICAgc2V0KHRlbXAsICopICAgICAgICAgICAgLy8g c3ltYm9sICcqJyBpcyBlcXVhbCB0byB0aGUgbXVsdGlwbHkgZnVuY3Rpb24KICAgICAgICAgICAg ICAgICAgICAgICAgICAgIC8vIHNvIHRlbXAgd2lsbCBlcXVhbCB0byB0aGUgbXVsdGlwbHkgZnVu Y3Rpb24KICAgIHNldCgqLCAzKSAgICAgICAgICAgICAgIC8vIHNldHMgc3ltYm9sICcqJyB0byBl cXVhbCB0byAzCiAgICAqKDMsIDQpICAgICAgICAgICAgICAgICAvLyBlcnJvciwgc3ltYm9sICcq JyBubyBsb25nZXIgZXF1YWxzIHRvIGEgZnVuY3Rpb24KICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8vIGl0J3MgZXF1YWwgdG8gMwogICAgdGVtcCgzLCA0KSAgICAgICAgICAgICAgLy8gdGVt cCBlcXVhbHMgdG8gYSBtdWx0aXBseSBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gc28gTGlzcCBtdWx0aXBsaWVzIDMgYnkgNCByZXN1bHRpbmcgaW4gMTIKICAgIHNldCgq LCB0ZW1wKSAgICAgICAgICAgIC8vIHN5bWJvbCAnKicgZXF1YWxzIG11bHRpcGx5IGZ1bmN0aW9u IGFnYWluCiAgICAqKDMsIDQpICAgICAgICAgICAgICAgICAvLyBtdWx0aXBsaWVzIDMgYnkgNCwg cmVzdWx0aW5nIGluIDEyCiMrRU5EX0VYQU1QTEUKCllvdSBjYW4gZXZlbiBkbyB3YWNreSBzdHVm ZiBsaWtlIHJlYXNzaWduaW5nIHBsdXMgdG8gbWludXM6CgojK0JFR0lOX0VYQU1QTEUKICAgIHNl dCgrLCAtKSAgICAgICAgICAgICAgIC8vIHRoZSB2YWx1ZSBvZiAnLScgaXMgYSBidWlsdCBpbiBt aW51cyBmdW5jdGlvbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc28gbm93IHN5bWJv bCAnKycgZXF1YWxzIHRvIGEgbWludXMgZnVuY3Rpb24KICAgICsoNSwgNCkgICAgICAgICAgICAg ICAgIC8vIHNpbmNlIHN5bWJvbCAnKycgaXMgZXF1YWwgdG8gdGhlIG1pbnVzIGZ1bmN0aW9uCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIHJlc3VsdHMgaW4gMQojK0VORF9FWEFN UExFCgpJJ3ZlIHVzZWQgZnVuY3Rpb25zIHF1aXRlIGxpYmVyYWxseSBpbiB0aGVzZSBleGFtcGxl cyBidXQgSSBkaWRuJ3QKZGVzY3JpYmUgdGhlbSB5ZXQuIEEgZnVuY3Rpb24gaW4gTGlzcCBpcyBq dXN0IGEgZGF0YS10eXBlIGxpa2UgYW4KaW50ZWdlciwgYSBzdHJpbmcsIG9yIGEgc3ltYm9sLiBB IGZ1bmN0aW9uIGRvZXNuJ3QgaGF2ZSBhIG5vdGlvbiBvZiBhCm5hbWUgbGlrZSBpbiBKYXZhIG9y IEMrKy4gSW5zdGVhZCwgaXQgc3RhbmRzIG9uIGl0cyBvd24uIEVmZmVjdGl2ZWx5IGl0CmlzIGEg cG9pbnRlciB0byBhIGJsb2NrIG9mIGNvZGUgYWxvbmcgd2l0aCBzb21lIGluZm9ybWF0aW9uIChs aWtlIGEKbnVtYmVyIG9mIHBhcmFtZXRlcnMgaXQgYWNjZXB0cykuIFlvdSBvbmx5IGdpdmUgdGhl IGZ1bmN0aW9uIGEgbmFtZSBieQphc3NpZ25pbmcgaXQgdG8gYSBzeW1ib2wsIGp1c3QgbGlrZSB5 b3UgYXNzaWduIGFuIGludGVnZXIgb3IgYSBzdHJpbmcuCllvdSBjYW4gY3JlYXRlIGEgZnVuY3Rp b24gYnkgdXNpbmcgYSBidWlsdCBpbiBmdW5jdGlvbiBmb3IgY3JlYXRpbmcKZnVuY3Rpb25zLCBh c3NpZ25lZCB0byBhIHN5bWJvbCAnZm4nLiBVc2luZyBwc2V1ZG8tY29kZToKCiMrQkVHSU5fRVhB TVBMRQogICAgZm4gW2FdCiAgICB7CiAgICAgICAgcmV0dXJuICooYSwgMik7CiAgICB9CiMrRU5E X0VYQU1QTEUKClRoaXMgcmV0dXJucyBhIGZ1bmN0aW9uIHRoYXQgdGFrZXMgYSBzaW5nbGUgcGFy YW1ldGVyIG5hbWVkIC8nYScvIGFuZApkb3VibGVzIGl0LiBOb3RlIHRoYXQgdGhlIGZ1bmN0aW9u IGhhcyBubyBuYW1lIGJ1dCB5b3UgY2FuIGFzc2lnbiBpdCB0bwphIHN5bWJvbDoKCiMrQkVHSU5f RVhBTVBMRQogICAgc2V0KHRpbWVzLXR3bywgZm4gW2FdIHsgcmV0dXJuICooYSwgMik7IH0pCiMr RU5EX0VYQU1QTEUKCldlIGNhbiBub3cgY2FsbCB0aGlzIGZ1bmN0aW9uOgoKIytCRUdJTl9FWEFN UExFCiAgICB0aW1lcy10d28oNSkgICAgICAgICAgICAgLy8gcmV0dXJucyAxMAojK0VORF9FWEFN UExFCgpOb3cgdGhhdCB3ZSB3ZW50IG92ZXIgc3ltYm9scyBhbmQgZnVuY3Rpb25zLCB3aGF0IGFi b3V0IGxpc3RzPyBXZWxsLCB5b3UKYWxyZWFkeSBrbm93IGEgbG90IGFib3V0IHRoZW0uIExpc3Rz IGFyZSBzaW1wbHkgcGllY2VzIG9mIFhNTCB3cml0dGVuIGluCnMtZXhwcmVzc2lvbiBmb3JtLiBB IGxpc3QgaXMgc3BlY2lmaWVkIGJ5IHBhcmVudGhlc2VzIGFuZCBjb250YWlucyBMaXNwCmRhdGEt dHlwZXMgKGluY2x1ZGluZyBvdGhlciBsaXN0cykgc2VwYXJhdGVkIGJ5IGEgc3BhY2UuIEZvciBl eGFtcGxlCih0aGlzIGlzIHJlYWwgTGlzcCwgbm90ZSB0aGF0IHdlIHVzZSBzZW1pY29sb25zIGZv ciBjb21tZW50cyBub3cpOgoKIytCRUdJTl9FWEFNUExFCiAgICAoKSAgICAgICAgICAgICAgICAg ICAgICA7IGFuIGVtcHR5IGxpc3QKICAgICgxKSAgICAgICAgICAgICAgICAgICAgIDsgYSBsaXN0 IHdpdGggYSBzaW5nbGUgZWxlbWVudCwgMQogICAgKDEgInRlc3QiKSAgICAgICAgICAgICAgOyBh IGxpc3Qgd2l0aCB0d28gZWxlbWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgYW4g aW50ZWdlciAxIGFuZCBhIHN0cmluZyAidGVzdCIKICAgICh0ZXN0ICJoZWxsbyIpICAgICAgICAg IDsgYSBsaXN0IHdpdGggdHdvIGVsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 IGEgc3ltYm9sIHRlc3QgYW5kIGEgc3RyaW5nICJoZWxsbyIKICAgICh0ZXN0ICgxIDIpICJoZWxs byIpICAgIDsgYSBsaXN0IHdpdGggdGhyZWUgZWxlbWVudHMsIGEgc3ltYm9sIHRlc3QKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsgYSBsaXN0IG9mIHR3byBpbnRlZ2VycyAxIGFuZCAyCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCBhIHN0cmluZyAiaGVsbG8iCiMrRU5EX0VY QU1QTEUKCldoZW4gYSBMaXNwIHN5c3RlbSBlbmNvdW50ZXJzIGxpc3RzIGluIHRoZSBzb3VyY2Ug Y29kZSBpdCBhY3RzIGV4YWN0bHkKbGlrZSBBbnQgZG9lcyB3aGVuIGl0IGVuY291bnRlcnMgWE1M IC0gaXQgYXR0ZW1wdHMgdG8gZXhlY3V0ZSB0aGVtLiBJbgpmYWN0LCBMaXNwIHNvdXJjZSBjb2Rl IGlzIG9ubHkgc3BlY2lmaWVkIHVzaW5nIGxpc3RzLCBqdXN0IGxpa2UgQW50CnNvdXJjZSBjb2Rl IGlzIG9ubHkgc3BlY2lmaWVkIHVzaW5nIFhNTC4gTGlzcCBleGVjdXRlcyBsaXN0cyBpbiB0aGUK Zm9sbG93aW5nIG1hbm5lci4gVGhlIGZpcnN0IGVsZW1lbnQgb2YgdGhlIGxpc3QgaXMgdHJlYXRl ZCBhcyB0aGUgbmFtZQpvZiBhIGZ1bmN0aW9uLiBUaGUgcmVzdCBvZiB0aGUgZWxlbWVudHMgYXJl IHRyZWF0ZWQgYXMgZnVuY3Rpb25zCnBhcmFtZXRlcnMuIElmIG9uZSBvZiB0aGUgcGFyYW1ldGVy cyBpcyBhbm90aGVyIGxpc3QgaXQgaXMgZXhlY3V0ZWQKdXNpbmcgdGhlIHNhbWUgcHJpbmNpcGxl cyBhbmQgdGhlIHJlc3VsdCBpcyBwYXNzZWQgYXMgYSBwYXJhbWV0ZXIgdG8gdGhlCm9yaWdpbmFs IGZ1bmN0aW9uLiBUaGF0J3MgaXQuIFdlIGNhbiB3cml0ZSByZWFsIGNvZGUgbm93OgoKIytCRUdJ Tl9FWEFNUExFCiAgICAoKiAzIDQpICAgICAgICAgICAgICAgICA7IGVxdWl2YWxlbnQgdG8gcHNl dWRvLWNvZGUgKigzLCA0KS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgU3ltYm9sICcq JyBpcyBhIGZ1bmN0aW9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IDMgYW5kIDQgYXJl IGl0cyBwYXJhbWV0ZXJzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXR1cm5zIDEy LgogICAgKHRpbWVzLXR3byA1KSAgICAgICAgICAgOyByZXR1cm5zIDEwCiAgICAoMyA0KSAgICAg ICAgICAgICAgICAgICA7IGVycm9yOiAzIGlzIG5vdCBhIGZ1bmN0aW9uCiAgICAodGltZXMtdHdv KSAgICAgICAgICAgICAgOyBlcnJvciwgdGltZXMtdHdvIGV4cGVjdHMgb25lIHBhcmFtZXRlcgog ICAgKHRpbWVzLXR3byAzIDQpICAgICAgICAgIDsgZXJyb3IsIHRpbWVzLXR3byBleHBlY3RzIG9u ZSBwYXJhbWV0ZXIKICAgIChzZXQgKyAtKSAgICAgICAgICAgICAgIDsgc2V0cyBzeW1ib2wgJysn IHRvIGJlIGVxdWFsIHRvIHdoYXRldmVyIHN5bWJvbCAnLScKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsgZXF1YWxzIHRvLCB3aGljaCBpcyBhIG1pbnVzIGZ1bmN0aW9uCiAgICAoKyA1IDQp ICAgICAgICAgICAgICAgICA7IHJldHVybnMgMSBzaW5jZSBzeW1ib2wgJysnIGlzIG5vdyBlcXVh bAogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB0byB0aGUgbWludXMgZnVuY3Rpb24KICAg ICgqIDMgKCogMiAyKSkgICAgICAgICAgIDsgbXVsdGlwbGllcyAzIGJ5IHRoZSBzZWNvbmQgcGFy YW1ldGVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7ICh3aGljaCBpcyBhIGZ1bmN0aW9u IGNhbGwgdGhhdCByZXR1cm5zIDQpLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBSZXR1 cm5zIDEyLgojK0VORF9FWEFNUExFCgpOb3RlIHRoYXQgc28gZmFyIGV2ZXJ5IGxpc3Qgd2UndmUg c3BlY2lmaWVkIHdhcyB0cmVhdGVkIGJ5IGEgTGlzcCBzeXN0ZW0KYXMgY29kZS4gQnV0IGhvdyBj YW4gd2UgdHJlYXQgYSBsaXN0IGFzIGRhdGE/IEFnYWluLCBpbWFnaW5lIGFuIEFudCB0YXNrCnRo YXQgYWNjZXB0cyBYTUwgYXMgb25lIG9mIGl0cyBwYXJhbWV0ZXJzLiBJbiBMaXNwIHdlIGRvIHRo aXMgdXNpbmcgYQpxdW90ZSBvcGVyYXRvciAvJy8gbGlrZSBzbzoKCiMrQkVHSU5fRVhBTVBMRQog ICAgKHNldCB0ZXN0ICcoMSAyKSkgICAgICAgOyB0ZXN0IGlzIGVxdWFsIHRvIGEgbGlzdCBvZiB0 d28gaW50ZWdlcnMsIDEgYW5kIDIKICAgIChzZXQgdGVzdCAoMSAyKSkgICAgICAgIDsgZXJyb3Is IDEgaXMgbm90IGEgZnVuY3Rpb24KICAgIChzZXQgdGVzdCAnKCogMyA0KSkgICAgIDsgc2V0cyB0 ZXN0IHRvIGEgbGlzdCBvZiB0aHJlZSBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsgYSBzeW1ib2wgKiwgYW4gaW50ZWdlciAzLCBhbmQgYW4gaW50ZWdlciA0CiMrRU5EX0VY QU1QTEUKCldlIGNhbiB1c2UgYSBidWlsdCBpbiBmdW5jdGlvbiAvaGVhZC8gdG8gcmV0dXJuIHRo ZSBmaXJzdCBlbGVtZW50IG9mIHRoZQpsaXN0LCBhbmQgYSBidWlsdCBpbiBmdW5jdGlvbiAvdGFp bC8gdG8gcmV0dXJuIHRoZSByZXN0IG9mIHRoZSBsaXN0J3MKZWxlbWVudHM6CgojK0JFR0lOX0VY QU1QTEUKICAgIChoZWFkICcoKiAzIDQpKSAgICAgICAgIDsgcmV0dXJucyBhIHN5bWJvbCAnKicK ICAgICh0YWlsICcoKiAzIDQpKSAgICAgICAgIDsgcmV0dXJucyBhIGxpc3QgKDMgNCkKICAgICho ZWFkICh0YWlsICcoICogMyA0KSkpIDsgKHRhaWwgJygqIDMgNCkpIHJldHVybnMgYSBsaXN0ICgz IDQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGFuZCAoaGVhZCAnKDMgNCkpIHJldHVy bnMgMy4KICAgIChoZWFkIHRlc3QpICAgICAgICAgICAgIDsgdGVzdCB3YXMgc2V0IHRvIGEgbGlz dCBpbiBwcmV2aW91cyBleGFtcGxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJldHVy bnMgYSBzeW1ib2wgJyonCiMrRU5EX0VYQU1QTEUKCllvdSBjYW4gdGhpbmsgb2YgYnVpbHQgaW4g TGlzcCBmdW5jdGlvbnMgYXMgeW91IHRoaW5rIG9mIEFudCB0YXNrcy4gVGhlCmRpZmZlcmVuY2Ug aXMgdGhhdCB3ZSBkb24ndCBoYXZlIHRvIGV4dGVuZCBMaXNwIGluIGFub3RoZXIgbGFuZ3VhZ2UK KGFsdGhvdWdoIHdlIGNhbiksIHdlIGNhbiBleHRlbmQgaXQgaW4gTGlzcCBpdHNlbGYgYXMgd2Ug ZGlkIHdpdGggdGhlCi90aW1lcy10d28vIGV4YW1wbGUuIExpc3AgY29tZXMgd2l0aCBhIHZlcnkg Y29tcGFjdCBzZXQgb2YgYnVpbHQgaW4KZnVuY3Rpb25zIC0gdGhlIG5lY2Vzc2FyeSBtaW5pbXVt LiBUaGUgcmVzdCBvZiB0aGUgbGFuZ3VhZ2UgaXMKaW1wbGVtZW50ZWQgYXMgYSBzdGFuZGFyZCBs aWJyYXJ5IGluIExpc3AgaXRzZWxmLgoKKiBMaXNwIE1hY3JvcwoKU28gZmFyIHdlJ3ZlIGxvb2tl ZCBhdCBtZXRhcHJvZ3JhbW1pbmcgaW4gdGVybXMgb2YgYSBzaW1wbGUgdGVtcGxhdGluZwplbmdp bmUgc2ltaWxhciB0byBKU1AuIFdlJ3ZlIGRvbmUgY29kZSBnZW5lcmF0aW9uIHVzaW5nIHNpbXBs ZSBzdHJpbmcKbWFuaXB1bGF0aW9ucy4gVGhpcyBpcyBnZW5lcmFsbHkgaG93IG1vc3QgY29kZSBn ZW5lcmF0aW9uIHRvb2xzIGdvIGFib3V0CmRvaW5nIHRoaXMgdGFzay4gQnV0IHdlIGNhbiBkbyBt dWNoIGJldHRlci4gVG8gZ2V0IG9uIHRoZSByaWdodCB0cmFjaywKbGV0J3Mgc3RhcnQgb2ZmIHdp dGggYSBxdWVzdGlvbi4gSG93IHdvdWxkIHdlIHdyaXRlIGEgdG9vbCB0aGF0CmF1dG9tYXRpY2Fs bHkgZ2VuZXJhdGVzIEFudCBidWlsZCBzY3JpcHRzIGJ5IGxvb2tpbmcgYXQgc291cmNlIGZpbGVz IGluCnRoZSBkaXJlY3Rvcnkgc3RydWN0dXJlPwoKV2UgY291bGQgdGFrZSB0aGUgZWFzeSB3YXkg b3V0IGFuZCBnZW5lcmF0ZSBBbnQgWE1MIGJ5IG1hbmlwdWxhdGluZwpzdHJpbmdzLiBPZiBjb3Vy c2UgYSBtdWNoIG1vcmUgYWJzdHJhY3QsIGV4cHJlc3NpdmUgYW5kIGV4dGVuc2libGUgd2F5Cmlz IHRvIHdvcmsgd2l0aCBYTUwgcHJvY2Vzc2luZyBsaWJyYXJpZXMgdG8gZ2VuZXJhdGUgWE1MIG5v ZGVzIGRpcmVjdGx5CmluIG1lbW9yeS4gVGhlIG5vZGVzIGNhbiB0aGVuIGJlIHNlcmlhbGl6ZWQg dG8gc3RyaW5ncyBhdXRvbWF0aWNhbGx5LgpGdXJ0aGVybW9yZSwgb3VyIHRvb2wgd291bGQgYmUg YWJsZSB0byBhbmFseXplIGFuZCB0cmFuc2Zvcm0gZXhpc3RpbmcKQW50IGJ1aWxkIHNjcmlwdHMg YnkgbG9hZGluZyB0aGVtIGFuZCBkZWFsaW5nIHdpdGggdGhlIFhNTCBub2RlcwpkaXJlY3RseS4g V2Ugd291bGQgYWJzdHJhY3Qgb3Vyc2VsdmVzIGZyb20gc3RyaW5ncyBhbmQgZGVhbCB3aXRoIGhp Z2hlcgpsZXZlbCBjb25jZXB0cyB3aGljaCBsZXQgdXMgZ2V0IHRoZSBqb2IgZG9uZSBmYXN0ZXIg YW5kIGVhc2llci4KCk9mIGNvdXJzZSB3ZSBjb3VsZCB3cml0ZSBBbnQgdGFza3MgdGhhdCBhbGxv dyBkZWFsaW5nIHdpdGggWE1MCnRyYW5zZm9ybWF0aW9ucyBhbmQgd3JpdGUgb3VyIGdlbmVyYXRp b24gdG9vbCBpbiBBbnQgaXRzZWxmLiBPciB3ZSBjb3VsZApqdXN0IHVzZSBMaXNwLiBBcyB3ZSBz YXcgZWFybGllciwgYSBsaXN0IGlzIGEgYnVpbHQgaW4gTGlzcCBkYXRhCnN0cnVjdHVyZSBhbmQg TGlzcCBoYXMgYSBudW1iZXIgb2YgZmFjaWxpdGllcyBmb3IgcHJvY2Vzc2luZyBsaXN0cwpxdWlj a2x5IGFuZCBlZmZlY3RpdmVseSAoL2hlYWQvIGFuZCAvdGFpbC8gYmVpbmcgdGhlIHNpbXBsZXN0 IG9uZXMpLgpBZGRpdGlvbmFsbHkgTGlzcCBoYXMgbm8gc2VtYW50aWMgY29uc3RyYWludHMgLSB5 b3UgY2FuIGhhdmUgeW91ciBjb2RlCihhbmQgZGF0YSkgaGF2ZSBhbnkgc3RydWN0dXJlIHlvdSB3 YW50LgoKTWV0YXByb2dyYW1taW5nIGluIExpc3AgaXMgZG9uZSB1c2luZyBhIGNvbnN0cnVjdCBj YWxsZWQgYSAibWFjcm8iLgpMZXQncyB0cnkgdG8gZGV2ZWxvcCBhIHNldCBvZiBtYWNyb3MgdGhh dCB0cmFuc2Zvcm0gZGF0YSBsaWtlLCBzYXksIGEKdG8tZG8gbGlzdCAoc3VycHJpc2VkPyksIGlu dG8gYSBsYW5ndWFnZSBmb3IgZGVhbGluZyB3aXRoIHRvLWRvIGxpc3RzLgoKTGV0J3MgcmVjYWxs IG91ciB0by1kbyBsaXN0IGV4YW1wbGUuIFRoZSBYTUwgbG9va3MgbGlrZSB0aGlzOgoKIytCRUdJ Tl9FWEFNUExFCiAgICA8dG9kbyBuYW1lPSJob3VzZXdvcmsiPgogICAgICAgIDxpdGVtIHByaW9y aXR5PSJoaWdoIj5DbGVhbiB0aGUgaG91c2UuPC9pdGVtPgogICAgICAgIDxpdGVtIHByaW9yaXR5 PSJtZWRpdW0iPldhc2ggdGhlIGRpc2hlcy48L2l0ZW0+CiAgICAgICAgPGl0ZW0gcHJpb3JpdHk9 Im1lZGl1bSI+QnV5IG1vcmUgc29hcC48L2l0ZW0+CiAgICA8L3RvZG8+CiMrRU5EX0VYQU1QTEUK ClRoZSBjb3JyZXNwb25kaW5nIHMtZXhwcmVzc2lvbiB2ZXJzaW9uIGxvb2tzIGxpa2UgdGhpczoK CiMrQkVHSU5fRVhBTVBMRQogICAgKHRvZG8gImhvdXNld29yayIKICAgICAgICAoaXRlbSAocHJp b3JpdHkgaGlnaCkgIkNsZWFuIHRoZSBob3VzZS4iKQogICAgICAgIChpdGVtIChwcmlvcml0eSBt ZWRpdW0pICJXYXNoIHRoZSBkaXNoZXMuIikKICAgICAgICAoaXRlbSAocHJpb3JpdHkgbWVkaXVt KSAiQnV5IG1vcmUgc29hcC4iKSkKIytFTkRfRVhBTVBMRQoKU3VwcG9zZSB3ZSdyZSB3cml0aW5n IGEgdG8tZG8gbWFuYWdlciBhcHBsaWNhdGlvbi4gV2Uga2VlcCBvdXIgdG8tZG8KaXRlbXMgc2Vy aWFsaXplZCBpbiBhIHNldCBvZiBmaWxlcyBhbmQgd2hlbiB0aGUgcHJvZ3JhbSBzdGFydHMgdXAg d2UKd2FudCB0byByZWFkIHRoZW0gYW5kIGRpc3BsYXkgdGhlbSB0byB0aGUgdXNlci4gSG93IHdv dWxkIHdlIGRvIHRoaXMKd2l0aCBYTUwgYW5kIHNvbWUgb3RoZXIgbGFuZ3VhZ2UgKHNheSwgSmF2 YSk/IFdlJ2QgcGFyc2Ugb3VyIFhNTCBmaWxlcwp3aXRoIHRoZSB0by1kbyBsaXN0cyB1c2luZyBz b21lIFhNTCBwYXJzZXIsIHdyaXRlIHRoZSBjb2RlIHRoYXQgd2Fsa3MKdGhlIFhNTCB0cmVlIGFu ZCBjb252ZXJ0cyBpdCB0byBhIEphdmEgZGF0YSBzdHJ1Y3R1cmUgKGJlY2F1c2UgZnJhbmtseSwK cHJvY2Vzc2luZyBET00gaW4gSmF2YSBpcyBhIHBhaW4gaW4gdGhlIG5lY2spLCBhbmQgdGhlbiB1 c2UgdGhpcyBkYXRhCnN0cnVjdHVyZSB0byBkaXNwbGF5IHRoZSBkYXRhLiBOb3csIGhvdyB3b3Vs ZCB3ZSBkbyB0aGUgc2FtZSB0aGluZyBpbgpMaXNwPwoKSWYgd2Ugd2VyZSB0byBhZG9wdCB0aGUg c2FtZSBhcHByb2FjaCB3ZSdkIHBhcnNlIHRoZSBmaWxlcyB1c2luZyBMaXNwCmxpYnJhcmllcyBy ZXNwb25zaWJsZSBmb3IgcGFyc2luZyBYTUwuIFRoZSBYTUwgd291bGQgdGhlbiBiZSBwcmVzZW50 ZWQKdG8gdXMgYXMgYSBMaXNwIGxpc3QgKGFuIHMtZXhwcmVzc2lvbikgYW5kIHdlJ2Qgd2FsayB0 aGUgbGlzdCBhbmQKcHJlc2VudCByZWxldmFudCBkYXRhIHRvIHRoZSB1c2VyLiBPZiBjb3Vyc2Ug aWYgd2UgdXNlZCBMaXNwIGl0IHdvdWxkCm1ha2Ugc2Vuc2UgdG8gcGVyc2lzdCB0aGUgZGF0YSBh cyBzLWV4cHJlc3Npb25zIGRpcmVjdGx5IGFzIHRoZXJlJ3Mgbm8KcmVhc29uIHRvIGRvIGFuIFhN TCBjb252ZXJzaW9uLiBXZSB3b3VsZG4ndCBuZWVkIHNwZWNpYWwgcGFyc2luZwpsaWJyYXJpZXMg c2luY2UgZGF0YSBwZXJzaXN0ZWQgYXMgYSBzZXQgb2Ygcy1leHByZXNzaW9ucyBpcyB2YWxpZCBM aXNwCmFuZCB3ZSBjb3VsZCB1c2UgTGlzcCBjb21waWxlciB0byBwYXJzZSBpdCBhbmQgc3RvcmUg aXQgaW4gbWVtb3J5IGFzIGEKTGlzcCBsaXN0LiBOb3RlIHRoYXQgTGlzcCBjb21waWxlciAobXVj aCBsaWtlIC5ORVQgY29tcGlsZXIpIGlzCmF2YWlsYWJsZSB0byBhIExpc3AgcHJvZ3JhbSBhdCBy dW50aW1lLgoKQnV0IHdlIGNhbiBkbyBiZXR0ZXIuIEluc3RlYWQgb2Ygd3JpdGluZyBjb2RlIHRv IHdhbGsgdGhlIHMtZXhwcmVzc2lvbgp0aGF0IHN0b3JlcyBvdXIgZGF0YSB3ZSBjb3VsZCB3cml0 ZSBhIG1hY3JvIHRoYXQgYWxsb3dzIHVzIHRvIHRyZWF0IGRhdGEKYXMgY29kZSEgSG93IGRvIG1h Y3JvcyB3b3JrPyBQcmV0dHkgc2ltcGxlLCByZWFsbHkuIFJlY2FsbCB0aGF0IGEgTGlzcApmdW5j dGlvbiBpcyBjYWxsZWQgbGlrZSB0aGlzOgoKIytCRUdJTl9FWEFNUExFCiAgICAoZnVuY3Rpb24t bmFtZSBhcmcxIGFyZzIgYXJnMykKIytFTkRfRVhBTVBMRQoKV2hlcmUgZWFjaCBhcmd1bWVudCBp cyBhIHZhbGlkIExpc3AgZXhwcmVzc2lvbiB0aGF0J3MgZXZhbHVhdGVkIGFuZApwYXNzZWQgdG8g dGhlIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZSBpZiB3ZSByZXBsYWNlIC9hcmcxLyBhYm92ZSB3aXRo IC8oKwo0IDUpLywgaXQgd2lsbCBiZSBldmFsdWF0ZWQgYW5kIC85LyB3b3VsZCBiZSBwYXNzZWQg dG8gdGhlIGZ1bmN0aW9uLiBBCm1hY3JvIHdvcmtzIHRoZSBzYW1lIHdheSBhcyBhIGZ1bmN0aW9u LCBleGNlcHQgaXRzIGFyZ3VtZW50cyBhcmUgbm90CmV2YWx1YXRlZC4KCiMrQkVHSU5fRVhBTVBM RQogICAgKG1hY3JvLW5hbWUgKCsgNCA1KSkKIytFTkRfRVhBTVBMRQoKSW4gdGhpcyBjYXNlLCAo KyA0IDUpIGlzIG5vdCBldmFsdWF0ZWQgYW5kIGlzIHBhc3NlZCB0byB0aGUgbWFjcm8gYXMgYQps aXN0LiBUaGUgbWFjcm8gaXMgdGhlbiBmcmVlIHRvIGRvIHdoYXQgaXQgbGlrZXMgd2l0aCBpdCwg aW5jbHVkaW5nCmV2YWx1YXRpbmcgaXQuIFRoZSByZXR1cm4gdmFsdWUgb2YgYSBtYWNybyBpcyBh IExpc3AgbGlzdCB0aGF0J3MgdHJlYXRlZAphcyBjb2RlLiBUaGUgb3JpZ2luYWwgcGxhY2Ugd2l0 aCB0aGUgbWFjcm8gaXMgcmVwbGFjZWQgd2l0aCB0aGlzIGNvZGUuCkZvciBleGFtcGxlLCB3ZSBj b3VsZCBkZWZpbmUgYSBtYWNybyBwbHVzIHRoYXQgdGFrZXMgdHdvIGFyZ3VtZW50cyBhbmQKcHV0 cyBpbiB0aGUgY29kZSB0aGF0IGFkZHMgdGhlbS4KCldoYXQgZG9lcyBpdCBoYXZlIHRvIGRvIHdp dGggbWV0YXByb2dyYW1taW5nIGFuZCBvdXIgdG8tZG8gbGlzdCBwcm9ibGVtPwpXZWxsLCBmb3Ig b25lLCBtYWNyb3MgYXJlIGxpdHRsZSBiaXRzIG9mIGNvZGUgdGhhdCBnZW5lcmF0ZSBjb2RlIHVz aW5nIGEKbGlzdCBhYnN0cmFjdGlvbi4gQWxzbywgd2UgY291bGQgY3JlYXRlIG1hY3JvcyBuYW1l ZCAvdG8tZG8vIGFuZCAvaXRlbS8KdGhhdCByZXBsYWNlIG91ciBkYXRhIHdpdGggd2hhdGV2ZXIg Y29kZSB3ZSBsaWtlLCBmb3IgaW5zdGFuY2UgY29kZSB0aGF0CmRpc3BsYXlzIHRoZSBpdGVtIHRv IHRoZSB1c2VyLgoKV2hhdCBiZW5lZml0cyBkb2VzIHRoaXMgYXBwcm9hY2ggb2ZmZXI/IFdlIGRv bid0IGhhdmUgdG8gd2FsayB0aGUgbGlzdC4KVGhlIGNvbXBpbGVyIHdpbGwgZG8gaXQgZm9yIHVz IGFuZCB3aWxsIGludm9rZSBhcHByb3ByaWF0ZSBtYWNyb3MuIEFsbAp3ZSBuZWVkIHRvIGRvIGlz IGNyZWF0ZSB0aGUgbWFjcm9zIHRoYXQgY29udmVydCBvdXIgZGF0YSB0byBhcHByb3ByaWF0ZQpj b2RlIQoKRm9yIGV4YW1wbGUsIGEgbWFjcm8gc2ltaWxhciB0byBvdXIgL3RyaXBsZS8gQyBtYWNy byB3ZSBzaG93ZWQgZWFybGllcgpsb29rcyBsaWtlIHRoaXM6CgojK0JFR0lOX0VYQU1QTEUKICAg IChkZWZtYWNybyB0cmlwbGUgKHgpCiAgICAgICAgJygrIH54IH54IH54KSkKIytFTkRfRVhBTVBM RQoKVGhlIHF1b3RlIHByZXZlbnRzIGV2YWx1YXRpb24gd2hpbGUgdGhlIHRpbGRlIGFsbG93cyBp dC4gTm93IGV2ZXJ5IHRpbWUKL3RyaXBsZS8gaXMgZW5jb3VudGVyZWQgaW4gbGlzcCBjb2RlOgoK IytCRUdJTl9FWEFNUExFCiAgICAodHJpcGxlIDQpCiMrRU5EX0VYQU1QTEUKCml0IGlzIHJlcGxh Y2VkIHdpdGggdGhlIGZvbGxvd2luZyBjb2RlOgoKIytCRUdJTl9FWEFNUExFCiAgICAoKyA0IDQg NCkKIytFTkRfRVhBTVBMRQoKV2UgY2FuIGNyZWF0ZSBtYWNyb3MgZm9yIG91ciB0by1kbyBsaXN0 IGl0ZW1zIHRoYXQgd2lsbCBnZXQgY2FsbGVkIGJ5Cmxpc3AgY29tcGlsZXIgYW5kIHdpbGwgdHJh bnNmb3JtIHRoZSB0by1kbyBsaXN0IGludG8gY29kZS4gTm93IG91ciB0by1kbwpsaXN0IHdpbGwg YmUgdHJlYXRlZCBhcyBjb2RlIGFuZCB3aWxsIGJlIGV4ZWN1dGVkLiBTdXBwb3NlIGFsbCB3ZSB3 YW50CnRvIGRvIGlzIHByaW50IGl0IHRvIHN0YW5kYXJkIG91dHB1dCBmb3IgdGhlIHVzZXIgdG8g cmVhZDoKCiMrQkVHSU5fRVhBTVBMRQogICAgKGRlZm1hY3JvIGl0ZW0gKHByaW9yaXR5IG5vdGUp CiAgICAgICAgJyhibG9jawogICAgICAgICAgICAgKHByaW50IHN0ZG91dCB0YWIgIlByaW9yaXR5 OiAiCiAgICAgICAgICAgICAgICAgfihoZWFkICh0YWlsIHByaW9yaXR5KSkgZW5kbCkKICAgICAg ICAgICAgIChwcmludCBzdGRvdXQgdGFiICJOb3RlOiAiIH5ub3RlIGVuZGwgZW5kbCkpKQojK0VO RF9FWEFNUExFCgpXZSd2ZSBqdXN0IGNyZWF0ZWQgYSB2ZXJ5IHNtYWxsIGFuZCBsaW1pdGVkIGxh bmd1YWdlIGZvciBtYW5hZ2luZyB0by1kbwpsaXN0cyBlbWJlZGRlZCBpbiBMaXNwLiBTdWNoIGxh bmd1YWdlcyBhcmUgdmVyeSBzcGVjaWZpYyB0byBhIHBhcnRpY3VsYXIKcHJvYmxlbSBkb21haW4g YW5kIGFyZSBvZnRlbiByZWZlcnJlZCB0byBhcyBkb21haW4gc3BlY2lmaWMgbGFuZ3VhZ2VzIG9y Ci9EU0xzLy4KCiogRG9tYWluIFNwZWNpZmljIExhbmd1YWdlcwoKSW4gdGhpcyBhcnRpY2xlIHdl J3ZlIGFscmVhZHkgZW5jb3VudGVyZWQgdHdvIGRvbWFpbiBzcGVjaWZpYyBsYW5ndWFnZXM6CkFu dCAoc3BlY2lmaWMgdG8gZGVhbGluZyB3aXRoIHByb2plY3QgYnVpbGRzKSBhbmQgb3VyIHVubmFt ZWQKbWluaS1sYW5ndWFnZSBmb3IgZGVhbGluZyB3aXRoIHRvLWRvIGxpc3RzLiBUaGUgZGlmZmVy ZW5jZSBpcyB0aGF0IEFudAp3YXMgd3JpdHRlbiBmcm9tIHNjcmF0Y2ggdXNpbmcgWE1MLCBhbiBY TUwgcGFyc2VyLCBhbmQgSmF2YSB3aGlsZSBvdXIKbGFuZ3VhZ2UgaXMgZW1iZWRkZWQgaW50byBM aXNwIGFuZCBpcyBlYXNpbHkgY3JlYXRlZCB3aXRoaW4gYSBjb3VwbGUgb2YKbWludXRlcy4KCldl J3ZlIGFscmVhZHkgZGlzY3Vzc2VkIHRoZSBiZW5lZml0cyBvZiBEU0xzLCBtYWlubHkgd2h5IEFu dCBpcyB1c2luZwpYTUwsIG5vdCBKYXZhIHNvdXJjZSBjb2RlLiBMaXNwIGxldHMgdXMgY3JlYXRl IGFzIG1hbnkgRFNMcyBhcyB3ZSBuZWVkCmZvciBvdXIgcHJvYmxlbS4gV2UgY2FuIGNyZWF0ZSBk b21haW4gc3BlY2lmaWMgbGFuZ3VhZ2VzIGZvciBjcmVhdGluZwp3ZWIgYXBwbGljYXRpb25zLCB3 cml0aW5nIG1hc3NpdmVseSBtdWx0aXBsYXllciBnYW1lcywgZG9pbmcgZml4ZWQKaW5jb21lIHRy YWRpbmcsIHNvbHZpbmcgdGhlIHByb3RlaW4gZm9sZGluZyBwcm9ibGVtLCBkZWFsaW5nIHdpdGgK dHJhbnNhY3Rpb25zLCBldGMuIFdlIGNhbiBsYXllciB0aGVzZSBsYW5ndWFnZXMgb24gdG9wIG9m IGVhY2ggb3RoZXIgYW5kCmNyZWF0ZSBhIGxhbmd1YWdlIGZvciB3cml0aW5nIHdlYi1iYXNlZCB0 cmFkaW5nIGFwcGxpY2F0aW9ucyBieSB0YWtpbmcKYWR2YW50YWdlIG9mIG91ciB3ZWIgYXBwbGlj YXRpb24gbGFuZ3VhZ2UgYW5kIGJvbmQgdHJhZGluZyBsYW5ndWFnZS4KRXZlcnkgZGF5IHdlJ2Qg cmVhcCB0aGUgYmVuZWZpdHMgb2YgdGhpcyBhcHByb2FjaCwgbXVjaCBsaWtlIHdlIHJlYXAgdGhl CmJlbmVmaXRzIG9mIEFudC4KClVzaW5nIERTTHMgdG8gc29sdmUgcHJvYmxlbXMgcmVzdWx0cyBp biBtdWNoIG1vcmUgY29tcGFjdCwgbWFpbnRhaW5hYmxlLApmbGV4aWJsZSBwcm9ncmFtcy4gSW4g YSB3YXkgd2UgY3JlYXRlIHRoZW0gaW4gSmF2YSBieSBjcmVhdGluZyBjbGFzc2VzCnRoYXQgaGVs cCB1cyBzb2x2ZSB0aGUgcHJvYmxlbS4gVGhlIGRpZmZlcmVuY2UgaXMgdGhhdCBMaXNwIGFsbG93 cyB1cyB0bwp0YWtlIHRoaXMgYWJzdHJhY3Rpb24gdG8gdGhlIG5leHQgbGV2ZWw6IHdlJ3JlIG5v dCBsaW1pdGVkIGJ5IEphdmEncwpwYXJzZXIuIFRoaW5rIG9mIHdyaXRpbmcgYnVpbGQgc2NyaXB0 cyBpbiBKYXZhIGl0c2VsZiB1c2luZyBzb21lCnN1cHBvcnRpbmcgbGlicmFyeS4gQ29tcGFyZSBp dCB0byB1c2luZyBBbnQuIE5vdyBhcHBseSB0aGlzIHNhbWUKY29tcGFyaXNvbiB0byBldmVyeSBz aW5nbGUgcHJvYmxlbSB5b3UndmUgZXZlciB3b3JrZWQgb24gYW5kIHlvdSdsbApiZWdpbiB0byBn bGltcHNlIGEgc21hbGwgc2hhcmUgb2YgdGhlIGJlbmVmaXRzIG9mZmVyZWQgYnkgTGlzcC4KCiog V2hhdCdzIG5leHQ/CgpMZWFybmluZyBMaXNwIGlzIGFuIHVwaGlsbCBiYXR0bGUuIEV2ZW4gdGhv dWdoIGluIENvbXB1dGVyIFNjaWVuY2UgdGVybXMKTGlzcCBpcyBhbiBhbmNpZW50IGxhbmd1YWdl LCBmZXcgcGVvcGxlIHRvIGRhdGUgZmlndXJlZCBvdXQgaG93IHRvIHRlYWNoCml0IHdlbGwgZW5v dWdoIHRvIG1ha2UgaXQgYWNjZXNzaWJsZS4gRGVzcGl0ZSBncmVhdCBlZmZvcnRzIGJ5IG1hbnkg TGlzcAphZHZvY2F0ZXMsIGxlYXJuaW5nIExpc3AgdG9kYXkgaXMgc3RpbGwgaGFyZC4gVGhlIGdv b2QgbmV3cyBpcyB0aGF0IHRoaXMKd29uJ3QgcmVtYWluIHRoZSBjYXNlIGZvcmV2ZXIgc2luY2Ug dGhlIGFtb3VudCBvZiBMaXNwLXJlbGF0ZWQgcmVzb3VyY2VzCmlzIHJhcGlkbHkgaW5jcmVhc2lu Zy4gVGltZSBpcyBvbiBMaXNwJ3Mgc2lkZS4KCkxpc3AgaXMgYSB3YXkgdG8gZXNjYXBlIG1lZGlv Y3JpdHkgYW5kIHRvIGdldCBhaGVhZCBvZiB0aGUgcGFjay4KTGVhcm5pbmcgTGlzcCBtZWFucyB5 b3UgY2FuIGdldCBhIGJldHRlciBqb2IgdG9kYXksIGJlY2F1c2UgeW91IGNhbgppbXByZXNzIGFu eSByZWFzb25hYmx5IGludGVsbGlnZW50IGludGVydmlld2VyIHdpdGggZnJlc2ggaW5zaWdodCBp bnRvCm1vc3QgYXNwZWN0cyBvZiBzb2Z0d2FyZSBlbmdpbmVlcmluZy4gSXQgYWxzbyBtZWFucyB5 b3UncmUgbGlrZWx5IHRvIGdldApmaXJlZCB0b21vcnJvdyBiZWNhdXNlIGV2ZXJ5b25lIGlzIHRp cmVkIG9mIHlvdSBjb25zdGFudGx5IG1lbnRpb25pbmcKaG93IG11Y2ggYmV0dGVyIHRoZSBjb21w YW55IGNvdWxkIGJlIGRvaW5nIGlmIG9ubHkgaXRzIHNvZnR3YXJlIHdhcwp3cml0dGVuIGluIExp c3AuIElzIGl0IHdvcnRoIHRoZSBlZmZvcnQ/IEV2ZXJ5b25lIHdobyBoYXMgZXZlciBsZWFybmVk Ckxpc3Agc2F5cyB5ZXMuIFRoZSBjaG9pY2UsIG9mIGNvdXJzZSwgcmVtYWlucyB5b3Vycy4KCiog Q29tbWVudHM/CgpXaGV3LiBUaGF0J3MgZW5vdWdoLiBJJ3ZlIGJlZW4gd3JpdGluZyB0aGlzIGFy dGljbGUsIG9uIGFuZCBvZmYsIGZvcgptb250aHMuIElmIHlvdSBmaW5kIGl0IGludGVyZXN0aW5n LCBoYXZlIGFueSBxdWVzdGlvbnMsIGNvbW1lbnRzLCBvcgpzdWdnZXN0aW9ucywgcGxlYXNlIGRy b3AgYSBub3RlIGF0CltbbWFpbHRvOmNvZmZlZW11Z0BnbWFpbC5jb21dW2NvZmZlZW11Z0BnbWFp bC5jb21dXS4gSSdsbCBiZSBnbGFkIHRvCmhlYXIgeW91ciBmZWVkYmFjay4KCltmbjoxXUkgaGF2 ZSBuZXZlciBtZXQgSmFtZXMsIG5vciBkb2VzIGhlIGtub3cgYWJvdXQgbXkgZXhpc3RlbmNlLiBU aGUKc3RvcnkgaXMgZW50aXJlbHkgZmljdGlvbmFsIGFuZCBpcyBiYXNlZCBvbiBhIGZldyBwb3N0 aW5ncyBhYm91dCBBbnQncwpoaXN0b3J5IEkgZm91bmQgb24gdGhlIGludGVybmV0LgoKW2ZuOjJd TGlzcCBoYXMgbWFueSBkaWZmZXJlbnQgZGlhbGVjdHMgKHRoZSBtb3N0IHBvcHVsYXIgb2Ygd2hp Y2ggYXJlCkNvbW1vbiBMaXNwIGFuZCBTY2hlbWUpLiBFYWNoIGRpYWxlY3QgZGVhbHMgd2l0aCBp bnRyaWNhdGUgZGV0YWlscwpkaWZmZXJlbnRseSB5ZXQgc2hhcmVzIHRoZSBzYW1lIHNldCBvZiBi YXNpYyBwcmluY2lwbGVzLiBTaW5jZSB0aGUgZ29hbApvZiB0aGlzIGFydGljbGUgaXMgdG8gZ2l2 ZSB5b3UgYW4gdW5kZXJzdGFuZGluZyBvZiBMaXNwJ3MgcHJpbmNpcGxlcyBJCndpbGwgdXNlIEJs YWlzZSBmb3IgZXhhbXBsZXMgKHdoaWNoIGF0IHRoZSB0aW1lIG9mIHRoaXMgd3JpdGluZyBpcwp2 YXBvcndhcmUpLiBXaXRoIHNvbWUgbWlub3IgbW9kaWZpY2F0aW9ucyB0aGVzZSBleGFtcGxlcyBj YW4gYmUKdHJhbnNsYXRlZCB0byBvdGhlciBMaXNwIGRpYWxlY3RzLgoK --bcaec53f346dbeae7e04da6220bc--