LyoKICogQ29weXJpZ2h0IChjKSAyMDA4LCAyMDA5LCBPcmFjbGUgYW5kL29yIGl0cyBhZmZpbGlhdGVzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogKiBETyBOT1QgQUxURVIgT1IgUkVNT1ZFIENPUFlSSUdIVCBOT1RJQ0VTIE9SIFRISVMgRklMRSBIRUFERVIuCiAqCiAqIFRoaXMgY29kZSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CiAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9ubHksIGFzCiAqIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgT3JhY2xlIGRlc2lnbmF0ZXMgdGhpcwogKiBwYXJ0aWN1bGFyIGZpbGUgYXMgc3ViamVjdCB0byB0aGUgIkNsYXNzcGF0aCIgZXhjZXB0aW9uIGFzIHByb3ZpZGVkCiAqIGJ5IE9yYWNsZSBpbiB0aGUgTElDRU5TRSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLgogKgogKiBUaGlzIGNvZGUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKICogQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCiAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQogKiB2ZXJzaW9uIDIgZm9yIG1vcmUgZGV0YWlscyAoYSBjb3B5IGlzIGluY2x1ZGVkIGluIHRoZSBMSUNFTlNFIGZpbGUgdGhhdAogKiBhY2NvbXBhbmllZCB0aGlzIGNvZGUpLgogKgogKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uCiAqIDIgYWxvbmcgd2l0aCB0aGlzIHdvcms7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwKICogSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBLgogKgogKiBQbGVhc2UgY29udGFjdCBPcmFjbGUsIDUwMCBPcmFjbGUgUGFya3dheSwgUmVkd29vZCBTaG9yZXMsIENBIDk0MDY1IFVTQQogKiBvciB2aXNpdCB3d3cub3JhY2xlLmNvbSBpZiB5b3UgbmVlZCBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9yIGhhdmUgYW55CiAqIHF1ZXN0aW9ucy4KICovCgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8KLy8gRGlhbG9nCi8vCgpJRERfRE9XTkxPQURfRElBTE9HIERJQUxPR0VYIDAsIDAsIDM0MCwgMTIwClNUWUxFIERTX01PREFMRlJBTUUgfCBEU18zRExPT0sgfCBEU19DRU5URVIgfCBXU19QT1BVUCB8IAogICAgV1NfVklTSUJMRSB8IFdTX0NBUFRJT04gfCBXU19TWVNNRU5VCkNBUFRJT04gIkNvbXBvbmVudGVzIGFkaWNpb25hbGVzIG5lY2VzYXJpb3MiCkVYU1RZTEUgV1NfRVhfQVBQV0lORE9XCkZPTlQgOCwgIk1TIFNhbnMgU2VyaWYiCkJFR0lOCiAgICBMVEVYVCAgICAgICAgICAgIiIsIElEQ19ET1dOTE9BRF9NQVNUSEVBRCwgMCwgMCwgMzQwLCAzOQogICAgTFRFWFQgICAgICAgICAgICIiLCBJRENfTUFTVEhFQURfVEVYVCwgNjAsIDgsIDIyNSwgMjAKICAgIENPTlRST0wgICAgICAgICAiIiwgSURDX1NUQVRJQywiU3RhdGljIiwgU1NfQkxBQ0tGUkFNRSB8IFNTX1NVTktFTiwKICAgICAgICAgICAgICAgICAgICAwLCAzOSwgMzQwLCAxCiAgICBMVEVYVCAgICAgICAgICAgIiIsIElEQ19ET1dOTE9BRF9URVhULCAxMiwgNjAsIDMxNiwgMjAKICAgIExURVhUICAgICAgICAgICAiIiwgSURDX1RJTUVfUkVNQUlOSU5HLCAxMiwgOTAsIDMxNiwgMTAKICAgIENPTlRST0wgICAgICAgICAiUHJvZ3Jlc3MxIiwxMDA2LCJtc2N0bHNfcHJvZ3Jlc3MzMiIsUEJTX1NNT09USCwKICAgICAgICAgICAgICAgICAgICAxMiwgMTAwLCAyNjUsIDE0CiAgICBQVVNIQlVUVE9OCSAgICAiQ2FuY2VsYXIiLCAgMiwgMjg1LCAxMDAsIDQ2LCAxNApFTkQKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8KLy8gREVTSUdOSU5GTwovLwoKI2lmZGVmIEFQU1RVRElPX0lOVk9LRUQKR1VJREVMSU5FUyBERVNJR05JTkZPIERJU0NBUkRBQkxFIApCRUdJTgogICAgMTA1LCBESUFMT0cKICAgIEJFR0lOCiAgICAgICAgTEVGVE1BUkdJTiwgNwogICAgICAgIFJJR0hUTUFSR0lOLCAyMzYKICAgICAgICBUT1BNQVJHSU4sIDcKICAgICAgICBCT1RUT01NQVJHSU4sIDYzCiAgICBFTkQKRU5ECiNlbmRpZiAgICAvLyBBUFNUVURJT19JTlZPS0VECgoKLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KLy8KLy8gU3RyaW5nIFRhYmxlCi8vCgpTVFJJTkdUQUJMRSBESVNDQVJEQUJMRSAKQkVHSU4KICAgIElEU19ET1dOTE9BRF9DQU5DRUxfTUVTU0FHRSAgICJDYW5jZWxhciBsYSBpbnN0YWxhY2nzbiBkZSBsb3MgY29tcG9uZW50ZXMgYWRpY2lvbmFsZXMgcXVlIG5lY2VzaXRhIGxhIGFwbGljYWNp824gcHVlZGUgaGFjZXIgcXVlIHNlIGNpZXJyZSBsYSBhcGxpY2FjafNuLlxuXG6/U2VndXJvIHF1ZSBkZXNlYSBjYW5jZWxhciBsYSBpbnN0YWxhY2nzbiBkZSBjb21wb25lbnRlcyBhZGljaW9uYWxlcz8iCiAgICBJRFNfRE9XTkxPQURfQ0FOQ0VMX0NBUFRJT04gICAiQ2FuY2VsYXIgLSBDb21wb25lbnRlcyBhZGljaW9uYWxlcyIKICAgIElEU19ET1dOTE9BRF9DQU5DRUxfSU5TVFJVQ1RJT04gICAiIgogICAgSURTX0hUVFBfSU5TVFJVQ1RJT05fUkVRVUVTVF9USU1FT1VUICAgICAgIlNlIGhhIGFnb3RhZG8gZWwgdGllbXBvIGRlIGVzcGVyYSBkZSBsYSBjb25leGnzbiIKICAgIElEU19IVFRQX0lOU1RSVUNUSU9OX1NFUlZFUl9OT1RfUkVBQ0hBQkxFICJObyBlcyBwb3NpYmxlIGNvbmVjdGFyc2UgYSBJbnRlcm5ldCIKICAgIElEU19IVFRQX0lOU1RSVUNUSU9OX1VOS05PV05fRVJST1IgICAgICAgICJIYSBoYWJpZG8gdW4gZXJyb3IgZW4gZWwgc2Vydmlkb3IgKGVycm9yICVzKSIKICAgIElEU19IVFRQX0lOU1RSVUNUSU9OX1NFUlZJQ0VfVU5BVkFJTCAgICAgICJFbCBzZXJ2aWNpbyBubyBlc3ThIGRpc3BvbmlibGUgKGVycm9yICVzKSIKICAgIElEU19IVFRQX0lOU1RSVUNUSU9OX0ZPUkJJRERFTiAgICAgICAgICAgICJFbCBhY2Nlc28gc2UgaGEgZGVuZWdhZG8gbyBlc3ThIHByb2hpYmlkbyAoZXJyb3IgJXMpIgogICAgSURTX0hUVFBfU1RBVFVTX09USEVSICAgICAgICAgICAgICAgICAgICAgIkhhIGhhYmlkbyB1biBlcnJvciBlbiBlbCB0cmFuc2N1cnNvIGRlIGVzdGEgc29saWNpdHVkLiC/RGVzZWEgZWplY3V0YXIgZGUgbnVldm8gbGEgc29saWNpdHVkPyIKCi8vIEhUVFAgc3RhdHVzIGNvZGUKICAgIElEU19IVFRQX1NUQVRVU19SRVFVRVNUX1RJTUVPVVQgIkVsIHNlcnZpZG9yIGhhIGFnb3RhZG8gZWwgdGllbXBvIGRlIGVzcGVyYSBkZSBsYSBzb2xpY2l0dWQuIgogICAgSURTX0hUVFBfU1RBVFVTX0ZPUkJJRERFTgkJIkVsIHNlcnZpZG9yIGhhIHBvZGlkbyBpbnRlcnByZXRhciBsYSBzb2xpY2l0dWQsIHBlcm8gbGEgcmVjaGF6YS4iCiAgICBJRFNfSFRUUF9TVEFUVVNfU0VSVkVSX0VSUk9SCSJFbCBzZXJ2aWRvciBoYSBlbmNvbnRyYWRvIHVuYSBjb25kaWNp824gaW5lc3BlcmFkYSBxdWUgbGUgaGEgaW1wZWRpZG8gc2F0aXNmYWNlciBsYSBzb2xpY2l0dWQuIgogICAgSURTX0hUVFBfU1RBVFVTX1NFUlZJQ0VfVU5BVkFJTAkiRWwgc2VydmljaW8gZXN04SB0ZW1wb3JhbG1lbnRlIHNvYnJlY2FyZ2Fkby4iCgoKICAgIElEU19ET1dOTE9BRF9TVEFUVVNfUkVUUlkJCSJFbCBzZXJ2aWRvciBlc3ThIG9jdXBhZG8gZW4gZXN0ZSBtb21lbnRvLCBzZSB2b2x2ZXLhIGEgaW50ZW50YXIgbGEgY29uZXhp824gZW4gJWxkIHNlZ3VuZG9zLi4uIgoKICAgIElEU19FUlJPUl9DQVBUSU9OICAgICAgICAgICAgICAgIkVycm9yIC0gSmF2YSBLZXJuZWwiCiAgICBJRFNfSE9VUlNNSU5VVEVTRUNPTkQJICAgICJUaWVtcG8gcmVzdGFudGUgZXN0aW1hZG86ICVkIGhvcmFzICVkIG1pbnV0b3MgJS4wZiBzZWd1bmRvcyIKICAgIElEU19IT1VSTUlOVVRFU0VDT05ECSAgICAiVGllbXBvIHJlc3RhbnRlIGVzdGltYWRvOiAlZCBob3JhICVkIG1pbnV0b3MgJS4wZiBzZWd1bmRvcyIKICAgIElEU19NSU5VVEVTRUNPTkQgCQkgICAgIlRpZW1wbyByZXN0YW50ZSBlc3RpbWFkbzogJWQgbWludXRvcyAlLjBmIHNlZ3VuZG9zIgogICAgSURTX1NFQ09ORCAgICAgICAgICAgICAgICAgICAgICAiVGllbXBvIHJlc3RhbnRlIGVzdGltYWRvOiAlLjBmIHNlZ3VuZG9zIgogICAgSURTX0RJU0tfRlVMTF9FUlJPUl9DQVBUSU9OICAgICAiRGlzY28gbGxlbm8iCiAgICBJRFNfRElTS19GVUxMX0VSUk9SICAgICAgICAgICAgICJKYXZhIEtlcm5lbCBubyBwdWVkZSBkZXNjYXJnYXIgbG9zIGNvbXBvbmVudGVzIG5lY2VzYXJpb3MgcG9ycXVlIGVsIGRpc2NvIGVzdOEgbGxlbm8uICC/RGVzZWEgdm9sdmVyIGEgaW50ZW50YXJsbz8iCiAgICBJRFNfRElTS19XUklURV9FUlJPUl9DQVBUSU9OICAgICJFcnJvciBkZSBlc2NyaXR1cmEgZW4gZGlzY28iCiAgICBJRFNfRElTS19XUklURV9FUlJPUiAgICAgICAgICAgICJTZSBoYSBwcm9kdWNpZG8gdW4gZXJyb3IgY3VhbmRvIEphdmEgS2VybmVsIGludGVudGFiYSBlc2NyaWJpciBlbiBlbCBkaXNjby4gIL9EZXNlYSB2b2x2ZXIgYSBpbnRlbnRhcmxvPyIKICAgIElEU19IVFRQX1NUQVRVU19TRVJWRVJfTk9UX1JFQUNIQUJMRSAiSmF2YSBLZXJuZWwgbm8gcHVlZGUgY29udGludWFyIGNvbiBsYSBjb25maWd1cmFjafNuIGFjdHVhbCBkZSBjb25leGnzbiBhIEludGVybmV0IGRlbCBzaXN0ZW1hLiAgRW4gZWwgUGFuZWwgZGUgY29udHJvbCBkZSBXaW5kb3dzLCBjb21wcnVlYmUgT3BjaW9uZXMgZGUgSW50ZXJuZXQgLT4gQ29uZXhpb25lcyBwYXJhIHZlcmlmaWNhciBxdWUgbGEgaW5mb3JtYWNp824gZGUgbGEgY29uZmlndXJhY2nzbiB5IGRlIHByb3h5IHNlYSBsYSBjb3JyZWN0YS4iCgogICAgSURTX0RPV05MT0FEX1JFVFJZICAgICAgICAgICAgICJFcnJvciBkZSBkZXNjYXJnYSIKICAgIElEU19ET1dOTE9BRF9SRVRSWV9URVhUICAgICAgICAiU2UgaGEgcHJvZHVjaWRvIHVuIGVycm9yIGR1cmFudGUgbGEgZGVzY2FyZ2EgZGUgYWxndW5vcyBjb21wb25lbnRlcyBzb2xpY2l0YWRvcy4gv1F1aWVyZSB2b2x2ZXIgYSBpbnRlbnRhciBkZXNjYXJnYXIgZXN0b3MgY29tcG9uZW50ZXM/IgoKICAgIElEU19ET1dOTE9BRCAgICAgICAgICAgICAgICAgICAiSW5zdGFsYWNp824gZGUgY29tcG9uZW50ZXMgYWRpY2lvbmFsZXMiCglJRFNfRE9XTkxPQURfVU5QQUNLSU5HICAgICAgICAgIkRlc2VtcGFxdWV0YW5kbyBwYXF1ZXRlIgogICAgSURTX0RPV05MT0FEX1RFWFQgICAgICAgICAgICAgICJMYSBhcGxpY2FjafNuIEphdmEgc2UgaW5pY2lhcuEgY3VhbmRvIGxvcyBjb21wb25lbnRlcyBhZGljaW9uYWxlcyBuZWNlc2FyaW9zIHNlIGhheWFuIGRlc2NhcmdhZG8gZSBpbnN0YWxhZG8uIgogICAgCiAgICBJRFNfRklMRV9VUERBVEVfRVJST1IgICAgICAgICAgIlNlIGhhIHByb2R1Y2lkbyB1biBlcnJvciBhbCBhY3R1YWxpemFyICVzJXMuIgogICAgSURTX0ZJTEVfREVMRVRFX0VSUk9SICAgICAgICAgICJTZSBoYSBwcm9kdWNpZG8gdW4gZXJyb3IgYWwgZWxpbWluYXIgJXMuIgogICAgSURTX0pBVkFfSE9NRV9FUlJPUiAgICAgICAgICAgICJJbXBvc2libGUgZGV0ZXJtaW5hciBlbCBkaXJlY3RvcmlvIGRlIGluaWNpbyBKYXZhLiIKICAgIElEU19LRVJORUxfSE9NRV9FUlJPUiAgICAgICAgICAiSW1wb3NpYmxlIGRldGVybWluYXIgbGEgcnV0YSBhIGprZXJuZWwuZGxsLiIKICAgIElEU19KQlJPS0VSX0VSUk9SICAgICAgICAgICAgICAiSW1wb3NpYmxlIGluaWNpYXIgamJyb2tlci5leGUuIgogICAgSURTX0ZBVEFMX0VSUk9SICAgICAgICAgICAgICAgICJKYXZhIG5vIGhhIHBvZGlkbyBkZXNjYXJnYXIgbG9zIGNvbXBvbmVudGVzIG5lY2VzYXJpb3MuICBFbCBwcm9ncmFtYSBzZSBjZXJyYXLhLiIKICAgIElEU19FUlJPUl9ET1dOTE9BRElOR19CVU5ETEVfUFJPUEVSVElFUyAiSmF2YSBubyBoYSBwb2RpZG8gY29tdW5pY2Fyc2UgY29uIGVsIHNlcnZpZG9yIGRlIGRlc2NhcmdhLiAgRWwgcHJvZ3JhbWEgc2UgY2VycmFy4S4iCiAgICBJRFNfRVJST1JfTUFMRk9STUVEX0JVTkRMRV9QUk9QRVJUSUVTICJTZSBoYSBwcm9kdWNpZG8gdW4gZXJyb3IgZW4gbGEgY29tdW5pY2FjafNuIGVudHJlIEphdmEgeSBlbCBzZXJ2aWRvciBkZSBkZXNjYXJnYS4gIEVsIHByb2dyYW1hIHNlIGNlcnJhcuEuIgogICAgSURTX0VSUk9SX01BTEZPUk1FRF9VUkwgIkphdmEgbm8gaGEgcG9kaWRvIHJlYWxpemFyIGxhIGRlc2NhcmdhIGRlc2RlIGVsIFVSTCAnJXMnLiAgRWwgcHJvZ3JhbWEgc2UgY2VycmFy4S4iCkVORAo=