LyoKICogKEMpIENvcHlyaWdodCAyMDAyCiAqIERhbmllbCBFbmdzdHL2bSwgT21pY3JvbiBDZXRpIEFCIDxkYW5pZWxAb21pY3Jvbi5zZT4uCiAqCiAqIFNlZSBmaWxlIENSRURJVFMgZm9yIGxpc3Qgb2YgcGVvcGxlIHdobyBjb250cmlidXRlZCB0byB0aGlzCiAqIHByb2plY3QuCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKICogdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCiAqCiAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAogKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCiAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAqCiAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCiAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sCiAqIE1BIDAyMTExLTEzMDcgVVNBCiAqLwoKLyogbm93IHNldHVwIHRoZSBHZW5lcmFsIHB1cnBvc2UgYnVzIHRvIGdpdmUgdXMgYWNjZXNzIHRvIHRoZSBMRURzLgogKiBXZSBjYW4gdGhlbiB1c2UgdGhlIGxlZHMgdG8gZGlzcGxheSBzdGF0dXMgaW5mb3JtYXRpb24uCiAqLwoKc2M1MjBfY2RwX3JlZ2lzdGVyczoKLyogc2l6ZSAgICBvZmZzZXQgICAgICAgIHZhbHVlICovCi53b3JkIDEgOyAud29yZCAweDA0MCA7IC5sb25nIDB4MDAgICAgICAgLyogU0RSQU0gYnVmZmVyIGNvbnRyb2wgKi8KLndvcmQgMiA7IC53b3JkIDB4YzA4IDsgLmxvbmcgMHgwMDAxICAgICAvKiBHUCBDUyBvZmZzZXQgKi8KLndvcmQgMiA7IC53b3JkIDB4YzA5IDsgLmxvbmcgMHgwMDAzICAgICAvKiBHUCBDUyB3aWR0aCAqLwoud29yZCAyIDsgLndvcmQgMHhjMGEgOyAubG9uZyAweDAwMDEgICAgIC8qIEdQIENTIHdpZHRoICovCi53b3JkIDIgOyAud29yZCAweGMwYiA7IC5sb25nIDB4MDAwMyAgICAgLyogR1AgUkQgcHVsc2Ugd2lkdGggKi8KLndvcmQgMiA7IC53b3JkIDB4YzBjIDsgLmxvbmcgMHgwMDAxICAgICAvKiBHUCBSRCBvZmZzZSAqLwoud29yZCAyIDsgLndvcmQgMHhjMGQgOyAubG9uZyAweDAwMDMgICAgIC8qIEdQIFdSIHB1bHNlIHdpZHRoICovCi53b3JkIDIgOyAud29yZCAweGMwZSA7IC5sb25nIDB4MDAwMSAgICAgLyogR1AgV1Igb2Zmc2V0ICovCi53b3JkIDIgOyAud29yZCAweGMyYyA7IC5sb25nIDB4MDAwMCAgICAgLyogR1BJTyBkaXJlY3Rpb25yZWcgKi8KLndvcmQgMiA7IC53b3JkIDB4YzJhIDsgLmxvbmcgMHgwMDAwICAgICAvKiBHUElPIGRpcmVjdGlvbnJlZyAqLwoud29yZCAyIDsgLndvcmQgMHhjMjIgOyAubG9uZyAweGZmZmYgICAgIC8qIEdQSU8gcGluIGZ1bmN0aW9uIDMxLTE2IHJlZyAqLwoud29yZCAyIDsgLndvcmQgMHhjMjAgOyAubG9uZyAweGZmZmYgICAgIC8qIEdQSU8gcGluIGZ1bmN0aW9uIDE1LTAgcmVnICovCi53b3JkIDIgOyAud29yZCAweDBjNCA7IC5sb25nIDB4MjgwMDA2ODAgLyogUEFSIDE1IGZvciBhY2Nlc3MgdG8gbGVkIDY4MCAqLwoud29yZCAwIDsgLndvcmQgMHgwMDAgOyAubG9uZyAweDAwCgovKiBib2FyZCBlYXJseSBpbnRpYWxpemF0aW9uICovCi5nbG9ibCBlYXJseV9ib2FyZF9pbml0CmVhcmx5X2JvYXJkX2luaXQ6Cgltb3ZsICAgICRzYzUyMF9jZHBfcmVnaXN0ZXJzLCVlc2kKaW5pdF9sb29wOgoJbW92bCAgICAkMHhmZmZlZjAwMCwlZWRpICAgICAvKiBNTUNSIGJhc2UgdG8gZWRpICovCgltb3Z3CSglZXNpKSwgJWJ4ICAgICAgICAgIC8qIGxvYWQgc2l6ZXIgdG8gYnggKi8KCWNtcHcJJDAsICVieCAgICAgICAgICAgICAgLyogaWYgc2llIGlzIDAgd2UncmUgZG9uZSAqLwoJamUJZG9uZQoJeG9ybAklZWR4LCVlZHgKCW1vdncJMiglZXNpKSwgJWR4ICAgICAgICAvKiBsb2FkIE1NQ1Igb2Zmc2V0IHRvIGR4ICovCglhZGRsCSVlZHgsICVlZGkgICAgICAgICAgLyogYWRkIG9mZnNldCB0byBiYXNlIGluIGVkaSAqLwoJbW92bAk0KCVlc2kpLCAlZWF4ICAgICAgIC8qIGxvYWQgdmFsdWUgaW4gZWF4ICovCgljbXB3CSQxLCAlYngKCWplCWJ5dGUgICAgICAgICAgICAgICAgIC8qIGJ5dGUgb3A/ICovCgljbXB3CSQyLCAlYngKCWplCXdvcmQgICAgICAgICAgICAgICAgIC8qIHdvcmQgb3A/ICovCgltb3ZsCSVlYXgsICglZWRpKSAgICAgICAgIC8qIG11c3QgYmUgbG9uZywgdGhlbiAqLwoJam1wCW5leHQKYnl0ZTogICBtb3ZiICAgICVhbCwoJWVkaSkKCWptcAluZXh0CndvcmQ6CW1vdncJJWF4LCglZWRpKQpuZXh0OglhZGRsCSQ4LCAlZXNpICAgICAgICAgICAgIC8qIGFkdmFuY2UgZXNpICovCglqbXAJaW5pdF9sb29wCgoJLyogdGhlIGxlZHMgYWQgMHg4MCBhbmQgMHg2ODAgc2hvdWxkIG5vdyB3b3JrICovCmRvbmU6ICAgbW92YgkkMHg4OCwgJWFsCglvdXQJJWFsLCAkMHg4MAoJbW92dwkkMHg2ODAsICVkeAoJb3V0CSVhbCwgJWR4CgoJam1wIAkqJWVicAkJICAgICAvKiByZXR1cm4gdG8gY2FsbGVyICovCgoKLmdsb2JsIF9fc2hvd19ib290X3Byb2dyZXNzCl9fc2hvd19ib290X3Byb2dyZXNzOgoJb3V0CSVhbCwgJDB4ODAKCXhjaGcJJWFsLCAlYWgKCW1vdncJJDB4NjgwLCAlZHgKCW91dAklYWwsICVkeAoJam1wCSolZWJwCg==