LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjd4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAdmVyc2lvbiBWMS4xLjENCiAgKiBAZGF0ZSAgICAwMS1KdWx5LTIwMTYNCiAgKiBAYnJpZWYgICBDTVNJUyBTVE0zMkY3eHggRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlLiAgICAgICAgICAgDQogICogICAgICAgICAgICANCiAgKiAgICAgICAgICBUaGUgZmlsZSBpcyB0aGUgdW5pcXVlIGluY2x1ZGUgZmlsZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyDQogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6DQogICogICAgICAgICAgIC0gQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRoYXQgYWxsb3dzIHRvIHNlbGVjdDoNCiAgKiAgICAgICAgICAgICAgLSBUaGUgU1RNMzJGN3h4IGRldmljZSB1c2VkIGluIHRoZSB0YXJnZXQgYXBwbGljYXRpb24NCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4gDQogICogICAgICAgICAgICAgICAgY29kZSB3aWxsIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbJJzIHJlZ2lzdGVycyANCiAgKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkcml2ZXJzIEFQSSksIHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYnkgDQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiDQogICogIA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBAYXR0ZW50aW9uDQogICoNCiAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCiAgKg0KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQogICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCiAgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTVE1pY3JvZWxlY3Ryb25pY3Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQogICogICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCiAgKiAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAqDQogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQogICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KICAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiAgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQogICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCiAgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KICAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAgKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIENNU0lTDQogICogQHsNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIHN0bTMyZjd4eA0KICAqIEB7DQogICovDQogICAgDQojaWZuZGVmIF9fU1RNMzJGN3h4X0gNCiNkZWZpbmUgX19TVE0zMkY3eHhfSA0KDQojaWZkZWYgX19jcGx1c3BsdXMNCiBleHRlcm4gIkMiIHsNCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KICANCi8qKiBAYWRkdG9ncm91cCBMaWJyYXJ5X2NvbmZpZ3VyYXRpb25fc2VjdGlvbg0KICAqIEB7DQogICovDQoNCi8qKg0KICAqIEBicmllZiBTVE0zMiBGYW1pbHkNCiAgKi8NCiNpZiAhZGVmaW5lZCAgKFNUTTMyRjcpDQojZGVmaW5lIFNUTTMyRjcNCiNlbmRpZiAvKiBTVE0zMkY3ICovDQoNCi8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBTVE0zMiBkZXZpY2UgdXNlZCBpbiB5b3VyDQogICBhcHBsaWNhdGlvbiANCiAgKi8NCiNpZiAhZGVmaW5lZCAoU1RNMzJGNzU2eHgpICYmICFkZWZpbmVkIChTVE0zMkY3NDZ4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjc0NXh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGNzY3eHgpICYmIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJGNzY5eHgpICYmICFkZWZpbmVkIChTVE0zMkY3Nzd4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjc3OXh4KQ0KICAvKiAjZGVmaW5lIFNUTTMyRjc1Nnh4ICovICAgLyohPCBTVE0zMkY3NTZWRywgU1RNMzJGNzU2WkcsIFNUTTMyRjc1NlpHLCBTVE0zMkY3NTZJRywgU1RNMzJGNzU2QkcsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUTTMyRjc1Nk5HIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY3NDZ4eCAqLyAgIC8qITwgU1RNMzJGNzQ2VkUsIFNUTTMyRjc0NlZHLCBTVE0zMkY3NDZaRSwgU1RNMzJGNzQ2WkcsIFNUTTMyRjc0NklFLCBTVE0zMkY3NDZJRywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RNMzJGNzQ2QkUsIFNUTTMyRjc0NkJHLCBTVE0zMkY3NDZORSwgU1RNMzJGNzQ2TkcgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjc0NXh4ICovICAgLyohPCBTVE0zMkY3NDVWRSwgU1RNMzJGNzQ1VkcsIFNUTTMyRjc0NVpHLCBTVE0zMkY3NDVaRSwgU1RNMzJGNzQ1SUUsIFNUTTMyRjc0NUlHIERldmljZXMgKi8NCiAgLyogI2RlZmluZSBTVE0zMkY3NjV4eCAqLyAgIC8qITwgU1RNMzJGNzY1QkksIFNUTTMyRjc2NUJHLCBTVE0zMkY3NjVOSSwgU1RNMzJGNzY1TkcsIFNUTTMyRjc2NUlJLCBTVE0zMkY3NjVJRywNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU1RNMzJGNzY1WkksIFNUTTMyRjc2NVpHLCBTVE0zMkY3NjVWSSwgU1RNMzJGNzY1VkcgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjc2N3h4ICovICAgLyohPCBTVE0zMkY3NjdCRywgU1RNMzJGNzY3QkksIFNUTTMyRjc2N0lHLCBTVE0zMkY3NjdJSSwgU1RNMzJGNzY3TkcsIFNUTTMyRjc2N05JLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTVE0zMkY3NjdWRywgU1RNMzJGNzY3VkksIFNUTTMyRjc2N1pHLCBTVE0zMkY3NjdaSSBEZXZpY2VzICovDQogIC8qICNkZWZpbmUgU1RNMzJGNzY5eHggKi8gICAvKiE8IFNUTTMyRjc2OUFHLCBTVE0zMkY3NjlBSSwgU1RNMzJGNzY5QkcsIFNUTTMyRjc2OUJJLCBTVE0zMkY3NjlJRywgU1RNMzJGNzY5SUksDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUTTMyRjc2OU5HLCBTVE0zMkY3NjlOSSwgU1RNMzJGNzY4QUkgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjc3N3h4ICovICAgLyohPCBTVE0zMkY3NzdWSSwgU1RNMzJGNzc3WkksIFNUTTMyRjc3N0lJLCBTVE0zMkY3NzdCSSwgU1RNMzJGNzc3TkkgRGV2aWNlcyAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjc3OXh4ICovICAgLyohPCBTVE0zMkY3NzlJSSwgU1RNMzJGNzc5QkksIFNUTTMyRjc3OU5JLCBTVE0zMkY3NzlBSSwgU1RNMzJGNzc4QUkgRGV2aWNlcyAqLw0KI2VuZGlmDQoNCi8qICBUaXA6IFRvIGF2b2lkIG1vZGlmeWluZyB0aGlzIGZpbGUgZWFjaCB0aW1lIHlvdSBuZWVkIHRvIHN3aXRjaCBiZXR3ZWVuIHRoZXNlDQogICAgICAgIGRldmljZXMsIHlvdSBjYW4gZGVmaW5lIHRoZSBkZXZpY2UgaW4geW91ciB0b29sY2hhaW4gY29tcGlsZXIgcHJlcHJvY2Vzc29yLg0KICAqLw0KDQojaWYgIWRlZmluZWQgIChVU0VfSEFMX0RSSVZFUikNCi8qKg0KICogQGJyaWVmIENvbW1lbnQgdGhlIGxpbmUgYmVsb3cgaWYgeW91IHdpbGwgbm90IHVzZSB0aGUgcGVyaXBoZXJhbHMgZHJpdmVycy4NCiAgIEluIHRoaXMgY2FzZSwgdGhlc2UgZHJpdmVycyB3aWxsIG5vdCBiZSBpbmNsdWRlZCBhbmQgdGhlIGFwcGxpY2F0aW9uIGNvZGUgd2lsbCANCiAgIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbHMgcmVnaXN0ZXJzIA0KICAgKi8NCiAgLyojZGVmaW5lIFVTRV9IQUxfRFJJVkVSICovDQojZW5kaWYgLyogVVNFX0hBTF9EUklWRVIgKi8NCg0KLyoqDQogICogQGJyaWVmIENNU0lTIERldmljZSB2ZXJzaW9uIG51bWJlciBWMS4xLjENCiAgKi8NCiNkZWZpbmUgX19TVE0zMkY3X0NNU0lTX1ZFUlNJT05fTUFJTiAgICgweDAxKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX1NVQjEgICAoMHgwMSkgLyohPCBbMjM6MTZdIHN1YjEgdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9TVUIyICAgKDB4MDEpIC8qITwgWzE1OjhdICBzdWIyIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkY3X0NNU0lTX1ZFUlNJT05fUkMgICAgICgweDAwKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLyANCiNkZWZpbmUgX19TVE0zMkY3X0NNU0lTX1ZFUlNJT04gICAgICAgICgoX19TVE0zMkY3X0NNU0lTX1ZFUlNJT05fTUFJTiA8PCAyNClcDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGN19DTVNJU19WRVJTSU9OX1NVQjEgPDwgMTYpXA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfChfX1NUTTMyRjdfQ01TSVNfVkVSU0lPTl9TVUIyIDw8IDggKVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwoX19TVE0zMkY3X0NNU0lTX1ZFUlNJT04pKQ0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIERldmljZV9JbmNsdWRlZA0KICAqIEB7DQogICovDQojaWYgZGVmaW5lZChTVE0zMkY3NTZ4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjc1Nnh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjc0Nnh4KQ0KICAjaW5jbHVkZSAic3RtMzJmNzQ2eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNzQ1eHgpDQogICNpbmNsdWRlICJzdG0zMmY3NDV4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY3NjV4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjc2NXh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjc2N3h4KQ0KICAjaW5jbHVkZSAic3RtMzJmNzY3eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGNzY5eHgpDQogICNpbmNsdWRlICJzdG0zMmY3Njl4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkY3Nzd4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjc3N3h4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjc3OXh4KQ0KICAjaW5jbHVkZSAic3RtMzJmNzc5eHguaCIgIA0KI2Vsc2UNCiAjZXJyb3IgIlBsZWFzZSBzZWxlY3QgZmlyc3QgdGhlIHRhcmdldCBTVE0zMkY3eHggZGV2aWNlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiAoaW4gc3RtMzJmN3h4LmggZmlsZSkiDQojZW5kaWYNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX3R5cGVzDQogICogQHsNCiAgKi8gDQp0eXBlZGVmIGVudW0gDQp7DQogIFJFU0VUID0gMCwgDQogIFNFVCA9ICFSRVNFVA0KfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsNCg0KdHlwZWRlZiBlbnVtIA0Kew0KICBESVNBQkxFID0gMCwgDQogIEVOQUJMRSA9ICFESVNBQkxFDQp9IEZ1bmN0aW9uYWxTdGF0ZTsNCiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpDQoNCnR5cGVkZWYgZW51bSANCnsNCiAgRVJST1IgPSAwLCANCiAgU1VDQ0VTUyA9ICFFUlJPUg0KfSBFcnJvclN0YXR1czsNCg0KLyoqDQogICogQH0NCiAgKi8NCiAgDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfbWFjcm8NCiAgKiBAew0KICAqLw0KI2RlZmluZSBTRVRfQklUKFJFRywgQklUKSAgICAgKChSRUcpIHw9IChCSVQpKQ0KDQojZGVmaW5lIENMRUFSX0JJVChSRUcsIEJJVCkgICAoKFJFRykgJj0gfihCSVQpKQ0KDQojZGVmaW5lIFJFQURfQklUKFJFRywgQklUKSAgICAoKFJFRykgJiAoQklUKSkNCg0KI2RlZmluZSBDTEVBUl9SRUcoUkVHKSAgICAgICAgKChSRUcpID0gKDB4MCkpDQoNCiNkZWZpbmUgV1JJVEVfUkVHKFJFRywgVkFMKSAgICgoUkVHKSA9IChWQUwpKQ0KDQojZGVmaW5lIFJFQURfUkVHKFJFRykgICAgICAgICAoKFJFRykpDQoNCiNkZWZpbmUgTU9ESUZZX1JFRyhSRUcsIENMRUFSTUFTSywgU0VUTUFTSykgIFdSSVRFX1JFRygoUkVHKSwgKCgoUkVBRF9SRUcoUkVHKSkgJiAofihDTEVBUk1BU0spKSkgfCAoU0VUTUFTSykpKQ0KDQojZGVmaW5lIFBPU0lUSU9OX1ZBTChWQUwpICAgICAoX19DTFooX19SQklUKFZBTCkpKSANCg0KLyoqDQogICogQH0NCiAgKi8NCg0KI2lmZGVmIFVTRV9IQUxfRFJJVkVSDQogICNpbmNsdWRlICJzdG0zMmY3eHhfaGFsX2NvbmYuaCINCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQojaWZkZWYgX19jcGx1c3BsdXMNCn0NCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KDQojZW5kaWYgLyogX19TVE0zMkY3eHhfSCAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQogIC8qKg0KICAqIEB9DQogICovDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=