Re: Build libfreetype with custom, embedded environment fails

Guy Turcotte <[email protected]> Wed, 25 Mar 2026 07:50:13 -0400
Newsgroups gmane.comp.fonts.freetype.user
Message-ID <[email protected]>
This is a multi-part message in MIME format.
--------------sxJwAoNJGnOEPsIoe98nCfAS
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit

I managed to get freetype embedded into a ESP32 controller using the 
distribution as-is with some changes to get only the truetype support 
(TTF and OTF). The compiler used is based on the GNU C compiler and my 
development environment is based on Linus.

The procedure I used is as follow:

1. Retrieve the FreeType source code (me I'm using the last stable 
release 2.14.3)
2. Modify the freetype-2.14.3/modules.cfg and 
freetype-2.14.3/include/freetype/config/ftoption.h to only get the parts 
required. See my own attached version of these files.
3. Make a folder that will receive the content of the compiled library: 
here I'm using lib_freetype
4. in a shell change current folder to the freetype-2.14.3

5. Execute the following (this must be *taylored* to your environment, 
in particule, the --host option):

$ ./configure --host=xtensa-esp32-elf --prefix=$HOME/lib_freetype 
--disable-shared --enable-static --without-png --without-zlib 
--without-harfbuzz CFLAGS="-mlongcalls"

6. $ make
7. $ make install

In lib_freetype you then get everything required to integrate to your 
application: the library, include files, etc.

Hope this help

Guy

On 2026-03-25 02:27, Erich Ente wrote:
> Hi everybody,
>
> I'm trying to build the original and official libfreetype for a embedded
> platform (to be more accurate: a bare-metal application which is built with
> the CodeComposerStudio by Texas Instruments). As libfreetype is ANSI-C
> based, this should be no problem (unfortunately it is).
>
> All the predefined build-struff like the cmake and other scripts/Makefiles
> can not be used as they do not fit to the CCS environment, so I tried to
> set it up from scratch. What I have done so far:
>
>     -
>
>     copied the freetype-2.10.0 folder into my working directory
>     -
>
>     in src/ I have removed all subdirectories except base, psnames, sfnt,
>     truetype in order to get a minimalistic library which supports TTF only
>     -
>
>     the include/ directory was left untouched
>     -
>
>     in my project settings I have added a include-path which points to
>     include/
>     -
>
>     in my project settings I have added a definition FT2_BUILD_LIBRARY in
>     order to let it build a linkable library
>
> Unfortunately something seems to be missing as I have a lot of undefined
> stuff here:
>
>     -
>
>     FT_ERR_PREFIX is undefined in fterrors.c
>     -
>
>     FT_Error_String( FT_Error error_code ) in fterrors.h causes an error
>     -
>
>     FT_EXPORT in fterrors.h is undefined
>     -
>
>     the whole FT_NOERRORDEF_ stuff in fterrdef.h is undefined
>     -
>
>     when I ensure FT_ERR_PREFIX being defined for FT_NOERRORDEF_, it
>     complains about all the errorcodes (such as Cannot_Open_Resource) not being
>     defined in fterrdef.h
>
> So it seems, something important is missing. Any hints/ideas what is wrong
> here?
>
> Thanks!
>
> PS: this is the output of the compiler:
>
>>> Compilation failure
> base/subdir_rules.mk:7: recipe for target 'base/fterrors.obj' failed
> "/home/universe/AM335X_StarterWare_02_00_01_01/freetype-2.10.0/include/freetype/fterrdef.h",
> line 60: error #68: expected a "}"
> "/home/universe/AM335X_StarterWare_02_00_01_01/freetype-2.10.0/include/freetype/fterrors.h",
> line 204: warning #12-D: parsing restarts here after previous syntax
> error
> "/home/universe/AM335X_StarterWare_02_00_01_01/freetype-2.10.0/include/freetype/fterrdef.h",
> line 60: warning #1916-D: definition at end of file not followed by a
> semicolon or a declarator
> "/home/universe/AM335X_StarterWare_02_00_01_01/freetype-2.10.0/include/freetype/fterrors.h",
> line 274: error #142-D: unnamed prototyped parameters not allowed when
> body is present
> "/home/universe/AM335X_StarterWare_02_00_01_01/freetype-2.10.0/include/freetype/fterrors.h",
> line 275: error #131: expected a "{"
> "../base/fterrors.c", line 27: warning #12-D: parsing restarts here
> after previous syntax error
> "../base/fterrors.c", line 28: error #20: identifier "error_code" is undefined
> "../base/fterrors.c", line 29: error #110: expression preceding
> parentheses of apparent call must have (pointer-to-) function type
> "../base/fterrors.c", line 29: error #20: identifier "FT_Err_" is undefined
> "../base/fterrors.c", line 29: error #20: identifier "Max" is undefined
> "../base/fterrors.c", line 30: error #20: identifier "NULL" is undefined
> 8 errors detected in the compilation of "../base/fterrors.c".
> gmake: *** [base/fterrors.obj] Error 1
> Building file: "../base/ftdbgmem.c"
--------------sxJwAoNJGnOEPsIoe98nCfAS
Content-Type: text/plain; charset=UTF-8; name="modules.cfg"
Content-Disposition: attachment; filename="modules.cfg"
Content-Transfer-Encoding: base64

IyBtb2R1bGVzLmNmZwojCiMgQ29weXJpZ2h0IChDKSAyMDA1LTIwMjYgYnkKIyBEYXZpZCBU
dXJuZXIsIFJvYmVydCBXaWxoZWxtLCBhbmQgV2VybmVyIExlbWJlcmcuCiMKIyBUaGlzIGZp
bGUgaXMgcGFydCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVz
ZWQsIG1vZGlmaWVkLAojIGFuZCBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEZyZWVUeXBlIHByb2plY3QgbGljZW5zZSwKIyBMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVp
bmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQojIGluZGlj
YXRlIHRoYXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQgdW5kZXJzdGFuZCBhbmQg
YWNjZXB0IGl0CiMgZnVsbHkuCiMKIwojIEluIGNhc2UgeW91IGNvbXBpbGUgdGhlIEZyZWVU
eXBlIGxpYnJhcnkgd2l0aCBHTlUgbWFrZSBvciBtYWtlcHAsIHRoaXMKIyBmaWxlIGNvbnRy
b2xzIHdoaWNoIGNvbXBvbmVudHMgYXJlIGJ1aWx0IGludG8gdGhlIGxpYnJhcnkuICBPdGhl
cndpc2UsCiMgcGxlYXNlIHJlYWQgdGhpcyBmaWxlIGZvciBpbmZvcm1hdGlvbiBvbiB0aGUg
dmFyaW91cyBtb2R1bGVzIGFuZCBpdHMKIyBkZXBlbmRlbmNpZXMsIHRoZW4gZm9sbG93IHRo
ZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGZpbGUgYGRvY3MvSU5TVEFMTC5BTlknLgojCiMgVG8g
ZGVhY3RpdmF0ZSBhIG1vZHVsZSwgc2ltcGx5IGNvbW1lbnQgb3V0IHRoZSBjb3JyZXNwb25k
aW5nIGxpbmUuICBUbwojIGFjdGl2YXRlIGEgbW9kdWxlLCByZW1vdmUgdGhlIGNvbW1lbnQg
Y2hhcmFjdGVyLgojCiMgTm90ZSB0aGF0IG1hbnkgbW9kdWxlcyBhbmQgY29tcG9uZW50cyBh
cmUgZnVydGhlciBjb250cm9sbGVkIHdpdGggbWFjcm9zCiMgaW4gdGhlIGZpbGUgYGluY2x1
ZGUvZnJlZXR5cGUvY29uZmlnL2Z0b3B0aW9uLmgnLgoKCiMjIyMKIyMjIyBmb250IG1vZHVs
ZXMgLS0gYXQgbGVhc3Qgb25lIGlzIHJlcXVpcmVkCiMjIyMKIyMjIyAgIFRoZSBvcmRlciBn
aXZlbiBoZXJlIChmcm9tIHRvcCB0byBkb3duKSBpcyB0aGUgb3JkZXIgdXNlZCBmb3IgdGVz
dGluZwojIyMjICAgZm9udCBmb3JtYXRzIGluIHRoZSBjb21waWxlZCBsaWJyYXJ5LgojIyMj
CgojIFRydWVUeXBlIGZvbnQgZHJpdmVyLgojCiMgVGhpcyBkcml2ZXIgbmVlZHMgdGhlIGBz
Zm50JyBtb2R1bGUuCkZPTlRfTU9EVUxFUyArPSB0cnVldHlwZQoKIyBQb3N0U2NyaXB0IFR5
cGUgMSBmb250IGRyaXZlci4KIwojIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgcHNhdXgnLCBg
cHNoaW50ZXInLCBhbmQgYHBzbmFtZXMnIG1vZHVsZXMuCiMgRk9OVF9NT0RVTEVTICs9IHR5
cGUxCgojIENGRi9PcGVuVHlwZSBmb250IGRyaXZlci4KIwojIFRoaXMgZHJpdmVyIG5lZWRz
IHRoZSBgc2ZudCcsIGBwc2F1eCcsIGBwc2hpbnRlcicsIGFuZCBgcHNuYW1lcycgbW9kdWxl
cy4KIyBGT05UX01PRFVMRVMgKz0gY2ZmCgojIFR5cGUgMSBDSUQta2V5ZWQgZm9udCBkcml2
ZXIuCiMKIyBUaGlzIGRyaXZlciBuZWVkcyB0aGUgYHBzYXV4JywgYHBzaGludGVyJywgYW5k
IGBwc25hbWVzJyBtb2R1bGVzLgojIEZPTlRfTU9EVUxFUyArPSBjaWQKCiMgUEZSL1RydWVE
b2MgZm9udCBkcml2ZXIuICBTZWUgb3B0aW9uYWwgZXh0ZW5zaW9uIGZ0cGZyLmMgYmVsb3cg
YWxzby4KIyBGT05UX01PRFVMRVMgKz0gcGZyCgojIFBvc3RTY3JpcHQgVHlwZSA0MiBmb250
IGRyaXZlci4KIwojIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgdHJ1ZXR5cGUnIGFuZCBgcHNh
dXgnIG1vZHVsZXMuCiMgRk9OVF9NT0RVTEVTICs9IHR5cGU0MgoKIyBXaW5kb3dzIEZPTlQv
Rk5UIGZvbnQgZHJpdmVyLiAgU2VlIG9wdGlvbmFsIGV4dGVuc2lvbiBmdHdpbmZudC5jIGJl
bG93CiMgYWxzby4KIyBGT05UX01PRFVMRVMgKz0gd2luZm9udHMKCiMgUENGIGZvbnQgZHJp
dmVyLiAgSWYgZGVidWdnaW5nIGFuZCB0cmFjaW5nIGlzIGVuYWJsZWQsIG5lZWRzIGBmdGJp
dG1hcC5jJy4KIyBGT05UX01PRFVMRVMgKz0gcGNmCgojIEJERiBmb250IGRyaXZlci4gIFNl
ZSBvcHRpb25hbCBleHRlbnNpb24gZnRiZGYuYyBiZWxvdyBhbHNvLgojIEZPTlRfTU9EVUxF
UyArPSBiZGYKCiMgU0ZOVCBmaWxlcyBzdXBwb3J0LiAgSWYgdXNlZCB3aXRob3V0IGB0cnVl
dHlwZScgb3IgYGNmZicsIGl0IHN1cHBvcnRzCiMgYml0bWFwLW9ubHkgZm9udHMgd2l0aGlu
IGFuIFNGTlQgd3JhcHBlci4KIwojIFRoaXMgZHJpdmVyIG5lZWRzIHRoZSBgcHNuYW1lcycg
bW9kdWxlLgpGT05UX01PRFVMRVMgKz0gc2ZudAoKCiMjIyMKIyMjIyBoaW50aW5nIG1vZHVs
ZXMKIyMjIwoKIyBGcmVlVHlwZSdzIGF1dG8gaGludGVyLgpISU5USU5HX01PRFVMRVMgKz0g
YXV0b2ZpdAoKIyBQb3N0U2NyaXB0IGhpbnRlci4KSElOVElOR19NT0RVTEVTICs9IHBzaGlu
dGVyCgojIFRoZSBUcnVlVHlwZSBoaW50aW5nIGVuZ2luZSBkb2Vzbid0IGhhdmUgYSBtb2R1
bGUgb2YgaXRzIG93biBidXQgaXMKIyBjb250cm9sbGVkIGluIGZpbGUgaW5jbHVkZS9mcmVl
dHlwZS9jb25maWcvZnRvcHRpb24uaAojIChUVF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lO
VEVSUFJFVEVSIGFuZCBmcmllbmRzKS4KCgojIyMjCiMjIyMgcmFzdGVyIG1vZHVsZXMgLS0g
YXQgbGVhc3Qgb25lIGlzIHJlcXVpcmVkIGZvciB2ZWN0b3IgZm9udCBmb3JtYXRzCiMjIyMK
CiMgQW50aS1hbGlhc2luZyByYXN0ZXJpemVyLgpSQVNURVJfTU9EVUxFUyArPSBzbW9vdGgK
CiMgTW9ub2Nocm9tZSByYXN0ZXJpemVyLgpSQVNURVJfTU9EVUxFUyArPSByYXN0ZXIKCiMg
T1QtU1ZHLgojIFJBU1RFUl9NT0RVTEVTICs9IHN2ZwoKIyBTaWduZWQgZGlzdGFuY2UgZmll
bGQgcmFzdGVyaXplci4KIyBSQVNURVJfTU9EVUxFUyArPSBzZGYKCgojIyMjCiMjIyMgYXV4
aWxpYXJ5IG1vZHVsZXMKIyMjIwoKIyBGcmVlVHlwZSdzIGNhY2hlIHN1Yi1zeXN0ZW0gKHF1
aXRlIHN0YWJsZSBidXQgc3RpbGwgaW4gYmV0YSAtLSB0aGlzIG1lYW5zCiMgdGhhdCBpdHMg
cHVibGljIEFQSSBpcyBzdWJqZWN0IHRvIGNoYW5nZSBpZiBuZWNlc3NhcnkpLiAgU2VlCiMg
aW5jbHVkZS9mcmVldHlwZS9mdGNhY2hlLmguICBOZWVkcyBgZnRnbHlwaC5jJy4KIyBBVVhf
TU9EVUxFUyArPSBjYWNoZQoKIyBUcnVlVHlwZSBHWC9BQVQgdGFibGUgdmFsaWRhdGlvbi4g
IE5lZWRzIGBmdGd4dmFsLmMnIGJlbG93LgojCiMgQVVYX01PRFVMRVMgKz0gZ3h2YWxpZAoK
IyBTdXBwb3J0IGZvciBzdHJlYW1zIGNvbXByZXNzZWQgd2l0aCBnemlwIChmaWxlcyB3aXRo
IHN1ZmZpeCAuZ3opLgojCiMgU2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRnemlwLmggZm9yIHRo
ZSBBUEkuCiMgQVVYX01PRFVMRVMgKz0gZ3ppcAoKIyBTdXBwb3J0IGZvciBzdHJlYW1zIGNv
bXByZXNzZWQgd2l0aCBMWlcgKGZpbGVzIHdpdGggc3VmZml4IC5aKS4KIwojIFNlZSBpbmNs
dWRlL2ZyZWV0eXBlL2Z0bHp3LmggZm9yIHRoZSBBUEkuCiMgQVVYX01PRFVMRVMgKz0gbHp3
CgojIFN1cHBvcnQgZm9yIHN0cmVhbXMgY29tcHJlc3NlZCB3aXRoIGJ6aXAyIChmaWxlcyB3
aXRoIHN1ZmZpeCAuYnoyKS4KIwojIFNlZSBpbmNsdWRlL2ZyZWV0eXBlL2Z0YnppcDIuaCBm
b3IgdGhlIEFQSS4KIyBBVVhfTU9EVUxFUyArPSBiemlwMgoKIyBPcGVuVHlwZSB0YWJsZSB2
YWxpZGF0aW9uLiAgTmVlZHMgYGZ0b3R2YWwuYycgYmVsb3cuCiMKIyBBVVhfTU9EVUxFUyAr
PSBvdHZhbGlkCgojIEF1eGlsaWFyeSBQb3N0U2NyaXB0IGRyaXZlciBjb21wb25lbnQgdG8g
c2hhcmUgY29tbW9uIGNvZGUuCiMKIyBUaGlzIG1vZHVsZSBkZXBlbmRzIG9uIGBwc25hbWVz
Jy4KQVVYX01PRFVMRVMgKz0gcHNhdXgKCiMgU3VwcG9ydCBmb3IgUG9zdFNjcmlwdCBnbHlw
aCBuYW1lcy4KIwojIFRoaXMgbW9kdWxlIGNhbiBiZSBjb250cm9sbGVkIGluIGZ0Y29uZmln
LmgKIyAoRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTKS4KQVVYX01PRFVMRVMg
Kz0gcHNuYW1lcwoKCiMjIyMKIyMjIyBiYXNlIG1vZHVsZSBleHRlbnNpb25zCiMjIyMKCiMg
RXhhY3QgYm91bmRpbmcgYm94IGNhbGN1bGF0aW9uLgojCiMgU2VlIGluY2x1ZGUvZnJlZXR5
cGUvZnRiYm94LmggZm9yIHRoZSBBUEkuCkJBU0VfRVhURU5TSU9OUyArPSBmdGJib3guYwoK
IyBBY2Nlc3MgQkRGLXNwZWNpZmljIHN0cmluZ3MuICBOZWVkcyBCREYgZm9udCBkcml2ZXIu
CiMKIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdGJkZi5oIGZvciB0aGUgQVBJLgojIEJBU0Vf
RVhURU5TSU9OUyArPSBmdGJkZi5jCgojIFV0aWxpdHkgZnVuY3Rpb25zIGZvciBjb252ZXJ0
aW5nIDFicHAsIDJicHAsIDRicHAsIGFuZCA4YnBwIGJpdG1hcHMgaW50bwojIDhicHAgZm9y
bWF0LCBhbmQgZm9yIGVtYm9sZGVuaW5nIG9mIGJpdG1hcCBnbHlwaHMuCiMKIyBTZWUgaW5j
bHVkZS9mcmVldHlwZS9mdGJpdG1hcC5oIGZvciB0aGUgQVBJLgpCQVNFX0VYVEVOU0lPTlMg
Kz0gZnRiaXRtYXAuYwoKIyBBY2Nlc3MgQ0lEIGZvbnQgaW5mb3JtYXRpb24uCiMKIyBTZWUg
aW5jbHVkZS9mcmVldHlwZS9mdGNpZC5oIGZvciB0aGUgQVBJLgpCQVNFX0VYVEVOU0lPTlMg
Kz0gZnRjaWQuYwoKIyBBY2Nlc3MgRlNUeXBlIGluZm9ybWF0aW9uLiAgTmVlZHMgYGZ0dHlw
ZTEuYycuCiMKIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mcmVldHlwZS5oIGZvciB0aGUgQVBJ
LgpCQVNFX0VYVEVOU0lPTlMgKz0gZnRmc3R5cGUuYwoKIyBTdXBwb3J0IGZvciBHQVNQIHRh
YmxlIHF1ZXJpZXMuCiMKIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdGdhc3AuaCBmb3IgdGhl
IEFQSS4KQkFTRV9FWFRFTlNJT05TICs9IGZ0Z2FzcC5jCgojIENvbnZlbmllbmNlIGZ1bmN0
aW9ucyB0byBoYW5kbGUgZ2x5cGhzLiAgTmVlZHMgYGZ0Yml0bWFwLmMnLgojCiMgU2VlIGlu
Y2x1ZGUvZnJlZXR5cGUvZnRnbHlwaC5oIGZvciB0aGUgQVBJLgpCQVNFX0VYVEVOU0lPTlMg
Kz0gZnRnbHlwaC5jCgojIEludGVyZmFjZSBmb3IgZ3h2YWxpZCBtb2R1bGUuCiMKIyBTZWUg
aW5jbHVkZS9mcmVldHlwZS9mdGd4dmFsLmggZm9yIHRoZSBBUEkuCkJBU0VfRVhURU5TSU9O
UyArPSBmdGd4dmFsLmMKCiMgTXVsdGlwbGUgTWFzdGVyIGZvbnQgaW50ZXJmYWNlLgojCiMg
U2VlIGluY2x1ZGUvZnJlZXR5cGUvZnRtbS5oIGZvciB0aGUgQVBJLgpCQVNFX0VYVEVOU0lP
TlMgKz0gZnRtbS5jCgojIEludGVyZmFjZSBmb3Igb3R2YWxpZCBtb2R1bGUuCiMKIyBTZWUg
aW5jbHVkZS9mcmVldHlwZS9mdG90dmFsLmggZm9yIHRoZSBBUEkuCkJBU0VfRVhURU5TSU9O
UyArPSBmdG90dmFsLmMKCiMgU3VwcG9ydCBmb3IgRlRfRmFjZV9DaGVja1RydWVUeXBlUGF0
ZW50cy4KIwojIFNlZSBpbmNsdWRlL2ZyZWV0eXBlL2ZyZWV0eXBlLmggZm9yIHRoZSBBUEku
CkJBU0VfRVhURU5TSU9OUyArPSBmdHBhdGVudC5jCgojIEludGVyZmFjZSBmb3IgYWNjZXNz
aW5nIFBGUi1zcGVjaWZpYyBkYXRhLiAgTmVlZHMgUEZSIGZvbnQgZHJpdmVyLgojCiMgU2Vl
IGluY2x1ZGUvZnJlZXR5cGUvZnRwZnIuaCBmb3IgdGhlIEFQSS4KIyBCQVNFX0VYVEVOU0lP
TlMgKz0gZnRwZnIuYwoKIyBQYXRoIHN0cm9rZXIuICBOZWVkcyBgZnRnbHlwaC5jJy4KIwoj
IFNlZSBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3Ryb2tlLmggZm9yIHRoZSBBUEkuCkJBU0VfRVhU
RU5TSU9OUyArPSBmdHN0cm9rZS5jCgojIFN1cHBvcnQgZm9yIHN5bnRoZXRpYyBlbWJvbGRl
bmluZyBhbmQgc2xhbnRpbmcgb2YgZm9udHMuICBOZWVkcwojIGBmdGJpdG1hcC5jJy4KIwoj
IFNlZSBpbmNsdWRlL2ZyZWV0eXBlL2Z0c3ludGguaCBmb3IgdGhlIEFQSS4KQkFTRV9FWFRF
TlNJT05TICs9IGZ0c3ludGguYwoKIyBJbnRlcmZhY2UgdG8gYWNjZXNzIGRhdGEgc3BlY2lm
aWMgdG8gUG9zdFNjcmlwdCBUeXBlIDEgYW5kIFR5cGUgMiAoQ0ZGKQojIGZvbnRzLgojCiMg
U2VlIGluY2x1ZGUvZnJlZXR5cGUvdDF0YWJsZXMuaCBmb3IgdGhlIEFQSS4KIyBCQVNFX0VY
VEVOU0lPTlMgKz0gZnR0eXBlMS5jCgojIEludGVyZmFjZSBmb3IgYWNjZXNzaW5nIGRhdGEg
c3BlY2lmaWMgdG8gV2luZG93cyBGTlQgZmlsZXMuICBOZWVkcyB3aW5mbnQKIyBkcml2ZXIu
CiMKIyBTZWUgaW5jbHVkZS9mcmVldHlwZS9mdHdpbmZudC5oIGZvciB0aGUgQVBJLgojIEJB
U0VfRVhURU5TSU9OUyArPSBmdHdpbmZudC5jCgojIyMjCiMjIyMgVGhlIGNvbXBvbmVudHMg
YGZ0c3lzdGVtLmMnIChmb3IgbWVtb3J5IGFsbG9jYXRpb24gYW5kIHN0cmVhbSBJL08KIyMj
IyBtYW5hZ2VtZW50KSBhbmQgYGZ0ZGVidWcuYycgKGZvciBlbWl0dGluZyBkZWJ1ZyBtZXNz
YWdlcyB0byB0aGUgdXNlcikKIyMjIyBhcmUgY29udHJvbGxlZCB3aXRoIHRoZSBmb2xsb3dp
bmcgdmFyaWFibGVzLgojIyMjCiMjIyMgICBmdHN5c3RlbS5jOiAgJChGVFNZU19TUkMpCiMj
IyMgICBmdGRlYnVnLmM6ICAgJChGVERFQlVHX1NSQykKIyMjIwojIyMjIFBsZWFzZSByZWZl
ciB0byBkb2NzL0NVU1RPTUlaRSBmb3IgZGV0YWlscy4KIyMjIwoKCiMgRU9GCg==
--------------sxJwAoNJGnOEPsIoe98nCfAS
Content-Type: text/x-chdr; charset=UTF-8; name="ftoption.h"
Content-Disposition: attachment; filename="ftoption.h"
Content-Transfer-Encoding: base64

LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKICoKICogZnRvcHRpb24uaAogKgogKiAgIFVzZXIt
c2VsZWN0YWJsZSBjb25maWd1cmF0aW9uIG1hY3JvcyAoc3BlY2lmaWNhdGlvbiBvbmx5KS4K
ICoKICogQ29weXJpZ2h0IChDKSAxOTk2LTIwMjYgYnkKICogRGF2aWQgVHVybmVyLCBSb2Jl
cnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLgogKgogKiBUaGlzIGZpbGUgaXMgcGFy
dCBvZiB0aGUgRnJlZVR5cGUgcHJvamVjdCwgYW5kIG1heSBvbmx5IGJlIHVzZWQsCiAqIG1v
ZGlmaWVkLCBhbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlw
ZSBwcm9qZWN0CiAqIGxpY2Vuc2UsIExJQ0VOU0UuVFhULiAgQnkgY29udGludWluZyB0byB1
c2UsIG1vZGlmeSwgb3IgZGlzdHJpYnV0ZQogKiB0aGlzIGZpbGUgeW91IGluZGljYXRlIHRo
YXQgeW91IGhhdmUgcmVhZCB0aGUgbGljZW5zZSBhbmQKICogdW5kZXJzdGFuZCBhbmQgYWNj
ZXB0IGl0IGZ1bGx5LgogKgogKi8KCiNpZm5kZWYgRlRPUFRJT05fSF8KI2RlZmluZSBGVE9Q
VElPTl9IXwoKI2luY2x1ZGUgPGZ0MmJ1aWxkLmg+CgpGVF9CRUdJTl9IRUFERVIKCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKgogKiAgICAgICAgICAgICAgICBVU0VSLVNFTEVDVEFCTEUg
Q09ORklHVVJBVElPTiBNQUNST1MKICoKICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBkZWZh
dWx0IGNvbmZpZ3VyYXRpb24gbWFjcm8gZGVmaW5pdGlvbnMgZm9yIGEKICogc3RhbmRhcmQg
YnVpbGQgb2YgdGhlIEZyZWVUeXBlIGxpYnJhcnkuICBUaGVyZSBhcmUgdGhyZWUgd2F5cyB0
byB1c2UKICogdGhpcyBmaWxlIHRvIGJ1aWxkIHByb2plY3Qtc3BlY2lmaWMgdmVyc2lvbnMg
b2YgdGhlIGxpYnJhcnk6CiAqCiAqIC0gWW91IGNhbiBtb2RpZnkgdGhpcyBmaWxlIGJ5IGhh
bmQsIGJ1dCB0aGlzIGlzIG5vdCByZWNvbW1lbmRlZCBpbgogKiAgIGNhc2VzIHdoZXJlIHlv
dSB3b3VsZCBsaWtlIHRvIGJ1aWxkIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhlIGxpYnJhcnkK
ICogICBmcm9tIGEgc2luZ2xlIHNvdXJjZSBkaXJlY3RvcnkuCiAqCiAqIC0gWW91IGNhbiBw
dXQgYSBjb3B5IG9mIHRoaXMgZmlsZSBpbiB5b3VyIGJ1aWxkIGRpcmVjdG9yeSwgbW9yZQog
KiAgIHByZWNpc2VseSBpbiBgJEJVSUxEL2ZyZWV0eXBlL2NvbmZpZy9mdG9wdGlvbi5oYCwg
d2hlcmUgYCRCVUlMRGAgaXMKICogICB0aGUgbmFtZSBvZiBhIGRpcmVjdG9yeSB0aGF0IGlz
IGluY2x1ZGVkIF9iZWZvcmVfIHRoZSBGcmVlVHlwZSBpbmNsdWRlCiAqICAgcGF0aCBkdXJp
bmcgY29tcGlsYXRpb24uCiAqCiAqICAgVGhlIGRlZmF1bHQgRnJlZVR5cGUgTWFrZWZpbGVz
IHVzZSB0aGUgYnVpbGQgZGlyZWN0b3J5CiAqICAgYGJ1aWxkcy88c3lzdGVtPmAgYnkgZGVm
YXVsdCwgYnV0IHlvdSBjYW4gZWFzaWx5IGNoYW5nZSB0aGF0IGZvciB5b3VyCiAqICAgb3du
IHByb2plY3RzLgogKgogKiAtIENvcHkgdGhlIGZpbGUgPGZ0MmJ1aWxkLmg+IHRvIGAkQlVJ
TEQvZnQyYnVpbGQuaGAgYW5kIG1vZGlmeSBpdAogKiAgIHNsaWdodGx5IHRvIHByZS1kZWZp
bmUgdGhlIG1hY3JvIGBGVF9DT05GSUdfT1BUSU9OU19IYCB1c2VkIHRvIGxvY2F0ZQogKiAg
IHRoaXMgZmlsZSBkdXJpbmcgdGhlIGJ1aWxkLiAgRm9yIGV4YW1wbGUsCiAqCiAqICAgYGBg
CiAqICAgICAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05TX0ggIDxteWZ0b3B0aW9ucy5oPgog
KiAgICAgI2luY2x1ZGUgPGZyZWV0eXBlL2NvbmZpZy9mdGhlYWRlci5oPgogKiAgIGBgYAog
KgogKiAgIHdpbGwgdXNlIGAkQlVJTEQvbXlmdG9wdGlvbnMuaGAgaW5zdGVhZCBvZiB0aGlz
IGZpbGUgZm9yIG1hY3JvCiAqICAgZGVmaW5pdGlvbnMuCiAqCiAqICAgTm90ZSBhbHNvIHRo
YXQgeW91IGNhbiBzaW1pbGFybHkgcHJlLWRlZmluZSB0aGUgbWFjcm8KICogICBgRlRfQ09O
RklHX01PRFVMRVNfSGAgdXNlZCB0byBsb2NhdGUgdGhlIGZpbGUgbGlzdGluZyBvZiB0aGUg
bW9kdWxlcwogKiAgIHRoYXQgYXJlIHN0YXRpY2FsbHkgbGlua2VkIHRvIHRoZSBsaWJyYXJ5
IGF0IGNvbXBpbGUgdGltZS4gIEJ5CiAqICAgZGVmYXVsdCwgdGhpcyBmaWxlIGlzIGA8ZnJl
ZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmg+YC4KICoKICogV2UgaGlnaGx5IHJlY29tbWVuZCB1
c2luZyB0aGUgdGhpcmQgbWV0aG9kIHdoZW5ldmVyIHBvc3NpYmxlLgogKgogKi8KCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKiogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICoqKiovCi8qKioqIEcgRSBOIEUgUiBBIEwgICBGIFIgRSBFIFQgWSBQIEUgICAyICAgQyBP
IE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAqKioqLwovKioqKiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKLyojKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqCiAqCiAqIElmIHlvdSBlbmFibGUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlv
biwgRnJlZVR5cGUgcmVjb2duaXplcyBhbgogKiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxs
ZWQgYEZSRUVUWVBFX1BST1BFUlRJRVNgLCB3aGljaCBjYW4gYmUgdXNlZCB0bwogKiBjb250
cm9sIHRoZSB2YXJpb3VzIGZvbnQgZHJpdmVycyBhbmQgbW9kdWxlcy4gIFRoZSBjb250cm9s
bGFibGUKICogcHJvcGVydGllcyBhcmUgbGlzdGVkIGluIHRoZSBzZWN0aW9uIEBwcm9wZXJ0
aWVzLgogKgogKiBZb3UgaGF2ZSB0byB1bmRlZmluZSB0aGlzIGNvbmZpZ3VyYXRpb24gb3B0
aW9uIG9uIHBsYXRmb3JtcyB0aGF0IGxhY2sKICogdGhlIGNvbmNlcHQgb2YgZW52aXJvbm1l
bnQgdmFyaWFibGVzIChhbmQgdGh1cyBkb24ndCBoYXZlIHRoZSBgZ2V0ZW52YAogKiBmdW5j
dGlvbiksIGZvciBleGFtcGxlIFdpbmRvd3MgQ0UuCiAqCiAqIGBGUkVFVFlQRV9QUk9QRVJU
SUVTYCBoYXMgdGhlIGZvbGxvd2luZyBzeW50YXggZm9ybSAoYnJva2VuIGhlcmUgaW50bwog
KiBtdWx0aXBsZSBsaW5lcyBmb3IgYmV0dGVyIHJlYWRhYmlsaXR5KS4KICoKICogYGBgCiAq
ICAgPG9wdGlvbmFsIHdoaXRlc3BhY2U+CiAqICAgPG1vZHVsZS1uYW1lMT4gJzonCiAqICAg
PHByb3BlcnR5LW5hbWUxPiAnPScgPHByb3BlcnR5LXZhbHVlMT4KICogICA8d2hpdGVzcGFj
ZT4KICogICA8bW9kdWxlLW5hbWUyPiAnOicKICogICA8cHJvcGVydHktbmFtZTI+ICc9JyA8
cHJvcGVydHktdmFsdWUyPgogKiAgIC4uLgogKiBgYGAKICoKICogRXhhbXBsZToKICoKICog
YGBgCiAqICAgRlJFRVRZUEVfUFJPUEVSVElFUz10cnVldHlwZTppbnRlcnByZXRlci12ZXJz
aW9uPTM1IFwKICogICAgICAgICAgICAgICAgICAgICAgIGNmZjpuby1zdGVtLWRhcmtlbmlu
Zz0xCiAqIGBgYAogKgogKi8KI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0VOVklST05NRU5U
X1BST1BFUlRJRVMKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBVbmNvbW1lbnQgdGhl
IGxpbmUgYmVsb3cgaWYgeW91IHdhbnQgdG8gYWN0aXZhdGUgTENEIHJlbmRlcmluZwogKiB0
ZWNobm9sb2d5IHNpbWlsYXIgdG8gQ2xlYXJUeXBlIGluIHRoaXMgYnVpbGQgb2YgdGhlIGxp
YnJhcnkuICBUaGlzCiAqIHRlY2hub2xvZ3kgdHJpcGxlcyB0aGUgcmVzb2x1dGlvbiBpbiB0
aGUgZGlyZWN0aW9uIGNvbG9yIHN1YnBpeGVscy4gIFRvCiAqIG1pdGlnYXRlIGNvbG9yIGZy
aW5nZXMgaW5oZXJlbnQgdG8gdGhpcyB0ZWNobm9sb2d5LCB5b3UgYWxzbyBuZWVkIHRvCiAq
IGV4cGxpY2l0bHkgc2V0IHVwIExDRCBmaWx0ZXJpbmcuCiAqCiAqIFdoZW4gdGhpcyBtYWNy
byBpcyBub3QgZGVmaW5lZCwgRnJlZVR5cGUgb2ZmZXJzIGFsdGVybmF0aXZlIExDRAogKiBy
ZW5kZXJpbmcgdGVjaG5vbG9neSB0aGF0IHByb2R1Y2VzIGV4Y2VsbGVudCBvdXRwdXQuCiAq
LwovKiAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1VCUElYRUxfUkVOREVSSU5HICovCgov
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICoKICogTWFueSBjb21waWxlcnMgcHJvdmlkZSBhIG5v
bi1BTlNJIDY0LWJpdCBkYXRhIHR5cGUgdGhhdCBjYW4gYmUgdXNlZCBieQogKiBGcmVlVHlw
ZSB0byBzcGVlZCB1cCBzb21lIGNvbXB1dGF0aW9ucy4gIEhvd2V2ZXIsIHRoaXMgd2lsbCBj
cmVhdGUgc29tZQogKiBwcm9ibGVtcyB3aGVuIGNvbXBpbGluZyB0aGUgbGlicmFyeSBpbiBz
dHJpY3QgQU5TSSBtb2RlLgogKgogKiBGb3IgdGhpcyByZWFzb24sIHRoZSB1c2Ugb2YgNjQt
Yml0IGludGVnZXJzIGlzIG5vcm1hbGx5IGRpc2FibGVkIHdoZW4KICogdGhlIGBfX1NURENf
X2AgbWFjcm8gaXMgZGVmaW5lZC4gIFlvdSBjYW4gaG93ZXZlciBkaXNhYmxlIHRoaXMgYnkK
ICogZGVmaW5pbmcgdGhlIG1hY3JvIGBGVF9DT05GSUdfT1BUSU9OX0ZPUkNFX0lOVDY0YCBo
ZXJlLgogKgogKiBGb3IgbW9zdCBjb21waWxlcnMsIHRoaXMgd2lsbCBvbmx5IGNyZWF0ZSBj
b21waWxhdGlvbiB3YXJuaW5ncyB3aGVuCiAqIGJ1aWxkaW5nIHRoZSBsaWJyYXJ5LgogKgog
KiBPYk5vdGU6IFRoZSBjb21waWxlci1zcGVjaWZpYyA2NC1iaXQgaW50ZWdlcnMgYXJlIGRl
dGVjdGVkIGluIHRoZQogKiAgICAgICAgIGZpbGUgYGZ0Y29uZmlnLmhgIGVpdGhlciBzdGF0
aWNhbGx5IG9yIHRocm91Z2ggdGhlIGBjb25maWd1cmVgCiAqICAgICAgICAgc2NyaXB0IG9u
IHN1cHBvcnRlZCBwbGF0Zm9ybXMuCiAqLwojdW5kZWYgRlRfQ09ORklHX09QVElPTl9GT1JD
RV9JTlQ2NAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIElmIHRoaXMgbWFjcm8gaXMg
ZGVmaW5lZCwgZG8gbm90IHRyeSB0byB1c2UgYW4gYXNzZW1ibGVyIHZlcnNpb24gb2YKICog
cGVyZm9ybWFuY2UtY3JpdGljYWwgZnVuY3Rpb25zIChlLmcuLCBARlRfTXVsRml4KS4gIFlv
dSBzaG91bGQgb25seSBkbwogKiB0aGF0IHRvIHZlcmlmeSB0aGF0IHRoZSBhc3NlbWJsZXIg
ZnVuY3Rpb24gd29ya3MgcHJvcGVybHksIG9yIHRvIGV4ZWN1dGUKICogYmVuY2htYXJrIHRl
c3RzIG9mIHRoZSB2YXJpb3VzIGltcGxlbWVudGF0aW9ucy4KICovCi8qICNkZWZpbmUgRlRf
Q09ORklHX09QVElPTl9OT19BU1NFTUJMRVIgKi8KCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgog
KgogKiBJZiB0aGlzIG1hY3JvIGlzIGRlZmluZWQsIHRyeSB0byB1c2UgYW4gaW5saW5lZCA2
NC1iaXQgb3IgYXNzZW1ibGVyCiAqIHZlcnNpb24gb2YgdGhlIEBGVF9NdWxGaXggZnVuY3Rp
b24sIHdoaWNoIGlzIGEgJ2hvdHNwb3QnIHdoZW4gbG9hZGluZwogKiBhbmQgaGludGluZyBn
bHlwaHMsIGFuZCB3aGljaCBzaG91bGQgYmUgZXhlY3V0ZWQgYXMgZmFzdCBhcyBwb3NzaWJs
ZS4KICoKICogSWYgeW91ciBjb21waWxlciBpcyBub3QgQzk5LWNvbXBsaWFudCBvciBDUFUg
YXNzZW1ibHkgaXMgbm90IHN1cHBvcnRlZCwKICogeW91IGNhbiBkaXNhYmxlIHRoaXMgb3B0
aW9uLgogKi8KI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX0lOTElORV9NVUxGSVgKCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKgogKgogKiBMWlctY29tcHJlc3NlZCBmaWxlIHN1cHBvcnQuCiAq
CiAqICAgRnJlZVR5cGUgbm93IGhhbmRsZXMgZm9udCBmaWxlcyB0aGF0IGhhdmUgYmVlbiBj
b21wcmVzc2VkIHdpdGggdGhlCiAqICAgYGNvbXByZXNzYCBwcm9ncmFtLiAgVGhpcyBpcyBt
b3N0bHkgdXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YKICogICBmaWxlcyB0aGF0IGNv
bWUgd2l0aCB2YXJpb3VzIFgxMSBkaXN0cmlidXRpb25zLiAgVGhlIGltcGxlbWVudGF0aW9u
CiAqICAgdXNlcyBOZXRCU0QncyBgem9wZW5gIHRvIHBhcnRpYWxseSB1bmNvbXByZXNzIHRo
ZSBmaWxlIG9uIHRoZSBmbHkgKHNlZQogKiAgIGBzcmMvbHp3L2Z0Z3ppcC5jYCkuCiAqCiAq
ICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgJ2ZlYXR1
cmUnLgogKi8KLy8gI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9MWlcKCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKgogKiBHemlwLWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LgogKgog
KiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29t
cHJlc3NlZCB3aXRoIHRoZQogKiAgIGBnemlwYCBwcm9ncmFtLiAgVGhpcyBpcyBtb3N0bHkg
dXNlZCB0byBwYXJzZSBtYW55IG9mIHRoZSBQQ0YgZmlsZXMKICogICB0aGF0IGNvbWUgd2l0
aCBYRnJlZTg2LiAgVGhlIGltcGxlbWVudGF0aW9uIHVzZXMgJ3psaWInIHRvIHBhcnRpYWxs
eQogKiAgIHVuY29tcHJlc3MgdGhlIGZpbGUgb24gdGhlIGZseSAoc2VlIGBzcmMvZ3ppcC9m
dGd6aXAuY2ApLgogKgogKiAgIERlZmluZSB0aGlzIG1hY3JvIGlmIHlvdSB3YW50IHRvIGVu
YWJsZSB0aGlzICdmZWF0dXJlJy4gIFNlZSBhbHNvIHRoZQogKiAgIG1hY3JvIGBGVF9DT05G
SUdfT1BUSU9OX1NZU1RFTV9aTElCYCBiZWxvdy4KICovCi8vICNkZWZpbmUgRlRfQ09ORklH
X09QVElPTl9VU0VfWkxJQgoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFpMaWIgbGli
cmFyeSBzZWxlY3Rpb24KICoKICogICBUaGlzIG1hY3JvIGlzIG9ubHkgdXNlZCB3aGVuIGBG
VF9DT05GSUdfT1BUSU9OX1VTRV9aTElCYCBpcyBkZWZpbmVkLgogKiAgIEl0IGFsbG93cyBG
cmVlVHlwZSdzICdmdGd6aXAnIGNvbXBvbmVudCB0byBsaW5rIHRvIHRoZSBzeXN0ZW0ncwog
KiAgIGluc3RhbGxhdGlvbiBvZiB0aGUgWkxpYiBsaWJyYXJ5LiAgVGhpcyBpcyB1c2VmdWwg
b24gc3lzdGVtcyBsaWtlCiAqICAgVW5peCBvciBWTVMgd2hlcmUgaXQgZ2VuZXJhbGx5IGlz
IGFscmVhZHkgYXZhaWxhYmxlLgogKgogKiAgIElmIHlvdSBsZXQgaXQgdW5kZWZpbmVkLCB0
aGUgY29tcG9uZW50IHdpbGwgdXNlIGl0cyBvd24gY29weSBvZiB0aGUKICogICB6bGliIHNv
dXJjZXMgaW5zdGVhZC4gIFRoZXNlIGhhdmUgYmVlbiBtb2RpZmllZCB0byBiZSBpbmNsdWRl
ZAogKiAgIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29tcG9uZW50IGFuZCAqKm5vdCoqIGV4cG9y
dCBleHRlcm5hbCBmdW5jdGlvbgogKiAgIG5hbWVzLiAgVGhpcyBhbGxvd3MgeW91IHRvIGxp
bmsgYW55IHByb2dyYW0gd2l0aCBGcmVlVHlwZSBfYW5kXyBaTGliCiAqICAgd2l0aG91dCBs
aW5raW5nIGNvbmZsaWN0cy4KICoKICogICBEbyBub3QgYCN1bmRlZmAgdGhpcyBtYWNybyBo
ZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lCiAqICAgaXQgZm9yIGNl
cnRhaW4gY29uZmlndXJhdGlvbnMgb25seS4KICoKICogICBJZiB5b3UgdXNlIGEgYnVpbGQg
c3lzdGVtIGxpa2UgY21ha2Ugb3IgdGhlIGBjb25maWd1cmVgIHNjcmlwdCwKICogICBvcHRp
b25zIHNldCBieSB0aG9zZSBwcm9ncmFtcyBoYXZlIHByZWNlZGVuY2UsIG92ZXJ3cml0aW5n
IHRoZSB2YWx1ZQogKiAgIGhlcmUgd2l0aCB0aGUgY29uZmlndXJlZCBvbmUuCiAqCiAqICAg
SWYgeW91IHVzZSB0aGUgR05VIG1ha2UgYnVpbGQgc3lzdGVtIGRpcmVjdGx5ICh0aGF0IGlz
LCB3aXRob3V0IHRoZQogKiAgIGBjb25maWd1cmVgIHNjcmlwdCkgYW5kIHlvdSBkZWZpbmUg
dGhpcyBtYWNybywgeW91IGFsc28gaGF2ZSB0byBwYXNzCiAqICAgYFNZU1RFTV9aTElCPXll
c2AgYXMgYW4gYXJndW1lbnQgdG8gbWFrZS4KICovCi8qICNkZWZpbmUgRlRfQ09ORklHX09Q
VElPTl9TWVNURU1fWkxJQiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEJ6aXAy
LWNvbXByZXNzZWQgZmlsZSBzdXBwb3J0LgogKgogKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVz
IGZvbnQgZmlsZXMgdGhhdCBoYXZlIGJlZW4gY29tcHJlc3NlZCB3aXRoIHRoZQogKiAgIGBi
emlwMmAgcHJvZ3JhbS4gIFRoaXMgaXMgbW9zdGx5IHVzZWQgdG8gcGFyc2UgbWFueSBvZiB0
aGUgUENGIGZpbGVzCiAqICAgdGhhdCBjb21lIHdpdGggWEZyZWU4Ni4gIFRoZSBpbXBsZW1l
bnRhdGlvbiB1c2VzIGBsaWJiejJgIHRvIHBhcnRpYWxseQogKiAgIHVuY29tcHJlc3MgdGhl
IGZpbGUgb24gdGhlIGZseSAoc2VlIGBzcmMvYnppcDIvZnRiemlwMi5jYCkuICBDb250cmFy
eQogKiAgIHRvIGd6aXAsIGJ6aXAyIGN1cnJlbnRseSBpcyBub3QgaW5jbHVkZWQgYW5kIG5l
ZWQgdG8gdXNlIHRoZSBzeXN0ZW0KICogICBhdmFpbGFibGUgYnppcDIgaW1wbGVtZW50YXRp
b24uCiAqCiAqICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRo
aXMgJ2ZlYXR1cmUnLgogKgogKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBj
bWFrZSBvciB0aGUgYGNvbmZpZ3VyZWAgc2NyaXB0LAogKiAgIG9wdGlvbnMgc2V0IGJ5IHRo
b3NlIHByb2dyYW1zIGhhdmUgcHJlY2VkZW5jZSwgb3ZlcndyaXRpbmcgdGhlIHZhbHVlCiAq
ICAgaGVyZSB3aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KICovCi8qICNkZWZpbmUgRlRfQ09O
RklHX09QVElPTl9VU0VfQlpJUDIgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBE
ZWZpbmUgdG8gZGlzYWJsZSB0aGUgdXNlIG9mIGZpbGUgc3RyZWFtIGZ1bmN0aW9ucyBhbmQg
dHlwZXMsIGBGSUxFYCwKICogYGZvcGVuYCwgZXRjLiAgRW5hYmxlcyB0aGUgdXNlIG9mIHNt
YWxsZXIgc3lzdGVtIGxpYnJhcmllcyBvbiBlbWJlZGRlZAogKiBzeXN0ZW1zIHRoYXQgaGF2
ZSBtdWx0aXBsZSBzeXN0ZW0gbGlicmFyaWVzLCBzb21lIHdpdGggb3Igd2l0aG91dCBmaWxl
CiAqIHN0cmVhbSBzdXBwb3J0LCBpbiB0aGUgY2FzZXMgd2hlcmUgZmlsZSBzdHJlYW0gc3Vw
cG9ydCBpcyBub3QgbmVjZXNzYXJ5CiAqIHN1Y2ggYXMgbWVtb3J5IGxvYWRpbmcgb2YgZm9u
dCBmaWxlcy4KICovCiNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9ESVNBQkxFX1NUUkVBTV9T
VVBQT1JUCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogUE5HIGJpdG1hcCBzdXBwb3J0
LgogKgogKiAgIEZyZWVUeXBlIG5vdyBoYW5kbGVzIGxvYWRpbmcgY29sb3IgYml0bWFwIGds
eXBocyBpbiB0aGUgUE5HIGZvcm1hdC4KICogICBUaGlzIHJlcXVpcmVzIGhlbHAgZnJvbSB0
aGUgZXh0ZXJuYWwgbGlicG5nIGxpYnJhcnkuICBVbmNvbXByZXNzZWQKICogICBjb2xvciBi
aXRtYXBzIGRvIG5vdCBuZWVkIGFueSBleHRlcm5hbCBsaWJyYXJpZXMgYW5kIHdpbGwgYmUg
c3VwcG9ydGVkCiAqICAgcmVnYXJkbGVzcyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24uCiAqCiAq
ICAgRGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IHdhbnQgdG8gZW5hYmxlIHRoaXMgJ2ZlYXR1
cmUnLgogKgogKiAgIElmIHlvdSB1c2UgYSBidWlsZCBzeXN0ZW0gbGlrZSBjbWFrZSBvciB0
aGUgYGNvbmZpZ3VyZWAgc2NyaXB0LAogKiAgIG9wdGlvbnMgc2V0IGJ5IHRob3NlIHByb2dy
YW1zIGhhdmUgcHJlY2VkZW5jZSwgb3ZlcndyaXRpbmcgdGhlIHZhbHVlCiAqICAgaGVyZSB3
aXRoIHRoZSBjb25maWd1cmVkIG9uZS4KICovCi8qICNkZWZpbmUgRlRfQ09ORklHX09QVElP
Tl9VU0VfUE5HICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogSGFyZkJ1enogc3Vw
cG9ydC4KICoKICogICBGcmVlVHlwZSB1c2VzIHRoZSBIYXJmQnV6eiBsaWJyYXJ5IHRvIGlt
cHJvdmUgYXV0by1oaW50aW5nIG9mIE9wZW5UeXBlCiAqICAgZm9udHMuICBJZiBhdmFpbGFi
bGUsIG1hbnkgZ2x5cGhzIG5vdCBkaXJlY3RseSBhZGRyZXNzYWJsZSBieSBhIGZvbnQncwog
KiAgIGNoYXJhY3RlciBtYXAgd2lsbCBiZSBoaW50ZWQgYWxzby4KICoKICogICBEZWZpbmUg
dGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyAnZmVhdHVyZScuCiAqCiAq
ICAgSWYgeW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmln
dXJlYCBzY3JpcHQsCiAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBw
cmVjZWRlbmNlLCBvdmVyd3JpdGluZyB0aGUgdmFsdWUKICogICBoZXJlIHdpdGggdGhlIGNv
bmZpZ3VyZWQgb25lLgogKi8KLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJG
QlVaWiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIEhhcmZCdXp6IGR5bmFtaWMg
c3VwcG9ydC4KICoKICogICBEZWZpbmUgdGhpcyBtYWNybyBpZiB5b3Ugd2FudCB0aGUgSGFy
ZkJ1enogbGlicmFyeSB0byBiZSBsb2FkZWQgYXQKICogICBydW50aW1lIGluc3RlYWQgb2Yg
YmVpbmcgbGlua2VkIHRvIEZyZWVUeXBlLgogKgogKiAgIFRoaXMgb3B0aW9uIGhhcyBubyBl
ZmZlY3QgaWYgYEZUX0NPTkZJR19PUFRJT05fVVNFX0hBUkZCVVpaYCBpcyBub3QKICogICBk
ZWZpbmVkLgogKgogKiAgIFdoZW4gdGhpcyBvcHRpb24gaXMgZW5hYmxlZCwgRnJlZVR5cGUg
d2lsbCB0cnkgdG8gbG9hZCB0aGUgSGFyZkJ1enoKICogICBsaWJyYXJ5IGF0IHJ1bnRpbWUs
IHVzaW5nIGBkbG9wZW5gIG9yIGBMb2FkTGlicmFyeWAsIGRlcGVuZGluZyBvbiB0aGUKICog
ICBwbGF0Zm9ybS4gIE9uIE1pY3Jvc29mdCBwbGF0Zm9ybXMsIHRoZSBsaWJyYXJ5IG5hbWUg
bG9va2VkIHVwIGlzCiAqICAgYGxpYmhhcmZidXp6LTAuZGxsYC4gIE9uIEFwcGxlIHBsYXRm
b3JtcywgdGhlIGxpYnJhcnkgbmFtZSBsb29rZWQgdXAKICogICBpcyBgbGliaGFyZmJ1enou
MC5keWxpYmAuICBPbiBhbGwgb3RoZXIgcGxhdGZvcm1zLCB0aGUgbGlicmFyeSBuYW1lCiAq
ICAgbG9va2VkIHVwIGlzIGBsaWJoYXJmYnV6ei5zby4wYC4gIFRoaXMgbmFtZSBjYW4gYmUg
b3ZlcnJpZGRlbiBieQogKiAgIGRlZmluaW5nIHRoZSBtYWNybyBgRlRfTElCSEFSRkJVWlpg
IGF0IEZyZWVUeXBlIGNvbXBpbGF0aW9uIHRpbWUuCiAqCiAqICAgSWYgeW91IHVzZSBhIGJ1
aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlYCBzY3JpcHQsCiAqICAg
b3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZWRlbmNlLCBvdmVyd3Jp
dGluZyB0aGUgdmFsdWUKICogICBoZXJlIHdpdGggdGhlIGNvbmZpZ3VyZWQgb25lLgogKi8K
LyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9IQVJGQlVaWl9EWU5BTUlDICovCgov
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioKICoKICogQnJvdGxpIHN1cHBvcnQuCiAqCiAqICAgRnJl
ZVR5cGUgdXNlcyB0aGUgQnJvdGxpIGxpYnJhcnkgdG8gcHJvdmlkZSBzdXBwb3J0IGZvciBk
ZWNvbXByZXNzaW5nCiAqICAgV09GRjIgc3RyZWFtcy4KICoKICogICBEZWZpbmUgdGhpcyBt
YWNybyBpZiB5b3Ugd2FudCB0byBlbmFibGUgdGhpcyAnZmVhdHVyZScuCiAqCiAqICAgSWYg
eW91IHVzZSBhIGJ1aWxkIHN5c3RlbSBsaWtlIGNtYWtlIG9yIHRoZSBgY29uZmlndXJlYCBz
Y3JpcHQsCiAqICAgb3B0aW9ucyBzZXQgYnkgdGhvc2UgcHJvZ3JhbXMgaGF2ZSBwcmVjZWRl
bmNlLCBvdmVyd3JpdGluZyB0aGUgdmFsdWUKICogICBoZXJlIHdpdGggdGhlIGNvbmZpZ3Vy
ZWQgb25lLgogKi8KLyogI2RlZmluZSBGVF9DT05GSUdfT1BUSU9OX1VTRV9CUk9UTEkgKi8K
Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKgogKiBHbHlwaCBQb3N0c2NyaXB0IE5hbWVzIGhh
bmRsaW5nCiAqCiAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGUgMiBpcyBjb21waWxlZCB3aXRo
IHRoZSAncHNuYW1lcycgbW9kdWxlLiAgVGhpcwogKiAgIG1vZHVsZSBpcyBpbiBjaGFyZ2Ug
b2YgY29udmVydGluZyBhIGdseXBoIG5hbWUgc3RyaW5nIGludG8gYSBVbmljb2RlCiAqICAg
dmFsdWUsIG9yIHJldHVybiBhIE1hY2ludG9zaCBzdGFuZGFyZCBnbHlwaCBuYW1lIGZvciB0
aGUgdXNlIHdpdGggdGhlCiAqICAgVHJ1ZVR5cGUgJ3Bvc3QnIHRhYmxlLgogKgogKiAgIFVu
ZGVmaW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCB3YW50ICdwc25hbWVzJyBjb21waWxl
ZCBpbiB5b3VyCiAqICAgYnVpbGQgb2YgRnJlZVR5cGUuICBUaGlzIGhhcyB0aGUgZm9sbG93
aW5nIGVmZmVjdHM6CiAqCiAqICAgLSBUaGUgVHJ1ZVR5cGUgZHJpdmVyIHdpbGwgcHJvdmlk
ZSBpdHMgb3duIHNldCBvZiBnbHlwaCBuYW1lcywgaWYgeW91CiAqICAgICBidWlsZCBpdCB0
byBzdXBwb3J0IHBvc3RzY3JpcHQgbmFtZXMgaW4gdGhlIFRydWVUeXBlICdwb3N0JyB0YWJs
ZSwKICogICAgIGJ1dCB3aWxsIG5vdCBzeW50aGVzaXplIGEgbWlzc2luZyBVbmljb2RlIGNo
YXJtYXAuCiAqCiAqICAgLSBUaGUgVHlwZX4xIGRyaXZlciB3aWxsIG5vdCBiZSBhYmxlIHRv
IHN5bnRoZXNpemUgYSBVbmljb2RlIGNoYXJtYXAKICogICAgIG91dCBvZiB0aGUgZ2x5cGhz
IGZvdW5kIGluIHRoZSBmb250cy4KICoKICogICBZb3Ugd291bGQgbm9ybWFsbHkgdW5kZWZp
bmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIHdoZW4gYnVpbGRpbmcgYQogKiAgIHZlcnNp
b24gb2YgRnJlZVR5cGUgdGhhdCBkb2Vzbid0IGNvbnRhaW4gYSBUeXBlfjEgb3IgQ0ZGIGRy
aXZlci4KICovCi8vICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVT
CgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioKICoKICogUG9zdHNjcmlwdCBOYW1lcyB0byBVbmlj
b2RlIFZhbHVlcyBzdXBwb3J0CiAqCiAqICAgQnkgZGVmYXVsdCwgRnJlZVR5cGV+MiBpcyBi
dWlsdCB3aXRoIHRoZSAncHNuYW1lcycgbW9kdWxlIGNvbXBpbGVkIGluLgogKiAgIEFtb25n
IG90aGVyIHRoaW5ncywgdGhlIG1vZHVsZSBpcyB1c2VkIHRvIGNvbnZlcnQgYSBnbHlwaCBu
YW1lIGludG8gYQogKiAgIFVuaWNvZGUgdmFsdWUuICBUaGlzIGlzIGVzcGVjaWFsbHkgdXNl
ZnVsIGluIG9yZGVyIHRvIHN5bnRoZXNpemUgb24KICogICB0aGUgZmx5IGEgVW5pY29kZSBj
aGFybWFwIGZyb20gdGhlIENGRi9UeXBlfjEgZHJpdmVyIHRocm91Z2ggYSBiaWcKICogICB0
YWJsZSBuYW1lZCB0aGUgJ0Fkb2JlIEdseXBoIExpc3QnIChBR0wpLgogKgogKiAgIFVuZGVm
aW5lIHRoaXMgbWFjcm8gaWYgeW91IGRvIG5vdCB3YW50IHRoZSBBZG9iZSBHbHlwaCBMaXN0
IGNvbXBpbGVkCiAqICAgaW4geW91ciAncHNuYW1lcycgbW9kdWxlLiAgVGhlIFR5cGV+MSBk
cml2ZXIgd2lsbCBub3QgYmUgYWJsZSB0bwogKiAgIHN5bnRoZXNpemUgYSBVbmljb2RlIGNo
YXJtYXAgb3V0IG9mIHRoZSBnbHlwaHMgZm91bmQgaW4gdGhlIGZvbnRzLgogKi8KLy8gI2Rl
ZmluZSBGVF9DT05GSUdfT1BUSU9OX0FET0JFX0dMWVBIX0xJU1QKCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgogKgogKiBTdXBwb3J0IGZvciBNYWMgZm9udHMKICoKICogICBEZWZpbmUgdGhp
cyBtYWNybyBpZiB5b3Ugd2FudCBzdXBwb3J0IGZvciBvdXRsaW5lIGZvbnRzIGluIE1hYyBm
b3JtYXQKICogICAobWFjIGRmb250LCBtYWMgcmVzb3VyY2UsIG1hY2JpbmFyeSBjb250YWlu
aW5nIGEgbWFjIHJlc291cmNlKSBvbgogKiAgIG5vbi1NYWMgcGxhdGZvcm1zLgogKgogKiAg
IE5vdGUgdGhhdCB0aGUgJ0ZPTkQnIHJlc291cmNlIGlzbid0IGNoZWNrZWQuCiAqLwovLyAj
ZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fTUFDX0ZPTlRTCgovKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICoKICogR3Vlc3NpbmcgbWV0aG9kcyB0byBhY2Nlc3MgZW1iZWRkZWQgcmVzb3VyY2Ug
Zm9ya3MKICoKICogICBFbmFibGUgZXh0cmEgTWFjIGZvbnRzIHN1cHBvcnQgb24gbm9uLU1h
YyBwbGF0Zm9ybXMgKGUuZy4sIEdOVS9MaW51eCkuCiAqCiAqICAgUmVzb3VyY2UgZm9ya3Mg
d2hpY2ggaW5jbHVkZSBmb250cyBkYXRhIGFyZSBzdG9yZWQgc29tZXRpbWVzIGluCiAqICAg
bG9jYXRpb25zIHdoaWNoIHVzZXJzIG9yIGRldmVsb3BlcnMgZG9uJ3QgZXhwZWN0ZWQuICBJ
biBzb21lIGNhc2VzLAogKiAgIHJlc291cmNlIGZvcmtzIHN0YXJ0IHdpdGggc29tZSBvZmZz
ZXQgZnJvbSB0aGUgaGVhZCBvZiBhIGZpbGUuICBJbgogKiAgIG90aGVyIGNhc2VzLCB0aGUg
YWN0dWFsIHJlc291cmNlIGZvcmsgaXMgc3RvcmVkIGluIGZpbGUgZGlmZmVyZW50IGZyb20K
ICogICB3aGF0IHRoZSB1c2VyIHNwZWNpZmllcy4gIElmIHRoaXMgb3B0aW9uIGlzIGFjdGl2
YXRlZCwgRnJlZVR5cGUgdHJpZXMKICogICB0byBndWVzcyB3aGV0aGVyIHN1Y2ggb2Zmc2V0
cyBvciBkaWZmZXJlbnQgZmlsZSBuYW1lcyBtdXN0IGJlIHVzZWQuCiAqCiAqICAgTm90ZSB0
aGF0IG5vcm1hbCwgZGlyZWN0IGFjY2VzcyBvZiByZXNvdXJjZSBmb3JrcyBpcyBjb250cm9s
bGVkIHZpYQogKiAgIHRoZSBgRlRfQ09ORklHX09QVElPTl9NQUNfRk9OVFNgIG9wdGlvbi4K
ICovCiNpZmRlZiBGVF9DT05GSUdfT1BUSU9OX01BQ19GT05UUwojZGVmaW5lIEZUX0NPTkZJ
R19PUFRJT05fR1VFU1NJTkdfRU1CRURERURfUkZPUksKI2VuZGlmCgovKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioKICoKICogQWxsb3cgdGhlIHVzZSBvZiBgRlRfSW5jcmVtZW50YWxfSW50ZXJm
YWNlYCB0byBsb2FkIHR5cGVmYWNlcyB0aGF0CiAqIGNvbnRhaW4gbm8gZ2x5cGggZGF0YSwg
YnV0IHN1cHBseSBpdCB2aWEgYSBjYWxsYmFjayBmdW5jdGlvbi4gIFRoaXMgaXMKICogcmVx
dWlyZWQgYnkgY2xpZW50cyBzdXBwb3J0aW5nIGRvY3VtZW50IGZvcm1hdHMgd2hpY2ggc3Vw
cGx5IGZvbnQgZGF0YQogKiBpbmNyZW1lbnRhbGx5IGFzIHRoZSBkb2N1bWVudCBpcyBwYXJz
ZWQsIHN1Y2ggYXMgdGhlIEdob3N0c2NyaXB0CiAqIGludGVycHJldGVyIGZvciB0aGUgUG9z
dFNjcmlwdCBsYW5ndWFnZS4KICovCi8vICNkZWZpbmUgRlRfQ09ORklHX09QVElPTl9JTkNS
RU1FTlRBTAoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRoZSBzaXplIGluIGJ5dGVz
IG9mIHRoZSByZW5kZXIgcG9vbCB1c2VkIGJ5IHRoZSBzY2FuLWxpbmUgY29udmVydGVyIHRv
CiAqIGRvIGFsbCBvZiBpdHMgd29yay4KICovCiNkZWZpbmUgRlRfUkVOREVSX1BPT0xfU0la
RSAxNjM4NEwKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBGVF9NQVhfTU9EVUxFUwog
KgogKiAgIFRoZSBtYXhpbXVtIG51bWJlciBvZiBtb2R1bGVzIHRoYXQgY2FuIGJlIHJlZ2lz
dGVyZWQgaW4gYSBzaW5nbGUKICogICBGcmVlVHlwZSBsaWJyYXJ5IG9iamVjdC4gIDMyfmlz
IHRoZSBkZWZhdWx0LgogKi8KI2RlZmluZSBGVF9NQVhfTU9EVUxFUyAzMgoKLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqCiAqIERlYnVnIGxldmVsCiAqCiAqICAgRnJlZVR5cGUgY2FuIGJl
IGNvbXBpbGVkIGluIGRlYnVnIG9yIHRyYWNlIG1vZGUuICBJbiBkZWJ1ZyBtb2RlLAogKiAg
IGVycm9ycyBhcmUgcmVwb3J0ZWQgdGhyb3VnaCB0aGUgJ2Z0ZGVidWcnIGNvbXBvbmVudC4g
IEluIHRyYWNlIG1vZGUsCiAqICAgYWRkaXRpb25hbCBtZXNzYWdlcyBhcmUgc2VudCB0byB0
aGUgc3RhbmRhcmQgb3V0cHV0IGR1cmluZyBleGVjdXRpb24uCiAqCiAqICAgRGVmaW5lIGBG
VF9ERUJVR19MRVZFTF9FUlJPUmAgdG8gYnVpbGQgdGhlIGxpYnJhcnkgaW4gZGVidWcgbW9k
ZS4KICogICBEZWZpbmUgYEZUX0RFQlVHX0xFVkVMX1RSQUNFYCB0byBidWlsZCBpdCBpbiB0
cmFjZSBtb2RlLgogKgogKiAgIERvbid0IGRlZmluZSBhbnkgb2YgdGhlc2UgbWFjcm9zIHRv
IGNvbXBpbGUgaW4gJ3JlbGVhc2UnIG1vZGUhCiAqCiAqICAgRG8gbm90IGAjdW5kZWZgIHRo
ZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWlnaHQgZGVmaW5lCiAq
ICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5LgogKi8KLyogI2RlZmlu
ZSBGVF9ERUJVR19MRVZFTF9FUlJPUiAqLwovKiAjZGVmaW5lIEZUX0RFQlVHX0xFVkVMX1RS
QUNFICovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogTG9nZ2luZwogKgogKiAgIENv
bXBpbGluZyBGcmVlVHlwZSBpbiBkZWJ1ZyBvciB0cmFjZSBtb2RlIG1ha2VzIEZyZWVUeXBl
IHdyaXRlIGVycm9yCiAqICAgYW5kIHRyYWNlIGxvZyBtZXNzYWdlcyB0byBgc3RkZXJyYC4g
IEVuYWJsaW5nIHRoaXMgbWFjcm8KICogICBhdXRvbWF0aWNhbGx5IGZvcmNlcyB0aGUgYEZU
X0RFQlVHX0xFVkVMX0VSUk9SYCBhbmQKICogICBgRlRfREVCVUdfTEVWRUxfVFJBQ0VgIG1h
Y3JvcyBhbmQgYWxsb3dzIEZyZWVUeXBlIHRvIHdyaXRlIGVycm9yIGFuZAogKiAgIHRyYWNl
IGxvZyBtZXNzYWdlcyB0byBhIGZpbGUgaW5zdGVhZCBvZiBgc3RkZXJyYC4gIEZvciB3cml0
aW5nIGxvZ3MKICogICB0byBhIGZpbGUsIEZyZWVUeXBlIHVzZXMgYW4gdGhlIGV4dGVybmFs
IGBkbGdgIGxpYnJhcnkgKHRoZSBzb3VyY2UKICogICBjb2RlIGlzIGluIGBzcmMvZGxnYCku
CiAqCiAqICAgVGhpcyBvcHRpb24gbmVlZHMgYSBDOTkgY29tcGlsZXIuCiAqLwovKiAjZGVm
aW5lIEZUX0RFQlVHX0xPR0dJTkcgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBB
dXRvZml0dGVyIGRlYnVnZ2luZwogKgogKiAgIElmIGBGVF9ERUJVR19BVVRPRklUYCBpcyBk
ZWZpbmVkLCBGcmVlVHlwZSBwcm92aWRlcyBzb21lIG1lYW5zIHRvCiAqICAgY29udHJvbCB0
aGUgYXV0b2ZpdHRlciBiZWhhdmlvdXIgZm9yIGRlYnVnZ2luZyBwdXJwb3NlcyB3aXRoIGds
b2JhbAogKiAgIGJvb2xlYW4gdmFyaWFibGVzIChjb25zZXF1ZW50bHksIHlvdSBzaG91bGQg
KipuZXZlcioqIGVuYWJsZSB0aGlzCiAqICAgd2hpbGUgY29tcGlsaW5nIGluICdyZWxlYXNl
JyBtb2RlKToKICoKICogICBgYGAKICogICAgIGFmX2RlYnVnX2Rpc2FibGVfaG9yel9oaW50
c18KICogICAgIGFmX2RlYnVnX2Rpc2FibGVfdmVydF9oaW50c18KICogICAgIGFmX2RlYnVn
X2Rpc2FibGVfYmx1ZV9oaW50c18KICogICBgYGAKICoKICogICBBZGRpdGlvbmFsbHksIHRo
ZSBmb2xsb3dpbmcgZnVuY3Rpb25zIHByb3ZpZGUgZHVtcHMgb2YgdmFyaW91cwogKiAgIGlu
dGVybmFsIGF1dG9maXQgc3RydWN0dXJlcyB0byBzdGRvdXQgKHVzaW5nIGBwcmludGZgKToK
ICoKICogICBgYGAKICogICAgIGFmX2dseXBoX2hpbnRzX2R1bXBfcG9pbnRzCiAqICAgICBh
Zl9nbHlwaF9oaW50c19kdW1wX3NlZ21lbnRzCiAqICAgICBhZl9nbHlwaF9oaW50c19kdW1w
X2VkZ2VzCiAqICAgICBhZl9nbHlwaF9oaW50c19nZXRfbnVtX3NlZ21lbnRzCiAqICAgICBh
Zl9nbHlwaF9oaW50c19nZXRfc2VnbWVudF9vZmZzZXQKICogICBgYGAKICoKICogICBBcyBh
biBhcmd1bWVudCwgdGhleSB1c2UgYW5vdGhlciBnbG9iYWwgdmFyaWFibGU6CiAqCiAqICAg
YGBgCiAqICAgICBhZl9kZWJ1Z19oaW50c18KICogICBgYGAKICoKICogICBQbGVhc2UgaGF2
ZSBhIGxvb2sgYXQgdGhlIGBmdGdyaWRgIGRlbW8gcHJvZ3JhbSB0byBzZWUgaG93IHRob3Nl
CiAqICAgdmFyaWFibGVzIGFuZCBtYWNyb3Mgc2hvdWxkIGJlIHVzZWQuCiAqCiAqICAgRG8g
bm90IGAjdW5kZWZgIHRoZXNlIG1hY3JvcyBoZXJlIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0g
bWlnaHQgZGVmaW5lCiAqICAgdGhlbSBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5
LgogKi8KLyogI2RlZmluZSBGVF9ERUJVR19BVVRPRklUICovCgovKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioKICoKICogTWVtb3J5IERlYnVnZ2luZwogKgogKiAgIEZyZWVUeXBlIG5vdyBjb21l
cyB3aXRoIGFuIGludGVncmF0ZWQgbWVtb3J5IGRlYnVnZ2VyIHRoYXQgaXMgY2FwYWJsZQog
KiAgIG9mIGRldGVjdGluZyBzaW1wbGUgZXJyb3JzIGxpa2UgbWVtb3J5IGxlYWtzIG9yIGRv
dWJsZSBkZWxldGVzLiAgVG8KICogICBjb21waWxlIGl0IHdpdGhpbiB5b3VyIGJ1aWxkIG9m
IHRoZSBsaWJyYXJ5LCB5b3Ugc2hvdWxkIGRlZmluZQogKiAgIGBGVF9ERUJVR19NRU1PUllg
IGhlcmUuCiAqCiAqICAgTm90ZSB0aGF0IHRoZSBtZW1vcnkgZGVidWdnZXIgaXMgb25seSBh
Y3RpdmF0ZWQgYXQgcnVudGltZSB3aGVuIHdoZW4KICogICB0aGUgX2Vudmlyb25tZW50XyB2
YXJpYWJsZSBgRlQyX0RFQlVHX01FTU9SWWAgaXMgZGVmaW5lZCBhbHNvIQogKgogKiAgIERv
IG5vdCBgI3VuZGVmYCB0aGlzIG1hY3JvIGhlcmUgc2luY2UgdGhlIGJ1aWxkIHN5c3RlbSBt
aWdodCBkZWZpbmUgaXQKICogICBmb3IgY2VydGFpbiBjb25maWd1cmF0aW9ucyBvbmx5Lgog
Ki8KLyogI2RlZmluZSBGVF9ERUJVR19NRU1PUlkgKi8KCi8qKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KgogKgogKiBNb2R1bGUgZXJyb3JzCiAqCiAqICAgSWYgdGhpcyBtYWNybyBpcyBzZXQgKHdo
aWNoIGlzIF9ub3RfIHRoZSBkZWZhdWx0KSwgdGhlIGhpZ2hlciBieXRlIG9mCiAqICAgYW4g
ZXJyb3IgY29kZSBnaXZlcyB0aGUgbW9kdWxlIGluIHdoaWNoIHRoZSBlcnJvciBoYXMgb2Nj
dXJyZWQsIHdoaWxlCiAqICAgdGhlIGxvd2VyIGJ5dGUgaXMgdGhlIHJlYWwgZXJyb3IgY29k
ZS4KICoKICogICBTZXR0aW5nIHRoaXMgbWFjcm8gbWFrZXMgc2Vuc2UgZm9yIGRlYnVnZ2lu
ZyBwdXJwb3NlcyBvbmx5LCBzaW5jZSBpdAogKiAgIHdvdWxkIGJyZWFrIHNvdXJjZSBjb21w
YXRpYmlsaXR5IG9mIGNlcnRhaW4gcHJvZ3JhbXMgdGhhdCB1c2UKICogICBGcmVlVHlwZX4y
LgogKgogKiAgIE1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIGZpbGVzIGBmdG1v
ZGVyci5oYCBhbmQgYGZ0ZXJyb3JzLmhgLgogKi8KI3VuZGVmIEZUX0NPTkZJR19PUFRJT05f
VVNFX01PRFVMRV9FUlJPUlMKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBPcGVuVHlw
ZSBTVkcgR2x5cGggU3VwcG9ydAogKgogKiAgIFNldHRpbmcgdGhpcyBtYWNybyBlbmFibGVz
IHN1cHBvcnQgZm9yIE9wZW5UeXBlIFNWRyBnbHlwaHMuICBCeQogKiAgIGRlZmF1bHQsIEZy
ZWVUeXBlIGNhbiBvbmx5IGZldGNoIFNWRyBkb2N1bWVudHMuICBIb3dldmVyLCBpdCBjYW4g
YWxzbwogKiAgIHJlbmRlciB0aGVtIGlmIGV4dGVybmFsIHJlbmRlcmluZyBob29rIGZ1bmN0
aW9ucyBhcmUgcGx1Z2dlZCBpbiBhdAogKiAgIHJ1bnRpbWUuCiAqCiAqICAgTW9yZSBkZXRh
aWxzIG9uIHRoZSBob29rcyBjYW4gYmUgZm91bmQgaW4gZmlsZSBgb3RzdmcuaGAuCiAqLwov
LyAjZGVmaW5lIEZUX0NPTkZJR19PUFRJT05fU1ZHCgovKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioK
ICoKICogRXJyb3IgU3RyaW5ncwogKgogKiAgIElmIHRoaXMgbWFjcm8gaXMgc2V0LCBgRlRf
RXJyb3JfU3RyaW5nYCB3aWxsIHJldHVybiBtZWFuaW5nZnVsCiAqICAgZGVzY3JpcHRpb25z
LiAgVGhpcyBpcyBub3QgZW5hYmxlZCBieSBkZWZhdWx0IHRvIHJlZHVjZSB0aGUgb3ZlcmFs
bAogKiAgIHNpemUgb2YgRnJlZVR5cGUuCiAqCiAqICAgTW9yZSBkZXRhaWxzIGNhbiBiZSBm
b3VuZCBpbiB0aGUgZmlsZSBgZnRlcnJvcnMuaGAuCiAqLwovKiAjZGVmaW5lIEZUX0NPTkZJ
R19PUFRJT05fRVJST1JfU1RSSU5HUyAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqLwovKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KLyoqKiogICAgICAgIFMg
RiBOIFQgICBEIFIgSSBWIEUgUiAgICBDIE8gTiBGIEkgRyBVIFIgQSBUIEkgTyBOICAgICAg
ICoqKiovCi8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogRGVmaW5l
IGBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFNgIGlmIHlvdSB3YW50IHRvIHN1
cHBvcnQKICogZW1iZWRkZWQgYml0bWFwcyBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgJ3Nm
bnQnIG1vZHVsZSAobmFtZWx5CiAqIFRydWVUeXBlfiYgT3BlblR5cGUpLgogKi8KLy8gI2Rl
ZmluZSBUVF9DT05GSUdfT1BUSU9OX0VNQkVEREVEX0JJVE1BUFMKCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgogKgogKiBEZWZpbmUgYFRUX0NPTkZJR19PUFRJT05fQ09MT1JfTEFZRVJTYCBp
ZiB5b3Ugd2FudCB0byBzdXBwb3J0IGNvbG9yZWQKICogb3V0bGluZXMgKGZyb20gdGhlICdD
T0xSJy8nQ1BBTCcgdGFibGVzKSBpbiBhbGwgZm9ybWF0cyB1c2luZyB0aGUgJ3NmbnQnCiAq
IG1vZHVsZSAobmFtZWx5IFRydWVUeXBlfiYgT3BlblR5cGUpLgogKi8KLy8gI2RlZmluZSBU
VF9DT05GSUdfT1BUSU9OX0NPTE9SX0xBWUVSUwoKLyoqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAq
CiAqIERlZmluZSBgVFRfQ09ORklHX09QVElPTl9QT1NUU0NSSVBUX05BTUVTYCBpZiB5b3Ug
d2FudCB0byBiZSBhYmxlIHRvCiAqIGxvYWQgYW5kIGVudW1lcmF0ZSBQb3N0c2NyaXB0IG5h
bWVzIG9mIGdseXBocyBpbiBhIFRydWVUeXBlIG9yIE9wZW5UeXBlCiAqIGZpbGUuCiAqCiAq
IE5vdGUgdGhhdCBpZiB5b3UgZG8gbm90IGNvbXBpbGUgdGhlICdwc25hbWVzJyBtb2R1bGUg
YnkgdW5kZWZpbmluZyB0aGUKICogYWJvdmUgYEZUX0NPTkZJR19PUFRJT05fUE9TVFNDUklQ
VF9OQU1FU2AgbWFjcm8sIHRoZSAnc2ZudCcgbW9kdWxlIHdpbGwKICogY29udGFpbiBhZGRp
dGlvbmFsIGNvZGUgdG8gcmVhZCB0aGUgUG9zdFNjcmlwdCBuYW1lIHRhYmxlIGZyb20gYSBm
b250LgogKgogKiAoQnkgZGVmYXVsdCwgdGhlIG1vZHVsZSB1c2VzICdwc25hbWVzJyB0byBl
eHRyYWN0IGdseXBoIG5hbWVzLikKICovCi8vICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9Q
T1NUU0NSSVBUX05BTUVTCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogRGVmaW5lIGBU
VF9DT05GSUdfT1BUSU9OX1NGTlRfTkFNRVNgIGlmIHlvdXIgYXBwbGljYXRpb25zIG5lZWQg
dG8gYWNjZXNzCiAqIHRoZSBpbnRlcm5hbCBuYW1lIHRhYmxlIGluIGEgU0ZOVC1iYXNlZCBm
b3JtYXQgbGlrZSBUcnVlVHlwZSBvcgogKiBPcGVuVHlwZS4gIFRoZSBuYW1lIHRhYmxlIGNv
bnRhaW5zIHZhcmlvdXMgc3RyaW5ncyB1c2VkIHRvIGRlc2NyaWJlIHRoZQogKiBmb250LCBs
aWtlIGZhbWlseSBuYW1lLCBjb3B5cmlnaHQsIHZlcnNpb24sIGV0Yy4gIEl0IGRvZXMgbm90
IGNvbnRhaW4KICogYW55IGdseXBoIG5hbWUgdGhvdWdoLgogKgogKiBBY2Nlc3NpbmcgU0ZO
VCBuYW1lcyBpcyBkb25lIHRocm91Z2ggdGhlIGZ1bmN0aW9ucyBkZWNsYXJlZCBpbgogKiBg
ZnRzbmFtZXMuaGAuCiAqLwovLyAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fU0ZOVF9OQU1F
UwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIFRydWVUeXBlIENNYXAgc3VwcG9ydAog
KgogKiAgIEhlcmUgeW91IGNhbiBmaW5lLXR1bmUgd2hpY2ggVHJ1ZVR5cGUgQ01hcCB0YWJs
ZSBmb3JtYXQgc2hhbGwgYmUKICogICBzdXBwb3J0ZWQuCiAqLwojZGVmaW5lIFRUX0NPTkZJ
R19DTUFQX0ZPUk1BVF8wCiNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzIKI2RlZmlu
ZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfNAojZGVmaW5lIFRUX0NPTkZJR19DTUFQX0ZPUk1B
VF82CiNkZWZpbmUgVFRfQ09ORklHX0NNQVBfRk9STUFUXzgKI2RlZmluZSBUVF9DT05GSUdf
Q01BUF9GT1JNQVRfMTAKI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTIKI2RlZmlu
ZSBUVF9DT05GSUdfQ01BUF9GT1JNQVRfMTMKI2RlZmluZSBUVF9DT05GSUdfQ01BUF9GT1JN
QVRfMTQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoq
KiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoqKiovCi8qKioqICAgIFQgUiBVIEUgVCBZIFAgRSAgIEQgUiBJIFYg
RSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAqKioqLwovKioqKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoK
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAqCiAqIERlZmluZSBgVFRfQ09ORklHX09QVElPTl9C
WVRFQ09ERV9JTlRFUlBSRVRFUmAgaWYgeW91IHdhbnQgdG8gY29tcGlsZSBhCiAqIGJ5dGVj
b2RlIGludGVycHJldGVyIGluIHRoZSBUcnVlVHlwZSBkcml2ZXIuCiAqCiAqIEJ5IHVuZGVm
aW5pbmcgdGhpcywgeW91IHdpbGwgb25seSBjb21waWxlIHRoZSBjb2RlIG5lY2Vzc2FyeSB0
byBsb2FkCiAqIFRydWVUeXBlIGdseXBocyB3aXRob3V0IGhpbnRpbmcuCiAqCiAqIERvIG5v
dCBgI3VuZGVmYCB0aGlzIG1hY3JvIGhlcmUsIHNpbmNlIHRoZSBidWlsZCBzeXN0ZW0gbWln
aHQgZGVmaW5lIGl0CiAqIGZvciBjZXJ0YWluIGNvbmZpZ3VyYXRpb25zIG9ubHkuCiAqLwoj
ZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fQllURUNPREVfSU5URVJQUkVURVIKCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKgogKgogKiBEZWZpbmUgYFRUX0NPTkZJR19PUFRJT05fU1VCUElYRUxf
SElOVElOR2AgaWYgeW91IHdhbnQgdG8gY29tcGlsZQogKiBzdWJwaXhlbCBoaW50aW5nIHN1
cHBvcnQgaW50byB0aGUgVHJ1ZVR5cGUgZHJpdmVyLiAgVGhpcyBtb2RpZmllcyB0aGUKICog
VHJ1ZVR5cGUgaGludGluZyBtZWNoYW5pc20gd2hlbiBhbnl0aGluZyBidXQgYEZUX1JFTkRF
Ul9NT0RFX01PTk9gIGlzCiAqIHJlcXVlc3RlZC4KICoKICogSW4gcGFydGljdWxhciwgaXQg
bW9kaWZpZXMgdGhlIGJ5dGVjb2RlIGludGVycHJldGVyIHRvIGludGVycHJldCAob3IKICog
bm90KSBpbnN0cnVjdGlvbnMgaW4gYSBjZXJ0YWluIHdheSBzbyB0aGF0IGFsbCBUcnVlVHlw
ZSBmb250cyBsb29rIGxpa2UKICogdGhleSBkbyBpbiBhIFdpbmRvd3MgQ2xlYXJUeXBlIChE
aXJlY3RXcml0ZSkgZW52aXJvbm1lbnQuICBTZWUgWzFdIGZvciBhCiAqIHRlY2huaWNhbCBv
dmVydmlldyBvbiB3aGF0IHRoaXMgbWVhbnMuICBTZWUgYHR0aW50ZXJwLmhgIGZvciBtb3Jl
CiAqIGRldGFpbHMgb24gdGhpcyBvcHRpb24uCiAqCiAqIFRoZSBuZXcgZGVmYXVsdCBtb2Rl
IGZvY3VzZXMgb24gYXBwbHlpbmcgYSBtaW5pbWFsIHNldCBvZiBydWxlcyB0byBhbGwKICog
Zm9udHMgaW5kaXNjcmltaW5hdGVseSBzbyB0aGF0IG1vZGVybiBhbmQgd2ViIGZvbnRzIHJl
bmRlciB3ZWxsIHdoaWxlCiAqIGxlZ2FjeSBmb250cyByZW5kZXIgb2theS4gIFRoZSBjb3Jy
ZXNwb25kaW5nIGludGVycHJldGVyIHZlcnNpb24gaXMgdjQwLgogKiBUaGUgc28tY2FsbGVk
IEluZmluYWxpdHkgbW9kZSAodjM4KSBpcyBubyBsb25nZXIgYXZhaWxhYmxlIGluIEZyZWVU
eXBlLgogKgogKiBCeSB1bmRlZmluaW5nIHRoZXNlLCB5b3UgZ2V0IHJlbmRlcmluZyBiZWhh
dmlvciBsaWtlIG9uIFdpbmRvd3Mgd2l0aG91dAogKiBDbGVhclR5cGUsIGkuZS4sIFdpbmRv
d3MgWFAgd2l0aG91dCBDbGVhclR5cGUgZW5hYmxlZCBhbmQgV2luOXgKICogKGludGVycHJl
dGVyIHZlcnNpb24gdjM1KS4gIE9yIG5vdCwgZGVwZW5kaW5nIG9uIGhvdyBtdWNoIGhpbnRp
bmcgYmxvb2QKICogYW5kIHRlc3RpbmcgdGVhcnMgdGhlIGZvbnQgZGVzaWduZXIgcHV0IGlu
dG8gYSBnaXZlbiBmb250LiAgSWYgeW91CiAqIGRlZmluZSBvbmUgb3IgYm90aCBzdWJwaXhl
bCBoaW50aW5nIG9wdGlvbnMsIHlvdSBjYW4gc3dpdGNoIGJldHdlZW4KICogYmV0d2VlbiB2
MzUgYW5kIHRoZSBvbmVzIHlvdSBkZWZpbmUgKHVzaW5nIGBGVF9Qcm9wZXJ0eV9TZXRgKS4K
ICoKICogVGhpcyBvcHRpb24gcmVxdWlyZXMgYFRUX0NPTkZJR19PUFRJT05fQllURUNPREVf
SU5URVJQUkVURVJgIHRvIGJlCiAqIGRlZmluZWQuCiAqCiAqIFsxXQogKiBodHRwczovL2xl
YXJuLm1pY3Jvc29mdC5jb20vdHlwb2dyYXBoeS9jbGVhcnR5cGUvdHJ1ZXR5cGVjbGVhcnR5
cGUKICovCiNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9TVUJQSVhFTF9ISU5USU5HCgovKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioKICoKICogRGVmaW5lIGBUVF9DT05GSUdfT1BUSU9OX0NPTVBP
TkVOVF9PRkZTRVRfU0NBTEVEYCB0byBjb21waWxlIHRoZQogKiBUcnVlVHlwZSBnbHlwaCBs
b2FkZXIgdG8gdXNlIEFwcGxlJ3MgZGVmaW5pdGlvbiBvZiBob3cgdG8gaGFuZGxlCiAqIGNv
bXBvbmVudCBvZmZzZXRzIGluIGNvbXBvc2l0ZSBnbHlwaHMuCiAqCiAqIEFwcGxlIGFuZCBN
UyBkaXNhZ3JlZSBvbiB0aGUgZGVmYXVsdCBiZWhhdmlvciBvZiBjb21wb25lbnQgb2Zmc2V0
cyBpbgogKiBjb21wb3NpdGVzLiAgQXBwbGUgc2F5cyB0aGF0IHRoZXkgc2hvdWxkIGJlIHNj
YWxlZCBieSB0aGUgc2NhbGluZwogKiBmYWN0b3JzIGluIHRoZSB0cmFuc2Zvcm1hdGlvbiBt
YXRyaXggKHJvdWdobHksIGl0J3MgbW9yZSBjb21wbGV4KSB3aGlsZQogKiBNUyBzYXlzIHRo
ZXkgc2hvdWxkIG5vdC4gIE9wZW5UeXBlIGRlZmluZXMgdHdvIGJpdHMgaW4gdGhlIGNvbXBv
c2l0ZQogKiBmbGFncyBhcnJheSB3aGljaCBjYW4gYmUgdXNlZCB0byBkaXNhbWJpZ3VhdGUs
IGJ1dCBvbGQgZm9udHMgd2lsbCBub3QKICogaGF2ZSB0aGVtLgogKgogKiAgIGh0dHBzOi8v
bGVhcm4ubWljcm9zb2Z0LmNvbS90eXBvZ3JhcGh5L29wZW50eXBlL3NwZWMvZ2x5ZgogKiAg
IGh0dHBzOi8vZGV2ZWxvcGVyLmFwcGxlLmNvbS9mb250cy9UcnVlVHlwZS1SZWZlcmVuY2Ut
TWFudWFsL1JNMDYvQ2hhcDZnbHlmLmh0bWwKICovCiN1bmRlZiBUVF9DT05GSUdfT1BUSU9O
X0NPTVBPTkVOVF9PRkZTRVRfU0NBTEVECgovKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICog
RGVmaW5lIGBUVF9DT05GSUdfT1BUSU9OX0dYX1ZBUl9TVVBQT1JUYCBpZiB5b3Ugd2FudCB0
byBpbmNsdWRlIHN1cHBvcnQKICogZm9yIEFwcGxlJ3MgZGlzdG9ydGFibGUgZm9udCB0ZWNo
bm9sb2d5ICgnZnZhcicsICdndmFyJywgJ2N2YXInLCBhbmQKICogJ2F2YXInIHRhYmxlcyku
ICBUYWdnZWQgJ0ZvbnQgVmFyaWF0aW9ucycsIHRoaXMgaXMgbm93IHBhcnQgb2YgT3BlblR5
cGUKICogYWxzby4gIFRoaXMgaGFzIG1hbnkgc2ltaWxhcml0aWVzIHRvIFR5cGV+MSBNdWx0
aXBsZSBNYXN0ZXJzIHN1cHBvcnQuCiAqLwojZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fR1hf
VkFSX1NVUFBPUlQKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBEZWZpbmUgYFRUX0NP
TkZJR19PUFRJT05fTk9fQk9SSU5HX0VYUEFOU0lPTmAgaWYgeW91IHdhbnQgdG8gZXhjbHVk
ZQogKiBzdXBwb3J0IGZvciAnYm9yaW5nJyBPcGVuVHlwZSBzcGVjaWZpY2F0aW9uIGV4cGFu
c2lvbnMuCiAqCiAqICAgaHR0cHM6Ly9naXRodWIuY29tL2hhcmZidXp6L2JvcmluZy1leHBh
bnNpb24tc3BlYwogKgogKiBSaWdodCBub3csIHRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJl
IGNvdmVyZWQ6CiAqCiAqICAgLSAnYXZhcicgdmVyc2lvbiAyLjAKICoKICogTW9zdCBsaWtl
bHksIHRoaXMgaXMgYSB0ZW1wb3JhcnkgY29uZmlndXJhdGlvbiBvcHRpb24gdG8gYmUgcmVt
b3ZlZCBpbgogKiB0aGUgbmVhciBmdXR1cmUsIHNpbmNlIGl0IGlzIGFzc3VtZWQgdGhhdCBl
dmVudHVhbGx5IHRob3NlIGZlYXR1cmVzIGFyZQogKiBhZGRlZCB0byB0aGUgT3BlblR5cGUg
c3RhbmRhcmQuCiAqLwovKiAjZGVmaW5lIFRUX0NPTkZJR19PUFRJT05fTk9fQk9SSU5HX0VY
UEFOU0lPTiAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqCiAqIERlZmluZSBgVFRfQ09O
RklHX09QVElPTl9CREZgIGlmIHlvdSB3YW50IHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgYW4K
ICogZW1iZWRkZWQgJ0JERn4nIHRhYmxlIHdpdGhpbiBhbiBTRk5ULWJhc2VkIGAub3RiYCBm
b250IGZpbGUuICBUaGlzIHRhYmxlCiAqIGlzIGFuIGV4dGVuc2lvbiB1c2VkIGJ5IFgxMSB0
byBwcmVzZXJ2ZSBCREYgcHJvcGVydGllcyBhZnRlciBjb252ZXJzaW9uCiAqIHRvIFNGTlQg
Y29udGFpbmVycy4gIFNlZQogKgogKiAgIGh0dHBzOi8vZm9udGZvcmdlLm9yZy9kb2NzL3Rl
Y2hyZWYvbm9uLXN0YW5kYXJkLmh0bWwjbm9uLXN0YW5kYXJkLWJkZgogKgogKiBmb3IgbW9y
ZSBkZXRhaWxzLgogKi8KI2RlZmluZSBUVF9DT05GSUdfT1BUSU9OX0JERgoKLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqCiAqIE9wdGlvbiBgVFRfQ09ORklHX09QVElPTl9NQVhfUlVOTkFC
TEVfT1BDT0RFU2AgY29udHJvbHMgdGhlIG1heGltdW0KICogbnVtYmVyIG9mIGJ5dGVjb2Rl
IGluc3RydWN0aW9ucyBleGVjdXRlZCBmb3IgYSBzaW5nbGUgcnVuIG9mIHRoZQogKiBieXRl
Y29kZSBpbnRlcnByZXRlciwgbmVlZGVkIHRvIHByZXZlbnQgaW5maW5pdGUgbG9vcHMuICBZ
b3UgZG9uJ3Qgd2FudAogKiB0byBjaGFuZ2UgdGhpcyBleGNlcHQgZm9yIHZlcnkgc3BlY2lh
bCBzaXR1YXRpb25zIChlLmcuLCBtYWtpbmcgYQogKiBsaWJyYXJ5IGZ1enplciBzcGVuZCBs
ZXNzIHRpbWUgdG8gaGFuZGxlIGJyb2tlbiBmb250cykuCiAqCiAqIEl0IGlzIG5vdCBleHBl
Y3RlZCB0aGF0IHRoaXMgdmFsdWUgaXMgZXZlciBtb2RpZmllZCBieSBhIGNvbmZpZ3VyaW5n
CiAqIHNjcmlwdDsgaW5zdGVhZCwgaXQgZ2V0cyBzdXJyb3VuZGVkIHdpdGggYCNpZm5kZWYg
Li4uICNlbmRpZmAgc28gdGhhdAogKiB0aGUgdmFsdWUgY2FuIGJlIHNldCBhcyBhIHByZXBy
b2Nlc3NvciBvcHRpb24gb24gdGhlIGNvbXBpbGVyJ3MgY29tbWFuZAogKiBsaW5lLgogKi8K
I2lmbmRlZiBUVF9DT05GSUdfT1BUSU9OX01BWF9SVU5OQUJMRV9PUENPREVTCiNkZWZpbmUg
VFRfQ09ORklHX09QVElPTl9NQVhfUlVOTkFCTEVfT1BDT0RFUyAxMDAwMDAwTAojZW5kaWYK
Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKgogKiBPcHRpb24gYFRUX0NPTkZJR19PUFRJT05f
R1BPU19LRVJOSU5HYCBlbmFibGVzIGEgYmFzaWMgR1BPUyBrZXJuaW5nCiAqIGltcGxlbWVu
dGF0aW9uIChmb3IgVHJ1ZVR5cGUgYW5kIE9wZW5UeXBlIGZvbnRzIG9ubHkpLiAgV2l0aCB0
aGlzCiAqIGRlZmluZWQsIEZyZWVUeXBlIGlzIGFibGUgdG8gZ2V0IGtlcm5pbmcgcGFpciBk
YXRhIGZyb20gdGhlIEdQT1MgJ2tlcm4nCiAqIGZlYXR1cmUgYXMgd2VsbCBhcyBsZWdhY3kg
J2tlcm4nIHRhYmxlczsgd2l0aG91dCB0aGlzIGRlZmluZWQsIEZyZWVUeXBlCiAqIHdpbGwg
b25seSBiZSBhYmxlIHRvIHVzZSBsZWdhY3kgJ2tlcm4nIHRhYmxlcy4KICoKICogTm90ZSB0
aGF0IEZyZWVUeXBlIGRvZXMgbm90IHN1cHBvcnQgbW9yZSBhZHZhbmNlZCBHUE9TIGxheW91
dCBmZWF0dXJlczsKICogZXZlbiB0aGUgJ2tlcm4nIGZlYXR1cmUgaW1wbGVtZW50ZWQgaGVy
ZSBkb2Vzbid0IGhhbmRsZSBtb3JlCiAqIHNvcGhpc3RpY2F0ZWQga2VybmluZyB2YXJpYW50
cy4gIFVzZSBhIGhpZ2hlci1sZXZlbCBsaWJyYXJ5IGxpa2UKICogSGFyZkJ1enogaW5zdGVh
ZCBmb3IgdGhhdC4KICovCi8qICNkZWZpbmUgVFRfQ09ORklHX09QVElPTl9HUE9TX0tFUk5J
TkcgKi8KCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoq
KiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICoqKiovCi8qKioqICAgICAgVCBZIFAgRSAxICAgRCBSIEkgViBFIFIg
ICAgQyBPIE4gRiBJIEcgVSBSIEEgVCBJIE8gTiAgICAgICAqKioqLwovKioqKiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoK
LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqCiAqCiAqIGBUMV9NQVhfRElDVF9ERVBUSGAgaXMgdGhl
IG1heGltdW0gZGVwdGggb2YgbmVzdCBkaWN0aW9uYXJpZXMgYW5kIGFycmF5cwogKiBpbiB0
aGUgVHlwZX4xIHN0cmVhbSAoc2VlIGB0MWxvYWQuY2ApLiAgQSBtaW5pbXVtIG9mfjQgaXMg
cmVxdWlyZWQuCiAqLwojZGVmaW5lIFQxX01BWF9ESUNUX0RFUFRIIDUKCi8qKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKgogKgogKiBgVDFfTUFYX1NVQlJTX0NBTExTYCBkZXRhaWxzIHRoZSBtYXhp
bXVtIG51bWJlciBvZiBuZXN0ZWQgc3ViLXJvdXRpbmUKICogY2FsbHMgZHVyaW5nIGdseXBo
IGxvYWRpbmcuCiAqLwojZGVmaW5lIFQxX01BWF9TVUJSU19DQUxMUyAxNgoKLyoqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqCiAqCiAqIGBUMV9NQVhfQ0hBUlNUUklOR19PUEVSQU5EU2AgaXMgdGhl
IGNoYXJzdHJpbmcgc3RhY2sncyBjYXBhY2l0eS4gIEEKICogbWluaW11bSBvZn4xNiBpcyBy
ZXF1aXJlZC4KICoKICogVGhlIENoaW5lc2UgZm9udCAnTWluZ1RpRUctTWVkaXVtJyAoY292
ZXJpbmcgdGhlIENOUyAxMTY0MyBjaGFyYWN0ZXIKICogc2V0KSBuZWVkcyAyNTYuCiAqLwoj
ZGVmaW5lIFQxX01BWF9DSEFSU1RSSU5HU19PUEVSQU5EUyAyNTYKCi8qKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKgogKgogKiBEZWZpbmUgdGhpcyBjb25maWd1cmF0aW9uIG1hY3JvIGlmIHlvdSB3
YW50IHRvIHByZXZlbnQgdGhlIGNvbXBpbGF0aW9uCiAqIG9mIHRoZSAndDFhZm0nIG1vZHVs
ZSwgd2hpY2ggaXMgaW4gY2hhcmdlIG9mIHJlYWRpbmcgVHlwZX4xIEFGTSBmaWxlcwogKiBp
bnRvIGFuIGV4aXN0aW5nIGZhY2UuICBOb3RlIHRoYXQgaWYgc2V0LCB0aGUgVHlwZX4xIGRy
aXZlciB3aWxsIGJlCiAqIHVuYWJsZSB0byBwcm9kdWNlIGtlcm5pbmcgZGlzdGFuY2VzLgog
Ki8KI3VuZGVmIFQxX0NPTkZJR19PUFRJT05fTk9fQUZNCgovKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioKICoKICogRGVmaW5lIHRoaXMgY29uZmlndXJhdGlvbiBtYWNybyBpZiB5b3Ugd2FudCB0
byBwcmV2ZW50IHRoZSBjb21waWxhdGlvbgogKiBvZiB0aGUgTXVsdGlwbGUgTWFzdGVycyBm
b250IHN1cHBvcnQgaW4gdGhlIFR5cGV+MSBkcml2ZXIuCiAqLwojdW5kZWYgVDFfQ09ORklH
X09QVElPTl9OT19NTV9TVVBQT1JUCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogYFQx
X0NPTkZJR19PUFRJT05fT0xEX0VOR0lORWAgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFk
b2JlIFR5cGV+MQogKiBlbmdpbmUgZ2V0cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYg
ZGVmaW5lZCwgaXQgaXMgcG9zc2libGUgdG8KICogc3dpdGNoIGJldHdlZW4gdGhlIHR3byBl
bmdpbmVzIHVzaW5nIHRoZSBgaGludGluZy1lbmdpbmVgIHByb3BlcnR5IG9mCiAqIHRoZSAn
dHlwZTEnIGRyaXZlciBtb2R1bGUuCiAqLwovKiAjZGVmaW5lIFQxX0NPTkZJR19PUFRJT05f
T0xEX0VOR0lORSAqLwoKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqLwovKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgKioqKi8KLyoqKiogICAgICAgICBDIEYgRiAgIEQgUiBJ
IFYgRSBSICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQgSSBPIE4gICAgICAgICoqKiovCi8qKioq
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLyoqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKiovCgovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogVXNpbmcgYENGRl9DT05GSUdf
T1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfe1gsWX17MSwyLDMsNH1gIGl0IGlzCiAqIHBv
c3NpYmxlIHRvIHNldCB1cCB0aGUgZGVmYXVsdCB2YWx1ZXMgb2YgdGhlIGZvdXIgY29udHJv
bCBwb2ludHMgdGhhdAogKiBkZWZpbmUgdGhlIHN0ZW0gZGFya2VuaW5nIGJlaGF2aW91ciBv
ZiB0aGUgKG5ldykgQ0ZGIGVuZ2luZS4gIEZvciBtb3JlCiAqIGRldGFpbHMgcGxlYXNlIHJl
YWQgdGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIGBkYXJrZW5pbmctcGFyYW1ldGVyc2AKICog
cHJvcGVydHkgKGZpbGUgYGZ0ZHJpdmVyLmhgKSwgd2hpY2ggYWxsb3dzIHRoZSBjb250cm9s
IGF0IHJ1bi10aW1lLgogKgogKiBEbyAqKm5vdCoqIHVuZGVmaW5lIHRoZXNlIG1hY3JvcyEK
ICovCiNkZWZpbmUgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMSA1
MDAKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxIDQw
MAoKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gyIDEw
MDAKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kyIDI3
NQoKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzIDE2
NjcKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kzIDI3
NQoKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0IDIz
MzMKI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0IDAK
Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKgogKiBgQ0ZGX0NPTkZJR19PUFRJT05fT0xEX0VO
R0lORWAgY29udHJvbHMgd2hldGhlciB0aGUgcHJlLUFkb2JlIENGRiBlbmdpbmUKICogZ2V0
cyBjb21waWxlZCBpbnRvIEZyZWVUeXBlLiAgSWYgZGVmaW5lZCwgaXQgaXMgcG9zc2libGUg
dG8gc3dpdGNoCiAqIGJldHdlZW4gdGhlIHR3byBlbmdpbmVzIHVzaW5nIHRoZSBgaGludGlu
Zy1lbmdpbmVgIHByb3BlcnR5IG9mIHRoZSAnY2ZmJwogKiBkcml2ZXIgbW9kdWxlLgogKi8K
LyogI2RlZmluZSBDRkZfQ09ORklHX09QVElPTl9PTERfRU5HSU5FICovCgovKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi8qKioqICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioq
LwovKioqKiAgICAgICAgIFAgQyBGICAgRCBSIEkgViBFIFIgICAgQyBPIE4gRiBJIEcgVSBS
IEEgVCBJIE8gTiAgICAgICAgKioqKi8KLyoqKiogICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKiovCi8qKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KCi8qKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKgogKgogKiBUaGVyZSBhcmUgbWFueSBQQ0YgZm9udHMganVzdCBjYWxsZWQgJ0ZpeGVk
JyB3aGljaCBsb29rIGNvbXBsZXRlbHkKICogZGlmZmVyZW50LCBhbmQgd2hpY2ggaGF2ZSBu
b3RoaW5nIHRvIGRvIHdpdGggZWFjaCBvdGhlci4gIFdoZW4gc2VsZWN0aW5nCiAqICdGaXhl
ZCcgaW4gS0RFIG9yIEdub21lIG9uZSBnZXRzIHJlc3VsdHMgdGhhdCBhcHBlYXIgcmF0aGVy
IHJhbmRvbSwgdGhlCiAqIHN0eWxlIGNoYW5nZXMgb2Z0ZW4gaWYgb25lIGNoYW5nZXMgdGhl
IHNpemUgYW5kIG9uZSBjYW5ub3Qgc2VsZWN0IHNvbWUKICogZm9udHMgYXQgYWxsLiAgVGhp
cyBvcHRpb24gbWFrZXMgdGhlICdwY2YnIG1vZHVsZSBwcmVwZW5kIHRoZSBmb3VuZHJ5CiAq
IG5hbWUgKHBsdXMgYSBzcGFjZSkgdG8gdGhlIGZhbWlseSBuYW1lLgogKgogKiBXZSBhbHNv
IGNoZWNrIHdoZXRoZXIgd2UgaGF2ZSAnd2lkZScgY2hhcmFjdGVyczsgYWxsIHB1dCB0b2dl
dGhlciwgd2UKICogZ2V0IGZhbWlseSBuYW1lcyBsaWtlICdTb255IEZpeGVkJyBvciAnTWlz
YyBGaXhlZCBXaWRlJy4KICoKICogSWYgdGhpcyBvcHRpb24gaXMgYWN0aXZhdGVkLCBpdCBj
YW4gYmUgY29udHJvbGxlZCB3aXRoIHRoZQogKiBgbm8tbG9uZy1mYW1pbHktbmFtZXNgIHBy
b3BlcnR5IG9mIHRoZSAncGNmJyBkcml2ZXIgbW9kdWxlLgogKi8KLyogI2RlZmluZSBQQ0Zf
Q09ORklHX09QVElPTl9MT05HX0ZBTUlMWV9OQU1FUyAqLwoKLyoqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KiovCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqLwovKioqKiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKi8KLyoqKiog
ICAgQSBVIFQgTyBGIEkgVCAgIE0gTyBEIFUgTCBFICAgIEMgTyBOIEYgSSBHIFUgUiBBIFQg
SSBPIE4gICAgICoqKiovCi8qKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqLwovKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKi8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKiovCgovKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoK
ICogQ29tcGlsZSAnYXV0b2ZpdCcgbW9kdWxlIHdpdGggQ0pLIChDaGluZXNlLCBKYXBhbmVz
ZSwgS29yZWFuKSBzY3JpcHQKICogc3VwcG9ydC4KICovCiNkZWZpbmUgQUZfQ09ORklHX09Q
VElPTl9DSksKCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogKgogKiBDb21waWxlICdhdXRvZml0
JyBtb2R1bGUgd2l0aCBmYWxsYmFjayBJbmRpYyBzY3JpcHQgc3VwcG9ydCwgY292ZXJpbmcK
ICogc29tZSBzY3JpcHRzIHRoYXQgdGhlICdsYXRpbicgc3VibW9kdWxlIG9mIHRoZSAnYXV0
b2ZpdCcgbW9kdWxlIGRvZXNuJ3QKICogKHlldCkgaGFuZGxlLiAgQ3VycmVudGx5LCB0aGlz
IG5lZWRzIG9wdGlvbiBgQUZfQ09ORklHX09QVElPTl9DSktgLgogKi8KI2lmZGVmIEFGX0NP
TkZJR19PUFRJT05fQ0pLCiNkZWZpbmUgQUZfQ09ORklHX09QVElPTl9JTkRJQwojZW5kaWYK
Ci8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq
KioqKioqKioqKioqKioqKioqKioqKgogKgogKiBVc2UgVHJ1ZVR5cGUtbGlrZSBzaXplIG1l
dHJpY3MgZm9yICdsaWdodCcgYXV0by1oaW50aW5nLgogKgogKiBJdCBpcyBzdHJvbmdseSBy
ZWNvbW1lbmRlZCB0byBhdm9pZCB0aGlzIG9wdGlvbiwgd2hpY2ggZXhpc3RzIG9ubHkgdG8K
ICogaGVscCBzb21lIGxlZ2FjeSBhcHBsaWNhdGlvbnMgcmV0YWluIGl0cyBhcHBlYXJhbmNl
IGFuZCBiZWhhdmlvdXIgd2l0aAogKiByZXNwZWN0IHRvIGF1dG8taGludGVkIFRydWVUeXBl
IGZvbnRzLgogKgogKiBUaGUgdmVyeSByZWFzb24gdGhpcyBvcHRpb24gZXhpc3RzIGF0IGFs
bCBhcmUgR05VL0xpbnV4IGRpc3RyaWJ1dGlvbnMKICogbGlrZSBGZWRvcmEgdGhhdCBkaWQg
bm90IHVuLXBhdGNoIHRoZSBmb2xsb3dpbmcgY2hhbmdlICh3aGljaCB3YXMKICogcHJlc2Vu
dCBpbiBGcmVlVHlwZSBiZXR3ZWVuIHZlcnNpb25zIDIuNC42IGFuZCAyLjcuMSwgaW5jbHVz
aXZlKS4KICoKICogYGBgCiAqICAgMjAxMS0wNy0xNiAgU3RldmVuIENodSAgPHN0ZXZlbi5m
LmNodUBnbWFpbC5jb20+CiAqCiAqICAgICBbdHJ1ZXR5cGVdIEZpeCBtZXRyaWNzIG9uIHNp
emUgcmVxdWVzdCBmb3Igc2NhbGFibGUgZm9udHMuCiAqIGBgYAogKgogKiBUaGlzIHByb2Js
ZW1hdGljIGNvbW1pdCBpcyBub3cgcmV2ZXJ0ZWQgKG1vcmUgb3IgbGVzcykuCiAqLwovKiAj
ZGVmaW5lIEFGX0NPTkZJR19PUFRJT05fVFRfU0laRV9NRVRSSUNTICovCgovKiAqLwoKLyoK
ICogVGhpcyBtYWNybyBpcyBvYnNvbGV0ZS4gIFN1cHBvcnQgaGFzIGJlZW4gcmVtb3ZlZCBp
biBGcmVlVHlwZSB2ZXJzaW9uCiAqIDIuNS4KICovCi8qICNkZWZpbmUgRlRfQ09ORklHX09Q
VElPTl9PTERfSU5URVJOQUxTICovCgovKgogKiBUaGUgbmV4dCB0d28gbWFjcm9zIGFyZSBk
ZWZpbmVkIGlmIG5hdGl2ZSBUcnVlVHlwZSBoaW50aW5nIGlzCiAqIHJlcXVlc3RlZCBieSB0
aGUgZGVmaW5pdGlvbnMgYWJvdmUuICBEb24ndCBjaGFuZ2UgdGhpcy4KICovCiNpZmRlZiBU
VF9DT05GSUdfT1BUSU9OX0JZVEVDT0RFX0lOVEVSUFJFVEVSCiNkZWZpbmUgVFRfVVNFX0JZ
VEVDT0RFX0lOVEVSUFJFVEVSCiNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX1NVQlBJWEVMX0hJ
TlRJTkcKI2RlZmluZSBUVF9TVVBQT1JUX1NVQlBJWEVMX0hJTlRJTkdfTUlOSU1BTAojZW5k
aWYKI2VuZGlmCgovKgogKiBUaGUgVFRfU1VQUE9SVF9DT0xSVjEgbWFjcm8gaXMgZGVmaW5l
ZCB0byBpbmRpY2F0ZSB0byBjbGllbnRzIHRoYXQgdGhpcwogKiB2ZXJzaW9uIG9mIEZyZWVU
eXBlIGhhcyBzdXBwb3J0IGZvciAnQ09MUicgdjEgQVBJLiAgVGhpcyBkZWZpbml0aW9uIGlz
CiAqIHVzZWZ1bCB0byBGcmVlVHlwZSBjbGllbnRzIHRoYXQgd2FudCB0byBidWlsZCBpbiBz
dXBwb3J0IGZvciAnQ09MUicgdjEKICogZGVwZW5kaW5nIG9uIGEgdGlwLW9mLXRyZWUgY2hl
Y2tvdXQgYmVmb3JlIGl0IGlzIG9mZmljaWFsbHkgcmVsZWFzZWQgaW4KICogRnJlZVR5cGUs
IGFuZCB3aGlsZSB0aGUgZmVhdHVyZSBjYW5ub3QgeWV0IGJlIHRlc3RlZCBhZ2FpbnN0IHVz
aW5nCiAqIHZlcnNpb24gbWFjcm9zLiAgRG9uJ3QgY2hhbmdlIHRoaXMgbWFjcm8uICBUaGlz
IG1heSBiZSByZW1vdmVkIG9uY2UgdGhlCiAqIGZlYXR1cmUgaXMgaW4gYSBGcmVlVHlwZSBy
ZWxlYXNlIHZlcnNpb24gYW5kIHZlcnNpb24gbWFjcm9zIGNhbiBiZSB1c2VkCiAqIHRvIHRl
c3QgZm9yIGF2YWlsYWJpbGl0eS4KICovCiNpZmRlZiBUVF9DT05GSUdfT1BUSU9OX0NPTE9S
X0xBWUVSUwojZGVmaW5lIFRUX1NVUFBPUlRfQ09MUlYxCiNlbmRpZgoKLyoKICogQ2hlY2sg
Q0ZGIGRhcmtlbmluZyBwYXJhbWV0ZXJzLiAgVGhlIGNoZWNrcyBhcmUgdGhlIHNhbWUgYXMg
aW4gZnVuY3Rpb24KICogYGNmZl9wcm9wZXJ0eV9zZXRgIGluIGZpbGUgYGNmZmRyaXZyLmNg
LgogKi8KI2lmIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWDEgPCAw
IHx8ICAgXAogICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9YMiA8
IDAgfHwgICBcCiAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gz
IDwgMCB8fCAgIFwKICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJf
WDQgPCAwIHx8ICAgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBcCiAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1F
VEVSX1kxIDwgMCB8fCAgIFwKICAgIENGRl9DT05GSUdfT1BUSU9OX0RBUktFTklOR19QQVJB
TUVURVJfWTIgPCAwIHx8ICAgXAogICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VOSU5HX1BB
UkFNRVRFUl9ZMyA8IDAgfHwgICBcCiAgICBDRkZfQ09ORklHX09QVElPTl9EQVJLRU5JTkdf
UEFSQU1FVEVSX1k0IDwgMCB8fCAgIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgQ0ZGX0NPTkZJR19PUFRJT05fREFSS0VO
SU5HX1BBUkFNRVRFUl9YMSA+ICAgICAgICBcCiAgICAgICAgQ0ZGX0NPTkZJR19PUFRJT05f
REFSS0VOSU5HX1BBUkFNRVRFUl9YMiB8fCAgIFwKICAgIENGRl9DT05GSUdfT1BUSU9OX0RB
UktFTklOR19QQVJBTUVURVJfWDIgPiAgICAgICAgXAogICAgICAgIENGRl9DT05GSUdfT1BU
SU9OX0RBUktFTklOR19QQVJBTUVURVJfWDMgfHwgICBcCiAgICBDRkZfQ09ORklHX09QVElP
Tl9EQVJLRU5JTkdfUEFSQU1FVEVSX1gzID4gICAgICAgIFwKICAgICAgICBDRkZfQ09ORklH
X09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1g0IHx8ICAgXAogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICBDRkZfQ09ORklH
X09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1kxID4gNTAwIHx8IFwKICAgIENGRl9DT05G
SUdfT1BUSU9OX0RBUktFTklOR19QQVJBTUVURVJfWTIgPiA1MDAgfHwgXAogICAgQ0ZGX0NP
TkZJR19PUFRJT05fREFSS0VOSU5HX1BBUkFNRVRFUl9ZMyA+IDUwMCB8fCBcCiAgICBDRkZf
Q09ORklHX09QVElPTl9EQVJLRU5JTkdfUEFSQU1FVEVSX1k0ID4gNTAwCiNlcnJvciAiSW52
YWxpZCBDRkYgZGFya2VuaW5nIHBhcmFtZXRlcnMhIgojZW5kaWYKCkZUX0VORF9IRUFERVIK
CiNlbmRpZiAvKiBGVE9QVElPTl9IXyAqLwoKLyogRU5EICovCg==

--------------sxJwAoNJGnOEPsIoe98nCfAS--