LyoqDQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKg0KICAqIEBmaWxlICAgIHN0bTMyZjB4eC5oDQogICogQGF1dGhvciAgTUNEIEFwcGxpY2F0aW9uIFRlYW0NCiAgKiBAYnJpZWYgICBDTVNJUyBTVE0zMkYweHggRGV2aWNlIFBlcmlwaGVyYWwgQWNjZXNzIExheWVyIEhlYWRlciBGaWxlLiAgICAgICAgICAgDQogICogICAgICAgICAgICANCiAgKiAgICAgICAgICBUaGUgZmlsZSBpcyB0aGUgdW5pcXVlIGluY2x1ZGUgZmlsZSB0aGF0IHRoZSBhcHBsaWNhdGlvbiBwcm9ncmFtbWVyDQogICogICAgICAgICAgaXMgdXNpbmcgaW4gdGhlIEMgc291cmNlIGNvZGUsIHVzdWFsbHkgaW4gbWFpbi5jLiBUaGlzIGZpbGUgY29udGFpbnM6DQogICogICAgICAgICAgIC0gQ29uZmlndXJhdGlvbiBzZWN0aW9uIHRoYXQgYWxsb3dzIHRvIHNlbGVjdDoNCiAgKiAgICAgICAgICAgICAgLSBUaGUgU1RNMzJGMHh4IGRldmljZSB1c2VkIGluIHRoZSB0YXJnZXQgYXBwbGljYXRpb24NCiAgKiAgICAgICAgICAgICAgLSBUbyB1c2Ugb3Igbm90IHRoZSBwZXJpcGhlcmFsknMgZHJpdmVycyBpbiBhcHBsaWNhdGlvbiBjb2RlKGkuZS4gDQogICogICAgICAgICAgICAgICAgY29kZSB3aWxsIGJlIGJhc2VkIG9uIGRpcmVjdCBhY2Nlc3MgdG8gcGVyaXBoZXJhbJJzIHJlZ2lzdGVycyANCiAgKiAgICAgICAgICAgICAgICByYXRoZXIgdGhhbiBkcml2ZXJzIEFQSSksIHRoaXMgb3B0aW9uIGlzIGNvbnRyb2xsZWQgYnkgDQogICogICAgICAgICAgICAgICAgIiNkZWZpbmUgVVNFX0hBTF9EUklWRVIiDQogICogIA0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKiBAYXR0ZW50aW9uDQogICoNCiAgKiA8aDI+PGNlbnRlcj4mY29weTsgQ09QWVJJR0hUKGMpIDIwMTYgU1RNaWNyb2VsZWN0cm9uaWNzPC9jZW50ZXI+PC9oMj4NCiAgKg0KICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sDQogICogYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0Og0KICAqICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLA0KICAqICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCiAgKiAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwNCiAgKiAgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24NCiAgKiAgICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLg0KICAqICAgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBTVE1pY3JvZWxlY3Ryb25pY3Mgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzDQogICogICAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUNCiAgKiAgICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLg0KICAqDQogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiDQogICogQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQ0KICAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQ0KICAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUNCiAgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTA0KICAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SDQogICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVINCiAgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KICAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFDQogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4NCiAgKg0KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIENNU0lTDQogICogQHsNCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIHN0bTMyZjB4eA0KICAqIEB7DQogICovDQogICAgDQojaWZuZGVmIF9fU1RNMzJGMHh4X0gNCiNkZWZpbmUgX19TVE0zMkYweHhfSA0KDQojaWZkZWYgX19jcGx1c3BsdXMNCiBleHRlcm4gIkMiIHsNCiNlbmRpZiAvKiBfX2NwbHVzcGx1cyAqLw0KICAgDQovKiogQGFkZHRvZ3JvdXAgTGlicmFyeV9jb25maWd1cmF0aW9uX3NlY3Rpb24NCiAgKiBAew0KICAqLw0KICANCi8qKg0KICAqIEBicmllZiBTVE0zMiBGYW1pbHkNCiAgKi8NCiNpZiAhZGVmaW5lZCAgKFNUTTMyRjApDQojZGVmaW5lIFNUTTMyRjANCiNlbmRpZiAvKiBTVE0zMkYwICovDQoNCi8qIFVuY29tbWVudCB0aGUgbGluZSBiZWxvdyBhY2NvcmRpbmcgdG8gdGhlIHRhcmdldCBTVE0zMiBkZXZpY2UgdXNlZCBpbiB5b3VyDQogICBhcHBsaWNhdGlvbiANCiAgKi8NCg0KI2lmICFkZWZpbmVkIChTVE0zMkYwMzB4NikgJiYgIWRlZmluZWQgKFNUTTMyRjAzMHg4KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJGMDMxeDYpICYmICFkZWZpbmVkIChTVE0zMkYwMzh4eCkgJiYgICAgICAgICAgICAgICAgICAgICAgICAgICBcDQogICAgIWRlZmluZWQgKFNUTTMyRjA0Mng2KSAmJiAhZGVmaW5lZCAoU1RNMzJGMDQ4eHgpICYmICFkZWZpbmVkIChTVE0zMkYwNzB4NikgJiYgXA0KICAgICFkZWZpbmVkIChTVE0zMkYwNTF4OCkgJiYgIWRlZmluZWQgKFNUTTMyRjA1OHh4KSAmJiAgICAgICAgICAgICAgICAgICAgICAgICAgIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJGMDcxeEIpICYmICFkZWZpbmVkIChTVE0zMkYwNzJ4QikgJiYgIWRlZmluZWQgKFNUTTMyRjA3OHh4KSAmJiAhZGVmaW5lZCAoU1RNMzJGMDcweEIpICYmIFwNCiAgICAhZGVmaW5lZCAoU1RNMzJGMDkxeEMpICYmICFkZWZpbmVkIChTVE0zMkYwOTh4eCkgJiYgIWRlZmluZWQgKFNUTTMyRjAzMHhDKQ0KICAvKiAjZGVmaW5lIFNUTTMyRjAzMHg2ICovICAvKiE8IFNUTTMyRjAzMHg0LCBTVE0zMkYwMzB4NiBEZXZpY2VzIChTVE0zMkYwMzB4eCBtaWNyb2NvbnRyb2xsZXJzIHdoZXJlIHRoZSBGbGFzaCBtZW1vcnkgcmFuZ2VzIGJldHdlZW4gMTYgYW5kIDMyIEtieXRlcykgICAgICAgICAgICAgICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDMweDggKi8gIC8qITwgU1RNMzJGMDMweDggRGV2aWNlcyAoU1RNMzJGMDMweHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IGlzIDY0IEtieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogI2RlZmluZSBTVE0zMkYwMzF4NiAqLyAgLyohPCBTVE0zMkYwMzF4NCwgU1RNMzJGMDMxeDYgRGV2aWNlcyAoU1RNMzJGMDMxeHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IHJhbmdlcyBiZXR3ZWVuIDE2IGFuZCAzMiBLYnl0ZXMpICAgICAgICAgICAgICAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjAzOHh4ICovICAvKiE8IFNUTTMyRjAzOHh4IERldmljZXMgKFNUTTMyRjAzOHh4IG1pY3JvY29udHJvbGxlcnMgd2hlcmUgdGhlIEZsYXNoIG1lbW9yeSBpcyAzMiBLYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDQyeDYgKi8gIC8qITwgU1RNMzJGMDQyeDQsIFNUTTMyRjA0Mng2IERldmljZXMgKFNUTTMyRjA0Mnh4IG1pY3JvY29udHJvbGxlcnMgd2hlcmUgdGhlIEZsYXNoIG1lbW9yeSByYW5nZXMgYmV0d2VlbiAxNiBhbmQgMzIgS2J5dGVzKSAgICAgICAgICAgICAgKi8NCiAgLyogI2RlZmluZSBTVE0zMkYwNDh4NiAqLyAgLyohPCBTVE0zMkYwNDh4eCBEZXZpY2VzIChTVE0zMkYwNDJ4eCBtaWNyb2NvbnRyb2xsZXJzIHdoZXJlIHRoZSBGbGFzaCBtZW1vcnkgaXMgMzIgS2J5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjA1MXg4ICovICAvKiE8IFNUTTMyRjA1MXg0LCBTVE0zMkYwNTF4NiwgU1RNMzJGMDUxeDggRGV2aWNlcyAoU1RNMzJGMDUxeHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IHJhbmdlcyBiZXR3ZWVuIDE2IGFuZCA2NCBLYnl0ZXMpICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDU4eHggKi8gIC8qITwgU1RNMzJGMDU4eHggRGV2aWNlcyAoU1RNMzJGMDU4eHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IGlzIDY0IEtieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiAgLyogI2RlZmluZSBTVE0zMkYwNzB4NiAqLyAgLyohPCBTVE0zMkYwNzB4NiBEZXZpY2VzIChTVE0zMkYwNzB4NiBtaWNyb2NvbnRyb2xsZXJzIHdoZXJlIHRoZSBGbGFzaCBtZW1vcnkgcmFuZ2VzIGJldHdlZW4gMTYgYW5kIDMyIEtieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjA3MHhCICovICAvKiE8IFNUTTMyRjA3MHhCIERldmljZXMgKFNUTTMyRjA3MHhCIG1pY3JvY29udHJvbGxlcnMgd2hlcmUgdGhlIEZsYXNoIG1lbW9yeSByYW5nZXMgYmV0d2VlbiA2NCBhbmQgMTI4IEtieXRlcykgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDcxeEIgKi8gIC8qITwgU1RNMzJGMDcxeDgsIFNUTTMyRjA3MXhCIERldmljZXMgKFNUTTMyRjA3MXh4IG1pY3JvY29udHJvbGxlcnMgd2hlcmUgdGhlIEZsYXNoIG1lbW9yeSByYW5nZXMgYmV0d2VlbiA2NCBhbmQgMTI4IEtieXRlcykgICAgICAgICAgICAgKi8NCiAgLyogI2RlZmluZSBTVE0zMkYwNzJ4QiAqLyAgLyohPCBTVE0zMkYwNzJ4OCwgU1RNMzJGMDcyeEIgRGV2aWNlcyAoU1RNMzJGMDcyeHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IHJhbmdlcyBiZXR3ZWVuIDY0IGFuZCAxMjggS2J5dGVzKSAgICAgICAgICAgICAqLw0KICAvKiAjZGVmaW5lIFNUTTMyRjA3OHh4ICovICAvKiE8IFNUTTMyRjA3OHh4IERldmljZXMgKFNUTTMyRjA3OHh4IG1pY3JvY29udHJvbGxlcnMgd2hlcmUgdGhlIEZsYXNoIG1lbW9yeSBpcyAxMjggS2J5dGVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDMweEMgKi8gIC8qITwgU1RNMzJGMDMweEMgRGV2aWNlcyAoU1RNMzJGMDMweEMgbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IGlzIDI1NiBLYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8gIA0KICAvKiAjZGVmaW5lIFNUTTMyRjA5MXhDICovICAvKiE8IFNUTTMyRjA5MXhCLCBTVE0zMkYwOTF4QyBEZXZpY2VzIChTVE0zMkYwOTF4eCBtaWNyb2NvbnRyb2xsZXJzIHdoZXJlIHRoZSBGbGFzaCBtZW1vcnkgcmFuZ2VzIGJldHdlZW4gMTI4IGFuZCAyNTYgS2J5dGVzKSAgICAgICAgICAgICovDQogIC8qICNkZWZpbmUgU1RNMzJGMDk4eHggKi8gIC8qITwgU1RNMzJGMDk4eHggRGV2aWNlcyAoU1RNMzJGMDk4eHggbWljcm9jb250cm9sbGVycyB3aGVyZSB0aGUgRmxhc2ggbWVtb3J5IGlzIDI1NiBLYnl0ZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8NCiNlbmRpZg0KICAgDQovKiAgVGlwOiBUbyBhdm9pZCBtb2RpZnlpbmcgdGhpcyBmaWxlIGVhY2ggdGltZSB5b3UgbmVlZCB0byBzd2l0Y2ggYmV0d2VlbiB0aGVzZQ0KICAgICAgICBkZXZpY2VzLCB5b3UgY2FuIGRlZmluZSB0aGUgZGV2aWNlIGluIHlvdXIgdG9vbGNoYWluIGNvbXBpbGVyIHByZXByb2Nlc3Nvci4NCiAgKi8NCiNpZiAhZGVmaW5lZCAgKFVTRV9IQUxfRFJJVkVSKQ0KLyoqDQogKiBAYnJpZWYgQ29tbWVudCB0aGUgbGluZSBiZWxvdyBpZiB5b3Ugd2lsbCBub3QgdXNlIHRoZSBwZXJpcGhlcmFscyBkcml2ZXJzLg0KICAgSW4gdGhpcyBjYXNlLCB0aGVzZSBkcml2ZXJzIHdpbGwgbm90IGJlIGluY2x1ZGVkIGFuZCB0aGUgYXBwbGljYXRpb24gY29kZSB3aWxsIA0KICAgYmUgYmFzZWQgb24gZGlyZWN0IGFjY2VzcyB0byBwZXJpcGhlcmFscyByZWdpc3RlcnMgDQogICAqLw0KICAvKiNkZWZpbmUgVVNFX0hBTF9EUklWRVIgKi8NCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQovKioNCiAgKiBAYnJpZWYgQ01TSVMgRGV2aWNlIHZlcnNpb24gbnVtYmVyIFYyLjMuMw0KICAqLw0KI2RlZmluZSBfX1NUTTMyRjBfREVWSUNFX1ZFUlNJT05fTUFJTiAgICgweDAyKSAvKiE8IFszMToyNF0gbWFpbiB2ZXJzaW9uICovDQojZGVmaW5lIF9fU1RNMzJGMF9ERVZJQ0VfVkVSU0lPTl9TVUIxICAgKDB4MDMpIC8qITwgWzIzOjE2XSBzdWIxIHZlcnNpb24gKi8NCiNkZWZpbmUgX19TVE0zMkYwX0RFVklDRV9WRVJTSU9OX1NVQjIgICAoMHgwMykgLyohPCBbMTU6OF0gIHN1YjIgdmVyc2lvbiAqLw0KI2RlZmluZSBfX1NUTTMyRjBfREVWSUNFX1ZFUlNJT05fUkMgICAgICgweDAwKSAvKiE8IFs3OjBdICByZWxlYXNlIGNhbmRpZGF0ZSAqLyANCiNkZWZpbmUgX19TVE0zMkYwX0RFVklDRV9WRVJTSU9OICAgICAgICAoKF9fU1RNMzJGMF9ERVZJQ0VfVkVSU0lPTl9NQUlOIDw8IDI0KVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMF9ERVZJQ0VfVkVSU0lPTl9TVUIxIDw8IDE2KVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMF9ERVZJQ0VfVkVSU0lPTl9TVUIyIDw8IDggKVwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8KF9fU1RNMzJGMF9ERVZJQ0VfVkVSU0lPTl9SQykpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICANCi8qKg0KICAqIEB9DQogICovDQoNCi8qKiBAYWRkdG9ncm91cCBEZXZpY2VfSW5jbHVkZWQNCiAgKiBAew0KICAqLw0KDQojaWYgZGVmaW5lZChTVE0zMkYwMzB4NikNCiAgI2luY2x1ZGUgInN0bTMyZjAzMHg2LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjAzMHg4KQ0KICAjaW5jbHVkZSAic3RtMzJmMDMweDguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMDMxeDYpDQogICNpbmNsdWRlICJzdG0zMmYwMzF4Ni5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYwMzh4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjAzOHh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjA0Mng2KQ0KICAjaW5jbHVkZSAic3RtMzJmMDQyeDYuaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMDQ4eHgpDQogICNpbmNsdWRlICJzdG0zMmYwNDh4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYwNTF4OCkNCiAgI2luY2x1ZGUgInN0bTMyZjA1MXg4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjA1OHh4KQ0KICAjaW5jbHVkZSAic3RtMzJmMDU4eHguaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMDcweDYpDQogICNpbmNsdWRlICJzdG0zMmYwNzB4Ni5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYwNzB4QikNCiAgI2luY2x1ZGUgInN0bTMyZjA3MHhiLmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjA3MXhCKQ0KICAjaW5jbHVkZSAic3RtMzJmMDcxeGIuaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMDcyeEIpDQogICNpbmNsdWRlICJzdG0zMmYwNzJ4Yi5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYwNzh4eCkNCiAgI2luY2x1ZGUgInN0bTMyZjA3OHh4LmgiDQojZWxpZiBkZWZpbmVkKFNUTTMyRjA5MXhDKQ0KICAjaW5jbHVkZSAic3RtMzJmMDkxeGMuaCINCiNlbGlmIGRlZmluZWQoU1RNMzJGMDk4eHgpDQogICNpbmNsdWRlICJzdG0zMmYwOTh4eC5oIg0KI2VsaWYgZGVmaW5lZChTVE0zMkYwMzB4QykNCiAgI2luY2x1ZGUgInN0bTMyZjAzMHhjLmgiICAgIA0KI2Vsc2UNCiAjZXJyb3IgIlBsZWFzZSBzZWxlY3QgZmlyc3QgdGhlIHRhcmdldCBTVE0zMkYweHggZGV2aWNlIHVzZWQgaW4geW91ciBhcHBsaWNhdGlvbiAoaW4gc3RtMzJmMHh4LmggZmlsZSkiDQojZW5kaWYNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KLyoqIEBhZGR0b2dyb3VwIEV4cG9ydGVkX3R5cGVzDQogICogQHsNCiAgKi8gDQp0eXBlZGVmIGVudW0gDQp7DQogIFJFU0VUID0gMCwgDQogIFNFVCA9ICFSRVNFVA0KfSBGbGFnU3RhdHVzLCBJVFN0YXR1czsNCg0KdHlwZWRlZiBlbnVtIA0Kew0KICBESVNBQkxFID0gMCwgDQogIEVOQUJMRSA9ICFESVNBQkxFDQp9IEZ1bmN0aW9uYWxTdGF0ZTsNCiNkZWZpbmUgSVNfRlVOQ1RJT05BTF9TVEFURShTVEFURSkgKCgoU1RBVEUpID09IERJU0FCTEUpIHx8ICgoU1RBVEUpID09IEVOQUJMRSkpDQoNCnR5cGVkZWYgZW51bSANCnsNCiAgRVJST1IgPSAwLCANCiAgU1VDQ0VTUyA9ICFFUlJPUg0KfSBFcnJvclN0YXR1czsNCg0KLyoqDQogICogQH0NCiAgKi8NCg0KDQovKiogQGFkZHRvZ3JvdXAgRXhwb3J0ZWRfbWFjcm9zDQogICogQHsNCiAgKi8NCiNkZWZpbmUgU0VUX0JJVChSRUcsIEJJVCkgICAgICgoUkVHKSB8PSAoQklUKSkNCg0KI2RlZmluZSBDTEVBUl9CSVQoUkVHLCBCSVQpICAgKChSRUcpICY9IH4oQklUKSkNCg0KI2RlZmluZSBSRUFEX0JJVChSRUcsIEJJVCkgICAgKChSRUcpICYgKEJJVCkpDQoNCiNkZWZpbmUgQ0xFQVJfUkVHKFJFRykgICAgICAgICgoUkVHKSA9ICgweDApKQ0KDQojZGVmaW5lIFdSSVRFX1JFRyhSRUcsIFZBTCkgICAoKFJFRykgPSAoVkFMKSkNCg0KI2RlZmluZSBSRUFEX1JFRyhSRUcpICAgICAgICAgKChSRUcpKQ0KDQojZGVmaW5lIE1PRElGWV9SRUcoUkVHLCBDTEVBUk1BU0ssIFNFVE1BU0spICBXUklURV9SRUcoKFJFRyksICgoKFJFQURfUkVHKFJFRykpICYgKH4oQ0xFQVJNQVNLKSkpIHwgKFNFVE1BU0spKSkNCg0KDQovKioNCiAgKiBAfQ0KICAqLw0KDQojaWYgZGVmaW5lZCAoVVNFX0hBTF9EUklWRVIpDQogI2luY2x1ZGUgInN0bTMyZjB4eF9oYWwuaCINCiNlbmRpZiAvKiBVU0VfSEFMX0RSSVZFUiAqLw0KDQoNCiNpZmRlZiBfX2NwbHVzcGx1cw0KfQ0KI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovDQoNCiNlbmRpZiAvKiBfX1NUTTMyRjB4eF9IICovDQovKioNCiAgKiBAfQ0KICAqLw0KDQovKioNCiAgKiBAfQ0KICAqLw0KICANCg0KDQoNCi8qKioqKioqKioqKioqKioqKioqKioqKiogKEMpIENPUFlSSUdIVCBTVE1pY3JvZWxlY3Ryb25pY3MgKioqKipFTkQgT0YgRklMRSoqKiovDQo=