DQpSRUFETUUgZm9yIHRoZSBidWlsZHMvYW1pZ2Egc3ViZGlyZWN0b3J5Lg0KDQpDb3B5cmlnaHQgMjAwNS0yMDE1IGJ5DQpXZXJuZXIgTGVtYmVyZyBhbmQgRGV0bGVmIFf8cmtuZXIuDQoNClRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0LCBhbmQgbWF5IG9ubHkgYmUgdXNlZCwgbW9kaWZpZWQsDQphbmQgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBGcmVlVHlwZSBwcm9qZWN0IGxpY2Vuc2UsDQpMSUNFTlNFLlRYVC4gIEJ5IGNvbnRpbnVpbmcgdG8gdXNlLCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgdGhpcyBmaWxlIHlvdQ0KaW5kaWNhdGUgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBsaWNlbnNlIGFuZCB1bmRlcnN0YW5kIGFuZCBhY2NlcHQgaXQNCmZ1bGx5Lg0KDQoNClRoZSBtYWtlZmlsZS5vczQgaXMgZm9yIHRoZSBBbWlnYU9TNCBTREsuICBUbyB1c2UgaXQsIHR5cGUNCiJtYWtlIC1mIG1ha2VmaWxlLm9zNCIsIGl0IHByb2R1Y2VzIGEgbGluayBsaWJyYXJ5IGxpYmZ0Ml9wcGMuYS4NCg0KVGhlIG1ha2VmaWxlIGlzIGZvciBwcGMtbW9ycGhvcy1nY2MtMi45NS4zLWJpbi50Z3ogKGdjYyAyLjk1LjMgaG9zdGVkIG9uDQo2OGstQW1pZ2EgcHJvZHVjaW5nIE1vcnBoT1MtUFBDLWJpbmFyaWVzIGZyb20gaHR0cDovL3d3dy5tb3JwaG9zLmRlKS4NClRvIHVzZSBpdCwgdHlwZSAibWFrZSBhc3NpZ24iLCB0aGVuICJtYWtlIjsgaXQgcHJvZHVjZXMgYSBsaW5rIGxpYnJhcnkNCmxpYmZ0Ml9wcGMuYS4NCg0KVGhlIHNtYWtlZmlsZSBpcyBhIG1ha2VmaWxlIGZvciBBbWlnYSBTQVMvQyA2LjU4IChubyBsb25nZXIgYXZhaWxhYmxlLA0KbGF0ZXN0IHNvbGQgdmVyc2lvbiB3YXMgNi41MCwgdXBkYXRlcyBjYW4gYmUgZm91bmQgaW4gQW1pbmV0KS4gIEl0IGlzDQpiYXNlZCBvbiB0aGUgdmVyc2lvbiBmb3VuZCBpbiB0aGUgc291cmNlY29kZSBvZiB0dGYubGlicmFyeSAwLjgzYiBmb3INCkZyZWVUeXBlIDEuMy4xIGZyb20gUmljaGFyZCBHcmlmZml0aCAocmFncmlmZmlAc3ByeW5ldC5jb20sDQpodHRwOi8vcmFncmlmZmkuaG9tZS5zcHJ5bmV0LmNvbSkuDQoNCllvdSB3aWxsIGFsc28gbmVlZCB0aGUgbGF0ZXN0IGluY2x1ZGUgZmlsZXMgYW5kIGFtaWdhLmxpYiBmcm9tIHRoZQ0KQW1pZ2Egd2ViIHNpdGUgKGh0dHA6Ly93d3cuYW1pZ2EuY29tLzMuOS9kb3dubG9hZC9OREszLjkubGhhKSBmb3INCkFtaWdhT1MgMy45OyB0aGUgZ2VuZXJhdGVkIGNvZGUgc2hvdWxkIHdvcmsgdW5kZXIgQW1pZ2FPUyAyLjA0IGFuZCB1cC4NCg0KVG8gdXNlIGl0LCBjYWxsICJzbWFrZSBhc3NpZ24iIGFuZCB0aGVuICJzbWFrZSIgZnJvbSB0aGUgYnVpbGRzL2FtaWdhDQpkaXJlY3RvcnkuICBUaGUgcmVzdWx0cyBhcmU6DQoNCi0gQSBsaW5rIGxpYnJhcnkgImZ0Ml82ODB4MC5saWIiICh3aGVyZSB4IGRlcGVuZHMgb24gdGhlIHNldHRpbmcgb2YNCiAgdGhlIENQVSBlbnRyeSBpbiB0aGUgc21ha2VmaWxlKSBjb250YWluaW5nIGFsbCBGcmVlVHlwZTIgcGFydHMNCiAgZXhjZXB0IG9mIHRoZSBpbml0IGNvZGUsIGRlYnVnZ2luZyBjb2RlLCBhbmQgdGhlIHN5c3RlbSBpbnRlcmZhY2UNCiAgY29kZS4NCg0KLSBmdHN5c3RlbS5vLCBhbiBvYmplY3QgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgdGhlDQogIHN5c3RlbSBpbnRlcmZhY2UgY29kZSB3aGljaCB1c2VzIGZvcGVuKCkgZmNsb3NlKCkgZnJlYWQoKSBmc2VlaygpDQogIGZ0ZWxsKCkgbWFsbG9jKCkgcmVhbGxvYygpIGFuZCBmcmVlKCkgZnJvbSBsaWI6c2MubGliIChub3QgcHVyZSkuDQoNCi0gZnRzeXN0ZW1wdXJlLm8sIGFuIG9iamVjdCBtb2R1bGUgY29udGFpbmluZyB0aGUgcHVyZSB2ZXJzaW9uIG9mIHRoZQ0KICBzeXN0ZW0gaW50ZXJmYWNlIGNvZGUgd2hpY2ggdXNlcyBPcGVuKCkgQ2xvc2UoKSBSZWFkKCkgU2VlaygpDQogIEV4YW1pbmVGSCgpIEFzbUFsbG9jUG9vbGVkKCkgQXNtRnJlZVBvb2xlZCgpIGV0Yy4gIFRoaXMgdmVyc2lvbiBjYW4NCiAgYmUgdXNlZCBpbiBib3RoIG5vcm1hbCBwcm9ncmFtcyBhbmQgaW4gQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbQ0KICBsaWJyYXJ5cyAoY2FuIGJlIGxpbmtlZCB3aXRoIGxpYjpsaWJpbml0Lm8sIG5vIGNvcHlpbmcgb2YgREFUQSBhbmQNCiAgQlNTIGh1bmtzIGZvciBlYWNoIE9wZW5MaWJyYXJ5KCkgbmVjZXNzYXJ5KS4gIFNvdXJjZSBjb2RlIGlzIGluDQogIHNyYy9iYXNlL2Z0c3lzdGVtLmMuDQoNCi0gZnRkZWJ1Zy5vLCBhbiBvYmplY3QgbW9kdWxlIGNvbnRhaW5pbmcgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgdGhlDQogIGRlYnVnZ2luZyBjb2RlIHdoaWNoIHVzZXMgdnByaW50ZigpIGFuZCBleGl0KCkgKG5vdCBwdXJlKS4NCiAgRGVidWdnaW5nIGNhbiBiZSB0dXJuZWQgb24gaW4gRlQ6aW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRvcHRpb24uaA0KICBhbmQgd2l0aCBGVF9TZXRUcmFjZUxldmVsKCkuDQoNCi0gZnRkZWJ1Z3B1cmUubywgYW4gb2JqZWN0IG1vZHVsZSBjb250YWluaW5nIHRoZSBwdXJlIHZlcnNpb24gb2YgdGhlDQogIGRlYnVnZ2luZyBjb2RlIHdoaWNoIHVzZXMgS1ZQcmludGYoKSBmcm9tIGxpYjpkZWJ1Zy5saWIgYW5kIG5vDQogIGV4aXQoKS4gIEZvciBkZWJ1Z2dpbmcgb2YgQW1pZ2EgcnVuLXRpbWUgc2hhcmVkIHN5c3RlbSBsaWJyYXJpZXMuDQogIFNvdXJjZSBjb2RlIGlzIGluIHNyYy9iYXNlL2Z0ZGVidWcuYy4NCg0KLSBOTyBmdGluaXQuby4gIEJlY2F1c2UgbGlua2luZyB3aXRoIGEgbGluayBsaWJyYXJ5IHNob3VsZCByZXN1bHQgaW4NCiAgbGlua2luZyBvbmx5IHRoZSBuZWVkZWQgb2JqZWN0IG1vZHVsZXMgaW4gaXQsIGJ1dCBzdGFuZGFyZA0KICBmdHN5c3RlbS5vIHdvdWxkIGZvcmNlIEFMTCBGcmVlVHlwZTIgbW9kdWxlcyB0byBiZSBsaW5rZWQgdG8geW91cg0KICBwcm9ncmFtLCBJIGRlY2lkZWQgdG8gdXNlIGEgZGlmZmVyZW50IHNjaGVtZTogWW91IG11c3QgI2luY2x1ZGUNCiAgRlQ6c3JjL2Jhc2UvZnRpbml0LmMgaW4geW91ciBzb3VyY2Vjb2RlIGFuZCBzcGVjaWZ5IHdpdGggI2RlZmluZQ0KICBzdGF0ZW1lbnRzIHdoaWNoIG1vZHVsZXMgeW91IG5lZWQuICBTZWUNCiAgaW5jbHVkZS9mcmVldHlwZS9jb25maWcvZnRtb2R1bGUuaC4NCg0KDQpUbyB1c2UgaW4geW91ciBvd24gcHJvZ3JhbXM6DQoNCi0gSW5zZXJ0IHRoZSAjZGVmaW5lIGFuZCAjaW5jbHVkZSBzdGF0ZW1lbnRzIGZyb20gdG9wIG9mDQogIGluY2x1ZGUvZnJlZXR5cGUvY29uZmlnL2Z0bW9kdWxlLmggaW4geW91ciBzb3VyY2UgY29kZSBhbmQNCiAgdW5jb21tZW50IHRoZSAjZGVmaW5lIHN0YXRlbWVudHMgZm9yIHRoZSBGcmVlVHlwZTIgbW9kdWxlcyB5b3UgbmVlZC4NCg0KLSBZb3UgY2FuIHVzZSBlaXRoZXIgUEFSQU1FVEVSUz1SRUdJU1RFUiBvciBQQVJBTUVURVJTPVNUQUNLIGZvcg0KICBjYWxsaW5nIHRoZSBGcmVlVHlwZTIgZnVuY3Rpb25zLCBiZWNhdXNlIHRoZSBsaW5rIGxpYnJhcnkgYW5kIHRoZQ0KICBvYmplY3QgZmlsZXMgYXJlIGNvbXBpbGVkIHdpdGggUEFSQU1FVEVSUz1CT1RILg0KDQotICJzbWFrZSBhc3NpZ24iIChhc3NpZ24gIkZUOiIgdG8gdGhlIEZyZWVUeXBlMiBtYWluIGRpcmVjdG9yeSkuDQoNCi0gQ29tcGlsZSB5b3VyIHByb2dyYW0uDQoNCi0gTGluayB3aXRoIGVpdGhlciBmdHN5c3RlbS5vIG9yIGZ0c3lzdGVtcHVyZS5vLCBpZiBkZWJ1Z2dpbmcgZW5hYmxlZA0KICB3aXRoIGVpdGhlciBmdGRlYnVnLm8gb3IgKGZ0ZGVidWdwdXJlLm8gYW5kIGxpYjpkZWJ1Zy5saWIpLCBhbmQgd2l0aA0KICBmdDJfNjgweDAubGliIGFzIGxpbmsgbGlicmFyeS4NCg0KDQpUbyBhZGFwdCB0byBvdGhlciBjb21waWxlcnM6DQoNCi0gVGhlIHN0YW5kYXJkIEFOU0kgQyBtYXhpbXVtIGxlbmd0aCBvZiAzMSBzaWduaWZpY2FudCBjaGFyYWN0ZXJzIGluDQogIGlkZW50aWZpZXJzIGlzIG5vdCBlbm91Z2ggZm9yIEZyZWVUeXBlMi4gIENoZWNrIGlmIHlvdXIgY29tcGlsZXIgaGFzDQogIGEgbWluaW11bSBsZW5ndGggb2YgNDAgc2lnbmlmaWNhbnQgY2hhcmFjdGVycyBvciBjYW4gYmUgc3dpdGNoZWQgdG8NCiAgaXQuICAiaWRsZW49NDAiIGlzIHRoZSBvcHRpb24gZm9yIFNBUy9DLiAgU2V0dGluZyAjZGVmaW5lDQogIEhBVkVfTElNSVRfT05fSURFTlRTIGluIGFuIGluY2x1ZGUgZmlsZSBtYXkgYWxzbyB3b3JrIChub3QgdGVzdGVkKS4NCg0KLSBNYWtlIHN1cmUgdGhhdCB0aGUgaW5jbHVkZSBkaXJlY3RvcnkgaW4gYnVpbGRzL2FtaWdhIGlzIHNlYXJjaGVkDQogIGJlZm9yZSB0aGUgbm9ybWFsIEZyZWVUeXBlMiBpbmNsdWRlIGRpcmVjdG9yeSwgc28geW91IGFyZSBhYmxlIHRvDQogIHJlcGxhY2UgcHJvYmxlbWF0aWMgaW5jbHVkZSBmaWxlcyB3aXRoIHlvdXIgb3duIHZlcnNpb24gKHNhbWUgbWF5IGJlDQogIHVzZWZ1bCBmb3IgdGhlIHNyYyBkaXJlY3RvcnkpLg0KDQotIEFuIGV4YW1wbGUgb2YgaG93IHRvIHJlcGxhY2Uvd29ya2Fyb3VuZCBhIHByb2JsZW1hdGljIGluY2x1ZGUgZmlsZQ0KICBpcyBpbmNsdWRlL2ZyZWV0eXBlL2NvbmZpZy9mdGNvbmZpZy5oOyBpdCBjaGFuZ2VzIGEgI2RlZmluZSB0aGF0DQogIHdvdWxkIHByZXZlbnQgU0FTL0MgZnJvbSBnZW5lcmF0aW5nIFhERUYncyB3aGVyZSBpdCBzaG91bGQgZG8gdGhhdCBhbmQNCiAgdGhlbiBpbmNsdWRlcyB0aGUgc3RhbmRhcmQgRnJlZVR5cGUyIGluY2x1ZGUgZmlsZS4NCg0KTG9jYWwgVmFyaWFibGVzOg0KY29kaW5nOiBsYXRpbi0xDQpFbmQ6DQo=