ZGlmZiAtLWdpdCBhL0FSTS5DTVNJUy5wZHNjIGIvQVJNLkNNU0lTLnBkc2MKaW5kZXggMDg2MzYyOS4uYTlkYjJjZiAxMDA2NDQKLS0tIGEvQVJNLkNNU0lTLnBkc2MKKysrIGIvQVJNLkNNU0lTLnBkc2MKQEAgLTgsNiArOCwxNSBAQAogICA8dXJsPmh0dHA6Ly93d3cua2VpbC5jb20vcGFjay88L3VybD4KIAogICA8cmVsZWFzZXM+CisgICAgPHJlbGVhc2UgdmVyc2lvbj0iNS43LjAtZGV2MiI+CisgICAgICBBY3RpdmUgZGV2ZWxvcG1lbnQuLi4KKyAgICAgIENNU0lTLUNvcmUoTSk6CisgICAgICAgIC0gQ29ydGV4LU01NSBjcHUgc3VwcG9ydAorICAgICAgICAtIENvcnRleC1NNTUgY29yZSBoZWFkZXIgZmlsZQorICAgICAgICAtIFBNVSBoZWFkZXIgZmlsZSAocGxhY2UgaG9sZGVyKQorICAgICAgRGV2aWNlczoKKyAgICAgICAgLSBBUk1DTTU1IGRldmljZQorICAgIDwvcmVsZWFzZT4KICAgICA8cmVsZWFzZSB2ZXJzaW9uPSI1LjcuMC1kZXYxIj4KICAgICAgIEFjdGl2ZSBkZXZlbG9wbWVudC4uLgogICAgICAgQ01TSVMtQ29yZShNKTogNS40LjAgKHNlZSByZXZpc2lvbiBoaXN0b3J5IGZvciBkZXRhaWxzKQpAQCAtNTkxLDYgKzYwMCwzMSBAQAogICAgICAgPC9kZXZpY2U+CiAgICAgPC9mYW1pbHk+CiAKKyAgICA8IS0tICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAgQ29ydGV4LU01NSAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqIC0tPgorICAgIDxmYW1pbHkgRGZhbWlseT0iQVJNIENvcnRleCBNNTUiIER2ZW5kb3I9IkFSTTo4MiI+CisgICAgICA8IS0tYm9vayBuYW1lPSJEZXZpY2UvQVJNL0RvY3VtZW50cy9Bcm0gQ29ydGV4LU01NSBQcm9jZXNzb3IgRGF0YXNoZWV0LnBkZiIgdGl0bGU9IkFybSBDb3J0ZXgtTTU1IFByb2Nlc3NvciBEYXRhc2hlZXQiLy0tPgorICAgICAgPGRlc2NyaXB0aW9uPgorVGhlIEFybSBDb3J0ZXgtTTU1IHByb2Nlc3NvciBpcyBhIGZ1bGx5IHN5bnRoZXNpemFibGUsIG1pZC1yYW5nZSwgbWljcm9jb250cm9sbGVyLWNsYXNzIHByb2Nlc3NvciB0aGF0IGltcGxlbWVudHMgdGhlIEFybXY4LjEtTSBtYWlubGluZSBhcmNoaXRlY3R1cmUgYW5kIGluY2x1ZGVzIHN1cHBvcnQgZm9yIHRoZSBNLXByb2ZpbGUgVmVjdG9yIEV4dGVuc2lvbiAoTVZFKSwgYWxzbyBrbm93biBhcyBBcm0gSGVsaXVtIHRlY2hub2xvZ3kuCitJdCBpcyBBcm0ncyBtb3N0IEFJLWNhcGFibGUgQ29ydGV4LU0gcHJvY2Vzc29yLCBkZWxpdmVyaW5nIGVuaGFuY2VkLCBlbmVyZ3ktZWZmaWNpZW50IGRpZ2l0YWwgc2lnbmFsIHByb2Nlc3NpbmcgKERTUCkgYW5kIG1hY2hpbmUgbGVhcm5pbmcgKE1MKSBwZXJmb3JtYW5jZS4KK1RoZSBDb3J0ZXgtTTU1IHByb2Nlc3NvciBhY2hpZXZlcyBoaWdoIGNvbXB1dGUgcGVyZm9ybWFuY2UgYWNyb3NzIHNjYWxhciBhbmQgdmVjdG9yIG9wZXJhdGlvbnMsIHdoaWxlIG1haW50YWluaW5nIGxvdyBlbmVyZ3kgY29uc3VtcHRpb24uCisgICAgICA8L2Rlc2NyaXB0aW9uPgorCisgICAgICA8IS0tIGRlYnVnIHN2ZD0iRGV2aWNlL0FSTS9TVkQvQVJNQ001NS5zdmQiLyBTVkQgZmlsZXMgZG8gbm90IGNvbnRhaW4gYW55IHBlcmlwaGVyYWwgLS0+CisgICAgICA8bWVtb3J5IGlkPSJJUk9NMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PSIweDEwMDAwMDAwIiBzaXplPSIweDAwMjAwMDAwIiBzdGFydHVwPSIxIiBkZWZhdWx0PSIxIi8+CisgICAgICA8bWVtb3J5IGlkPSJJUk9NMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PSIweDAwMDAwMDAwIiBzaXplPSIweDAwMjAwMDAwIiBzdGFydHVwPSIwIiBkZWZhdWx0PSIwIi8+CisgICAgICA8bWVtb3J5IGlkPSJJUkFNMSIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PSIweDMwMDAwMDAwIiBzaXplPSIweDAwMDIwMDAwIiBpbml0ICAgPSIwIiBkZWZhdWx0PSIxIi8+CisgICAgICA8bWVtb3J5IGlkPSJJUkFNMiIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0PSIweDIwMDAwMDAwIiBzaXplPSIweDAwMDIwMDAwIiBpbml0ICAgPSIwIiBkZWZhdWx0PSIwIi8+CisgICAgICA8IS0tYWxnb3JpdGhtIG5hbWU9IkRldmljZS9BUk0vRmxhc2gvTkVXX0RFVklDRS5GTE0iIHN0YXJ0PSIweDAwMDAwMDAwIiBzaXplPSIweDAwMDQwMDAwIiAgICAgICAgICAgICBkZWZhdWx0PSIxIi8tLT4KKworICAgICAgPGRldmljZSBEbmFtZT0iQVJNQ001NV9EU1BfRFBfTVZFX0ZQX1RaIj4KKyAgICAgICAgPHByb2Nlc3NvciBEY29yZT0iQ29ydGV4LU01NSIgRGNvcmVWZXJzaW9uPSJyMHAwIiBEZnB1PSJEUF9GUFUiIERtcHU9Ik1QVSIgRG12ZT0iRlBfTVZFIiBEZHNwPSJEU1AiIER0ej0iVFoiIERlbmRpYW49IkNvbmZpZ3VyYWJsZSIgRGNsb2NrPSIxMDAwMDAwMCIvPgorICAgICAgICA8ZGVzY3JpcHRpb24+CisgICAgICAgICAgRG91YmxlIFByZWNpc2lvbiBWZWN0b3IgRXh0ZW5zaW9ucywgRFNQIEluc3RydWN0aW9ucywgRG91YmxlIFByZWNpc2lvbiBGbG9hdGluZyBQb2ludCBVbml0LCBUcnVzdFpvbmUKKyAgICAgICAgPC9kZXNjcmlwdGlvbj4KKyAgICAgICAgPGNvbXBpbGUgaGVhZGVyPSJEZXZpY2UvQVJNL0FSTUNNNTUvSW5jbHVkZS9BUk1DTTU1X0RTUF9EUF9NVkVfRlBfVFouaCIgZGVmaW5lPSJBUk1DTTU1X0RTUF9EUF9NVkVfRlBfVFoiLz4KKyAgICAgIDwvZGV2aWNlPgorICAgIDwvZmFtaWx5PgorCiAgICAgPCEtLSAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogIEFSTVNDMDAwICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogLS0+CiAgICAgPGZhbWlseSBEZmFtaWx5PSJBUk0gU0MwMDAiIER2ZW5kb3I9IkFSTTo4MiI+CiAgICAgICA8ZGVzY3JpcHRpb24+CkBAIC05NzksNiArMTAxMyw3IEBACiAgICAgICA8YWNjZXB0IERjb3JlPSJDb3J0ZXgtTTIzIi8+CiAgICAgICA8YWNjZXB0IERjb3JlPSJDb3J0ZXgtTTMzIi8+CiAgICAgICA8YWNjZXB0IERjb3JlPSJDb3J0ZXgtTTM1UCIvPgorICAgICAgPGFjY2VwdCBEY29yZT0iQ29ydGV4LU01NSIvPgogICAgIDwvY29uZGl0aW9uPgogICAgIDxjb25kaXRpb24gaWQ9IkFSTXY4LU0gVFogRGV2aWNlIj4KICAgICAgIDxkZXNjcmlwdGlvbj5Bcm12OC1NIGFyY2hpdGVjdHVyZSBiYXNlZCBkZXZpY2Ugd2l0aCBUcnVzdFpvbmU8L2Rlc2NyaXB0aW9uPgpAQCAtMjI3OCw2ICsyMzEzLDEyIEBACiAgICAgICA8cmVxdWlyZSBDY2xhc3M9IkNNU0lTIiBDZ3JvdXA9IkNPUkUiLz4KICAgICA8L2NvbmRpdGlvbj4KIAorICAgIDxjb25kaXRpb24gaWQ9IkFSTUNNNTUgQ01TSVMiPgorICAgICAgPGRlc2NyaXB0aW9uPkdlbmVyaWMgQXJtIENvcnRleC1NNTUgZGV2aWNlIHN0YXJ0dXAgYW5kIGRlcGVuZHMgb24gQ01TSVMgQ29yZTwvZGVzY3JpcHRpb24+CisgICAgICA8cmVxdWlyZSBEdmVuZG9yPSJBUk06ODIiIERuYW1lPSJBUk1DTTU1KiIvPgorICAgICAgPHJlcXVpcmUgQ2NsYXNzPSJDTVNJUyIgQ2dyb3VwPSJDT1JFIi8+CisgICAgPC9jb25kaXRpb24+CisKICAgICA8Y29uZGl0aW9uIGlkPSJBUk1TQzAwMCBDTVNJUyI+CiAgICAgICA8ZGVzY3JpcHRpb24+R2VuZXJpYyBBcm0gU0MwMDAgZGV2aWNlIHN0YXJ0dXAgYW5kIGRlcGVuZHMgb24gQ01TSVMgQ29yZTwvZGVzY3JpcHRpb24+CiAgICAgICA8cmVxdWlyZSBEdmVuZG9yPSJBUk06ODIiIERuYW1lPSJBUk1TQzAwMCIvPgpAQCAtMjY5NCw2ICsyNzM1LDIyIEBACiAgICAgICA8L2ZpbGVzPgogICAgIDwvY29tcG9uZW50PgogCisgICAgPCEtLSBDb3J0ZXgtTTU1IC0tPgorICAgIDxjb21wb25lbnQgQ2NsYXNzPSJEZXZpY2UiIENncm91cD0iU3RhcnR1cCIgQ3ZhcmlhbnQ9IkMgU3RhcnR1cCIgQ3ZlcnNpb249IjIuMS4wIiBjb25kaXRpb249IkFSTUNNNTUgQ01TSVMiPgorICAgICAgPGRlc2NyaXB0aW9uPlN5c3RlbSBhbmQgU3RhcnR1cCBmb3IgR2VuZXJpYyBDb3J0ZXgtTTU1IGRldmljZTwvZGVzY3JpcHRpb24+CisgICAgICA8ZmlsZXM+CisgICAgICAgIDwhLS0gaW5jbHVkZSBmb2xkZXIgLyBkZXZpY2UgaGVhZGVyIGZpbGUgLS0+CisgICAgICAgIDxmaWxlIGNhdGVnb3J5PSJpbmNsdWRlIiAgICAgIG5hbWU9IkRldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlLyIvPgorICAgICAgICA8IS0tIHN0YXJ0dXAgLyBzeXN0ZW0gZmlsZSAtLT4KKyAgICAgICAgPGZpbGUgY2F0ZWdvcnk9InNvdXJjZUMiICAgICAgbmFtZT0iRGV2aWNlL0FSTS9BUk1DTTU1L1NvdXJjZS9zdGFydHVwX0FSTUNNNTUuYyIgICAgICAgICAgICAgdmVyc2lvbj0iMi4wLjIiIGF0dHI9ImNvbmZpZyIvPgorICAgICAgICA8ZmlsZSBjYXRlZ29yeT0ibGlua2VyU2NyaXB0IiBuYW1lPSJEZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL0FSTS9BUk1DTTU1X2FjNi5zY3QiICAgICAgICAgICB2ZXJzaW9uPSIxLjAuMCIgYXR0cj0iY29uZmlnIiBjb25kaXRpb249IkFSTUNDNiIvPgorICAgICAgICA8ZmlsZSBjYXRlZ29yeT0ibGlua2VyU2NyaXB0IiBuYW1lPSJEZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL0dDQy9nY2NfYXJtLmxkIiAgICAgICAgICAgICAgICB2ZXJzaW9uPSIyLjAuMCIgYXR0cj0iY29uZmlnIiBjb25kaXRpb249IkdDQyIvPgorICAgICAgICA8ZmlsZSBjYXRlZ29yeT0ic291cmNlQyIgICAgICBuYW1lPSJEZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL3N5c3RlbV9BUk1DTTU1LmMiICAgICAgICAgICAgICB2ZXJzaW9uPSIxLjIuMCIgYXR0cj0iY29uZmlnIi8+CisgICAgICAgIDwhLS0gU0FVIGNvbmZpZ3VyYXRpb24gLS0+CisgICAgICAgIDxmaWxlIGNhdGVnb3J5PSJoZWFkZXIiICAgICAgIG5hbWU9IkRldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL1RlbXBsYXRlL3BhcnRpdGlvbl9BUk1DTTU1LmgiIHZlcnNpb249IjEuMC4wIiBhdHRyPSJjb25maWciIGNvbmRpdGlvbj0iQVJNdjgtTSBUWiBEZXZpY2UiLz4KKyAgICAgIDwvZmlsZXM+CisgICAgPC9jb21wb25lbnQ+CisKICAgICA8IS0tIENvcnRleC1TQzAwMCAtLT4KICAgICA8Y29tcG9uZW50IENjbGFzcz0iRGV2aWNlIiBDZ3JvdXA9IlN0YXJ0dXAiIEN2YXJpYW50PSJDIFN0YXJ0dXAiIEN2ZXJzaW9uPSIyLjAuMiIgY29uZGl0aW9uPSJBUk1TQzAwMCBDTVNJUyI+CiAgICAgICA8ZGVzY3JpcHRpb24+U3lzdGVtIGFuZCBTdGFydHVwIGZvciBHZW5lcmljIEFybSBTQzAwMCBkZXZpY2U8L2Rlc2NyaXB0aW9uPgpkaWZmIC0tZ2l0IGEvQ01TSVMvQ29yZS9JbmNsdWRlL2NvcmVfY201NS5oIGIvQ01TSVMvQ29yZS9JbmNsdWRlL2NvcmVfY201NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwYjY5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9DTVNJUy9Db3JlL0luY2x1ZGUvY29yZV9jbTU1LmgKQEAgLTAsMCArMSwzMzY4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgY29yZV9jbTU1LmgKKyAqIEBicmllZiAgICBDTVNJUyBDb3J0ZXgtTTU1IENvcmUgUGVyaXBoZXJhbCBBY2Nlc3MgTGF5ZXIgSGVhZGVyIEZpbGUKKyAqIEB2ZXJzaW9uICBWMS4wLjAKKyAqIEBkYXRlICAgICAyMC4gRmVicnVhcnkgMjAyMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTgtMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIHd3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZiAgIGRlZmluZWQgKCBfX0lDQ0FSTV9fICkKKyAgI3ByYWdtYSBzeXN0ZW1faW5jbHVkZSAgICAgICAgICAgICAgICAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSBmb3IgTUlTUkEgY2hlY2sgKi8KKyNlbGlmIGRlZmluZWQgKF9fY2xhbmdfXykKKyAgI3ByYWdtYSBjbGFuZyBzeXN0ZW1faGVhZGVyICAgICAgICAgICAgICAgICAgIC8qIHRyZWF0IGZpbGUgYXMgc3lzdGVtIGluY2x1ZGUgZmlsZSAqLworI2VsaWYgZGVmaW5lZCAoIF9fR05VQ19fICkKKyAgI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBpZ25vcmVkICItV3BlZGFudGljIiAgIC8qIGRpc2FibGUgcGVkYW50aWMgd2FybmluZyBkdWUgdG8gdW5uYW1lZCBzdHJ1Y3RzL3VuaW9ucyAqLworI2VuZGlmCisKKyNpZm5kZWYgX19DT1JFX0NNNTVfSF9HRU5FUklDCisjZGVmaW5lIF9fQ09SRV9DTTU1X0hfR0VORVJJQworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qKgorICBccGFnZSBDTVNJU19NSVNSQV9FeGNlcHRpb25zICBNSVNSQS1DOjIwMDQgQ29tcGxpYW5jZSBFeGNlcHRpb25zCisgIENNU0lTIHZpb2xhdGVzIHRoZSBmb2xsb3dpbmcgTUlTUkEtQzoyMDA0IHJ1bGVzOgorCisgICBcbGkgUmVxdWlyZWQgUnVsZSA4LjUsIG9iamVjdC9mdW5jdGlvbiBkZWZpbml0aW9uIGluIGhlYWRlciBmaWxlLjxicj4KKyAgICAgRnVuY3Rpb24gZGVmaW5pdGlvbnMgaW4gaGVhZGVyIGZpbGVzIGFyZSB1c2VkIHRvIGFsbG93ICdpbmxpbmluZycuCisKKyAgIFxsaSBSZXF1aXJlZCBSdWxlIDE4LjQsIGRlY2xhcmF0aW9uIG9mIHVuaW9uIHR5cGUgb3Igb2JqZWN0IG9mIHVuaW9uIHR5cGU6ICd7Li4ufScuPGJyPgorICAgICBVbmlvbnMgYXJlIHVzZWQgZm9yIGVmZmVjdGl2ZSByZXByZXNlbnRhdGlvbiBvZiBjb3JlIHJlZ2lzdGVycy4KKworICAgXGxpIEFkdmlzb3J5IFJ1bGUgMTkuNywgRnVuY3Rpb24tbGlrZSBtYWNybyBkZWZpbmVkLjxicj4KKyAgICAgRnVuY3Rpb24tbGlrZSBtYWNyb3MgYXJlIHVzZWQgdG8gYWxsb3cgbW9yZSBlZmZpY2llbnQgY29kZS4KKyAqLworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgQ01TSVMgZGVmaW5pdGlvbnMKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGluZ3JvdXAgQ29ydGV4X0NNNTUKKyAgQHsKKyAqLworCisjaW5jbHVkZSAiY21zaXNfdmVyc2lvbi5oIgorCisvKiAgQ01TSVMgQ001NSBkZWZpbml0aW9ucyAqLworI2RlZmluZSBfX0NNNTVfQ01TSVNfVkVSU0lPTl9NQUlOICAoX19DTV9DTVNJU19WRVJTSU9OX01BSU4pICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBbMzE6MTZdIENNU0lTIEhBTCBtYWluIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTU1X0NNU0lTX1ZFUlNJT05fU1VCICAgKF9fQ01fQ01TSVNfVkVSU0lPTl9TVUIpICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgWzE1OjBdICBDTVNJUyBIQUwgc3ViIHZlcnNpb24gKi8KKyNkZWZpbmUgX19DTTU1X0NNU0lTX1ZFUlNJT04gICAgICAgKChfX0NNNTVfQ01TSVNfVkVSU0lPTl9NQUlOIDw8IDE2VSkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19DTTU1X0NNU0lTX1ZFUlNJT05fU1VCICAgICAgICAgICApICAgICAvKiE8IFxkZXByZWNhdGVkIENNU0lTIEhBTCB2ZXJzaW9uIG51bWJlciAqLworCisjZGVmaW5lIF9fQ09SVEVYX00gICAgICAgICAgICAgICAgICAgICAgKDU1VSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENvcnRleC1NIENvcmUgKi8KKworI2lmIGRlZmluZWQgKCBfX0NDX0FSTSApCisgICNlcnJvciBMZWdhY3kgQXJtIENvbXBpbGVyIGRvZXMgbm90IHN1cHBvcnQgQXJtdjguMS1NIHRhcmdldCBhcmNoaXRlY3R1cmUuCisjZWxpZiBkZWZpbmVkIChfX0FSTUNDX1ZFUlNJT04pICYmIChfX0FSTUNDX1ZFUlNJT04gPj0gNjAxMDA1MCkKKyAgI2lmIGRlZmluZWQgX19BUk1fRlAKKyAgICAjaWYgZGVmaW5lZCAoX19GUFVfUFJFU0VOVCkgJiYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyAgI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9EU1ApCisgICAgI2lmIGRlZmluZWQoX19EU1BfUFJFU0VOVCkgJiYgKF9fRFNQX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRFNQX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRFNQIChTSU1EKSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlcyB3aXRob3V0IERTUCBleHRlbnNpb25zIChjaGVjayBfX0RTUF9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19EU1BfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19EU1BfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisgICNpZiBkZWZpbmVkKF9fQVJNX0ZFQVRVUkVfTVZFKQorICAgICNkZWZpbmUgX19NVkVfVVNFRCAgICAgICAgIDFVCisgICNlbHNlCisgICAgI2RlZmluZSBfX01WRV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX0dOVUNfXyApCisgICNpZiBkZWZpbmVkIChfX1ZGUF9GUF9fKSAmJiAhZGVmaW5lZChfX1NPRlRGUF9fKQorICAgICNpZiBkZWZpbmVkIChfX0ZQVV9QUkVTRU5UKSAmJiAoX19GUFVfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBGUFUgaW5zdHJ1Y3Rpb25zIGZvciBhIGRldmljZSB3aXRob3V0IGFuIEZQVSAoY2hlY2sgX19GUFVfUFJFU0VOVCkiCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworICAjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX0RTUCkKKyAgICAjaWYgZGVmaW5lZChfX0RTUF9QUkVTRU5UKSAmJiAoX19EU1BfUFJFU0VOVCA9PSAxVSkKKyAgICAgICNkZWZpbmUgX19EU1BfVVNFRCAgICAgICAxVQorICAgICNlbHNlCisgICAgICAjZXJyb3IgIkNvbXBpbGVyIGdlbmVyYXRlcyBEU1AgKFNJTUQpIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2VzIHdpdGhvdXQgRFNQIGV4dGVuc2lvbnMgKGNoZWNrIF9fRFNQX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0RTUF9VU0VEICAgICAgICAgMFUKKyAgICAjZW5kaWYKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fRFNQX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworICAjaWYgZGVmaW5lZChfX0FSTV9GRUFUVVJFX01WRSkKKyAgICAjZGVmaW5lIF9fTVZFX1VTRUQgICAgICAgICAxVQorICAjZWxzZQorICAgICNkZWZpbmUgX19NVkVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNpZiBkZWZpbmVkIF9fQVJNVkZQX18KKyAgICAjaWYgZGVmaW5lZCAoX19GUFVfUFJFU0VOVCkgJiYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyAgI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9EU1ApCisgICAgI2lmIGRlZmluZWQoX19EU1BfUFJFU0VOVCkgJiYgKF9fRFNQX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRFNQX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRFNQIChTSU1EKSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlcyB3aXRob3V0IERTUCBleHRlbnNpb25zIChjaGVjayBfX0RTUF9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19EU1BfVVNFRCAgICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0RTUF9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyAgI2lmIGRlZmluZWQoX19BUk1fRkVBVFVSRV9NVkUpCisgICAgI2RlZmluZSBfX01WRV9VU0VEICAgICAgICAgMVUKKyAgI2Vsc2UKKyAgICAjZGVmaW5lIF9fTVZFX1VTRUQgICAgICAgICAwVQorICAjZW5kaWYKKworI2VsaWYgZGVmaW5lZCAoIF9fVElfQVJNX18gKQorICAjaWYgZGVmaW5lZCBfX1RJX1ZGUF9TVVBQT1JUX18KKyAgICAjaWYgZGVmaW5lZCAoX19GUFVfUFJFU0VOVCkgJiYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbGlmIGRlZmluZWQgKCBfX1RBU0tJTkdfXyApCisgICNpZiBkZWZpbmVkIF9fRlBVX1ZGUF9fCisgICAgI2lmIGRlZmluZWQgKF9fRlBVX1BSRVNFTlQpICYmIChfX0ZQVV9QUkVTRU5UID09IDFVKQorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDFVCisgICAgI2Vsc2UKKyAgICAgICNlcnJvciAiQ29tcGlsZXIgZ2VuZXJhdGVzIEZQVSBpbnN0cnVjdGlvbnMgZm9yIGEgZGV2aWNlIHdpdGhvdXQgYW4gRlBVIChjaGVjayBfX0ZQVV9QUkVTRU5UKSIKKyAgICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAwVQorICAgICNlbmRpZgorICAjZWxzZQorICAgICNkZWZpbmUgX19GUFVfVVNFRCAgICAgICAgIDBVCisgICNlbmRpZgorCisjZWxpZiBkZWZpbmVkICggX19DU01DX18gKQorICAjaWYgKCBfX0NTTUNfXyAmIDB4NDAwVSkKKyAgICAjaWYgZGVmaW5lZCAoX19GUFVfUFJFU0VOVCkgJiYgKF9fRlBVX1BSRVNFTlQgPT0gMVUpCisgICAgICAjZGVmaW5lIF9fRlBVX1VTRUQgICAgICAgMVUKKyAgICAjZWxzZQorICAgICAgI2Vycm9yICJDb21waWxlciBnZW5lcmF0ZXMgRlBVIGluc3RydWN0aW9ucyBmb3IgYSBkZXZpY2Ugd2l0aG91dCBhbiBGUFUgKGNoZWNrIF9fRlBVX1BSRVNFTlQpIgorICAgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgIDBVCisgICAgI2VuZGlmCisgICNlbHNlCisgICAgI2RlZmluZSBfX0ZQVV9VU0VEICAgICAgICAgMFUKKyAgI2VuZGlmCisKKyNlbmRpZgorCisjaW5jbHVkZSAiY21zaXNfY29tcGlsZXIuaCIgICAgICAgICAgICAgICAvKiBDTVNJUyBjb21waWxlciBzcGVjaWZpYyBkZWZpbmVzICovCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmIC8qIF9fQ09SRV9DTTU1X0hfR0VORVJJQyAqLworCisjaWZuZGVmIF9fQ01TSVNfR0VORVJJQworCisjaWZuZGVmIF9fQ09SRV9DTTU1X0hfREVQRU5EQU5UCisjZGVmaW5lIF9fQ09SRV9DTTU1X0hfREVQRU5EQU5UCisKKyNpZmRlZiBfX2NwbHVzcGx1cworIGV4dGVybiAiQyIgeworI2VuZGlmCisKKy8qIGNoZWNrIGRldmljZSBkZWZpbmVzIGFuZCB1c2UgZGVmYXVsdHMgKi8KKyNpZiBkZWZpbmVkIF9fQ0hFQ0tfREVWSUNFX0RFRklORVMKKyAgI2lmbmRlZiBfX0NNNTVfUkVWCisgICAgI2RlZmluZSBfX0NNNTVfUkVWICAgICAgICAgICAgICAgMHgwMDAwVQorICAgICN3YXJuaW5nICJfX0NNNTVfUkVWIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19GUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19GUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0ZQVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19NUFVfUFJFU0VOVAorICAgICNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX01QVV9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19TQVVSRUdJT05fUFJFU0VOVAorICAgICNkZWZpbmUgX19TQVVSRUdJT05fUFJFU0VOVCAgICAgICAwVQorICAgICN3YXJuaW5nICJfX1NBVVJFR0lPTl9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19EU1BfUFJFU0VOVAorICAgICNkZWZpbmUgX19EU1BfUFJFU0VOVCAgICAgICAgICAgICAwVQorICAgICN3YXJuaW5nICJfX0RTUF9QUkVTRU5UIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19OVklDX1BSSU9fQklUUworICAgICNkZWZpbmUgX19OVklDX1BSSU9fQklUUyAgICAgICAgICAzVQorICAgICN3YXJuaW5nICJfX05WSUNfUFJJT19CSVRTIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorCisgICNpZm5kZWYgX19WZW5kb3JfU3lzVGlja0NvbmZpZworICAgICNkZWZpbmUgX19WZW5kb3JfU3lzVGlja0NvbmZpZyAgICAwVQorICAgICN3YXJuaW5nICJfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnIG5vdCBkZWZpbmVkIGluIGRldmljZSBoZWFkZXIgZmlsZTsgdXNpbmcgZGVmYXVsdCEiCisgICNlbmRpZgorI2VuZGlmCisKKy8qIElPIGRlZmluaXRpb25zIChhY2Nlc3MgcmVzdHJpY3Rpb25zIHRvIHBlcmlwaGVyYWwgcmVnaXN0ZXJzKSAqLworLyoqCisgICAgXGRlZmdyb3VwIENNU0lTX2dsb2JfZGVmcyBDTVNJUyBHbG9iYWwgRGVmaW5lcworCisgICAgPHN0cm9uZz5JTyBUeXBlIFF1YWxpZmllcnM8L3N0cm9uZz4gYXJlIHVzZWQKKyAgICBcbGkgdG8gc3BlY2lmeSB0aGUgYWNjZXNzIHRvIHBlcmlwaGVyYWwgdmFyaWFibGVzLgorICAgIFxsaSBmb3IgYXV0b21hdGljIGdlbmVyYXRpb24gb2YgcGVyaXBoZXJhbCByZWdpc3RlciBkZWJ1ZyBpbmZvcm1hdGlvbi4KKyovCisjaWZkZWYgX19jcGx1c3BsdXMKKyAgI2RlZmluZSAgIF9fSSAgICAgdm9sYXRpbGUgICAgICAgICAgICAgLyohPCBEZWZpbmVzICdyZWFkIG9ubHknIHBlcm1pc3Npb25zICovCisjZWxzZQorICAjZGVmaW5lICAgX19JICAgICB2b2xhdGlsZSBjb25zdCAgICAgICAvKiE8IERlZmluZXMgJ3JlYWQgb25seScgcGVybWlzc2lvbnMgKi8KKyNlbmRpZgorI2RlZmluZSAgICAgX19PICAgICB2b2xhdGlsZSAgICAgICAgICAgICAvKiE8IERlZmluZXMgJ3dyaXRlIG9ubHknIHBlcm1pc3Npb25zICovCisjZGVmaW5lICAgICBfX0lPICAgIHZvbGF0aWxlICAgICAgICAgICAgIC8qITwgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBwZXJtaXNzaW9ucyAqLworCisvKiBmb2xsb3dpbmcgZGVmaW5lcyBzaG91bGQgYmUgdXNlZCBmb3Igc3RydWN0dXJlIG1lbWJlcnMgKi8KKyNkZWZpbmUgICAgIF9fSU0gICAgIHZvbGF0aWxlIGNvbnN0ICAgICAgLyohIERlZmluZXMgJ3JlYWQgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19PTSAgICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAnd3JpdGUgb25seScgc3RydWN0dXJlIG1lbWJlciBwZXJtaXNzaW9ucyAqLworI2RlZmluZSAgICAgX19JT00gICAgdm9sYXRpbGUgICAgICAgICAgICAvKiEgRGVmaW5lcyAncmVhZCAvIHdyaXRlJyBzdHJ1Y3R1cmUgbWVtYmVyIHBlcm1pc3Npb25zICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENvcnRleF9NNTUgKi8KKworCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgUmVnaXN0ZXIgQWJzdHJhY3Rpb24KKyAgQ29yZSBSZWdpc3RlciBjb250YWluOgorICAtIENvcmUgUmVnaXN0ZXIKKyAgLSBDb3JlIE5WSUMgUmVnaXN0ZXIKKyAgLSBDb3JlIFNDQiBSZWdpc3RlcgorICAtIENvcmUgU3lzVGljayBSZWdpc3RlcgorICAtIENvcmUgRGVidWcgUmVnaXN0ZXIKKyAgLSBDb3JlIE1QVSBSZWdpc3RlcgorICAtIENvcmUgU0FVIFJlZ2lzdGVyCisgIC0gQ29yZSBGUFUgUmVnaXN0ZXIKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioKKyAgXGRlZmdyb3VwIENNU0lTX2NvcmVfcmVnaXN0ZXIgRGVmaW5lcyBhbmQgVHlwZSBEZWZpbml0aW9ucworICBcYnJpZWYgVHlwZSBkZWZpbml0aW9ucyBhbmQgZGVmaW5lcyBmb3IgQ29ydGV4LU0gcHJvY2Vzc29yIGJhc2VkIGRldmljZXMuCisqLworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19DT1JFICBTdGF0dXMgYW5kIENvbnRyb2wgUmVnaXN0ZXJzCisgIFxicmllZiAgICAgIENvcmUgUmVnaXN0ZXIgdHlwZSBkZWZpbml0aW9ucy4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgQXBwbGljYXRpb24gUHJvZ3JhbSBTdGF0dXMgUmVnaXN0ZXIgKEFQU1IpLgorICovCit0eXBlZGVmIHVuaW9uCit7CisgIHN0cnVjdAorICB7CisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoxNjsgICAgICAgICAgICAgIC8qITwgYml0OiAgMC4uMTUgIFJlc2VydmVkICovCisgICAgdWludDMyX3QgR0U6NDsgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAxNi4uMTkgIEdyZWF0ZXIgdGhhbiBvciBFcXVhbCBmbGFncyAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDE6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogMjAuLjI2ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IFE6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI3ICBTYXR1cmF0aW9uIGNvbmRpdGlvbiBmbGFnICovCisgICAgdWludDMyX3QgVjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjggIE92ZXJmbG93IGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBDOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOSAgQ2FycnkgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IFo6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMwICBaZXJvIGNvbmRpdGlvbiBjb2RlIGZsYWcgKi8KKyAgICB1aW50MzJfdCBOOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAzMSAgTmVnYXRpdmUgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICB9IGI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN0cnVjdHVyZSB1c2VkIGZvciBiaXQgIGFjY2VzcyAqLworICB1aW50MzJfdCB3OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFR5cGUgICAgICB1c2VkIGZvciB3b3JkIGFjY2VzcyAqLworfSBBUFNSX1R5cGU7CisKKy8qIEFQU1IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQVBTUl9OX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogTiBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX05fTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9OX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBOIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1pfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBaIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfWl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1pfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFogTWFzayAqLworCisjZGVmaW5lIEFQU1JfQ19Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEMgUG9zaXRpb24gKi8KKyNkZWZpbmUgQVBTUl9DX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEFQU1JfQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogQyBNYXNrICovCisKKyNkZWZpbmUgQVBTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQVBTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBBUFNSX1ZfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgQVBTUl9WX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBWIE1hc2sgKi8KKworI2RlZmluZSBBUFNSX1FfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBBUFNSOiBRIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfUV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBBUFNSX1FfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IFEgTWFzayAqLworCisjZGVmaW5lIEFQU1JfR0VfUG9zICAgICAgICAgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIFBvc2l0aW9uICovCisjZGVmaW5lIEFQU1JfR0VfTXNrICAgICAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEFQU1JfR0VfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEFQU1I6IEdFIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgSW50ZXJydXB0IFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVyIChJUFNSKS4KKyAqLwordHlwZWRlZiB1bmlvbgoreworICBzdHJ1Y3QKKyAgeworICAgIHVpbnQzMl90IElTUjo5OyAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogIDAuLiA4ICBFeGNlcHRpb24gbnVtYmVyICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMDoyMzsgICAgICAgICAgICAgIC8qITwgYml0OiAgOS4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IElQU1JfVHlwZTsKKworLyogSVBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJUFNSX0lTUl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJUFNSOiBJU1IgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVBTUl9JU1JfTXNrICAgICAgICAgICAgICAgICAgICAgICAoMHgxRkZVTCAvKjw8IElQU1JfSVNSX1BvcyovKSAgICAgICAgICAgICAgICAgIC8qITwgSVBTUjogSVNSIE1hc2sgKi8KKworCisvKioKKyAgXGJyaWVmICBVbmlvbiB0eXBlIHRvIGFjY2VzcyB0aGUgU3BlY2lhbC1QdXJwb3NlIFByb2dyYW0gU3RhdHVzIFJlZ2lzdGVycyAoeFBTUikuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBJU1I6OTsgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAwLi4gOCAgRXhjZXB0aW9uIG51bWJlciAqLworICAgIHVpbnQzMl90IF9yZXNlcnZlZDA6NzsgICAgICAgICAgICAgICAvKiE8IGJpdDogIDkuLjE1ICBSZXNlcnZlZCAqLworICAgIHVpbnQzMl90IEdFOjQ7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMTYuLjE5ICBHcmVhdGVyIHRoYW4gb3IgRXF1YWwgZmxhZ3MgKi8KKyAgICB1aW50MzJfdCBfcmVzZXJ2ZWQxOjQ7ICAgICAgICAgICAgICAgLyohPCBiaXQ6IDIwLi4yMyAgUmVzZXJ2ZWQgKi8KKyAgICB1aW50MzJfdCBUOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyNCAgVGh1bWIgYml0ICAgICAgICAocmVhZCAwKSAqLworICAgIHVpbnQzMl90IElUOjI7ICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogMjUuLjI2ICBzYXZlZCBJVCBzdGF0ZSAgIChyZWFkIDApICovCisgICAgdWludDMyX3QgUToxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMjcgIFNhdHVyYXRpb24gY29uZGl0aW9uIGZsYWcgKi8KKyAgICB1aW50MzJfdCBWOjE7ICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAyOCAgT3ZlcmZsb3cgY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IEM6MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDI5ICBDYXJyeSBjb25kaXRpb24gY29kZSBmbGFnICovCisgICAgdWludDMyX3QgWjoxOyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgYml0OiAgICAgMzAgIFplcm8gY29uZGl0aW9uIGNvZGUgZmxhZyAqLworICAgIHVpbnQzMl90IE46MTsgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgIDMxICBOZWdhdGl2ZSBjb25kaXRpb24gY29kZSBmbGFnICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IHhQU1JfVHlwZTsKKworLyogeFBTUiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSB4UFNSX05fUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBOIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfTl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX05fUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IE4gTWFzayAqLworCisjZGVmaW5lIHhQU1JfWl9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFogUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9aX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogWiBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9DX1BvcyAgICAgICAgICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogQyBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0NfTXNrICAgICAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgeFBTUl9DX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBDIE1hc2sgKi8KKworI2RlZmluZSB4UFNSX1ZfUG9zICAgICAgICAgICAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBWIFBvc2l0aW9uICovCisjZGVmaW5lIHhQU1JfVl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCB4UFNSX1ZfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFYgTWFzayAqLworCisjZGVmaW5lIHhQU1JfUV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFEgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9RX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfUV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogUSBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9JVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAyNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9JVF9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoM1VMIDw8IHhQU1JfSVRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogSVQgTWFzayAqLworCisjZGVmaW5lIHhQU1JfVF9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9UX01zayAgICAgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IHhQU1JfVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogVCBNYXNrICovCisKKyNkZWZpbmUgeFBTUl9HRV9Qb3MgICAgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgeFBTUl9HRV9Nc2sgICAgICAgICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgeFBTUl9HRV9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgeFBTUjogR0UgTWFzayAqLworCisjZGVmaW5lIHhQU1JfSVNSX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IHhQU1I6IElTUiBQb3NpdGlvbiAqLworI2RlZmluZSB4UFNSX0lTUl9Nc2sgICAgICAgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgeFBTUl9JU1JfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCB4UFNSOiBJU1IgTWFzayAqLworCisKKy8qKgorICBcYnJpZWYgIFVuaW9uIHR5cGUgdG8gYWNjZXNzIHRoZSBDb250cm9sIFJlZ2lzdGVycyAoQ09OVFJPTCkuCisgKi8KK3R5cGVkZWYgdW5pb24KK3sKKyAgc3RydWN0CisgIHsKKyAgICB1aW50MzJfdCBuUFJJVjoxOyAgICAgICAgICAgICAgICAgICAgLyohPCBiaXQ6ICAgICAgMCAgRXhlY3V0aW9uIHByaXZpbGVnZSBpbiBUaHJlYWQgbW9kZSAqLworICAgIHVpbnQzMl90IFNQU0VMOjE7ICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAxICBTdGFjay1wb2ludGVyIHNlbGVjdCAqLworICAgIHVpbnQzMl90IEZQQ0E6MTsgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAyICBGbG9hdGluZy1wb2ludCBjb250ZXh0IGFjdGl2ZSAqLworICAgIHVpbnQzMl90IFNGUEE6MTsgICAgICAgICAgICAgICAgICAgICAvKiE8IGJpdDogICAgICAzICBTZWN1cmUgZmxvYXRpbmctcG9pbnQgYWN0aXZlICovCisgICAgdWludDMyX3QgX3Jlc2VydmVkMToyODsgICAgICAgICAgICAgIC8qITwgYml0OiAgNC4uMzEgIFJlc2VydmVkICovCisgIH0gYjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3RydWN0dXJlIHVzZWQgZm9yIGJpdCAgYWNjZXNzICovCisgIHVpbnQzMl90IHc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVHlwZSAgICAgIHVzZWQgZm9yIHdvcmQgYWNjZXNzICovCit9IENPTlRST0xfVHlwZTsKKworLyogQ09OVFJPTCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDT05UUk9MX1NGUEFfUG9zICAgICAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBDT05UUk9MOiBTRlBBIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfU0ZQQV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBDT05UUk9MX1NGUEFfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IFNGUEEgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfRlBDQV9Qb3MgICAgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IEZQQ0EgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9GUENBX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfRlBDQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogRlBDQSBNYXNrICovCisKKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ09OVFJPTF9TUFNFTF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IENPTlRST0xfU1BTRUxfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgQ09OVFJPTDogU1BTRUwgTWFzayAqLworCisjZGVmaW5lIENPTlRST0xfblBSSVZfUG9zICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIFBvc2l0aW9uICovCisjZGVmaW5lIENPTlRST0xfblBSSVZfTXNrICAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IENPTlRST0xfblBSSVZfUG9zKi8pICAgICAgICAgICAgICAgICAvKiE8IENPTlRST0w6IG5QUklWIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfQ09SRSAqLworCisKKy8qKgorICBcaW5ncm91cCAgICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCAgIENNU0lTX05WSUMgIE5lc3RlZCBWZWN0b3JlZCBJbnRlcnJ1cHQgQ29udHJvbGxlciAoTlZJQykKKyAgXGJyaWVmICAgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIE5WSUMgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBOZXN0ZWQgVmVjdG9yZWQgSW50ZXJydXB0IENvbnRyb2xsZXIgKE5WSUMpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBJU0VSWzE2VV07ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIEludGVycnVwdCBTZXQgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxNlVdOworICBfX0lPTSB1aW50MzJfdCBJQ0VSWzE2VV07ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODAgKFIvVykgIEludGVycnVwdCBDbGVhciBFbmFibGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUlNFUlZFRDFbMTZVXTsKKyAgX19JT00gdWludDMyX3QgSVNQUlsxNlVdOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBJbnRlcnJ1cHQgU2V0IFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzE2VV07CisgIF9fSU9NIHVpbnQzMl90IElDUFJbMTZVXTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDE4MCAoUi9XKSAgSW50ZXJydXB0IENsZWFyIFBlbmRpbmcgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzE2VV07CisgIF9fSU9NIHVpbnQzMl90IElBQlJbMTZVXTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoUi9XKSAgSW50ZXJydXB0IEFjdGl2ZSBiaXQgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzE2VV07CisgIF9fSU9NIHVpbnQzMl90IElUTlNbMTZVXTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI4MCAoUi9XKSAgSW50ZXJydXB0IE5vbi1TZWN1cmUgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzE2VV07CisgIF9fSU9NIHVpbnQ4X3QgIElQUls0OTZVXTsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwMCAoUi9XKSAgSW50ZXJydXB0IFByaW9yaXR5IFJlZ2lzdGVyICg4Qml0IHdpZGUpICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENls1ODBVXTsKKyAgX19PTSAgdWludDMyX3QgU1RJUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwICggL1cpICBTb2Z0d2FyZSBUcmlnZ2VyIEludGVycnVwdCBSZWdpc3RlciAqLworfSAgTlZJQ19UeXBlOworCisvKiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIFBvc2l0aW9uICovCisjZGVmaW5lIE5WSUNfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgKDB4MUZGVUwgLyo8PCBOVklDX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAvKiE8IFNUSVI6IElOVExJTkVTTlVNIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfTlZJQyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfU0NCICAgICBTeXN0ZW0gQ29udHJvbCBCbG9jayAoU0NCKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFN5c3RlbSBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIENvbnRyb2wgQmxvY2sgKFNDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU0gIHVpbnQzMl90IENQVUlEOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi8gKSAgQ1BVSUQgQmFzZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBJQ1NSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEludGVycnVwdCBDb250cm9sIGFuZCBTdGF0ZSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBWVE9SOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFZlY3RvciBUYWJsZSBPZmZzZXQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQUlSQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0NSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTeXN0ZW0gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDQ1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIENvbmZpZ3VyYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50OF90ICBTSFBSWzEyVV07ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIFN5c3RlbSBIYW5kbGVycyBQcmlvcml0eSBSZWdpc3RlcnMgKDQtNywgOC0xMSwgMTItMTUpICovCisgIF9fSU9NIHVpbnQzMl90IFNIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgU3lzdGVtIEhhbmRsZXIgQ29udHJvbCBhbmQgU3RhdGUgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ0ZTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDI4IChSL1cpICBDb25maWd1cmFibGUgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEhGU1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyQyAoUi9XKSAgSGFyZEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBNTUZBUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzQgKFIvVykgIE1lbU1hbmFnZSBGYXVsdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEJGQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAzOCAoUi9XKSAgQnVzRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBBRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwM0MgKFIvVykgIEF1eGlsaWFyeSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSURfUEZSWzJVXTsgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSLyApICBQcm9jZXNzb3IgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJRF9ERlI7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNDggKFIvICkgIERlYnVnIEZlYXR1cmUgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgSURfQURSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDRDIChSLyApICBBdXhpbGlhcnkgRmVhdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBJRF9NTUZSWzRVXTsgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNTAgKFIvICkgIE1lbW9yeSBNb2RlbCBGZWF0dXJlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IElEX0lTQVJbNlVdOyAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA2MCAoUi8gKSAgSW5zdHJ1Y3Rpb24gU2V0IEF0dHJpYnV0ZXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0xJRFI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDc4IChSLyApICBDYWNoZSBMZXZlbCBJRCByZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBDVFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwN0MgKFIvICkgIENhY2hlIFR5cGUgcmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgQ0NTSURSOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDgwIChSLyApICBDYWNoZSBTaXplIElEIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENTU0VMUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4NCAoUi9XKSAgQ2FjaGUgU2l6ZSBTZWxlY3Rpb24gUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1BBQ1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDg4IChSL1cpICBDb3Byb2Nlc3NvciBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBOU0FDUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwOEMgKFIvVykgIE5vbi1TZWN1cmUgQWNjZXNzIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzkyVV07CisgIF9fT00gIHVpbnQzMl90IFNUSVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDIwMCAoIC9XKSAgU29mdHdhcmUgVHJpZ2dlcmVkIEludGVycnVwdCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyMDQgKFIvVykgIFJBUyBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzE0VV07CisgIF9fSU0gIHVpbnQzMl90IE1WRlIwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI0MCAoUi8gKSAgTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjQ0IChSLyApICBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMSAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNDggKFIvICkgIE1lZGlhIGFuZCBWRlAgRmVhdHVyZSBSZWdpc3RlciAyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENVsxVV07CisgIF9fT00gIHVpbnQzMl90IElDSUFMTFU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI1MCAoIC9XKSAgSS1DYWNoZSBJbnZhbGlkYXRlIEFsbCB0byBQb1UgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ2WzFVXTsKKyAgX19PTSAgdWludDMyX3QgSUNJTVZBVTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjU4ICggL1cpICBJLUNhY2hlIEludmFsaWRhdGUgYnkgTVZBIHRvIFBvVSAqLworICBfX09NICB1aW50MzJfdCBEQ0lNVkFDOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgyNUMgKCAvVykgIEQtQ2FjaGUgSW52YWxpZGF0ZSBieSBNVkEgdG8gUG9DICovCisgIF9fT00gIHVpbnQzMl90IERDSVNXOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDI2MCAoIC9XKSAgRC1DYWNoZSBJbnZhbGlkYXRlIGJ5IFNldC13YXkgKi8KKyAgX19PTSAgdWludDMyX3QgRENDTVZBVTsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjY0ICggL1cpICBELUNhY2hlIENsZWFuIGJ5IE1WQSB0byBQb1UgKi8KKyAgX19PTSAgdWludDMyX3QgRENDTVZBQzsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjY4ICggL1cpICBELUNhY2hlIENsZWFuIGJ5IE1WQSB0byBQb0MgKi8KKyAgX19PTSAgdWludDMyX3QgRENDU1c7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjZDICggL1cpICBELUNhY2hlIENsZWFuIGJ5IFNldC13YXkgKi8KKyAgX19PTSAgdWludDMyX3QgRENDSU1WQUM7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MjcwICggL1cpICBELUNhY2hlIENsZWFuIGFuZCBJbnZhbGlkYXRlIGJ5IE1WQSB0byBQb0MgKi8KKyAgX19PTSAgdWludDMyX3QgRENDSVNXOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4Mjc0ICggL1cpICBELUNhY2hlIENsZWFuIGFuZCBJbnZhbGlkYXRlIGJ5IFNldC13YXkgKi8KKyAgX19PTSAgdWludDMyX3QgQlBJQUxMOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4Mjc4ICggL1cpICBCcmFuY2ggUHJlZGljdG9yIEludmFsaWRhdGUgQWxsICovCit9IFNDQl9UeXBlOworCisvKiBTQ0IgQ1BVSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcyAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBJTVBMRU1FTlRFUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfSU1QTEVNRU5URVJfTXNrICAgICAgICAgICgweEZGVUwgPDwgU0NCX0NQVUlEX0lNUExFTUVOVEVSX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IElNUExFTUVOVEVSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfVkFSSUFOVF9Qb3MgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IFZBUklBTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1ZBUklBTlRfTXNrICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NQVUlEX1ZBUklBTlRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBWQVJJQU5UIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX01zayAgICAgICAgICgweEZVTCA8PCBTQ0JfQ1BVSURfQVJDSElURUNUVVJFX1BvcykgICAgICAgICAgLyohPCBTQ0IgQ1BVSUQ6IEFSQ0hJVEVDVFVSRSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1BBUlROT19Nc2sgICAgICAgICAgICAgICAoMHhGRkZVTCA8PCBTQ0JfQ1BVSURfUEFSVE5PX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBQQVJUTk8gTWFzayAqLworCisjZGVmaW5lIFNDQl9DUFVJRF9SRVZJU0lPTl9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDUFVJRDogUkVWSVNJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NQVUlEX1JFVklTSU9OX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBTQ0JfQ1BVSURfUkVWSVNJT05fUG9zKi8pICAgICAgICAgIC8qITwgU0NCIENQVUlEOiBSRVZJU0lPTiBNYXNrICovCisKKy8qIFNDQiBJbnRlcnJ1cHQgQ29udHJvbCBTdGF0ZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5ETk1JU0VUX1BvcyAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORE5NSVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5ETk1JU0VUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORE5NSVNFVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORE5NSVNFVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Qb3MgICAgICAgICAgICBTQ0JfSUNTUl9QRU5ETk1JU0VUX1BvcyAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgUG9zaXRpb24sIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUgU0NCX0lDU1JfTk1JUEVORFNFVF9Nc2sgICAgICAgICAgICBTQ0JfSUNTUl9QRU5ETk1JU0VUX01zayAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IE5NSVBFTkRTRVQgTWFzaywgYmFja3dhcmQgY29tcGF0aWJpbGl0eSAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkROTUlDTFJfUG9zICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5ETk1JQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkROTUlDTFJfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5ETk1JQ0xSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5ETk1JQ0xSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNWU0VUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVlNFVF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1ZTRVRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZTRVQgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1ZDTFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNWQ0xSX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9JQ1NSX1BFTkRTVkNMUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVkNMUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUEVORFNUU0VUX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFBFTkRTVFNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RTRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUEVORFNUU0VUX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUU0VUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUEVORFNUQ0xSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1BFTkRTVENMUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9QRU5EU1RDTFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBQRU5EU1RDTFIgTWFzayAqLworCisjZGVmaW5lIFNDQl9JQ1NSX1NUVE5TX1BvcyAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBTVFROUyBQb3NpdGlvbiAoU2VjdXJpdHkgRXh0ZW5zaW9uKSAqLworI2RlZmluZSBTQ0JfSUNTUl9TVFROU19Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfU1RUTlNfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogU1RUTlMgTWFzayAoU2VjdXJpdHkgRXh0ZW5zaW9uKSAqLworCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfUG9zICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX0lTUlBSRUVNUFRfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSUNTUl9JU1JQUkVFTVBUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBJU1JQUkVFTVBUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX1BvcyAgICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9JU1JQRU5ESU5HX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfSVNSUEVORElOR19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogSVNSUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zICAgICAgICAgICAxMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFZFQ1RQRU5ESU5HIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JQ1NSX1ZFQ1RQRU5ESU5HX01zayAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0lDU1JfVkVDVFBFTkRJTkdfUG9zKSAgICAgICAgICAvKiE8IFNDQiBJQ1NSOiBWRUNUUEVORElORyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcyAgICAgICAgICAgICAxMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIElDU1I6IFJFVFRPQkFTRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9SRVRUT0JBU0VfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0lDU1JfUkVUVE9CQVNFX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogUkVUVE9CQVNFIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSUNTUl9WRUNUQUNUSVZFX01zayAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX0lDU1JfVkVDVEFDVElWRV9Qb3MqLykgICAgICAgLyohPCBTQ0IgSUNTUjogVkVDVEFDVElWRSBNYXNrICovCisKKy8qIFNDQiBWZWN0b3IgVGFibGUgT2Zmc2V0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9WVE9SX1RCTE9GRl9Qb3MgICAgICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBWVE9SOiBUQkxPRkYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1ZUT1JfVEJMT0ZGX01zayAgICAgICAgICAgICAgICAoMHgxRkZGRkZGVUwgPDwgU0NCX1ZUT1JfVEJMT0ZGX1BvcykgICAgICAgICAgIC8qITwgU0NCIFZUT1I6IFRCTE9GRiBNYXNrICovCisKKy8qIFNDQiBBcHBsaWNhdGlvbiBJbnRlcnJ1cHQgYW5kIFJlc2V0IENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9WRUNUS0VZX01zayAgICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogVkVDVEtFWSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RLRVlTVEFUX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUS0VZU1RBVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfTXNrICAgICAgICAgICgweEZGRkZVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWVNUQVRfUG9zKSAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RLRVlTVEFUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX1BvcyAgICAgICAgICAgIDE1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfRU5ESUFORVNTX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0VORElBTkVTU19Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IEVORElBTkVTUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1BSSVNfUG9zICAgICAgICAgICAgICAgICAxNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9QUklTX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfUFJJU19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0JGSEZOTUlOU19Qb3MgICAgICAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBCRkhGTk1JTlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX0JGSEZOTUlOU19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9CRkhGTk1JTlNfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBCRkhGTk1JTlMgTWFzayAqLworCisjZGVmaW5lIFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogUFJJR1JPVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSUdST1VQX01zayAgICAgICAgICAgICAoN1VMIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBQUklHUk9VUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0lFU0JfUG9zICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBJbXBsaWNpdCBFU0IgRW5hYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9BSVJDUl9JRVNCX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQUlSQ1JfSUVTQl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBBSVJDUjogSW1wbGljaXQgRVNCIEVuYWJsZSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX0RJVF9Qb3MgICAgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBEYXRhIEluZGVwZW5kZW50IFRpbWluZyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfRElUX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX0RJVF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IERhdGEgSW5kZXBlbmRlbnQgVGltaW5nIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX1BvcyAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRUyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX01zayAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRU19Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBTWVNSRVNFVFJFUSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX0FJUkNSX1NZU1JFU0VUUkVRX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFNZU1JFU0VUUkVRIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQUlSQ1JfVkVDVENMUkFDVElWRV9Qb3MgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQUlSQ1I6IFZFQ1RDTFJBQ1RJVkUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1ZFQ1RDTFJBQ1RJVkVfTXNrICAgICAgICAoMVVMIDw8IFNDQl9BSVJDUl9WRUNUQ0xSQUNUSVZFX1BvcykgICAgICAgICAgIC8qITwgU0NCIEFJUkNSOiBWRUNUQ0xSQUNUSVZFIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TQ1JfU0VWT05QRU5EX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNFVk9OUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0NSX1NFVk9OUEVORF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1NDUl9TRVZPTlBFTkRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0NSOiBTRVZPTlBFTkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQU19Qb3MgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBTX01zayAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBERUVQU19Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUERFRVBfUG9zICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBERUVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TQ1JfU0xFRVBERUVQX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0NSX1NMRUVQREVFUF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTQ1I6IFNMRUVQREVFUCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NDUl9TTEVFUE9ORVhJVF9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9TQ1JfU0xFRVBPTkVYSVRfUG9zKSAgICAgICAgICAgICAgIC8qITwgU0NCIFNDUjogU0xFRVBPTkVYSVQgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhdGlvbiBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DQ1JfVFJEX1BvcyAgICAgICAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFRSRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1RSRF9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9UUkRfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBUUkQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfTE9CX1BvcyAgICAgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IExPQiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0xPQl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9MT0JfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBMT0IgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfQlBfUG9zICAgICAgICAgICAgICAgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfQlBfTXNrICAgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX0JQX1BvcykgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX0lDX1BvcyAgICAgICAgICAgICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBJQyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0lDX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9JQ19Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBJQyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDUl9EQ19Qb3MgICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogREMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9EQ19Nc2sgICAgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfRENfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogREMgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfU1RLT0ZIRk5NSUdOX1BvcyAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFNUS09GSEZOTUlHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX1NUS09GSEZOTUlHTl9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9TVEtPRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBTVEtPRkhGTk1JR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfQkZIRk5NSUdOX1BvcyAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IEJGSEZOTUlHTiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0JGSEZOTUlHTl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9CRkhGTk1JR05fUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBCRkhGTk1JR04gTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfRElWXzBfVFJQX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IERJVl8wX1RSUCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NSX0RJVl8wX1RSUF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDUl9ESVZfMF9UUlBfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBESVZfMF9UUlAgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfUG9zICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1JfVU5BTElHTl9UUlBfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NSX1VOQUxJR05fVFJQX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1I6IFVOQUxJR05fVFJQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NSX1VTRVJTRVRNUEVORF9Qb3MgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NSOiBVU0VSU0VUTVBFTkQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDUl9VU0VSU0VUTVBFTkRfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1JfVVNFUlNFVE1QRU5EX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIENDUjogVVNFUlNFVE1QRU5EIE1hc2sgKi8KKworLyogU0NCIFN5c3RlbSBIYW5kbGVyIENvbnRyb2wgYW5kIFN0YXRlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TSENTUl9IQVJERkFVTFRQRU5ERURfUG9zICAgICAgMjFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogSEFSREZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9IQVJERkFVTFRQRU5ERURfTXNrICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfSEFSREZBVUxUUEVOREVEX1BvcykgICAgICAgICAvKiE8IFNDQiBTSENTUjogSEFSREZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU0VDVVJFRkFVTFRQRU5ERURfUG9zICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNFQ1VSRUZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9TRUNVUkVGQVVMVFBFTkRFRF9Nc2sgICAgKDFVTCA8PCBTQ0JfU0hDU1JfU0VDVVJFRkFVTFRQRU5ERURfUG9zKSAgICAgICAvKiE8IFNDQiBTSENTUjogU0VDVVJFRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TRUNVUkVGQVVMVEVOQV9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU0VDVVJFRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NFQ1VSRUZBVUxURU5BX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TRUNVUkVGQVVMVEVOQV9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTRUNVUkVGQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcyAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRFTkFfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxURU5BX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxURU5BIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zICAgICAgICAgIDE3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVEVOQV9Nc2sgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfQlVTRkFVTFRFTkFfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRFTkEgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxURU5BX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NRU1GQVVMVEVOQV9Qb3MpICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVEVOQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Qb3MgICAgICAgICAxNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NWQ0FMTFBFTkRFRF9Nc2sgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TVkNBTExQRU5ERURfUG9zKSAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTVkNBTExQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MgICAgICAgMTRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogQlVTRkFVTFRQRU5ERUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUUEVOREVEX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9CVVNGQVVMVFBFTkRFRF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVFBFTkRFRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcyAgICAgICAxM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNRU1GQVVMVFBFTkRFRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRQRU5ERURfTXNrICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX01FTUZBVUxUUEVOREVEX1BvcykgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUUEVOREVEIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUUEVOREVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9VU0dGQVVMVFBFTkRFRF9Nc2sgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfVVNHRkFVTFRQRU5ERURfUG9zKSAgICAgICAgICAvKiE8IFNDQiBTSENTUjogVVNHRkFVTFRQRU5ERUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TWVNUSUNLQUNUX1BvcyAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU1lTVElDS0FDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1lTVElDS0FDVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NZU1RJQ0tBQ1RfUG9zKSAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNZU1RJQ0tBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfUG9zICAgICAgICAgICAgMTBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9QRU5EU1ZBQ1RfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfU0hDU1JfUEVORFNWQUNUX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogUEVORFNWQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTU9OSVRPUkFDVF9Qb3MgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1PTklUT1JBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX01PTklUT1JBQ1RfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9NT05JVE9SQUNUX1BvcykgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBNT05JVE9SQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX1BvcyAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfU1ZDQUxMQUNUX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1NWQ0FMTEFDVF9Qb3MpICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFNWQ0FMTEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX05NSUFDVF9Qb3MgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBOTUlBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX05NSUFDVF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9OTUlBQ1RfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBOTUlBQ1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9TSENTUl9TRUNVUkVGQVVMVEFDVF9Qb3MgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTSENTUjogU0VDVVJFRkFVTFRBQ1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX1NIQ1NSX1NFQ1VSRUZBVUxUQUNUX01zayAgICAgICAoMVVMIDw8IFNDQl9TSENTUl9TRUNVUkVGQVVMVEFDVF9Qb3MpICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBTRUNVUkVGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcyAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBVU0dGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfVVNHRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX1VTR0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IFVTR0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfSEFSREZBVUxUQUNUX1BvcyAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEhBUkRGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfSEFSREZBVUxUQUNUX01zayAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0hBUkRGQVVMVEFDVF9Qb3MpICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEhBUkRGQVVMVEFDVCBNYXNrICovCisKKyNkZWZpbmUgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX1BvcyAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFNIQ1NSOiBCVVNGQVVMVEFDVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU0hDU1JfQlVTRkFVTFRBQ1RfTXNrICAgICAgICAgICgxVUwgPDwgU0NCX1NIQ1NSX0JVU0ZBVUxUQUNUX1BvcykgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IEJVU0ZBVUxUQUNUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgU0hDU1I6IE1FTUZBVUxUQUNUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Nc2sgICAgICAgICAgKDFVTCAvKjw8IFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MqLykgICAgICAgICAvKiE8IFNDQiBTSENTUjogTUVNRkFVTFRBQ1QgTWFzayAqLworCisvKiBTQ0IgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcyAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogVXNhZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX1VTR0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZGRlVMIDw8IFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zKSAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBVc2FnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0JVU0ZBVUxUU1JfTXNrICAgICAgICAgICAgKDB4RkZVTCA8PCBTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcykgICAgICAgICAgICAvKiE8IFNDQiBDRlNSOiBCdXMgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9NRU1GQVVMVFNSX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUjogTWVtb3J5IE1hbmFnZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfTUVNRkFVTFRTUl9Nc2sgICAgICAgICAgICAoMHhGRlVMIC8qPDwgU0NCX0NGU1JfTUVNRkFVTFRTUl9Qb3MqLykgICAgICAgIC8qITwgU0NCIENGU1I6IE1lbW9yeSBNYW5hZ2UgRmF1bHQgU3RhdHVzIFJlZ2lzdGVyIE1hc2sgKi8KKworLyogTWVtTWFuYWdlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciAocGFydCBvZiBTQ0IgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlcikgKi8KKyNkZWZpbmUgU0NCX0NGU1JfTU1BUlZBTElEX1BvcyAgICAgICAgICAgICAoU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyArIDdVKSAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKE1NRlNSKTogTU1BUlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX01NQVJWQUxJRF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9NTUFSVkFMSURfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChNTUZTUik6IE1NQVJWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfTUxTUEVSUl9Qb3MgICAgICAgICAgICAgICAoU0NCX1NIQ1NSX01FTUZBVUxUQUNUX1BvcyArIDVVKSAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKE1NRlNSKTogTUxTUEVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NTFNQRVJSX01zayAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfTUxTUEVSUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoTU1GU1IpOiBNTFNQRVJSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9NU1RLRVJSX1BvcyAgICAgICAgICAgICAgIChTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zICsgNFUpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoTU1GU1IpOiBNU1RLRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX01TVEtFUlJfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9NU1RLRVJSX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChNTUZTUik6IE1TVEtFUlIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX01VTlNUS0VSUl9Qb3MgICAgICAgICAgICAgKFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgKyAzVSkgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChNTUZTUik6IE1VTlNUS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9NVU5TVEtFUlJfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfTVVOU1RLRVJSX1BvcykgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoTU1GU1IpOiBNVU5TVEtFUlIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX0RBQ0NWSU9MX1BvcyAgICAgICAgICAgICAgKFNDQl9TSENTUl9NRU1GQVVMVEFDVF9Qb3MgKyAxVSkgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChNTUZTUik6IERBQ0NWSU9MIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0RBQ0NWSU9MX01zayAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9EQUNDVklPTF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChNTUZTUik6IERBQ0NWSU9MIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9JQUNDVklPTF9Qb3MgICAgICAgICAgICAgIChTQ0JfU0hDU1JfTUVNRkFVTFRBQ1RfUG9zICsgMFUpICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoTU1GU1IpOiBJQUNDVklPTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9JQUNDVklPTF9Nc2sgICAgICAgICAgICAgICgxVUwgLyo8PCBTQ0JfQ0ZTUl9JQUNDVklPTF9Qb3MqLykgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoTU1GU1IpOiBJQUNDVklPTCBNYXNrICovCisKKy8qIEJ1c0ZhdWx0IFN0YXR1cyBSZWdpc3RlciAocGFydCBvZiBTQ0IgQ29uZmlndXJhYmxlIEZhdWx0IFN0YXR1cyBSZWdpc3RlcikgKi8KKyNkZWZpbmUgU0NCX0NGU1JfQkZBUlZBTElEX1BvcyAgICAgICAgICAgIChTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcyArIDdVKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKEJGU1IpOiBCRkFSVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfQkZBUlZBTElEX01zayAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfQkZBUlZBTElEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKEJGU1IpOiBCRkFSVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX0xTUEVSUl9Qb3MgICAgICAgICAgICAgICAoU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgKyA1VSkgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChCRlNSKTogTFNQRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0xTUEVSUl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX0xTUEVSUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChCRlNSKTogTFNQRVJSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9TVEtFUlJfUG9zICAgICAgICAgICAgICAgKFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICsgNFUpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoQkZTUik6IFNUS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9TVEtFUlJfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9TVEtFUlJfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoQkZTUik6IFNUS0VSUiBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfVU5TVEtFUlJfUG9zICAgICAgICAgICAgIChTQ0JfQ0ZTUl9CVVNGQVVMVFNSX1BvcyArIDNVKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKEJGU1IpOiBVTlNUS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VTlNUS0VSUl9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9VTlNUS0VSUl9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoQkZTUik6IFVOU1RLRVJSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9JTVBSRUNJU0VSUl9Qb3MgICAgICAgICAgKFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICsgMlUpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoQkZTUik6IElNUFJFQ0lTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0lNUFJFQ0lTRVJSX01zayAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX0lNUFJFQ0lTRVJSX1BvcykgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChCRlNSKTogSU1QUkVDSVNFUlIgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX1BSRUNJU0VSUl9Qb3MgICAgICAgICAgICAoU0NCX0NGU1JfQlVTRkFVTFRTUl9Qb3MgKyAxVSkgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChCRlNSKTogUFJFQ0lTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX1BSRUNJU0VSUl9Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX1BSRUNJU0VSUl9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChCRlNSKTogUFJFQ0lTRVJSIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9JQlVTRVJSX1BvcyAgICAgICAgICAgICAgKFNDQl9DRlNSX0JVU0ZBVUxUU1JfUG9zICsgMFUpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoQkZTUik6IElCVVNFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfSUJVU0VSUl9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfSUJVU0VSUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKEJGU1IpOiBJQlVTRVJSIE1hc2sgKi8KKworLyogVXNhZ2VGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKHBhcnQgb2YgU0NCIENvbmZpZ3VyYWJsZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIpICovCisjZGVmaW5lIFNDQl9DRlNSX0RJVkJZWkVST19Qb3MgICAgICAgICAgICAoU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MgKyA5VSkgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChVRlNSKTogRElWQllaRVJPIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0RJVkJZWkVST19Nc2sgICAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX0RJVkJZWkVST19Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChVRlNSKTogRElWQllaRVJPIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9VTkFMSUdORURfUG9zICAgICAgICAgICAgKFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICsgOFUpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoVUZTUik6IFVOQUxJR05FRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9VTkFMSUdORURfTXNrICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9VTkFMSUdORURfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoVUZTUik6IFVOQUxJR05FRCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfU1RLT0ZfUG9zICAgICAgICAgICAgICAgIChTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcyArIDRVKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKFVGU1IpOiBTVEtPRiBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0ZTUl9TVEtPRl9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0ZTUl9TVEtPRl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoVUZTUik6IFNUS09GIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9OT0NQX1BvcyAgICAgICAgICAgICAgICAgKFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICsgM1UpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoVUZTUik6IE5PQ1AgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfTk9DUF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfTk9DUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKFVGU1IpOiBOT0NQIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0ZTUl9JTlZQQ19Qb3MgICAgICAgICAgICAgICAgKFNDQl9DRlNSX1VTR0ZBVUxUU1JfUG9zICsgMlUpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0ZTUiAoVUZTUik6IElOVlBDIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX0lOVlBDX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX0lOVlBDX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChVRlNSKTogSU5WUEMgTWFzayAqLworCisjZGVmaW5lIFNDQl9DRlNSX0lOVlNUQVRFX1BvcyAgICAgICAgICAgICAoU0NCX0NGU1JfVVNHRkFVTFRTUl9Qb3MgKyAxVSkgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChVRlNSKTogSU5WU1RBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NGU1JfSU5WU1RBVEVfTXNrICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NGU1JfSU5WU1RBVEVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKFVGU1IpOiBJTlZTVEFURSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NGU1JfVU5ERUZJTlNUUl9Qb3MgICAgICAgICAgIChTQ0JfQ0ZTUl9VU0dGQVVMVFNSX1BvcyArIDBVKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENGU1IgKFVGU1IpOiBVTkRFRklOU1RSIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DRlNSX1VOREVGSU5TVFJfTXNrICAgICAgICAgICAoMVVMIDw8IFNDQl9DRlNSX1VOREVGSU5TVFJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBDRlNSIChVRlNSKTogVU5ERUZJTlNUUiBNYXNrICovCisKKy8qIFNDQiBIYXJkIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfSEZTUl9ERUJVR0VWVF9Qb3MgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogREVCVUdFVlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0hGU1JfREVCVUdFVlRfTXNrICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9IRlNSX0RFQlVHRVZUX1BvcykgICAgICAgICAgICAgICAgIC8qITwgU0NCIEhGU1I6IERFQlVHRVZUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfSEZTUl9GT1JDRURfUG9zICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSEZTUjogRk9SQ0VEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX0ZPUkNFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9GT1JDRURfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBGT1JDRUQgTWFzayAqLworCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfUG9zICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9IRlNSX1ZFQ1RUQkxfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfSEZTUl9WRUNUVEJMX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBIRlNSOiBWRUNUVEJMIE1hc2sgKi8KKworLyogU0NCIERlYnVnIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfREZTUl9QTVVfUG9zICAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogUE1VIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX1BNVV9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9QTVVfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBQTVUgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0VYVEVSTkFMX1BvcyAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBFWFRFUk5BTCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfREZTUl9FWFRFUk5BTF9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0RGU1JfRVhURVJOQUxfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogRVhURVJOQUwgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX1ZDQVRDSF9Qb3MgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBWQ0FUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfVkNBVENIX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX1ZDQVRDSF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IFZDQVRDSCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0RGU1JfRFdUVFJBUF9Qb3MgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IERXVFRSQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RGU1JfRFdUVFJBUF9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9ERlNSX0RXVFRSQVBfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERGU1I6IERXVFRSQVAgTWFzayAqLworCisjZGVmaW5lIFNDQl9ERlNSX0JLUFRfUG9zICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBCS1BUIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0JLUFRfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfREZTUl9CS1BUX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBCS1BUIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfREZTUl9IQUxURURfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgREZTUjogSEFMVEVEIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9ERlNSX0hBTFRFRF9Nc2sgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9ERlNSX0hBTFRFRF9Qb3MqLykgICAgICAgICAgICAgICAvKiE8IFNDQiBERlNSOiBIQUxURUQgTWFzayAqLworCisvKiBTQ0IgTm9uLVNlY3VyZSBBY2Nlc3MgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfTlNBQ1JfQ1AxMV9Qb3MgICAgICAgICAgICAgICAgIDExVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQMTEgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX05TQUNSX0NQMTFfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9OU0FDUl9DUDExX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDExIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfTlNBQ1JfQ1AxMF9Qb3MgICAgICAgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQMTAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX05TQUNSX0NQMTBfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9OU0FDUl9DUDEwX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDEwIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfTlNBQ1JfQ1A3X1BvcyAgICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQNyBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfTlNBQ1JfQ1A3X01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX05TQUNSX0NQN19Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQNyBNYXNrICovCisKKyNkZWZpbmUgU0NCX05TQUNSX0NQNl9Qb3MgICAgICAgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDYgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX05TQUNSX0NQNl9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9OU0FDUl9DUDZfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDYgTWFzayAqLworCisjZGVmaW5lIFNDQl9OU0FDUl9DUDVfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBOU0FDUjogQ1A1IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9OU0FDUl9DUDVfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfTlNBQ1JfQ1A1X1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBOU0FDUjogQ1A1IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfTlNBQ1JfQ1A0X1BvcyAgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQNCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfTlNBQ1JfQ1A0X01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX05TQUNSX0NQNF9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQNCBNYXNrICovCisKKyNkZWZpbmUgU0NCX05TQUNSX0NQM19Qb3MgICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX05TQUNSX0NQM19Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9OU0FDUl9DUDNfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDMgTWFzayAqLworCisjZGVmaW5lIFNDQl9OU0FDUl9DUDJfUG9zICAgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBOU0FDUjogQ1AyIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9OU0FDUl9DUDJfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfTlNBQ1JfQ1AyX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBOU0FDUjogQ1AyIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfTlNBQ1JfQ1AxX1BvcyAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQMSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfTlNBQ1JfQ1AxX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX05TQUNSX0NQMV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgTlNBQ1I6IENQMSBNYXNrICovCisKKyNkZWZpbmUgU0NCX05TQUNSX0NQMF9Qb3MgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDAgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX05TQUNSX0NQMF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0NCX05TQUNSX0NQMF9Qb3MqLykgICAgICAgICAgICAgICAgIC8qITwgU0NCIE5TQUNSOiBDUDAgTWFzayAqLworCisvKiBTQ0IgRGVidWcgRmVhdHVyZSBSZWdpc3RlciAwIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9JRF9ERlJfVURFX1BvcyAgICAgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJRF9ERlI6IFVERSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfSURfREZSX1VERV9Nc2sgICAgICAgICAgICAgICAgICgweEZVTCA8PCBTQ0JfSURfREZSX1VERV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgSURfREZSOiBVREUgTWFzayAqLworCisjZGVmaW5lIFNDQl9JRF9ERlJfTVByb2ZEYmdfUG9zICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBJRF9ERlI6IE1Qcm9mRGJnIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9JRF9ERlJfTVByb2ZEYmdfTXNrICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9JRF9ERlJfTVByb2ZEYmdfUG9zKSAgICAgICAgICAgICAvKiE8IFNDQiBJRF9ERlI6IE1Qcm9mRGJnIE1hc2sgKi8KKworLyogU0NCIENhY2hlIExldmVsIElEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9DTElEUl9MT1VVX1BvcyAgICAgICAgICAgICAgICAgMjdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9VVSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0xJRFJfTE9VVV9Nc2sgICAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NMSURSX0xPVVVfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0xJRFI6IExvVVUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DTElEUl9MT0NfUG9zICAgICAgICAgICAgICAgICAgMjRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9DIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DTElEUl9MT0NfTXNrICAgICAgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQ0xJRFJfTE9DX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDTElEUjogTG9DIE1hc2sgKi8KKworLyogU0NCIENhY2hlIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NUUl9GT1JNQVRfUG9zICAgICAgICAgICAgICAgICAyOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRm9ybWF0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfRk9STUFUX01zayAgICAgICAgICAgICAgICAgKDdVTCA8PCBTQ0JfQ1RSX0ZPUk1BVF9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEZvcm1hdCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9DV0dfUG9zICAgICAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogQ1dHIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfQ1dHX01zayAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DVFJfQ1dHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IENXRyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9FUkdfUG9zICAgICAgICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRVJHIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfRVJHX01zayAgICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IFNDQl9DVFJfRVJHX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEVSRyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NUUl9ETUlOTElORV9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRG1pbkxpbmUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NUUl9ETUlOTElORV9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgU0NCX0NUUl9ETUlOTElORV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIENUUjogRG1pbkxpbmUgTWFzayAqLworCisjZGVmaW5lIFNDQl9DVFJfSU1JTkxJTkVfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEltSW5MaW5lIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DVFJfSU1JTkxJTkVfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgU0NCX0NUUl9JTUlOTElORV9Qb3MqLykgICAgICAgICAgICAvKiE8IFNDQiBDVFI6IEltSW5MaW5lIE1hc2sgKi8KKworLyogU0NCIENhY2hlIFNpemUgSUQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XVF9Qb3MgICAgICAgICAgICAgICAgICAzMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XVF9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1NJRFJfV1RfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV1QgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0JfUG9zICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdCIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DQ1NJRFJfV0JfTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQ0JfQ0NTSURSX1dCX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IFdCIE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX1JBX1BvcyAgICAgICAgICAgICAgICAgIDI5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBSQSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX1JBX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX0NDU0lEUl9SQV9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBSQSBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9XQV9Qb3MgICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV0EgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9XQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IFNDQl9DQ1NJRFJfV0FfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogV0EgTWFzayAqLworCisjZGVmaW5lIFNDQl9DQ1NJRFJfTlVNU0VUU19Qb3MgICAgICAgICAgICAgMTNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBDQ1NJRFI6IE51bVNldHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0NDU0lEUl9OVU1TRVRTX01zayAgICAgICAgICAgICAoMHg3RkZGVUwgPDwgU0NCX0NDU0lEUl9OVU1TRVRTX1BvcykgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogTnVtU2V0cyBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NDU0lEUl9BU1NPQ0lBVElWSVRZX1BvcyAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENDU0lEUjogQXNzb2NpYXRpdml0eSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX0FTU09DSUFUSVZJVFlfTXNrICAgICAgICgweDNGRlVMIDw8IFNDQl9DQ1NJRFJfQVNTT0NJQVRJVklUWV9Qb3MpICAgICAgLyohPCBTQ0IgQ0NTSURSOiBBc3NvY2lhdGl2aXR5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfQ0NTSURSX0xJTkVTSVpFX1BvcyAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBMaW5lU2l6ZSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ0NTSURSX0xJTkVTSVpFX01zayAgICAgICAgICAgICg3VUwgLyo8PCBTQ0JfQ0NTSURSX0xJTkVTSVpFX1BvcyovKSAgICAgICAgICAgLyohPCBTQ0IgQ0NTSURSOiBMaW5lU2l6ZSBNYXNrICovCisKKy8qIFNDQiBDYWNoZSBTaXplIFNlbGVjdGlvbiBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfQ1NTRUxSX0xFVkVMX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1NTRUxSOiBMZXZlbCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfQ1NTRUxSX0xFVkVMX01zayAgICAgICAgICAgICAgICg3VUwgPDwgU0NCX0NTU0VMUl9MRVZFTF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgQ1NTRUxSOiBMZXZlbCBNYXNrICovCisKKyNkZWZpbmUgU0NCX0NTU0VMUl9JTkRfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIENTU0VMUjogSW5EIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9DU1NFTFJfSU5EX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNDQl9DU1NFTFJfSU5EX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IFNDQiBDU1NFTFI6IEluRCBNYXNrICovCisKKy8qIFNDQiBTb2Z0d2FyZSBUcmlnZ2VyZWQgSW50ZXJydXB0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9TVElSX0lOVElEX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBTVElSOiBJTlRJRCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfU1RJUl9JTlRJRF9Nc2sgICAgICAgICAgICAgICAgICgweDFGRlVMIC8qPDwgU0NCX1NUSVJfSU5USURfUG9zKi8pICAgICAgICAgICAgLyohPCBTQ0IgU1RJUjogSU5USUQgTWFzayAqLworCisvKiBTQ0IgUkFTIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfUkZTUl9WX1BvcyAgICAgICAgICAgICAgICAgICAgIDMxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgUkZTUjogViBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfUkZTUl9WX01zayAgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgU0NCX1JGU1JfVl9Qb3MpICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgUkZTUjogViBNYXNrICovCisKKyNkZWZpbmUgU0NCX1JGU1JfSVNfUG9zICAgICAgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFJGU1I6IElTIFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9SRlNSX0lTX01zayAgICAgICAgICAgICAgICAgICAgKDB4N0ZGRlVMIDw8IFNDQl9SRlNSX0lTX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBSRlNSOiBJUyBNYXNrICovCisKKyNkZWZpbmUgU0NCX1JGU1JfVUVUX1BvcyAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIFJGU1I6IFVFVCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfUkZTUl9VRVRfTXNrICAgICAgICAgICAgICAgICAgICgzVUwgLyo8PCBTQ0JfUkZTUl9VRVRfUG9zKi8pICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgUkZTUjogVUVUIE1hc2sgKi8KKworLyogU0NCIEQtQ2FjaGUgSW52YWxpZGF0ZSBieSBTZXQtd2F5IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFNDQl9EQ0lTV19XQVlfUG9zICAgICAgICAgICAgICAgICAgMzBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogV2F5IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EQ0lTV19XQVlfTXNrICAgICAgICAgICAgICAgICAgKDNVTCA8PCBTQ0JfRENJU1dfV0FZX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0lTVzogV2F5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRENJU1dfU0VUX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENJU1c6IFNldCBQb3NpdGlvbiAqLworI2RlZmluZSBTQ0JfRENJU1dfU0VUX01zayAgICAgICAgICAgICAgICAgICgweDFGRlVMIDw8IFNDQl9EQ0lTV19TRVRfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENJU1c6IFNldCBNYXNrICovCisKKy8qIFNDQiBELUNhY2hlIENsZWFuIGJ5IFNldC13YXkgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0NCX0RDQ1NXX1dBWV9Qb3MgICAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBXYXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ1NXX1dBWV9Nc2sgICAgICAgICAgICAgICAgICAoM1VMIDw8IFNDQl9EQ0NTV19XQVlfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ1NXOiBXYXkgTWFzayAqLworCisjZGVmaW5lIFNDQl9EQ0NTV19TRVRfUG9zICAgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NTVzogU2V0IFBvc2l0aW9uICovCisjZGVmaW5lIFNDQl9EQ0NTV19TRVRfTXNrICAgICAgICAgICAgICAgICAgKDB4MUZGVUwgPDwgU0NCX0RDQ1NXX1NFVF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IFNDQiBEQ0NTVzogU2V0IE1hc2sgKi8KKworLyogU0NCIEQtQ2FjaGUgQ2xlYW4gYW5kIEludmFsaWRhdGUgYnkgU2V0LXdheSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ0JfRENDSVNXX1dBWV9Qb3MgICAgICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBXYXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ0lTV19XQVlfTXNrICAgICAgICAgICAgICAgICAoM1VMIDw8IFNDQl9EQ0NJU1dfV0FZX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ0lTVzogV2F5IE1hc2sgKi8KKworI2RlZmluZSBTQ0JfRENDSVNXX1NFVF9Qb3MgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQ0IgRENDSVNXOiBTZXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0NCX0RDQ0lTV19TRVRfTXNrICAgICAgICAgICAgICAgICAoMHgxRkZVTCA8PCBTQ0JfRENDSVNXX1NFVF9Qb3MpICAgICAgICAgICAgICAgIC8qITwgU0NCIERDQ0lTVzogU2V0IE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TQ25TQ0IgU3lzdGVtIENvbnRyb2xzIG5vdCBpbiBTQ0IgKFNDblNDQikKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gQ29udHJvbCBhbmQgSUQgUmVnaXN0ZXIgbm90IGluIHRoZSBTQ0IKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFN5c3RlbSBDb250cm9sIGFuZCBJRCBSZWdpc3RlciBub3QgaW4gdGhlIFNDQi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQwWzFVXTsKKyAgX19JTSAgdWludDMyX3QgSUNUUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBJbnRlcnJ1cHQgQ29udHJvbGxlciBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEFDVExSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQXV4aWxpYXJ5IENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgQ1BQV1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSL1cpICBDb3Byb2Nlc3NvciBQb3dlciBDb250cm9sICBSZWdpc3RlciAqLworfSBTQ25TQ0JfVHlwZTsKKworLyogSW50ZXJydXB0IENvbnRyb2xsZXIgVHlwZSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBQb3NpdGlvbiAqLworI2RlZmluZSBTQ25TQ0JfSUNUUl9JTlRMSU5FU05VTV9Nc2sgICAgICAgICgweEZVTCAvKjw8IFNDblNDQl9JQ1RSX0lOVExJTkVTTlVNX1BvcyovKSAgLyohPCBJQ1RSOiBJTlRMSU5FU05VTSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NDbm90U0NCICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19TeXNUaWNrICAgICBTeXN0ZW0gVGljayBUaW1lciAoU3lzVGljaykKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBTeXN0ZW0gVGltZXIgUmVnaXN0ZXJzLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgU3lzdGVtIFRpbWVyIChTeXNUaWNrKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19JT00gdWludDMyX3QgQ1RSTDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwIChSL1cpICBTeXNUaWNrIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBMT0FEOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIFN5c1RpY2sgUmVsb2FkIFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFZBTDsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgU3lzVGljayBDdXJyZW50IFZhbHVlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IENBTElCOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi8gKSAgU3lzVGljayBDYWxpYnJhdGlvbiBSZWdpc3RlciAqLworfSBTeXNUaWNrX1R5cGU7CisKKy8qIFN5c1RpY2sgQ29udHJvbCAvIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfQ09VTlRGTEFHX01zayAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX0NPVU5URkxBR19Qb3MpICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IENPVU5URkxBRyBNYXNrICovCisKKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgICAgICAgICAoMVVMIDw8IFN5c1RpY2tfQ1RSTF9DTEtTT1VSQ0VfUG9zKSAgICAgICAgICAgIC8qITwgU3lzVGljayBDVFJMOiBDTEtTT1VSQ0UgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9USUNLSU5UX1BvcyAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogVElDS0lOVCBQb3NpdGlvbiAqLworI2RlZmluZSBTeXNUaWNrX0NUUkxfVElDS0lOVF9Nc2sgICAgICAgICAgICgxVUwgPDwgU3lzVGlja19DVFJMX1RJQ0tJTlRfUG9zKSAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENUUkw6IFRJQ0tJTlQgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgKDFVTCAvKjw8IFN5c1RpY2tfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU3lzVGljayBSZWxvYWQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19MT0FEX1JFTE9BRF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfTE9BRF9SRUxPQURfUG9zKi8pICAgIC8qITwgU3lzVGljayBMT0FEOiBSRUxPQUQgTWFzayAqLworCisvKiBTeXNUaWNrIEN1cnJlbnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgU3lzVGlja19WQUxfQ1VSUkVOVF9Nc2sgICAgICAgICAgICAoMHhGRkZGRkZVTCAvKjw8IFN5c1RpY2tfVkFMX0NVUlJFTlRfUG9zKi8pICAgIC8qITwgU3lzVGljayBWQUw6IENVUlJFTlQgTWFzayAqLworCisvKiBTeXNUaWNrIENhbGlicmF0aW9uIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfUG9zICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfTk9SRUZfTXNrICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX05PUkVGX1BvcykgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IE5PUkVGIE1hc2sgKi8KKworI2RlZmluZSBTeXNUaWNrX0NBTElCX1NLRVdfUG9zICAgICAgICAgICAgIDMwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXNUaWNrIENBTElCOiBTS0VXIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfU0tFV19Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTeXNUaWNrX0NBTElCX1NLRVdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFNLRVcgTWFzayAqLworCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIFBvc2l0aW9uICovCisjZGVmaW5lIFN5c1RpY2tfQ0FMSUJfVEVOTVNfTXNrICAgICAgICAgICAgKDB4RkZGRkZGVUwgLyo8PCBTeXNUaWNrX0NBTElCX1RFTk1TX1BvcyovKSAgICAvKiE8IFN5c1RpY2sgQ0FMSUI6IFRFTk1TIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfU3lzVGljayAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfSVRNICAgICBJbnN0cnVtZW50YXRpb24gVHJhY2UgTWFjcm9jZWxsIChJVE0pCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCAoSVRNKQorICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgSW5zdHJ1bWVudGF0aW9uIFRyYWNlIE1hY3JvY2VsbCBSZWdpc3RlciAoSVRNKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19PTSAgdW5pb24KKyAgeworICAgIF9fT00gIHVpbnQ4X3QgICAgdTg7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKCAvVykgIElUTSBTdGltdWx1cyBQb3J0IDgtYml0ICovCisgICAgX19PTSAgdWludDE2X3QgICB1MTY7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMTYtYml0ICovCisgICAgX19PTSAgdWludDMyX3QgICB1MzI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgMzItYml0ICovCisgIH0gIFBPUlQgWzMyVV07ICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoIC9XKSAgSVRNIFN0aW11bHVzIFBvcnQgUmVnaXN0ZXJzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFs4NjRVXTsKKyAgX19JT00gdWludDMyX3QgVEVSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RTAwIChSL1cpICBJVE0gVHJhY2UgRW5hYmxlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxNVVdOworICBfX0lPTSB1aW50MzJfdCBUUFI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhFNDAgKFIvVykgIElUTSBUcmFjZSBQcml2aWxlZ2UgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzE1VV07CisgIF9fSU9NIHVpbnQzMl90IFRDUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEU4MCAoUi9XKSAgSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzMyVV07CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENFs0M1VdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAvVykgIElUTSBMb2NrIEFjY2VzcyBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBMU1I7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjQgKFIvICkgIElUTSBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDVbMVVdOworICBfX0lNICB1aW50MzJfdCBERVZBUkNIOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQkMgKFIvICkgIElUTSBEZXZpY2UgQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENlszVV07CisgIF9fSU0gIHVpbnQzMl90IERFVlRZUEU7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZDQyAoUi8gKSAgSVRNIERldmljZSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDQ7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEMCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzQgKi8KKyAgX19JTSAgdWludDMyX3QgUElENTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkQ0IChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjNSAqLworICBfX0lNICB1aW50MzJfdCBQSUQ2OyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRDggKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICM2ICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDc7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZEQyAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzcgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMDsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkUwIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMCAqLworICBfX0lNICB1aW50MzJfdCBQSUQxOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRTQgKFIvICkgIElUTSBQZXJpcGhlcmFsIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMxICovCisgIF9fSU0gIHVpbnQzMl90IFBJRDI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZFOCAoUi8gKSAgSVRNIFBlcmlwaGVyYWwgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzIgKi8KKyAgX19JTSAgdWludDMyX3QgUElEMzsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkVDIChSLyApICBJVE0gUGVyaXBoZXJhbCBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMyAqLworICBfX0lNICB1aW50MzJfdCBDSUQwOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRjAgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMwICovCisgIF9fSU0gIHVpbnQzMl90IENJRDE7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZGNCAoUi8gKSAgSVRNIENvbXBvbmVudCAgSWRlbnRpZmljYXRpb24gUmVnaXN0ZXIgIzEgKi8KKyAgX19JTSAgdWludDMyX3QgQ0lEMjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkY4IChSLyApICBJVE0gQ29tcG9uZW50ICBJZGVudGlmaWNhdGlvbiBSZWdpc3RlciAjMiAqLworICBfX0lNICB1aW50MzJfdCBDSUQzOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGRkMgKFIvICkgIElUTSBDb21wb25lbnQgIElkZW50aWZpY2F0aW9uIFJlZ2lzdGVyICMzICovCit9IElUTV9UeXBlOworCisvKiBJVE0gU3RpbXVsdXMgUG9ydCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBJVE1fU1RJTV9ESVNBQkxFRF9Qb3MgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gU1RJTTogRElTQUJMRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1NUSU1fRElTQUJMRURfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgSVRNX1NUSU1fRElTQUJMRURfUG9zKSAgICAgICAgICAgICAgIC8qITwgSVRNIFNUSU06IERJU0FCTEVEIE1hc2sgKi8KKworI2RlZmluZSBJVE1fU1RJTV9GSUZPUkVBRFlfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gU1RJTTogRklGT1JFQURZIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9TVElNX0ZJRk9SRUFEWV9Nc2sgICAgICAgICAgICAgKDB4MVVMIC8qPDwgSVRNX1NUSU1fRklGT1JFQURZX1BvcyovKSAgICAgICAgICAvKiE8IElUTSBTVElNOiBGSUZPUkVBRFkgTWFzayAqLworCisvKiBJVE0gVHJhY2UgUHJpdmlsZWdlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UUFJfUFJJVk1BU0tfTXNrICAgICAgICAgICAgICAgKDB4RlVMIC8qPDwgSVRNX1RQUl9QUklWTUFTS19Qb3MqLykgICAgICAgICAgICAvKiE8IElUTSBUUFI6IFBSSVZNQVNLIE1hc2sgKi8KKworLyogSVRNIFRyYWNlIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgSVRNX1RDUl9CVVNZX1BvcyAgICAgICAgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogQlVTWSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0JVU1lfTXNrICAgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9CVVNZX1BvcykgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBCVVNZIE1hc2sgKi8KKworI2RlZmluZSBJVE1fVENSX1RSQUNFQlVTSURfUG9zICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1RSQUNFQlVTSURfTXNrICAgICAgICAgICAgICgweDdGVUwgPDwgSVRNX1RDUl9UUkFDRUJVU0lEX1BvcykgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBBVEJJRCBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX1BvcyAgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9HVFNGUkVRX01zayAgICAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfR1RTRlJFUV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogR2xvYmFsIHRpbWVzdGFtcCBmcmVxdWVuY3kgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfVFNQUkVTQ0FMRV9Qb3MgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFRTUFJFU0NBTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU1BSRVNDQUxFX01zayAgICAgICAgICAgICAoM1VMIDw8IElUTV9UQ1JfVFNQUkVTQ0FMRV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNQUkVTQ0FMRSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9TVEFMTEVOQV9Qb3MgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1RBTExFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TVEFMTEVOQV9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1RBTExFTkFfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1RBTExFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1dPRU5BX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNXT0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX1NXT0VOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9TV09FTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBTV09FTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfRFdURU5BX1BvcyAgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IERXVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fVENSX0RXVEVOQV9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgSVRNX1RDUl9EV1RFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBJVE0gVENSOiBEV1RFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfU1lOQ0VOQV9Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IFNZTkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9TWU5DRU5BX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfU1lOQ0VOQV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogU1lOQ0VOQSBNYXNrICovCisKKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Qb3MgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX1RDUl9UU0VOQV9Nc2sgICAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9UQ1JfVFNFTkFfUG9zKSAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIFRDUjogVFNFTkEgTWFzayAqLworCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9UQ1JfSVRNRU5BX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IElUTV9UQ1JfSVRNRU5BX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IElUTSBUQ1I6IElUTSBFbmFibGUgYml0IE1hc2sgKi8KKworLyogSVRNIExvY2sgU3RhdHVzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIElUTV9MU1JfQnl0ZUFjY19Qb3MgICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEJ5dGVBY2MgUG9zaXRpb24gKi8KKyNkZWZpbmUgSVRNX0xTUl9CeXRlQWNjX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IElUTV9MU1JfQnl0ZUFjY19Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQnl0ZUFjYyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9BY2Nlc3NfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogQWNjZXNzIFBvc2l0aW9uICovCisjZGVmaW5lIElUTV9MU1JfQWNjZXNzX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBJVE1fTFNSX0FjY2Vzc19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IElUTSBMU1I6IEFjY2VzcyBNYXNrICovCisKKyNkZWZpbmUgSVRNX0xTUl9QcmVzZW50X1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIExTUjogUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBJVE1fTFNSX1ByZXNlbnRfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBJVE1fTFNSX1ByZXNlbnRfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBJVE0gTFNSOiBQcmVzZW50IE1hc2sgKi8KKworLypAfSovIC8qIGVuZCBvZiBncm91cCBDTVNJU19JVE0gKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0RXVCAgICAgRGF0YSBXYXRjaHBvaW50IGFuZCBUcmFjZSAoRFdUKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgKERXVCkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIERhdGEgV2F0Y2hwb2ludCBhbmQgVHJhY2UgUmVnaXN0ZXIgKERXVCkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBDWUNDTlQ7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDQgKFIvVykgIEN5Y2xlIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENQSUNOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgQ1BJIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEVYQ0NOVDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRXhjZXB0aW9uIE92ZXJoZWFkIENvdW50IFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFNMRUVQQ05UOyAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgU2xlZXAgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgTFNVQ05UOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBMU1UgQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgRk9MRENOVDsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBGb2xkZWQtaW5zdHJ1Y3Rpb24gQ291bnQgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgUENTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDFDIChSLyApICBQcm9ncmFtIENvdW50ZXIgU2FtcGxlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENPTVAwOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAwICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMVsxVV07CisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDJbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMTsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMSAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDNbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjE7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDEgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ1WzFVXTsKKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04yOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDQ4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVENlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAzOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEN1sxVV07CisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMzsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA1OCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMyAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDhbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QNDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNjAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgNCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDlbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjQ7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNjggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDQgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVA1OyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA3MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciA1ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTFbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjU7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwNzggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDUgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxMlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVA2OyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA4MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciA2ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTNbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjY7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwODggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDYgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxNFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVA3OyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDA5MCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciA3ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTVbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjc7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwOTggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDcgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxNlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVA4OyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBBMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciA4ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTdbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjg7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwQTggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDggKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQxOFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVA5OyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBCMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciA5ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMTlbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjk7ICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwQjggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDkgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAxMDsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBDMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxMCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDIxWzFVXTsKKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04xMDsgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEM4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAxMCAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDIyWzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDExOyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEQwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDExICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMjNbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjExOyAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwRDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDExICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMjRbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMTI7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwRTAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMTIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyNVsxVV07CisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTI7ICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBFOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMTIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyNlsxVV07CisgIF9fSU9NIHVpbnQzMl90IENPTVAxMzsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDBGMCAoUi9XKSAgQ29tcGFyYXRvciBSZWdpc3RlciAxMyAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDI3WzFVXTsKKyAgX19JT00gdWludDMyX3QgRlVOQ1RJT04xMzsgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEY4IChSL1cpICBGdW5jdGlvbiBSZWdpc3RlciAxMyAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDI4WzFVXTsKKyAgX19JT00gdWludDMyX3QgQ09NUDE0OyAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MTAwIChSL1cpICBDb21wYXJhdG9yIFJlZ2lzdGVyIDE0ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMjlbMVVdOworICBfX0lPTSB1aW50MzJfdCBGVU5DVElPTjE0OyAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMDggKFIvVykgIEZ1bmN0aW9uIFJlZ2lzdGVyIDE0ICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMzBbMVVdOworICBfX0lPTSB1aW50MzJfdCBDT01QMTU7ICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgxMTAgKFIvVykgIENvbXBhcmF0b3IgUmVnaXN0ZXIgMTUgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzMVsxVV07CisgIF9fSU9NIHVpbnQzMl90IEZVTkNUSU9OMTU7ICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDExOCAoUi9XKSAgRnVuY3Rpb24gUmVnaXN0ZXIgMTUgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzMls5MzRVXTsKKyAgX19JTSAgdWludDMyX3QgTFNSOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkI0IChSICApICBMb2NrIFN0YXR1cyBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDMzWzFVXTsKKyAgX19JTSAgdWludDMyX3QgREVWQVJDSDsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkJDIChSLyApICBEZXZpY2UgQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyICovCit9IERXVF9UeXBlOworCisvKiBEV1QgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX1BvcyAgICAgICAgICAgICAgIDI4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OVU1DT01QX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBEV1RfQ1RSTF9OVU1DT01QX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTlVNQ09NUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9UUkNQS1RfUG9zICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PVFJDUEtUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX05PVFJDUEtUX01zayAgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX05PVFJDUEtUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBOT1RSQ1BLVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTk9FWFRUUklHX1BvcyAgICAgICAgICAgICAyNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PRVhUVFJJRyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9OT0VYVFRSSUdfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9OT0VYVFRSSUdfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9FWFRUUklHIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT0NZQ0NOVF9Qb3MgICAgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9DWUNDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9DWUNDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9DWUNDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PQ1lDQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9OT1BSRkNOVF9Qb3MgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTk9QUkZDTlQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfTk9QUkZDTlRfTXNrICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfTk9QUkZDTlRfUG9zKSAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IE5PUFJGQ05UIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9DWUNESVNTX1BvcyAgICAgICAgICAgICAgIDIzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRElTUyBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNESVNTX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNESVNTX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRElTUyBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfQ1lDRVZURU5BX1BvcyAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0VWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9DWUNFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9DWUNFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogQ1lDRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcyAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9GT0xERVZURU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9GT0xERVZURU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRk9MREVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfTFNVRVZURU5BX1BvcyAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IExTVUVWVEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9MU1VFVlRFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9MU1VFVlRFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogTFNVRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9TTEVFUEVWVEVOQV9Qb3MgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogU0xFRVBFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU0xFRVBFVlRFTkFfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfU0xFRVBFVlRFTkFfUG9zKSAgICAgICAgIC8qITwgRFdUIENUUkw6IFNMRUVQRVZURU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9FWENFVlRFTkFfUG9zICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDRVZURU5BIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX0VYQ0VWVEVOQV9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERXVF9DVFJMX0VYQ0VWVEVOQV9Qb3MpICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBFWENFVlRFTkEgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NQSUVWVEVOQV9Qb3MgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDUElFVlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1BJRVZURU5BX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1BJRVZURU5BX1BvcykgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENQSUVWVEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfRVhDVFJDRU5BX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IEVYQ1RSQ0VOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9FWENUUkNFTkFfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9FWENUUkNFTkFfUG9zKSAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogRVhDVFJDRU5BIE1hc2sgKi8KKworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcyAgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfQ1RSTF9QQ1NBTVBMRU5BX01zayAgICAgICAgICAgICgweDFVTCA8PCBEV1RfQ1RSTF9QQ1NBTVBMRU5BX1BvcykgICAgICAgICAgLyohPCBEV1QgQ1RSTDogUENTQU1QTEVOQSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfU1lOQ1RBUF9Nc2sgICAgICAgICAgICAgICAoMHgzVUwgPDwgRFdUX0NUUkxfU1lOQ1RBUF9Qb3MpICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFNZTkNUQVAgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ1RBUF9Qb3MgICAgICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNUQVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDVEFQX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0NUUkxfQ1lDVEFQX1BvcykgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IENZQ1RBUCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVElOSVRfUG9zICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RJTklUIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DVFJMX1BPU1RJTklUX01zayAgICAgICAgICAgICAgKDB4RlVMIDw8IERXVF9DVFJMX1BPU1RJTklUX1BvcykgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBQT1NUSU5JVCBNYXNrICovCisKKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfUE9TVFBSRVNFVF9Nc2sgICAgICAgICAgICAoMHhGVUwgPDwgRFdUX0NUUkxfUE9TVFBSRVNFVF9Qb3MpICAgICAgICAgIC8qITwgRFdUIENUUkw6IFBPU1RQUkVTRVQgTWFzayAqLworCisjZGVmaW5lIERXVF9DVFJMX0NZQ0NOVEVOQV9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBDVFJMOiBDWUNDTlRFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0NUUkxfQ1lDQ05URU5BX01zayAgICAgICAgICAgICAoMHgxVUwgLyo8PCBEV1RfQ1RSTF9DWUNDTlRFTkFfUG9zKi8pICAgICAgIC8qITwgRFdUIENUUkw6IENZQ0NOVEVOQSBNYXNrICovCisKKy8qIERXVCBDUEkgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0NQSUNOVF9DUElDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIENQSUNOVDogQ1BJQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9DUElDTlRfQ1BJQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9DUElDTlRfQ1BJQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBDUElDTlQ6IENQSUNOVCBNYXNrICovCisKKy8qIERXVCBFeGNlcHRpb24gT3ZlcmhlYWQgQ291bnQgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0VYQ0NOVF9FWENDTlRfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEVYQ0NOVDogRVhDQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9FWENDTlRfRVhDQ05UX01zayAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9FWENDTlRfRVhDQ05UX1BvcyovKSAgICAgICAvKiE8IERXVCBFWENDTlQ6IEVYQ0NOVCBNYXNrICovCisKKy8qIERXVCBTbGVlcCBDb3VudCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEV1RfU0xFRVBDTlRfU0xFRVBDTlRfUG9zICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgU0xFRVBDTlQ6IFNMRUVQQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9TTEVFUENOVF9TTEVFUENOVF9Nc2sgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9TTEVFUENOVF9TTEVFUENOVF9Qb3MqLykgICAvKiE8IERXVCBTTEVFUENOVDogU0xFRVBDTlQgTWFzayAqLworCisvKiBEV1QgTFNVIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9MU1VDTlRfTFNVQ05UX1BvcyAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBMU1VDTlQ6IExTVUNOVCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfTFNVQ05UX0xTVUNOVF9Nc2sgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBEV1RfTFNVQ05UX0xTVUNOVF9Qb3MqLykgICAgICAgLyohPCBEV1QgTFNVQ05UOiBMU1VDTlQgTWFzayAqLworCisvKiBEV1QgRm9sZGVkLWluc3RydWN0aW9uIENvdW50IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIFBvc2l0aW9uICovCisjZGVmaW5lIERXVF9GT0xEQ05UX0ZPTERDTlRfTXNrICAgICAgICAgICAgKDB4RkZVTCAvKjw8IERXVF9GT0xEQ05UX0ZPTERDTlRfUG9zKi8pICAgICAvKiE8IERXVCBGT0xEQ05UOiBGT0xEQ05UIE1hc2sgKi8KKworLyogRFdUIENvbXBhcmF0b3IgRnVuY3Rpb24gUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0lEX1BvcyAgICAgICAgICAgICAgICAyN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBJRCBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fSURfTXNrICAgICAgICAgICAgICAgICgweDFGVUwgPDwgRFdUX0ZVTkNUSU9OX0lEX1BvcykgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IElEIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fTUFUQ0hFRF9Qb3MgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IE1BVENIRUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIRURfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX01BVENIRURfUG9zKSAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSEVEIE1hc2sgKi8KKworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcyAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBQb3NpdGlvbiAqLworI2RlZmluZSBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX01zayAgICAgICAgICgweDNVTCA8PCBEV1RfRlVOQ1RJT05fREFUQVZTSVpFX1BvcykgICAgICAgLyohPCBEV1QgRlVOQ1RJT046IERBVEFWU0laRSBNYXNrICovCisKKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0FDVElPTl9Qb3MgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBBQ1RJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX0FDVElPTl9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRFdUX0ZVTkNUSU9OX0FDVElPTl9Qb3MpICAgICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBBQ1RJT04gTWFzayAqLworCisjZGVmaW5lIERXVF9GVU5DVElPTl9NQVRDSF9Qb3MgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERXVCBGVU5DVElPTjogTUFUQ0ggUG9zaXRpb24gKi8KKyNkZWZpbmUgRFdUX0ZVTkNUSU9OX01BVENIX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBEV1RfRlVOQ1RJT05fTUFUQ0hfUG9zKi8pICAgICAgIC8qITwgRFdUIEZVTkNUSU9OOiBNQVRDSCBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfRFdUICovCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19UUEkgICAgIFRyYWNlIFBvcnQgSW50ZXJmYWNlIChUUEkpCisgIFxicmllZiAgICBUeXBlIGRlZmluaXRpb25zIGZvciB0aGUgVHJhY2UgUG9ydCBJbnRlcmZhY2UgKFRQSSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFRyYWNlIFBvcnQgSW50ZXJmYWNlIFJlZ2lzdGVyIChUUEkpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBTU1BTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIFN1cHBvcnRlZCBQYXJhbGxlbCBQb3J0IFNpemVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENTUFNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgQ3VycmVudCBQYXJhbGxlbCBQb3J0IFNpemVzIFJlZ2lzdGVyICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsyVV07CisgIF9fSU9NIHVpbnQzMl90IEFDUFI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciAqLworICAgICAgICB1aW50MzJfdCBSRVNFUlZFRDFbNTVVXTsKKyAgX19JT00gdWludDMyX3QgU1BQUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MEYwIChSL1cpICBTZWxlY3RlZCBQaW4gUHJvdG9jb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQyWzEzMVVdOworICBfX0lNICB1aW50MzJfdCBGRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgzMDAgKFIvICkgIEZvcm1hdHRlciBhbmQgRmx1c2ggU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZGQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwNCAoUi9XKSAgRm9ybWF0dGVyIGFuZCBGbHVzaCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFBTQ1I7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDMwOCAoUi9XKSAgUGVyaW9kaWMgU3luY2hyb25pemF0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQzWzgwOVVdOworICBfX09NICB1aW50MzJfdCBMQVI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQjAgKCAvVykgIFNvZnR3YXJlIExvY2sgQWNjZXNzIFJlZ2lzdGVyICovCisgIF9fSU0gIHVpbnQzMl90IExTUjsgICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweEZCNCAoUi8gKSAgU29mdHdhcmUgTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgICAgICAgdWludDMyX3QgUkVTRVJWRUQ0WzRVXTsKKyAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4RkM4IChSLyApICBEZXZpY2UgSWRlbnRpZmllciBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBERVZUWVBFOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHhGQ0MgKFIvICkgIERldmljZSBUeXBlIFJlZ2lzdGVyICovCit9IFRQSV9UeXBlOworCisvKiBUUEkgQXN5bmNocm9ub3VzIENsb2NrIFByZXNjYWxlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfQUNQUl9TV09TQ0FMRVJfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgQUNQUjogU1dPU0NBTEVSIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9BQ1BSX1NXT1NDQUxFUl9Nc2sgICAgICAgICAgICAgKDB4RkZGRlVMIC8qPDwgVFBJX0FDUFJfU1dPU0NBTEVSX1BvcyovKSAgICAvKiE8IFRQSSBBQ1BSOiBTV09TQ0FMRVIgTWFzayAqLworCisvKiBUUEkgU2VsZWN0ZWQgUGluIFByb3RvY29sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9TUFBSX1RYTU9ERV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBTUFBSOiBUWE1PREUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX1NQUFJfVFhNT0RFX01zayAgICAgICAgICAgICAgICAoMHgzVUwgLyo8PCBUUElfU1BQUl9UWE1PREVfUG9zKi8pICAgICAgICAgIC8qITwgVFBJIFNQUFI6IFRYTU9ERSBNYXNrICovCisKKy8qIFRQSSBGb3JtYXR0ZXIgYW5kIEZsdXNoIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZTUl9GdE5vblN0b3BfUG9zICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnROb25TdG9wIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRlNSX0Z0Tm9uU3RvcF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRlNSX0Z0Tm9uU3RvcF9Qb3MpICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBGdE5vblN0b3AgTWFzayAqLworCisjZGVmaW5lIFRQSV9GRlNSX1RDUHJlc2VudF9Qb3MgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRlNSOiBUQ1ByZXNlbnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfVENQcmVzZW50X01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGU1JfVENQcmVzZW50X1BvcykgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IFRDUHJlc2VudCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGU1JfRnRTdG9wcGVkX1BvcyAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGU1I6IEZ0U3RvcHBlZCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfRkZTUl9GdFN0b3BwZWRfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBUUElfRkZTUl9GdFN0b3BwZWRfUG9zKSAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRnRTdG9wcGVkIE1hc2sgKi8KKworI2RlZmluZSBUUElfRkZTUl9GbEluUHJvZ19Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZTUjogRmxJblByb2cgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGU1JfRmxJblByb2dfTXNrICAgICAgICAgICAgICAoMHgxVUwgLyo8PCBUUElfRkZTUl9GbEluUHJvZ19Qb3MqLykgICAgICAgIC8qITwgVFBJIEZGU1I6IEZsSW5Qcm9nIE1hc2sgKi8KKworLyogVFBJIEZvcm1hdHRlciBhbmQgRmx1c2ggQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfRkZDUl9UcmlnSW5fUG9zICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgRkZDUjogVHJpZ0luIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX1RyaWdJbl9Nc2sgICAgICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9GRkNSX1RyaWdJbl9Qb3MpICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBUcmlnSW4gTWFzayAqLworCisjZGVmaW5lIFRQSV9GRkNSX0ZPbk1hbl9Qb3MgICAgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBGT25NYW4gUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0ZGQ1JfRk9uTWFuX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0ZGQ1JfRk9uTWFuX1BvcykgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEZPbk1hbiBNYXNrICovCisKKyNkZWZpbmUgVFBJX0ZGQ1JfRW5GbXRfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEZGQ1I6IEVuRm10IFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9GRkNSX0VuRm10X01zayAgICAgICAgICAgICAgICAgKDB4M1VMIDw8IC8qVFBJX0ZGQ1JfRW5GbXRfUG9zKi8pICAgICAgICAgICAvKiE8IFRQSSBGRkNSOiBFbkZtdCBNYXNrICovCisKKy8qIFRQSSBQZXJpb2RpYyBTeW5jaHJvbml6YXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBUUElfUFNDUl9QU0NvdW50X1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgUFNDUjogUFNDb3VudCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfUFNDUl9QU0NvdW50X01zayAgICAgICAgICAgICAgICgweDFGVUwgLyo8PCBUUElfUFNDUl9QU0NvdW50X1BvcyovKSAgICAgICAgLyohPCBUUEkgUFNDUjogVFBTQ291bnQgTWFzayAqLworCisvKiBUUEkgU29mdHdhcmUgTG9jayBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0xTUl9uVFRfUG9zICAgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIExTUjogTm90IHRoaXJ0eS10d28gYml0LiBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfTFNSX25UVF9Nc2sgICAgICAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfTFNSX25UVF9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBUUEkgTFNSOiBOb3QgdGhpcnR5LXR3byBiaXQuIE1hc2sgKi8KKworI2RlZmluZSBUUElfTFNSX1NMS19Qb3MgICAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgTFNSOiBTb2Z0d2FyZSBMb2NrIHN0YXR1cyBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfTFNSX1NMS19Nc2sgICAgICAgICAgICAgICAgICAgICgweDFVTCA8PCBUUElfTFNSX1NMS19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBUUEkgTFNSOiBTb2Z0d2FyZSBMb2NrIHN0YXR1cyBNYXNrICovCisKKyNkZWZpbmUgVFBJX0xTUl9TTElfUG9zICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIExTUjogU29mdHdhcmUgTG9jayBpbXBsZW1lbnRlZCBQb3NpdGlvbiAqLworI2RlZmluZSBUUElfTFNSX1NMSV9Nc2sgICAgICAgICAgICAgICAgICAgICgweDFVTCAvKjw8IFRQSV9MU1JfU0xJX1BvcyovKSAgICAgICAgICAgICAgLyohPCBUUEkgTFNSOiBTb2Z0d2FyZSBMb2NrIGltcGxlbWVudGVkIE1hc2sgKi8KKworLyogVFBJIERFVklEIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIFRQSV9ERVZJRF9OUlpWQUxJRF9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogTlJaVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX05SWlZBTElEX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX05SWlZBTElEX1BvcykgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBOUlpWQUxJRCBNYXNrICovCisKKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX01BTkNWQUxJRF9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgVFBJX0RFVklEX01BTkNWQUxJRF9Qb3MpICAgICAgICAgIC8qITwgVFBJIERFVklEOiBNQU5DVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFRQSV9ERVZJRF9QVElOVkFMSURfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IFRQSV9ERVZJRF9QVElOVkFMSURfUG9zKSAgICAgICAgICAvKiE8IFRQSSBERVZJRDogUFRJTlZBTElEIE1hc2sgKi8KKworI2RlZmluZSBUUElfREVWSURfRklGT1NaX1BvcyAgICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBUUEkgREVWSUQ6IEZJRk8gZGVwdGggUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVklEX0ZJRk9TWl9Nc2sgICAgICAgICAgICAgICAoMHg3VUwgPDwgVFBJX0RFVklEX0ZJRk9TWl9Qb3MpICAgICAgICAgICAgIC8qITwgVFBJIERFVklEOiBGSUZPIGRlcHRoIE1hc2sgKi8KKworLyogVFBJIERFVlRZUEUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Qb3MgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfU3ViVHlwZV9Nc2sgICAgICAgICAgICAoMHhGVUwgLyo8PCBUUElfREVWVFlQRV9TdWJUeXBlX1BvcyovKSAgICAgIC8qITwgVFBJIERFVlRZUEU6IFN1YlR5cGUgTWFzayAqLworCisjZGVmaW5lIFRQSV9ERVZUWVBFX01ham9yVHlwZV9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFRQSSBERVZUWVBFOiBNYWpvclR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX01zayAgICAgICAgICAoMHhGVUwgPDwgVFBJX0RFVlRZUEVfTWFqb3JUeXBlX1BvcykgICAgICAgIC8qITwgVFBJIERFVlRZUEU6IE1ham9yVHlwZSBNYXNrICovCisKKy8qQH0qLyAvKiBlbmQgb2YgZ3JvdXAgQ01TSVNfVFBJICovCisKKworI2lmIGRlZmluZWQgKF9fTVBVX1BSRVNFTlQpICYmIChfX01QVV9QUkVTRU5UID09IDFVKQorLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19NUFUgICAgIE1lbW9yeSBQcm90ZWN0aW9uIFVuaXQgKE1QVSkKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBNZW1vcnkgUHJvdGVjdGlvbiBVbml0IChNUFUpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lNICB1aW50MzJfdCBUWVBFOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvICkgIE1QVSBUeXBlIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgTVBVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUk5SOyAgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSL1cpICBNUFUgUmVnaW9uIE51bWJlciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBSQkFSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIE1QVSBSZWdpb24gQmFzZSBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJMQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoUi9XKSAgTVBVIFJlZ2lvbiBMaW1pdCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTE7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgQWxpYXMgMSAqLworICBfX0lPTSB1aW50MzJfdCBSTEFSX0ExOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIE1QVSBSZWdpb24gTGltaXQgQWRkcmVzcyBSZWdpc3RlciBBbGlhcyAxICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTI7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxQyAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgQWxpYXMgMiAqLworICBfX0lPTSB1aW50MzJfdCBSTEFSX0EyOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjAgKFIvVykgIE1QVSBSZWdpb24gTGltaXQgQWRkcmVzcyBSZWdpc3RlciBBbGlhcyAyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVJfQTM7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAyNCAoUi9XKSAgTVBVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgQWxpYXMgMyAqLworICBfX0lPTSB1aW50MzJfdCBSTEFSX0EzOyAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMjggKFIvVykgIE1QVSBSZWdpb24gTGltaXQgQWRkcmVzcyBSZWdpc3RlciBBbGlhcyAzICovCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxXTsKKyAgdW5pb24geworICBfX0lPTSB1aW50MzJfdCBNQUlSWzJdOworICBzdHJ1Y3QgeworICBfX0lPTSB1aW50MzJfdCBNQUlSMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMzAgKFIvVykgIE1QVSBNZW1vcnkgQXR0cmlidXRlIEluZGlyZWN0aW9uIFJlZ2lzdGVyIDAgKi8KKyAgX19JT00gdWludDMyX3QgTUFJUjE7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDM0IChSL1cpICBNUFUgTWVtb3J5IEF0dHJpYnV0ZSBJbmRpcmVjdGlvbiBSZWdpc3RlciAxICovCisgIH07CisgIH07Cit9IE1QVV9UeXBlOworCisjZGVmaW5lIE1QVV9UWVBFX1JBTElBU0VTICAgICAgICAgICAgICAgICAgNFUKKworLyogTVBVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfSVJFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9UWVBFX0lSRUdJT05fUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IElSRUdJT04gTWFzayAqLworCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9UWVBFX0RSRUdJT05fTXNrICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfVFlQRV9EUkVHSU9OX1BvcykgICAgICAgICAgICAgICAvKiE8IE1QVSBUWVBFOiBEUkVHSU9OIE1hc2sgKi8KKworI2RlZmluZSBNUFVfVFlQRV9TRVBBUkFURV9Qb3MgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgVFlQRTogU0VQQVJBVEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1RZUEVfU0VQQVJBVEVfTXNrICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX1RZUEVfU0VQQVJBVEVfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVBVIFRZUEU6IFNFUEFSQVRFIE1hc2sgKi8KKworLyogTVBVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Qb3MgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfUFJJVkRFRkVOQV9Nc2sgICAgICAgICAgICAoMVVMIDw8IE1QVV9DVFJMX1BSSVZERUZFTkFfUG9zKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IFBSSVZERUZFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0hGTk1JRU5BX1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBIRk5NSUVOQSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfQ1RSTF9IRk5NSUVOQV9Nc2sgICAgICAgICAgICAgICgxVUwgPDwgTVBVX0NUUkxfSEZOTUlFTkFfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgQ1RSTDogSEZOTUlFTkEgTWFzayAqLworCisjZGVmaW5lIE1QVV9DVFJMX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBDVFJMOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX0NUUkxfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgTVBVX0NUUkxfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgTVBVIENUUkw6IEVOQUJMRSBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIE1QVV9STlJfUkVHSU9OX1BvcyAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTlI6IFJFR0lPTiBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUk5SX1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfUk5SX1JFR0lPTl9Qb3MqLykgICAgICAgICAgICAgLyohPCBNUFUgUk5SOiBSRUdJT04gTWFzayAqLworCisvKiBNUFUgUmVnaW9uIEJhc2UgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkJBUl9CQVNFX1BvcyAgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQkFTRSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkJBUl9CQVNFX01zayAgICAgICAgICAgICAgICAgICgweDdGRkZGRkZVTCA8PCBNUFVfUkJBUl9CQVNFX1BvcykgICAgICAgICAgICAgLyohPCBNUFUgUkJBUjogQkFTRSBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfU0hfUG9zICAgICAgICAgICAgICAgICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFNIIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1NIX01zayAgICAgICAgICAgICAgICAgICAgKDB4M1VMIDw8IE1QVV9SQkFSX1NIX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBTSCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfQVBfUG9zICAgICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IEFQIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX0FQX01zayAgICAgICAgICAgICAgICAgICAgKDB4M1VMIDw8IE1QVV9SQkFSX0FQX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBBUCBNYXNrICovCisKKyNkZWZpbmUgTVBVX1JCQVJfWE5fUG9zICAgICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIFJCQVI6IFhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9SQkFSX1hOX01zayAgICAgICAgICAgICAgICAgICAgKDAxVUwgLyo8PCBNUFVfUkJBUl9YTl9Qb3MqLykgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSQkFSOiBYTiBNYXNrICovCisKKy8qIE1QVSBSZWdpb24gTGltaXQgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfUkxBUl9MSU1JVF9Qb3MgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkxBUjogTElNSVQgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX1JMQVJfTElNSVRfTXNrICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgTVBVX1JMQVJfTElNSVRfUG9zKSAgICAgICAgICAgIC8qITwgTVBVIFJMQVI6IExJTUlUIE1hc2sgKi8KKworI2RlZmluZSBNUFVfUkxBUl9QWE5fUG9zICAgICAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkxBUjogUFhOIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9STEFSX1BYTl9Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBNUFVfUkxBUl9QWE5fUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTEFSOiBQWE4gTWFzayAqLworCisjZGVmaW5lIE1QVV9STEFSX0F0dHJJbmR4X1BvcyAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTEFSOiBBdHRySW5keCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkxBUl9BdHRySW5keF9Nc2sgICAgICAgICAgICAgICg3VUwgPDwgTVBVX1JMQVJfQXR0ckluZHhfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkxBUjogQXR0ckluZHggTWFzayAqLworCisjZGVmaW5lIE1QVV9STEFSX0VOX1BvcyAgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBSTEFSOiBSZWdpb24gZW5hYmxlIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfUkxBUl9FTl9Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgLyo8PCBNUFVfUkxBUl9FTl9Qb3MqLykgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgUkxBUjogUmVnaW9uIGVuYWJsZSBiaXQgRGlzYWJsZSBNYXNrICovCisKKy8qIE1QVSBNZW1vcnkgQXR0cmlidXRlIEluZGlyZWN0aW9uIFJlZ2lzdGVyIDAgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgTVBVX01BSVIwX0F0dHIzX1BvcyAgICAgICAgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIE1BSVIwOiBBdHRyMyBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfTUFJUjBfQXR0cjNfTXNrICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX01BSVIwX0F0dHIzX1BvcykgICAgICAgICAgICAgICAgLyohPCBNUFUgTUFJUjA6IEF0dHIzIE1hc2sgKi8KKworI2RlZmluZSBNUFVfTUFJUjBfQXR0cjJfUG9zICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgTUFJUjA6IEF0dHIyIFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9NQUlSMF9BdHRyMl9Nc2sgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfTUFJUjBfQXR0cjJfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE1QVSBNQUlSMDogQXR0cjIgTWFzayAqLworCisjZGVmaW5lIE1QVV9NQUlSMF9BdHRyMV9Qb3MgICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBNQUlSMDogQXR0cjEgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX01BSVIwX0F0dHIxX01zayAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9NQUlSMF9BdHRyMV9Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVBVIE1BSVIwOiBBdHRyMSBNYXNrICovCisKKyNkZWZpbmUgTVBVX01BSVIwX0F0dHIwX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIE1BSVIwOiBBdHRyMCBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfTUFJUjBfQXR0cjBfTXNrICAgICAgICAgICAgICAgICgweEZGVUwgLyo8PCBNUFVfTUFJUjBfQXR0cjBfUG9zKi8pICAgICAgICAgICAgLyohPCBNUFUgTUFJUjA6IEF0dHIwIE1hc2sgKi8KKworLyogTVBVIE1lbW9yeSBBdHRyaWJ1dGUgSW5kaXJlY3Rpb24gUmVnaXN0ZXIgMSBEZWZpbml0aW9ucyAqLworI2RlZmluZSBNUFVfTUFJUjFfQXR0cjdfUG9zICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgTUFJUjE6IEF0dHI3IFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9NQUlSMV9BdHRyN19Nc2sgICAgICAgICAgICAgICAgKDB4RkZVTCA8PCBNUFVfTUFJUjFfQXR0cjdfUG9zKSAgICAgICAgICAgICAgICAvKiE8IE1QVSBNQUlSMTogQXR0cjcgTWFzayAqLworCisjZGVmaW5lIE1QVV9NQUlSMV9BdHRyNl9Qb3MgICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1QVSBNQUlSMTogQXR0cjYgUG9zaXRpb24gKi8KKyNkZWZpbmUgTVBVX01BSVIxX0F0dHI2X01zayAgICAgICAgICAgICAgICAoMHhGRlVMIDw8IE1QVV9NQUlSMV9BdHRyNl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVBVIE1BSVIxOiBBdHRyNiBNYXNrICovCisKKyNkZWZpbmUgTVBVX01BSVIxX0F0dHI1X1BvcyAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVBVIE1BSVIxOiBBdHRyNSBQb3NpdGlvbiAqLworI2RlZmluZSBNUFVfTUFJUjFfQXR0cjVfTXNrICAgICAgICAgICAgICAgICgweEZGVUwgPDwgTVBVX01BSVIxX0F0dHI1X1BvcykgICAgICAgICAgICAgICAgLyohPCBNUFUgTUFJUjE6IEF0dHI1IE1hc2sgKi8KKworI2RlZmluZSBNUFVfTUFJUjFfQXR0cjRfUG9zICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNUFUgTUFJUjE6IEF0dHI0IFBvc2l0aW9uICovCisjZGVmaW5lIE1QVV9NQUlSMV9BdHRyNF9Nc2sgICAgICAgICAgICAgICAgKDB4RkZVTCAvKjw8IE1QVV9NQUlSMV9BdHRyNF9Qb3MqLykgICAgICAgICAgICAvKiE8IE1QVSBNQUlSMTogQXR0cjQgTWFzayAqLworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19NUFUgKi8KKyNlbmRpZgorCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX1NBVSAgICAgU2VjdXJpdHkgQXR0cmlidXRpb24gVW5pdCAoU0FVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIFNlY3VyaXR5IEF0dHJpYnV0aW9uIFVuaXQgKFNBVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIFNlY3VyaXR5IEF0dHJpYnV0aW9uIFVuaXQgKFNBVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IENUUkw7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgU0FVIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgVFlQRTsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBTQVUgVHlwZSBSZWdpc3RlciAqLworI2lmIGRlZmluZWQgKF9fU0FVUkVHSU9OX1BSRVNFTlQpICYmIChfX1NBVVJFR0lPTl9QUkVTRU5UID09IDFVKQorICBfX0lPTSB1aW50MzJfdCBSTlI7ICAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIFNBVSBSZWdpb24gTnVtYmVyIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IFJCQVI7ICAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgU0FVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgUkxBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwIChSL1cpICBTQVUgUmVnaW9uIExpbWl0IEFkZHJlc3MgUmVnaXN0ZXIgKi8KKyNlbHNlCisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFszXTsKKyNlbmRpZgorICBfX0lPTSB1aW50MzJfdCBTRlNSOyAgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTQgKFIvVykgIFNlY3VyZSBGYXVsdCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgU0ZBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSL1cpICBTZWN1cmUgRmF1bHQgQWRkcmVzcyBSZWdpc3RlciAqLworfSBTQVVfVHlwZTsKKworLyogU0FVIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0FVX0NUUkxfQUxMTlNfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIENUUkw6IEFMTE5TIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9DVFJMX0FMTE5TX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQVVfQ1RSTF9BTExOU19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBDVFJMOiBBTExOUyBNYXNrICovCisKKyNkZWZpbmUgU0FVX0NUUkxfRU5BQkxFX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIENUUkw6IEVOQUJMRSBQb3NpdGlvbiAqLworI2RlZmluZSBTQVVfQ1RSTF9FTkFCTEVfTXNrICAgICAgICAgICAgICAgICgxVUwgLyo8PCBTQVVfQ1RSTF9FTkFCTEVfUG9zKi8pICAgICAgICAgICAgICAgLyohPCBTQVUgQ1RSTDogRU5BQkxFIE1hc2sgKi8KKworLyogU0FVIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0FVX1RZUEVfU1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFRZUEU6IFNSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1RZUEVfU1JFR0lPTl9Nc2sgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgU0FVX1RZUEVfU1JFR0lPTl9Qb3MqLykgICAgICAgICAgIC8qITwgU0FVIFRZUEU6IFNSRUdJT04gTWFzayAqLworCisjaWYgZGVmaW5lZCAoX19TQVVSRUdJT05fUFJFU0VOVCkgJiYgKF9fU0FVUkVHSU9OX1BSRVNFTlQgPT0gMVUpCisvKiBTQVUgUmVnaW9uIE51bWJlciBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQVVfUk5SX1JFR0lPTl9Qb3MgICAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQVUgUk5SOiBSRUdJT04gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1JOUl9SRUdJT05fTXNrICAgICAgICAgICAgICAgICAoMHhGRlVMIC8qPDwgU0FVX1JOUl9SRUdJT05fUG9zKi8pICAgICAgICAgICAgIC8qITwgU0FVIFJOUjogUkVHSU9OIE1hc2sgKi8KKworLyogU0FVIFJlZ2lvbiBCYXNlIEFkZHJlc3MgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgU0FVX1JCQVJfQkFERFJfUG9zICAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFJCQVI6IEJBRERSIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9SQkFSX0JBRERSX01zayAgICAgICAgICAgICAgICAgKDB4N0ZGRkZGRlVMIDw8IFNBVV9SQkFSX0JBRERSX1BvcykgICAgICAgICAgICAvKiE8IFNBVSBSQkFSOiBCQUREUiBNYXNrICovCisKKy8qIFNBVSBSZWdpb24gTGltaXQgQWRkcmVzcyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQVVfUkxBUl9MQUREUl9Qb3MgICAgICAgICAgICAgICAgICA1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQVUgUkxBUjogTEFERFIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1JMQVJfTEFERFJfTXNrICAgICAgICAgICAgICAgICAoMHg3RkZGRkZGVUwgPDwgU0FVX1JMQVJfTEFERFJfUG9zKSAgICAgICAgICAgIC8qITwgU0FVIFJMQVI6IExBRERSIE1hc2sgKi8KKworI2RlZmluZSBTQVVfUkxBUl9OU0NfUG9zICAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQVUgUkxBUjogTlNDIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9STEFSX05TQ19Nc2sgICAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQVVfUkxBUl9OU0NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBSTEFSOiBOU0MgTWFzayAqLworCisjZGVmaW5lIFNBVV9STEFSX0VOQUJMRV9Qb3MgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBSTEFSOiBFTkFCTEUgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1JMQVJfRU5BQkxFX01zayAgICAgICAgICAgICAgICAoMVVMIC8qPDwgU0FVX1JMQVJfRU5BQkxFX1BvcyovKSAgICAgICAgICAgICAgIC8qITwgU0FVIFJMQVI6IEVOQUJMRSBNYXNrICovCisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX1NBVVJFR0lPTl9QUkVTRU5UKSAmJiAoX19TQVVSRUdJT05fUFJFU0VOVCA9PSAxVSkgKi8KKworLyogU2VjdXJlIEZhdWx0IFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBTQVVfU0ZTUl9MU0VSUl9Qb3MgICAgICAgICAgICAgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQVUgU0ZTUjogTFNFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1NGU1JfTFNFUlJfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IFNBVV9TRlNSX0xTRVJSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IExTRVJSIE1hc2sgKi8KKworI2RlZmluZSBTQVVfU0ZTUl9TRkFSVkFMSURfUG9zICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTQVUgU0ZTUjogU0ZBUlZBTElEIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9TRlNSX1NGQVJWQUxJRF9Nc2sgICAgICAgICAgICAgKDFVTCA8PCBTQVVfU0ZTUl9TRkFSVkFMSURfUG9zKSAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBTRkFSVkFMSUQgTWFzayAqLworCisjZGVmaW5lIFNBVV9TRlNSX0xTUEVSUl9Qb3MgICAgICAgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBMU1BFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1NGU1JfTFNQRVJSX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNBVV9TRlNSX0xTUEVSUl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IExTUEVSUiBNYXNrICovCisKKyNkZWZpbmUgU0FVX1NGU1JfSU5WVFJBTl9Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IElOVlRSQU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1NGU1JfSU5WVFJBTl9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IFNBVV9TRlNSX0lOVlRSQU5fUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IElOVlRSQU4gTWFzayAqLworCisjZGVmaW5lIFNBVV9TRlNSX0FVVklPTF9Qb3MgICAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBBVVZJT0wgUG9zaXRpb24gKi8KKyNkZWZpbmUgU0FVX1NGU1JfQVVWSU9MX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IFNBVV9TRlNSX0FVVklPTF9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IEFVVklPTCBNYXNrICovCisKKyNkZWZpbmUgU0FVX1NGU1JfSU5WRVJfUG9zICAgICAgICAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IElOVkVSIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9TRlNSX0lOVkVSX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQVVfU0ZTUl9JTlZFUl9Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBJTlZFUiBNYXNrICovCisKKyNkZWZpbmUgU0FVX1NGU1JfSU5WSVNfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IElOVklTIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9TRlNSX0lOVklTX01zayAgICAgICAgICAgICAgICAgKDFVTCA8PCBTQVVfU0ZTUl9JTlZJU19Qb3MpICAgICAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBJTlZJUyBNYXNrICovCisKKyNkZWZpbmUgU0FVX1NGU1JfSU5WRVBfUG9zICAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgU0FVIFNGU1I6IElOVkVQIFBvc2l0aW9uICovCisjZGVmaW5lIFNBVV9TRlNSX0lOVkVQX01zayAgICAgICAgICAgICAgICAgKDFVTCAvKjw8IFNBVV9TRlNSX0lOVkVQX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IFNBVSBTRlNSOiBJTlZFUCBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX1NBVSAqLworI2VuZGlmIC8qIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgKi8KKworCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0ZQVSAgICAgRmxvYXRpbmcgUG9pbnQgVW5pdCAoRlBVKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIEZsb2F0aW5nIFBvaW50IFVuaXQgKEZQVSkuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgICAgICAgIHVpbnQzMl90IFJFU0VSVkVEMFsxVV07CisgIF9fSU9NIHVpbnQzMl90IEZQQ0NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZQQ0FSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IEZQRFNDUjsgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRmxvYXRpbmctUG9pbnQgRGVmYXVsdCBTdGF0dXMgQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBNVkZSMDsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvICkgIE1lZGlhIGFuZCBWRlAgRmVhdHVyZSBSZWdpc3RlciAwICovCisgIF9fSU0gIHVpbnQzMl90IE1WRlIxOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi8gKSAgTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgKi8KKyAgX19JTSAgdWludDMyX3QgTVZGUjI7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE4IChSLyApICBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMiAqLworfSBGUFVfVHlwZTsKKworLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUENDUl9BU1BFTl9Qb3MgICAgICAgICAgICAgICAgMzFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBBU1BFTiBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0FTUEVOX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9BU1BFTl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEFTUEVOIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOX1BvcyAgICAgICAgICAgICAgICAzMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9MU1BFTl9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTFNQRU5fUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMU1BFTiBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9MU1BFTlNfUG9zICAgICAgICAgICAgICAgMjlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMU1BFTlMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0xTUEVOU19Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9MU1BFTlNfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IExTUEVOUyBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9DTFJPTlJFVF9Qb3MgICAgICAgICAgICAgMjhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBDTFJPTlJFVCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfQ0xST05SRVRfTXNrICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0NMUk9OUkVUX1BvcykgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQ0xST05SRVQgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfQ0xST05SRVRTX1BvcyAgICAgICAgICAgIDI3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQ0xST05SRVRTIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9DTFJPTlJFVFNfTXNrICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfQ0xST05SRVRTX1BvcykgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBDTFJPTlJFVFMgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfVFNfUG9zICAgICAgICAgICAgICAgICAgIDI2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogVFMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1RTX01zayAgICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9UU19Qb3MpICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IFRTIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1VGUkRZX1BvcyAgICAgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IFVGUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9VRlJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfVUZSRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBVRlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9TUExJTVZJT0xfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBTUExJTVZJT0wgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1NQTElNVklPTF9Nc2sgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9TUExJTVZJT0xfUG9zKSAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IFNQTElNVklPTCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9NT05SRFlfUG9zICAgICAgICAgICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNT05SRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX01PTlJEWV9Nc2sgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9NT05SRFlfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1PTlJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9TRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBTRlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfU0ZSRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1NGUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogU0ZSRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfQkZSRFlfUG9zICAgICAgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogQkZSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0JGUkRZX01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9CRlJEWV9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IEJGUkRZIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX01NUkRZX1BvcyAgICAgICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IE1NUkRZIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9NTVJEWV9Nc2sgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfTU1SRFlfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBNTVJEWSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9IRlJEWV9Qb3MgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBIRlJEWSBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfSEZSRFlfTXNrICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX0hGUkRZX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogSEZSRFkgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfVEhSRUFEX1BvcyAgICAgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogcHJvY2Vzc29yIG1vZGUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9USFJFQURfTXNrICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBDQ1JfVEhSRUFEX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBwcm9jZXNzb3IgbW9kZSBhY3RpdmUgYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBDQ1JfU19Qb3MgICAgICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogU2VjdXJpdHkgc3RhdHVzIG9mIHRoZSBGUCBjb250ZXh0IGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQ1JfU19Nc2sgICAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQQ0NSX1NfUG9zKSAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUENDUjogU2VjdXJpdHkgc3RhdHVzIG9mIHRoZSBGUCBjb250ZXh0IGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfUG9zICAgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX1VTRVJfTXNrICAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUENDUl9VU0VSX1BvcykgICAgICAgICAgICAgICAgICAgIC8qITwgRlBDQ1I6IHByaXZpbGVnZSBsZXZlbCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfUG9zICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUENDUl9MU1BBQ1RfTXNrICAgICAgICAgICAgICAgKDFVTCAvKjw8IEZQVV9GUENDUl9MU1BBQ1RfUG9zKi8pICAgICAgICAgICAgICAvKiE8IEZQQ0NSOiBMYXp5IHN0YXRlIHByZXNlcnZhdGlvbiBhY3RpdmUgYml0IE1hc2sgKi8KKworLyogRmxvYXRpbmctUG9pbnQgQ29udGV4dCBBZGRyZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUENBUl9BRERSRVNTX1BvcyAgICAgICAgICAgICAgIDNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQQ0FSOiBBRERSRVNTIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBDQVJfQUREUkVTU19Nc2sgICAgICAgICAgICAgICgweDFGRkZGRkZGVUwgPDwgRlBVX0ZQQ0FSX0FERFJFU1NfUG9zKSAgICAgICAgLyohPCBGUENBUjogQUREUkVTUyBiaXQgTWFzayAqLworCisvKiBGbG9hdGluZy1Qb2ludCBEZWZhdWx0IFN0YXR1cyBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIEZQVV9GUERTQ1JfQUhQX1BvcyAgICAgICAgICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogQUhQIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0FIUF9Nc2sgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9BSFBfUG9zKSAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEFIUCBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fUG9zICAgICAgICAgICAgICAgICAgMjVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9GUERTQ1JfRE5fTXNrICAgICAgICAgICAgICAgICAgKDFVTCA8PCBGUFVfRlBEU0NSX0ROX1BvcykgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRE4gYml0IE1hc2sgKi8KKworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX1BvcyAgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0ZaX01zayAgICAgICAgICAgICAgICAgICgxVUwgPDwgRlBVX0ZQRFNDUl9GWl9Qb3MpICAgICAgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IEZaIGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Qb3MgICAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9STW9kZV9Nc2sgICAgICAgICAgICAgICAoM1VMIDw8IEZQVV9GUERTQ1JfUk1vZGVfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBSTW9kZSBiaXQgTWFzayAqLworCisjZGVmaW5lIEZQVV9GUERTQ1JfRloxNl9Qb3MgICAgICAgICAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IEZQRFNDUjogRloxNiBiaXQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX0ZQRFNDUl9GWjE2X01zayAgICAgICAgICAgICAgICAoMVVMIDw8IEZQVV9GUERTQ1JfRloxNl9Qb3MpICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBGWjE2IGJpdCBNYXNrICovCisKKyNkZWZpbmUgRlBVX0ZQRFNDUl9MVFBTSVpFX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRlBEU0NSOiBMVFBTSVpFIGJpdCBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfRlBEU0NSX0xUUFNJWkVfTXNrICAgICAgICAgICAgICg3VUwgPDwgRlBVX0ZQRFNDUl9MVFBTSVpFX1BvcykgICAgICAgICAgICAgICAgLyohPCBGUERTQ1I6IExUUFNJWkUgYml0IE1hc2sgKi8KKworLyogTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDAgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQUm91bmRfUG9zICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQUm91bmQgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfRlBSb3VuZF9Nc2sgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjBfRlBSb3VuZF9Qb3MpICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlBSb3VuZCBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRlBTcXJ0X1BvcyAgICAgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlBTcXJ0IGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQU3FydF9Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQU3FydF9Qb3MpICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUFNxcnQgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX0ZQRGl2aWRlX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQRGl2aWRlIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQRGl2aWRlX01zayAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQRGl2aWRlX1BvcykgICAgICAgICAgICAgIC8qITwgTVZGUjA6IERpdmlkZSBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjBfRlBEUF9Qb3MgICAgICAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMDogRlBEUCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMF9GUERQX01zayAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMF9GUERQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUERQIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMF9GUFNQX1BvcyAgICAgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIwOiBGUFNQIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIwX0ZQU1BfTXNrICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIwX0ZQU1BfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IEZQU1AgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIwX1NJTURSZWdfUG9zICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjA6IFNJTURSZWcgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjBfU0lNRFJlZ19Nc2sgICAgICAgICAgICAgICgweEZVTCAvKjw8IEZQVV9NVkZSMF9TSU1EUmVnX1BvcyovKSAgICAgICAgICAgLyohPCBNVkZSMDogU0lNRFJlZyBiaXRzIE1hc2sgKi8KKworLyogTWVkaWEgYW5kIFZGUCBGZWF0dXJlIFJlZ2lzdGVyIDEgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZNQUNfUG9zICAgICAgICAgICAgICAgICAyOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZNQUMgYml0cyBQb3NpdGlvbiAqLworI2RlZmluZSBGUFVfTVZGUjFfRk1BQ19Nc2sgICAgICAgICAgICAgICAgICgweEZVTCA8PCBGUFVfTVZGUjFfRk1BQ19Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRk1BQyBiaXRzIE1hc2sgKi8KKworI2RlZmluZSBGUFVfTVZGUjFfRlBIUF9Qb3MgICAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMTogRlBIUCBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUEhQX01zayAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUEhQX1BvcykgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUEhQIGJpdHMgTWFzayAqLworCisjZGVmaW5lIEZQVV9NVkZSMV9GUDE2X1BvcyAgICAgICAgICAgICAgICAgMjBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUDE2IGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQMTZfTXNrICAgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIxX0ZQMTZfUG9zKSAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQMTYgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX01WRV9Qb3MgICAgICAgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IE1WRSBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9NVkVfTXNrICAgICAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9NVkVfUG9zKSAgICAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBNVkUgYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0ZQRE5hTl9Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQRE5hTiBiaXRzIFBvc2l0aW9uICovCisjZGVmaW5lIEZQVV9NVkZSMV9GUEROYU5fTXNrICAgICAgICAgICAgICAgKDB4RlVMIDw8IEZQVV9NVkZSMV9GUEROYU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IE1WRlIxOiBGUEROYU4gYml0cyBNYXNrICovCisKKyNkZWZpbmUgRlBVX01WRlIxX0ZQRnRaX1BvcyAgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQRnRaIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIxX0ZQRnRaX01zayAgICAgICAgICAgICAgICAoMHhGVUwgLyo8PCBGUFVfTVZGUjFfRlBGdFpfUG9zKi8pICAgICAgICAgICAgIC8qITwgTVZGUjE6IEZQRnRaIGJpdHMgTWFzayAqLworCisvKiBNZWRpYSBhbmQgVkZQIEZlYXR1cmUgUmVnaXN0ZXIgMiBEZWZpbml0aW9ucyAqLworI2RlZmluZSBGUFVfTVZGUjJfRlBNaXNjX1BvcyAgICAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBNVkZSMjogRlBNaXNjIGJpdHMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRlBVX01WRlIyX0ZQTWlzY19Nc2sgICAgICAgICAgICAgICAoMHhGVUwgPDwgRlBVX01WRlIyX0ZQTWlzY19Qb3MpICAgICAgICAgICAgICAgIC8qITwgTVZGUjI6IEZQTWlzYyBiaXRzIE1hc2sgKi8KKworLypAfSBlbmQgb2YgZ3JvdXAgQ01TSVNfRlBVICovCisKKy8qIENvcmVEZWJ1ZyBpcyBkZXByZWNhdGVkLiByZXBsYWNlZCBieSBEQ0IgKERlYnVnIENvbnRyb2wgQmxvY2spICovCisvKioKKyAgXGluZ3JvdXAgIENNU0lTX2NvcmVfcmVnaXN0ZXIKKyAgXGRlZmdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAgICAgICBDb3JlIERlYnVnIFJlZ2lzdGVycyAoQ29yZURlYnVnKQorICBcYnJpZWYgICAgVHlwZSBkZWZpbml0aW9ucyBmb3IgdGhlIENvcmUgRGVidWcgUmVnaXN0ZXJzCisgIEB7CisgKi8KKworLyoqCisgIFxicmllZiAgXGRlcHJlY2F0ZWQgU3RydWN0dXJlIHR5cGUgdG8gYWNjZXNzIHRoZSBDb3JlIERlYnVnIFJlZ2lzdGVyIChDb3JlRGVidWcpLgorICovCit0eXBlZGVmIHN0cnVjdAoreworICBfX0lPTSB1aW50MzJfdCBESENTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDAgKFIvVykgIERlYnVnIEhhbHRpbmcgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCisgIF9fT00gIHVpbnQzMl90IERDUlNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwNCAoIC9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBTZWxlY3RvciBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEQ1JEUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMDggKFIvVykgIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YSBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBERU1DUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMEMgKFIvVykgIERlYnVnIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fT00gIHVpbnQzMl90IERTQ0VNQ1I7ICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxMCAoIC9XKSAgRGVidWcgU2V0IENsZWFyIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERBVVRIQ1RSTDsgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxNCAoUi9XKSAgRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCBSZWdpc3RlciAqLworICBfX0lPTSB1aW50MzJfdCBEU0NTUjsgICAgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTggKFIvVykgIERlYnVnIFNlY3VyaXR5IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAqLworfSBDb3JlRGVidWdfVHlwZTsKKworLyogRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Nc2sgICAgICAgICAoMHhGRkZGVUwgPDwgQ29yZURlYnVnX0RIQ1NSX0RCR0tFWV9Qb3MpICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBEQkdLRVkgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU1RBUlRfU1RfUG9zICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19SRVNUQVJUX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFU1RBUlRfU1RfTXNrICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVNUQVJUX1NUX1BvcykgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19SRVNUQVJUX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IFNfUkVTRVRfU1QgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVTRVRfU1RfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFU0VUX1NUX1BvcykgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX1JFU0VUX1NUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IFNfUkVUSVJFX1NUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFVElSRV9TVF9Nc2sgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19SRVRJUkVfU1RfUG9zKSAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19SRVRJUkVfU1QgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0ZQRF9Qb3MgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19GUEQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfRlBEX01zayAgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0ZQRF9Qb3MpICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX0ZQRCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU1VJREVfUG9zICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX1NVSURFIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NVSURFX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TVUlERV9Qb3MpICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19TVUlERSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTlNVSURFX1BvcyAgICAgICAyMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX05TVUlERSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19OU1VJREVfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RIQ1NSX1NfTlNVSURFX1BvcykgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IFNfTlNVSURFIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfU19TREVfUG9zICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IFNfU0RFIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NERV9Nc2sgICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TREVfUG9zKSAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19TREUgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19MT0NLVVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfTE9DS1VQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0xPQ0tVUF9Qb3MpICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX0xPQ0tVUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfU0xFRVBfUG9zICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX1NMRUVQIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1NMRUVQX01zayAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfU19TTEVFUF9Qb3MpICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19TTEVFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfSEFMVF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX0hBTFRfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX0hBTFQgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogU19SRUdSRFkgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX1NfUkVHUkRZX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9TX1JFR1JEWV9Qb3MpICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBTX1JFR1JEWSBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfUE1PVl9Qb3MgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX1BNT1YgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfUE1PVl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1BNT1ZfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX1BNT1YgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogQ19TTkFQU1RBTEwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU05BUFNUQUxMX01zayAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX1NOQVBTVEFMTCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfTUFTS0lOVFNfUG9zICAgICAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX01BU0tJTlRTIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX01BU0tJTlRTX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19NQVNLSU5UU19Qb3MpICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogQ19NQVNLSU5UUyBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Qb3MgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RIQ1NSX0NfU1RFUF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERIQ1NSOiBDX1NURVAgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfUG9zICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ESENTUl9DX0hBTFRfTXNrICAgICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBESENTUjogQ19IQUxUIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICgxVUwgLyo8PCBDb3JlRGVidWdfREhDU1JfQ19ERUJVR0VOX1BvcyovKSAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREhDU1I6IENfREVCVUdFTiBNYXNrICovCisKKy8qIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0b3IgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Qb3MgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RDUlNSX1JFR1duUl9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdXblJfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERDUlNSOiBSRUdXblIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfTXNrICAgICAgICAgKDB4MUZVTCAvKjw8IENvcmVEZWJ1Z19EQ1JTUl9SRUdTRUxfUG9zKi8pICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQ1JTUjogUkVHU0VMIE1hc2sgKi8KKworLyogRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Qb3MgICAgICAgICAyNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1RSQ0VOQV9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9UUkNFTkFfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBUUkNFTkEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fUkVRX1BvcyAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogTU9OX1JFUSBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9SRVFfUG9zKSAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IE1PTl9SRVEgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MgICAgICAgMThVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogTU9OX1NURVAgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9NT05fU1RFUF9Qb3MpICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBNT05fU1RFUCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcyAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBNT05fUEVORCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX1BFTkRfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9QRU5EX1BvcykgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IE1PTl9QRU5EIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX1BvcyAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfTU9OX0VOX01zayAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX01PTl9FTl9Qb3MpICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IE1PTl9FTiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0hBUkRFUlJfUG9zICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19IQVJERVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19IQVJERVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfSEFSREVSUl9Qb3MpICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogVkNfSEFSREVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Qb3MgICAgICAgOVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19JTlRFUlJfUG9zKSAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19JTlRFUlIgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfUG9zICAgICAgIDhVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfQlVTRVJSX1BvcykgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogVkNfQlVTRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfU1RBVEVSUl9Qb3MgICAgICA3VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX1NUQVRFUlIgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX1NUQVRFUlJfTXNrICAgICAoMVVMIDw8IENvcmVEZWJ1Z19ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19TVEFURVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX1BvcyAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ0hLRVJSX01zayAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX0NIS0VSUl9Qb3MpICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX0NIS0VSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX05PQ1BFUlJfUG9zICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19OT0NQRVJSIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19ERU1DUl9WQ19OT0NQRVJSX01zayAgICAgKDFVTCA8PCBDb3JlRGVidWdfREVNQ1JfVkNfTk9DUEVSUl9Qb3MpICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBERU1DUjogVkNfTk9DUEVSUiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcyAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERFTUNSOiBWQ19NTUVSUiBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfTU1FUlJfTXNrICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX01NRVJSIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICgxVUwgLyo8PCBDb3JlRGVidWdfREVNQ1JfVkNfQ09SRVJFU0VUX1BvcyovKSAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREVNQ1I6IFZDX0NPUkVSRVNFVCBNYXNrICovCisKKy8qIERlYnVnIFNldCBDbGVhciBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfRFNDRU1DUl9DTFJfTU9OX1JFUV9Qb3MgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgRFNDRU1DUjogQ0xSX01PTl9SRVEsIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX0NMUl9NT05fUkVRX01zayAgKDFVTCA8PCBDb3JlRGVidWdfRFNDRU1DUl9DTFJfTU9OX1JFUV9Qb3MpICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBDTFJfTU9OX1JFUSwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX0NMUl9NT05fUEVORF9Qb3MgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBDTFJfTU9OX1BFTkQsIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX0NMUl9NT05fUEVORF9Nc2sgKDFVTCA8PCBDb3JlRGVidWdfRFNDRU1DUl9DTFJfTU9OX1BFTkRfUG9zKSAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBDTFJfTU9OX1BFTkQsIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfRFNDRU1DUl9TRVRfTU9OX1JFUV9Qb3MgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgRFNDRU1DUjogU0VUX01PTl9SRVEsIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX1NFVF9NT05fUkVRX01zayAgKDFVTCA8PCBDb3JlRGVidWdfRFNDRU1DUl9TRVRfTU9OX1JFUV9Qb3MpICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBTRVRfTU9OX1JFUSwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX1NFVF9NT05fUEVORF9Qb3MgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBTRVRfTU9OX1BFTkQsIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NFTUNSX1NFVF9NT05fUEVORF9Nc2sgKDFVTCA8PCBDb3JlRGVidWdfRFNDRU1DUl9TRVRfTU9OX1BFTkRfUG9zKSAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NFTUNSOiBTRVRfTU9OX1BFTkQsIE1hc2sgKi8KKworLyogRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfREFVVEhDVFJMX1VJREVOX1BvcyAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREFVVEhDVFJMOiBVSURFTiwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9VSURFTl9Nc2sgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EQVVUSENUUkxfVUlERU5fUG9zKSAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogVUlERU4sIE1hc2sgKi8KKworI2RlZmluZSBDb3JlRGVidWdfREFVVEhDVFJMX1VJREFQRU5fUG9zICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREFVVEhDVFJMOiBVSURBUEVOLCBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfREFVVEhDVFJMX1VJREFQRU5fTXNrICAgICgxVUwgPDwgQ29yZURlYnVnX0RBVVRIQ1RSTF9VSURBUEVOX1BvcykgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgREFVVEhDVFJMOiBVSURBUEVOLCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9GU0RNQV9Qb3MgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogRlNETUEsIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQVVUSENUUkxfRlNETUFfTXNrICAgICAgKDFVTCA8PCBDb3JlRGVidWdfREFVVEhDVFJMX0ZTRE1BX1BvcykgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQVVUSENUUkw6IEZTRE1BLCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9JTlRTUE5JREVOX1BvcyAgM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogSU5UU1BOSURFTiwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9JTlRTUE5JREVOX01zayAoMVVMIDw8IENvcmVEZWJ1Z19EQVVUSENUUkxfSU5UU1BOSURFTl9Qb3MpICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogSU5UU1BOSURFTiwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EQVVUSENUUkxfU1BOSURFTlNFTF9Qb3MgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQVVUSENUUkw6IFNQTklERU5TRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9TUE5JREVOU0VMX01zayAoMVVMIDw8IENvcmVEZWJ1Z19EQVVUSENUUkxfU1BOSURFTlNFTF9Qb3MpICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogU1BOSURFTlNFTCBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9JTlRTUElERU5fUG9zICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogSU5UU1BJREVOIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQVVUSENUUkxfSU5UU1BJREVOX01zayAgKDFVTCA8PCBDb3JlRGVidWdfREFVVEhDVFJMX0lOVFNQSURFTl9Qb3MpICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQVVUSENUUkw6IElOVFNQSURFTiBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RBVVRIQ1RSTF9TUElERU5TRUxfUG9zICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERBVVRIQ1RSTDogU1BJREVOU0VMIFBvc2l0aW9uICovCisjZGVmaW5lIENvcmVEZWJ1Z19EQVVUSENUUkxfU1BJREVOU0VMX01zayAgKDFVTCAvKjw8IENvcmVEZWJ1Z19EQVVUSENUUkxfU1BJREVOU0VMX1BvcyovKSAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEQVVUSENUUkw6IFNQSURFTlNFTCBNYXNrICovCisKKy8qIERlYnVnIFNlY3VyaXR5IENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBDb3JlRGVidWdfRFNDU1JfQ0RTX1BvcyAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgRFNDU1I6IENEUyBQb3NpdGlvbiAqLworI2RlZmluZSBDb3JlRGVidWdfRFNDU1JfQ0RTX01zayAgICAgICAgICAgICgxVUwgPDwgQ29yZURlYnVnX0RTQ1NSX0NEU19Qb3MpICAgICAgICAgICAgICAgLyohPCBcZGVwcmVjYXRlZCBDb3JlRGVidWcgRFNDU1I6IENEUyBNYXNrICovCisKKyNkZWZpbmUgQ29yZURlYnVnX0RTQ1NSX1NCUlNFTF9Qb3MgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERTQ1NSOiBTQlJTRUwgUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RTQ1NSX1NCUlNFTF9Nc2sgICAgICAgICAoMVVMIDw8IENvcmVEZWJ1Z19EU0NTUl9TQlJTRUxfUG9zKSAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERTQ1NSOiBTQlJTRUwgTWFzayAqLworCisjZGVmaW5lIENvcmVEZWJ1Z19EU0NTUl9TQlJTRUxFTl9Qb3MgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmVEZWJ1ZyBEU0NTUjogU0JSU0VMRU4gUG9zaXRpb24gKi8KKyNkZWZpbmUgQ29yZURlYnVnX0RTQ1NSX1NCUlNFTEVOX01zayAgICAgICAoMVVMIC8qPDwgQ29yZURlYnVnX0RTQ1NSX1NCUlNFTEVOX1BvcyovKSAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZURlYnVnIERTQ1NSOiBTQlJTRUxFTiBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0NvcmVEZWJ1ZyAqLworCisKKy8qKgorICBcaW5ncm91cCAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgQ01TSVNfRENCICAgICAgIERlYnVnIENvbnRyb2wgQmxvY2sKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEZWJ1ZyBDb250cm9sIEJsb2NrIFJlZ2lzdGVycworICBAeworICovCisKKy8qKgorICBcYnJpZWYgIFN0cnVjdHVyZSB0eXBlIHRvIGFjY2VzcyB0aGUgRGVidWcgQ29udHJvbCBCbG9jayBSZWdpc3RlcnMgKERDQikuCisgKi8KK3R5cGVkZWYgc3RydWN0Cit7CisgIF9fSU9NIHVpbnQzMl90IERIQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwMCAoUi9XKSAgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19PTSAgdWludDMyX3QgRENSU1I7ICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0ICggL1cpICBEZWJ1ZyBDb3JlIFJlZ2lzdGVyIFNlbGVjdG9yIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERDUkRSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwOCAoUi9XKSAgRGVidWcgQ29yZSBSZWdpc3RlciBEYXRhIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERFTUNSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAwQyAoUi9XKSAgRGVidWcgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19PTSAgdWludDMyX3QgRFNDRU1DUjsgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDEwICggL1cpICBEZWJ1ZyBTZXQgQ2xlYXIgRXhjZXB0aW9uIGFuZCBNb25pdG9yIENvbnRyb2wgUmVnaXN0ZXIgKi8KKyAgX19JT00gdWludDMyX3QgREFVVEhDVFJMOyAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDE0IChSL1cpICBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBDb250cm9sIFJlZ2lzdGVyICovCisgIF9fSU9NIHVpbnQzMl90IERTQ1NSOyAgICAgICAgICAgICAgICAgIC8qITwgT2Zmc2V0OiAweDAxOCAoUi9XKSAgRGVidWcgU2VjdXJpdHkgQ29udHJvbCBhbmQgU3RhdHVzIFJlZ2lzdGVyICovCit9IERDQl9UeXBlOworCisvKiBESENTUiwgRGVidWcgSGFsdGluZyBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRENCX0RIQ1NSX0RCR0tFWV9Qb3MgICAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBEZWJ1ZyBrZXkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RIQ1NSX0RCR0tFWV9Nc2sgICAgICAgICAgICAgICAoMHhGRkZGVUwgPDwgRENCX0RIQ1NSX0RCR0tFWV9Qb3MpICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBEZWJ1ZyBrZXkgTWFzayAqLworCisjZGVmaW5lIERDQl9ESENTUl9TX1JFU1RBUlRfU1RfUG9zICAgICAgICAgMjZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogUmVzdGFydCBzdGlja3kgc3RhdHVzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9TX1JFU1RBUlRfU1RfTXNrICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9TX1JFU1RBUlRfU1RfUG9zKSAgICAgICAgICAvKiE8IERDQiBESENTUjogUmVzdGFydCBzdGlja3kgc3RhdHVzIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfU19SRVNFVF9TVF9Qb3MgICAgICAgICAgIDI1VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFJlc2V0IHN0aWNreSBzdGF0dXMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RIQ1NSX1NfUkVTRVRfU1RfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RIQ1NSX1NfUkVTRVRfU1RfUG9zKSAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBSZXNldCBzdGlja3kgc3RhdHVzIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfU19SRVRJUkVfU1RfUG9zICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFJldGlyZSBzdGlja3kgc3RhdHVzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9TX1JFVElSRV9TVF9Nc2sgICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9TX1JFVElSRV9TVF9Qb3MpICAgICAgICAgICAvKiE8IERDQiBESENTUjogUmV0aXJlIHN0aWNreSBzdGF0dXMgTWFzayAqLworCisjZGVmaW5lIERDQl9ESENTUl9TX0ZQRF9Qb3MgICAgICAgICAgICAgICAgMjNVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogRmxvYXRpbmctcG9pbnQgcmVnaXN0ZXJzIERlYnVnZ2FibGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RIQ1NSX1NfRlBEX01zayAgICAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RIQ1NSX1NfRlBEX1BvcykgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBGbG9hdGluZy1wb2ludCByZWdpc3RlcnMgRGVidWdnYWJsZSBNYXNrICovCisKKyNkZWZpbmUgRENCX0RIQ1NSX1NfU1VJREVfUG9zICAgICAgICAgICAgICAyMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBTZWN1cmUgdW5wcml2aWxlZ2VkIGhhbHRpbmcgZGVidWcgZW5hYmxlZCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfU19TVUlERV9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfU19TVUlERV9Qb3MpICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFNlY3VyZSB1bnByaXZpbGVnZWQgaGFsdGluZyBkZWJ1ZyBlbmFibGVkIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfU19OU1VJREVfUG9zICAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IE5vbi1zZWN1cmUgdW5wcml2aWxlZ2VkIGhhbHRpbmcgZGVidWcgZW5hYmxlZCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfU19OU1VJREVfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfU19OU1VJREVfUG9zKSAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IE5vbi1zZWN1cmUgdW5wcml2aWxlZ2VkIGhhbHRpbmcgZGVidWcgZW5hYmxlZCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RIQ1NSX1NfU0RFX1BvcyAgICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBTZWN1cmUgZGVidWcgZW5hYmxlZCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfU19TREVfTXNrICAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfU19TREVfUG9zKSAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFNlY3VyZSBkZWJ1ZyBlbmFibGVkIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfU19MT0NLVVBfUG9zICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IExvY2t1cCBzdGF0dXMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RIQ1NSX1NfTE9DS1VQX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RIQ1NSX1NfTE9DS1VQX1BvcykgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBMb2NrdXAgc3RhdHVzIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfU19TTEVFUF9Qb3MgICAgICAgICAgICAgIDE4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFNsZWVwaW5nIHN0YXR1cyBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfU19TTEVFUF9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfU19TTEVFUF9Qb3MpICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IFNsZWVwaW5nIHN0YXR1cyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RIQ1NSX1NfSEFMVF9Qb3MgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBIYWx0ZWQgc3RhdHVzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9TX0hBTFRfTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9TX0hBTFRfUG9zKSAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogSGFsdGVkIHN0YXR1cyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RIQ1NSX1NfUkVHUkRZX1BvcyAgICAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBSZWdpc3RlciByZWFkeSBzdGF0dXMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RIQ1NSX1NfUkVHUkRZX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RIQ1NSX1NfUkVHUkRZX1BvcykgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBSZWdpc3RlciByZWFkeSBzdGF0dXMgTWFzayAqLworCisjZGVmaW5lIERDQl9ESENTUl9DX1BNT1ZfUG9zICAgICAgICAgICAgICAgIDZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogSGFsdCBvbiBQTVUgb3ZlcmZsb3cgY29udHJvbCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfQ19QTU9WX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfQ19QTU9WX1BvcykgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IEhhbHQgb24gUE1VIG92ZXJmbG93IGNvbnRyb2wgTWFzayAqLworCisjZGVmaW5lIERDQl9ESENTUl9DX1NOQVBTVEFMTF9Qb3MgICAgICAgICAgIDVVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogU25hcCBzdGFsbCBjb250cm9sIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9DX1NOQVBTVEFMTF9Nc2sgICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9DX1NOQVBTVEFMTF9Qb3MpICAgICAgICAgICAvKiE8IERDQiBESENTUjogU25hcCBzdGFsbCBjb250cm9sIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfQ19NQVNLSU5UU19Qb3MgICAgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IE1hc2sgaW50ZXJydXB0cyBjb250cm9sIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9DX01BU0tJTlRTX01zayAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9DX01BU0tJTlRTX1BvcykgICAgICAgICAgICAvKiE8IERDQiBESENTUjogTWFzayBpbnRlcnJ1cHRzIGNvbnRyb2wgTWFzayAqLworCisjZGVmaW5lIERDQl9ESENTUl9DX1NURVBfUG9zICAgICAgICAgICAgICAgIDJVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogU3RlcCBjb250cm9sIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ESENTUl9DX1NURVBfTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ESENTUl9DX1NURVBfUG9zKSAgICAgICAgICAgICAgICAvKiE8IERDQiBESENTUjogU3RlcCBjb250cm9sIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREhDU1JfQ19IQUxUX1BvcyAgICAgICAgICAgICAgICAxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IEhhbHQgY29udHJvbCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfQ19IQUxUX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREhDU1JfQ19IQUxUX1BvcykgICAgICAgICAgICAgICAgLyohPCBEQ0IgREhDU1I6IEhhbHQgY29udHJvbCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RIQ1NSX0NfREVCVUdFTl9Qb3MgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERIQ1NSOiBEZWJ1ZyBlbmFibGUgY29udHJvbCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREhDU1JfQ19ERUJVR0VOX01zayAgICAgICAgICAgICgweDFVTCAvKjw8IERDQl9ESENTUl9DX0RFQlVHRU5fUG9zKi8pICAgICAgICAgLyohPCBEQ0IgREhDU1I6IERlYnVnIGVuYWJsZSBjb250cm9sIE1hc2sgKi8KKworLyogRENSU1IsIERlYnVnIENvcmUgUmVnaXN0ZXIgU2VsZWN0IFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERDQl9EQ1JTUl9SRUdXblJfUG9zICAgICAgICAgICAgICAgMTZVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBEQ1JTUjogUmVnaXN0ZXIgd3JpdGUvbm90LXJlYWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RDUlNSX1JFR1duUl9Nc2sgICAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RDUlNSX1JFR1duUl9Qb3MpICAgICAgICAgICAgICAgIC8qITwgRENCIERDUlNSOiBSZWdpc3RlciB3cml0ZS9ub3QtcmVhZCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RDUlNSX1JFR1NFTF9Qb3MgICAgICAgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERDUlNSOiBSZWdpc3RlciBzZWxlY3RvciBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRENSU1JfUkVHU0VMX01zayAgICAgICAgICAgICAgICgweDdGVUwgLyo8PCBEQ0JfRENSU1JfUkVHU0VMX1BvcyovKSAgICAgICAgICAgLyohPCBEQ0IgRENSU1I6IFJlZ2lzdGVyIHNlbGVjdG9yIE1hc2sgKi8KKworLyogRENSRFIsIERlYnVnIENvcmUgUmVnaXN0ZXIgRGF0YSBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEQ0JfRENSRFJfREJHVE1QX1BvcyAgICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgRENSRFI6IERhdGEgdGVtcG9yYXJ5IGJ1ZmZlciBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRENSRFJfREJHVE1QX01zayAgICAgICAgICAgICAgICgweEZGRkZGRkZGVUwgLyo8PCBEQ0JfRENSRFJfREJHVE1QX1BvcyovKSAgICAgLyohPCBEQ0IgRENSRFI6IERhdGEgdGVtcG9yYXJ5IGJ1ZmZlciBNYXNrICovCisKKy8qIERFTUNSLCBEZWJ1ZyBFeGNlcHRpb24gYW5kIE1vbml0b3IgQ29udHJvbCBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBEQ0JfREVNQ1JfVFJDRU5BX1BvcyAgICAgICAgICAgICAgIDI0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFRyYWNlIGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfVFJDRU5BX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREVNQ1JfVFJDRU5BX1BvcykgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFRyYWNlIGVuYWJsZSBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX01PTlBSS0VZX1BvcyAgICAgICAgICAgICAyM1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBNb25pdG9yIHBlbmQgcmVxIGtleSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfTU9OUFJLRVlfTXNrICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREVNQ1JfTU9OUFJLRVlfUG9zKSAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IE1vbml0b3IgcGVuZCByZXEga2V5IE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREVNQ1JfVU1PTl9FTl9Qb3MgICAgICAgICAgICAgIDIxVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFVucHJpdmlsZWdlZCBtb25pdG9yIGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfVU1PTl9FTl9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREVNQ1JfVU1PTl9FTl9Qb3MpICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFVucHJpdmlsZWdlZCBtb25pdG9yIGVuYWJsZSBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1NETUVfUG9zICAgICAgICAgICAgICAgICAyMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBTZWN1cmUgRGVidWdNb25pdG9yIGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfU0RNRV9Nc2sgICAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREVNQ1JfU0RNRV9Qb3MpICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFNlY3VyZSBEZWJ1Z01vbml0b3IgZW5hYmxlIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREVNQ1JfTU9OX1JFUV9Qb3MgICAgICAgICAgICAgIDE5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IE1vbml0b3IgcmVxdWVzdCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfTU9OX1JFUV9Nc2sgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREVNQ1JfTU9OX1JFUV9Qb3MpICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IE1vbml0b3IgcmVxdWVzdCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX01PTl9TVEVQX1BvcyAgICAgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBNb25pdG9yIHN0ZXAgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RFTUNSX01PTl9TVEVQX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RFTUNSX01PTl9TVEVQX1BvcykgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBNb25pdG9yIHN0ZXAgTWFzayAqLworCisjZGVmaW5lIERDQl9ERU1DUl9NT05fUEVORF9Qb3MgICAgICAgICAgICAgMTdVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogTW9uaXRvciBwZW5kIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9NT05fUEVORF9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9NT05fUEVORF9Qb3MpICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogTW9uaXRvciBwZW5kIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREVNQ1JfTU9OX0VOX1BvcyAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IE1vbml0b3IgZW5hYmxlIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9NT05fRU5fTXNrICAgICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9NT05fRU5fUG9zKSAgICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogTW9uaXRvciBlbmFibGUgTWFzayAqLworCisjZGVmaW5lIERDQl9ERU1DUl9WQ19TRkVSUl9Qb3MgICAgICAgICAgICAgMTFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIFNlY3VyZUZhdWx0IFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9WQ19TRkVSUl9Nc2sgICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9WQ19TRkVSUl9Qb3MpICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIFNlY3VyZUZhdWx0IE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREVNQ1JfVkNfSEFSREVSUl9Qb3MgICAgICAgICAgIDEwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREVNQ1I6IFZlY3RvciBDYXRjaCBIYXJkRmF1bHQgZXJyb3JzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9WQ19IQVJERVJSX01zayAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9WQ19IQVJERVJSX1BvcykgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIEhhcmRGYXVsdCBlcnJvcnMgTWFzayAqLworCisjZGVmaW5lIERDQl9ERU1DUl9WQ19JTlRFUlJfUG9zICAgICAgICAgICAgIDlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIGludGVycnVwdCBlcnJvcnMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RFTUNSX1ZDX0lOVEVSUl9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RFTUNSX1ZDX0lOVEVSUl9Qb3MpICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggaW50ZXJydXB0IGVycm9ycyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1ZDX0JVU0VSUl9Qb3MgICAgICAgICAgICAgOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggQnVzRmF1bHQgZXJyb3JzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9WQ19CVVNFUlJfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9WQ19CVVNFUlJfUG9zKSAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIEJ1c0ZhdWx0IGVycm9ycyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1ZDX1NUQVRFUlJfUG9zICAgICAgICAgICAgN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggc3RhdGUgZXJyb3JzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9WQ19TVEFURVJSX01zayAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9WQ19TVEFURVJSX1BvcykgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIHN0YXRlIGVycm9ycyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1ZDX0NIS0VSUl9Qb3MgICAgICAgICAgICAgNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggY2hlY2sgZXJyb3JzIFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9ERU1DUl9WQ19DSEtFUlJfTXNrICAgICAgICAgICAgKDB4MVVMIDw8IERDQl9ERU1DUl9WQ19DSEtFUlJfUG9zKSAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIGNoZWNrIGVycm9ycyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1ZDX05PQ1BFUlJfUG9zICAgICAgICAgICAgNVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggTk9DUCBlcnJvcnMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RFTUNSX1ZDX05PQ1BFUlJfTXNrICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RFTUNSX1ZDX05PQ1BFUlJfUG9zKSAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggTk9DUCBlcnJvcnMgTWFzayAqLworCisjZGVmaW5lIERDQl9ERU1DUl9WQ19NTUVSUl9Qb3MgICAgICAgICAgICAgIDRVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBERU1DUjogVmVjdG9yIENhdGNoIE1lbU1hbmFnZSBlcnJvcnMgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RFTUNSX1ZDX01NRVJSX01zayAgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RFTUNSX1ZDX01NRVJSX1BvcykgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggTWVtTWFuYWdlIGVycm9ycyBNYXNrICovCisKKyNkZWZpbmUgRENCX0RFTUNSX1ZDX0NPUkVSRVNFVF9Qb3MgICAgICAgICAgMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERFTUNSOiBWZWN0b3IgQ2F0Y2ggQ29yZSByZXNldCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREVNQ1JfVkNfQ09SRVJFU0VUX01zayAgICAgICAgICgweDFVTCAvKjw8IERDQl9ERU1DUl9WQ19DT1JFUkVTRVRfUG9zKi8pICAgICAgLyohPCBEQ0IgREVNQ1I6IFZlY3RvciBDYXRjaCBDb3JlIHJlc2V0IE1hc2sgKi8KKworLyogRFNDRU1DUiwgRGVidWcgU2V0IENsZWFyIEV4Y2VwdGlvbiBhbmQgTW9uaXRvciBDb250cm9sIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERDQl9EU0NFTUNSX0NMUl9NT05fUkVRX1BvcyAgICAgICAgMTlVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBEU0NFTUNSOiBDbGVhciBtb25pdG9yIHJlcXVlc3QgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RTQ0VNQ1JfQ0xSX01PTl9SRVFfTXNrICAgICAgICAoMHgxVUwgPDwgRENCX0RTQ0VNQ1JfQ0xSX01PTl9SRVFfUG9zKSAgICAgICAgIC8qITwgRENCIERTQ0VNQ1I6IENsZWFyIG1vbml0b3IgcmVxdWVzdCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RTQ0VNQ1JfQ0xSX01PTl9QRU5EX1BvcyAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERTQ0VNQ1I6IENsZWFyIG1vbml0b3IgcGVuZCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDRU1DUl9DTFJfTU9OX1BFTkRfTXNrICAgICAgICgweDFVTCA8PCBEQ0JfRFNDRU1DUl9DTFJfTU9OX1BFTkRfUG9zKSAgICAgICAgLyohPCBEQ0IgRFNDRU1DUjogQ2xlYXIgbW9uaXRvciBwZW5kIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfRFNDRU1DUl9TRVRfTU9OX1JFUV9Qb3MgICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDRU1DUjogU2V0IG1vbml0b3IgcmVxdWVzdCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDRU1DUl9TRVRfTU9OX1JFUV9Nc2sgICAgICAgICgweDFVTCA8PCBEQ0JfRFNDRU1DUl9TRVRfTU9OX1JFUV9Qb3MpICAgICAgICAgLyohPCBEQ0IgRFNDRU1DUjogU2V0IG1vbml0b3IgcmVxdWVzdCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RTQ0VNQ1JfU0VUX01PTl9QRU5EX1BvcyAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERTQ0VNQ1I6IFNldCBtb25pdG9yIHBlbmQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RTQ0VNQ1JfU0VUX01PTl9QRU5EX01zayAgICAgICAoMHgxVUwgPDwgRENCX0RTQ0VNQ1JfU0VUX01PTl9QRU5EX1BvcykgICAgICAgIC8qITwgRENCIERTQ0VNQ1I6IFNldCBtb25pdG9yIHBlbmQgTWFzayAqLworCisvKiBEQVVUSENUUkwsIERlYnVnIEF1dGhlbnRpY2F0aW9uIENvbnRyb2wgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRENCX0RBVVRIQ1RSTF9VSURFTl9Qb3MgICAgICAgICAgICAxMFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERBVVRIQ1RSTDogVW5wcml2aWxlZ2VkIEludmFzaXZlIERlYnVnIEVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREFVVEhDVFJMX1VJREVOX01zayAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfREFVVEhDVFJMX1VJREVOX1BvcykgICAgICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBVbnByaXZpbGVnZWQgSW52YXNpdmUgRGVidWcgRW5hYmxlIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREFVVEhDVFJMX1VJREFQRU5fUG9zICAgICAgICAgICA5VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBVbnByaXZpbGVnZWQgSW52YXNpdmUgREFQIEFjY2VzcyBFbmFibGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RBVVRIQ1RSTF9VSURBUEVOX01zayAgICAgICAgICAoMHgxVUwgPDwgRENCX0RBVVRIQ1RSTF9VSURBUEVOX1BvcykgICAgICAgICAgIC8qITwgRENCIERBVVRIQ1RSTDogVW5wcml2aWxlZ2VkIEludmFzaXZlIERBUCBBY2Nlc3MgRW5hYmxlIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREFVVEhDVFJMX0ZTRE1BX1BvcyAgICAgICAgICAgICA4VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBGb3JjZSBTZWN1cmUgRGVidWdNb25pdG9yIEFsbG93ZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRENCX0RBVVRIQ1RSTF9GU0RNQV9Nc2sgICAgICAgICAgICAoMHgxVUwgPDwgRENCX0RBVVRIQ1RSTF9GU0RNQV9Qb3MpICAgICAgICAgICAgIC8qITwgRENCIERBVVRIQ1RSTDogRm9yY2UgU2VjdXJlIERlYnVnTW9uaXRvciBBbGxvd2VkIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREFVVEhDVFJMX0lOVFNQTklERU5fUG9zICAgICAgICAzVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBJbnRlcm5hbCBTZWN1cmUgbm9uLWludmFzaXZlIGRlYnVnIGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREFVVEhDVFJMX0lOVFNQTklERU5fTXNrICAgICAgICgweDFVTCA8PCBEQ0JfREFVVEhDVFJMX0lOVFNQTklERU5fUG9zKSAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBJbnRlcm5hbCBTZWN1cmUgbm9uLWludmFzaXZlIGRlYnVnIGVuYWJsZSBNYXNrICovCisKKyNkZWZpbmUgRENCX0RBVVRIQ1RSTF9TUE5JREVOU0VMX1BvcyAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERBVVRIQ1RSTDogU2VjdXJlIG5vbi1pbnZhc2l2ZSBkZWJ1ZyBlbmFibGUgc2VsZWN0IFBvc2l0aW9uICovCisjZGVmaW5lIERDQl9EQVVUSENUUkxfU1BOSURFTlNFTF9Nc2sgICAgICAgKDB4MVVMIDw8IERDQl9EQVVUSENUUkxfU1BOSURFTlNFTF9Qb3MpICAgICAgICAvKiE8IERDQiBEQVVUSENUUkw6IFNlY3VyZSBub24taW52YXNpdmUgZGVidWcgZW5hYmxlIHNlbGVjdCBNYXNrICovCisKKyNkZWZpbmUgRENCX0RBVVRIQ1RSTF9JTlRTUElERU5fUG9zICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERBVVRIQ1RSTDogSW50ZXJuYWwgU2VjdXJlIGludmFzaXZlIGRlYnVnIGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREFVVEhDVFJMX0lOVFNQSURFTl9Nc2sgICAgICAgICgweDFVTCA8PCBEQ0JfREFVVEhDVFJMX0lOVFNQSURFTl9Qb3MpICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBJbnRlcm5hbCBTZWN1cmUgaW52YXNpdmUgZGVidWcgZW5hYmxlIE1hc2sgKi8KKworI2RlZmluZSBEQ0JfREFVVEhDVFJMX1NQSURFTlNFTF9Qb3MgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBTZWN1cmUgaW52YXNpdmUgZGVidWcgZW5hYmxlIHNlbGVjdCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfREFVVEhDVFJMX1NQSURFTlNFTF9Nc2sgICAgICAgICgweDFVTCAvKjw8IERDQl9EQVVUSENUUkxfU1BJREVOU0VMX1BvcyovKSAgICAgLyohPCBEQ0IgREFVVEhDVFJMOiBTZWN1cmUgaW52YXNpdmUgZGVidWcgZW5hYmxlIHNlbGVjdCBNYXNrICovCisKKy8qIERTQ1NSLCBEZWJ1ZyBTZWN1cml0eSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRENCX0RTQ1NSX0NEU0tFWV9Qb3MgICAgICAgICAgICAgICAxN1UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERTQ1NSOiBDRFMgd3JpdGUtZW5hYmxlIGtleSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDU1JfQ0RTS0VZX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfRFNDU1JfQ0RTS0VZX1BvcykgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IENEUyB3cml0ZS1lbmFibGUga2V5IE1hc2sgKi8KKworI2RlZmluZSBEQ0JfRFNDU1JfQ0RTX1BvcyAgICAgICAgICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IEN1cnJlbnQgZG9tYWluIFNlY3VyZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDU1JfQ0RTX01zayAgICAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfRFNDU1JfQ0RTX1BvcykgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IEN1cnJlbnQgZG9tYWluIFNlY3VyZSBNYXNrICovCisKKyNkZWZpbmUgRENCX0RTQ1NSX1NCUlNFTF9Qb3MgICAgICAgICAgICAgICAgMVUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIERTQ1NSOiBTZWN1cmUgYmFua2VkIHJlZ2lzdGVyIHNlbGVjdCBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDU1JfU0JSU0VMX01zayAgICAgICAgICAgICAgICgweDFVTCA8PCBEQ0JfRFNDU1JfU0JSU0VMX1BvcykgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IFNlY3VyZSBiYW5rZWQgcmVnaXN0ZXIgc2VsZWN0IE1hc2sgKi8KKworI2RlZmluZSBEQ0JfRFNDU1JfU0JSU0VMRU5fUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IFNlY3VyZSBiYW5rZWQgcmVnaXN0ZXIgc2VsZWN0IGVuYWJsZSBQb3NpdGlvbiAqLworI2RlZmluZSBEQ0JfRFNDU1JfU0JSU0VMRU5fTXNrICAgICAgICAgICAgICgweDFVTCAvKjw8IERDQl9EU0NTUl9TQlJTRUxFTl9Qb3MqLykgICAgICAgICAgLyohPCBEQ0IgRFNDU1I6IFNlY3VyZSBiYW5rZWQgcmVnaXN0ZXIgc2VsZWN0IGVuYWJsZSBNYXNrICovCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX0RDQiAqLworCisKKworLyoqCisgIFxpbmdyb3VwICBDTVNJU19jb3JlX3JlZ2lzdGVyCisgIFxkZWZncm91cCBDTVNJU19ESUIgICAgICAgRGVidWcgSWRlbnRpZmljYXRpb24gQmxvY2sKKyAgXGJyaWVmICAgIFR5cGUgZGVmaW5pdGlvbnMgZm9yIHRoZSBEZWJ1ZyBJZGVudGlmaWNhdGlvbiBCbG9jayBSZWdpc3RlcnMKKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICBTdHJ1Y3R1cmUgdHlwZSB0byBhY2Nlc3MgdGhlIERlYnVnIElkZW50aWZpY2F0aW9uIEJsb2NrIFJlZ2lzdGVycyAoRElCKS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgX19PTSAgdWludDMyX3QgRExBUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDAwICggL1cpICBTQ1MgU29mdHdhcmUgTG9jayBBY2Nlc3MgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgRExTUjsgICAgICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA0IChSLyApICBTQ1MgU29mdHdhcmUgTG9jayBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgREFVVEhTVEFUVVM7ICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDA4IChSLyApICBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKi8KKyAgX19JTSAgdWludDMyX3QgRERFVkFSQ0g7ICAgICAgICAgICAgICAgLyohPCBPZmZzZXQ6IDB4MDBDIChSLyApICBTQ1MgRGV2aWNlIEFyY2hpdGVjdHVyZSBSZWdpc3RlciAqLworICBfX0lNICB1aW50MzJfdCBEREVWVFlQRTsgICAgICAgICAgICAgICAvKiE8IE9mZnNldDogMHgwMTAgKFIvICkgIFNDUyBEZXZpY2UgVHlwZSBSZWdpc3RlciAqLworfSBESUJfVHlwZTsKKworLyogRExBUiwgU0NTIFNvZnR3YXJlIExvY2sgQWNjZXNzIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERJQl9ETEFSX0tFWV9Qb3MgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBETEFSOiBLRVkgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RMQVJfS0VZX01zayAgICAgICAgICAgICAgICAgICAoMHhGRkZGRkZGRlVMIC8qPDwgRElCX0RMQVJfS0VZX1BvcyAqLykgICAgICAgIC8qITwgRElCIERMQVI6IEtFWSBNYXNrICovCisKKy8qIERMU1IsIFNDUyBTb2Z0d2FyZSBMb2NrIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBESUJfRExTUl9uVFRfUG9zICAgICAgICAgICAgICAgICAgICAyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgRExTUjogTm90IHRoaXJ0eS10d28gYml0IFBvc2l0aW9uICovCisjZGVmaW5lIERJQl9ETFNSX25UVF9Nc2sgICAgICAgICAgICAgICAgICAgKDB4MVVMIDw8IERJQl9ETFNSX25UVF9Qb3MgKSAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBETFNSOiBOb3QgdGhpcnR5LXR3byBiaXQgTWFzayAqLworCisjZGVmaW5lIERJQl9ETFNSX1NMS19Qb3MgICAgICAgICAgICAgICAgICAgIDFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBETFNSOiBTb2Z0d2FyZSBMb2NrIHN0YXR1cyBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfRExTUl9TTEtfTXNrICAgICAgICAgICAgICAgICAgICgweDFVTCA8PCBESUJfRExTUl9TTEtfUG9zICkgICAgICAgICAgICAgICAgICAgLyohPCBESUIgRExTUjogU29mdHdhcmUgTG9jayBzdGF0dXMgTWFzayAqLworCisjZGVmaW5lIERJQl9ETFNSX1NMSV9Qb3MgICAgICAgICAgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBETFNSOiBTb2Z0d2FyZSBMb2NrIGltcGxlbWVudGVkIFBvc2l0aW9uICovCisjZGVmaW5lIERJQl9ETFNSX1NMSV9Nc2sgICAgICAgICAgICAgICAgICAgKDB4MVVMIC8qPDwgRElCX0RMU1JfU0xJX1BvcyovKSAgICAgICAgICAgICAgICAvKiE8IERJQiBETFNSOiBTb2Z0d2FyZSBMb2NrIGltcGxlbWVudGVkIE1hc2sgKi8KKworLyogREFVVEhTVEFUVVMsIERlYnVnIEF1dGhlbnRpY2F0aW9uIFN0YXR1cyBSZWdpc3RlciBEZWZpbml0aW9ucyAqLworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU1VOSURfUG9zICAgICAgICAgIDIyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBVbnByaXZpbGVnZWQgTm9uLWludmFzaXZlIERlYnVnIEFsbG93ZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX1NVTklEX01zayAgICAgICAgICAoMHgzVUwgPDwgRElCX0RBVVRIU1RBVFVTX1NVTklEX1BvcyApICAgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBTZWN1cmUgVW5wcml2aWxlZ2VkIE5vbi1pbnZhc2l2ZSBEZWJ1ZyBBbGxvd2VkIE1hc2sgKi8KKworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU1VJRF9Qb3MgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBVbnByaXZpbGVnZWQgSW52YXNpdmUgRGVidWcgQWxsb3dlZCBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU1VJRF9Nc2sgICAgICAgICAgICgweDNVTCA8PCBESUJfREFVVEhTVEFUVVNfU1VJRF9Qb3MgKSAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBVbnByaXZpbGVnZWQgSW52YXNpdmUgRGVidWcgQWxsb3dlZCBNYXNrICovCisKKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX05TVU5JRF9Qb3MgICAgICAgICAxOFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBOb24tc2VjdXJlIFVucHJpdmlsZWdlZCBOb24taW52YXNpdmUgRGVidWcgQWxsbyBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfTlNVTklEX01zayAgICAgICAgICgweDNVTCA8PCBESUJfREFVVEhTVEFUVVNfTlNVTklEX1BvcyApICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IE5vbi1zZWN1cmUgVW5wcml2aWxlZ2VkIE5vbi1pbnZhc2l2ZSBEZWJ1ZyBBbGxvIE1hc2sgKi8KKworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfTlNVSURfUG9zICAgICAgICAgIDE2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IE5vbi1zZWN1cmUgVW5wcml2aWxlZ2VkIEludmFzaXZlIERlYnVnIEFsbG93ZWQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX05TVUlEX01zayAgICAgICAgICAoMHgzVUwgPDwgRElCX0RBVVRIU1RBVFVTX05TVUlEX1BvcyApICAgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBOb24tc2VjdXJlIFVucHJpdmlsZWdlZCBJbnZhc2l2ZSBEZWJ1ZyBBbGxvd2VkIE1hc2sgKi8KKworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU05JRF9Qb3MgICAgICAgICAgICA2VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBOb24taW52YXNpdmUgRGVidWcgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX1NOSURfTXNrICAgICAgICAgICAoMHgzVUwgPDwgRElCX0RBVVRIU1RBVFVTX1NOSURfUG9zICkgICAgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBTZWN1cmUgTm9uLWludmFzaXZlIERlYnVnIE1hc2sgKi8KKworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU0lEX1BvcyAgICAgICAgICAgICA0VSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBJbnZhc2l2ZSBEZWJ1ZyBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfU0lEX01zayAgICAgICAgICAgICgweDNVTCA8PCBESUJfREFVVEhTVEFUVVNfU0lEX1BvcyApICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IFNlY3VyZSBJbnZhc2l2ZSBEZWJ1ZyBNYXNrICovCisKKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX05TTklEX1BvcyAgICAgICAgICAgMlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBOb24tc2VjdXJlIE5vbi1pbnZhc2l2ZSBEZWJ1ZyBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfTlNOSURfTXNrICAgICAgICAgICgweDNVTCA8PCBESUJfREFVVEhTVEFUVVNfTlNOSURfUG9zICkgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IE5vbi1zZWN1cmUgTm9uLWludmFzaXZlIERlYnVnIE1hc2sgKi8KKworI2RlZmluZSBESUJfREFVVEhTVEFUVVNfTlNJRF9Qb3MgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgREFVVEhTVEFUVVM6IE5vbi1zZWN1cmUgSW52YXNpdmUgRGVidWcgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RBVVRIU1RBVFVTX05TSURfTXNrICAgICAgICAgICAoMHgzVUwgLyo8PCBESUJfREFVVEhTVEFUVVNfTlNJRF9Qb3MqLykgICAgICAgIC8qITwgRElCIERBVVRIU1RBVFVTOiBOb24tc2VjdXJlIEludmFzaXZlIERlYnVnIE1hc2sgKi8KKworLyogRERFVkFSQ0gsIFNDUyBEZXZpY2UgQXJjaGl0ZWN0dXJlIFJlZ2lzdGVyIERlZmluaXRpb25zICovCisjZGVmaW5lIERJQl9EREVWQVJDSF9BUkNISVRFQ1RfUG9zICAgICAgICAgMjFVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBEREVWQVJDSDogQXJjaGl0ZWN0IFBvc2l0aW9uICovCisjZGVmaW5lIERJQl9EREVWQVJDSF9BUkNISVRFQ1RfTXNrICAgICAgICAgKDB4N0ZGVUwgPDwgRElCX0RERVZBUkNIX0FSQ0hJVEVDVF9Qb3MgKSAgICAgICAvKiE8IERJQiBEREVWQVJDSDogQXJjaGl0ZWN0IE1hc2sgKi8KKworI2RlZmluZSBESUJfRERFVkFSQ0hfUFJFU0VOVF9Qb3MgICAgICAgICAgIDIwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgRERFVkFSQ0g6IERFVkFSQ0ggUHJlc2VudCBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfRERFVkFSQ0hfUFJFU0VOVF9Nc2sgICAgICAgICAgICgweDFGVUwgPDwgRElCX0RERVZBUkNIX1BSRVNFTlRfUG9zICkgICAgICAgICAgLyohPCBESUIgRERFVkFSQ0g6IERFVkFSQ0ggUHJlc2VudCBNYXNrICovCisKKyNkZWZpbmUgRElCX0RERVZBUkNIX1JFVklTSU9OX1BvcyAgICAgICAgICAxNlUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElCIERERVZBUkNIOiBSZXZpc2lvbiBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfRERFVkFSQ0hfUkVWSVNJT05fTXNrICAgICAgICAgICgweEZVTCA8PCBESUJfRERFVkFSQ0hfUkVWSVNJT05fUG9zICkgICAgICAgICAgLyohPCBESUIgRERFVkFSQ0g6IFJldmlzaW9uIE1hc2sgKi8KKworI2RlZmluZSBESUJfRERFVkFSQ0hfQVJDSFZFUl9Qb3MgICAgICAgICAgIDEyVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgRERFVkFSQ0g6IEFyY2hpdGVjdHVyZSBWZXJzaW9uIFBvc2l0aW9uICovCisjZGVmaW5lIERJQl9EREVWQVJDSF9BUkNIVkVSX01zayAgICAgICAgICAgKDB4RlVMIDw8IERJQl9EREVWQVJDSF9BUkNIVkVSX1BvcyApICAgICAgICAgICAvKiE8IERJQiBEREVWQVJDSDogQXJjaGl0ZWN0dXJlIFZlcnNpb24gTWFzayAqLworCisjZGVmaW5lIERJQl9EREVWQVJDSF9BUkNIUEFSVF9Qb3MgICAgICAgICAgIDBVICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBEREVWQVJDSDogQXJjaGl0ZWN0dXJlIFBhcnQgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RERVZBUkNIX0FSQ0hQQVJUX01zayAgICAgICAgICAoMHhGRkZVTCAvKjw8IERJQl9EREVWQVJDSF9BUkNIUEFSVF9Qb3MqLykgICAgIC8qITwgRElCIERERVZBUkNIOiBBcmNoaXRlY3R1cmUgUGFydCBNYXNrICovCisKKy8qIERERVZUWVBFLCBTQ1MgRGV2aWNlIFR5cGUgUmVnaXN0ZXIgRGVmaW5pdGlvbnMgKi8KKyNkZWZpbmUgRElCX0RERVZUWVBFX1NVQl9Qb3MgICAgICAgICAgICAgICAgNFUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRElCIERERVZUWVBFOiBTdWItdHlwZSBQb3NpdGlvbiAqLworI2RlZmluZSBESUJfRERFVlRZUEVfU1VCX01zayAgICAgICAgICAgICAgICgweEZVTCA8PCBESUJfRERFVlRZUEVfU1VCX1BvcyApICAgICAgICAgICAgICAgLyohPCBESUIgRERFVlRZUEU6IFN1Yi10eXBlIE1hc2sgKi8KKworI2RlZmluZSBESUJfRERFVlRZUEVfTUFKT1JfUG9zICAgICAgICAgICAgICAwVSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgRERFVlRZUEU6IE1ham9yIHR5cGUgUG9zaXRpb24gKi8KKyNkZWZpbmUgRElCX0RERVZUWVBFX01BSk9SX01zayAgICAgICAgICAgICAoMHhGVUwgLyo8PCBESUJfRERFVlRZUEVfTUFKT1JfUG9zKi8pICAgICAgICAgIC8qITwgRElCIERERVZUWVBFOiBNYWpvciB0eXBlIE1hc2sgKi8KKworCisvKkB9IGVuZCBvZiBncm91cCBDTVNJU19ESUIgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2JpdGZpZWxkICAgICBDb3JlIHJlZ2lzdGVyIGJpdCBmaWVsZCBtYWNyb3MKKyAgXGJyaWVmICAgICAgTWFjcm9zIGZvciB1c2Ugd2l0aCBiaXQgZmllbGQgZGVmaW5pdGlvbnMgKHh4eF9Qb3MsIHh4eF9Nc2spLgorICBAeworICovCisKKy8qKgorICBcYnJpZWYgICBNYXNrIGFuZCBzaGlmdCBhIGJpdCBmaWVsZCB2YWx1ZSBmb3IgdXNlIGluIGEgcmVnaXN0ZXIgYml0IHJhbmdlLgorICBccGFyYW1baW5dIGZpZWxkICBOYW1lIG9mIHRoZSByZWdpc3RlciBiaXQgZmllbGQuCisgIFxwYXJhbVtpbl0gdmFsdWUgIFZhbHVlIG9mIHRoZSBiaXQgZmllbGQuIFRoaXMgcGFyYW1ldGVyIGlzIGludGVycHJldGVkIGFzIGFuIHVpbnQzMl90IHR5cGUuCisgIFxyZXR1cm4gICAgICAgICAgIE1hc2tlZCBhbmQgc2hpZnRlZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9WQUwyRkxEKGZpZWxkLCB2YWx1ZSkgICAgKCgodWludDMyX3QpKHZhbHVlKSA8PCBmaWVsZCAjIyBfUG9zKSAmIGZpZWxkICMjIF9Nc2spCisKKy8qKgorICBcYnJpZWYgICAgIE1hc2sgYW5kIHNoaWZ0IGEgcmVnaXN0ZXIgdmFsdWUgdG8gZXh0cmFjdCBhIGJpdCBmaWxlZCB2YWx1ZS4KKyAgXHBhcmFtW2luXSBmaWVsZCAgTmFtZSBvZiB0aGUgcmVnaXN0ZXIgYml0IGZpZWxkLgorICBccGFyYW1baW5dIHZhbHVlICBWYWx1ZSBvZiByZWdpc3Rlci4gVGhpcyBwYXJhbWV0ZXIgaXMgaW50ZXJwcmV0ZWQgYXMgYW4gdWludDMyX3QgdHlwZS4KKyAgXHJldHVybiAgICAgICAgICAgTWFza2VkIGFuZCBzaGlmdGVkIGJpdCBmaWVsZCB2YWx1ZS4KKyovCisjZGVmaW5lIF9GTEQyVkFMKGZpZWxkLCB2YWx1ZSkgICAgKCgodWludDMyX3QpKHZhbHVlKSAmIGZpZWxkICMjIF9Nc2spID4+IGZpZWxkICMjIF9Qb3MpCisKKy8qQH0gZW5kIG9mIGdyb3VwIENNU0lTX2NvcmVfYml0ZmllbGQgKi8KKworCisvKioKKyAgXGluZ3JvdXAgICAgQ01TSVNfY29yZV9yZWdpc3RlcgorICBcZGVmZ3JvdXAgICBDTVNJU19jb3JlX2Jhc2UgICAgIENvcmUgRGVmaW5pdGlvbnMKKyAgXGJyaWVmICAgICAgRGVmaW5pdGlvbnMgZm9yIGJhc2UgYWRkcmVzc2VzLCB1bmlvbnMsIGFuZCBzdHJ1Y3R1cmVzLgorICBAeworICovCisKKy8qIE1lbW9yeSBtYXBwaW5nIG9mIENvcmUgSGFyZHdhcmUgKi8KKyAgI2RlZmluZSBTQ1NfQkFTRSAgICAgICAgICAgICgweEUwMDBFMDAwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c3RlbSBDb250cm9sIFNwYWNlIEJhc2UgQWRkcmVzcyAqLworICAjZGVmaW5lIElUTV9CQVNFICAgICAgICAgICAgKDB4RTAwMDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgSVRNIEJhc2UgQWRkcmVzcyAqLworICAjZGVmaW5lIERXVF9CQVNFICAgICAgICAgICAgKDB4RTAwMDEwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRFdUIEJhc2UgQWRkcmVzcyAqLworICAjZGVmaW5lIFRQSV9CQVNFICAgICAgICAgICAgKDB4RTAwNDAwMDBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgVFBJIEJhc2UgQWRkcmVzcyAqLworICAjZGVmaW5lIENvcmVEZWJ1Z19CQVNFICAgICAgKDB4RTAwMEVERjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgXGRlcHJlY2F0ZWQgQ29yZSBEZWJ1ZyBCYXNlIEFkZHJlc3MgKi8KKyAgI2RlZmluZSBEQ0JfQkFTRSAgICAgICAgICAgICgweEUwMDBFREYwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERDQiBCYXNlIEFkZHJlc3MgKi8KKyAgI2RlZmluZSBESUJfQkFTRSAgICAgICAgICAgICgweEUwMDBFRkIwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IERJQiBCYXNlIEFkZHJlc3MgKi8KKyAgI2RlZmluZSBTeXNUaWNrX0JBU0UgICAgICAgIChTQ1NfQkFTRSArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICovCisgICNkZWZpbmUgTlZJQ19CQVNFICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwMTAwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBOVklDIEJhc2UgQWRkcmVzcyAqLworICAjZGVmaW5lIFNDQl9CQVNFICAgICAgICAgICAgKFNDU19CQVNFICsgIDB4MEQwMFVMKSAgICAgICAgICAgICAgICAgICAgIC8qITwgU3lzdGVtIENvbnRyb2wgQmxvY2sgQmFzZSBBZGRyZXNzICovCisKKyAgI2RlZmluZSBTQ25TQ0IgICAgICAgICAgICAgICgoU0NuU0NCX1R5cGUgICAgKikgICAgIFNDU19CQVNFICAgICAgICAgKSAvKiE8IFN5c3RlbSBjb250cm9sIFJlZ2lzdGVyIG5vdCBpbiBTQ0IgKi8KKyAgI2RlZmluZSBTQ0IgICAgICAgICAgICAgICAgICgoU0NCX1R5cGUgICAgICAgKikgICAgIFNDQl9CQVNFICAgICAgICAgKSAvKiE8IFNDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICAjZGVmaW5lIFN5c1RpY2sgICAgICAgICAgICAgKChTeXNUaWNrX1R5cGUgICAqKSAgICAgU3lzVGlja19CQVNFICAgICApIC8qITwgU3lzVGljayBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICAjZGVmaW5lIE5WSUMgICAgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFICAgICAgICApIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICAjZGVmaW5lIElUTSAgICAgICAgICAgICAgICAgKChJVE1fVHlwZSAgICAgICAqKSAgICAgSVRNX0JBU0UgICAgICAgICApIC8qITwgSVRNIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisgICNkZWZpbmUgRFdUICAgICAgICAgICAgICAgICAoKERXVF9UeXBlICAgICAgICopICAgICBEV1RfQkFTRSAgICAgICAgICkgLyohPCBEV1QgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKyAgI2RlZmluZSBUUEkgICAgICAgICAgICAgICAgICgoVFBJX1R5cGUgICAgICAgKikgICAgIFRQSV9CQVNFICAgICAgICAgKSAvKiE8IFRQSSBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICAjZGVmaW5lIENvcmVEZWJ1ZyAgICAgICAgICAgKChDb3JlRGVidWdfVHlwZSAqKSAgICAgQ29yZURlYnVnX0JBU0UgICApIC8qITwgXGRlcHJlY2F0ZWQgQ29yZSBEZWJ1ZyBjb25maWd1cmF0aW9uIHN0cnVjdCAqLworICAjZGVmaW5lIERDQiAgICAgICAgICAgICAgICAgKChEQ0JfVHlwZSAgICAgICAqKSAgICAgRENCX0JBU0UgICAgICAgICApIC8qITwgRENCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICovCisgICNkZWZpbmUgRElCICAgICAgICAgICAgICAgICAoKERJQl9UeXBlICAgICAgICopICAgICBESUJfQkFTRSAgICAgICAgICkgLyohPCBESUIgY29uZmlndXJhdGlvbiBzdHJ1Y3QgKi8KKworICAjaWYgZGVmaW5lZCAoX19NUFVfUFJFU0VOVCkgJiYgKF9fTVBVX1BSRVNFTlQgPT0gMVUpCisgICAgI2RlZmluZSBNUFVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRDkwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICAgI2RlZmluZSBNUFUgICAgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRSAgICAgICAgICkgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICovCisgICNlbmRpZgorCisgICNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisgICAgI2RlZmluZSBTQVVfQkFTRSAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwREQwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBTZWN1cml0eSBBdHRyaWJ1dGlvbiBVbml0ICovCisgICAgI2RlZmluZSBTQVUgICAgICAgICAgICAgICAoKFNBVV9UeXBlICAgICAgICopICAgICBTQVVfQkFTRSAgICAgICAgICkgLyohPCBTZWN1cml0eSBBdHRyaWJ1dGlvbiBVbml0ICovCisgICNlbmRpZgorCisgICNkZWZpbmUgRlBVX0JBU0UgICAgICAgICAgICAoU0NTX0JBU0UgKyAgMHgwRjMwVUwpICAgICAgICAgICAgICAgICAgICAgLyohPCBGbG9hdGluZyBQb2ludCBVbml0ICovCisgICNkZWZpbmUgRlBVICAgICAgICAgICAgICAgICAoKEZQVV9UeXBlICAgICAgICopICAgICBGUFVfQkFTRSAgICAgICAgICkgLyohPCBGbG9hdGluZyBQb2ludCBVbml0ICovCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisgICNkZWZpbmUgU0NTX0JBU0VfTlMgICAgICAgICAoMHhFMDAyRTAwMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBTcGFjZSBCYXNlIEFkZHJlc3MgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKyAgI2RlZmluZSBDb3JlRGVidWdfQkFTRV9OUyAgICgweEUwMDJFREYwVUwpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiE8IFxkZXByZWNhdGVkIENvcmUgRGVidWcgQmFzZSBBZGRyZXNzICAgICAgICAgICAobm9uLXNlY3VyZSBhZGRyZXNzIHNwYWNlKSAqLworICAjZGVmaW5lIERDQl9CQVNFX05TICAgICAgICAgKDB4RTAwMkVERjBVTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qITwgRENCIEJhc2UgQWRkcmVzcyAgICAgICAgICAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisgICNkZWZpbmUgRElCX0JBU0VfTlMgICAgICAgICAoMHhFMDAyRUZCMFVMKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBESUIgQmFzZSBBZGRyZXNzICAgICAgICAgICAgICAgICAgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKyAgI2RlZmluZSBTeXNUaWNrX0JBU0VfTlMgICAgIChTQ1NfQkFTRV9OUyArICAweDAwMTBVTCkgICAgICAgICAgICAgICAgICAvKiE8IFN5c1RpY2sgQmFzZSBBZGRyZXNzICAgICAgICAgICAgICAobm9uLXNlY3VyZSBhZGRyZXNzIHNwYWNlKSAqLworICAjZGVmaW5lIE5WSUNfQkFTRV9OUyAgICAgICAgKFNDU19CQVNFX05TICsgIDB4MDEwMFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTlZJQyBCYXNlIEFkZHJlc3MgICAgICAgICAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisgICNkZWZpbmUgU0NCX0JBU0VfTlMgICAgICAgICAoU0NTX0JBU0VfTlMgKyAgMHgwRDAwVUwpICAgICAgICAgICAgICAgICAgLyohPCBTeXN0ZW0gQ29udHJvbCBCbG9jayBCYXNlIEFkZHJlc3MgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKworICAjZGVmaW5lIFNDblNDQl9OUyAgICAgICAgICAgKChTQ25TQ0JfVHlwZSAgICAqKSAgICAgU0NTX0JBU0VfTlMgICAgICApIC8qITwgU3lzdGVtIGNvbnRyb2wgUmVnaXN0ZXIgbm90IGluIFNDQihub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisgICNkZWZpbmUgU0NCX05TICAgICAgICAgICAgICAoKFNDQl9UeXBlICAgICAgICopICAgICBTQ0JfQkFTRV9OUyAgICAgICkgLyohPCBTQ0IgY29uZmlndXJhdGlvbiBzdHJ1Y3QgICAgICAgICAgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKyAgI2RlZmluZSBTeXNUaWNrX05TICAgICAgICAgICgoU3lzVGlja19UeXBlICAgKikgICAgIFN5c1RpY2tfQkFTRV9OUyAgKSAvKiE8IFN5c1RpY2sgY29uZmlndXJhdGlvbiBzdHJ1Y3QgICAgICAobm9uLXNlY3VyZSBhZGRyZXNzIHNwYWNlKSAqLworICAjZGVmaW5lIE5WSUNfTlMgICAgICAgICAgICAgKChOVklDX1R5cGUgICAgICAqKSAgICAgTlZJQ19CQVNFX05TICAgICApIC8qITwgTlZJQyBjb25maWd1cmF0aW9uIHN0cnVjdCAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisgICNkZWZpbmUgQ29yZURlYnVnX05TICAgICAgICAoKENvcmVEZWJ1Z19UeXBlICopICAgICBDb3JlRGVidWdfQkFTRV9OUykgLyohPCBcZGVwcmVjYXRlZCBDb3JlIERlYnVnIGNvbmZpZ3VyYXRpb24gc3RydWN0ICAgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKyAgI2RlZmluZSBEQ0JfTlMgICAgICAgICAgICAgICgoRENCX1R5cGUgICAgICAgKikgICAgIERDQl9CQVNFX05TICAgICAgKSAvKiE8IERDQiBjb25maWd1cmF0aW9uIHN0cnVjdCAgICAgICAgICAobm9uLXNlY3VyZSBhZGRyZXNzIHNwYWNlKSAqLworICAjZGVmaW5lIERJQl9OUyAgICAgICAgICAgICAgKChESUJfVHlwZSAgICAgICAqKSAgICAgRElCX0JBU0VfTlMgICAgICApIC8qITwgRElCIGNvbmZpZ3VyYXRpb24gc3RydWN0ICAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisKKyAgI2lmIGRlZmluZWQgKF9fTVBVX1BSRVNFTlQpICYmIChfX01QVV9QUkVTRU5UID09IDFVKQorICAgICNkZWZpbmUgTVBVX0JBU0VfTlMgICAgICAgKFNDU19CQVNFX05TICsgIDB4MEQ5MFVMKSAgICAgICAgICAgICAgICAgIC8qITwgTWVtb3J5IFByb3RlY3Rpb24gVW5pdCAgICAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisgICAgI2RlZmluZSBNUFVfTlMgICAgICAgICAgICAoKE1QVV9UeXBlICAgICAgICopICAgICBNUFVfQkFTRV9OUyAgICAgICkgLyohPCBNZW1vcnkgUHJvdGVjdGlvbiBVbml0ICAgICAgICAgICAgKG5vbi1zZWN1cmUgYWRkcmVzcyBzcGFjZSkgKi8KKyAgI2VuZGlmCisKKyAgI2RlZmluZSBGUFVfQkFTRV9OUyAgICAgICAgIChTQ1NfQkFTRV9OUyArICAweDBGMzBVTCkgICAgICAgICAgICAgICAgICAvKiE8IEZsb2F0aW5nIFBvaW50IFVuaXQgICAgICAgICAgICAgICAobm9uLXNlY3VyZSBhZGRyZXNzIHNwYWNlKSAqLworICAjZGVmaW5lIEZQVV9OUyAgICAgICAgICAgICAgKChGUFVfVHlwZSAgICAgICAqKSAgICAgRlBVX0JBU0VfTlMgICAgICApIC8qITwgRmxvYXRpbmcgUG9pbnQgVW5pdCAgICAgICAgICAgICAgIChub24tc2VjdXJlIGFkZHJlc3Mgc3BhY2UpICovCisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICovCisvKkB9ICovCisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogICAgICAgICAgICAgICAgSGFyZHdhcmUgQWJzdHJhY3Rpb24gTGF5ZXIKKyAgQ29yZSBGdW5jdGlvbiBJbnRlcmZhY2UgY29udGFpbnM6CisgIC0gQ29yZSBOVklDIEZ1bmN0aW9ucworICAtIENvcmUgU3lzVGljayBGdW5jdGlvbnMKKyAgLSBDb3JlIERlYnVnIEZ1bmN0aW9ucworICAtIENvcmUgUmVnaXN0ZXIgQWNjZXNzIEZ1bmN0aW9ucworICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKgorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZSBGdW5jdGlvbnMgYW5kIEluc3RydWN0aW9ucyBSZWZlcmVuY2UKKyovCisKKworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIE5WSUMgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9OVklDRnVuY3Rpb25zIE5WSUMgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBtYW5hZ2UgaW50ZXJydXB0cyBhbmQgZXhjZXB0aW9ucyB2aWEgdGhlIE5WSUMuCisgIEB7CisgKi8KKworI2lmZGVmIENNU0lTX05WSUNfVklSVFVBTAorICAjaWZuZGVmIENNU0lTX05WSUNfVklSVFVBTF9IRUFERVJfRklMRQorICAgICNkZWZpbmUgQ01TSVNfTlZJQ19WSVJUVUFMX0hFQURFUl9GSUxFICJjbXNpc19udmljX3ZpcnR1YWwuaCIKKyAgI2VuZGlmCisgICNpbmNsdWRlIENNU0lTX05WSUNfVklSVFVBTF9IRUFERVJfRklMRQorI2Vsc2UKKyAgI2RlZmluZSBOVklDX1NldFByaW9yaXR5R3JvdXBpbmcgICAgX19OVklDX1NldFByaW9yaXR5R3JvdXBpbmcKKyAgI2RlZmluZSBOVklDX0dldFByaW9yaXR5R3JvdXBpbmcgICAgX19OVklDX0dldFByaW9yaXR5R3JvdXBpbmcKKyAgI2RlZmluZSBOVklDX0VuYWJsZUlSUSAgICAgICAgICAgICAgX19OVklDX0VuYWJsZUlSUQorICAjZGVmaW5lIE5WSUNfR2V0RW5hYmxlSVJRICAgICAgICAgICBfX05WSUNfR2V0RW5hYmxlSVJRCisgICNkZWZpbmUgTlZJQ19EaXNhYmxlSVJRICAgICAgICAgICAgIF9fTlZJQ19EaXNhYmxlSVJRCisgICNkZWZpbmUgTlZJQ19HZXRQZW5kaW5nSVJRICAgICAgICAgIF9fTlZJQ19HZXRQZW5kaW5nSVJRCisgICNkZWZpbmUgTlZJQ19TZXRQZW5kaW5nSVJRICAgICAgICAgIF9fTlZJQ19TZXRQZW5kaW5nSVJRCisgICNkZWZpbmUgTlZJQ19DbGVhclBlbmRpbmdJUlEgICAgICAgIF9fTlZJQ19DbGVhclBlbmRpbmdJUlEKKyAgI2RlZmluZSBOVklDX0dldEFjdGl2ZSAgICAgICAgICAgICAgX19OVklDX0dldEFjdGl2ZQorICAjZGVmaW5lIE5WSUNfU2V0UHJpb3JpdHkgICAgICAgICAgICBfX05WSUNfU2V0UHJpb3JpdHkKKyAgI2RlZmluZSBOVklDX0dldFByaW9yaXR5ICAgICAgICAgICAgX19OVklDX0dldFByaW9yaXR5CisgICNkZWZpbmUgTlZJQ19TeXN0ZW1SZXNldCAgICAgICAgICAgIF9fTlZJQ19TeXN0ZW1SZXNldAorI2VuZGlmIC8qIENNU0lTX05WSUNfVklSVFVBTCAqLworCisjaWZkZWYgQ01TSVNfVkVDVEFCX1ZJUlRVQUwKKyAgI2lmbmRlZiBDTVNJU19WRUNUQUJfVklSVFVBTF9IRUFERVJfRklMRQorICAgICNkZWZpbmUgQ01TSVNfVkVDVEFCX1ZJUlRVQUxfSEVBREVSX0ZJTEUgImNtc2lzX3ZlY3RhYl92aXJ0dWFsLmgiCisgICNlbmRpZgorICAjaW5jbHVkZSBDTVNJU19WRUNUQUJfVklSVFVBTF9IRUFERVJfRklMRQorI2Vsc2UKKyAgI2RlZmluZSBOVklDX1NldFZlY3RvciAgICAgICAgICAgICAgX19OVklDX1NldFZlY3RvcgorICAjZGVmaW5lIE5WSUNfR2V0VmVjdG9yICAgICAgICAgICAgICBfX05WSUNfR2V0VmVjdG9yCisjZW5kaWYgIC8qIChDTVNJU19WRUNUQUJfVklSVFVBTCkgKi8KKworI2RlZmluZSBOVklDX1VTRVJfSVJRX09GRlNFVCAgICAgICAgICAxNgorCisKKy8qIFNwZWNpYWwgTFIgdmFsdWVzIGZvciBTZWN1cmUvTm9uLVNlY3VyZSBjYWxsIGhhbmRsaW5nIGFuZCBleGNlcHRpb24gaGFuZGxpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKy8qIEZ1bmN0aW9uIFJldHVybiBQYXlsb2FkIChmcm9tIEFSTXY4LU0gQXJjaGl0ZWN0dXJlIFJlZmVyZW5jZSBNYW51YWwpIExSIHZhbHVlIG9uIGVudHJ5IGZyb20gU2VjdXJlIEJMWE5TICAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEZOQ19SRVRVUk4gICAgICAgICAgICAgICAgICgweEZFRkZGRkZGVUwpICAgICAvKiBiaXQgWzBdIGlnbm9yZWQgd2hlbiBwcm9jZXNzaW5nIGEgYnJhbmNoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisvKiBUaGUgZm9sbG93aW5nIEVYQ19SRVRVUk4gbWFzayB2YWx1ZXMgYXJlIHVzZWQgdG8gZXZhbHVhdGUgdGhlIExSIG9uIGV4Y2VwdGlvbiBlbnRyeSAqLworI2RlZmluZSBFWENfUkVUVVJOX1BSRUZJWCAgICAgICAgICAoMHhGRjAwMDAwMFVMKSAgICAgLyogYml0cyBbMzE6MjRdIHNldCB0byBpbmRpY2F0ZSBhbiBFWENfUkVUVVJOIHZhbHVlICAgICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgRVhDX1JFVFVSTl9TICAgICAgICAgICAgICAgKDB4MDAwMDAwNDBVTCkgICAgIC8qIGJpdCBbNl0gc3RhY2sgdXNlZCB0byBwdXNoIHJlZ2lzdGVyczogMD1Ob24tc2VjdXJlIDE9U2VjdXJlICAgICAgICAgICovCisjZGVmaW5lIEVYQ19SRVRVUk5fRENSUyAgICAgICAgICAgICgweDAwMDAwMDIwVUwpICAgICAvKiBiaXQgWzVdIHN0YWNraW5nIHJ1bGVzIGZvciBjYWxsZWQgcmVnaXN0ZXJzOiAwPXNraXBwZWQgMT1zYXZlZCAgICAgICAqLworI2RlZmluZSBFWENfUkVUVVJOX0ZUWVBFICAgICAgICAgICAoMHgwMDAwMDAxMFVMKSAgICAgLyogYml0IFs0XSBhbGxvY2F0ZSBzdGFjayBmb3IgZmxvYXRpbmctcG9pbnQgY29udGV4dDogMD1kb25lIDE9c2tpcHBlZCAgKi8KKyNkZWZpbmUgRVhDX1JFVFVSTl9NT0RFICAgICAgICAgICAgKDB4MDAwMDAwMDhVTCkgICAgIC8qIGJpdCBbM10gcHJvY2Vzc29yIG1vZGUgZm9yIHJldHVybjogMD1IYW5kbGVyIG1vZGUgMT1UaHJlYWQgbW9kZSAgICAgICovCisjZGVmaW5lIEVYQ19SRVRVUk5fU1BTRUwgICAgICAgICAgICgweDAwMDAwMDA0VUwpICAgICAvKiBiaXQgWzJdIHN0YWNrIHBvaW50ZXIgdXNlZCB0byByZXN0b3JlIGNvbnRleHQ6IDA9TVNQIDE9UFNQICAgICAgICAgICAqLworI2RlZmluZSBFWENfUkVUVVJOX0VTICAgICAgICAgICAgICAoMHgwMDAwMDAwMVVMKSAgICAgLyogYml0IFswXSBzZWN1cml0eSBzdGF0ZSBleGNlcHRpb24gd2FzIHRha2VuIHRvOiAwPU5vbi1zZWN1cmUgMT1TZWN1cmUgKi8KKworLyogSW50ZWdyaXR5IFNpZ25hdHVyZSAoZnJvbSBBUk12OC1NIEFyY2hpdGVjdHVyZSBSZWZlcmVuY2UgTWFudWFsKSBmb3IgZXhjZXB0aW9uIGNvbnRleHQgc3RhY2tpbmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKyNpZiBkZWZpbmVkIChfX0ZQVV9QUkVTRU5UKSAmJiAoX19GUFVfUFJFU0VOVCA9PSAxVSkgIC8qIFZhbHVlIGZvciBwcm9jZXNzb3JzIHdpdGggZmxvYXRpbmctcG9pbnQgZXh0ZW5zaW9uOiAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIEVYQ19JTlRFR1JJVFlfU0lHTkFUVVJFICAgICAoMHhGRUZBMTI1QVVMKSAgICAgLyogYml0IFswXSBTRlRDIG11c3QgbWF0Y2ggTFIgYml0WzRdIEVYQ19SRVRVUk5fRlRZUEUgICAgICAgICAgICAgICAgICAgKi8KKyNlbHNlCisjZGVmaW5lIEVYQ19JTlRFR1JJVFlfU0lHTkFUVVJFICAgICAoMHhGRUZBMTI1QlVMKSAgICAgLyogVmFsdWUgZm9yIHByb2Nlc3NvcnMgd2l0aG91dCBmbG9hdGluZy1wb2ludCBleHRlbnNpb24gICAgICAgICAgICAgICAgKi8KKyNlbmRpZgorCisKKy8qKgorICBcYnJpZWYgICBTZXQgUHJpb3JpdHkgR3JvdXBpbmcKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgdXNpbmcgdGhlIHJlcXVpcmVkIHVubG9jayBzZXF1ZW5jZS4KKyAgICAgICAgICAgVGhlIHBhcmFtZXRlciBQcmlvcml0eUdyb3VwIGlzIGFzc2lnbmVkIHRvIHRoZSBmaWVsZCBTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZC4KKyAgICAgICAgICAgT25seSB2YWx1ZXMgZnJvbSAwLi43IGFyZSB1c2VkLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpLCB0aGUgc21hbGxlc3QgcG9zc2libGUgcHJpb3JpdHkgZ3JvdXAgaXMgc2V0LgorICBccGFyYW0gW2luXSAgICAgIFByaW9yaXR5R3JvdXAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX05WSUNfU2V0UHJpb3JpdHlHcm91cGluZyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQoreworICB1aW50MzJfdCByZWdfdmFsdWU7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgICAgICAgICAgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisKKyAgcmVnX3ZhbHVlICA9ICBTQ0ItPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8KKyAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7IC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8KKyAgcmVnX3ZhbHVlICA9ICAocmVnX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgIChQcmlvcml0eUdyb3VwVG1wIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICApOyAgICAgICAgICAgICAgLyogSW5zZXJ0IHdyaXRlIGtleSBhbmQgcHJpb3JpdHkgZ3JvdXAgKi8KKyAgU0NCLT5BSVJDUiA9ICByZWdfdmFsdWU7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQcmlvcml0eSBHcm91cGluZworICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgTlZJQyBJbnRlcnJ1cHQgQ29udHJvbGxlci4KKyAgXHJldHVybiAgICAgICAgICAgICAgICBQcmlvcml0eSBncm91cGluZyBmaWVsZCAoU0NCLT5BSVJDUiBbMTA6OF0gUFJJR1JPVVAgZmllbGQpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19OVklDX0dldFByaW9yaXR5R3JvdXBpbmcodm9pZCkKK3sKKyAgcmV0dXJuICgodWludDMyX3QpKChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOworfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgSW50ZXJydXB0CisgIFxkZXRhaWxzIEVuYWJsZXMgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX05WSUNfRW5hYmxlSVJRKElSUW5fVHlwZSBJUlFuKQoreworICBpZiAoKGludDMyX3QpKElSUW4pID49IDApCisgIHsKKyAgICBfX0NPTVBJTEVSX0JBUlJJRVIoKTsKKyAgICBOVklDLT5JU0VSWygoKHVpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKKyAgICBfX0NPTVBJTEVSX0JBUlJJRVIoKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IEVuYWJsZSBzdGF0dXMKKyAgXGRldGFpbHMgUmV0dXJucyBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgZW5hYmxlIHN0YXR1cyBmcm9tIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBpcyBub3QgZW5hYmxlZC4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgaXMgZW5hYmxlZC4KKyAgXG5vdGUgICAgSVJRbiBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTlZJQ19HZXRFbmFibGVJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNFUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX05WSUNfRGlzYWJsZUlSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQy0+SUNFUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7CisgICAgX19EU0IoKTsKKyAgICBfX0lTQigpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBQZW5kaW5nIEludGVycnVwdAorICBcZGV0YWlscyBSZWFkcyB0aGUgTlZJQyBwZW5kaW5nIHJlZ2lzdGVyIGFuZCByZXR1cm5zIHRoZSBwZW5kaW5nIGJpdCBmb3IgdGhlIHNwZWNpZmllZCBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IHBlbmRpbmcuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IHN0YXR1cyBpcyBwZW5kaW5nLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19OVklDX0dldFBlbmRpbmdJUlEoSVJRbl9UeXBlIElSUW4pCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVNQUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0CisgIFxkZXRhaWxzIFNldHMgdGhlIHBlbmRpbmcgYml0IG9mIGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgTlZJQyBwZW5kaW5nIHJlZ2lzdGVyLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBfX05WSUNfU2V0UGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQy0+SVNQUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgUGVuZGluZyBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgQ2xlYXJzIHRoZSBwZW5kaW5nIGJpdCBvZiBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIE5WSUMgcGVuZGluZyByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBEZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlci4KKyAgXG5vdGUgICAgSVJRbiBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHZvaWQgX19OVklDX0NsZWFyUGVuZGluZ0lSUShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQy0+SUNQUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEFjdGl2ZSBJbnRlcnJ1cHQKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgYWN0aXZlIGJpdCBmb3IgdGhlIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgYWN0aXZlLgorICBccmV0dXJuICAgICAgICAgICAgIDEgIEludGVycnVwdCBzdGF0dXMgaXMgYWN0aXZlLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgX19OVklDX0dldEFjdGl2ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDLT5JQUJSWygoKHVpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKDBVKTsKKyAgfQorfQorCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBUYXJnZXQgU3RhdGUKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGludGVycnVwdCB0YXJnZXQgZmllbGQgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIGludGVycnVwdCB0YXJnZXQgYml0IGZvciB0aGUgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBEZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBpZiBpbnRlcnJ1cHQgaXMgYXNzaWduZWQgdG8gU2VjdXJlCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgaWYgaW50ZXJydXB0IGlzIGFzc2lnbmVkIHRvIE5vbiBTZWN1cmUKKyAgXG5vdGUgICAgSVJRbiBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfR2V0VGFyZ2V0U3RhdGUoSVJRbl9UeXBlIElSUW4pCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVROU1soKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IEludGVycnVwdCBUYXJnZXQgU3RhdGUKKyAgXGRldGFpbHMgU2V0cyB0aGUgaW50ZXJydXB0IHRhcmdldCBmaWVsZCBpbiB0aGUgTlZJQyBhbmQgcmV0dXJucyB0aGUgaW50ZXJydXB0IHRhcmdldCBiaXQgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIGlmIGludGVycnVwdCBpcyBhc3NpZ25lZCB0byBTZWN1cmUKKyAgICAgICAgICAgICAgICAgICAgICAxICBpZiBpbnRlcnJ1cHQgaXMgYXNzaWduZWQgdG8gTm9uIFNlY3VyZQorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgTlZJQ19TZXRUYXJnZXRTdGF0ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQy0+SVROU1soKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSB8PSAgKCh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpOworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVROU1soKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgQ2xlYXIgSW50ZXJydXB0IFRhcmdldCBTdGF0ZQorICBcZGV0YWlscyBDbGVhcnMgdGhlIGludGVycnVwdCB0YXJnZXQgZmllbGQgaW4gdGhlIE5WSUMgYW5kIHJldHVybnMgdGhlIGludGVycnVwdCB0YXJnZXQgYml0IGZvciB0aGUgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdC4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBEZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBpZiBpbnRlcnJ1cHQgaXMgYXNzaWduZWQgdG8gU2VjdXJlCisgICAgICAgICAgICAgICAgICAgICAgMSAgaWYgaW50ZXJydXB0IGlzIGFzc2lnbmVkIHRvIE5vbiBTZWN1cmUKKyAgXG5vdGUgICAgSVJRbiBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IE5WSUNfQ2xlYXJUYXJnZXRTdGF0ZShJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQy0+SVROU1soKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmPSB+KCh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpOworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQy0+SVROU1soKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICovCisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkKKyAgXGRldGFpbHMgU2V0cyB0aGUgcHJpb3JpdHkgb2YgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG9yIGEgcHJvY2Vzc29yIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGEgcHJvY2Vzc29yIGV4Y2VwdGlvbi4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccGFyYW0gW2luXSAgcHJpb3JpdHkgIFByaW9yaXR5IHRvIHNldC4KKyAgXG5vdGUgICAgVGhlIHByaW9yaXR5IGNhbm5vdCBiZSBzZXQgZm9yIGV2ZXJ5IHByb2Nlc3NvciBleGNlcHRpb24uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fTlZJQ19TZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbiwgdWludDMyX3QgcHJpb3JpdHkpCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIE5WSUMtPklQUlsoKHVpbnQzMl90KUlSUW4pXSAgICAgICAgICAgICAgID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICBTQ0ItPlNIUFJbKCgodWludDMyX3QpSVJRbikgJiAweEZVTCktNFVMXSA9ICh1aW50OF90KSgocHJpb3JpdHkgPDwgKDhVIC0gX19OVklDX1BSSU9fQklUUykpICYgKHVpbnQzMl90KTB4RkZVTCk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBQcmlvcml0eQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG9yIGEgcHJvY2Vzc29yIGV4Y2VwdGlvbi4KKyAgICAgICAgICAgVGhlIGludGVycnVwdCBudW1iZXIgY2FuIGJlIHBvc2l0aXZlIHRvIHNwZWNpZnkgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0LAorICAgICAgICAgICBvciBuZWdhdGl2ZSB0byBzcGVjaWZ5IGEgcHJvY2Vzc29yIGV4Y2VwdGlvbi4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICBJbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIEludGVycnVwdCBQcmlvcml0eS4KKyAgICAgICAgICAgICAgICAgICAgICBWYWx1ZSBpcyBhbGlnbmVkIGF1dG9tYXRpY2FsbHkgdG8gdGhlIGltcGxlbWVudGVkIHByaW9yaXR5IGJpdHMgb2YgdGhlIG1pY3JvY29udHJvbGxlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTlZJQ19HZXRQcmlvcml0eShJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pID49IDApCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClOVklDLT5JUFJbKCh1aW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KVNDQi0+U0hQUlsoKCh1aW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgRW5jb2RlIFByaW9yaXR5CisgIFxkZXRhaWxzIEVuY29kZXMgdGhlIHByaW9yaXR5IGZvciBhbiBpbnRlcnJ1cHQgd2l0aCB0aGUgZ2l2ZW4gcHJpb3JpdHkgZ3JvdXAsCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUsIGFuZCBzdWJwcmlvcml0eSB2YWx1ZS4KKyAgICAgICAgICAgSW4gY2FzZSBvZiBhIGNvbmZsaWN0IGJldHdlZW4gcHJpb3JpdHkgZ3JvdXBpbmcgYW5kIGF2YWlsYWJsZQorICAgICAgICAgICBwcmlvcml0eSBiaXRzIChfX05WSUNfUFJJT19CSVRTKSwgdGhlIHNtYWxsZXN0IHBvc3NpYmxlIHByaW9yaXR5IGdyb3VwIGlzIHNldC4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbaW5dICAgUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW2luXSAgICAgICBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgICAgICAgICBFbmNvZGVkIHByaW9yaXR5LiBWYWx1ZSBjYW4gYmUgdXNlZCBpbiB0aGUgZnVuY3Rpb24gXHJlZiBOVklDX1NldFByaW9yaXR5KCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBOVklDX0VuY29kZVByaW9yaXR5ICh1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHksIHVpbnQzMl90IFN1YlByaW9yaXR5KQoreworICB1aW50MzJfdCBQcmlvcml0eUdyb3VwVG1wID0gKFByaW9yaXR5R3JvdXAgJiAodWludDMyX3QpMHgwN1VMKTsgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisgIHVpbnQzMl90IFByZWVtcHRQcmlvcml0eUJpdHM7CisgIHVpbnQzMl90IFN1YlByaW9yaXR5Qml0czsKKworICBQcmVlbXB0UHJpb3JpdHlCaXRzID0gKCg3VUwgLSBQcmlvcml0eUdyb3VwVG1wKSA+ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpID8gKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSA6ICh1aW50MzJfdCkoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCk7CisgIFN1YlByaW9yaXR5Qml0cyAgICAgPSAoKFByaW9yaXR5R3JvdXBUbXAgKyAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA8ICh1aW50MzJfdCk3VUwpID8gKHVpbnQzMl90KTBVTCA6ICh1aW50MzJfdCkoKFByaW9yaXR5R3JvdXBUbXAgLSA3VUwpICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSk7CisKKyAgcmV0dXJuICgKKyAgICAgICAgICAgKChQcmVlbXB0UHJpb3JpdHkgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCkpIDw8IFN1YlByaW9yaXR5Qml0cykgfAorICAgICAgICAgICAoKFN1YlByaW9yaXR5ICAgICAmICh1aW50MzJfdCkoKDFVTCA8PCAoU3ViUHJpb3JpdHlCaXRzICAgICkpIC0gMVVMKSkpCisgICAgICAgICApOworfQorCisKKy8qKgorICBcYnJpZWYgICBEZWNvZGUgUHJpb3JpdHkKKyAgXGRldGFpbHMgRGVjb2RlcyBhbiBpbnRlcnJ1cHQgcHJpb3JpdHkgdmFsdWUgd2l0aCBhIGdpdmVuIHByaW9yaXR5IGdyb3VwIHRvCisgICAgICAgICAgIHByZWVtcHRpdmUgcHJpb3JpdHkgdmFsdWUgYW5kIHN1YnByaW9yaXR5IHZhbHVlLgorICAgICAgICAgICBJbiBjYXNlIG9mIGEgY29uZmxpY3QgYmV0d2VlbiBwcmlvcml0eSBncm91cGluZyBhbmQgYXZhaWxhYmxlCisgICAgICAgICAgIHByaW9yaXR5IGJpdHMgKF9fTlZJQ19QUklPX0JJVFMpIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgICAgUHJpb3JpdHkgICBQcmlvcml0eSB2YWx1ZSwgd2hpY2ggY2FuIGJlIHJldHJpZXZlZCB3aXRoIHRoZSBmdW5jdGlvbiBccmVmIE5WSUNfR2V0UHJpb3JpdHkoKS4KKyAgXHBhcmFtIFtpbl0gICAgIFByaW9yaXR5R3JvdXAgIFVzZWQgcHJpb3JpdHkgZ3JvdXAuCisgIFxwYXJhbSBbb3V0XSBwUHJlZW1wdFByaW9yaXR5ICBQcmVlbXB0aXZlIHByaW9yaXR5IHZhbHVlIChzdGFydGluZyBmcm9tIDApLgorICBccGFyYW0gW291dF0gICAgIHBTdWJQcmlvcml0eSAgU3VicHJpb3JpdHkgdmFsdWUgKHN0YXJ0aW5nIGZyb20gMCkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIE5WSUNfRGVjb2RlUHJpb3JpdHkgKHVpbnQzMl90IFByaW9yaXR5LCB1aW50MzJfdCBQcmlvcml0eUdyb3VwLCB1aW50MzJfdCogY29uc3QgcFByZWVtcHRQcmlvcml0eSwgdWludDMyX3QqIGNvbnN0IHBTdWJQcmlvcml0eSkKK3sKKyAgdWludDMyX3QgUHJpb3JpdHlHcm91cFRtcCA9IChQcmlvcml0eUdyb3VwICYgKHVpbnQzMl90KTB4MDdVTCk7ICAgLyogb25seSB2YWx1ZXMgMC4uNyBhcmUgdXNlZCAgICAgICAgICAqLworICB1aW50MzJfdCBQcmVlbXB0UHJpb3JpdHlCaXRzOworICB1aW50MzJfdCBTdWJQcmlvcml0eUJpdHM7CisKKyAgUHJlZW1wdFByaW9yaXR5Qml0cyA9ICgoN1VMIC0gUHJpb3JpdHlHcm91cFRtcCkgPiAodWludDMyX3QpKF9fTlZJQ19QUklPX0JJVFMpKSA/ICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykgOiAodWludDMyX3QpKDdVTCAtIFByaW9yaXR5R3JvdXBUbXApOworICBTdWJQcmlvcml0eUJpdHMgICAgID0gKChQcmlvcml0eUdyb3VwVG1wICsgKHVpbnQzMl90KShfX05WSUNfUFJJT19CSVRTKSkgPCAodWludDMyX3QpN1VMKSA/ICh1aW50MzJfdCkwVUwgOiAodWludDMyX3QpKChQcmlvcml0eUdyb3VwVG1wIC0gN1VMKSArICh1aW50MzJfdCkoX19OVklDX1BSSU9fQklUUykpOworCisgICpwUHJlZW1wdFByaW9yaXR5ID0gKFByaW9yaXR5ID4+IFN1YlByaW9yaXR5Qml0cykgJiAodWludDMyX3QpKCgxVUwgPDwgKFByZWVtcHRQcmlvcml0eUJpdHMpKSAtIDFVTCk7CisgICpwU3ViUHJpb3JpdHkgICAgID0gKFByaW9yaXR5ICAgICAgICAgICAgICAgICAgICkgJiAodWludDMyX3QpKCgxVUwgPDwgKFN1YlByaW9yaXR5Qml0cyAgICApKSAtIDFVTCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgVmVjdG9yCisgIFxkZXRhaWxzIFNldHMgYW4gaW50ZXJydXB0IHZlY3RvciBpbiBTUkFNIGJhc2VkIGludGVycnVwdCB2ZWN0b3IgdGFibGUuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhIHByb2Nlc3NvciBleGNlcHRpb24uCisgICAgICAgICAgIFZUT1IgbXVzdCBiZWVuIHJlbG9jYXRlZCB0byBTUkFNIGJlZm9yZS4KKyAgXHBhcmFtIFtpbl0gICBJUlFuICAgICAgSW50ZXJydXB0IG51bWJlcgorICBccGFyYW0gW2luXSAgIHZlY3RvciAgICBBZGRyZXNzIG9mIGludGVycnVwdCBoYW5kbGVyIGZ1bmN0aW9uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIF9fTlZJQ19TZXRWZWN0b3IoSVJRbl9UeXBlIElSUW4sIHVpbnQzMl90IHZlY3RvcikKK3sKKyAgdWludDMyX3QgKnZlY3RvcnMgPSAodWludDMyX3QgKilTQ0ItPlZUT1I7CisgIHZlY3RvcnNbKGludDMyX3QpSVJRbiArIE5WSUNfVVNFUl9JUlFfT0ZGU0VUXSA9IHZlY3RvcjsKKyAgX19EU0IoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBWZWN0b3IKKyAgXGRldGFpbHMgUmVhZHMgYW4gaW50ZXJydXB0IHZlY3RvciBmcm9tIGludGVycnVwdCB2ZWN0b3IgdGFibGUuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhIHByb2Nlc3NvciBleGNlcHRpb24uCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgICAgIEludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgICAgIEFkZHJlc3Mgb2YgaW50ZXJydXB0IGhhbmRsZXIgZnVuY3Rpb24KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IF9fTlZJQ19HZXRWZWN0b3IoSVJRbl9UeXBlIElSUW4pCit7CisgIHVpbnQzMl90ICp2ZWN0b3JzID0gKHVpbnQzMl90ICopU0NCLT5WVE9SOworICByZXR1cm4gdmVjdG9yc1soaW50MzJfdClJUlFuICsgTlZJQ19VU0VSX0lSUV9PRkZTRVRdOworfQorCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gUmVzZXQKKyAgXGRldGFpbHMgSW5pdGlhdGVzIGEgc3lzdGVtIHJlc2V0IHJlcXVlc3QgdG8gcmVzZXQgdGhlIE1DVS4KKyAqLworX19OT19SRVRVUk4gX19TVEFUSUNfSU5MSU5FIHZvaWQgX19OVklDX1N5c3RlbVJlc2V0KHZvaWQpCit7CisgIF9fRFNCKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEVuc3VyZSBhbGwgb3V0c3RhbmRpbmcgbWVtb3J5IGFjY2Vzc2VzIGluY2x1ZGVkCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZmZlcmVkIHdyaXRlIGFyZSBjb21wbGV0ZWQgYmVmb3JlIHJlc2V0ICovCisgIFNDQi0+QUlSQ1IgID0gKHVpbnQzMl90KSgoMHg1RkFVTCA8PCBTQ0JfQUlSQ1JfVkVDVEtFWV9Qb3MpICAgIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIChTQ0ItPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgfAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDQl9BSVJDUl9TWVNSRVNFVFJFUV9Nc2sgICAgKTsgICAgICAgICAvKiBLZWVwIHByaW9yaXR5IGdyb3VwIHVuY2hhbmdlZCAqLworICBfX0RTQigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnN1cmUgY29tcGxldGlvbiBvZiBtZW1vcnkgYWNjZXNzICovCisKKyAgZm9yKDs7KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogd2FpdCB1bnRpbCByZXNldCAqLworICB7CisgICAgX19OT1AoKTsKKyAgfQorfQorCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIFNldCBQcmlvcml0eSBHcm91cGluZyAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgU2V0cyB0aGUgbm9uLXNlY3VyZSBwcmlvcml0eSBncm91cGluZyBmaWVsZCB3aGVuIGluIHNlY3VyZSBzdGF0ZSB1c2luZyB0aGUgcmVxdWlyZWQgdW5sb2NrIHNlcXVlbmNlLgorICAgICAgICAgICBUaGUgcGFyYW1ldGVyIFByaW9yaXR5R3JvdXAgaXMgYXNzaWduZWQgdG8gdGhlIGZpZWxkIFNDQi0+QUlSQ1IgWzEwOjhdIFBSSUdST1VQIGZpZWxkLgorICAgICAgICAgICBPbmx5IHZhbHVlcyBmcm9tIDAuLjcgYXJlIHVzZWQuCisgICAgICAgICAgIEluIGNhc2Ugb2YgYSBjb25mbGljdCBiZXR3ZWVuIHByaW9yaXR5IGdyb3VwaW5nIGFuZCBhdmFpbGFibGUKKyAgICAgICAgICAgcHJpb3JpdHkgYml0cyAoX19OVklDX1BSSU9fQklUUyksIHRoZSBzbWFsbGVzdCBwb3NzaWJsZSBwcmlvcml0eSBncm91cCBpcyBzZXQuCisgIFxwYXJhbSBbaW5dICAgICAgUHJpb3JpdHlHcm91cCAgUHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX05WSUNfU2V0UHJpb3JpdHlHcm91cGluZ19OUyh1aW50MzJfdCBQcmlvcml0eUdyb3VwKQoreworICB1aW50MzJfdCByZWdfdmFsdWU7CisgIHVpbnQzMl90IFByaW9yaXR5R3JvdXBUbXAgPSAoUHJpb3JpdHlHcm91cCAmICh1aW50MzJfdCkweDA3VUwpOyAgICAgICAgICAgICAvKiBvbmx5IHZhbHVlcyAwLi43IGFyZSB1c2VkICAgICAgICAgICovCisKKyAgcmVnX3ZhbHVlICA9ICBTQ0JfTlMtPkFJUkNSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHJlYWQgb2xkIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gICAgKi8KKyAgcmVnX3ZhbHVlICY9IH4oKHVpbnQzMl90KShTQ0JfQUlSQ1JfVkVDVEtFWV9Nc2sgfCBTQ0JfQUlSQ1JfUFJJR1JPVVBfTXNrKSk7ICAgICAgICAgICAgIC8qIGNsZWFyIGJpdHMgdG8gY2hhbmdlICAgICAgICAgICAgICAgKi8KKyAgcmVnX3ZhbHVlICA9ICAocmVnX3ZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICAgICAgKCh1aW50MzJfdCkweDVGQVVMIDw8IFNDQl9BSVJDUl9WRUNUS0VZX1BvcykgfAorICAgICAgICAgICAgICAgIChQcmlvcml0eUdyb3VwVG1wIDw8IFNDQl9BSVJDUl9QUklHUk9VUF9Qb3MpICAgICAgICAgICAgICAgICAgICAgICk7ICAgICAgICAgICAgICAvKiBJbnNlcnQgd3JpdGUga2V5IGFuZCBwcmlvcml0eSBncm91cCAqLworICBTQ0JfTlMtPkFJUkNSID0gIHJlZ192YWx1ZTsKK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFByaW9yaXR5IEdyb3VwaW5nIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgZ3JvdXBpbmcgZmllbGQgZnJvbSB0aGUgbm9uLXNlY3VyZSBOVklDIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgICAgIFByaW9yaXR5IGdyb3VwaW5nIGZpZWxkIChTQ0ItPkFJUkNSIFsxMDo4XSBQUklHUk9VUCBmaWVsZCkuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUWl9OVklDX0dldFByaW9yaXR5R3JvdXBpbmdfTlModm9pZCkKK3sKKyAgcmV0dXJuICgodWludDMyX3QpKChTQ0JfTlMtPkFJUkNSICYgU0NCX0FJUkNSX1BSSUdST1VQX01zaykgPj4gU0NCX0FJUkNSX1BSSUdST1VQX1BvcykpOworfQorCisKKy8qKgorICBcYnJpZWYgICBFbmFibGUgSW50ZXJydXB0IChub24tc2VjdXJlKQorICBcZGV0YWlscyBFbmFibGVzIGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgbm9uLXNlY3VyZSBOVklDIGludGVycnVwdCBjb250cm9sbGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUWl9OVklDX0VuYWJsZUlSUV9OUyhJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQ19OUy0+SVNFUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IEludGVycnVwdCBFbmFibGUgc3RhdHVzIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZXR1cm5zIGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBlbmFibGUgc3RhdHVzIGZyb20gdGhlIG5vbi1zZWN1cmUgTlZJQyBpbnRlcnJ1cHQgY29udHJvbGxlciB3aGVuIGluIHNlY3VyZSBzdGF0ZS4KKyAgXHBhcmFtIFtpbl0gICAgICBJUlFuICBEZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICAwICBJbnRlcnJ1cHQgaXMgbm90IGVuYWJsZWQuCisgIFxyZXR1cm4gICAgICAgICAgICAgMSAgSW50ZXJydXB0IGlzIGVuYWJsZWQuCisgIFxub3RlICAgIElSUW4gbXVzdCBub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUWl9OVklDX0dldEVuYWJsZUlSUV9OUyhJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgcmV0dXJuKCh1aW50MzJfdCkoKChOVklDX05TLT5JU0VSWygoKHVpbnQzMl90KUlSUW4pID4+IDVVTCldICYgKDFVTCA8PCAoKCh1aW50MzJfdClJUlFuKSAmIDB4MUZVTCkpKSAhPSAwVUwpID8gMVVMIDogMFVMKSk7CisgIH0KKyAgZWxzZQorICB7CisgICAgcmV0dXJuKDBVKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBEaXNhYmxlIEludGVycnVwdCAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgRGlzYWJsZXMgYSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IGluIHRoZSBub24tc2VjdXJlIE5WSUMgaW50ZXJydXB0IGNvbnRyb2xsZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBudW1iZXIuCisgIFxub3RlICAgIElSUW4gbXVzdCBub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX05WSUNfRGlzYWJsZUlSUV9OUyhJUlFuX1R5cGUgSVJRbikKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQ19OUy0+SUNFUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSA9ICh1aW50MzJfdCkoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgR2V0IFBlbmRpbmcgSW50ZXJydXB0IChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZWFkcyB0aGUgTlZJQyBwZW5kaW5nIHJlZ2lzdGVyIGluIHRoZSBub24tc2VjdXJlIE5WSUMgd2hlbiBpbiBzZWN1cmUgc3RhdGUgYW5kIHJldHVybnMgdGhlIHBlbmRpbmcgYml0IGZvciB0aGUgc3BlY2lmaWVkIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBudW1iZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgMCAgSW50ZXJydXB0IHN0YXR1cyBpcyBub3QgcGVuZGluZy4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIHBlbmRpbmcuCisgIFxub3RlICAgIElSUW4gbXVzdCBub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBUWl9OVklDX0dldFBlbmRpbmdJUlFfTlMoSVJRbl9UeXBlIElSUW4pCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIHJldHVybigodWludDMyX3QpKCgoTlZJQ19OUy0+SVNQUlsoKCh1aW50MzJfdClJUlFuKSA+PiA1VUwpXSAmICgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKSkgIT0gMFVMKSA/IDFVTCA6IDBVTCkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigwVSk7CisgIH0KK30KKworCisvKioKKyAgXGJyaWVmICAgU2V0IFBlbmRpbmcgSW50ZXJydXB0IChub24tc2VjdXJlKQorICBcZGV0YWlscyBTZXRzIHRoZSBwZW5kaW5nIGJpdCBvZiBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgaW4gdGhlIG5vbi1zZWN1cmUgTlZJQyBwZW5kaW5nIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBcbm90ZSAgICBJUlFuIG11c3Qgbm90IGJlIG5lZ2F0aXZlLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUWl9OVklDX1NldFBlbmRpbmdJUlFfTlMoSVJRbl9UeXBlIElSUW4pCit7CisgIGlmICgoaW50MzJfdCkoSVJRbikgPj0gMCkKKyAgeworICAgIE5WSUNfTlMtPklTUFJbKCgodWludDMyX3QpSVJRbikgPj4gNVVMKV0gPSAodWludDMyX3QpKDFVTCA8PCAoKCh1aW50MzJfdClJUlFuKSAmIDB4MUZVTCkpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIENsZWFyIFBlbmRpbmcgSW50ZXJydXB0IChub24tc2VjdXJlKQorICBcZGV0YWlscyBDbGVhcnMgdGhlIHBlbmRpbmcgYml0IG9mIGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBpbiB0aGUgbm9uLXNlY3VyZSBOVklDIHBlbmRpbmcgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICAgICAgSVJRbiAgRGV2aWNlIHNwZWNpZmljIGludGVycnVwdCBudW1iZXIuCisgIFxub3RlICAgIElSUW4gbXVzdCBub3QgYmUgbmVnYXRpdmUuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX05WSUNfQ2xlYXJQZW5kaW5nSVJRX05TKElSUW5fVHlwZSBJUlFuKQoreworICBpZiAoKGludDMyX3QpKElSUW4pID49IDApCisgIHsKKyAgICBOVklDX05TLT5JQ1BSWygoKHVpbnQzMl90KUlSUW4pID4+IDVVTCldID0gKHVpbnQzMl90KSgxVUwgPDwgKCgodWludDMyX3QpSVJRbikgJiAweDFGVUwpKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgQWN0aXZlIEludGVycnVwdCAobm9uLXNlY3VyZSkKKyAgXGRldGFpbHMgUmVhZHMgdGhlIGFjdGl2ZSByZWdpc3RlciBpbiBub24tc2VjdXJlIE5WSUMgd2hlbiBpbiBzZWN1cmUgc3RhdGUgYW5kIHJldHVybnMgdGhlIGFjdGl2ZSBiaXQgZm9yIHRoZSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0LgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIERldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgbnVtYmVyLgorICBccmV0dXJuICAgICAgICAgICAgIDAgIEludGVycnVwdCBzdGF0dXMgaXMgbm90IGFjdGl2ZS4KKyAgXHJldHVybiAgICAgICAgICAgICAxICBJbnRlcnJ1cHQgc3RhdHVzIGlzIGFjdGl2ZS4KKyAgXG5vdGUgICAgSVJRbiBtdXN0IG5vdCBiZSBuZWdhdGl2ZS4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRaX05WSUNfR2V0QWN0aXZlX05TKElSUW5fVHlwZSBJUlFuKQoreworICBpZiAoKGludDMyX3QpKElSUW4pID49IDApCisgIHsKKyAgICByZXR1cm4oKHVpbnQzMl90KSgoKE5WSUNfTlMtPklBQlJbKCgodWludDMyX3QpSVJRbikgPj4gNVVMKV0gJiAoMVVMIDw8ICgoKHVpbnQzMl90KUlSUW4pICYgMHgxRlVMKSkpICE9IDBVTCkgPyAxVUwgOiAwVUwpKTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4oMFUpOworICB9Cit9CisKKworLyoqCisgIFxicmllZiAgIFNldCBJbnRlcnJ1cHQgUHJpb3JpdHkgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFNldHMgdGhlIHByaW9yaXR5IG9mIGEgbm9uLXNlY3VyZSBkZXZpY2Ugc3BlY2lmaWMgaW50ZXJydXB0IG9yIGEgbm9uLXNlY3VyZSBwcm9jZXNzb3IgZXhjZXB0aW9uIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICAgICAgICAgICBUaGUgaW50ZXJydXB0IG51bWJlciBjYW4gYmUgcG9zaXRpdmUgdG8gc3BlY2lmeSBhIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQsCisgICAgICAgICAgIG9yIG5lZ2F0aXZlIHRvIHNwZWNpZnkgYSBwcm9jZXNzb3IgZXhjZXB0aW9uLgorICBccGFyYW0gW2luXSAgICAgIElSUW4gIEludGVycnVwdCBudW1iZXIuCisgIFxwYXJhbSBbaW5dICBwcmlvcml0eSAgUHJpb3JpdHkgdG8gc2V0LgorICBcbm90ZSAgICBUaGUgcHJpb3JpdHkgY2Fubm90IGJlIHNldCBmb3IgZXZlcnkgbm9uLXNlY3VyZSBwcm9jZXNzb3IgZXhjZXB0aW9uLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUWl9OVklDX1NldFByaW9yaXR5X05TKElSUW5fVHlwZSBJUlFuLCB1aW50MzJfdCBwcmlvcml0eSkKK3sKKyAgaWYgKChpbnQzMl90KShJUlFuKSA+PSAwKQorICB7CisgICAgTlZJQ19OUy0+SVBSWygodWludDMyX3QpSVJRbildICAgICAgICAgICAgICAgPSAodWludDhfdCkoKHByaW9yaXR5IDw8ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSAmICh1aW50MzJfdCkweEZGVUwpOworICB9CisgIGVsc2UKKyAgeworICAgIFNDQl9OUy0+U0hQUlsoKCh1aW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID0gKHVpbnQ4X3QpKChwcmlvcml0eSA8PCAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkgJiAodWludDMyX3QpMHhGRlVMKTsKKyAgfQorfQorCisKKy8qKgorICBcYnJpZWYgICBHZXQgSW50ZXJydXB0IFByaW9yaXR5IChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZWFkcyB0aGUgcHJpb3JpdHkgb2YgYSBub24tc2VjdXJlIGRldmljZSBzcGVjaWZpYyBpbnRlcnJ1cHQgb3IgYSBub24tc2VjdXJlIHByb2Nlc3NvciBleGNlcHRpb24gd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgICAgICAgICAgIFRoZSBpbnRlcnJ1cHQgbnVtYmVyIGNhbiBiZSBwb3NpdGl2ZSB0byBzcGVjaWZ5IGEgZGV2aWNlIHNwZWNpZmljIGludGVycnVwdCwKKyAgICAgICAgICAgb3IgbmVnYXRpdmUgdG8gc3BlY2lmeSBhIHByb2Nlc3NvciBleGNlcHRpb24uCisgIFxwYXJhbSBbaW5dICAgSVJRbiAgSW50ZXJydXB0IG51bWJlci4KKyAgXHJldHVybiAgICAgICAgICAgICBJbnRlcnJ1cHQgUHJpb3JpdHkuIFZhbHVlIGlzIGFsaWduZWQgYXV0b21hdGljYWxseSB0byB0aGUgaW1wbGVtZW50ZWQgcHJpb3JpdHkgYml0cyBvZiB0aGUgbWljcm9jb250cm9sbGVyLgorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVFpfTlZJQ19HZXRQcmlvcml0eV9OUyhJUlFuX1R5cGUgSVJRbikKK3sKKworICBpZiAoKGludDMyX3QpKElSUW4pID49IDApCisgIHsKKyAgICByZXR1cm4oKCh1aW50MzJfdClOVklDX05TLT5JUFJbKCh1aW50MzJfdClJUlFuKV0gICAgICAgICAgICAgICA+PiAoOFUgLSBfX05WSUNfUFJJT19CSVRTKSkpOworICB9CisgIGVsc2UKKyAgeworICAgIHJldHVybigoKHVpbnQzMl90KVNDQl9OUy0+U0hQUlsoKCh1aW50MzJfdClJUlFuKSAmIDB4RlVMKS00VUxdID4+ICg4VSAtIF9fTlZJQ19QUklPX0JJVFMpKSk7CisgIH0KK30KKyNlbmRpZiAvKiAgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJihfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICovCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfTlZJQ0Z1bmN0aW9ucyAqLworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgTVBVIGZ1bmN0aW9ucyAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICovCisKKyNpZiBkZWZpbmVkIChfX01QVV9QUkVTRU5UKSAmJiAoX19NUFVfUFJFU0VOVCA9PSAxVSkKKworI2luY2x1ZGUgIm1wdV9hcm12OC5oIgorCisjZW5kaWYKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIFBNVSBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworCisjaWYgZGVmaW5lZCAoX19QTVVfUFJFU0VOVCkgJiYgKF9fUE1VX1BSRVNFTlQgPT0gMVUpCisKKyNpbmNsdWRlICJwbXVfYXJtdjguaCIKKworI2VuZGlmCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBGUFUgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9GcHVGdW5jdGlvbnMgRlBVIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBGUFUgdHlwZS4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgZ2V0IEZQVSB0eXBlCisgIFxkZXRhaWxzIHJldHVybnMgdGhlIEZQVSB0eXBlCisgIFxyZXR1cm5zCisgICAtIFxiICAwOiBObyBGUFUKKyAgIC0gXGIgIDE6IFNpbmdsZSBwcmVjaXNpb24gRlBVCisgICAtIFxiICAyOiBEb3VibGUgKyBTaW5nbGUgcHJlY2lzaW9uIEZQVQorICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgU0NCX0dldEZQVVR5cGUodm9pZCkKK3sKKyAgdWludDMyX3QgbXZmcjA7CisKKyAgbXZmcjAgPSBGUFUtPk1WRlIwOworICBpZiAgICAgICgobXZmcjAgJiAoRlBVX01WRlIwX0ZQU1BfTXNrIHwgRlBVX01WRlIwX0ZQRFBfTXNrKSkgPT0gMHgyMjBVKQorICB7CisgICAgcmV0dXJuIDJVOyAgICAgICAgICAgLyogRG91YmxlICsgU2luZ2xlIHByZWNpc2lvbiBGUFUgKi8KKyAgfQorICBlbHNlIGlmICgobXZmcjAgJiAoRlBVX01WRlIwX0ZQU1BfTXNrIHwgRlBVX01WRlIwX0ZQRFBfTXNrKSkgPT0gMHgwMjBVKQorICB7CisgICAgcmV0dXJuIDFVOyAgICAgICAgICAgLyogU2luZ2xlIHByZWNpc2lvbiBGUFUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gMFU7ICAgICAgICAgICAvKiBObyBGUFUgKi8KKyAgfQorfQorCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfRnB1RnVuY3Rpb25zICovCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBNVkUgZnVuY3Rpb25zICAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9NdmVGdW5jdGlvbnMgTVZFIEZ1bmN0aW9ucworICBcYnJpZWYgICAgRnVuY3Rpb24gdGhhdCBwcm92aWRlcyBNVkUgdHlwZS4KKyAgQHsKKyAqLworCisvKioKKyAgXGJyaWVmICAgZ2V0IE1WRSB0eXBlCisgIFxkZXRhaWxzIHJldHVybnMgdGhlIE1WRSB0eXBlCisgIFxyZXR1cm5zCisgICAtIFxiICAwOiBObyBWZWN0b3IgRXh0ZW5zaW9uIChNVkUpCisgICAtIFxiICAxOiBJbnRlZ2VyIFZlY3RvciBFeHRlbnNpb24gKE1WRS1JKQorICAgLSBcYiAgMjogRmxvYXRpbmctcG9pbnQgVmVjdG9yIEV4dGVuc2lvbiAoTVZFLUYpCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBTQ0JfR2V0TVZFVHlwZSh2b2lkKQoreworICBjb25zdCB1aW50MzJfdCBtdmZyMSA9IEZQVS0+TVZGUjE7CisgIGlmICAgICAgKChtdmZyMSAmIEZQVV9NVkZSMV9NVkVfTXNrKSA9PSAoMHgyVSA8PCBGUFVfTVZGUjFfTVZFX1BvcykpCisgIHsKKyAgICByZXR1cm4gMlU7CisgIH0KKyAgZWxzZSBpZiAoKG12ZnIxICYgRlBVX01WRlIxX01WRV9Nc2spID09ICgweDFVIDw8IEZQVV9NVkZSMV9NVkVfUG9zKSkKKyAgeworICAgIHJldHVybiAxVTsKKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gMFU7CisgIH0KK30KKworCisvKkB9IGVuZCBvZiBDTVNJU19Db3JlX012ZUZ1bmN0aW9ucyAqLworCisvKiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIFNBVSBmdW5jdGlvbnMgICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19Db3JlX1NBVUZ1bmN0aW9ucyBTQVUgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFNBVS4KKyAgQHsKKyAqLworCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorCisvKioKKyAgXGJyaWVmICAgRW5hYmxlIFNBVQorICBcZGV0YWlscyBFbmFibGVzIHRoZSBTZWN1cml0eSBBdHRyaWJ1dGlvbiBVbml0IChTQVUpLgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUWl9TQVVfRW5hYmxlKHZvaWQpCit7CisgICAgU0FVLT5DVFJMIHw9ICAoU0FVX0NUUkxfRU5BQkxFX01zayk7Cit9CisKKworCisvKioKKyAgXGJyaWVmICAgRGlzYWJsZSBTQVUKKyAgXGRldGFpbHMgRGlzYWJsZXMgdGhlIFNlY3VyaXR5IEF0dHJpYnV0aW9uIFVuaXQgKFNBVSkuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX1NBVV9EaXNhYmxlKHZvaWQpCit7CisgICAgU0FVLT5DVFJMICY9IH4oU0FVX0NUUkxfRU5BQkxFX01zayk7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICovCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU0FVRnVuY3Rpb25zICovCisKKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgRGVidWcgQ29udHJvbCBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9EQ0JGdW5jdGlvbnMgRGVidWcgQ29udHJvbCBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgRGVidWcgQ29udHJvbCBCbG9jay4KKyAgQHsKKyAqLworCisKKy8qKgorICBcYnJpZWYgICBTZXQgRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCBSZWdpc3RlcgorICBcZGV0YWlscyB3cml0ZXMgdG8gRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCByZWdpc3Rlci4KKyAgXHBhcmFtIFtpbl0gIHZhbHVlICB2YWx1ZSB0byBiZSB3cml0ZW4uCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIERDQl9TZXRBdXRoQ3RybCh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICAgRENCLT5EQVVUSENUUkwgPSB2YWx1ZTsKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBDb250cm9sIFJlZ2lzdGVyCisgIFxkZXRhaWxzIFJlYWRzIERlYnVnIEF1dGhlbnRpY2F0aW9uIENvbnRyb2wgcmVnaXN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAgICAgRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCBSZWdpc3Rlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IERDQl9HZXRBdXRoQ3RybCh2b2lkKQoreworICAgIHJldHVybiAoRENCLT5EQVVUSENUUkwpOworfQorCisKKyNpZiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpCisvKioKKyAgXGJyaWVmICAgU2V0IERlYnVnIEF1dGhlbnRpY2F0aW9uIENvbnRyb2wgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIHdyaXRlcyB0byBub24tc2VjdXJlIERlYnVnIEF1dGhlbnRpY2F0aW9uIENvbnRyb2wgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxwYXJhbSBbaW5dICB2YWx1ZSAgdmFsdWUgdG8gYmUgd3JpdGVuCisgKi8KK19fU1RBVElDX0lOTElORSB2b2lkIFRaX0RDQl9TZXRBdXRoQ3RybF9OUyh1aW50MzJfdCB2YWx1ZSkKK3sKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7CisgICAgRENCX05TLT5EQVVUSENUUkwgPSB2YWx1ZTsKKyAgICBfX0RTQigpOworICAgIF9fSVNCKCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIEdldCBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBDb250cm9sIFJlZ2lzdGVyIChub24tc2VjdXJlKQorICBcZGV0YWlscyBSZWFkcyBub24tc2VjdXJlIERlYnVnIEF1dGhlbnRpY2F0aW9uIENvbnRyb2wgcmVnaXN0ZXIgd2hlbiBpbiBzZWN1cmUgc3RhdGUuCisgIFxyZXR1cm4gICAgICAgICAgICAgRGVidWcgQXV0aGVudGljYXRpb24gQ29udHJvbCBSZWdpc3Rlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRaX0RDQl9HZXRBdXRoQ3RybF9OUyh2b2lkKQoreworICAgIHJldHVybiAoRENCX05TLT5EQVVUSENUUkwpOworfQorI2VuZGlmIC8qIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgKi8KKworLypAfSBlbmQgb2YgQ01TSVNfQ29yZV9EQ0JGdW5jdGlvbnMgKi8KKworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgICBEZWJ1ZyBJZGVudGlmaWNhdGlvbiBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9ESUJGdW5jdGlvbnMgRGVidWcgSWRlbnRpZmljYXRpb24gRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBhY2Nlc3MgdGhlIERlYnVnIElkZW50aWZpY2F0aW9uIEJsb2NrLgorICBAeworICovCisKKworLyoqCisgIFxicmllZiAgIEdldCBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBTdGF0dXMgUmVnaXN0ZXIKKyAgXGRldGFpbHMgUmVhZHMgRGVidWcgQXV0aGVudGljYXRpb24gU3RhdHVzIHJlZ2lzdGVyLgorICBccmV0dXJuICAgICAgICAgICAgIERlYnVnIEF1dGhlbnRpY2F0aW9uIFN0YXR1cyBSZWdpc3Rlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IERJQl9HZXRBdXRoU3RhdHVzKHZvaWQpCit7CisgICAgcmV0dXJuIChESUItPkRBVVRIU1RBVFVTKTsKK30KKworCisjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAoX19BUk1fRkVBVFVSRV9DTVNFID09IDNVKQorLyoqCisgIFxicmllZiAgIEdldCBEZWJ1ZyBBdXRoZW50aWNhdGlvbiBTdGF0dXMgUmVnaXN0ZXIgKG5vbi1zZWN1cmUpCisgIFxkZXRhaWxzIFJlYWRzIG5vbi1zZWN1cmUgRGVidWcgQXV0aGVudGljYXRpb24gU3RhdHVzIHJlZ2lzdGVyIHdoZW4gaW4gc2VjdXJlIHN0YXRlLgorICBccmV0dXJuICAgICAgICAgICAgIERlYnVnIEF1dGhlbnRpY2F0aW9uIFN0YXR1cyBSZWdpc3Rlci4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFRaX0RJQl9HZXRBdXRoU3RhdHVzX05TKHZvaWQpCit7CisgICAgcmV0dXJuIChESUJfTlMtPkRBVVRIU1RBVFVTKTsKK30KKyNlbmRpZiAvKiBkZWZpbmVkIChfX0FSTV9GRUFUVVJFX0NNU0UpICYmIChfX0FSTV9GRUFUVVJFX0NNU0UgPT0gM1UpICovCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfRENCRnVuY3Rpb25zICovCisKKworCisKKy8qICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgU3lzVGljayBmdW5jdGlvbiAgIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgKi8KKy8qKgorICBcaW5ncm91cCAgQ01TSVNfQ29yZV9GdW5jdGlvbkludGVyZmFjZQorICBcZGVmZ3JvdXAgQ01TSVNfQ29yZV9TeXNUaWNrRnVuY3Rpb25zIFN5c1RpY2sgRnVuY3Rpb25zCisgIFxicmllZiAgICBGdW5jdGlvbnMgdGhhdCBjb25maWd1cmUgdGhlIFN5c3RlbS4KKyAgQHsKKyAqLworCisjaWYgZGVmaW5lZCAoX19WZW5kb3JfU3lzVGlja0NvbmZpZykgJiYgKF9fVmVuZG9yX1N5c1RpY2tDb25maWcgPT0gMFUpCisKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uCisgIFxkZXRhaWxzIEluaXRpYWxpemVzIHRoZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlN5c1RpY2tfQ29uZmlnPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKyAqLworX19TVEFUSUNfSU5MSU5FIHVpbnQzMl90IFN5c1RpY2tfQ29uZmlnKHVpbnQzMl90IHRpY2tzKQoreworICBpZiAoKHRpY2tzIC0gMVVMKSA+IFN5c1RpY2tfTE9BRF9SRUxPQURfTXNrKQorICB7CisgICAgcmV0dXJuICgxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFJlbG9hZCB2YWx1ZSBpbXBvc3NpYmxlICovCisgIH0KKworICBTeXNUaWNrLT5MT0FEICA9ICh1aW50MzJfdCkodGlja3MgLSAxVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZXQgcmVsb2FkIHJlZ2lzdGVyICovCisgIE5WSUNfU2V0UHJpb3JpdHkgKFN5c1RpY2tfSVJRbiwgKDFVTCA8PCBfX05WSUNfUFJJT19CSVRTKSAtIDFVTCk7IC8qIHNldCBQcmlvcml0eSBmb3IgU3lzdGljayBJbnRlcnJ1cHQgKi8KKyAgU3lzVGljay0+VkFMICAgPSAwVUw7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTG9hZCB0aGUgU3lzVGljayBDb3VudGVyIFZhbHVlICovCisgIFN5c1RpY2stPkNUUkwgID0gU3lzVGlja19DVFJMX0NMS1NPVVJDRV9Nc2sgfAorICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9USUNLSU5UX01zayAgIHwKKyAgICAgICAgICAgICAgICAgICBTeXNUaWNrX0NUUkxfRU5BQkxFX01zazsgICAgICAgICAgICAgICAgICAgICAgICAgLyogRW5hYmxlIFN5c1RpY2sgSVJRIGFuZCBTeXNUaWNrIFRpbWVyICovCisgIHJldHVybiAoMFVMKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIEZ1bmN0aW9uIHN1Y2Nlc3NmdWwgKi8KK30KKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKy8qKgorICBcYnJpZWYgICBTeXN0ZW0gVGljayBDb25maWd1cmF0aW9uIChub24tc2VjdXJlKQorICBcZGV0YWlscyBJbml0aWFsaXplcyB0aGUgbm9uLXNlY3VyZSBTeXN0ZW0gVGltZXIgYW5kIGl0cyBpbnRlcnJ1cHQgd2hlbiBpbiBzZWN1cmUgc3RhdGUsIGFuZCBzdGFydHMgdGhlIFN5c3RlbSBUaWNrIFRpbWVyLgorICAgICAgICAgICBDb3VudGVyIGlzIGluIGZyZWUgcnVubmluZyBtb2RlIHRvIGdlbmVyYXRlIHBlcmlvZGljIGludGVycnVwdHMuCisgIFxwYXJhbSBbaW5dICB0aWNrcyAgTnVtYmVyIG9mIHRpY2tzIGJldHdlZW4gdHdvIGludGVycnVwdHMuCisgIFxyZXR1cm4gICAgICAgICAgMCAgRnVuY3Rpb24gc3VjY2VlZGVkLgorICBccmV0dXJuICAgICAgICAgIDEgIEZ1bmN0aW9uIGZhaWxlZC4KKyAgXG5vdGUgICAgV2hlbiB0aGUgdmFyaWFibGUgPGI+X19WZW5kb3JfU3lzVGlja0NvbmZpZzwvYj4gaXMgc2V0IHRvIDEsIHRoZW4gdGhlCisgICAgICAgICAgIGZ1bmN0aW9uIDxiPlRaX1N5c1RpY2tfQ29uZmlnX05TPC9iPiBpcyBub3QgaW5jbHVkZWQuIEluIHRoaXMgY2FzZSwgdGhlIGZpbGUgPGI+PGk+ZGV2aWNlPC9pPi5oPC9iPgorICAgICAgICAgICBtdXN0IGNvbnRhaW4gYSB2ZW5kb3Itc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhpcyBmdW5jdGlvbi4KKworICovCitfX1NUQVRJQ19JTkxJTkUgdWludDMyX3QgVFpfU3lzVGlja19Db25maWdfTlModWludDMyX3QgdGlja3MpCit7CisgIGlmICgodGlja3MgLSAxVUwpID4gU3lzVGlja19MT0FEX1JFTE9BRF9Nc2spCisgIHsKKyAgICByZXR1cm4gKDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUmVsb2FkIHZhbHVlIGltcG9zc2libGUgKi8KKyAgfQorCisgIFN5c1RpY2tfTlMtPkxPQUQgID0gKHVpbnQzMl90KSh0aWNrcyAtIDFVTCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHNldCByZWxvYWQgcmVnaXN0ZXIgKi8KKyAgVFpfTlZJQ19TZXRQcmlvcml0eV9OUyAoU3lzVGlja19JUlFuLCAoMVVMIDw8IF9fTlZJQ19QUklPX0JJVFMpIC0gMVVMKTsgLyogc2V0IFByaW9yaXR5IGZvciBTeXN0aWNrIEludGVycnVwdCAqLworICBTeXNUaWNrX05TLT5WQUwgICA9IDBVTDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBMb2FkIHRoZSBTeXNUaWNrIENvdW50ZXIgVmFsdWUgKi8KKyAgU3lzVGlja19OUy0+Q1RSTCAgPSBTeXNUaWNrX0NUUkxfQ0xLU09VUkNFX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgU3lzVGlja19DVFJMX1RJQ0tJTlRfTXNrICAgfAorICAgICAgICAgICAgICAgICAgICAgIFN5c1RpY2tfQ1RSTF9FTkFCTEVfTXNrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbmFibGUgU3lzVGljayBJUlEgYW5kIFN5c1RpY2sgVGltZXIgKi8KKyAgcmV0dXJuICgwVUwpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogRnVuY3Rpb24gc3VjY2Vzc2Z1bCAqLworfQorI2VuZGlmIC8qIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkgKi8KKworI2VuZGlmCisKKy8qQH0gZW5kIG9mIENNU0lTX0NvcmVfU3lzVGlja0Z1bmN0aW9ucyAqLworCisKKworLyogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyBEZWJ1ZyBJbi9PdXRwdXQgZnVuY3Rpb24gIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAqLworLyoqCisgIFxpbmdyb3VwICBDTVNJU19Db3JlX0Z1bmN0aW9uSW50ZXJmYWNlCisgIFxkZWZncm91cCBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zIElUTSBGdW5jdGlvbnMKKyAgXGJyaWVmICAgIEZ1bmN0aW9ucyB0aGF0IGFjY2VzcyB0aGUgSVRNIGRlYnVnIGludGVyZmFjZS4KKyAgQHsKKyAqLworCitleHRlcm4gdm9sYXRpbGUgaW50MzJfdCBJVE1fUnhCdWZmZXI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyohPCBFeHRlcm5hbCB2YXJpYWJsZSB0byByZWNlaXZlIGNoYXJhY3RlcnMuICovCisjZGVmaW5lICAgICAgICAgICAgICAgICBJVE1fUlhCVUZGRVJfRU1QVFkgICgoaW50MzJfdCkweDVBQTU1QUE1VSkgLyohPCBWYWx1ZSBpZGVudGlmeWluZyBccmVmIElUTV9SeEJ1ZmZlciBpcyByZWFkeSBmb3IgbmV4dCBjaGFyYWN0ZXIuICovCisKKworLyoqCisgIFxicmllZiAgIElUTSBTZW5kIENoYXJhY3RlcgorICBcZGV0YWlscyBUcmFuc21pdHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBJVE0gY2hhbm5lbCAwLCBhbmQKKyAgICAgICAgICAgXGxpIEp1c3QgcmV0dXJucyB3aGVuIG5vIGRlYnVnZ2VyIGlzIGNvbm5lY3RlZCB0aGF0IGhhcyBib29rZWQgdGhlIG91dHB1dC4KKyAgICAgICAgICAgXGxpIElzIGJsb2NraW5nIHdoZW4gYSBkZWJ1Z2dlciBpcyBjb25uZWN0ZWQsIGJ1dCB0aGUgcHJldmlvdXMgY2hhcmFjdGVyIHNlbnQgaGFzIG5vdCBiZWVuIHRyYW5zbWl0dGVkLgorICBccGFyYW0gW2luXSAgICAgY2ggIENoYXJhY3RlciB0byB0cmFuc21pdC4KKyAgXHJldHVybnMgICAgICAgICAgICBDaGFyYWN0ZXIgdG8gdHJhbnNtaXQuCisgKi8KK19fU1RBVElDX0lOTElORSB1aW50MzJfdCBJVE1fU2VuZENoYXIgKHVpbnQzMl90IGNoKQoreworICBpZiAoKChJVE0tPlRDUiAmIElUTV9UQ1JfSVRNRU5BX01zaykgIT0gMFVMKSAmJiAgICAgIC8qIElUTSBlbmFibGVkICovCisgICAgICAoKElUTS0+VEVSICYgMVVMICAgICAgICAgICAgICAgKSAhPSAwVUwpICAgKSAgICAgLyogSVRNIFBvcnQgIzAgZW5hYmxlZCAqLworICB7CisgICAgd2hpbGUgKElUTS0+UE9SVFswVV0udTMyID09IDBVTCkKKyAgICB7CisgICAgICBfX05PUCgpOworICAgIH0KKyAgICBJVE0tPlBPUlRbMFVdLnU4ID0gKHVpbnQ4X3QpY2g7CisgIH0KKyAgcmV0dXJuIChjaCk7Cit9CisKKworLyoqCisgIFxicmllZiAgIElUTSBSZWNlaXZlIENoYXJhY3RlcgorICBcZGV0YWlscyBJbnB1dHMgYSBjaGFyYWN0ZXIgdmlhIHRoZSBleHRlcm5hbCB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAgICBSZWNlaXZlZCBjaGFyYWN0ZXIuCisgIFxyZXR1cm4gICAgICAgICAtMSAgTm8gY2hhcmFjdGVyIHBlbmRpbmcuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9SZWNlaXZlQ2hhciAodm9pZCkKK3sKKyAgaW50MzJfdCBjaCA9IC0xOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKworICBpZiAoSVRNX1J4QnVmZmVyICE9IElUTV9SWEJVRkZFUl9FTVBUWSkKKyAgeworICAgIGNoID0gSVRNX1J4QnVmZmVyOworICAgIElUTV9SeEJ1ZmZlciA9IElUTV9SWEJVRkZFUl9FTVBUWTsgICAgICAgLyogcmVhZHkgZm9yIG5leHQgY2hhcmFjdGVyICovCisgIH0KKworICByZXR1cm4gKGNoKTsKK30KKworCisvKioKKyAgXGJyaWVmICAgSVRNIENoZWNrIENoYXJhY3RlcgorICBcZGV0YWlscyBDaGVja3Mgd2hldGhlciBhIGNoYXJhY3RlciBpcyBwZW5kaW5nIGZvciByZWFkaW5nIGluIHRoZSB2YXJpYWJsZSBccmVmIElUTV9SeEJ1ZmZlci4KKyAgXHJldHVybiAgICAgICAgICAwICBObyBjaGFyYWN0ZXIgYXZhaWxhYmxlLgorICBccmV0dXJuICAgICAgICAgIDEgIENoYXJhY3RlciBhdmFpbGFibGUuCisgKi8KK19fU1RBVElDX0lOTElORSBpbnQzMl90IElUTV9DaGVja0NoYXIgKHZvaWQpCit7CisKKyAgaWYgKElUTV9SeEJ1ZmZlciA9PSBJVE1fUlhCVUZGRVJfRU1QVFkpCisgIHsKKyAgICByZXR1cm4gKDApOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorICBlbHNlCisgIHsKKyAgICByZXR1cm4gKDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgIGNoYXJhY3RlciBhdmFpbGFibGUgKi8KKyAgfQorfQorCisvKkB9IGVuZCBvZiBDTVNJU19jb3JlX0RlYnVnRnVuY3Rpb25zICovCisKKworCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfX0NPUkVfQ001NV9IX0RFUEVOREFOVCAqLworCisjZW5kaWYgLyogX19DTVNJU19HRU5FUklDICovCmRpZmYgLS1naXQgYS9DTVNJUy9Db3JlL0luY2x1ZGUvcG11X2FybXY4LmggYi9DTVNJUy9Db3JlL0luY2x1ZGUvcG11X2FybXY4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ1ZTYzMQotLS0gL2Rldi9udWxsCisrKyBiL0NNU0lTL0NvcmUvSW5jbHVkZS9wbXVfYXJtdjguaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSAgICAgcG11X2FybXY4LmgKKyAqIEBicmllZiAgICBDTVNJUyBQTVUgQVBJIGZvciBBcm12OC4xLU0gUE1VCisgKiBAdmVyc2lvbiAgVjEuMC4wCisgKiBAZGF0ZSAgICAgMjAuIEZlYnJ1YXJ5IDIwMjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDE3LTIwMjAgQXJtIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKKyAqCisgKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgTGljZW5zZSk7IHlvdSBtYXkKKyAqIG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgKiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAqCisgKiB3d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorICoKKyAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUCisgKiBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKyAqLworCisjaWYgICBkZWZpbmVkICggX19JQ0NBUk1fXyApCisgICNwcmFnbWEgc3lzdGVtX2luY2x1ZGUgICAgICAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgZm9yIE1JU1JBIGNoZWNrICovCisjZWxpZiBkZWZpbmVkIChfX2NsYW5nX18pCisgICNwcmFnbWEgY2xhbmcgc3lzdGVtX2hlYWRlciAgICAvKiB0cmVhdCBmaWxlIGFzIHN5c3RlbSBpbmNsdWRlIGZpbGUgKi8KKyNlbmRpZgorCisjaWZuZGVmIEFSTV9QTVVfQVJNVjhfSAorI2RlZmluZSBBUk1fUE1VX0FSTVY4X0gKKworCisjZW5kaWYgLyogQVJNX1BNVV9BUk1WOF9IICovCisKZGlmZiAtLWdpdCBhL0RldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL0FSTUNNNTVfRFNQX0RQX01WRV9GUF9UWi5oIGIvRGV2aWNlL0FSTS9BUk1DTTU1L0luY2x1ZGUvQVJNQ001NV9EU1BfRFBfTVZFX0ZQX1RaLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmVjZGFlZQotLS0gL2Rldi9udWxsCisrKyBiL0RldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL0FSTUNNNTVfRFNQX0RQX01WRV9GUF9UWi5oCkBAIC0wLDAgKzEsMTM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgQVJNQ001NV9EU1BfRFBfTVZFX0ZQX1RaUC5oCisgKiBAYnJpZWYgICAgQ01TSVMgQ29yZSBQZXJpcGhlcmFsIEFjY2VzcyBMYXllciBIZWFkZXIgRmlsZSBmb3IKKyAqICAgICAgICAgICBBUk1DTTU1IERldmljZSBTZXJpZXMgKGNvbmZpZ3VyZWQgZm9yIEFSTUNNNTUgd2l0aCBkb3VibGUgcHJlY2lzaW9uIEZQVSwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERTUCBleHRlbnNpb24sIE1WRSwgVHJ1c3Rab25lKQorICogQHZlcnNpb24gIFYxLjAuMAorICogQGRhdGUgICAgIDIwLiBGZWJydWFyeSAyMDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIHd3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgQVJNQ001NV9EU1BfRFBfTVZFX0ZQX1RaX0gKKyNkZWZpbmUgQVJNQ001NV9EU1BfRFBfTVZFX0ZQX1RaX0gKKworI2lmZGVmIF9fY3BsdXNwbHVzCitleHRlcm4gIkMiIHsKKyNlbmRpZgorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIEludGVycnVwdCBOdW1iZXIgRGVmaW5pdGlvbiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3R5cGVkZWYgZW51bSBJUlFuCit7CisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tICBQcm9jZXNzb3IgRXhjZXB0aW9ucyBOdW1iZXJzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworICBOb25NYXNrYWJsZUludF9JUlFuICAgICAgICAgICA9IC0xNCwgICAgIC8qICAyIE5vbiBNYXNrYWJsZSBJbnRlcnJ1cHQgKi8KKyAgSGFyZEZhdWx0X0lSUW4gICAgICAgICAgICAgICAgPSAtMTMsICAgICAvKiAgMyBIYXJkRmF1bHQgSW50ZXJydXB0ICovCisgIE1lbW9yeU1hbmFnZW1lbnRfSVJRbiAgICAgICAgID0gLTEyLCAgICAgLyogIDQgTWVtb3J5IE1hbmFnZW1lbnQgSW50ZXJydXB0ICovCisgIEJ1c0ZhdWx0X0lSUW4gICAgICAgICAgICAgICAgID0gLTExLCAgICAgLyogIDUgQnVzIEZhdWx0IEludGVycnVwdCAqLworICBVc2FnZUZhdWx0X0lSUW4gICAgICAgICAgICAgICA9IC0xMCwgICAgIC8qICA2IFVzYWdlIEZhdWx0IEludGVycnVwdCAqLworICBTZWN1cmVGYXVsdF9JUlFuICAgICAgICAgICAgICA9ICAtOSwgICAgIC8qICA3IFNlY3VyZSBGYXVsdCBJbnRlcnJ1cHQgKi8KKyAgU1ZDYWxsX0lSUW4gICAgICAgICAgICAgICAgICAgPSAgLTUsICAgICAvKiAxMSBTViBDYWxsIEludGVycnVwdCAqLworICBEZWJ1Z01vbml0b3JfSVJRbiAgICAgICAgICAgICA9ICAtNCwgICAgIC8qIDEyIERlYnVnIE1vbml0b3IgSW50ZXJydXB0ICovCisgIFBlbmRTVl9JUlFuICAgICAgICAgICAgICAgICAgID0gIC0yLCAgICAgLyogMTQgUGVuZCBTViBJbnRlcnJ1cHQgKi8KKyAgU3lzVGlja19JUlFuICAgICAgICAgICAgICAgICAgPSAgLTEsICAgICAvKiAxNSBTeXN0ZW0gVGljayBJbnRlcnJ1cHQgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLSAgUHJvY2Vzc29yIEludGVycnVwdCBOdW1iZXJzICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyAgSW50ZXJydXB0MF9JUlFuICAgICAgICAgICAgICAgPSAgIDAsCisgIEludGVycnVwdDFfSVJRbiAgICAgICAgICAgICAgID0gICAxLAorICBJbnRlcnJ1cHQyX0lSUW4gICAgICAgICAgICAgICA9ICAgMiwKKyAgSW50ZXJydXB0M19JUlFuICAgICAgICAgICAgICAgPSAgIDMsCisgIEludGVycnVwdDRfSVJRbiAgICAgICAgICAgICAgID0gICA0LAorICBJbnRlcnJ1cHQ1X0lSUW4gICAgICAgICAgICAgICA9ICAgNSwKKyAgSW50ZXJydXB0Nl9JUlFuICAgICAgICAgICAgICAgPSAgIDYsCisgIEludGVycnVwdDdfSVJRbiAgICAgICAgICAgICAgID0gICA3LAorICBJbnRlcnJ1cHQ4X0lSUW4gICAgICAgICAgICAgICA9ICAgOCwKKyAgSW50ZXJydXB0OV9JUlFuICAgICAgICAgICAgICAgPSAgIDkKKyAgLyogSW50ZXJydXB0cyAxMCAuLiA0ODAgYXJlIGxlZnQgb3V0ICovCit9IElSUW5fVHlwZTsKKworCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworLyogPT09PT09PT09PT09PT09PSAgICAgIFByb2Nlc3NvciBhbmQgQ29yZSBQZXJpcGhlcmFsIFNlY3Rpb24gICAgID09PT09PT09PT09PT09PT0gKi8KKy8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCisKKy8qIC0tLS0tLS0gIFN0YXJ0IG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyBhbmQgZGlzYWJsaW5nIHdhcm5pbmdzICAtLS0tLS0tICovCisjaWYgICBkZWZpbmVkIChfX0NDX0FSTSkKKyAgI3ByYWdtYSBwdXNoCisgICNwcmFnbWEgYW5vbl91bmlvbnMKKyNlbGlmIGRlZmluZWQgKF9fSUNDQVJNX18pCisgICNwcmFnbWEgbGFuZ3VhZ2U9ZXh0ZW5kZWQKKyNlbGlmIGRlZmluZWQoX19BUk1DQ19WRVJTSU9OKSAmJiAoX19BUk1DQ19WRVJTSU9OID49IDYwMTAwNTApCisgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBwdXNoCisgICNwcmFnbWEgY2xhbmcgZGlhZ25vc3RpYyBpZ25vcmVkICItV2MxMS1leHRlbnNpb25zIgorICAjcHJhZ21hIGNsYW5nIGRpYWdub3N0aWMgaWdub3JlZCAiLVdyZXNlcnZlZC1pZC1tYWNybyIKKyNlbGlmIGRlZmluZWQgKF9fR05VQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbGlmIGRlZmluZWQgKF9fVE1TNDcwX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UQVNLSU5HX18pCisgICNwcmFnbWEgd2FybmluZyA1ODYKKyNlbGlmIGRlZmluZWQgKF9fQ1NNQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbHNlCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKworLyogLS0tLS0tLS0gIENvbmZpZ3VyYXRpb24gb2YgQ29yZSBQZXJpcGhlcmFscyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKyNkZWZpbmUgX19DTTU1X1JFViAgICAgICAgICAgICAgICAweDAwMDFVICAgLyogQ29yZSByZXZpc2lvbiByMHAxICovCisjZGVmaW5lIF9fTlZJQ19QUklPX0JJVFMgICAgICAgICAgM1UgICAgICAgIC8qIE51bWJlciBvZiBCaXRzIHVzZWQgZm9yIFByaW9yaXR5IExldmVscyAqLworI2RlZmluZSBfX1ZlbmRvcl9TeXNUaWNrQ29uZmlnICAgIDBVICAgICAgICAvKiBTZXQgdG8gMSBpZiBkaWZmZXJlbnQgU3lzVGljayBDb25maWcgaXMgdXNlZCAqLworI2RlZmluZSBfX1ZUT1JfUFJFU0VOVCAgICAgICAgICAgIDFVICAgICAgICAvKiBWVE9SIHByZXNlbnQgKi8KKyNkZWZpbmUgX19NUFVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogTVBVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19GUFVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogRlBVIHByZXNlbnQgKi8KKyNkZWZpbmUgX19GUFVfRFAgICAgICAgICAgICAgICAgICAxVSAgICAgICAgLyogZG91YmxlIHByZWNpc2lvbiBGUFUgKi8KKyNkZWZpbmUgX19EU1BfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogRFNQIGV4dGVuc2lvbiBwcmVzZW50ICovCisjZGVmaW5lIF9fU0FVUkVHSU9OX1BSRVNFTlQgICAgICAgMVUgICAgICAgIC8qIFNBVSByZWdpb25zIHByZXNlbnQgKi8KKyNkZWZpbmUgX19QTVVfUFJFU0VOVCAgICAgICAgICAgICAxVSAgICAgICAgLyogUE1VIHByZXNlbnQgKi8KKyNkZWZpbmUgX19QTVVfTlVNX0VWRU5UQ05UICAgICAgIDEyVSAgICAgICAgLyogUE1VIEV2ZW50IENvdW50ZXJzICovCisKKyNpbmNsdWRlICJjb3JlX2NtNTUuaCIgICAgICAgICAgICAgICAgICAgICAgLyogUHJvY2Vzc29yIGFuZCBjb3JlIHBlcmlwaGVyYWxzICovCisjaW5jbHVkZSAic3lzdGVtX0FSTUNNNTUuaCIgICAgICAgICAgICAgICAgIC8qIFN5c3RlbSBIZWFkZXIgKi8KKworCisvKiAtLS0tLS0tLSAgRW5kIG9mIHNlY3Rpb24gdXNpbmcgYW5vbnltb3VzIHVuaW9ucyBhbmQgZGlzYWJsaW5nIHdhcm5pbmdzICAtLS0tLS0tLSAqLworI2lmICAgZGVmaW5lZCAoX19DQ19BUk0pCisgICNwcmFnbWEgcG9wCisjZWxpZiBkZWZpbmVkIChfX0lDQ0FSTV9fKQorICAvKiBsZWF2ZSBhbm9ueW1vdXMgdW5pb25zIGVuYWJsZWQgKi8KKyNlbGlmIChkZWZpbmVkKF9fQVJNQ0NfVkVSU0lPTikgJiYgKF9fQVJNQ0NfVkVSU0lPTiA+PSA2MDEwMDUwKSkKKyAgI3ByYWdtYSBjbGFuZyBkaWFnbm9zdGljIHBvcAorI2VsaWYgZGVmaW5lZCAoX19HTlVDX18pCisgIC8qIGFub255bW91cyB1bmlvbnMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworI2VsaWYgZGVmaW5lZCAoX19UTVM0NzBfXykKKyAgLyogYW5vbnltb3VzIHVuaW9ucyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0ICovCisjZWxpZiBkZWZpbmVkIChfX1RBU0tJTkdfXykKKyAgI3ByYWdtYSB3YXJuaW5nIHJlc3RvcmUKKyNlbGlmIGRlZmluZWQgKF9fQ1NNQ19fKQorICAvKiBhbm9ueW1vdXMgdW5pb25zIGFyZSBlbmFibGVkIGJ5IGRlZmF1bHQgKi8KKyNlbHNlCisgICN3YXJuaW5nIE5vdCBzdXBwb3J0ZWQgY29tcGlsZXIgdHlwZQorI2VuZGlmCisKKworI2lmZGVmIF9fY3BsdXNwbHVzCit9CisjZW5kaWYKKworI2VuZGlmICAvKiBBUk1DTTU1X0RTUF9EUF9NVkVfRlBfVFpfSCAqLwpkaWZmIC0tZ2l0IGEvRGV2aWNlL0FSTS9BUk1DTTU1L0luY2x1ZGUvVGVtcGxhdGUvcGFydGl0aW9uX0FSTUNNNTUuaCBiL0RldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL1RlbXBsYXRlL3BhcnRpdGlvbl9BUk1DTTU1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQzYzQ4NgotLS0gL2Rldi9udWxsCisrKyBiL0RldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL1RlbXBsYXRlL3BhcnRpdGlvbl9BUk1DTTU1LmgKQEAgLTAsMCArMSwxMjYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgcGFydGl0aW9uX0FSTUNNNTUuaAorICogQGJyaWVmICAgIENNU0lTLUNPUkUgSW5pdGlhbCBTZXR1cCBmb3IgU2VjdXJlIC8gTm9uLVNlY3VyZSBab25lcyBmb3IgQXJtdjguMS1NIE1haW5saW5lCisgKiBAdmVyc2lvbiAgVjEuMC4wCisgKiBAZGF0ZSAgICAgMjAuIEZlYnJ1YXJ5IDIwMjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmbmRlZiBQQVJUSVRJT05fQVJNQ001NV9ICisjZGVmaW5lIFBBUlRJVElPTl9BUk1DTTU1X0gKKworLyoKKy8vLS0tLS0tLS0gPDw8IFVzZSBDb25maWd1cmF0aW9uIFdpemFyZCBpbiBDb250ZXh0IE1lbnUgPj4+IC0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKgorLy8gPGU+SW5pdGlhbGl6ZSBTZWN1cml0eSBBdHRyaWJ1dGlvbiBVbml0IChTQVUpIENUUkwgcmVnaXN0ZXIKKyovCisjZGVmaW5lIFNBVV9JTklUX0NUUkwgICAgICAgICAgMQorCisvKgorLy8gICA8cT4gRW5hYmxlIFNBVQorLy8gICA8aT4gVmFsdWUgZm9yIFNBVS0+Q1RSTCByZWdpc3RlciBiaXQgRU5BQkxFCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMX0VOQUJMRSAgIDEKKworLyoKKy8vICAgPG8+IFdoZW4gU0FVIGlzIGRpc2FibGVkCisvLyAgICAgPDA9PiBBbGwgTWVtb3J5IGlzIFNlY3VyZQorLy8gICAgIDwxPT4gQWxsIE1lbW9yeSBpcyBOb24tU2VjdXJlCisvLyAgIDxpPiBWYWx1ZSBmb3IgU0FVLT5DVFJMIHJlZ2lzdGVyIGJpdCBBTExOUworLy8gICA8aT4gV2hlbiBhbGwgTWVtb3J5IGlzIE5vbi1TZWN1cmUgKEFMTE5TIGlzIDEpLCBJREFVIGNhbiBvdmVycmlkZSBtZW1vcnkgbWFwIGNvbmZpZ3VyYXRpb24uCisqLworI2RlZmluZSBTQVVfSU5JVF9DVFJMX0FMTE5TICAwCisKKy8qCisvLyA8L2U+CisqLworCisvKgorLy8gPGg+SW5pdGlhbGl6ZSBTZWN1cml0eSBBdHRyaWJ1dGlvbiBVbml0IChTQVUpIEFkZHJlc3MgUmVnaW9ucworLy8gPGk+U0FVIGNvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIHJlZ2lvbnMgdG8gYmUgb25lIG9mOgorLy8gPGk+IC0gU2VjdXJlIGFuZCBOb24tU2VjdXJlIENhbGxhYmxlCisvLyA8aT4gLSBOb24tU2VjdXJlCisvLyA8aT5Ob3RlOiBBbGwgbWVtb3J5IHJlZ2lvbnMgbm90IGNvbmZpZ3VyZWQgYnkgU0FVIGFyZSBTZWN1cmUKKyovCisjZGVmaW5lIFNBVV9SRUdJT05TX01BWCAgIDggICAgICAgICAgICAgICAgIC8qIE1heC4gbnVtYmVyIG9mIFNBVSByZWdpb25zICovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgU0FVIFJlZ2lvbiAwCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDAgbWVtb3J5IGF0dHJpYnV0ZXMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjAgICAgMQorCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMCAgICAgMHgwMDAwMDAwMCAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiAwICovCisKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDAgICAgICAgMHgwMDFGRkZGRiAgICAgIC8qIGVuZCBhZGRyZXNzIG9mIFNBVSByZWdpb24gMCAqLworCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MwICAgICAgIDEKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgU0FVIFJlZ2lvbiAxCisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDEgbWVtb3J5IGF0dHJpYnV0ZXMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjEgICAgMQorCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUMSAgICAgMHgwMDIwMDAwMAorCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQxICAgICAgIDB4MDAzRkZGRkYKKworLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDMSAgICAgICAwCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIFNBVSBSZWdpb24gMgorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiAyIG1lbW9yeSBhdHRyaWJ1dGVzCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT04yICAgIDEKKworLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDIgICAgIDB4MjAyMDAwMDAKKworLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5EMiAgICAgICAweDIwM0ZGRkZGCisKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzIgICAgICAgMAorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBTQVUgUmVnaW9uIDMKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gMyBtZW1vcnkgYXR0cmlidXRlcworKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9OMyAgICAxCisKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQzICAgICAweDQwMDAwMDAwCisKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDMgICAgICAgMHg0MDA0MDAwMAorCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0MzICAgICAgIDAKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgU0FVIFJlZ2lvbiA0CisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDQgbWVtb3J5IGF0dHJpYnV0ZXMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjQgICAgMAorCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNCAgICAgMHgwMDAwMDAwMCAgICAgIC8qIHN0YXJ0IGFkZHJlc3Mgb2YgU0FVIHJlZ2lvbiA0ICovCisKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDQgICAgICAgMHgwMDAwMDAwMCAgICAgIC8qIGVuZCBhZGRyZXNzIG9mIFNBVSByZWdpb24gNCAqLworCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M0ICAgICAgIDAKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgU0FVIFJlZ2lvbiA1CisvLyAgIDxpPiBTZXR1cCBTQVUgUmVnaW9uIDUgbWVtb3J5IGF0dHJpYnV0ZXMKKyovCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTjUgICAgMAorCisvKgorLy8gICAgIDxvPlN0YXJ0IEFkZHJlc3MgPDAtMHhGRkZGRkZFMD4KKyovCisjZGVmaW5lIFNBVV9JTklUX1NUQVJUNSAgICAgMHgwMDAwMDAwMAorCisvKgorLy8gICAgIDxvPkVuZCBBZGRyZXNzIDwweDFGLTB4RkZGRkZGRkY+CisqLworI2RlZmluZSBTQVVfSU5JVF9FTkQ1ICAgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgICA8bz5SZWdpb24gaXMKKy8vICAgICAgICAgPDA9Pk5vbi1TZWN1cmUKKy8vICAgICAgICAgPDE9PlNlY3VyZSwgTm9uLVNlY3VyZSBDYWxsYWJsZQorKi8KKyNkZWZpbmUgU0FVX0lOSVRfTlNDNSAgICAgICAwCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIFNBVSBSZWdpb24gNgorLy8gICA8aT4gU2V0dXAgU0FVIFJlZ2lvbiA2IG1lbW9yeSBhdHRyaWJ1dGVzCisqLworI2RlZmluZSBTQVVfSU5JVF9SRUdJT042ICAgIDAKKworLyoKKy8vICAgICA8bz5TdGFydCBBZGRyZXNzIDwwLTB4RkZGRkZGRTA+CisqLworI2RlZmluZSBTQVVfSU5JVF9TVEFSVDYgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgICA8bz5FbmQgQWRkcmVzcyA8MHgxRi0weEZGRkZGRkZGPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfRU5ENiAgICAgICAweDAwMDAwMDAwCisKKy8qCisvLyAgICAgPG8+UmVnaW9uIGlzCisvLyAgICAgICAgIDwwPT5Ob24tU2VjdXJlCisvLyAgICAgICAgIDwxPT5TZWN1cmUsIE5vbi1TZWN1cmUgQ2FsbGFibGUKKyovCisjZGVmaW5lIFNBVV9JTklUX05TQzYgICAgICAgMAorLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBTQVUgUmVnaW9uIDcKKy8vICAgPGk+IFNldHVwIFNBVSBSZWdpb24gNyBtZW1vcnkgYXR0cmlidXRlcworKi8KKyNkZWZpbmUgU0FVX0lOSVRfUkVHSU9ONyAgICAwCisKKy8qCisvLyAgICAgPG8+U3RhcnQgQWRkcmVzcyA8MC0weEZGRkZGRkUwPgorKi8KKyNkZWZpbmUgU0FVX0lOSVRfU1RBUlQ3ICAgICAweDAwMDAwMDAwCisKKy8qCisvLyAgICAgPG8+RW5kIEFkZHJlc3MgPDB4MUYtMHhGRkZGRkZGRj4KKyovCisjZGVmaW5lIFNBVV9JTklUX0VORDcgICAgICAgMHgwMDAwMDAwMAorCisvKgorLy8gICAgIDxvPlJlZ2lvbiBpcworLy8gICAgICAgICA8MD0+Tm9uLVNlY3VyZQorLy8gICAgICAgICA8MT0+U2VjdXJlLCBOb24tU2VjdXJlIENhbGxhYmxlCisqLworI2RlZmluZSBTQVVfSU5JVF9OU0M3ICAgICAgIDAKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyA8L2g+CisqLworCisvKgorLy8gPGU+U2V0dXAgYmVoYXZpb3VyIG9mIFNsZWVwIGFuZCBFeGNlcHRpb24gSGFuZGxpbmcKKyovCisjZGVmaW5lIFNDQl9DU1JfQUlSQ1JfSU5JVCAgMQorCisvKgorLy8gICA8bz4gRGVlcCBTbGVlcCBjYW4gYmUgZW5hYmxlZCBieQorLy8gICAgIDwwPT5TZWN1cmUgYW5kIE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgICA8MT0+U2VjdXJlIHN0YXRlIG9ubHkKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkNTUiByZWdpc3RlciBiaXQgREVFUFNMRUVQUworKi8KKyNkZWZpbmUgU0NCX0NTUl9ERUVQU0xFRVBTX1ZBTCAgMQorCisvKgorLy8gICA8bz5TeXN0ZW0gcmVzZXQgcmVxdWVzdCBhY2Nlc3NpYmxlIGZyb20KKy8vICAgICA8MD0+IFNlY3VyZSBhbmQgTm9uLVNlY3VyZSBzdGF0ZQorLy8gICAgIDwxPT4gU2VjdXJlIHN0YXRlIG9ubHkKKy8vICAgPGk+IFZhbHVlIGZvciBTQ0ItPkFJUkNSIHJlZ2lzdGVyIGJpdCBTWVNSRVNFVFJFUVMKKyovCisjZGVmaW5lIFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfVkFMICAxCisKKy8qCisvLyAgIDxvPlByaW9yaXR5IG9mIE5vbi1TZWN1cmUgZXhjZXB0aW9ucyBpcworLy8gICAgIDwwPT4gTm90IGFsdGVyZWQKKy8vICAgICA8MT0+IExvd2VyZWQgdG8gMHg4MC0weEZGCisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5BSVJDUiByZWdpc3RlciBiaXQgUFJJUworKi8KKyNkZWZpbmUgU0NCX0FJUkNSX1BSSVNfVkFMICAgICAgMQorCisvKgorLy8gICA8bz5CdXNGYXVsdCwgSGFyZEZhdWx0LCBhbmQgTk1JIHRhcmdldAorLy8gICAgIDwwPT4gU2VjdXJlIHN0YXRlCisvLyAgICAgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5BSVJDUiByZWdpc3RlciBiaXQgQkZIRk5NSU5TCisqLworI2RlZmluZSBTQ0JfQUlSQ1JfQkZIRk5NSU5TX1ZBTCAwCisKKy8qCisvLyA8L2U+CisqLworCisvKgorLy8gPGU+U2V0dXAgYmVoYXZpb3VyIG9mIEZsb2F0aW5nIFBvaW50IFVuaXQKKyovCisjZGVmaW5lIFRaX0ZQVV9OU19VU0FHRSAxCisKKy8qCisvLyA8bz5GbG9hdGluZyBQb2ludCBVbml0IHVzYWdlCisvLyAgICAgPDA9PiBTZWN1cmUgc3RhdGUgb25seQorLy8gICAgIDwzPT4gU2VjdXJlIGFuZCBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxpPiBWYWx1ZSBmb3IgU0NCLT5OU0FDUiByZWdpc3RlciBiaXRzIENQMTAsIENQMTEKKyovCisjZGVmaW5lIFNDQl9OU0FDUl9DUDEwXzExX1ZBTCAgICAgICAzCisKKy8qCisvLyA8bz5UcmVhdCBmbG9hdGluZy1wb2ludCByZWdpc3RlcnMgYXMgU2VjdXJlCisvLyAgICAgPDA9PiBEaXNhYmxlZAorLy8gICAgIDwxPT4gRW5hYmxlZAorLy8gICA8aT4gVmFsdWUgZm9yIEZQVS0+RlBDQ1IgcmVnaXN0ZXIgYml0IFRTCisqLworI2RlZmluZSBGUFVfRlBDQ1JfVFNfVkFMICAgICAgICAgICAgMAorCisvKgorLy8gPG8+Q2xlYXIgb24gcmV0dXJuIChDTFJPTlJFVCkgYWNjZXNzaWJpbGl0eQorLy8gICAgIDwwPT4gU2VjdXJlIGFuZCBOb24tU2VjdXJlIHN0YXRlCisvLyAgICAgPDE9PiBTZWN1cmUgc3RhdGUgb25seQorLy8gICA8aT4gVmFsdWUgZm9yIEZQVS0+RlBDQ1IgcmVnaXN0ZXIgYml0IENMUk9OUkVUUworKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0NMUk9OUkVUU19WQUwgICAgIDAKKworLyoKKy8vIDxvPkNsZWFyIGZsb2F0aW5nLXBvaW50IGNhbGxlciBzYXZlZCByZWdpc3RlcnMgb24gZXhjZXB0aW9uIHJldHVybgorLy8gICAgIDwwPT4gRGlzYWJsZWQKKy8vICAgICA8MT0+IEVuYWJsZWQKKy8vICAgPGk+IFZhbHVlIGZvciBGUFUtPkZQQ0NSIHJlZ2lzdGVyIGJpdCBDTFJPTlJFVAorKi8KKyNkZWZpbmUgRlBVX0ZQQ0NSX0NMUk9OUkVUX1ZBTCAgICAgIDEKKworLyoKKy8vIDwvZT4KKyovCisKKy8qCisvLyA8aD5TZXR1cCBJbnRlcnJ1cHQgVGFyZ2V0CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIElUTlMgMCAoSW50ZXJydXB0cyAwLi4zMSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMCAgICAxCisKKy8qCisvLyBJbnRlcnJ1cHRzIDAuLjMxCisvLyAgIDxvLjA+ICBJbnRlcnJ1cHQgMCAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xPiAgSW50ZXJydXB0IDEgICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMj4gIEludGVycnVwdCAyICAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjM+ICBJbnRlcnJ1cHQgMyAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by40PiAgSW50ZXJydXB0IDQgICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNT4gIEludGVycnVwdCA1ICAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjY+ICBJbnRlcnJ1cHQgNiAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by43PiAgSW50ZXJydXB0IDcgICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOD4gIEludGVycnVwdCA4ICAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjk+ICBJbnRlcnJ1cHQgOSAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMD4gSW50ZXJydXB0IDEwICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTE+IEludGVycnVwdCAxMSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEyPiBJbnRlcnJ1cHQgMTIgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMz4gSW50ZXJydXB0IDEzICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTQ+IEludGVycnVwdCAxNCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE1PiBJbnRlcnJ1cHQgMTUgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNj4gSW50ZXJydXB0IDE2ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTc+IEludGVycnVwdCAxNyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE4PiBJbnRlcnJ1cHQgMTggIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOT4gSW50ZXJydXB0IDE5ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjA+IEludGVycnVwdCAyMCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIxPiBJbnRlcnJ1cHQgMjEgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMj4gSW50ZXJydXB0IDIyICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjM+IEludGVycnVwdCAyMyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI0PiBJbnRlcnJ1cHQgMjQgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNT4gSW50ZXJydXB0IDI1ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjY+IEludGVycnVwdCAyNiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI3PiBJbnRlcnJ1cHQgMjcgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOD4gSW50ZXJydXB0IDI4ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjk+IEludGVycnVwdCAyOSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMwPiBJbnRlcnJ1cHQgMzAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMT4gSW50ZXJydXB0IDMxICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMF9WQUwgICAgICAweDAwMDAwMDAwCisKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgSVROUyAxIChJbnRlcnJ1cHRzIDMyLi42MykKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMSAgICAxCisKKy8qCisvLyBJbnRlcnJ1cHRzIDMyLi42MworLy8gICA8by4wPiAgSW50ZXJydXB0IDMyICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMT4gIEludGVycnVwdCAzMyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI+ICBJbnRlcnJ1cHQgMzQgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zPiAgSW50ZXJydXB0IDM1ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uND4gIEludGVycnVwdCAzNiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjU+ICBJbnRlcnJ1cHQgMzcgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by42PiAgSW50ZXJydXB0IDM4ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNz4gIEludGVycnVwdCAzOSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjg+ICBJbnRlcnJ1cHQgNDAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by45PiAgSW50ZXJydXB0IDQxICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTA+IEludGVycnVwdCA0MiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjExPiBJbnRlcnJ1cHQgNDMgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMj4gSW50ZXJydXB0IDQ0ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTM+IEludGVycnVwdCA0NSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE0PiBJbnRlcnJ1cHQgNDYgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNT4gSW50ZXJydXB0IDQ3ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTY+IEludGVycnVwdCA0OCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE3PiBJbnRlcnJ1cHQgNDkgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOD4gSW50ZXJydXB0IDUwICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTk+IEludGVycnVwdCA1MSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIwPiBJbnRlcnJ1cHQgNTIgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMT4gSW50ZXJydXB0IDUzICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjI+IEludGVycnVwdCA1NCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIzPiBJbnRlcnJ1cHQgNTUgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yND4gSW50ZXJydXB0IDU2ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjU+IEludGVycnVwdCA1NyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI2PiBJbnRlcnJ1cHQgNTggIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNz4gSW50ZXJydXB0IDU5ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjg+IEludGVycnVwdCA2MCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI5PiBJbnRlcnJ1cHQgNjEgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMD4gSW50ZXJydXB0IDYyICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzE+IEludGVycnVwdCA2MyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzFfVkFMICAgICAgMHgwMDAwMDAwMAorCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIElUTlMgMiAoSW50ZXJydXB0cyA2NC4uOTUpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzIgICAgMAorCisvKgorLy8gSW50ZXJydXB0cyA2NC4uOTUKKy8vICAgPG8uMD4gIEludGVycnVwdCA2NCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgNjUgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDY2ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCA2NyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgNjggIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDY5ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCA3MCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgNzEgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDcyICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCA3MyAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgNzQgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDc1ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCA3NiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgNzcgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDc4ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCA3OSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgODAgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDgxICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCA4MiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgODMgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDg0ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCA4NSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgODYgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDg3ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCA4OCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgODkgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDkwICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCA5MSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgOTIgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDkzICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCA5NCAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgOTUgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMyX1ZBTCAgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDMgKEludGVycnVwdHMgOTYuLjEyNykKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TMyAgICAwCisKKy8qCisvLyBJbnRlcnJ1cHRzIDk2Li4xMjcKKy8vICAgPG8uMD4gIEludGVycnVwdCA5NiAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgOTcgIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDk4ICA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCA5OSAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMTAwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDEwMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAxMDIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMTAzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDEwNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAxMDUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMTA2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDEwNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAxMDggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMTA5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDExMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAxMTEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgMTEyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDExMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCAxMTQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgMTE1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDExNiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCAxMTcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgMTE4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDExOSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCAxMjAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgMTIxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDEyMiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCAxMjMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgMTI0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDEyNSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCAxMjYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgMTI3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMzX1ZBTCAgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDQgKEludGVycnVwdHMgMTI4Li4xNTkpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzQgICAgMAorCisvKgorLy8gSW50ZXJydXB0cyAxMjguLjE1OQorLy8gICA8by4wPiAgSW50ZXJydXB0IDEyOCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMT4gIEludGVycnVwdCAxMjkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI+ICBJbnRlcnJ1cHQgMTMwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zPiAgSW50ZXJydXB0IDEzMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uND4gIEludGVycnVwdCAxMzIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjU+ICBJbnRlcnJ1cHQgMTMzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by42PiAgSW50ZXJydXB0IDEzNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNz4gIEludGVycnVwdCAxMzUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjg+ICBJbnRlcnJ1cHQgMTM2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by45PiAgSW50ZXJydXB0IDEzNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTA+IEludGVycnVwdCAxMzggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjExPiBJbnRlcnJ1cHQgMTM5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMj4gSW50ZXJydXB0IDE0MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTM+IEludGVycnVwdCAxNDEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE0PiBJbnRlcnJ1cHQgMTQyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNT4gSW50ZXJydXB0IDE0MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTY+IEludGVycnVwdCAxNDQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE3PiBJbnRlcnJ1cHQgMTQ1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOD4gSW50ZXJydXB0IDE0NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTk+IEludGVycnVwdCAxNDcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIwPiBJbnRlcnJ1cHQgMTQ4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMT4gSW50ZXJydXB0IDE0OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjI+IEludGVycnVwdCAxNTAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIzPiBJbnRlcnJ1cHQgMTUxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yND4gSW50ZXJydXB0IDE1MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjU+IEludGVycnVwdCAxNTMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI2PiBJbnRlcnJ1cHQgMTU0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNz4gSW50ZXJydXB0IDE1NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjg+IEludGVycnVwdCAxNTYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI5PiBJbnRlcnJ1cHQgMTU3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMD4gSW50ZXJydXB0IDE1OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzE+IEludGVycnVwdCAxNTkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzRfVkFMICAgICAgMHgwMDAwMDAwMAorCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIElUTlMgNSAoSW50ZXJydXB0cyAxNjAuLjE5MSkKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TNSAgICAwCisKKy8qCisvLyBJbnRlcnJ1cHRzIDE2MC4uMTkxCisvLyAgIDxvLjA+ICBJbnRlcnJ1cHQgMTYwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xPiAgSW50ZXJydXB0IDE2MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMj4gIEludGVycnVwdCAxNjIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjM+ICBJbnRlcnJ1cHQgMTYzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by40PiAgSW50ZXJydXB0IDE2NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNT4gIEludGVycnVwdCAxNjUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjY+ICBJbnRlcnJ1cHQgMTY2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by43PiAgSW50ZXJydXB0IDE2NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOD4gIEludGVycnVwdCAxNjggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjk+ICBJbnRlcnJ1cHQgMTY5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMD4gSW50ZXJydXB0IDE3MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTE+IEludGVycnVwdCAxNzEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEyPiBJbnRlcnJ1cHQgMTcyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMz4gSW50ZXJydXB0IDE3MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTQ+IEludGVycnVwdCAxNzQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE1PiBJbnRlcnJ1cHQgMTc1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNj4gSW50ZXJydXB0IDE3NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTc+IEludGVycnVwdCAxNzcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE4PiBJbnRlcnJ1cHQgMTc4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOT4gSW50ZXJydXB0IDE3OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjA+IEludGVycnVwdCAxODAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIxPiBJbnRlcnJ1cHQgMTgxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMj4gSW50ZXJydXB0IDE4MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjM+IEludGVycnVwdCAxODMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI0PiBJbnRlcnJ1cHQgMTg0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNT4gSW50ZXJydXB0IDE4NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjY+IEludGVycnVwdCAxODYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI3PiBJbnRlcnJ1cHQgMTg3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOD4gSW50ZXJydXB0IDE4OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjk+IEludGVycnVwdCAxODkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMwPiBJbnRlcnJ1cHQgMTkwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMT4gSW50ZXJydXB0IDE5MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TNV9WQUwgICAgICAweDAwMDAwMDAwCisKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgSVROUyA2IChJbnRlcnJ1cHRzIDE5Mi4uMjIzKQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlM2ICAgIDAKKworLyoKKy8vIEludGVycnVwdHMgMTkyLi4yMjMKKy8vICAgPG8uMD4gIEludGVycnVwdCAxOTIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgMTkzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDE5NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCAxOTUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMTk2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDE5NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAxOTggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMTk5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDIwMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAyMDEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMjAyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDIwMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAyMDQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMjA1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDIwNiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAyMDcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgMjA4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDIwOSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCAyMTAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgMjExIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDIxMiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCAyMTMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgMjE0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDIxNSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCAyMTYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgMjE3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDIxOCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCAyMTkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgMjIwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDIyMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCAyMjIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgMjIzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlM2X1ZBTCAgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDcgKEludGVycnVwdHMgMjI0Li4yNTUpCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzcgICAgMAorCisvKgorLy8gSW50ZXJydXB0cyAyMjQuLjI1NQorLy8gICA8by4wPiAgSW50ZXJydXB0IDIyNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMT4gIEludGVycnVwdCAyMjUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI+ICBJbnRlcnJ1cHQgMjI2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zPiAgSW50ZXJydXB0IDIyNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uND4gIEludGVycnVwdCAyMjggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjU+ICBJbnRlcnJ1cHQgMjI5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by42PiAgSW50ZXJydXB0IDIzMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNz4gIEludGVycnVwdCAyMzEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjg+ICBJbnRlcnJ1cHQgMjMyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by45PiAgSW50ZXJydXB0IDIzMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTA+IEludGVycnVwdCAyMzQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjExPiBJbnRlcnJ1cHQgMjM1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMj4gSW50ZXJydXB0IDIzNiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTM+IEludGVycnVwdCAyMzcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE0PiBJbnRlcnJ1cHQgMjM4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNT4gSW50ZXJydXB0IDIzOSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTY+IEludGVycnVwdCAyNDAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE3PiBJbnRlcnJ1cHQgMjQxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOD4gSW50ZXJydXB0IDI0MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTk+IEludGVycnVwdCAyNDMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIwPiBJbnRlcnJ1cHQgMjQ0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMT4gSW50ZXJydXB0IDI0NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjI+IEludGVycnVwdCAyNDYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIzPiBJbnRlcnJ1cHQgMjQ3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yND4gSW50ZXJydXB0IDI0OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjU+IEludGVycnVwdCAyNDkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI2PiBJbnRlcnJ1cHQgMjUwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNz4gSW50ZXJydXB0IDI1MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjg+IEludGVycnVwdCAyNTIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI5PiBJbnRlcnJ1cHQgMjUzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMD4gSW50ZXJydXB0IDI1NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzE+IEludGVycnVwdCAyNTUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisqLworI2RlZmluZSBOVklDX0lOSVRfSVROUzdfVkFMICAgICAgMHgwMDAwMDAwMAorCisvKgorLy8gICA8L2U+CisqLworCisvKgorLy8gICA8ZT5Jbml0aWFsaXplIElUTlMgOCAoSW50ZXJydXB0cyAyNTYuLjI4NykKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TOCAgICAwCisKKy8qCisvLyBJbnRlcnJ1cHRzIDI1Ni4uMjg3CisvLyAgIDxvLjA+ICBJbnRlcnJ1cHQgMjU2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xPiAgSW50ZXJydXB0IDI1NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMj4gIEludGVycnVwdCAyNTggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjM+ICBJbnRlcnJ1cHQgMjU5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by40PiAgSW50ZXJydXB0IDI2MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNT4gIEludGVycnVwdCAyNjEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjY+ICBJbnRlcnJ1cHQgMjYyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by43PiAgSW50ZXJydXB0IDI2MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOD4gIEludGVycnVwdCAyNjQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjk+ICBJbnRlcnJ1cHQgMjY1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMD4gSW50ZXJydXB0IDI2NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTE+IEludGVycnVwdCAyNjcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEyPiBJbnRlcnJ1cHQgMjY4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMz4gSW50ZXJydXB0IDI2OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTQ+IEludGVycnVwdCAyNzAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE1PiBJbnRlcnJ1cHQgMjcxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNj4gSW50ZXJydXB0IDI3MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTc+IEludGVycnVwdCAyNzMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE4PiBJbnRlcnJ1cHQgMjc0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xOT4gSW50ZXJydXB0IDI3NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjA+IEludGVycnVwdCAyNzYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIxPiBJbnRlcnJ1cHQgMjc3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMj4gSW50ZXJydXB0IDI3OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjM+IEludGVycnVwdCAyNzkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI0PiBJbnRlcnJ1cHQgMjgwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNT4gSW50ZXJydXB0IDI4MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjY+IEludGVycnVwdCAyODIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI3PiBJbnRlcnJ1cHQgMjgzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOD4gSW50ZXJydXB0IDI4NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjk+IEludGVycnVwdCAyODUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMwPiBJbnRlcnJ1cHQgMjg2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4zMT4gSW50ZXJydXB0IDI4NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKyovCisjZGVmaW5lIE5WSUNfSU5JVF9JVE5TOF9WQUwgICAgICAweDAwMDAwMDAwCisKKy8qCisvLyAgIDwvZT4KKyovCisKKy8qCisvLyAgIDxlPkluaXRpYWxpemUgSVROUyA5IChJbnRlcnJ1cHRzIDI4OC4uMzE5KQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlM5ICAgIDAKKworLyoKKy8vIEludGVycnVwdHMgMjg4Li4zMTkKKy8vICAgPG8uMD4gIEludGVycnVwdCAyODggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgMjg5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDI5MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCAyOTEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMjkyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDI5MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAyOTQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMjk1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDI5NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAyOTcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMjk4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDI5OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAzMDAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMzAxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDMwMiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAzMDMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgMzA0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDMwNSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCAzMDYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgMzA3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDMwOCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCAzMDkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgMzEwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDMxMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCAzMTIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgMzEzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDMxNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCAzMTUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgMzE2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDMxNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCAzMTggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgMzE5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlM5X1ZBTCAgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDEwIChJbnRlcnJ1cHRzIDMyMC4uMzUxKQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMCAgIDAKKworLyoKKy8vIEludGVycnVwdHMgMzIwLi4zNTEKKy8vICAgPG8uMD4gIEludGVycnVwdCAzMjAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgMzIxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDMyMiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCAzMjMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMzI0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDMyNSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAzMjYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMzI3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDMyOCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAzMjkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMzMwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDMzMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAzMzIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMzMzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDMzNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAzMzUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgMzM2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDMzNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCAzMzggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgMzM5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDM0MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCAzNDEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgMzQyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDM0MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCAzNDQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgMzQ1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDM0NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCAzNDcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgMzQ4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDM0OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCAzNTAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgMzUxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMF9WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDExIChJbnRlcnJ1cHRzIDM1Mi4uMzgzKQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMSAgIDAKKworLyoKKy8vIEludGVycnVwdHMgMzUyLi4zODMKKy8vICAgPG8uMD4gIEludGVycnVwdCAzNTIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgMzUzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDM1NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCAzNTUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMzU2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDM1NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAzNTggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMzU5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDM2MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAzNjEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMzYyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDM2MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAzNjQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMzY1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDM2NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAzNjcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgMzY4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDM2OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCAzNzAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgMzcxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDM3MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCAzNzMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgMzc0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDM3NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCAzNzYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgMzc3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDM3OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCAzNzkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgMzgwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDM4MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCAzODIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgMzgzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMV9WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDEyIChJbnRlcnJ1cHRzIDM4NC4uNDE1KQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMiAgIDAKKworLyoKKy8vIEludGVycnVwdHMgMzg0Li40MTUKKy8vICAgPG8uMD4gIEludGVycnVwdCAzODQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgMzg1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDM4NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCAzODcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgMzg4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDM4OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCAzOTAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgMzkxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDM5MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCAzOTMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgMzk0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDM5NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCAzOTYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgMzk3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDM5OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCAzOTkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgNDAwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDQwMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCA0MDIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgNDAzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDQwNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCA0MDUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgNDA2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDQwNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCA0MDggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgNDA5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDQxMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCA0MTEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgNDEyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDQxMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCA0MTQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgNDE1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMl9WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDEzIChJbnRlcnJ1cHRzIDQxNi4uNDQ3KQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxMyAgIDAKKworLyoKKy8vIEludGVycnVwdHMgNDE2Li40NDcKKy8vICAgPG8uMD4gIEludGVycnVwdCA0MTYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgNDE3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDQxOCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCA0MTkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgNDIwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDQyMSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCA0MjIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgNDIzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDQyNCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCA0MjUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgNDI2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDQyNyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCA0MjggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgNDI5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDQzMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCA0MzEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgNDMyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDQzMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCA0MzQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgNDM1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDQzNiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCA0MzcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgNDM4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDQzOSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCA0NDAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgNDQxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDQ0MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCA0NDMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgNDQ0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDQ0NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCA0NDYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgNDQ3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxM19WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDE0IChJbnRlcnJ1cHRzIDQ0OC4uNDc5KQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxNCAgIDAKKworLyoKKy8vIEludGVycnVwdHMgNDQ4Li40NzkKKy8vICAgPG8uMD4gIEludGVycnVwdCA0NDggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgNDQ5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDQ1MCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCA0NTEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgNDUyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDQ1MyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCA0NTQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgNDU1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDQ1NiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCA0NTcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgNDU4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDQ1OSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCA0NjAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgNDYxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDQ2MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCA0NjMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgNDY0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDQ2NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCA0NjYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgNDY3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDQ2OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCA0NjkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgNDcwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDQ3MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCA0NzIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgNDczIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDQ3NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCA0NzUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgNDc2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDQ3NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCA0NzggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgNDc5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxNF9WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vICAgPGU+SW5pdGlhbGl6ZSBJVE5TIDE1IChJbnRlcnJ1cHRzIDQ4MC4uNTExKQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxNSAgIDAKKworLyoKKy8vIEludGVycnVwdHMgNDgwLi41MTEKKy8vICAgPG8uMD4gIEludGVycnVwdCA0ODAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE+ICBJbnRlcnJ1cHQgNDgxIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yPiAgSW50ZXJydXB0IDQ4MiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMz4gIEludGVycnVwdCA0ODMgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjQ+ICBJbnRlcnJ1cHQgNDg0IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by41PiAgSW50ZXJydXB0IDQ4NSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uNj4gIEludGVycnVwdCA0ODYgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjc+ICBJbnRlcnJ1cHQgNDg3IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by44PiAgSW50ZXJydXB0IDQ4OCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uOT4gIEludGVycnVwdCA0ODkgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEwPiBJbnRlcnJ1cHQgNDkwIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xMT4gSW50ZXJydXB0IDQ5MSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTI+IEludGVycnVwdCA0OTIgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjEzPiBJbnRlcnJ1cHQgNDkzIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xND4gSW50ZXJydXB0IDQ5NCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTU+IEludGVycnVwdCA0OTUgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE2PiBJbnRlcnJ1cHQgNDk2IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4xNz4gSW50ZXJydXB0IDQ5NyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMTg+IEludGVycnVwdCA0OTggPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjE5PiBJbnRlcnJ1cHQgNDk5IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMD4gSW50ZXJydXB0IDUwMCA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjE+IEludGVycnVwdCA1MDEgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjIyPiBJbnRlcnJ1cHQgNTAyIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yMz4gSW50ZXJydXB0IDUwMyA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjQ+IEludGVycnVwdCA1MDQgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI1PiBJbnRlcnJ1cHQgNTA1IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yNj4gSW50ZXJydXB0IDUwNiA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMjc+IEludGVycnVwdCA1MDcgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjI4PiBJbnRlcnJ1cHQgNTA4IDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorLy8gICA8by4yOT4gSW50ZXJydXB0IDUwOSA8MD0+IFNlY3VyZSBzdGF0ZSA8MT0+IE5vbi1TZWN1cmUgc3RhdGUKKy8vICAgPG8uMzA+IEludGVycnVwdCA1MTAgPDA9PiBTZWN1cmUgc3RhdGUgPDE9PiBOb24tU2VjdXJlIHN0YXRlCisvLyAgIDxvLjMxPiBJbnRlcnJ1cHQgNTExIDwwPT4gU2VjdXJlIHN0YXRlIDwxPT4gTm9uLVNlY3VyZSBzdGF0ZQorKi8KKyNkZWZpbmUgTlZJQ19JTklUX0lUTlMxNV9WQUwgICAgIDB4MDAwMDAwMDAKKworLyoKKy8vICAgPC9lPgorKi8KKworLyoKKy8vIDwvaD4KKyovCisKKworCisvKgorICAgIG1heCAxMjggU0FVIHJlZ2lvbnMuCisgICAgU0FVIHJlZ2lvbnMgYXJlIGRlZmluZWQgaW4gcGFydGl0aW9uLmgKKyAqLworCisjZGVmaW5lIFNBVV9JTklUX1JFR0lPTihuKSBcCisgICAgU0FVLT5STlIgID0gIChuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYgU0FVX1JOUl9SRUdJT05fTXNrKTsgXAorICAgIFNBVS0+UkJBUiA9ICAoU0FVX0lOSVRfU1RBUlQjI24gICAgICAgICAgICAgICAgICAgICAmIFNBVV9SQkFSX0JBRERSX01zayk7IFwKKyAgICBTQVUtPlJMQVIgPSAgKFNBVV9JTklUX0VORCMjbiAgICAgICAgICAgICAgICAgICAgICAgJiBTQVVfUkxBUl9MQUREUl9Nc2spIHwgXAorICAgICAgICAgICAgICAgICgoU0FVX0lOSVRfTlNDIyNuIDw8IFNBVV9STEFSX05TQ19Qb3MpICAmIFNBVV9STEFSX05TQ19Nc2spICAgfCAxVQorCisvKioKKyAgXGJyaWVmICAgU2V0dXAgYSBTQVUgUmVnaW9uCisgIFxkZXRhaWxzIFdyaXRlcyB0aGUgcmVnaW9uIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBpbiBTQVVfUmVnaW9uIHRvIHRoZQorICAgICAgICAgICByZWdpc3RlcnMgU0FVX1JOUiwgU0FVX1JCQVIsIGFuZCBTQVVfUkxBUgorICovCitfX1NUQVRJQ19JTkxJTkUgdm9pZCBUWl9TQVVfU2V0dXAgKHZvaWQpCit7CisKKyNpZiBkZWZpbmVkIChfX1NBVVJFR0lPTl9QUkVTRU5UKSAmJiAoX19TQVVSRUdJT05fUFJFU0VOVCA9PSAxVSkKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMCkgJiYgKFNBVV9JTklUX1JFR0lPTjAgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDApOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMSkgJiYgKFNBVV9JTklUX1JFR0lPTjEgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDEpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMikgJiYgKFNBVV9JTklUX1JFR0lPTjIgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDIpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9OMykgJiYgKFNBVV9JTklUX1JFR0lPTjMgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDMpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONCkgJiYgKFNBVV9JTklUX1JFR0lPTjQgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDQpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONSkgJiYgKFNBVV9JTklUX1JFR0lPTjUgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDUpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONikgJiYgKFNBVV9JTklUX1JFR0lPTjYgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDYpOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0FVX0lOSVRfUkVHSU9ONykgJiYgKFNBVV9JTklUX1JFR0lPTjcgPT0gMVUpCisgICAgU0FVX0lOSVRfUkVHSU9OKDcpOworICAjZW5kaWYKKworICAvKiByZXBlYXQgdGhpcyBmb3IgYWxsIHBvc3NpYmxlIFNBVSByZWdpb25zICovCisKKyNlbmRpZiAvKiBkZWZpbmVkIChfX1NBVVJFR0lPTl9QUkVTRU5UKSAmJiAoX19TQVVSRUdJT05fUFJFU0VOVCA9PSAxVSkgKi8KKworCisgICNpZiBkZWZpbmVkIChTQVVfSU5JVF9DVFJMKSAmJiAoU0FVX0lOSVRfQ1RSTCA9PSAxVSkKKyAgICBTQVUtPkNUUkwgPSAoKFNBVV9JTklUX0NUUkxfRU5BQkxFIDw8IFNBVV9DVFJMX0VOQUJMRV9Qb3MpICYgU0FVX0NUUkxfRU5BQkxFX01zaykgfAorICAgICAgICAgICAgICAgICgoU0FVX0lOSVRfQ1RSTF9BTExOUyAgPDwgU0FVX0NUUkxfQUxMTlNfUG9zKSAgJiBTQVVfQ1RSTF9BTExOU19Nc2spICAgOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoU0NCX0NTUl9BSVJDUl9JTklUKSAmJiAoU0NCX0NTUl9BSVJDUl9JTklUID09IDFVKQorICAgIFNDQi0+U0NSICAgPSAoU0NCLT5TQ1IgICAmIH4oU0NCX1NDUl9TTEVFUERFRVBTX01zayAgICApKSB8CisgICAgICAgICAgICAgICAgICAgKChTQ0JfQ1NSX0RFRVBTTEVFUFNfVkFMICAgICA8PCBTQ0JfU0NSX1NMRUVQREVFUFNfUG9zKSAgICAgJiBTQ0JfU0NSX1NMRUVQREVFUFNfTXNrKTsKKworICAgIFNDQi0+QUlSQ1IgPSAoU0NCLT5BSVJDUiAmIH4oU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrICAgfCBTQ0JfQUlSQ1JfU1lTUkVTRVRSRVFTX01zayB8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQ0JfQUlSQ1JfQkZIRk5NSU5TX01zayB8IFNDQl9BSVJDUl9QUklTX01zayAgICAgICAgICApKSAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICgoMHgwNUZBVSAgICAgICAgICAgICAgICAgICAgPDwgU0NCX0FJUkNSX1ZFQ1RLRVlfUG9zKSAgICAgICYgU0NCX0FJUkNSX1ZFQ1RLRVlfTXNrKSAgICAgIHwKKyAgICAgICAgICAgICAgICAgICAoKFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfVkFMIDw8IFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfUG9zKSAmIFNDQl9BSVJDUl9TWVNSRVNFVFJFUVNfTXNrKSB8CisgICAgICAgICAgICAgICAgICAgKChTQ0JfQUlSQ1JfUFJJU19WQUwgICAgICAgICA8PCBTQ0JfQUlSQ1JfUFJJU19Qb3MpICAgICAgICAgJiBTQ0JfQUlSQ1JfUFJJU19Nc2spICAgICAgICAgfAorICAgICAgICAgICAgICAgICAgICgoU0NCX0FJUkNSX0JGSEZOTUlOU19WQUwgICAgPDwgU0NCX0FJUkNSX0JGSEZOTUlOU19Qb3MpICAgICYgU0NCX0FJUkNSX0JGSEZOTUlOU19Nc2spOworICAjZW5kaWYgLyogZGVmaW5lZCAoU0NCX0NTUl9BSVJDUl9JTklUKSAmJiAoU0NCX0NTUl9BSVJDUl9JTklUID09IDFVKSAqLworCisgICNpZiBkZWZpbmVkIChfX0ZQVV9VU0VEKSAmJiAoX19GUFVfVVNFRCA9PSAxVSkgJiYgXAorICAgICAgZGVmaW5lZCAoVFpfRlBVX05TX1VTQUdFKSAmJiAoVFpfRlBVX05TX1VTQUdFID09IDFVKQorCisgICAgU0NCLT5OU0FDUiA9IChTQ0ItPk5TQUNSICYgfihTQ0JfTlNBQ1JfQ1AxMF9Nc2sgfCBTQ0JfTlNBQ1JfQ1AxMV9Nc2spKSB8CisgICAgICAgICAgICAgICAgICAgKChTQ0JfTlNBQ1JfQ1AxMF8xMV9WQUwgPDwgU0NCX05TQUNSX0NQMTBfUG9zKSAmIChTQ0JfTlNBQ1JfQ1AxMF9Nc2sgfCBTQ0JfTlNBQ1JfQ1AxMV9Nc2spKTsKKworICAgIEZQVS0+RlBDQ1IgPSAoRlBVLT5GUENDUiAmIH4oRlBVX0ZQQ0NSX1RTX01zayB8IEZQVV9GUENDUl9DTFJPTlJFVFNfTXNrIHwgRlBVX0ZQQ0NSX0NMUk9OUkVUX01zaykpIHwKKyAgICAgICAgICAgICAgICAgICAoKEZQVV9GUENDUl9UU19WQUwgICAgICAgIDw8IEZQVV9GUENDUl9UU19Qb3MgICAgICAgKSAmIEZQVV9GUENDUl9UU19Nc2sgICAgICAgKSB8CisgICAgICAgICAgICAgICAgICAgKChGUFVfRlBDQ1JfQ0xST05SRVRTX1ZBTCA8PCBGUFVfRlBDQ1JfQ0xST05SRVRTX1BvcykgJiBGUFVfRlBDQ1JfQ0xST05SRVRTX01zaykgfAorICAgICAgICAgICAgICAgICAgICgoRlBVX0ZQQ0NSX0NMUk9OUkVUX1ZBTCAgPDwgRlBVX0ZQQ0NSX0NMUk9OUkVUX1BvcyApICYgRlBVX0ZQQ0NSX0NMUk9OUkVUX01zayApOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMwKSAmJiAoTlZJQ19JTklUX0lUTlMwID09IDFVKQorICAgIE5WSUMtPklUTlNbMF0gPSBOVklDX0lOSVRfSVROUzBfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMxKSAmJiAoTlZJQ19JTklUX0lUTlMxID09IDFVKQorICAgIE5WSUMtPklUTlNbMV0gPSBOVklDX0lOSVRfSVROUzFfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMyKSAmJiAoTlZJQ19JTklUX0lUTlMyID09IDFVKQorICAgIE5WSUMtPklUTlNbMl0gPSBOVklDX0lOSVRfSVROUzJfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMzKSAmJiAoTlZJQ19JTklUX0lUTlMzID09IDFVKQorICAgIE5WSUMtPklUTlNbM10gPSBOVklDX0lOSVRfSVROUzNfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM0KSAmJiAoTlZJQ19JTklUX0lUTlM0ID09IDFVKQorICAgIE5WSUMtPklUTlNbNF0gPSBOVklDX0lOSVRfSVROUzRfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM1KSAmJiAoTlZJQ19JTklUX0lUTlM1ID09IDFVKQorICAgIE5WSUMtPklUTlNbNV0gPSBOVklDX0lOSVRfSVROUzVfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM2KSAmJiAoTlZJQ19JTklUX0lUTlM2ID09IDFVKQorICAgIE5WSUMtPklUTlNbNl0gPSBOVklDX0lOSVRfSVROUzZfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM3KSAmJiAoTlZJQ19JTklUX0lUTlM3ID09IDFVKQorICAgIE5WSUMtPklUTlNbN10gPSBOVklDX0lOSVRfSVROUzdfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM4KSAmJiAoTlZJQ19JTklUX0lUTlM4ID09IDFVKQorICAgIE5WSUMtPklUTlNbOF0gPSBOVklDX0lOSVRfSVROUzhfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlM5KSAmJiAoTlZJQ19JTklUX0lUTlM5ID09IDFVKQorICAgIE5WSUMtPklUTlNbOV0gPSBOVklDX0lOSVRfSVROUzlfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMxMCkgJiYgKE5WSUNfSU5JVF9JVE5TMTAgPT0gMVUpCisgICAgTlZJQy0+SVROU1sxMF0gPSBOVklDX0lOSVRfSVROUzEwX1ZBTDsKKyAgI2VuZGlmCisKKyAgI2lmIGRlZmluZWQgKE5WSUNfSU5JVF9JVE5TMTEpICYmIChOVklDX0lOSVRfSVROUzExID09IDFVKQorICAgIE5WSUMtPklUTlNbMTFdID0gTlZJQ19JTklUX0lUTlMxMV9WQUw7CisgICNlbmRpZgorCisgICNpZiBkZWZpbmVkIChOVklDX0lOSVRfSVROUzEyKSAmJiAoTlZJQ19JTklUX0lUTlMxMiA9PSAxVSkKKyAgICBOVklDLT5JVE5TWzEyXSA9IE5WSUNfSU5JVF9JVE5TMTJfVkFMOworICAjZW5kaWYKKworICAjaWYgZGVmaW5lZCAoTlZJQ19JTklUX0lUTlMxMykgJiYgKE5WSUNfSU5JVF9JVE5TMTMgPT0gMVUpCisgICAgTlZJQy0+SVROU1sxM10gPSBOVklDX0lOSVRfSVROUzEzX1ZBTDsKKyAgI2VuZGlmCisKKyAgI2lmIGRlZmluZWQgKE5WSUNfSU5JVF9JVE5TMTQpICYmIChOVklDX0lOSVRfSVROUzE0ID09IDFVKQorICAgIE5WSUMtPklUTlNbMTRdID0gTlZJQ19JTklUX0lUTlMxNF9WQUw7CisgICNlbmRpZgorCisgICNpZiBkZWZpbmVkIChOVklDX0lOSVRfSVROUzE1KSAmJiAoTlZJQ19JTklUX0lUTlMxNSA9PSAxVSkKKyAgICBOVklDLT5JVE5TWzE1XSA9IE5WSUNfSU5JVF9JVE5TMTVfVkFMOworICAjZW5kaWYKKworICAvKiByZXBlYXQgdGhpcyBmb3IgYWxsIHBvc3NpYmxlIElUTlMgZWxlbWVudHMgKi8KKworfQorCisjZW5kaWYgIC8qIFBBUlRJVElPTl9BUk1DTTU1X0ggKi8KZGlmZiAtLWdpdCBhL0RldmljZS9BUk0vQVJNQ001NS9JbmNsdWRlL3N5c3RlbV9BUk1DTTU1LmggYi9EZXZpY2UvQVJNL0FSTUNNNTUvSW5jbHVkZS9zeXN0ZW1fQVJNQ001NS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwYjA1OGYKLS0tIC9kZXYvbnVsbAorKysgYi9EZXZpY2UvQVJNL0FSTUNNNTUvSW5jbHVkZS9zeXN0ZW1fQVJNQ001NS5oCkBAIC0wLDAgKzEsNjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8vKioKKyAqIEBmaWxlICAgICBzeXN0ZW1fQVJNQ001NS5oCisgKiBAYnJpZWYgICAgQ01TSVMgRGV2aWNlIFN5c3RlbSBIZWFkZXIgRmlsZSBmb3IKKyAqICAgICAgICAgICBBUk1DTTU1IERldmljZQorICogQHZlcnNpb24gIFYxLjAuMAorICogQGRhdGUgICAgIDIwLiBGZWJydWFyeSAyMDIwCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoKKyAqIENvcHlyaWdodCAoYykgMjAyMCBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIHd3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZm5kZWYgU1lTVEVNX0FSTUNNNTVfSAorI2RlZmluZSBTWVNURU1fQVJNQ001NV9ICisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLyoqCisgIFxicmllZiBFeGNlcHRpb24gLyBJbnRlcnJ1cHQgSGFuZGxlciBGdW5jdGlvbiBQcm90b3R5cGUKKyovCit0eXBlZGVmIHZvaWQoKlZFQ1RPUl9UQUJMRV9UeXBlKSh2b2lkKTsKKworLyoqCisgIFxicmllZiBTeXN0ZW0gQ2xvY2sgRnJlcXVlbmN5IChDb3JlIENsb2NrKQorKi8KK2V4dGVybiB1aW50MzJfdCBTeXN0ZW1Db3JlQ2xvY2s7CisKKy8qKgorICBcYnJpZWYgU2V0dXAgdGhlIG1pY3JvY29udHJvbGxlciBzeXN0ZW0uCisKKyAgIEluaXRpYWxpemUgdGhlIFN5c3RlbSBhbmQgdXBkYXRlIHRoZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuCisgKi8KK2V4dGVybiB2b2lkIFN5c3RlbUluaXQgKHZvaWQpOworCisKKy8qKgorICBcYnJpZWYgIFVwZGF0ZSBTeXN0ZW1Db3JlQ2xvY2sgdmFyaWFibGUuCisKKyAgIFVwZGF0ZXMgdGhlIFN5c3RlbUNvcmVDbG9jayB3aXRoIGN1cnJlbnQgY29yZSBDbG9jayByZXRyaWV2ZWQgZnJvbSBjcHUgcmVnaXN0ZXJzLgorICovCitleHRlcm4gdm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpOworCisjaWZkZWYgX19jcGx1c3BsdXMKK30KKyNlbmRpZgorCisjZW5kaWYgLyogU1lTVEVNX0FSTUNNNTVfSCAqLwpkaWZmIC0tZ2l0IGEvRGV2aWNlL0FSTS9BUk1DTTU1L1NvdXJjZS9BUk0vQVJNQ001NV9hYzYuc2N0IGIvRGV2aWNlL0FSTS9BUk1DTTU1L1NvdXJjZS9BUk0vQVJNQ001NV9hYzYuc2N0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyZmU0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL0FSTS9BUk1DTTU1X2FjNi5zY3QKQEAgLTAsMCArMSw4NSBAQAorIyEgYXJtY2xhbmcgLUUgLS10YXJnZXQ9YXJtLWFybS1ub25lLWVhYmkgLW1jcHU9Y29ydGV4LW01NSAteGMKKzsgY29tbWFuZCBhYm92ZSBNVVNUIGJlIGluIGZpcnN0IGxpbmUgKG5vIGNvbW1lbnQgYWJvdmUhKQorCisvKgorOy0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tCisqLworCisvKiBtZW1vcnkgcmVnaW9ucyBhcmU6CisgICAgICAgc2VjdXJlIFJPTTogMHgxMDAwMDAwMAorICAgbm9uLXNlY3VyZSBST006IDB4MDAwMDAwMDAKKyAgIAorICAgICAgIHNlY3VyZSBSQU06IDB4MzAwMDAwMDAKKyAgIG5vbi1zZWN1cmUgUkFNOiAweDIwMDAwMDAwCisgKi8KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0gRmxhc2ggQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCis7IDxoPiBGbGFzaCBDb25maWd1cmF0aW9uCis7ICAgPG8wPiBGbGFzaCBCYXNlIEFkZHJlc3MgPDB4MC0weEZGRkZGRkZGOjg+Cis7ICAgPG8xPiBGbGFzaCBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7IDwvaD4KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIF9fUk9NX0JBU0UgICAgICAweDAwMDAwMDAwCisjZGVmaW5lIF9fUk9NX1NJWkUgICAgICAweDAwMDgwMDAwCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEVtYmVkZGVkIFJBTSBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorOyA8aD4gUkFNIENvbmZpZ3VyYXRpb24KKzsgICA8bzA+IFJBTSBCYXNlIEFkZHJlc3MgICAgPDB4MC0weEZGRkZGRkZGOjg+Cis7ICAgPG8xPiBSQU0gU2l6ZSAoaW4gQnl0ZXMpIDwweDAtMHhGRkZGRkZGRjo4PgorOyA8L2g+CisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBfX1JBTV9CQVNFICAgICAgMHgyMDAwMDAwMAorI2RlZmluZSBfX1JBTV9TSVpFICAgICAgMHgwMDA0MDAwMAorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGFjayAvIEhlYXAgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKzsgPGg+IFN0YWNrIC8gSGVhcCBDb25maWd1cmF0aW9uCis7ICAgPG8wPiBTdGFjayBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+Cis7ICAgPG8xPiBIZWFwIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKzsgPC9oPgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgX19TVEFDS19TSVpFICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgX19IRUFQX1NJWkUgICAgIDB4MDAwMDBDMDAKKworLyoKKzstLS0tLS0tLS0tLS0tIDw8PCBlbmQgb2YgY29uZmlndXJhdGlvbiBzZWN0aW9uID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFVzZXIgU3RhY2sgJiBIZWFwIGJvdW5kYXJ5IGRlZmluaXRpb24KKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisjZGVmaW5lIF9fU1RBQ0tfVE9QICAgIChfX1JBTV9CQVNFICsgX19SQU1fU0laRSkgICAgLyogc3RhcnRzIGF0IGVuZCBvZiBSQU0gKi8KKyNkZWZpbmUgX19IRUFQX0JBU0UgICAgKEFsaWduRXhwcigrMCwgOCkpICAgICAgICAgICAvKiBzdGFydHMgYWZ0ZXIgUldfUkFNIHNlY3Rpb24sIDggYnl0ZSBhbGlnbmVkICovCisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNjYXR0ZXIgRmlsZSBEZWZpbml0aW9ucyBkZWZpbml0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworI2RlZmluZSBfX1JPX0JBU0UgICAgICAgX19ST01fQkFTRQorI2RlZmluZSBfX1JPX1NJWkUgICAgICAgX19ST01fU0laRQorCisjZGVmaW5lIF9fUldfQkFTRSAgICAgICBfX1JBTV9CQVNFCisjZGVmaW5lIF9fUldfU0laRSAgICAgIChfX1JBTV9TSVpFIC0gX19TVEFDS19TSVpFIC0gX19IRUFQX1NJWkUpCisKKworTFJfUk9NIF9fUk9fQkFTRSBfX1JPX1NJWkUgIHsgICAgICAgICAgICAgICAgICAgICAgIDsgbG9hZCByZWdpb24gc2l6ZV9yZWdpb24KKyAgRVJfUk9NIF9fUk9fQkFTRSBfX1JPX1NJWkUgIHsgICAgICAgICAgICAgICAgICAgICA7IGxvYWQgYWRkcmVzcyA9IGV4ZWN1dGlvbiBhZGRyZXNzCisgICAqLm8gKFJFU0VULCArRmlyc3QpCisgICAqKEluUm9vdCQkU2VjdGlvbnMpCis7ICAgKihWZW5lZXIkJENNU0UpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgdW5jb21tZW50IGZvciBzZWN1cmUgYXBwbGljYXRpb25zCisgICAuQU5ZICgrUk8pCisgICAuQU5ZICgrWE8pCisgIH0KKworICBSV19SQU0gX19SV19CQVNFIF9fUldfU0laRSAgeyAgICAgICAgICAgICAgICAgICAgIDsgUlcgZGF0YQorICAgLkFOWSAoK1JXICtaSSkKKyAgfQorCisjaWYgX19IRUFQX1NJWkUgPiAwCisgIEFSTV9MSUJfSEVBUCAgX19IRUFQX0JBU0UgRU1QVFkgIF9fSEVBUF9TSVpFICB7ICAgOyBSZXNlcnZlIGVtcHR5IHJlZ2lvbiBmb3IgaGVhcAorICB9CisjZW5kaWYKKworICBBUk1fTElCX1NUQUNLIF9fU1RBQ0tfVE9QIEVNUFRZIC1fX1NUQUNLX1NJWkUgeyAgIDsgUmVzZXJ2ZSBlbXB0eSByZWdpb24gZm9yIHN0YWNrCisgIH0KK30KZGlmZiAtLWdpdCBhL0RldmljZS9BUk0vQVJNQ001NS9Tb3VyY2UvR0NDL2djY19hcm0ubGQgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL0dDQy9nY2NfYXJtLmxkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTQ1ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL0dDQy9nY2NfYXJtLmxkCkBAIC0wLDAgKzEsMzAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSAgICAgZ2NjX2FybS5sZAorICogQGJyaWVmICAgIEdOVSBMaW5rZXIgU2NyaXB0IGZvciBDb3J0ZXgtTSBiYXNlZCBkZXZpY2UKKyAqIEB2ZXJzaW9uICBWMi4wLjEKKyAqIEBkYXRlICAgICAxNy4gRGVjZW1iZXIgMjAxOQorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIHd3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKy8qCisgKi0tLS0tLS0tIDw8PCBVc2UgQ29uZmlndXJhdGlvbiBXaXphcmQgaW4gQ29udGV4dCBNZW51ID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyogbWVtb3J5IHJlZ2lvbnMgYXJlOgorICAgICAgIHNlY3VyZSBST006IDB4MTAwMDAwMDAKKyAgIG5vbi1zZWN1cmUgUk9NOiAweDAwMDAwMDAwCisKKyAgICAgICBzZWN1cmUgUkFNOiAweDMwMDAwMDAwCisgICBub24tc2VjdXJlIFJBTTogMHgyMDAwMDAwMAorICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGbGFzaCBDb25maWd1cmF0aW9uIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgPGg+IEZsYXNoIENvbmZpZ3VyYXRpb24KKyAgICA8bzA+IEZsYXNoIEJhc2UgQWRkcmVzcyA8MHgwLTB4RkZGRkZGRkY6OD4KKyAgICA8bzE+IEZsYXNoIFNpemUgKGluIEJ5dGVzKSA8MHgwLTB4RkZGRkZGRkY6OD4KKyAgPC9oPgorICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitfX1JPTV9CQVNFID0gMHgwMDAwMDAwMDsKK19fUk9NX1NJWkUgPSAweDAwMDQwMDAwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSBFbWJlZGRlZCBSQU0gQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDxoPiBSQU0gQ29uZmlndXJhdGlvbgorICAgIDxvMD4gUkFNIEJhc2UgQWRkcmVzcyAgICA8MHgwLTB4RkZGRkZGRkY6OD4KKyAgICA8bzE+IFJBTSBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+CisgIDwvaD4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCitfX1JBTV9CQVNFID0gMHgyMDAwMDAwMDsKK19fUkFNX1NJWkUgPSAweDAwMDIwMDAwOworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTdGFjayAvIEhlYXAgQ29uZmlndXJhdGlvbiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIDxoPiBTdGFjayAvIEhlYXAgQ29uZmlndXJhdGlvbgorICAgIDxvMD4gU3RhY2sgU2l6ZSAoaW4gQnl0ZXMpIDwweDAtMHhGRkZGRkZGRjo4PgorICAgIDxvMT4gSGVhcCBTaXplIChpbiBCeXRlcykgPDB4MC0weEZGRkZGRkZGOjg+CisgIDwvaD4KKyAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworX19TVEFDS19TSVpFID0gMHgwMDAwMDQwMDsKK19fSEVBUF9TSVpFICA9IDB4MDAwMDBDMDA7CisKKy8qCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tIDw8PCBlbmQgb2YgY29uZmlndXJhdGlvbiBzZWN0aW9uID4+PiAtLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworTUVNT1JZCit7CisgIEZMQVNIIChyeCkgIDogT1JJR0lOID0gX19ST01fQkFTRSwgTEVOR1RIID0gX19ST01fU0laRQorICBSQU0gICAocnd4KSA6IE9SSUdJTiA9IF9fUkFNX0JBU0UsIExFTkdUSCA9IF9fUkFNX1NJWkUKK30KKworLyogTGlua2VyIHNjcmlwdCB0byBwbGFjZSBzZWN0aW9ucyBhbmQgc3ltYm9sIHZhbHVlcy4gU2hvdWxkIGJlIHVzZWQgdG9nZXRoZXIKKyAqIHdpdGggb3RoZXIgbGlua2VyIHNjcmlwdCB0aGF0IGRlZmluZXMgbWVtb3J5IHJlZ2lvbnMgRkxBU0ggYW5kIFJBTS4KKyAqIEl0IHJlZmVyZW5jZXMgZm9sbG93aW5nIHN5bWJvbHMsIHdoaWNoIG11c3QgYmUgZGVmaW5lZCBpbiBjb2RlOgorICogICBSZXNldF9IYW5kbGVyIDogRW50cnkgb2YgcmVzZXQgaGFuZGxlcgorICoKKyAqIEl0IGRlZmluZXMgZm9sbG93aW5nIHN5bWJvbHMsIHdoaWNoIGNvZGUgY2FuIHVzZSB3aXRob3V0IGRlZmluaXRpb246CisgKiAgIF9fZXhpZHhfc3RhcnQKKyAqICAgX19leGlkeF9lbmQKKyAqICAgX19jb3B5X3RhYmxlX3N0YXJ0X18KKyAqICAgX19jb3B5X3RhYmxlX2VuZF9fCisgKiAgIF9femVyb190YWJsZV9zdGFydF9fCisgKiAgIF9femVyb190YWJsZV9lbmRfXworICogICBfX2V0ZXh0CisgKiAgIF9fZGF0YV9zdGFydF9fCisgKiAgIF9fcHJlaW5pdF9hcnJheV9zdGFydAorICogICBfX3ByZWluaXRfYXJyYXlfZW5kCisgKiAgIF9faW5pdF9hcnJheV9zdGFydAorICogICBfX2luaXRfYXJyYXlfZW5kCisgKiAgIF9fZmluaV9hcnJheV9zdGFydAorICogICBfX2ZpbmlfYXJyYXlfZW5kCisgKiAgIF9fZGF0YV9lbmRfXworICogICBfX2Jzc19zdGFydF9fCisgKiAgIF9fYnNzX2VuZF9fCisgKiAgIF9fZW5kX18KKyAqICAgZW5kCisgKiAgIF9fSGVhcExpbWl0CisgKiAgIF9fU3RhY2tMaW1pdAorICogICBfX1N0YWNrVG9wCisgKiAgIF9fc3RhY2sKKyAqLworRU5UUlkoUmVzZXRfSGFuZGxlcikKKworU0VDVElPTlMKK3sKKyAgLnRleHQgOgorICB7CisgICAgS0VFUCgqKC52ZWN0b3JzKSkKKyAgICAqKC50ZXh0KikKKworICAgIEtFRVAoKiguaW5pdCkpCisgICAgS0VFUCgqKC5maW5pKSkKKworICAgIC8qIC5jdG9ycyAqLworICAgICpjcnRiZWdpbi5vKC5jdG9ycykKKyAgICAqY3J0YmVnaW4/Lm8oLmN0b3JzKQorICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuY3RvcnMpCisgICAgKihTT1JUKC5jdG9ycy4qKSkKKyAgICAqKC5jdG9ycykKKworICAgIC8qIC5kdG9ycyAqLworICAgICpjcnRiZWdpbi5vKC5kdG9ycykKKyAgICAqY3J0YmVnaW4/Lm8oLmR0b3JzKQorICAgICooRVhDTFVERV9GSUxFKCpjcnRlbmQ/Lm8gKmNydGVuZC5vKSAuZHRvcnMpCisgICAgKihTT1JUKC5kdG9ycy4qKSkKKyAgICAqKC5kdG9ycykKKworICAgICooLnJvZGF0YSopCisKKyAgICBLRUVQKCooLmVoX2ZyYW1lKikpCisgIH0gPiBGTEFTSAorCisgIC8qCisgICAqIFNHIHZlbmVlcnM6CisgICAqIEFsbCBTRyB2ZW5lZXJzIGFyZSBwbGFjZWQgaW4gdGhlIHNwZWNpYWwgb3V0cHV0IHNlY3Rpb24gLmdudS5zZ3N0dWJzLiBJdHMgc3RhcnQgYWRkcmVzcworICAgKiBtdXN0IGJlIHNldCwgZWl0aGVyIHdpdGggdGhlIGNvbW1hbmQgbGluZSBvcHRpb24gkS0tc2VjdGlvbi1zdGFydJIgb3IgaW4gYSBsaW5rZXIgc2NyaXB0LAorICAgKiB0byBpbmRpY2F0ZSB3aGVyZSB0byBwbGFjZSB0aGVzZSB2ZW5lZXJzIGluIG1lbW9yeS4KKyAgICovCisvKgorICAuZ251LnNnc3R1YnMgOgorICB7CisgICAgLiA9IEFMSUdOKDMyKTsKKyAgfSA+IEZMQVNICisqLworICAuQVJNLmV4dGFiIDoKKyAgeworICAgICooLkFSTS5leHRhYiogLmdudS5saW5rb25jZS5hcm1leHRhYi4qKQorICB9ID4gRkxBU0gKKworICBfX2V4aWR4X3N0YXJ0ID0gLjsKKyAgLkFSTS5leGlkeCA6CisgIHsKKyAgICAqKC5BUk0uZXhpZHgqIC5nbnUubGlua29uY2UuYXJtZXhpZHguKikKKyAgfSA+IEZMQVNICisgIF9fZXhpZHhfZW5kID0gLjsKKworICAuY29weS50YWJsZSA6CisgIHsKKyAgICAuID0gQUxJR04oNCk7CisgICAgX19jb3B5X3RhYmxlX3N0YXJ0X18gPSAuOworICAgIExPTkcgKF9fZXRleHQpCisgICAgTE9ORyAoX19kYXRhX3N0YXJ0X18pCisgICAgTE9ORyAoX19kYXRhX2VuZF9fIC0gX19kYXRhX3N0YXJ0X18pCisgICAgLyogQWRkIGVhY2ggYWRkaXRpb25hbCBkYXRhIHNlY3Rpb24gaGVyZSAqLworLyoKKyAgICBMT05HIChfX2V0ZXh0MikKKyAgICBMT05HIChfX2RhdGEyX3N0YXJ0X18pCisgICAgTE9ORyAoX19kYXRhMl9lbmRfXyAtIF9fZGF0YTJfc3RhcnRfXykKKyovCisgICAgX19jb3B5X3RhYmxlX2VuZF9fID0gLjsKKyAgfSA+IEZMQVNICisKKyAgLnplcm8udGFibGUgOgorICB7CisgICAgLiA9IEFMSUdOKDQpOworICAgIF9femVyb190YWJsZV9zdGFydF9fID0gLjsKKyAgICAvKiBBZGQgZWFjaCBhZGRpdGlvbmFsIGJzcyBzZWN0aW9uIGhlcmUgKi8KKy8qCisgICAgTE9ORyAoX19ic3MyX3N0YXJ0X18pCisgICAgTE9ORyAoX19ic3MyX2VuZF9fIC0gX19ic3MyX3N0YXJ0X18pCisqLworICAgIF9femVyb190YWJsZV9lbmRfXyA9IC47CisgIH0gPiBGTEFTSAorCisgIC8qKgorICAgKiBMb2NhdGlvbiBjb3VudGVyIGNhbiBlbmQgdXAgMmJ5dGUgYWxpZ25lZCB3aXRoIG5hcnJvdyBUaHVtYiBjb2RlIGJ1dAorICAgKiBfX2V0ZXh0IGlzIGFzc3VtZWQgYnkgc3RhcnR1cCBjb2RlIHRvIGJlIHRoZSBMTUEgb2YgYSBzZWN0aW9uIGluIFJBTQorICAgKiB3aGljaCBtdXN0IGJlIDRieXRlIGFsaWduZWQKKyAgICovCisgIF9fZXRleHQgPSBBTElHTiAoNCk7CisKKyAgLmRhdGEgOiBBVCAoX19ldGV4dCkKKyAgeworICAgIF9fZGF0YV9zdGFydF9fID0gLjsKKyAgICAqKHZ0YWJsZSkKKyAgICAqKC5kYXRhKQorICAgICooLmRhdGEuKikKKworICAgIC4gPSBBTElHTig0KTsKKyAgICAvKiBwcmVpbml0IGRhdGEgKi8KKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X3N0YXJ0ID0gLik7CisgICAgS0VFUCgqKC5wcmVpbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19wcmVpbml0X2FycmF5X2VuZCA9IC4pOworCisgICAgLiA9IEFMSUdOKDQpOworICAgIC8qIGluaXQgZGF0YSAqLworICAgIFBST1ZJREVfSElEREVOIChfX2luaXRfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQKCooU09SVCguaW5pdF9hcnJheS4qKSkpCisgICAgS0VFUCgqKC5pbml0X2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19pbml0X2FycmF5X2VuZCA9IC4pOworCisKKyAgICAuID0gQUxJR04oNCk7CisgICAgLyogZmluaXQgZGF0YSAqLworICAgIFBST1ZJREVfSElEREVOIChfX2ZpbmlfYXJyYXlfc3RhcnQgPSAuKTsKKyAgICBLRUVQKCooU09SVCguZmluaV9hcnJheS4qKSkpCisgICAgS0VFUCgqKC5maW5pX2FycmF5KSkKKyAgICBQUk9WSURFX0hJRERFTiAoX19maW5pX2FycmF5X2VuZCA9IC4pOworCisgICAgS0VFUCgqKC5qY3IqKSkKKyAgICAuID0gQUxJR04oNCk7CisgICAgLyogQWxsIGRhdGEgZW5kICovCisgICAgX19kYXRhX2VuZF9fID0gLjsKKworICB9ID4gUkFNCisKKyAgLyoKKyAgICogU2Vjb25kYXJ5IGRhdGEgc2VjdGlvbiwgb3B0aW9uYWwKKyAgICoKKyAgICogUmVtZW1iZXIgdG8gYWRkIGVhY2ggYWRkaXRpb25hbCBkYXRhIHNlY3Rpb24KKyAgICogdG8gdGhlIC5jb3B5LnRhYmxlIGFib3ZlIHRvIGFzdXJlIHByb3BlcgorICAgKiBpbml0aWFsaXphdGlvbiBkdXJpbmcgc3RhcnR1cC4KKyAgICovCisvKgorICBfX2V0ZXh0MiA9IEFMSUdOICg0KTsKKworICAuZGF0YTIgOiBBVCAoX19ldGV4dDIpCisgIHsKKyAgICAuID0gQUxJR04oNCk7CisgICAgX19kYXRhMl9zdGFydF9fID0gLjsKKyAgICAqKC5kYXRhMikKKyAgICAqKC5kYXRhMi4qKQorICAgIC4gPSBBTElHTig0KTsKKyAgICBfX2RhdGEyX2VuZF9fID0gLjsKKworICB9ID4gUkFNMgorKi8KKworICAuYnNzIDoKKyAgeworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX2Jzc19zdGFydF9fID0gLjsKKyAgICAqKC5ic3MpCisgICAgKiguYnNzLiopCisgICAgKihDT01NT04pCisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fYnNzX2VuZF9fID0gLjsKKyAgfSA+IFJBTSBBVCA+IFJBTQorCisgIC8qCisgICAqIFNlY29uZGFyeSBic3Mgc2VjdGlvbiwgb3B0aW9uYWwKKyAgICoKKyAgICogUmVtZW1iZXIgdG8gYWRkIGVhY2ggYWRkaXRpb25hbCBic3Mgc2VjdGlvbgorICAgKiB0byB0aGUgLnplcm8udGFibGUgYWJvdmUgdG8gYXN1cmUgcHJvcGVyCisgICAqIGluaXRpYWxpemF0aW9uIGR1cmluZyBzdGFydHVwLgorICAgKi8KKy8qCisgIC5ic3MyIDoKKyAgeworICAgIC4gPSBBTElHTig0KTsKKyAgICBfX2JzczJfc3RhcnRfXyA9IC47CisgICAgKiguYnNzMikKKyAgICAqKC5ic3MyLiopCisgICAgLiA9IEFMSUdOKDQpOworICAgIF9fYnNzMl9lbmRfXyA9IC47CisgIH0gPiBSQU0yIEFUID4gUkFNMgorKi8KKworICAuaGVhcCAoQ09QWSkgOgorICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9fZW5kX18gPSAuOworICAgIFBST1ZJREUoZW5kID0gLik7CisgICAgLiA9IC4gKyBfX0hFQVBfU0laRTsKKyAgICAuID0gQUxJR04oOCk7CisgICAgX19IZWFwTGltaXQgPSAuOworICB9ID4gUkFNCisKKyAgLnN0YWNrIChPUklHSU4oUkFNKSArIExFTkdUSChSQU0pIC0gX19TVEFDS19TSVpFKSAoQ09QWSkgOgorICB7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9fU3RhY2tMaW1pdCA9IC47CisgICAgLiA9IC4gKyBfX1NUQUNLX1NJWkU7CisgICAgLiA9IEFMSUdOKDgpOworICAgIF9fU3RhY2tUb3AgPSAuOworICB9ID4gUkFNCisgIFBST1ZJREUoX19zdGFjayA9IF9fU3RhY2tUb3ApOworCisgIC8qIENoZWNrIGlmIGRhdGEgKyBoZWFwICsgc3RhY2sgZXhjZWVkcyBSQU0gbGltaXQgKi8KKyAgQVNTRVJUKF9fU3RhY2tMaW1pdCA+PSBfX0hlYXBMaW1pdCwgInJlZ2lvbiBSQU0gb3ZlcmZsb3dlZCB3aXRoIHN0YWNrIikKK30KZGlmZiAtLWdpdCBhL0RldmljZS9BUk0vQVJNQ001NS9Tb3VyY2Uvc3RhcnR1cF9BUk1DTTU1LmMgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL3N0YXJ0dXBfQVJNQ001NS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Yzg2MDAKLS0tIC9kZXYvbnVsbAorKysgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL3N0YXJ0dXBfQVJNQ001NS5jCkBAIC0wLDAgKzEsMTQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiBAZmlsZSAgICAgc3RhcnR1cF9BUk1DTTU1LmMKKyAqIEBicmllZiAgICBDTVNJUyBDb3JlIERldmljZSBTdGFydHVwIEZpbGUgZm9yIEFSTUNNNTUgRGV2aWNlCisgKiBAdmVyc2lvbiAgVjEuMC4wCisgKiBAZGF0ZSAgICAgMjAuIEZlYnJ1YXJ5IDIwMjAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCisgKgorICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIExpY2Vuc2UpOyB5b3UgbWF5CisgKiBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLgorICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgKgorICogd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKyAqCisgKiBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgKiBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiBBUyBJUyBCQVNJUywgV0lUSE9VVAorICogV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgorICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZAorICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisgKi8KKworI2lmIGRlZmluZWQgKEFSTUNNNTVfRFNQX0RQX01WRV9GUF9UWikKKyAgI2luY2x1ZGUgIkFSTUNNNTVfRFNQX0RQX01WRV9GUF9UWi5oIgorI2Vsc2UKKyAgI2Vycm9yIGRldmljZSBub3Qgc3BlY2lmaWVkIQorI2VuZGlmCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBFeHRlcm5hbCBSZWZlcmVuY2VzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworZXh0ZXJuIHVpbnQzMl90IF9fSU5JVElBTF9TUDsKK2V4dGVybiB1aW50MzJfdCBfX1NUQUNLX0xJTUlUOworCitleHRlcm4gdm9pZCBfX1BST0dSQU1fU1RBUlQodm9pZCkgX19OT19SRVRVUk47CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBJbnRlcm5hbCBSZWZlcmVuY2VzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBEZWZhdWx0X0hhbmRsZXIodm9pZCkgX19OT19SRVRVUk47Cit2b2lkIFJlc2V0X0hhbmRsZXIgICh2b2lkKSBfX05PX1JFVFVSTjsKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEV4Y2VwdGlvbiAvIEludGVycnVwdCBIYW5kbGVyCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLworLyogRXhjZXB0aW9ucyAqLwordm9pZCBOTUlfSGFuZGxlciAgICAgICAgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIEhhcmRGYXVsdF9IYW5kbGVyICAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7Cit2b2lkIE1lbU1hbmFnZV9IYW5kbGVyICAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgQnVzRmF1bHRfSGFuZGxlciAgICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOwordm9pZCBVc2FnZUZhdWx0X0hhbmRsZXIgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIFNlY3VyZUZhdWx0X0hhbmRsZXIgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgU1ZDX0hhbmRsZXIgICAgICAgICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOwordm9pZCBEZWJ1Z01vbl9IYW5kbGVyICAgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIFBlbmRTVl9IYW5kbGVyICAgICAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgU3lzVGlja19IYW5kbGVyICAgICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOworCit2b2lkIEludGVycnVwdDBfSGFuZGxlciAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgSW50ZXJydXB0MV9IYW5kbGVyICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOwordm9pZCBJbnRlcnJ1cHQyX0hhbmRsZXIgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIEludGVycnVwdDNfSGFuZGxlciAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgSW50ZXJydXB0NF9IYW5kbGVyICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOwordm9pZCBJbnRlcnJ1cHQ1X0hhbmRsZXIgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIEludGVycnVwdDZfSGFuZGxlciAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKK3ZvaWQgSW50ZXJydXB0N19IYW5kbGVyICAgICAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKHdlYWssIGFsaWFzKCJEZWZhdWx0X0hhbmRsZXIiKSkpOwordm9pZCBJbnRlcnJ1cHQ4X0hhbmRsZXIgICAgICh2b2lkKSBfX2F0dHJpYnV0ZV9fICgod2VhaywgYWxpYXMoIkRlZmF1bHRfSGFuZGxlciIpKSk7Cit2b2lkIEludGVycnVwdDlfSGFuZGxlciAgICAgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrLCBhbGlhcygiRGVmYXVsdF9IYW5kbGVyIikpKTsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRXhjZXB0aW9uIC8gSW50ZXJydXB0IFZlY3RvciB0YWJsZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKworI2lmIGRlZmluZWQgKCBfX0dOVUNfXyApCisjcHJhZ21hIEdDQyBkaWFnbm9zdGljIHB1c2gKKyNwcmFnbWEgR0NDIGRpYWdub3N0aWMgaWdub3JlZCAiLVdwZWRhbnRpYyIKKyNlbmRpZgorCitleHRlcm4gY29uc3QgVkVDVE9SX1RBQkxFX1R5cGUgX19WRUNUT1JfVEFCTEVbNDk2XTsKKyAgICAgICBjb25zdCBWRUNUT1JfVEFCTEVfVHlwZSBfX1ZFQ1RPUl9UQUJMRVs0OTZdIF9fVkVDVE9SX1RBQkxFX0FUVFJJQlVURSA9IHsKKyAgKFZFQ1RPUl9UQUJMRV9UeXBlKSgmX19JTklUSUFMX1NQKSwgICAgICAgLyogICAgIEluaXRpYWwgU3RhY2sgUG9pbnRlciAqLworICBSZXNldF9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgUmVzZXQgSGFuZGxlciAqLworICBOTUlfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAtMTQgTk1JIEhhbmRsZXIgKi8KKyAgSGFyZEZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgLyogLTEzIEhhcmQgRmF1bHQgSGFuZGxlciAqLworICBNZW1NYW5hZ2VfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAvKiAtMTIgTVBVIEZhdWx0IEhhbmRsZXIgKi8KKyAgQnVzRmF1bHRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogLTExIEJ1cyBGYXVsdCBIYW5kbGVyICovCisgIFVzYWdlRmF1bHRfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8qIC0xMCBVc2FnZSBGYXVsdCBIYW5kbGVyICovCisgIFNlY3VyZUZhdWx0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgIC8qICAtOSBTZWN1cmUgRmF1bHQgSGFuZGxlciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgUmVzZXJ2ZWQgKi8KKyAgMCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogICAgIFJlc2VydmVkICovCisgIDAsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgICBSZXNlcnZlZCAqLworICBTVkNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgLTUgU1ZDYWxsIEhhbmRsZXIgKi8KKyAgRGVidWdNb25fSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC00IERlYnVnIE1vbml0b3IgSGFuZGxlciAqLworICAwLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAgICAgUmVzZXJ2ZWQgKi8KKyAgUGVuZFNWX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogIC0yIFBlbmRTViBIYW5kbGVyICovCisgIFN5c1RpY2tfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICAtMSBTeXNUaWNrIEhhbmRsZXIgKi8KKworICAvKiBJbnRlcnJ1cHRzICovCisgIEludGVycnVwdDBfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMCBJbnRlcnJ1cHQgMCAqLworICBJbnRlcnJ1cHQxX0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDEgSW50ZXJydXB0IDEgKi8KKyAgSW50ZXJydXB0Ml9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLyogICAyIEludGVycnVwdCAyICovCisgIEludGVycnVwdDNfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8qICAgMyBJbnRlcnJ1cHQgMyAqLworICBJbnRlcnJ1cHQ0X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDQgSW50ZXJydXB0IDQgKi8KKyAgSW50ZXJydXB0NV9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLyogICA1IEludGVycnVwdCA1ICovCisgIEludGVycnVwdDZfSGFuZGxlciwgICAgICAgICAgICAgICAgICAgICAgIC8qICAgNiBJbnRlcnJ1cHQgNiAqLworICBJbnRlcnJ1cHQ3X0hhbmRsZXIsICAgICAgICAgICAgICAgICAgICAgICAvKiAgIDcgSW50ZXJydXB0IDcgKi8KKyAgSW50ZXJydXB0OF9IYW5kbGVyLCAgICAgICAgICAgICAgICAgICAgICAgLyogICA4IEludGVycnVwdCA4ICovCisgIEludGVycnVwdDlfSGFuZGxlciAgICAgICAgICAgICAgICAgICAgICAgIC8qICAgOSBJbnRlcnJ1cHQgOSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJbnRlcnJ1cHRzIDEwIC4uIDQ4MCBhcmUgbGVmdCBvdXQgKi8KK307CisKKyNpZiBkZWZpbmVkICggX19HTlVDX18gKQorI3ByYWdtYSBHQ0MgZGlhZ25vc3RpYyBwb3AKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgUmVzZXQgSGFuZGxlciBjYWxsZWQgb24gY29udHJvbGxlciByZXNldAorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgUmVzZXRfSGFuZGxlcih2b2lkKQoreworICBfX3NldF9NU1BMSU0oKHVpbnQzMl90KSgmX19TVEFDS19MSU1JVCkpOworCisgIFN5c3RlbUluaXQoKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIENNU0lTIFN5c3RlbSBJbml0aWFsaXphdGlvbiAqLworICBfX1BST0dSQU1fU1RBUlQoKTsgICAgICAgICAgICAgICAgICAgICAgICAvKiBFbnRlciBQcmVNYWluIChDIGxpYnJhcnkgZW50cnkgcG9pbnQpICovCit9CisKKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIEhhcmQgRmF1bHQgSGFuZGxlcgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK19fTk9fUkVUVVJOIHZvaWQgSGFyZEZhdWx0X0hhbmRsZXIodm9pZCkKK3sKKyAgd2hpbGUoMSk7Cit9CisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBEZWZhdWx0IEhhbmRsZXIgZm9yIEV4Y2VwdGlvbnMgLyBJbnRlcnJ1cHRzCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBEZWZhdWx0X0hhbmRsZXIodm9pZCkKK3sKKyAgd2hpbGUoMSk7Cit9CmRpZmYgLS1naXQgYS9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL3N5c3RlbV9BUk1DTTU1LmMgYi9EZXZpY2UvQVJNL0FSTUNNNTUvU291cmNlL3N5c3RlbV9BUk1DTTU1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y0ZjlhZQotLS0gL2Rldi9udWxsCisrKyBiL0RldmljZS9BUk0vQVJNQ001NS9Tb3VyY2Uvc3lzdGVtX0FSTUNNNTUuYwpAQCAtMCwwICsxLDkwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovLyoqCisgKiBAZmlsZSAgICAgc3lzdGVtX0FSTUNNNTUuYworICogQGJyaWVmICAgIENNU0lTIERldmljZSBTeXN0ZW0gU291cmNlIEZpbGUgZm9yCisgKiAgICAgICAgICAgQVJNQ001NSBEZXZpY2UKKyAqIEB2ZXJzaW9uICBWMS4wLjAKKyAqIEBkYXRlICAgICAyMC4gRmVicnVhcnkgMjAyMAorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDktMjAxOSBBcm0gTGltaXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAorICoKKyAqIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSBMaWNlbnNlKTsgeW91IG1heQorICogbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4KKyAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICoKKyAqIHd3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCisgKgorICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZQorICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgQkFTSVMsIFdJVEhPVVQKKyAqIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBwZXJtaXNzaW9ucyBhbmQKKyAqIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorICovCisKKyNpZiBkZWZpbmVkIChBUk1DTTU1X0RTUF9EUF9NVkVfRlBfVFopCisgICNpbmNsdWRlICJBUk1DTTU1X0RTUF9EUF9NVkVfRlBfVFouaCIKKworICAjaWYgZGVmaW5lZCAoX19BUk1fRkVBVFVSRV9DTVNFKSAmJiAgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKyAgICAjaW5jbHVkZSAicGFydGl0aW9uX0FSTUNNNTUuaCIKKyAgI2VuZGlmCisKKyNlbHNlCisgICNlcnJvciBkZXZpY2Ugbm90IHNwZWNpZmllZCEKKyNlbmRpZgorCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRGVmaW5lIGNsb2NrcworICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KKyNkZWZpbmUgIFhUQUwgICAgICAgICAgICAoIDUwMDAwMDBVTCkgICAgICAvKiBPc2NpbGxhdG9yIGZyZXF1ZW5jeSAqLworCisjZGVmaW5lICBTWVNURU1fQ0xPQ0sgICAgKDVVICogWFRBTCkKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgRXhjZXB0aW9uIC8gSW50ZXJydXB0IFZlY3RvciB0YWJsZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK2V4dGVybiBjb25zdCBWRUNUT1JfVEFCTEVfVHlwZSBfX1ZFQ1RPUl9UQUJMRVs0OTZdOworCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBTeXN0ZW0gQ29yZSBDbG9jayBWYXJpYWJsZQorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3VpbnQzMl90IFN5c3RlbUNvcmVDbG9jayA9IFNZU1RFTV9DTE9DSzsKKworCisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgU3lzdGVtIENvcmUgQ2xvY2sgdXBkYXRlIGZ1bmN0aW9uCisgKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwordm9pZCBTeXN0ZW1Db3JlQ2xvY2tVcGRhdGUgKHZvaWQpCit7CisgIFN5c3RlbUNvcmVDbG9jayA9IFNZU1RFTV9DTE9DSzsKK30KKworLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFN5c3RlbSBpbml0aWFsaXphdGlvbiBmdW5jdGlvbgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KK3ZvaWQgU3lzdGVtSW5pdCAodm9pZCkKK3sKKworI2lmIGRlZmluZWQgKF9fVlRPUl9QUkVTRU5UKSAmJiAoX19WVE9SX1BSRVNFTlQgPT0gMVUpCisgIFNDQi0+VlRPUiA9ICh1aW50MzJfdCkoJl9fVkVDVE9SX1RBQkxFWzBdKTsKKyNlbmRpZgorCisjaWYgKGRlZmluZWQgKF9fRlBVX1VTRUQpICYmIChfX0ZQVV9VU0VEID09IDFVKSkgfHwgXAorICAgIChkZWZpbmVkIChfX01WRV9VU0VEKSAmJiAoX19NVkVfVVNFRCA9PSAxVSkpCisgIFNDQi0+Q1BBQ1IgfD0gKCgzVSA8PCAxMFUqMlUpIHwgICAgICAgICAgIC8qIGVuYWJsZSBDUDEwIEZ1bGwgQWNjZXNzICovCisgICAgICAgICAgICAgICAgICgzVSA8PCAxMVUqMlUpICApOyAgICAgICAgIC8qIGVuYWJsZSBDUDExIEZ1bGwgQWNjZXNzICovCisjZW5kaWYKKworI2lmZGVmIFVOQUxJR05FRF9TVVBQT1JUX0RJU0FCTEUKKyAgU0NCLT5DQ1IgfD0gU0NCX0NDUl9VTkFMSUdOX1RSUF9Nc2s7CisjZW5kaWYKKworI2lmIGRlZmluZWQgKF9fQVJNX0ZFQVRVUkVfQ01TRSkgJiYgKF9fQVJNX0ZFQVRVUkVfQ01TRSA9PSAzVSkKKyAgVFpfU0FVX1NldHVwKCk7CisjZW5kaWYKKworICBTeXN0ZW1Db3JlQ2xvY2sgPSBTWVNURU1fQ0xPQ0s7Cit9CmRpZmYgLS1naXQgYS9EZXZpY2UvQVJNL1NWRC9BUk1DTTU1LnN2ZCBiL0RldmljZS9BUk0vU1ZEL0FSTUNNNTUuc3ZkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YmU0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9EZXZpY2UvQVJNL1NWRC9BUk1DTTU1LnN2ZApAQCAtMCwwICsxLDEwNyBAQAorPD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KKworPCEtLSBGaWxlIG5hbWluZzogPHZlbmRvcj5fPHBhcnQvc2VyaWVzIG5hbWU+LnN2ZCAtLT4KKworPCEtLQorICBDb3B5cmlnaHQgKEMpIDIwMTIgLSAyMDIwIEFybSBMaW1pdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgIFB1cnBvc2U6IFN5c3RlbSBWaWV3ZXIgRGVzY3JpcHRpb24gKFNWRCkgRXhhbXBsZSAoU2NoZW1hIFZlcnNpb24gMS4xKQorICAgICAgICAgICBUaGlzIGlzIGEgZGVzY3JpcHRpb24gb2YgYSBub25lLWV4aXN0ZW50IGFuZCBpbmNvbXBsZXRlIGRldmljZQorICAgICAgICAgICBmb3IgZGVtb25zdHJhdGlvbiBwdXJwb3NlcyBvbmx5LgorCisgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKyAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAtIE5laXRoZXIgdGhlIG5hbWUgb2YgQVJNIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICAgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCisgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgQkUKKyAgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgLS0+CisKKzxkZXZpY2Ugc2NoZW1hVmVyc2lvbj0iMS4zIiB4bWxuczp4cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMS9YTUxTY2hlbWEtaW5zdGFuY2UiIHhzOm5vTmFtZXNwYWNlU2NoZW1hTG9jYXRpb249IkNNU0lTLVNWRC54c2QiID4KKyAgPHZlbmRvcj5BUk0gTHRkLjwvdmVuZG9yPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gZGV2aWNlIHZlbmRvciBuYW1lIC0tPgorICA8dmVuZG9ySUQ+QVJNPC92ZW5kb3JJRD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZXZpY2UgdmVuZG9yIHNob3J0IG5hbWUgLS0+CisgIDxuYW1lPkFSTUNNNTU8L25hbWU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIG5hbWUgb2YgcGFydC0tPgorICA8c2VyaWVzPkFSTXY4LjEtTSBNYWlubGluZTwvc2VyaWVzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZXZpY2Ugc2VyaWVzIHRoZSBkZXZpY2UgYmVsb25ncyB0byAtLT4KKyAgPHZlcnNpb24+MS4wPC92ZXJzaW9uPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gdmVyc2lvbiBvZiB0aGlzIGRlc2NyaXB0aW9uLCBhZGRpbmcgQ01TSVMtU1ZEIDEuMSB0YWdzIC0tPgorICA8ZGVzY3JpcHRpb24+QVJNIDMyLWJpdCBDb3J0ZXgtTTU1IGJhc2VkIGRldmljZTwvZGVzY3JpcHRpb24+CisgIDxsaWNlbnNlVGV4dD4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHRoaXMgbGljZW5zZSB0ZXh0IHdpbGwgYXBwZWFyIGluIGhlYWRlciBmaWxlLiBcbiBmb3JjZSBsaW5lIGJyZWFrcyAtLT4KKyAgICBBUk0gTGltaXRlZCAoQVJNKSBpcyBzdXBwbHlpbmcgdGhpcyBzb2Z0d2FyZSBmb3IgdXNlIHdpdGggQ29ydGV4LU1cbgorICAgIHByb2Nlc3NvciBiYXNlZCBtaWNyb2NvbnRyb2xsZXIsIGJ1dCBjYW4gYmUgZXF1YWxseSB1c2VkIGZvciBvdGhlclxuCisgICAgc3VpdGFibGUgIHByb2Nlc3NvciBhcmNoaXRlY3R1cmVzLiBUaGlzIGZpbGUgY2FuIGJlIGZyZWVseSBkaXN0cmlidXRlZC5cbgorICAgIE1vZGlmaWNhdGlvbnMgdG8gdGhpcyBmaWxlIHNoYWxsIGJlIGNsZWFybHkgbWFya2VkLlxuCisgICAgXG4KKyAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIuICBOTyBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRURcbgorICAgIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRlxuCisgICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUFBMWSBUTyBUSElTIFNPRlRXQVJFLlxuCisgICAgQVJNIFNIQUxMIE5PVCwgSU4gQU5ZIENJUkNVTVNUQU5DRVMsIEJFIExJQUJMRSBGT1IgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1JcbgorICAgIENPTlNFUVVFTlRJQUwgREFNQUdFUywgRk9SIEFOWSBSRUFTT04gV0hBVFNPRVZFUi4KKyAgPC9saWNlbnNlVGV4dD4KKworICA8Y3B1PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZXRhaWxzIGFib3V0IHRoZSBjcHUgZW1iZWRkZWQgaW4gdGhlIGRldmljZSAtLT4KKyAgICA8bmFtZT5DTTU1PC9uYW1lPgorICAgIDxyZXZpc2lvbj5yMHAwPC9yZXZpc2lvbj4KKyAgICA8ZW5kaWFuPmxpdHRsZTwvZW5kaWFuPgorICAgIDxtcHVQcmVzZW50PnRydWU8L21wdVByZXNlbnQ+CisgICAgPGZwdVByZXNlbnQ+dHJ1ZTwvZnB1UHJlc2VudD4KKyAgICA8ZnB1RFA+dHJ1ZTwvZnB1RFA+CisgICAgPGRzcFByZXNlbnQ+dHJ1ZTwvZHNwUHJlc2VudD4KKyAgICA8dnRvclByZXNlbnQ+dHJ1ZTwvdnRvclByZXNlbnQ+CisgICAgPG52aWNQcmlvQml0cz4zPC9udmljUHJpb0JpdHM+CisgICAgPHZlbmRvclN5c3RpY2tDb25maWc+ZmFsc2U8L3ZlbmRvclN5c3RpY2tDb25maWc+CisgICAgPHBtdVByZXNlbnQ+dHJ1ZTwvcG11UHJlc2VudD4KKyAgICA8cG11TnVtRXZlbnRDbnQ+MTI8L3BtdU51bUV2ZW50Q250PgorICAgIDxzYXVOdW1SZWdpb25zPjQ8L3NhdU51bVJlZ2lvbnM+CisgICAgPHNhdVJlZ2lvbnNDb25maWcgZW5hYmxlZD0idHJ1ZSIgcHJvdGVjdGlvbldoZW5EaXNhYmxlZD0icyI+CisgICAgICA8cmVnaW9uIGVuYWJsZWQ9InRydWUiIG5hbWU9IlNhdVJlZ2lvbjAiPgorICAgICAgICA8YmFzZT4weDAwMDAwMDAwPC9iYXNlPgorICAgICAgICA8bGltaXQ+MHgwMDFGRkZFMDwvbGltaXQ+CisgICAgICAgIDwhLS0gc2VjdXJlIC8gbm9uLXNlY3VyZSBjYWxsYWJsZSAtLT4KKyAgICAgICAgPGFjY2Vzcz5jPC9hY2Nlc3M+CisgICAgICA8L3JlZ2lvbj4KKyAgICAgIDxyZWdpb24gZW5hYmxlZD0idHJ1ZSIgbmFtZT0iU2F1UmVnaW9uMSI+CisgICAgICAgIDxiYXNlPjB4MDAyMDAwMDA8L2Jhc2U+CisgICAgICAgIDxsaW1pdD4weDAwM0ZGRkUwPC9saW1pdD4KKyAgICAgICAgPCEtLSBub24tc2VjdXJlIC0tPgorICAgICAgICA8YWNjZXNzPm48L2FjY2Vzcz4KKyAgICAgIDwvcmVnaW9uPgorICAgICAgPHJlZ2lvbiBlbmFibGVkPSJ0cnVlIiBuYW1lPSJTYXVSZWdpb24yIj4KKyAgICAgICAgPGJhc2U+MHgyMDIwMDAwMDwvYmFzZT4KKyAgICAgICAgPGxpbWl0PjB4MjAzRkZGRTA8L2xpbWl0PgorICAgICAgICA8IS0tIG5vbi1zZWN1cmUgLS0+CisgICAgICAgIDxhY2Nlc3M+bjwvYWNjZXNzPgorICAgICAgPC9yZWdpb24+CisgICAgICA8cmVnaW9uIGVuYWJsZWQ9InRydWUiIG5hbWU9IlNhdVJlZ2lvbjMiPgorICAgICAgICA8YmFzZT4weDQwMDAwMDAwPC9iYXNlPgorICAgICAgICA8bGltaXQ+MHg0MDA0MDAwMDwvbGltaXQ+CisgICAgICAgIDwhLS0gbm9uLXNlY3VyZSAtLT4KKyAgICAgICAgPGFjY2Vzcz5uPC9hY2Nlc3M+CisgICAgICA8L3JlZ2lvbj4KKyAgICA8L3NhdVJlZ2lvbnNDb25maWc+CisgIDwvY3B1PgorCisgIDxhZGRyZXNzVW5pdEJpdHM+ODwvYWRkcmVzc1VuaXRCaXRzPiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJ5dGUgYWRkcmVzc2FibGUgbWVtb3J5IC0tPgorICA8d2lkdGg+MzI8L3dpZHRoPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBidXMgd2lkdGggaXMgMzIgYml0cyAtLT4KKyAgPCEtLSBkZWZhdWx0IHNldHRpbmdzIGltcGxpY2l0bHkgaW5oZXJpdGVkIGJ5IHN1YnNlcXVlbnQgc2VjdGlvbnMgLS0+CisgIDxzaXplPjMyPC9zaXplPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIHRoaXMgaXMgdGhlIGRlZmF1bHQgc2l6ZSAobnVtYmVyIG9mIGJpdHMpIG9mIGFsbCBwZXJpcGhlcmFscworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgcmVnaXN0ZXIgdGhhdCBkbyBub3QgZGVmaW5lICJzaXplIiB0aGVtc2VsdmVzIC0tPgorICA8YWNjZXNzPnJlYWQtd3JpdGU8L2FjY2Vzcz4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPCEtLSBkZWZhdWx0IGFjY2VzcyBwZXJtaXNzaW9uIGZvciBhbGwgc3Vic2VxdWVudCByZWdpc3RlcnMgLS0+CisgIDxyZXNldFZhbHVlPjB4MDAwMDAwMDA8L3Jlc2V0VmFsdWU+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8IS0tIGJ5IGRlZmF1bHQgYWxsIGJpdHMgb2YgdGhlIHJlZ2lzdGVycyBhcmUgaW5pdGlhbGl6ZWQgdG8gMCBvbiByZXNldCAtLT4KKyAgPHJlc2V0TWFzaz4weEZGRkZGRkZGPC9yZXNldE1hc2s+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwhLS0gYnkgZGVmYXVsdCBhbGwgMzJCaXRzIG9mIHRoZSByZWdpc3RlcnMgYXJlIHVzZWQgLS0+CisKKzwvZGV2aWNlPgo=