IC8qCiAqIE1vc3Qgb2YgdGhpcyB0YWtlbiBmcm9tIFJlZGJvb3QgaGFsX3BsYXRmb3JtX3NldHVwLmggd2l0aCBjbGVhbnVwCiAqCiAqIE5PVEU6IEkgaGF2ZW4ndCBjbGVhbiB0aGlzIHVwIGNvbnNpZGVyYWJseSwganVzdCBlbm91Z2ggdG8gZ2V0IGl0CiAqIHJ1bm5pbmcuIFNlZSBoYWxfcGxhdGZvcm1fc2V0dXAuaCBmb3IgdGhlIHNvdXJjZS4gU2VlCiAqIGJvYXJkL2NyYWRsZS9sb3dsZXZlbF9pbml0LlMgZm9yIGFub3RoZXIgUFhBMjUwIHNldHVwIHRoYXQgaXMKICogbXVjaCBjbGVhbmVyLgogKgogKiBTZWUgZmlsZSBDUkVESVRTIGZvciBsaXN0IG9mIHBlb3BsZSB3aG8gY29udHJpYnV0ZWQgdG8gdGhpcwogKiBwcm9qZWN0LgogKgogKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCiAqIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQogKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLAogKiBNQSAwMjExMS0xMzA3IFVTQQogKi8KCiNpbmNsdWRlIDxjb25maWcuaD4KI2luY2x1ZGUgPHZlcnNpb24uaD4KI2luY2x1ZGUgPGFzbS9hcmNoL3B4YS1yZWdzLmg+CgpEUkFNX1NJWkU6ICAubG9uZyAgIENPTkZJR19TWVNfRFJBTV9TSVpFCgovKiB3YWl0IGZvciBjb3Byb2Nlc3NvciB3cml0ZSBjb21wbGV0ZSAqLwoJLm1hY3JvIENQV0FJVCByZWcKCW1yYyAgcDE1LDAsXHJlZyxjMixjMCwwCgltb3YgIFxyZWcsXHJlZwoJc3ViICBwYyxwYywjNAoJLmVuZG0KCgouZ2xvYmwgbG93bGV2ZWxfaW5pdApsb3dsZXZlbF9pbml0OgoKCW1vdgkgcjEwLCBscgoKCS8qIFNldCB1cCBHUElPIHBpbnMgZmlyc3QgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KCglsZHIJcjAsPUdQU1IwCglsZHIJcjEsPUNPTkZJR19TWVNfR1BTUjBfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R1BTUjEKCWxkcglyMSw9Q09ORklHX1NZU19HUFNSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUFNSMgoJbGRyCXIxLD1DT05GSUdfU1lTX0dQU1IyX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdQQ1IwCglsZHIJcjEsPUNPTkZJR19TWVNfR1BDUjBfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R1BDUjEKCWxkcglyMSw9Q09ORklHX1NZU19HUENSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUENSMgoJbGRyCXIxLD1DT05GSUdfU1lTX0dQQ1IyX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdQRFIwCglsZHIJcjEsPUNPTkZJR19TWVNfR1BEUjBfVkFMCglzdHIJcjEsW3IwXQoKCWxkcglyMCw9R1BEUjEKCWxkcglyMSw9Q09ORklHX1NZU19HUERSMV9WQUwKCXN0cglyMSxbcjBdCgoJbGRyCXIwLD1HUERSMgoJbGRyCXIxLD1DT05GSUdfU1lTX0dQRFIyX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIwX0wKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMF9MX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIwX1UKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMF9VX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIxX0wKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMV9MX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIxX1UKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMV9VX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIyX0wKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMl9MX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPUdBRlIyX1UKCWxkcglyMSw9Q09ORklHX1NZU19HQUZSMl9VX1ZBTAoJc3RyCXIxLFtyMF0KCglsZHIJcjAsPVBTU1IJCS8qIGVuYWJsZSBHUElPIHBpbnMgKi8KCWxkcglyMSw9Q09ORklHX1NZU19QU1NSX1ZBTAoJc3RyCXIxLFtyMF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBFbmFibGUgbWVtb3J5IGludGVyZmFjZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiBUaGUgc2VxdWVuY2UgYmVsb3cgaXMgYmFzZWQgb24gdGhlIHJlY29tbWVuZGVkIGluaXQgc3RlcHMgICAgICAgICovCgkvKiBkZXRhaWxlZCBpbiB0aGUgSW50ZWwgUFhBMjUwIE9wZXJhdGluZyBTeXN0ZW1zIERldmVsb3BlcnMgR3VpZGUsICovCgkvKiBDaGFwdGVyIDEwLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAxOiBXYWl0IGZvciBhdCBsZWFzdCAyMDAgbWljcm9zZWRvbmRzIHRvIGFsbG93IGludGVybmFsICAgICAqLwoJLyogICAgICAgICBjbG9ja3MgdG8gc2V0dGxlLiBPbmx5IG5lY2Vzc2FyeSBhZnRlciBoYXJkIHJlc2V0Li4uICAgICAqLwoJLyogICAgICAgICBGSVhNRTogY2FuIGJlIG9wdGltaXplZCBsYXRlciAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCWxkcglyMywgPU9TQ1IJCS8qIHJlc2V0IHRoZSBPUyBUaW1lciBDb3VudCB0byB6ZXJvICovCgltb3YJcjIsICMwCglzdHIJcjIsIFtyM10KCWxkcglyNCwgPTB4MzAwCQkvKiByZWFsbHkgMHgyRTEgaXMgYWJvdXQgMjAwdXNlYywgICAqLwoJCQkJCS8qIHNvIDB4MzAwIHNob3VsZCBiZSBwbGVudHkgICAgICAgICovCjE6CglsZHIJcjIsIFtyM10KCWNtcAlyNCwgcjIKCWJndAkxYgoKbWVtX2luaXQ6CgoJbGRyCXIxLD1NRU1DX0JBU0UJCS8qIGdldCBtZW1vcnkgY29udHJvbGxlciBiYXNlIGFkZHIuICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAyYTogSW5pdGlhbGl6ZSBBc3luY2hyb25vdXMgc3RhdGljIG1lbW9yeSBjb250cm9sbGVyICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCS8qIE1TQyByZWdpc3RlcnM6IHRpbWluZywgYnVzIHdpZHRoLCBtZW0gdHlwZSAgICAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiBNU0MwOiBuQ1MoMCwxKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DT05GSUdfU1lTX01TQzBfVkFMCglzdHIgICAgIHIyLFtyMSwgI01TQzBfT0ZGU0VUXQoJbGRyICAgICByMixbcjEsICNNU0MwX09GRlNFVF0JLyogcmVhZCBiYWNrIHRvIGVuc3VyZSBkYXRhIGxhdGNoZXMgKi8KCgkvKiBNU0MxOiBuQ1MoMiwzKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DT05GSUdfU1lTX01TQzFfVkFMCglzdHIgICAgIHIyLFtyMSwgI01TQzFfT0ZGU0VUXQoJbGRyICAgICByMixbcjEsICNNU0MxX09GRlNFVF0KCgkvKiBNU0MyOiBuQ1MoNCw1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DT05GSUdfU1lTX01TQzJfVkFMCglzdHIgICAgIHIyLFtyMSwgI01TQzJfT0ZGU0VUXQoJbGRyICAgICByMixbcjEsICNNU0MyX09GRlNFVF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDJiOiBJbml0aWFsaXplIENhcmQgSW50ZXJmYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogTUVDUjogTWVtb3J5IEV4cGFuc2lvbiBDYXJkIFJlZ2lzdGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q09ORklHX1NZU19NRUNSX1ZBTAoJc3RyICAgICByMixbcjEsICNNRUNSX09GRlNFVF0KCWxkcglyMixbcjEsICNNRUNSX09GRlNFVF0KCgkvKiBNQ01FTTA6IENhcmQgSW50ZXJmYWNlIHNsb3QgMCB0aW1pbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DT05GSUdfU1lTX01DTUVNMF9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTUNNRU0wX09GRlNFVF0KCWxkcglyMixbcjEsICNNQ01FTTBfT0ZGU0VUXQoKCS8qIE1DTUVNMTogQ2FyZCBJbnRlcmZhY2Ugc2xvdCAxIHRpbWluZyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNPTkZJR19TWVNfTUNNRU0xX1ZBTAoJc3RyICAgICByMixbcjEsICNNQ01FTTFfT0ZGU0VUXQoJbGRyCXIyLFtyMSwgI01DTUVNMV9PRkZTRVRdCgoJLyogTUNBVFQwOiBDYXJkIEludGVyZmFjZSBBdHRyaWJ1dGUgU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q09ORklHX1NZU19NQ0FUVDBfVkFMCglzdHIgICAgIHIyLFtyMSwgI01DQVRUMF9PRkZTRVRdCglsZHIJcjIsW3IxLCAjTUNBVFQwX09GRlNFVF0KCgkvKiBNQ0FUVDE6IENhcmQgSW50ZXJmYWNlIEF0dHJpYnV0ZSBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICovCglsZHIgICAgIHIyLD1DT05GSUdfU1lTX01DQVRUMV9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTUNBVFQxX09GRlNFVF0KCWxkcglyMixbcjEsICNNQ0FUVDFfT0ZGU0VUXQoKCS8qIE1DSU8wOiBDYXJkIEludGVyZmFjZSBJL08gU3BhY2UgVGltaW5nLCBzbG90IDAgICAgICAgICAgICAgICAgICAgKi8KCWxkciAgICAgcjIsPUNPTkZJR19TWVNfTUNJTzBfVkFMCglzdHIgICAgIHIyLFtyMSwgI01DSU8wX09GRlNFVF0KCWxkcglyMixbcjEsICNNQ0lPMF9PRkZTRVRdCgoJLyogTUNJTzE6IENhcmQgSW50ZXJmYWNlIEkvTyBTcGFjZSBUaW1pbmcsIHNsb3QgMSAgICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMiw9Q09ORklHX1NZU19NQ0lPMV9WQUwKCXN0ciAgICAgcjIsW3IxLCAjTUNJTzFfT0ZGU0VUXQoJbGRyCXIyLFtyMSwgI01DSU8xX09GRlNFVF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDJjOiBXcml0ZSBGTFlDTkZHICBGSVhNRTogd2hhdCdzIHRoYXQ/Pz8gICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCAyZDogSW5pdGlhbGl6ZSBUaW1pbmcgZm9yIFN5bmMgTWVtb3J5IChTRENMSzApICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCUAgZ2V0IHRoZSBtZHJlZnIgc2V0dGluZ3MKCWxkciAgICAgcjQsPUNPTkZJR19TWVNfTURSRUZSX1ZBTAoKCUAgd3JpdGUgYmFjayBtZHJlZnIKCXN0ciAgICAgcjQsW3IxLCAjTURSRUZSX09GRlNFVF0KCWxkciAgICAgcjQsW3IxLCAjTURSRUZSX09GRlNFVF0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBTdGVwIDM6IEluaXRpYWxpemUgU3luY2hyb25vdXMgU3RhdGljIE1lbW9yeSAoRmxhc2gvUGVyaXBoZXJhbHMpICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogSW5pdGlhbGl6ZSBTWENORkcgcmVnaXN0ZXIuIEFzc2VydCB0aGUgZW5hYmxlIGJpdHMgICAgICAgICAgICAgICAqLwoKCS8qIFdyaXRlIFNYTVJTIHRvIGNhdXNlIGFuIE1SUyBjb21tYW5kIHRvIGFsbCBlbmFibGVkIGJhbmtzIG9mICAgICAgKi8KCS8qIHN5bmNocm9ub3VzIHN0YXRpYyBtZW1vcnkuIE5vdGUgdGhhdCBTWExDUiBuZWVkIG5vdCBiZSB3cml0dGVuICAgKi8KCS8qIGF0IHRoaXMgdGltZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCgkvKiBGSVhNRTogd2UgdXNlIGFzeW5jIG1vZGUgZm9yIG5vdyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogU3RlcCA0OiBJbml0aWFsaXplIFNEUkFNICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKCUAgc2V0IEsxUlVOIGZvciBiYW5rIDAKCUAKCW9yciAgIHI0LCAgcjQsICAjTURSRUZSX0sxUlVOCgoJQCB3cml0ZSBiYWNrIG1kcmVmcgoJQAoJc3RyICAgICByNCwgIFtyMSwgI01EUkVGUl9PRkZTRVRdCglsZHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KCglAIGRlYXNzZXJ0IFNMRlJTSAoJQAoJYmljICAgICByNCwgIHI0LCAgI01EUkVGUl9TTEZSU0gKCglAIHdyaXRlIGJhY2sgbWRyZWZyCglACglzdHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KCWxkciAgICAgcjQsICBbcjEsICNNRFJFRlJfT0ZGU0VUXQoKCUAgYXNzZXJ0IEUxUElOCglAIGlmIEUwUElOIGlzIGFsc28gdXNlZDoJICMoTURSRUZSX0UxUElOfE1EUkVGUl9FMFBJTikKCW9yciAgICAgcjQsICByNCwgIyhNRFJFRlJfRTFQSU4pCgoJQCB3cml0ZSBiYWNrIG1kcmVmcgoJQAoJc3RyICAgICByNCwgIFtyMSwgI01EUkVGUl9PRkZTRVRdCglsZHIgICAgIHI0LCAgW3IxLCAjTURSRUZSX09GRlNFVF0KCW5vcAoJbm9wCgoJLyogU3RlcCA0ZDoJCQkJCQkJKi8KCS8qIGZldGNoIHBsYXRmb3JtIHZhbHVlIG9mIG1kY25mZwkJCQkqLwoJQAoJbGRyICAgICByMiwgID1DT05GSUdfU1lTX01EQ05GR19WQUwKCglAIGRpc2FibGUgYWxsIHNkcmFtIGJhbmtzCglACgliaWMgICAgIHIyLCAgcjIsICAjKE1EQ05GR19ERTAgfCBNRENORkdfREUxKQoJYmljICAgICByMiwgIHIyLCAgIyhNRENORkdfREUyIHwgTURDTkZHX0RFMykKCglAIHByb2dyYW0gYmFua3MgMC8xIGZvciBidXMgd2lkdGgKCUAKCWJpYyAgIHIyLCAgcjIsICAjTURDTkZHX0RXSUQwICAgICAgQDA9MzItYml0CgoJQCB3cml0ZSBpbml0aWFsIHZhbHVlIG9mIG1kY25mZywgdy9vIGVuYWJsaW5nIHNkcmFtIGJhbmtzCglACglzdHIgICAgIHIyLCAgW3IxLCAjTURDTkZHX09GRlNFVF0KCgkvKiBTdGVwIDRlOiBXYWl0IGZvciB0aGUgY2xvY2sgdG8gdGhlIFNEUkFNcyB0byBzdGFiaWxpemUsICAgICAgICAgICovCgkvKiAgICAgICAgICAxMDAuLjIwMCC1c2VjLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgoJbGRyCXIzLCA9T1NDUgkJLyogcmVzZXQgdGhlIE9TIFRpbWVyIENvdW50IHRvIHplcm8gKi8KCW1vdglyMiwgIzAKCXN0cglyMiwgW3IzXQoJbGRyCXI0LCA9MHgzMDAJCS8qIHJlYWxseSAweDJFMSBpcyBhYm91dCAyMDB1c2VjLCAgICovCgkJCQkJLyogc28gMHgzMDAgc2hvdWxkIGJlIHBsZW50eSAgICAgICAgKi8KMToKCWxkcglyMiwgW3IzXQoJY21wCXI0LCByMgoJYmd0CTFiCgoKCS8qIFN0ZXAgNGY6IFRyaWdnZXIgYSBudW1iZXIgKHVzdWFsbHkgOCkgcmVmcmVzaCBjeWNsZXMgYnkgICAgICAgICAgKi8KCS8qICAgICAgICAgIGF0dGVtcHRpbmcgbm9uLWJ1cnN0IHJlYWQgb3Igd3JpdGUgYWNjZXNzZXMgdG8gZGlzYWJsZWQgKi8KCS8qICAgICAgICAgIFNEUkFNLCBhcyBjb21tb25seSBzcGVjaWZpZWQgaW4gdGhlIHBvd2VyIHVwIHNlcXVlbmNlICAgKi8KCS8qICAgICAgICAgIGRvY3VtZW50ZWQgaW4gU0RSQU0gZGF0YSBzaGVldHMuIFRoZSBhZGRyZXNzKGVzKSB1c2VkICAgKi8KCS8qICAgICAgICAgIGZvciB0aGlzIHB1cnBvc2UgbXVzdCBub3QgYmUgY2FjaGVhYmxlLiAgICAgICAgICAgICAgICAgKi8KCglsZHIJcjMsCT1DT05GSUdfU1lTX0RSQU1fQkFTRQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoJc3RyCXIyLAlbcjNdCglzdHIJcjIsCVtyM10KCXN0cglyMiwJW3IzXQoKCgkvKiBTdGVwIDRnOiBXcml0ZSBNRENORkcgd2l0aCBlbmFibGUgYml0cyBhc3NlcnRlZCAgICAgICAgICAgICAgICAgICovCgkvKiBnZXQgbWVtb3J5IGNvbnRyb2xsZXIgYmFzZSBhZGRyZXNzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIxLCAgPU1FTUNfQkFTRQoKCUBmZXRjaCBjdXJyZW50IG1kY25mZyB2YWx1ZQoJQAoJbGRyICAgICByMywgIFtyMSwgI01EQ05GR19PRkZTRVRdCgoJQGVuYWJsZSBzZHJhbSBiYW5rIDAgaWYgaW5zdGFsbGVkIChtdXN0IGRvIGZvciBhbnkgcG9wdWxhdGVkIGJhbmspCglACglvcnIgICAgIHIzLCAgcjMsICAjTURDTkZHX0RFMAoKCUB3cml0ZSBiYWNrIG1kY25mZywgZW5hYmxpbmcgdGhlIHNkcmFtIGJhbmsocykKCUAKCXN0ciAgICAgcjMsICBbcjEsICNNRENORkdfT0ZGU0VUXQoKCS8qIFN0ZXAgNGg6IFdyaXRlIE1ETVJTLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KCglsZHIgICAgIHIyLAk9Q09ORklHX1NZU19NRE1SU19WQUwKCXN0ciAgICAgcjIsCVtyMSwgI01ETVJTX09GRlNFVF0KCgoJLyogV2UgYXJlIGZpbmlzaGVkIHdpdGggSW50ZWwncyBtZW1vcnkgY29udHJvbGxlciBpbml0aWFsaXNhdGlvbiAgICAqLwoKCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiBEaXNhYmxlIChtYXNrKSBhbGwgaW50ZXJydXB0cyBhdCBpbnRlcnJ1cHQgY29udHJvbGxlciAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgppbml0aXJxczoKCW1vdiAgICAgcjEsICMwCQkvKiBjbGVhciBpbnQuIGxldmVsIHJlZ2lzdGVyIChJUlEsIG5vdCBGSVEpICovCglsZHIgICAgIHIyLCAgPUlDTFIKCXN0ciAgICAgcjEsICBbcjJdCgoJbGRyICAgICByMSwgID1DT05GSUdfU1lTX0lDTVJfVkFMIC8qIG1hc2sgYWxsIGludGVycnVwdHMgYXQgdGhlIGNvbnRyb2xsZXIgKi8KCWxkciAgICAgcjIsICA9SUNNUgoJc3RyICAgICByMSwgIFtyMl0KCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogQ2xvY2sgaW5pdGlhbGlzYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoKaW5pdGNsa3M6CgoJLyogRGlzYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9ja3MsIGFuZCBzZXQgdGhlIGNvcmUgY2xvY2sgZnJlcXVlbmN5ICAqLwoJLyogKGhhcmQtY29kaW5nIGF0IDM5OC4xMk1IeiBmb3Igbm93KS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwoJLyogVHVybiBPZmYgQUxMIG9uLWNoaXAgcGVyaXBoZXJhbCBjbG9ja3MgZm9yIHJlLWNvbmZpZ3VyYXRpb24gICAgICAqLwoJLyogTm90ZTogU2VlIGxhYmVsICdFTkFCTEVDTEtTJyBmb3IgdGhlIHJlLWVuYWJsaW5nICAgICAgICAgICAgICAgICAqLwoJbGRyICAgICByMSwgID1DS0VOCgltb3YgICAgIHIyLCAgIzAKCXN0ciAgICAgcjIsICBbcjFdCgoKCS8qIGRlZmF1bHQgdmFsdWUJCQkJCQkgICAgKi8KCWxkciAgICAgcjIsID0oQ0NDUl9MMjd8Q0NDUl9NMnxDQ0NSX04xMCkgIC8qIERFRkFVTFQ6IHsyMDAvMjAwLzEwMH0gKi8KCgkvKiAuLi4gYW5kIHdyaXRlIHRoZSBjb3JlIGNsb2NrIGNvbmZpZyByZWdpc3RlciAgICAgICAgICAgICAgICAgICAgICovCglsZHIgICAgIHIxLCAgPUNDQ1IKCXN0ciAgICAgcjIsICBbcjFdCgojaWZkZWYgUlRDCgkvKiBlbmFibGUgdGhlIDMyS2h6IG9zY2lsbGF0b3IgZm9yIFJUQyBhbmQgUG93ZXJNYW5hZ2VyICAgICAgICAgICAgICovCgoJbGRyICAgICByMSwgID1PU0NDCgltb3YgICAgIHIyLCAgI09TQ0NfT09OCglzdHIgICAgIHIyLCAgW3IxXQoKCS8qIE5PVEU6ICBzcGluIGhlcmUgdW50aWwgT1NDQy5PT0sgZ2V0IHNldCwgbWVhbmluZyB0aGUgUExMICAgICAgICAgKi8KCS8qIGhhcyBzZXR0bGVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KNjA6CglsZHIgICAgIHIyLCBbcjFdCglhbmRzICAgIHIyLCByMiwgIzEKCWJlcSAgICAgNjBiCiNlbmRpZgoKCUAgVHVybiBvbiBuZWVkZWQgY2xvY2tzCglACnRlc3Q6CglsZHIgICAgIHIxLCAgPUNLRU4KCWxkciAgICAgcjIsICA9Q09ORklHX1NZU19DS0VOX1ZBTAoJc3RyICAgICByMiwgIFtyMV0KCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgkvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgoJLyogU2F2ZSBTRFJBTSBzaXplID8qLwoJbGRyCXIxLCA9RFJBTV9TSVpFCglzdHIJcjgsIFtyMV0KCgkvKiBGSVhNRSAqLwoKI2RlZmluZSBOT0RFQlVHCiNpZmRlZiBOT0RFQlVHCgkvKkRpc2FibGUgc29mdHdhcmUgYW5kIGRhdGEgYnJlYWtwb2ludHMgKi8KCW1vdglyMCwjMAoJbWNyCXAxNSwwLHIwLGMxNCxjOCwwICAvKiBpYmNyMCAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjOSwwICAvKiBpYmNyMSAqLwoJbWNyCXAxNSwwLHIwLGMxNCxjNCwwICAvKiBkYmNvbiAqLwoKCS8qRW5hYmxlIGFsbCBkZWJ1ZyBmdW5jdGlvbmFsaXR5ICovCgltb3YJcjAsIzB4ODAwMDAwMDAKCW1jcglwMTQsMCxyMCxjMTAsYzAsMCAgLyogZGNzciAqLwoKI2VuZGlmCgoJLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwoJLyogRW5kIGxvd2xldmVsX2luaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCgkvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCgplbmRsb3dsZXZlbF9pbml0OgoKCW1vdiAgICAgcGMsIGxyCg==