Q09NTUFORCBOQU1FOiBoYXdxIGxvYWQKClJ1bnMgYSBsb2FkIGpvYiBhcyBkZWZpbmVkIGluIGEgWUFNTCBmb3JtYXR0ZWQgY29udHJvbCBmaWxlLgoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClNZTk9QU0lTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpoYXdxIGxvYWQgLWYgPGNvbnRyb2xfZmlsZT4gWy1sIDxsb2dfZmlsZT5dIApbLWggPGhvc3RuYW1lPl0gWy1wIDxwb3J0Pl0gWy1VIDx1c2VybmFtZT5dIFstZCA8ZGF0YWJhc2U+XSBbLVddIApbLS1ncGZkaXN0X3RpbWVvdXQgPHNlY29uZHM+XSBbWy12IHwgLVZdIHwgWy1xXV0gWy1EXQoKaGF3cSBsb2FkIC0/IAoKaGF3cSBsb2FkIC0tdmVyc2lvbgoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqClBSRVJFUVVJU0lURVMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClRoZSBjbGllbnQgbWFjaGluZSB3aGVyZSBoYXdxIGxvYWQgaXMgZXhlY3V0ZWQgbXVzdCBoYXZlIHRoZSBmb2xsb3dpbmc6CgoqIFB5dGhvbiAyLjYuMiBvciBsYXRlciwgcHlncmVzcWwgKHRoZSBQeXRob24gaW50ZXJmYWNlIHRvIFBvc3RncmVTUUwpLAogIGFuZCBweXlhbWwuIE5vdGUgdGhhdCBQeXRob24gYW5kIHRoZSByZXF1aXJlZCBQeXRob24gbGlicmFyaWVzIGFyZSAKICBpbmNsdWRlZCB3aXRoIHRoZSBIQVdRIHNlcnZlciBpbnN0YWxsYXRpb24sIHNvIGlmIHlvdSBoYXZlIEhBV1EgCiAgaW5zdGFsbGVkIG9uIHRoZSBtYWNoaW5lIHdoZXJlIGhhd3EgbG9hZCBpcyBydW5uaW5nLCB5b3UgZG8gbm90IG5lZWQgCiAgYSBzZXBhcmF0ZSBQeXRob24gaW5zdGFsbGF0aW9uLgogIE5vdGU6IEhBV1EgTG9hZGVycyBmb3IgV2luZG93cyBzdXBwb3J0cyBvbmx5IFB5dGhvbiAyLjUgCiAgKGF2YWlsYWJsZSBmcm9tIHd3dy5weXRob24ub3JnKS4KCiogVGhlIGdwZmRpc3QgcGFyYWxsZWwgZmlsZSBkaXN0cmlidXRpb24gcHJvZ3JhbSBpbnN0YWxsZWQgYW5kIAogIGluIHlvdXIgJFBBVEguIFRoaXMgcHJvZ3JhbSBpcyBsb2NhdGVkIGluICRHUEhPTUUvYmluIG9mIHlvdXIgCiAgSEFXUSBzZXJ2ZXIgaW5zdGFsbGF0aW9uLgoKKiBOZXR3b3JrIGFjY2VzcyB0byBhbmQgZnJvbSBhbGwgaG9zdHMgaW4geW91ciBIQVdRIGFycmF5IAogIChtYXN0ZXIgYW5kIHNlZ21lbnRzKS4KCiogTmV0d29yayBhY2Nlc3MgdG8gYW5kIGZyb20gdGhlIGhvc3RzIHdoZXJlIHRoZSBkYXRhIHRvIGJlIGxvYWRlZAogIHJlc2lkZXMgKEVUTCBzZXJ2ZXJzKS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkRFU0NSSVBUSU9OCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpoYXdxIGxvYWQgaXMgYSBkYXRhIGxvYWRpbmcgdXRpbGl0eSB0aGF0IGFjdHMgYXMgYW4gaW50ZXJmYWNlCnRvIEhBV1GScyBleHRlcm5hbCB0YWJsZSBwYXJhbGxlbCBsb2FkaW5nIGZlYXR1cmUuIFVzaW5nIGEgbG9hZApzcGVjaWZpY2F0aW9uIGRlZmluZWQgaW4gYSBZQU1MIGZvcm1hdHRlZCBjb250cm9sIGZpbGUsIGhhd3EgbG9hZCAKZXhlY3V0ZXMgYSBsb2FkIGJ5IGludm9raW5nIHRoZSBIQVdRIHBhcmFsbGVsIGZpbGUgc2VydmVyIChncGZkaXN0KSwgCmNyZWF0aW5nIGFuIGV4dGVybmFsIHRhYmxlIGRlZmluaXRpb24gYmFzZWQgb24gdGhlIHNvdXJjZSBkYXRhIApkZWZpbmVkLCBhbmQgZXhlY3V0aW5nIGFuIElOU0VSVCwgVVBEQVRFIG9yIE1FUkdFIG9wZXJhdGlvbiB0byAKbG9hZCB0aGUgc291cmNlIGRhdGEgaW50byB0aGUgdGFyZ2V0IHRhYmxlIGluIHRoZSBkYXRhYmFzZS4KCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk9QVElPTlMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCi1mIGNvbnRyb2xfZmlsZQoKIFJlcXVpcmVkLiBBIFlBTUwgZmlsZSB0aGF0IGNvbnRhaW5zIHRoZSBsb2FkIHNwZWNpZmljYXRpb24gZGV0YWlscy4KIFNlZSCTQ29udHJvbCBGaWxlIEZvcm1hdJQgYmVsb3cuCgotLWdwZmRpc3RfdGltZW91dCBzZWNvbmRzCiAgCiAgU2V0cyB0aGUgdGltZW91dCBmb3IgdGhlIGdwZmRpc3QgcGFyYWxsZWwgZmlsZSBkaXN0cmlidXRpb24gcHJvZ3JhbQogIHRvIHNlbmQgYSByZXNwb25zZS4gRW50ZXIgYSB2YWx1ZSBmcm9tIDAgdG8gMzAgc2Vjb25kcyAoZW50ZXJpbmcgkzCUIHRvIGRpc2FibGVzIHRpbWVvdXRzKS4gTm90ZSB0aGF0IHlvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIHRoaXMgdmFsdWUgd2hlbiBvcGVyYXRpbmcgb24gaGlnaC10cmFmZmljIG5ldHdvcmtzLgogCi1sIGxvZ19maWxlCiAKICBTcGVjaWZpZXMgd2hlcmUgdG8gd3JpdGUgdGhlIGxvZyBmaWxlLiBEZWZhdWx0cyB0byAKICB+L2hhd3FBZG1pbkxvZ3MvaGF3cV9sb2FkX1lZWVlNTURELiAKCi12ICh2ZXJib3NlIG1vZGUpIAoKICBTaG93IHZlcmJvc2Ugb3V0cHV0IG9mIHRoZSBsb2FkIHN0ZXBzIGFzIHRoZXkgYXJlIGV4ZWN1dGVkLgoKLVYgKHZlcnkgdmVyYm9zZSBtb2RlKQoKICBTaG93cyB2ZXJ5IHZlcmJvc2Ugb3V0cHV0LgoKLXEgKG5vIHNjcmVlbiBvdXRwdXQpCiAKICBSdW4gaW4gcXVpZXQgbW9kZS4gQ29tbWFuZCBvdXRwdXQgaXMgbm90IGRpc3BsYXllZCBvbiB0aGUgc2NyZWVuLCAKICBidXQgaXMgc3RpbGwgd3JpdHRlbiB0byB0aGUgbG9nIGZpbGUuCgotRCAoZGVidWcgbW9kZSkKIAogIENoZWNrIGZvciBlcnJvciBjb25kaXRpb25zLCBidXQgZG8gbm90IGV4ZWN1dGUgdGhlIGxvYWQuIAoKLT8gKHNob3cgaGVscCkKICBTaG93IGhlbHAsIHRoZW4gZXhpdC4KCi0tdmVyc2lvbgogCiAgU2hvdyB0aGUgdmVyc2lvbiBvZiB0aGlzIHV0aWxpdHksIHRoZW4gZXhpdC4KCgoqKioqKioqKioqKioqKioqKioqKioKQ09OTkVDVElPTiBPUFRJT05TCioqKioqKioqKioqKioqKioqKioqKgoKLWQgZGF0YWJhc2UKCiAgVGhlIGRhdGFiYXNlIHRvIGxvYWQgaW50by4gSWYgbm90IHNwZWNpZmllZCwgcmVhZHMgZnJvbSB0aGUgCiAgbG9hZCBjb250cm9sIGZpbGUsIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkUEdEQVRBQkFTRSBvciAKICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBzeXN0ZW0gdXNlciBuYW1lLiAKCi1oIGhvc3RuYW1lCiAgCiAgU3BlY2lmaWVzIHRoZSBob3N0IG5hbWUgb2YgdGhlIG1hY2hpbmUgb24gd2hpY2ggdGhlIEhBV1EgbWFzdGVyCiAgZGF0YWJhc2Ugc2VydmVyIGlzIHJ1bm5pbmcuIElmIG5vdCBzcGVjaWZpZWQsIHJlYWRzIGZyb20gdGhlIGxvYWQgCiAgY29udHJvbCBmaWxlLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJFBHSE9TVCBvciBkZWZhdWx0cyB0byBsb2NhbGhvc3QuCgotcCBwb3J0CiAgCiAgU3BlY2lmaWVzIHRoZSBUQ1AgcG9ydCBvbiB3aGljaCB0aGUgSEFXUSBtYXN0ZXIgZGF0YWJhc2Ugc2VydmVyIAogIGlzIGxpc3RlbmluZyBmb3IgY29ubmVjdGlvbnMuIElmIG5vdCBzcGVjaWZpZWQsIHJlYWRzIGZyb20gdGhlIGxvYWQgCiAgY29udHJvbCBmaWxlLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJFBHUE9SVCBvciBkZWZhdWx0cyB0byA1NDMyLgoKLVUgdXNlcm5hbWUKCiAgVGhlIGRhdGFiYXNlIHJvbGUgbmFtZSB0byBjb25uZWN0IGFzLiBJZiBub3Qgc3BlY2lmaWVkLCByZWFkcwogIGZyb20gdGhlIGxvYWQgY29udHJvbCBmaWxlLCB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGUgJFBHVVNFUiBvciAKICBkZWZhdWx0cyB0byB0aGUgY3VycmVudCBzeXN0ZW0gdXNlciBuYW1lLgoKLVcgKGZvcmNlIHBhc3N3b3JkIHByb21wdCkKCiAgRm9yY2UgYSBwYXNzd29yZCBwcm9tcHQuIElmIG5vdCBzcGVjaWZpZWQsIHJlYWRzIHRoZSBwYXNzd29yZCAKICBmcm9tIHRoZSBlbnZpcm9ubWVudCB2YXJpYWJsZSAkUEdQQVNTV09SRCBvciBmcm9tIGEgcGFzc3dvcmQgZmlsZSAgCiAgc3BlY2lmaWVkIGJ5ICRQR1BBU1NGSUxFIG9yIGluIH4vLnBncGFzcy4gSWYgdGhlc2UgYXJlIG5vdCBzZXQsIHRoZW4gCiAgaGF3cSBsb2FkIHdpbGwgcHJvbXB0IGZvciBhIHBhc3N3b3JkIGV2ZW4gaWYgLVcgaXMgbm90IHN1cHBsaWVkLgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKQ09OVFJPTCBGSUxFIEZPUk1BVAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKVGhlIGhhd3EgbG9hZCBjb250cm9sIGZpbGUgdXNlcyB0aGUgWUFNTCAxLjEgZG9jdW1lbnQgZm9ybWF0IGFuZCAKdGhlbiBpbXBsZW1lbnRzIGl0cyBvd24gc2NoZW1hIGZvciBkZWZpbmluZyB0aGUgdmFyaW91cyBzdGVwcyAKb2YgYSBIQVdRIGxvYWQgb3BlcmF0aW9uLiBUaGUgY29udHJvbCBmaWxlIG11c3QgYmUgYSB2YWxpZCBZQU1MIGRvY3VtZW50LgpUaGUgaGF3cSBsb2FkIHByb2dyYW0gcHJvY2Vzc2VzIHRoZSBjb250cm9sIGZpbGUgZG9jdW1lbnQgaW4gb3JkZXIgCmFuZCB1c2VzIGluZGVudGF0aW9uIChzcGFjZXMpIHRvIGRldGVybWluZSB0aGUgZG9jdW1lbnQgaGllcmFyY2h5IAphbmQgdGhlIHJlbGF0aW9uc2hpcHMgb2YgdGhlIHNlY3Rpb25zIHRvIG9uZSBhbm90aGVyLiBUaGUgdXNlIG9mIHdoaXRlCnNwYWNlIGlzIHNpZ25pZmljYW50LiBXaGl0ZSBzcGFjZSBzaG91bGQgbm90IGJlIHVzZWQgc2ltcGx5IGZvciBmb3JtYXR0aW5nCnB1cnBvc2VzLCBhbmQgdGFicyBzaG91bGQgbm90IGJlIHVzZWQgYXQgYWxsLgoKVGhlIGJhc2ljIHN0cnVjdHVyZSBvZiBhIGxvYWQgY29udHJvbCBmaWxlIGlzOgotLS0KClZFUlNJT046IDEuMC4wLjEKREFUQUJBU0U6IDxkYl9uYW1lPgpVU0VSOiA8ZGJfdXNlcm5hbWU+CkhPU1Q6IDxtYXN0ZXJfaG9zdG5hbWU+ClBPUlQ6IDxtYXN0ZXJfcG9ydD4KR1BMT0FEOgogICBJTlBVVDoKICAgIC0gU09VUkNFOgogICAgICAgICBMT0NBTF9IT1NUTkFNRToKICAgICAgICAgICAtIDxob3N0bmFtZV9vcl9pcD4KICAgICAgICAgUE9SVDogPGh0dHBfcG9ydD4KICAgICAgIHwgUE9SVF9SQU5HRTogWzxzdGFydF9wb3J0X3JhbmdlPiwgPGVuZF9wb3J0X3JhbmdlPl0KICAgICAgICAgRklMRTogCiAgICAgICAgICAgLSA8L3BhdGgvdG8vaW5wdXRfZmlsZT4KICAgICAgICAgU1NMOiB0cnVlIHwgZmFsc2UKICAgICAgICAgQ0VSVElGSUNBVEVTX1BBVEg6IC9wYXRoL3RvL2NlcnRpZmljYXRlcwogICAgLSBDT0xVTU5TOgogICAgICAgICAgIC0gPGZpZWxkX25hbWU+OiA8ZGF0YV90eXBlPgogICAgLSBUUkFOU0ZPUk06ICd0cmFuc2Zvcm1hdGlvbicKICAgIC0gVFJBTlNGT1JNX0NPTkZJRzogJ2NvbmZpZ3VyYXRpb25fZmlsZV9wYXRoJyB8ICdPRkYnCiAgICAtIE1BWF9MSU5FX0xFTkdUSDogaW50ZWdlcgogICAgLSBGT1JNQVQ6IHRleHQgfCBjc3YKICAgIC0gREVMSU1JVEVSOiAnPGRlbGltaXRlcl9jaGFyYWN0ZXI+JwogICAgLSBFU0NBUEU6ICc8ZXNjYXBlX2NoYXJhY3Rlcj4nIHwgJ09GRicKICAgIC0gTlVMTF9BUzogJzxudWxsX3N0cmluZz4nCiAgICAtIEZPUkNFX05PVF9OVUxMOiB0cnVlIHwgZmFsc2UKICAgIC0gUVVPVEU6ICc8Y3N2X3F1b3RlX2NoYXJhY3Rlcj4nCiAgICAtIEhFQURFUjogdHJ1ZSB8IGZhbHNlCiAgICAtIEVOQ09ESU5HOiA8ZGF0YWJhc2VfZW5jb2Rpbmc+CiAgICAtIEVSUk9SX0xJTUlUOiA8aW50ZWdlcj4KICAgIC0gRVJST1JfVEFCTEU6IDxzY2hlbWE+Ljx0YWJsZV9uYW1lPgogICBPVVRQVVQ6CiAgICAtIFRBQkxFOiA8c2NoZW1hPi48dGFibGVfbmFtZT4KICAgIC0gTU9ERTogaW5zZXJ0IHwgdXBkYXRlIHwgbWVyZ2UKICAgIC0gTUFUQ0hfQ09MVU1OUzoKICAgICAgICAgICAtIDx0YXJnZXRfY29sdW1uX25hbWU+CiAgICAtIFVQREFURV9DT0xVTU5TOgogICAgICAgICAgIC0gPHRhcmdldF9jb2x1bW5fbmFtZT4KICAgIC0gVVBEQVRFX0NPTkRJVElPTjogJzxib29sZWFuX2NvbmRpdGlvbj4nCiAgICAtIE1BUFBJTkc6CiAgICAgICAgICAgICA8dGFyZ2V0X2NvbHVtbl9uYW1lPjogPHNvdXJjZV9jb2x1bW5fbmFtZT4gfCAnPGV4cHJlc3Npb24+JwogICBQUkVMT0FEOgogICAgLSBUUlVOQ0FURTogdHJ1ZSB8IGZhbHNlCiAgICAtIFJFVVNFX1RBQkxFUzogdHJ1ZSB8IGZhbHNlCiAgIFNRTDoKICAgIC0gQkVGT1JFOiAiPHNxbF9jb21tYW5kPiIKICAgIC0gQUZURVI6ICI8c3FsX2NvbW1hbmQ+IgoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCkNPTlRST0wgRklMRSBTQ0hFTUEgRUxFTUVOVCBERVNDUklQVElPTlMKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKClZFUlNJT04gLSBPcHRpb25hbC4gVGhlIHZlcnNpb24gb2YgdGhlIGhhd3EgbG9hZCBjb250cm9sIGZpbGUgc2NoZW1hLiAKICAgICAgICAgIFRoZSBjdXJyZW50IHZlcnNpb24gaXMgMS4wLjAuMS4gCgpEQVRBQkFTRSAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgd2hpY2ggZGF0YWJhc2UgaW4gSEFXUSB0byBjb25uZWN0IHRvLiAKICAgICAgICAgICBJZiBub3Qgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byAkUEdEQVRBQkFTRSBpZiBzZXQgb3IgdGhlIGN1cnJlbnQgCiAgICAgICAgICAgc3lzdGVtIHVzZXIgbmFtZS4gWW91IGNhbiBhbHNvIHNwZWNpZnkgdGhlIGRhdGFiYXNlIG9uIHRoZSBjb21tYW5kCiAgICAgICAgICAgbGluZSB1c2luZyB0aGUgLWQgb3B0aW9uLiAKClVTRVIgLSBPcHRpb25hbC4gU3BlY2lmaWVzIHdoaWNoIGRhdGFiYXNlIHJvbGUgdG8gdXNlIHRvIGNvbm5lY3QuIAogICAgICAgSWYgbm90IHNwZWNpZmllZCwgZGVmYXVsdHMgdG8gdGhlIGN1cnJlbnQgdXNlciBvciAkUEdVU0VSIAogICAgICAgaWYgc2V0LiBZb3UgY2FuIGFsc28gc3BlY2lmeSB0aGUgZGF0YWJhc2Ugcm9sZSBvbiB0aGUgY29tbWFuZCAKICAgICAgIGxpbmUgdXNpbmcgdGhlIC1VIG9wdGlvbi4gSWYgdGhlIHVzZXIgcnVubmluZyBoYXdxIGxvYWQgaXMgbm90IGEgCiAgICAgICBIQVdRIHN1cGVydXNlciwgdGhlbiB0aGUgc2VydmVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIAogICAgICAgJ2dwX2V4dGVybmFsX2dyYW50X3ByaXZpbGVnZXMnIG11c3QgYmUgc2V0IHRvIG9uIGluIG9yZGVyIAogICAgICAgZm9yIHRoZSBsb2FkIHRvIGJlIHByb2Nlc3NlZC4KCkhPU1QgLSBPcHRpb25hbC4gU3BlY2lmaWVzIEhBV1EgbWFzdGVyIGhvc3QgbmFtZS4gSWYgbm90IAogICAgICAgc3BlY2lmaWVkLCBkZWZhdWx0cyB0byBsb2NhbGhvc3Qgb3IgJFBHSE9TVCBpZiBzZXQuIFlvdSBjYW4gCiAgICAgICBhbHNvIHNwZWNpZnkgdGhlIG1hc3RlciBob3N0IG5hbWUgb24gdGhlIGNvbW1hbmQgbGluZSB1c2luZyAKICAgICAgIHRoZSAtaCBvcHRpb24uCgpQT1JUIC0gT3B0aW9uYWwuIFNwZWNpZmllcyBIQVdRIG1hc3RlciBwb3J0LiBJZiBub3Qgc3BlY2lmaWVkLCAKICAgICAgIGRlZmF1bHRzIHRvIDU0MzIgb3IgJFBHUE9SVCBpZiBzZXQuIFlvdSBjYW4gYWxzbyBzcGVjaWZ5IHRoZSAKICAgICAgIG1hc3RlciBwb3J0IG9uIHRoZSBjb21tYW5kIGxpbmUgdXNpbmcgdGhlIC1wIG9wdGlvbi4KCkdQTE9BRCAtIFJlcXVpcmVkLiBCZWdpbnMgdGhlIGxvYWQgc3BlY2lmaWNhdGlvbiBzZWN0aW9uLiBBIEdQTE9BRCAKICAgICAgICAgc3BlY2lmaWNhdGlvbiBtdXN0IGhhdmUgYW4gSU5QVVQgYW5kIGFuIE9VVFBVVCBzZWN0aW9uIAogICAgICAgICBkZWZpbmVkLgoKSU5QVVQgLSBSZXF1aXJlZC4gRGVmaW5lcyB0aGUgbG9jYXRpb24gYW5kIHRoZSBmb3JtYXQgb2YgdGhlIGlucHV0IAogICAgICAgIGRhdGEgdG8gYmUgbG9hZGVkLiBoYXdxIGxvYWQgd2lsbCBzdGFydCBvbmUgb3IgbW9yZSBpbnN0YW5jZXMgb2YgCiAgICAgICAgdGhlIGdwZmRpc3QgZmlsZSBkaXN0cmlidXRpb24gcHJvZ3JhbSBvbiB0aGUgY3VycmVudCBob3N0IGFuZCAKICAgICAgICBjcmVhdGUgdGhlIHJlcXVpcmVkIGV4dGVybmFsIHRhYmxlIGRlZmluaXRpb24ocykgaW4gSEFXUSAKICAgICAgICB0aGF0IHBvaW50IHRvIHRoZSBzb3VyY2UgZGF0YS4gTm90ZSB0aGF0IHRoZSBob3N0IAogICAgICAgIGZyb20gd2hpY2ggeW91IHJ1biBoYXdxIGxvYWQgbXVzdCBiZSBhY2Nlc3NpYmxlIG92ZXIgdGhlIG5ldHdvcmsgCiAgICAgICAgYnkgYWxsIEhBV1EgaG9zdHMgKG1hc3RlciBhbmQgc2VnbWVudHMpLgoKU09VUkNFIC0gUmVxdWlyZWQuIFRoZSBTT1VSQ0UgYmxvY2sgb2YgYW4gSU5QVVQgc3BlY2lmaWNhdGlvbiBkZWZpbmVzIAogICAgICAgICB0aGUgbG9jYXRpb24gb2YgYSBzb3VyY2UgZmlsZS4gQW4gSU5QVVQgc2VjdGlvbiBjYW4gaGF2ZSBtb3JlIAogICAgICAgICB0aGFuIG9uZSBTT1VSQ0UgYmxvY2sgZGVmaW5lZC4gRWFjaCBTT1VSQ0UgYmxvY2sgZGVmaW5lZCAKICAgICAgICAgY29ycmVzcG9uZHMgdG8gb25lIGluc3RhbmNlIG9mIHRoZSBncGZkaXN0IGZpbGUgZGlzdHJpYnV0aW9uIAogICAgICAgICBwcm9ncmFtIHRoYXQgd2lsbCBiZSBzdGFydGVkIG9uIHRoZSBsb2NhbCBtYWNoaW5lLiBFYWNoIAogICAgICAgICBTT1VSQ0UgYmxvY2sgZGVmaW5lZCBtdXN0IGhhdmUgYSBGSUxFIHNwZWNpZmljYXRpb24uCgpMT0NBTF9IT1NUTkFNRSAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIGhvc3QgbmFtZSBvciBJUCBhZGRyZXNzIG9mIAogICAgICAgICAgICAgICAgIHRoZSBsb2NhbCBtYWNoaW5lIG9uIHdoaWNoIGhhd3EgbG9hZCBpcyBydW5uaW5nLiBJZiB0aGlzIAogICAgICAgICAgICAgICAgIG1hY2hpbmUgaXMgY29uZmlndXJlZCB3aXRoIG11bHRpcGxlIG5ldHdvcmsgaW50ZXJmYWNlIAogICAgICAgICAgICAgICAgIGNhcmRzKHMpLCB5b3UgY2FuIHNwZWNpZnkgdGhlIGhvc3QgbmFtZSBvciBJUCBvZiBlYWNoIAogICAgICAgICAgICAgICAgIGluZGl2aWR1YWwgTklDIHRvIGFsbG93IG5ldHdvcmsgdHJhZmZpYyB0byB1c2UgYWxsIAogICAgICAgICAgICAgICAgIE5JQ3Mgc2ltdWx0YW5lb3VzbHkuIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSB0aGUgbG9jYWwgCiAgICAgICAgICAgICAgICAgbWFjaGluZSdzIHByaW1hcnkgaG9zdCBuYW1lIG9yIElQIG9ubHkuIAoKUE9SVCAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIHNwZWNpZmljIHBvcnQgbnVtYmVyIHRoYXQgdGhlIGdwZmRpc3QgCiAgICAgICBmaWxlIGRpc3RyaWJ1dGlvbiBwcm9ncmFtIHNob3VsZCB1c2UuIFlvdSBjYW4gYWxzbyBzdXBwbHkgYSAKICAgICAgIFBPUlRfUkFOR0UgdG8gc2VsZWN0IGFuIGF2YWlsYWJsZSBwb3J0IGZyb20gdGhlIHNwZWNpZmllZCByYW5nZS4gCiAgICAgICBJZiBib3RoIFBPUlQgYW5kIFBPUlRfUkFOR0UgYXJlIGRlZmluZWQsIHRoZW4gUE9SVCB0YWtlcyAKICAgICAgIHByZWNlZGVuY2UuIElmIG5laXRoZXIgUE9SVCBvciBQT1JUX1JBTkdFIGFyZSBkZWZpbmVkLCB0aGUgCiAgICAgICBkZWZhdWx0IGlzIHRvIHNlbGVjdCBhbiBhdmFpbGFibGUgcG9ydCBiZXR3ZWVuIDgwMDAgYW5kIDkwMDAuIAogICAgICAgSWYgbXVsdGlwbGUgaG9zdCBuYW1lcyBhcmUgZGVjbGFyZWQgaW4gTE9DQUxfSE9TVE5BTUUsIHRoaXMgcG9ydCAKICAgICAgIG51bWJlciBpcyB1c2VkIGZvciBhbGwgaG9zdHMuIFRoaXMgY29uZmlndXJhdGlvbiBpcyBkZXNpcmVkIGlmIAogICAgICAgeW91IHdhbnQgdG8gdXNlIGFsbCBOSUNzIHRvIGxvYWQgdGhlIHNhbWUgZmlsZSBvciBzZXQgb2YgZmlsZXMgCiAgICAgICBpbiBhIGdpdmVuIGRpcmVjdG9yeSBsb2NhdGlvbi4KClBPUlRfUkFOR0UgLSBPcHRpb25hbC4gQ2FuIGJlIHVzZWQgaW5zdGVhZCBvZiBQT1JUIHRvIHN1cHBseSBhIHJhbmdlIAogICAgICAgICAgICAgb2YgcG9ydCBudW1iZXJzIGZyb20gd2hpY2ggaGF3cSBsb2FkIGNhbiBjaG9vc2UgYW4gYXZhaWxhYmxlIAogICAgICAgICAgICAgcG9ydCBmb3IgdGhpcyBpbnN0YW5jZSBvZiB0aGUgZ3BmZGlzdCBmaWxlIGRpc3RyaWJ1dGlvbiAKICAgICAgICAgICAgIHByb2dyYW0uCgpGSUxFIC0gUmVxdWlyZWQuIFNwZWNpZmllcyB0aGUgbG9jYXRpb24gb2YgYSBmaWxlLCBuYW1lZCBwaXBlLCBvciAKICAgICAgIGRpcmVjdG9yeSBsb2NhdGlvbiBvbiB0aGUgbG9jYWwgZmlsZSBzeXN0ZW0gdGhhdCBjb250YWlucyBkYXRhIAogICAgICAgdG8gYmUgbG9hZGVkLiBZb3UgY2FuIGRlY2xhcmUgbW9yZSB0aGFuIG9uZSBmaWxlIHNvIGxvbmcgYXMgdGhlIAogICAgICAgZGF0YSBpcyBvZiB0aGUgc2FtZSBmb3JtYXQgaW4gYWxsIGZpbGVzIHNwZWNpZmllZC4gSWYgdGhlIGZpbGVzIAogICAgICAgYXJlIGNvbXByZXNzZWQgdXNpbmcgZ3ppcCBvciBiemlwMiAoaGF2ZSBhIC5neiBvciAuYnoyIGZpbGUgCiAgICAgICBleHRlbnNpb24pLCB0aGUgZmlsZXMgd2lsbCBiZSB1bmNvbXByZXNzZWQgYXV0b21hdGljYWxseSAKICAgICAgIChwcm92aWRlZCB0aGF0IGd1bnppcCBvciBidW56aXAyIGlzIGluIHlvdXIgcGF0aCkuIFdoZW4gCiAgICAgICBzcGVjaWZ5aW5nIHdoaWNoIHNvdXJjZSBmaWxlcyB0byBsb2FkLCB5b3UgY2FuIHVzZSB0aGUgd2lsZGNhcmQgCiAgICAgICBjaGFyYWN0ZXIgKCopIG9yIG90aGVyIEMtc3R5bGUgcGF0dGVybiBtYXRjaGluZyB0byBkZW5vdGUgCiAgICAgICBtdWx0aXBsZSBmaWxlcy4gVGhlIGZpbGVzIHNwZWNpZmllZCBhcmUgYXNzdW1lZCB0byBiZSByZWxhdGl2ZSAKICAgICAgIHRvIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBmcm9tIHdoaWNoIGhhd3EgbG9hZCBpcyBleGVjdXRlZCAob3IgeW91IAogICAgICAgY2FuIGRlY2xhcmUgYW4gYWJzb2x1dGUgcGF0aCkuCgpTU0wgLSBPcHRpb25hbC4gU3BlY2lmaWVzIHVzYWdlIG9mIFNTTCBlbmNyeXB0aW9uLgoKQ0VSVElGSUNBVEVTX1BBVEggLSBSZXF1aXJlZCB3aGVuIFNTTCBpcyB0cnVlOyBjYW5ub3QgYmUgc3BlY2lmaWVkIHdoZW4gCiAgICAgICAgICAgICAgICAgICAgU1NMIGlzIGZhbHNlIG9yIHVuc3BlY2lmaWVkLiBUaGUgbG9jYXRpb24gc3BlY2lmaWVkIAogICAgICAgICAgICAgICAgICAgIGluIENFUlRJRklDQVRFU19QQVRIIG11c3QgY29udGFpbiB0aGUgZm9sbG93aW5nIAogICAgICAgICAgICAgICAgICAgIGZpbGVzOgoKICAgICAgICAgICAgICAgICAgICAtIFRoZSBzZXJ2ZXIgY2VydGlmaWNhdGUgZmlsZSwgc2VydmVyLmNydAogICAgICAgICAgICAgICAgICAgIC0gVGhlIHNlcnZlciBwcml2YXRlIGtleSBmaWxlLCBzZXJ2ZXIua2V5CiAgICAgICAgICAgICAgICAgICAgLSBUaGUgdHJ1c3RlZCBjZXJ0aWZpY2F0ZSBhdXRob3JpdGllcywgcm9vdC5jcnQKCiAgICAgICAgICAgICAgICAgICAgVGhlIHJvb3QgZGlyZWN0b3J5ICgvKSBjYW5ub3QgYmUgc3BlY2lmaWVkIAogICAgICAgICAgICAgICAgICAgIGFzIENFUlRJRklDQVRFU19QQVRILgoKQ09MVU1OUyAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIHNjaGVtYSBvZiB0aGUgc291cmNlIGRhdGEgZmlsZShzKSAKICAgICAgICAgIGluIHRoZSBmb3JtYXQgb2YgPGZpZWxkX25hbWU+OiA8ZGF0YV90eXBlPi4gVGhlIERFTElNSVRFUiAKICAgICAgICAgIGNoYXJhY3RlciBpbiB0aGUgc291cmNlIGZpbGUgaXMgd2hhdCBzZXBhcmF0ZXMgdHdvIGRhdGEgdmFsdWUgCiAgICAgICAgICBmaWVsZHMgKGNvbHVtbnMpLiBBIHJvdyBpcyBkZXRlcm1pbmVkIGJ5IGEgbGluZSBmZWVkIGNoYXJhY3RlciAKICAgICAgICAgICgweDBhKS4gSWYgdGhlIGlucHV0IENPTFVNTlMgYXJlIG5vdCBzcGVjaWZpZWQsIHRoZW4gdGhlIAogICAgICAgICAgc2NoZW1hIG9mIHRoZSBvdXRwdXQgVEFCTEUgaXMgaW1wbGllZCwgbWVhbmluZyB0aGF0IHRoZSBzb3VyY2UgCiAgICAgICAgICBkYXRhIG11c3QgaGF2ZSB0aGUgc2FtZSBjb2x1bW4gb3JkZXIsIG51bWJlciBvZiBjb2x1bW5zLCBhbmQgCiAgICAgICAgICBkYXRhIGZvcm1hdCBhcyB0aGUgdGFyZ2V0IHRhYmxlLiBUaGUgZGVmYXVsdCBzb3VyY2UtdG8tdGFyZ2V0IAogICAgICAgICAgbWFwcGluZyBpcyBiYXNlZCBvbiBhIG1hdGNoIG9mIGNvbHVtbiBuYW1lcyBhcyBkZWZpbmVkIGluIHRoaXMgCiAgICAgICAgICBzZWN0aW9uIGFuZCB0aGUgY29sdW1uIG5hbWVzIGluIHRoZSB0YXJnZXQgVEFCTEUuIFRoaXMgZGVmYXVsdCAKICAgICAgICAgIG1hcHBpbmcgY2FuIGJlIG92ZXJyaWRkZW4gdXNpbmcgdGhlIE1BUFBJTkcgc2VjdGlvbi4KClRSQU5TRk9STSAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgdGhlIG5hbWUgb2YgdGhlIGlucHV0IFhNTCB0cmFuc2Zvcm1hdGlvbiAKICAgICAgICAgICAgcGFzc2VkIHRvIGhhd3EgbG9hZC4KClRSQU5TRk9STV9DT05GSUcgLSBPcHRpb25hbC4gU3BlY2lmaWVzIHRoZSBsb2NhdGlvbiBvZiB0aGUgWE1MIHRyYW5zZm9ybWF0aW9uCiAgICAgICAgICAgICAgICAgICBjb25maWd1cmF0aW9uIGZpbGUgdGhhdCBpcyBzcGVjaWZpZWQgaW4gdGhlIFRSQU5TRk9STSAKICAgICAgICAgICAgICAgICAgIHBhcmFtZXRlciwgYWJvdmUuCgpNQVhfTElORV9MRU5HVEggLSBPcHRpb25hbC4gQW4gaW50ZWdlciB0aGF0IHNwZWNpZmllcyB0aGUgbWF4aW11bSBsZW5ndGgKICAgICAgICAgICAgICAgICAgb2YgYSBsaW5lIGluIHRoZSBYTUwgdHJhbnNmb3JtYXRpb24gZGF0YSBwYXNzZWQgdG8gaGF3cSBsb2FkLgoKRk9STUFUIC0gT3B0aW9uYWwuIFNwZWNpZmllcyB0aGUgZm9ybWF0IG9mIHRoZSBzb3VyY2UgZGF0YSBmaWxlKHMpOyAKICAgICAgICAgZWl0aGVyIHBsYWluIHRleHQgKFRFWFQpIG9yIGNvbW1hIHNlcGFyYXRlZCB2YWx1ZXMgKENTVikgZm9ybWF0LiAKICAgICAgICAgRGVmYXVsdHMgdG8gVEVYVCBpZiBub3Qgc3BlY2lmaWVkLgoKREVMSU1JVEVSIC0gT3B0aW9uYWwuIFNwZWNpZmllcyBhIHNpbmdsZSBBU0NJSSBjaGFyYWN0ZXIgdGhhdCBzZXBhcmF0ZXMKICAgICAgICAgICAgY29sdW1ucyB3aXRoaW4gZWFjaCByb3cgKGxpbmUpIG9mIGRhdGEuIFRoZSBkZWZhdWx0IGlzIGEgdGFiIAogICAgICAgICAgICBjaGFyYWN0ZXIgaW4gVEVYVCBtb2RlLCBhIGNvbW1hIGluIENTViBtb2RlLiBZb3UgY2FuIGFsc28gCiAgICAgICAgICAgIHNwZWNpZnkgYSBub24tcHJpbnRhYmxlIEFTQ0lJIGNoYXJhY3RlciB2aWEgYW4gZXNjYXBlIHNlcXVlbmNlXAogICAgICAgICAgICB1c2luZyB0aGUgZGVjaW1hbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgQVNDSUkgY2hhcmFjdGVyLiAKICAgICAgICAgICAgRm9yIGV4YW1wbGUsIFwwMTQgcmVwcmVzZW50cyB0aGUgc2hpZnQgb3V0IGNoYXJhY3Rlci4uCgpFU0NBUEUgLSBPcHRpb25hbC4gU3BlY2lmaWVzIHRoZSBzaW5nbGUgY2hhcmFjdGVyIHRoYXQgaXMgdXNlZCBmb3IgQyAKICAgICAgICAgZXNjYXBlIHNlcXVlbmNlcyAoc3VjaCBhcyBcbixcdCxcMTAwLCBhbmQgc28gb24pIGFuZCBmb3IgCiAgICAgICAgIGVzY2FwaW5nIGRhdGEgY2hhcmFjdGVycyB0aGF0IG1pZ2h0IG90aGVyd2lzZSBiZSB0YWtlbiBhcyByb3cKICAgICAgICAgb3IgY29sdW1uIGRlbGltaXRlcnMuIE1ha2Ugc3VyZSB0byBjaG9vc2UgYW4gZXNjYXBlIGNoYXJhY3RlciAKICAgICAgICAgdGhhdCBpcyBub3QgdXNlZCBhbnl3aGVyZSBpbiB5b3VyIGFjdHVhbCBjb2x1bW4gZGF0YS4gVGhlIAogICAgICAgICBkZWZhdWx0IGVzY2FwZSBjaGFyYWN0ZXIgaXMgYSBcIChiYWNrc2xhc2gpIGZvciB0ZXh0LWZvcm1hdHRlZCAKICAgICAgICAgZmlsZXMgYXJlIGEgIihkb3VibGUgcXVvdGUgZm9yIGNzdi1mb3JtYXR0ZWQgZmlsZXMpLCBob3dldmVyIGl0IAogICAgICAgICBpcyBwb3NzaWJsZSB0byB1c2UgYW5vdGhlciBjaGFyYWN0ZXIgdG8gcmVwcmVzZW50IGFuIGVzY2FwZS4gSXQgCiAgICAgICAgIGlzIGFsc28gcG9zc2libGUgdG8gZGlzYWJsZSBlc2NhcGluZyBieSBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSAKICAgICAgICAgJ09GRicgYXMgdGhlIGVzY2FwZSB2YWx1ZS4gVGhpcyBpcyB2ZXJ5IHVzZWZ1bCBmb3IgZGF0YSBzdWNoIGFzIAogICAgICAgICB0ZXh0LWZvcm1hdHRlZCB3ZWIgbG9nIGRhdGEgdGhhdCBoYXMgbWFueSBlbWJlZGRlZCBiYWNrc2xhc2hlcyAKICAgICAgICAgdGhhdCBhcmUgbm90IGludGVuZGVkIHRvIGJlIGVzY2FwZXMuCgpOVUxMX0FTIC0gT3B0aW9uYWwuIFNwZWNpZmllcyB0aGUgc3RyaW5nIHRoYXQgcmVwcmVzZW50cyBhIG51bGwgdmFsdWUuIAogICAgICAgICAgVGhlIGRlZmF1bHQgaXMgXE4gKGJhY2tzbGFzaC1OKSBpbiBURVhUIG1vZGUsIGFuZCBhbiBlbXB0eSB2YWx1ZSAKICAgICAgICAgIHdpdGggbm8gcXVvdGF0aW9ucyBpbiBDU1YgbW9kZS4gWW91IG1pZ2h0IHByZWZlciBhbiBlbXB0eSBzdHJpbmcgCiAgICAgICAgICBldmVuIGluIFRFWFQgbW9kZSBmb3IgY2FzZXMgd2hlcmUgeW91IGRvIG5vdCB3YW50IHRvIGRpc3Rpbmd1aXNoIAogICAgICAgICAgbnVsbHMgZnJvbSBlbXB0eSBzdHJpbmdzLiBBbnkgc291cmNlIGRhdGEgaXRlbSB0aGF0IG1hdGNoZXMgdGhpcyAKICAgICAgICAgIHN0cmluZyB3aWxsIGJlIGNvbnNpZGVyZWQgYSBudWxsIHZhbHVlLgoKRk9SQ0VfTk9UX05VTEwgLSBPcHRpb25hbC4gSW4gQ1NWIG1vZGUsIHByb2Nlc3NlcyBlYWNoIHNwZWNpZmllZCBjb2x1bW4gYXMgCiAgICAgICAgICAgICAgICAgdGhvdWdoIGl0IHdlcmUgcXVvdGVkIGFuZCBoZW5jZSBub3QgYSBOVUxMIHZhbHVlLiBGb3IgdGhlIAogICAgICAgICAgICAgICAgIGRlZmF1bHQgbnVsbCBzdHJpbmcgaW4gQ1NWIG1vZGUgKG5vdGhpbmcgYmV0d2VlbiB0d28gCiAgICAgICAgICAgICAgICAgZGVsaW1pdGVycyksIHRoaXMgY2F1c2VzIG1pc3NpbmcgdmFsdWVzIHRvIGJlIGV2YWx1YXRlZCAKICAgICAgICAgICAgICAgICBhcyB6ZXJvLWxlbmd0aCBzdHJpbmdzLgoKUVVPVEUgLSBSZXF1aXJlZCB3aGVuIEZPUk1BVCBpcyBDU1YuIFNwZWNpZmllcyB0aGUgcXVvdGF0aW9uIGNoYXJhY3RlciAKICAgICAgICBmb3IgQ1NWIG1vZGUuIFRoZSBkZWZhdWx0IGlzIGRvdWJsZS1xdW90ZSAoIikuCgpIRUFERVIgLSBPcHRpb25hbC4gU3BlY2lmaWVzIHRoYXQgdGhlIGZpcnN0IGxpbmUgaW4gdGhlIGRhdGEgZmlsZShzKSBpcyAKICAgICAgICAgYSBoZWFkZXIgcm93IChjb250YWlucyB0aGUgbmFtZXMgb2YgdGhlIGNvbHVtbnMpIGFuZCBzaG91bGQgbm90IAogICAgICAgICBiZSBpbmNsdWRlZCBhcyBkYXRhIHRvIGJlIGxvYWRlZC4gSWYgdXNpbmcgbXVsdGlwbGUgZGF0YSBzb3VyY2UgCiAgICAgICAgIGZpbGVzLCBhbGwgZmlsZXMgbXVzdCBoYXZlIGEgaGVhZGVyIHJvdy4gVGhlIGRlZmF1bHQgaXMgdG8gYXNzdW1lIAogICAgICAgICB0aGF0IHRoZSBpbnB1dCBmaWxlcyBkbyBub3QgaGF2ZSBhIGhlYWRlciByb3cuCgpFTkNPRElORyAtIE9wdGlvbmFsLiBDaGFyYWN0ZXIgc2V0IGVuY29kaW5nIG9mIHRoZSBzb3VyY2UgZGF0YS4gCiAgICAgICAgICAgU3BlY2lmeSBhIHN0cmluZyBjb25zdGFudCAoc3VjaCBhcyAnU1FMX0FTQ0lJJyksIGFuIAogICAgICAgICAgIGludGVnZXIgZW5jb2RpbmcgbnVtYmVyLCBvciAnREVGQVVMVCcgdG8gdXNlIHRoZSBkZWZhdWx0IAogICAgICAgICAgIGNsaWVudCBlbmNvZGluZy4gCgpFUlJPUl9MSU1JVCAtIE9wdGlvbmFsLiBFbmFibGVzIHNpbmdsZSByb3cgZXJyb3IgaXNvbGF0aW9uIG1vZGUgZm9yIAogICAgICAgICAgICAgIHRoaXMgbG9hZCBvcGVyYXRpb24uIFdoZW4gZW5hYmxlZCwgaW5wdXQgcm93cyB0aGF0IGhhdmUgCiAgICAgICAgICAgICAgZm9ybWF0IGVycm9ycyB3aWxsIGJlIGRpc2NhcmRlZCBwcm92aWRlZCB0aGF0IHRoZSBlcnJvciAKICAgICAgICAgICAgICBsaW1pdCBjb3VudCBpcyBub3QgcmVhY2hlZCBvbiBhbnkgSEFXUSBzZWdtZW50IGluc3RhbmNlIAogICAgICAgICAgICAgIGR1cmluZyBpbnB1dCBwcm9jZXNzaW5nLiBJZiB0aGUgZXJyb3IgbGltaXQgaXMgbm90IHJlYWNoZWQsIAogICAgICAgICAgICAgIGFsbCBnb29kIHJvd3Mgd2lsbCBiZSBsb2FkZWQgYW5kIGFueSBlcnJvciByb3dzIHdpbGwgZWl0aGVyIAogICAgICAgICAgICAgIGJlIGRpc2NhcmRlZCBvciBsb2dnZWQgdG8gdGhlIHRhYmxlIHNwZWNpZmllZCBpbiBFUlJPUl9UQUJMRS4gCiAgICAgICAgICAgICAgVGhlIGRlZmF1bHQgaXMgdG8gYWJvcnQgdGhlIGxvYWQgb3BlcmF0aW9uIG9uIHRoZSBmaXJzdCBlcnJvciAKICAgICAgICAgICAgICBlbmNvdW50ZXJlZC4gTm90ZSB0aGF0IHNpbmdsZSByb3cgZXJyb3IgaXNvbGF0aW9uIG9ubHkgCiAgICAgICAgICAgICAgYXBwbGllcyB0byBkYXRhIHJvd3Mgd2l0aCBmb3JtYXQgZXJyb3JzOyBmb3IgZXhhbXBsZSwgZXh0cmEgCiAgICAgICAgICAgICAgb3IgbWlzc2luZyBhdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzIG9mIGEgd3JvbmcgZGF0YSB0eXBlLCBvciAKICAgICAgICAgICAgICBpbnZhbGlkIGNsaWVudCBlbmNvZGluZyBzZXF1ZW5jZXMuIENvbnN0cmFpbnQgZXJyb3JzLCBzdWNoIAogICAgICAgICAgICAgIGFzIHByaW1hcnkga2V5IHZpb2xhdGlvbnMsIHdpbGwgc3RpbGwgY2F1c2UgdGhlIGxvYWQgCiAgICAgICAgICAgICAgb3BlcmF0aW9uIHRvIGFib3J0IGlmIGVuY291bnRlcmVkLgoKRVJST1JfVEFCTEUgLSBPcHRpb25hbCB3aGVuIEVSUk9SX0xJTUlUIGlzIGRlY2xhcmVkLiBTcGVjaWZpZXMgYW4gZXJyb3IgCiAgICAgICAgICAgICAgdGFibGUgd2hlcmUgcm93cyB3aXRoIGZvcm1hdHRpbmcgZXJyb3JzIHdpbGwgYmUgbG9nZ2VkIHdoZW4gCiAgICAgICAgICAgICAgcnVubmluZyBpbiBzaW5nbGUgcm93IGVycm9yIGlzb2xhdGlvbiBtb2RlLiBZb3UgY2FuIHRoZW4gCiAgICAgICAgICAgICAgZXhhbWluZSB0aGlzIGVycm9yIHRhYmxlIHRvIHNlZSBlcnJvciByb3dzIHRoYXQgd2VyZSBub3QgCiAgICAgICAgICAgICAgbG9hZGVkIChpZiBhbnkpLiBJZiB0aGUgZXJyb3JfdGFibGUgc3BlY2lmaWVkIGFscmVhZHkgZXhpc3RzLCAKICAgICAgICAgICAgICBpdCB3aWxsIGJlIHVzZWQuIElmIGl0IGRvZXMgbm90IGV4aXN0LCBpdCB3aWxsIGJlIAogICAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkLgoKT1VUUFVUIC0gUmVxdWlyZWQuIERlZmluZXMgdGhlIHRhcmdldCB0YWJsZSBhbmQgZmluYWwgZGF0YSBjb2x1bW4gdmFsdWVzIAogICAgICAgICB0aGF0IGFyZSB0byBiZSBsb2FkZWQgaW50byB0aGUgZGF0YWJhc2UuCgpUQUJMRSAtIFJlcXVpcmVkLiBUaGUgbmFtZSBvZiB0aGUgdGFyZ2V0IHRhYmxlIHRvIGxvYWQgaW50by4KCk1PREUgLSBPcHRpb25hbC4gRGVmYXVsdHMgdG8gSU5TRVJUIGlmIG5vdCBzcGVjaWZpZWQuIFRoZXJlIGFyZSB0aHJlZSAKICAgICAgIGF2YWlsYWJsZSBsb2FkIG1vZGVzOgoKICAgICAgICogSU5TRVJUIC0gTG9hZHMgZGF0YSBpbnRvIHRoZSB0YXJnZXQgdGFibGUgdXNpbmcgdGhlIGZvbGxvd2luZyAKICAgICAgICAgICAgbWV0aG9kOiBJTlNFUlQgSU5UTyA8dGFyZ2V0X3RhYmxlPiBTRUxFQ1QgKiBGUk9NIDxpbnB1dF9kYXRhPjsKCiAgICAgICAqIFVQREFURSAtIFVwZGF0ZXMgdGhlIFVQREFURV9DT0xVTU5TIG9mIHRoZSB0YXJnZXQgdGFibGUgd2hlcmUgCiAgICAgICAgICAgdGhlIHJvd3MgaGF2ZSBNQVRDSF9DT0xVTU5TIGF0dHJpYnV0ZSB2YWx1ZXMgZXF1YWwgdG8gdGhvc2UgCiAgICAgICAgICAgb2YgdGhlIGlucHV0IGRhdGEsIGFuZCB0aGUgb3B0aW9uYWwgVVBEQVRFX0NPTkRJVElPTiBpcyB0cnVlLgoKICAgICAgICogTUVSR0UgLSBJbnNlcnRzIG5ldyByb3dzIGFuZCB1cGRhdGVzIHRoZSBVUERBVEVfQ09MVU1OUyBvZiAKICAgICAgICAgICBleGlzdGluZyByb3dzIHdoZXJlIE1BVENIX0NPTFVNTlMgYXR0cmlidXRlIHZhbHVlcyBhcmUgZXF1YWwKICAgICAgICAgICB0byB0aG9zZSBvZiB0aGUgaW5wdXQgZGF0YSwgYW5kIHRoZSBvcHRpb25hbCBVUERBVEVfQ09ORElUSU9OCiAgICAgICAgICAgaXMgdHJ1ZS4gTmV3IHJvd3MgYXJlIGlkZW50aWZpZWQgd2hlbiB0aGUgTUFUQ0hfQ09MVU1OUyB2YWx1ZSAKICAgICAgICAgICBpbiB0aGUgc291cmNlIGRhdGEgZG9lcyBub3QgaGF2ZSBhIGNvcnJlc3BvbmRpbmcgdmFsdWUgaW4gdGhlCiAgICAgICAgICAgZXhpc3RpbmcgZGF0YSBvZiB0aGUgdGFyZ2V0IHRhYmxlLiBJbiB0aG9zZSBjYXNlcywgdGhlIGVudGlyZSAKICAgICAgICAgICByb3cgZnJvbSB0aGUgc291cmNlIGZpbGUgaXMgaW5zZXJ0ZWQsIG5vdCBvbmx5IHRoZSBNQVRDSCBhbmQgCiAgICAgICAgICAgVVBEQVRFIGNvbHVtbnMuIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBuZXcgTUFUQ0hfQ09MVU1OUyB2YWx1ZXMgCiAgICAgICAgICAgdGhhdCBhcmUgdGhlIHNhbWUsIG9ubHkgb25lIG5ldyByb3cgZm9yIHRoYXQgdmFsdWUgd2lsbCBiZSAKICAgICAgICAgICBpbnNlcnRlZCAodXNlIFVQREFURV9DT05ESVRJT04gdG8gZmlsdGVyIG91dCB0aGUgcm93cyB5b3Ugd2FudCAKICAgICAgICAgICB0byBkaXNjYXJkKS4gCgpNQVRDSF9DT0xVTU5TIC0gUmVxdWlyZWQgaWYgTU9ERSBpcyBVUERBVEUgb3IgTUVSR0UuIFNwZWNpZmllcyB0aGUgCiAgICAgICAgICAgICAgICBjb2x1bW4ocykgdG8gdXNlIGFzIHRoZSBqb2luIGNvbmRpdGlvbiBmb3IgdGhlIHVwZGF0ZS4KICAgICAgICAgICAgICAgIFRoZSBhdHRyaWJ1dGUgdmFsdWUgaW4gdGhlIHNwZWNpZmllZCB0YXJnZXQgY29sdW1uKHMpCiAgICAgICAgICAgICAgICBtdXN0IGJlIGVxdWFsIHRvIHRoYXQgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGRhdGEKICAgICAgICAgICAgICAgIGNvbHVtbihzKSBpbiBvcmRlciBmb3IgdGhlIHJvdyB0byBiZSB1cGRhdGVkIGluIHRoZQogICAgICAgICAgICAgICAgdGFyZ2V0IHRhYmxlLgoKVVBEQVRFX0NPTFVNTlMgLSBSZXF1aXJlZCBpZiBNT0RFIGlzIFVQREFURSBvciBNRVJHRS4gU3BlY2lmaWVzIAogICAgICAgICAgICAgICAgIHRoZSBjb2x1bW4ocykgdG8gdXBkYXRlIGZvciB0aGUgcm93cyB0aGF0IG1lZXQgdGhlIAogICAgICAgICAgICAgICAgIE1BVENIX0NPTFVNTlMgY3JpdGVyaWEgYW5kIHRoZSBvcHRpb25hbCBVUERBVEVfQ09ORElUSU9OLgoKVVBEQVRFX0NPTkRJVElPTiAtIE9wdGlvbmFsLiBTcGVjaWZpZXMgYSBCb29sZWFuIGNvbmRpdGlvbiAoc2ltaWxhciB0byAKICAgICAgICAgICAgICAgICAgIHdoYXQgeW91IHdvdWxkIGRlY2xhcmUgaW4gYSBXSEVSRSBjbGF1c2UpIHRoYXQgbXVzdCAKICAgICAgICAgICAgICAgICAgIGJlIG1ldCBpbiBvcmRlciBmb3IgYSByb3cgaW4gdGhlIHRhcmdldCB0YWJsZSB0byBiZSAKICAgICAgICAgICAgICAgICAgIHVwZGF0ZWQgKG9yIGluc2VydGVkIGluIHRoZSBjYXNlIG9mIGEgTUVSR0UpLgoKTUFQUElORyAtIE9wdGlvbmFsLiBJZiBhIG1hcHBpbmcgaXMgc3BlY2lmaWVkLCBpdCBvdmVycmlkZXMgdGhlIGRlZmF1bHQgCiAgICAgICAgICBzb3VyY2UtdG8tdGFyZ2V0IGNvbHVtbiBtYXBwaW5nLiBUaGUgZGVmYXVsdCBzb3VyY2UtdG8tdGFyZ2V0IAogICAgICAgICAgbWFwcGluZyBpcyBiYXNlZCBvbiBhIG1hdGNoIG9mIGNvbHVtbiBuYW1lcyBhcyBkZWZpbmVkIGluIHRoZSAKICAgICAgICAgIHNvdXJjZSBDT0xVTU5TIHNlY3Rpb24gYW5kIHRoZSBjb2x1bW4gbmFtZXMgb2YgdGhlIHRhcmdldCAKICAgICAgICAgIFRBQkxFLiAKICAgICAgICAgIEEgbWFwcGluZyBpcyBzcGVjaWZpZWQgYXMgZWl0aGVyOgogICAgICAgICAgICB0YXJnZXRfY29sdW1uX25hbWU6IHNvdXJjZV9jb2x1bW5fbmFtZQogICAgICAgICAgIG9yCiAgICAgICAgICAgIHRhcmdldF9jb2x1bW5fbmFtZTogJ2V4cHJlc3Npb24nCiAgICAgICAgICBXaGVyZSBleHByZXNzaW9uIGlzIGFueSBleHByZXNzaW9uIHRoYXQgeW91IHdvdWxkIHNwZWNpZnkgaW4gCiAgICAgICAgICB0aGUgU0VMRUNUIGxpc3Qgb2YgYSBxdWVyeSwgc3VjaCBhcyBhIGNvbnN0YW50IHZhbHVlLCBhIGNvbHVtbiAKICAgICAgICAgIHJlZmVyZW5jZSwgYW4gb3BlcmF0b3IgaW52b2NhdGlvbiwgYSBmdW5jdGlvbiBjYWxsLCBhbmQgc28gb24uCgpQUkVMT0FEIC0gT3B0aW9uYWwuIFNwZWNpZmllcyBvcGVyYXRpb25zIHRvIHJ1biBwcmlvciB0byB0aGUgbG9hZCBvcGVyYXRpb24uCiAgICAgICAgICBSaWdodCBub3cgdGhlIG9ubHkgcHJlbG9hZCBvcGVyYXRpb24gaXMgVFJVTkNBVEUuCgpUUlVOQ0FURSAtIE9wdGlvbmFsLiBJZiBzZXQgdG8gdHJ1ZSwgaGF3cSBsb2FkIHdpbGwgcmVtb3ZlIGFsbCByb3dzIGluIHRoZSAKICAgICAgICAgICB0YXJnZXQgdGFibGUgcHJpb3IgdG8gbG9hZGluZyBpdC4KClJFVVNFX1RBQkxFUyAtIE9wdGlvbmFsLiBJZiBzZXQgdG8gdHJ1ZSwgaGF3cSBsb2FkIHdpbGwgbm90IGRyb3AgdGhlIGV4dGVybmFsIAogICAgICAgICAgICAgICB0YWJsZSBvYmplY3RzIGFuZCBzdGFnaW5nIHRhYmxlIG9iamVjdHMgaXQgY3JlYXRlcy4gVGhlc2UgCiAgICAgICAgICAgICAgIG9iamVjdHMgd2lsbCBiZSByZXVzZWQgZm9yIGZ1dHVyZSBsb2FkIG9wZXJhdGlvbnMgdGhhdCB1c2UgCiAgICAgICAgICAgICAgIHRoZSBzYW1lIGxvYWQgc3BlY2lmaWNhdGlvbnMuIFRoaXMgaW1wcm92ZXMgcGVyZm9ybWFuY2Ugb2YgCiAgICAgICAgICAgICAgIHRyaWNrbGUgbG9hZHMgKG9uZ29pbmcgc21hbGwgbG9hZHMgdG8gdGhlIHNhbWUgdGFyZ2V0IHRhYmxlKS4KClNRTCAtIE9wdGlvbmFsLiBEZWZpbmVzIFNRTCBjb21tYW5kcyB0byBydW4gYmVmb3JlIGFuZC9vciBhZnRlciB0aGUgbG9hZCAKICAgICAgb3BlcmF0aW9uLiBDb21tYW5kcyB0aGF0IGNvbnRhaW4gc3BhY2VzIG9yIHNwZWNpYWwgY2hhcmFjdGVycyBtdXN0IAogICAgICBiZSBlbmNsb3NlZCBpbiBxdW90ZXMuIFlvdSBjYW4gc3BlY2lmeSBtdWx0aXBsZSBCRUZPUkUgYW5kL29yIAogICAgICBBRlRFUiBjb21tYW5kcy4gTGlzdCBjb21tYW5kcyBpbiB0aGUgb3JkZXIgb2YgZGVzaXJlZCBleGVjdXRpb24uCgpCRUZPUkUgLSBPcHRpb25hbC4gQW4gU1FMIGNvbW1hbmQgdG8gcnVuIGJlZm9yZSB0aGUgbG9hZCBvcGVyYXRpb24gc3RhcnRzLgogICAgICAgICBFbmNsb3NlIGNvbW1hbmRzIGluIHF1b3Rlcy4KCkFGVEVSIC0gT3B0aW9uYWwuIEFuIFNRTCBjb21tYW5kIHRvIHJ1biBhZnRlciB0aGUgbG9hZCBvcGVyYXRpb24gY29tcGxldGVzLgogICAgICAgIEVuY2xvc2UgY29tbWFuZHMgaW4gcXVvdGVzLgoKCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCk5PVEVTCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpJZiB5b3VyIGRhdGFiYXNlIG9iamVjdCBuYW1lcyB3ZXJlIGNyZWF0ZWQgdXNpbmcgYSBkb3VibGUtcXVvdGVkIAppZGVudGlmaWVyIChkZWxpbWl0ZWQgaWRlbnRpZmllciksIHlvdSBtdXN0IHNwZWNpZnkgdGhlIGRlbGltaXRlZCAKbmFtZSB3aXRoaW4gc2luZ2xlIHF1b3RlcyBpbiB0aGUgaGF3cSBsb2FkIGNvbnRyb2wgZmlsZS4gRm9yIGV4YW1wbGUsIAppZiB5b3UgY3JlYXRlIGEgdGFibGUgYXMgZm9sbG93czoKCiAgICAgQ1JFQVRFIFRBQkxFICJNeVRhYmxlIiAoIk15Q29sdW1uIiB0ZXh0KTsKCllvdXIgWUFNTC1mb3JtYXR0ZWQgaGF3cSBsb2FkIGNvbnRyb2wgZmlsZSB3b3VsZCByZWZlciB0byB0aGUgYWJvdmUgCnRhYmxlIGFuZCBjb2x1bW4gbmFtZXMgYXMgZm9sbG93czoKCiAgICAgICAgLSBDT0xVTU5TOgogICAgICAgICAgLSAnIk15Q29sdW1uIic6IHRleHQKICAgIAogICAgT1VUUFVUOgogICAgICAgIC0gVEFCTEU6IHB1YmxpYy4nIk15VGFibGUiJwoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKTE9HIEZJTEUgRk9STUFUCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCgpMb2cgZmlsZXMgb3V0cHV0IGJ5IGhhd3EgbG9hZCBoYXZlIHRoZSBmb2xsb3dpbmcgZm9ybWF0OgoKPHRpbWVzdGFtcD58PGxldmVsPnw8bWVzc2FnZT4KCldoZXJlIDx0aW1lc3RhbXA+IHRha2VzIHRoZSBmb3JtOiBZWVlZLU1NLUREIEhIOk1NOlNTLCAKPGxldmVsPiBpcyBvbmUgb2YgREVCVUcsIExPRywgSU5GTywgRVJST1IsIGFuZCA8bWVzc2FnZT4gaXMgCmEgbm9ybWFsIHRleHQgbWVzc2FnZS4gU29tZSBJTkZPIG1lc3NhZ2VzIHRoYXQgbWF5IGJlIG9mIAppbnRlcmVzdCBpbiB0aGUgbG9nIGZpbGVzIGFyZSAod2hlcmUgIyBjb3JyZXNwb25kcyB0byB0aGUgCmFjdHVhbCBudW1iZXIgb2Ygc2Vjb25kcywgdW5pdHMgb2YgZGF0YSwgb3IgZmFpbGVkIHJvd3MpOgoKSU5GT3xydW5uaW5nIHRpbWU6ICMuIyMgc2Vjb25kcwpJTkZPfHRyYW5zZmVycmVkICMuIyBrQiBvZiAjLiMga0IuCklORk98aGF3cSBsb2FkIHN1Y2NlZWRlZApJTkZPfGhhd3EgbG9hZCBzdWNjZWVkZWQgd2l0aCB3YXJuaW5ncwpJTkZPfGhhd3EgbG9hZCBmYWlsZWQKSU5GT3wxIGJhZCByb3cKSU5GT3wjIGJhZCByb3dzCgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpFWEFNUExFUwoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoKUnVuIGEgbG9hZCBqb2IgYXMgZGVmaW5lZCBpbiBteV9sb2FkLnltbDoKCmhhd3EgbG9hZCAtZiBteV9sb2FkLnltbAoKCkV4YW1wbGUgbG9hZCBjb250cm9sIGZpbGU6CgotLS0KVkVSU0lPTjogMS4wLjAuMQpEQVRBQkFTRTogb3BzClVTRVI6IGdwYWRtaW4KSE9TVDogbWR3LTEKUE9SVDogNTQzMgpHUExPQUQ6CiAgIElOUFVUOgogICAgLSBTT1VSQ0U6CiAgICAgICAgIExPQ0FMX0hPU1ROQU1FOgogICAgICAgICAgIC0gZXRsMS0xCiAgICAgICAgICAgLSBldGwxLTIKICAgICAgICAgICAtIGV0bDEtMwogICAgICAgICAgIC0gZXRsMS00CiAgICAgICAgIFBPUlQ6IDgwODEKICAgICAgICAgRklMRTogCiAgICAgICAgICAgLSAvdmFyL2xvYWQvZGF0YS8qCiAgICAtIENPTFVNTlM6CiAgICAgICAgICAgLSBuYW1lOiB0ZXh0CiAgICAgICAgICAgLSBhbW91bnQ6IGZsb2F0NAogICAgICAgICAgIC0gY2F0ZWdvcnk6IHRleHQKICAgICAgICAgICAtIGRlc2M6IHRleHQKICAgICAgICAgICAtIGRhdGU6IGRhdGUKICAgIC0gRk9STUFUOiB0ZXh0CiAgICAtIERFTElNSVRFUjogJ3wnCiAgICAtIEVSUk9SX0xJTUlUOiAyNQogICAgLSBFUlJPUl9UQUJMRTogcGF5YWJsZXMuZXJyX2V4cGVuc2VzCiAgIE9VVFBVVDoKICAgIC0gVEFCTEU6IHBheWFibGVzLmV4cGVuc2VzCiAgICAtIE1PREU6IElOU0VSVAogICBTUUw6CiAgICAtIEJFRk9SRTogIklOU0VSVCBJTlRPIGF1ZGl0IFZBTFVFUygnc3RhcnQnLCBjdXJyZW50X3RpbWVzdGFtcCkiCiAgICAtIEFGVEVSOiAiSU5TRVJUIElOVE8gYXVkaXQgVkFMVUVTKCdlbmQnLCBjdXJyZW50X3RpbWVzdGFtcCkiCgoKKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKU0VFIEFMU08KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKCmdwZmRpc3QsIENSRUFURSBFWFRFUk5BTCBUQUJMRQo=