player asm source question

What is Arkos Tracker? Forums Arkos Tracker forum General discussion player asm source question

Viewing 5 posts - 1 through 5 (of 5 total)
  • Author
    Posts
  • #30218
    Malban
    Participant

    Hi,
    as a warm up for the AKG player I am looking at the AKY player.
    (Doying a player for the vectrex – or at least intend to)

    I have already a question for the second byte of the AKY format :-).

    ENDIAN
    a) If you export a song as AKY, the endian byte is always set to little endian.
    Is there a way to change that in the export options?
    b) Since the source export is that -> SOURCE!
    Does it matter anywhere besides the encoding of the PSG frequency?

    If it is (in source export) only used for that – I am gonna ignore it :-).
    Cheers

    Malban

    #30219
    Targhan
    Keymaster

    Hi,

    AKY is I think the way to go, AKG is really (really) more complex, especially with the “player configuration” feature! But of course AKY music takes much more memory (but not that much if the song is simple).

    A) Yes, you can change that in the Setup > Source Profile. On Atari ST, they are using big endian.
    B) The endianness will change how words are encoded (periods and the like).

    #30220
    Malban
    Participant

    First working version:

    I have not had the opportunity to test it on a real vectrex yet. On the emulator it sounds ok.

    No I might start on the AKG…

    [[code]]czozNTYzNTpcIgo7IEFSS09TIFRSQUNLRVIgSUkgCjsgUGxheWVyIGZvciB0aGUgVmVjdHJleCBvZiB0aGUgQUtZIGZvcm1hdAo7IGl7WyYqJl19bnNwaXRlIG9mIHRoZSA2ODA5IGJlaW5nIGEgQklHIEVORElBTgo7CjsgdGhlIEFLWSBtdXN0IGJlIHNhdmVkIGFzIHNvdXJjZXMgZntbJiomXX1vciBsaXR0bGUgRU5ESUFOLCBiZWNhdXNlIHRoYXQgaXMKOyB3aGF0IHRoZSBjb2RlIGJlbG93IGludGVycHJldHMhCjsKOyBQbGF5e1smKiZdfXMgYXQgYW4gYXZlcmFnZSBvZiBhYm91dCAyMDAwIGN5Y2xlcwo7IHNwaWtlcyB1cCB0byAyNTAwIGhhdmUgYmVlbiBzZWVuLgo7IGl7WyYqJl19dCB1c2VzIDMyIGJ5dGVzIG9mIFJBTSwgc3RhcnRpbmcgYXQgJnF1b3Q7YXJrb3NSYW1TdGFydCZxdW90Owo7CjsgVGhpcyBpcyBhIHtbJiomXX1tYW51YWwgdHJhbnNjb2RlIGZyb20gdGhlIDY1MDIgcGxheWVyLCB0aGVyZSBoYXMgYmVlbiBubwo7IGVmZm9ydCB0YWtlbiwgdG8ge1smKiZdfXBlcmZvcm1hbmNlIGVuaGFuY2UgdGhpcyBwbGF5ZXIuCjsKOwo7IE1BQ1JPUyBmb3Igc2hhZG93IHJlZ2lzdGVyIHNldHRpbmcKOyB7WyYqJl19bWFjcm9zIGFzc3VtZXM7IHJlZ2lzdGVyIFUgcG9pbnRpbmcgdG8gVmVjX011c2ljX1dvcmsgKHRoaXMgaXMgYSBzaGFkb3cpCjsgYXtbJiomXX1zc3VtZXMgdmFyIHJlZ2lzdGVyIGlzIHBvc2l0aXZlIChhbHdheXMuLi4pCjsKOyBkZXN0cm95cyBhIApTRVRfUFNHX0RJUl9WQVIge1smKiZdfSAgICBtYWNybyAgICBkaXJlY3RfcmVnaXN0ZXIsIHZhcmlhYmxlX3ZhbHVlIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgIHZ7WyYqJl19YXJpYWJsZV92YWx1ZSAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBkaXJlY3RfcmVnaXN0ZXIsIHUgCiAgICAgICAgICAgIHtbJiomXX0gICAgICAgIGVuZG0gICAgIAo7IGRlc3Ryb3lzIGQKU0VUX1BTR19WQVJfVkFSICAgICBtYWNybyAgICB2YXJpYWJsZV9yZWdpc3Rle1smKiZdfXIsIHZhcmlhYmxlX3ZhbHVlIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgIHZhcmlhYmxlX3ZhbHVlIAogICAgICAgICAgICB7WyYqJl19ICAgICAgICBsZGIgICAgICB2YXJpYWJsZV9yZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBiLHUgCiAgICAgIHtbJiomXX0gICAgICAgICAgICAgIGVuZG0gICAgIAo7IGRlc3Ryb3lzIGEsIGIKU0VUX1BTR19WQVJfRElSICAgICBtYWNybyAgICB2YXJpYWJse1smKiZdfWVfcmVnaXN0ZXIsIGRpcmVjdF92YWx1ZSAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAjZGlyZWN0X3ZhbHVlIAogICAgICB7WyYqJl19ICAgICAgICAgICAgICBsZGIgICAgICB2YXJpYWJsZV9yZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBiLCB1IHtbJiomXX0KICAgICAgICAgICAgICAgICAgICBlbmRtICAgICAKOyBkZXN0cm95cyBhLCBiClNFVF9QU0dfVkFSX0RBVEFfWV9JTkMgIG1hY3Jve1smKiZdfSAgdmFyaWFibGVfcmVnaXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgbGRiICAgICAgdmFyaWFibGVfcmVnaXN0ZXIgCiAgICAgICB7WyYqJl19ICAgICAgICAgICAgIGxkYSAgICAgICx5KyAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBiLCB1IAogICAgICAgICAgICAgIHtbJiomXX0gICAgICBlbmRtICAgICAKOwo7CiAgICAgICAgICAgICAgICAgICAgYnNzICAgICAgCiAgICAgICAgICAgICAgICAgICAgb3JnICAge1smKiZdfSAgIGFya29zUmFtU3RhcnQgCk5PX0VSUk9SICAgICAgICAgICAgRVFVICAgICAgMCAKTk9fM19DSEFOTkVMU19FUlJPUiAgRVFVICB7WyYqJl19ICAgMSAKUExZX2Vycm9yICAgICAgICAgICBkcyAgICAgICAxIApBQ0NBICAgICAgICAgICAgICAgIGRzICAgICAgIDEgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgIDsgc2Vuc2VsZXNzbHkgbmFtZWQgdG1wIApBQ0NCICAgICAgICAgICAgICAgIGRzICAgICAgIDEge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgc2Vuc2VsZXNzbHkgbmFtZWQgdG1wIAp2b2x1bWVSZWdpc3RlciAgICAgIGRzICB7WyYqJl19ICAgICAxIApmcmVxdWVuY3lSZWdpc3RlciAgIGRzICAgICAgIDEgCnI3ICAgICAgICAgICAgICAgICAgZHMgICAgICAgMSAKOwo7IHtbJiomXX0mcXVvdDtmbGFnJnF1b3Q7CjsgMCA9IGluaXRpYWwKOyAxID0gbm9uIGluaXRpYWwKOyBubyBvcGNvZGUgdXNlZCEKOyBmbGFnIGlze1smKiZdfSBsb2FkZWQgaW50byByZWcgYiB1cG9uIGNhbGwgb2Ygc3Vicm91dGluZSEKaW5pdEZsYWcxICAgICAgICAgICBkcyAgICAgICAxIAp7WyYqJl19aW5pdEZsYWcyICAgICAgICAgICBkcyAgICAgICAxIAppbml0RmxhZzMgICAgICAgICAgIGRzICAgICAgIDEgClBMWV9BS1lfUEFUVHtbJiomXX1FUk5GUkFNRUNPVU5URVJfT1ZFUiAgZHMgIDIgICAgICAgICAgICAgICAgICAgOyBwb2ludGVyIHRvIG5leHQgcGF0dGVybiBzdGFye1smKiZdfXQgClBMWV9BS1lfUEFUVEVSTkZSQU1FQ09VTlRFUiAgZHMgIDIgICAgICAgICAgICAgICAgICAgICAgICA7IHBvaW50ZXIgaW50byB7WyYqJl19dGhlIGN1cnJlbnQgcGF0dGVybiAKUExZX0FLWV9DSEFOTkVMMV9QVFRSQUNLICBkcyAgMiAKUExZX0FLWV9DSEFOTkVMMl9QVFRSQXtbJiomXX1DSyAgZHMgIDIgClBMWV9BS1lfQ0hBTk5FTDNfUFRUUkFDSyAgZHMgIDIgClBMWV9BS1lfQ0hBTk5FTDFfV0FJVEJFRk9SRU5FWFRSe1smKiZdfUVHSVNURVJCTE9DSyAgZHMgIDEgClBMWV9BS1lfQ0hBTk5FTDJfV0FJVEJFRk9SRU5FWFRSRUdJU1RFUkJMT0NLICBkcyAgMSAKUEx7WyYqJl19WV9BS1lfQ0hBTk5FTDNfV0FJVEJFRk9SRU5FWFRSRUdJU1RFUkJMT0NLICBkcyAgMSAKUExZX0FLWV9DSEFOTkVMMV9QVFJFR0lTVHtbJiomXX1FUkJMT0NLICBkcyAgMiAKUExZX0FLWV9DSEFOTkVMMl9QVFJFR0lTVEVSQkxPQ0sgIGRzICAyIApQTFlfQUtZX0NIQU5ORUwzX1BUe1smKiZdfVJFR0lTVEVSQkxPQ0sgIGRzICAyIApQTFlfQUtZX1BTR1JFR0lTVEVSMTNfUkVUUklHICBkcyAgMSAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgIDsgY29tcGFyZSB2YWwgCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQo7U29tZSBzdG9yZWQgUFNHIHtbJiomXX1yZWdpc3RlcnMuIFRoZXkgTVVTVCBiZSBjb25zZWN1dGl2ZS4KUExZX0FLWV9QU0dSRUdJU1RFUjYgCiAgICAgICAgICAgICAgICAge1smKiZdfSAgIGRzICAgICAgIDEgClBMWV9BS1lfUFNHUkVHSVNURVIxMSAKICAgICAgICAgICAgICAgICAgICBkcyAgICAgICAxIApQTFlfQUt7WyYqJl19WV9QU0dSRUdJU1RFUjEyIAogICAgICAgICAgICAgICAgICAgIGRzICAgICAgIDEgClBMWV9BS1lfUFNHUkVHSVNURVIxMyAKICAgIHtbJiomXX0gICAgICAgICAgICAgICAgZHMgICAgICAgMSAKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09e1smKiZdfT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KO0lzIHRoZXJlIGEgbG9hZGVkIFBsYXllciBDb25maWd1cmF0aW9uIHNvdXJ7WyYqJl19Y2U/IElmIG5vLCB1c2UgYSBkZWZhdWx0IGNvbmZpZ3VyYXRpb24uCjsgPSZndDsgdG8gZ2VuZXJhdGUgUGxheWVyIENvbmZpZ3VyYXtbJiomXX10aW9uLCBzZWUgZXhwb3J0IG9wdGlvbiBpbiBBcmtvcyBUcmFja2VyIDIgCjsgc2ltcGxpZmllZCB2ZXJzaW9uLi4uCiAgICAgICAge1smKiZdfSAgICAgICAgICAgIGlmbmRlZiAgIFBMWV9DRkdfQ29uZmlndXJhdGlvbklzUHJlc2VudCAKUExZX0NGR19Vc2VIYXJkd2FyZVNvdW57WyYqJl19ZHMgID0gIDEgClBMWV9DRkdfVXNlUmV0cmlnICAgPSAgICAgICAgMSAKUExZX0NGR19Ob1NvZnROb0hhcmQgID0gICAgICAxICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICA7IG5vdCB1c2VkIApQTFlfQ0ZHX05vU29mdE5vSGFyZF9Ob2lzZSAgPSAgMSAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgIDsgbm90IHVzZWQgClBMWV9DRkdfU29mdE9ubHkgICAgPSAgICAgICAgMSAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgICAgOyBub3QgdXNlZCAKUExZX0NGR19Tb2Z0T25seV9Ob2lzZSAgPSAgICAxICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICA7IG5vdCB1c2VkIApQTFlfQ0ZHX1NvZnRUb0hhcmQgID0gICAgICAgIDEgClBMWV9DRkdfU29mdFRvSGFyZF9Ob2lzZSAge1smKiZdfT0gIDEgClBMWV9DRkdfU29mdFRvSGFyZF9SZXRyaWcgID0gIDEgICAgICAgICAgICAgICAgICAgICAgICAgICA7IG5vdCB1c2VkIAp7WyYqJl19UExZX0NGR19IYXJkT25seSAgICA9ICAgICAgICAxIApQTFlfQ0ZHX0hhcmRPbmx5X05vaXNlICA9ICAgIDEgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgIDsgbm90IHVzZWQgClBMWV9DRkdfSGFyZE9ubHlfUmV0cmlnICA9ICAgMSAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgICAgICAgOyBub3QgdXNlZCAKUExZX0NGR19Tb2Z0QW5kSGFyZCAgPSAgICAgICAxICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICA7IG5vdCB1c2VkIApQTFlfQ0ZHX1NvZnRBbmRIYXJkX05vaXNlICA9ICAxIApQTFlfQ0ZHX1NvZnRBbmRIYXJkX1JldHJpZyAgPXtbJiomXX0gIDEgICAgICAgICAgICAgICAgICAgICAgICAgIDsgbm90IHVzZWQgCiBlbmRpZiAgCjtBZ2dsb21lcmF0ZXMgdGhlIGhhcmR3YXJle1smKiZdfSBzb3VuZCBjb25maWd1cmF0aW9uIGZsYWdzLCBiZWNhdXNlIHRoZXkgYXJlIHRyZWF0ZWQgdGhlIHNhbWUgaW4gdGhpcyBwbGF5ZXJ7WyYqJl19LgogaWZkZWYgIFBMWV9DRkdfU29mdFRvSGFyZCAKUExZX0FLWV9VU0VfU29mdEFuZEhhcmRfQWdnbG9tZXJhdGVkICA9ICAxIAogZXtbJiomXX1uZGlmICAKIGlmZGVmICBQTFlfQ0ZHX1NvZnRBbmRIYXJkIAogICAgICAgICAgICAgICAgICAgIFBMWV9BS1lfVVNFX1NvZnRBbmRIe1smKiZdfWFyZF9BZ2dsb21lcmF0ZWQgID0gMSAKIGVuZGlmICAKIGlmZGVmICBQTFlfQ0ZHX0hhcmRUb1NvZnQgClBMWV9BS1lfVVNFX1NvZnR7WyYqJl19QW5kSGFyZF9BZ2dsb21lcmF0ZWQgID0gIDEgCiBlbmRpZiAgCiBpZmRlZiAgUExZX0NGR19IYXJkT25seSAKUExZX0FLWV9VU0VfU3tbJiomXX1vZnRBbmRIYXJkX0FnZ2xvbWVyYXRlZCAgPSAgMSAKIGVuZGlmICAKIGlmZGVmICBQTFlfQ0ZHX1NvZnRUb0hhcmRfTm9pc2UgClBMe1smKiZdfVlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9Ob2lzZV9BZ2dsb21lcmF0ZWQgID0gIDEgCiBlbmRpZiAgCiBpZmRlZiAgUExZX0NGR19Tb2Z7WyYqJl19dEFuZEhhcmRfTm9pc2UgClBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX05vaXNlX0FnZ2xvbWVyYXRlZCAgPSAgMSAKIGVuZGlmICAKIHtbJiomXX1pZmRlZiAgUExZX0NGR19IYXJkVG9Tb2Z0X05vaXNlIApQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9Ob2lzZV9BZ2dsb21lcmF0ZWQge1smKiZdfSA9ICAxIAogZW5kaWYgIAo7QW55IG5vaXNlPwogaWZkZWYgIFBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX05vaXNlX0FnZ2xvbWVyYXR7WyYqJl19ZWQgClBMWV9BS1lfVVNFX05vaXNlICAgPSAgICAgICAgMSAKIGVuZGlmICAKIGlmZGVmICBQTFlfQ0ZHX05vU29mdE5vSGFyZF9Ob3tbJiomXX1pc2UgClBMWV9BS1lfVVNFX05vaXNlICAgPSAgICAgICAgMSAKIGVuZGlmICAKIGlmZGVmICBQTFlfQ0ZHX1NvZnRPbmx5X05vaXNle1smKiZdfSAKUExZX0FLWV9VU0VfTm9pc2UgICA9ICAgICAgICAxIAogZW5kaWYgIAo7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT17WyYqJl19PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAgICAgICAgICAgICAgIGNvZGUgICAgIHtbJiomXX0KOyBJbml0aWFsaXplcyB0aGUgcGxheWVyLgo7IGV4cGVjdGVkIGluIHJlZ1kgdGhlIHNvbmcgYWRkcmVzcywgdXN1YWxseSBzb21le1smKiZdfXRoaW5nIGxpa2UgJnF1b3Q7TWFpbl9TdWJzb25nMCZxdW90Owo7IHkgaXMgb3VyIG1haW4gJnF1b3Q7cG9pbnRlciZxdW90OyByZWd7WyYqJl19aXN0ZXIKUExZX0FLWV9JTklUIAogICAgICAgICAgICAgICAgICAgIGNsciAgICAgIFBMWV9lcnJvciAgICAgICAgICAgICAgICAgIHtbJiomXX0gIDsgaW5pdGlhbGx5IG5vIGVycm9yISAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgICAgICA7IFNraXBzIHRoZSBoZWFkZXIuIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgIDsgU2tpcHMgdGhlIGZvcm1hdCB2ZXJzaW9uLiAKICAgICAgICAgICAgICAgICAgICBMREQgICAgICAseSAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICA7IGQgbm93IGEgZm9ybWF0LCBiID0gY2hhbm5lbCBjb3VudCAKICAgICAgICAgICAgICAgICAge1smKiZdfSAgY21wYiAgICAgIzMgICAgICAgICAgICAgICAgICAgICAgICAgICA7IGNoYW5uZWwgY291bnQgCiAgICAgICAgICAgICAgICAgICB7WyYqJl19IEJORSAgICAgIGNoYW5uZWxFcnJvciAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICA7IHR3byBieXRlczogZm9ybWF0IHZlcnNpb24gYW5kIGNoYW5uZWwgY291bnQgCiAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyBmb3VyIGJ5dGVzOiBmcmVxdWVuY3kgKHNob3VsZCBmb3IgVmVjdHJ7WyYqJl19ZXggaG9wZWZ1bGx5IDE1MDAwMDBIeiAKICAgICAgICAgICAgICAgICAgICBsZWF5ICAgICA2LHkgCiAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOyB5L3BjRGF0YSBub3cgcG9pbnRpbmcgdG8gc3Vic29uZyAwe1smKiZdfSBsaW5rZXIgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHNhdmUgY3V7WyYqJl19cnJlbnQgbGlua2VyIHBvaW50ZXIsIHRoaXMgaXMgdGhlIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgIDsgYWRkcmVzcyBvZiB0aGUgdGhlIG5leHQgcGF0dGVybiB0byBiZSBpbml0aWFsaXplZCEgCiAgICAge1smKiZdfSAgICAgICAgICAgICAgIHN0eSAgICAgIFBMWV9BS1lfUEFUVEVSTkZSQU1FQ09VTlRFUl9PVkVSIAogICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgaW5pdGlhbCBzdGF0ZSA9IDAgCiAgICAgICAgICAgICAgIHtbJiomXX0gICAgIGNsciAgICAgIGluaXRGbGFnMSAKICAgICAgICAgICAgICAgICAgICBjbHIgICAgICBpbml0RmxhZzIgCiAgICAgICAgICAge1smKiZdfSAgICAgICAgIGNsciAgICAgIGluaXRGbGFnMyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgICA7IGluaXQgZnJhbWUgY291bnRlciB3aXRoIDEsIHNvIGl0IGdldHMgY291bnQgZG93biBpbW1lZGlhdGVseSB0b3tbJiomXX0gMCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsgYW5kIHJlaW5pdHMge1smKiZdfXRoZSBuZXh0IChGSVJTVCkgcGF0dGVybiEgCiAgICAgICAgICAgICAgICAgICAgbGRkICAgICAgIzEgCiAgICAgICAgICAgICAgICB7WyYqJl19ICAgIHN0ZCAgICAgIFBMWV9BS1lfUEFUVEVSTkZSQU1FQ09VTlRFUiAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAjJGZmIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICA7IG1hbGJhbiBhZGQsIGRlZmF1bHQgcmV0cmlnZ2VyIAogICAgICAgICAgICAgICAgICAge1smKiZdfSBzdGEgICAgICBQTFlfQUtZX1BTR1JFR0lTVEVSMTNfUkVUUklHIAplcnJvclJUUyAKICAgICAgICAgICAgICAgICAgICBSVFMgICB7WyYqJl19ICAgCgpjaGFubmVsRXJyb3IgCjsgZG9uJiMwMzk7dCByZWFsbHkga25vdyB3aGF0IHRoZSBvcmlnaW5hbCBwbGF5ZXIgaXMgCjsgdHtbJiomXX1yeWluZyB0byBhY29tcGxpc2ggaGVyZSAoNjUwMikKOyBpZiBub3QgMyBpdCBnb2VzIGJhY2sgdG8gYmVmb3JlIHRoZSBmcmVxdWVue1smKiZdfWN5IHNraXAKOyAtJmd0O2xvb2tzIHdyb25nIChjaGVja2VkIHdpdGggejgwIGNvZGUsIDY1MDIgaXMgd3JvbmchKQo7IGZvciBub3d7WyYqJl19IEkganVzdCBleGl0IQogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICNOT18zX0NIQU5ORUxTX0VSUk9SIAogICAgICAgICAgIHtbJiomXX0gICAgICAgICBzdGEgICAgICBQTFlfZXJyb3IgCiAgICAgICAgICAgICAgICAgICAgcnRzICAgICAgCgo7LS0tLS0tLS0tLS0KOyAge1smKiZdfSAgICAgUGxheXMgdGhlIG11c2ljLiBJdCBtdXN0IGhhdmUgYmVlbiBpbml0aWFsaXplZCBiZWZvcmUuClBMWV9BS1lfUExBWSAKICB7WyYqJl19ICAgICAgICAgICAgICAgICAgbGR1ICAgICAgI1ZlY19NdXNpY19Xb3JrICAgICAgICAgICAgICA7IHByZXJlcXVpc2l0ZSBmb3Igd3tbJiomXX1yaXRpbmcgdG8gUFNHIHNoYWRvdyByZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBsZGQgICAgICBQTFlfQUtZX1BBVFRFUk5Ge1smKiZdfVJBTUVDT1VOVEVSIAogICAgICAgICAgICAgICAgICAgIHN1YmQgICAgICMxIAogICAgICAgICAgICAgICAgICAgIHN0ZCAgICAgIFB7WyYqJl19TFlfQUtZX1BBVFRFUk5GUkFNRUNPVU5URVIgCiAgICAgICAgICAgICAgICAgICAgYm5lICAgICAgcmVhZF90aGVfdHJhY2tzICAgIHtbJiomXX0gICAgICAgICAgO1RoZSBwYXR0ZXJuIGlzIG5vdCBvdmVyLiBnbyBvbiByZWFkaW5nIHRoZSB0cmFjayAKOyBUaGUgcGF0dGVybiBpe1smKiZdfXMgb3Zlci4gUmVhZHMgdGhlIG5leHQgb25lLiAgClBMWV9BS1lfUFRMSU5LRVIgCiAgICAgICAgICAgICAgICAgICAgbGR5ICAgICB7WyYqJl19IFBMWV9BS1lfUEFUVEVSTkZSQU1FQ09VTlRFUl9PVkVSIDsgZ2V0IHRoZSBhZGRyZXNzIG9mIHRoZSBuZXh0IGZyYW1lIAogICAgIHtbJiomXX0gICAgICAgICAgICAgICBsZGQgICAgICAseSsrICAgICAgICAgICAgICAgICAgICAgICAgIDtHZXRzIHRoZSBkdXJhdGlvbiBvZiB0e1smKiZdfWhlIFBhdHRlcm4sIG9yIDAgaWYgZW5kIG9mIHRoZSBzb25nLiAKICAgICAgICAgICAgICAgICAgICBCTkUgICAgICBQTFlfQUtZX0x7WyYqJl19SU5LRVJOT1RFTkRTT05HIAogICAgICAgICAgICAgICAgICAgIGxkeSAgICAgICx5KysgICAgICAgICAgICAgICAgICAgICAgICAgO3tbJiomXX0gRW5kIG9mIHRoZSBzb25nLiBXaGVyZSB0byBsb29wPyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICA7R2V0cyB0aGUgZHVyYXRpb24gYWdhaW4uIE5vIG5lZWQgdG8gY2hlY2sgdGhlIGVuZCBvZiB0aGUgc297WyYqJl19bmcsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO3dlIGtub3cgaXQgY3tbJiomXX1vbnRhaW5zIGF0IGxlYXN0IG9uZSBwYXR0ZXJuLiAKICAgICAgICAgICAgICAgICAgICBsZGQgICAgICAseSsrICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgICA7R2V0cyB0aGUgZHVyYXRpb24gb2YgdGhlIFBhdHRlcm4sIG9yIDAgaWYgZW5kIG9mIHRoZSBzb25nLiAKUEx7WyYqJl19WV9BS1lfTElOS0VSTk9URU5EU09ORyAKICAgICAgICAgICAgICAgICAgICBzdGQgICAgICBQTFlfQUtZX1BBVFRFUk5GUkFNRUNPVXtbJiomXX1OVEVSIAogICAgICAgICAgICAgICAgICAgIGxkZCAgICAgICx5KysgCiAgICAgICAgICAgICAgICAgICAgc3RkICAgICAgUExZX0FLe1smKiZdfVlfQ0hBTk5FTDFfUFRUUkFDSyAKICAgICAgICAgICAgICAgICAgICBsZGQgICAgICAseSsrIAogICAgICAgICAgICAgICAgICAgIHN7WyYqJl19dGQgICAgICBQTFlfQUtZX0NIQU5ORUwyX1BUVFJBQ0sgCiAgICAgICAgICAgICAgICAgICAgbGRkICAgICAgLHkrKyAKICAgICAgIHtbJiomXX0gICAgICAgICAgICAgc3RkICAgICAgUExZX0FLWV9DSEFOTkVMM19QVFRSQUNLIAogICAgICAgICAgICAgICAgICAgIHN0eSAgICAge1smKiZdfSBQTFlfQUtZX1BBVFRFUk5GUkFNRUNPVU5URVJfT1ZFUiAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAjMDEgICAgICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICA7UmVzZXRzIHRoZSBSZWdpc3RlckJsb2NrcyBvZiB0aGUgY2hhbm5lbCAmZ3Q7MS4gVGhlIGZpcnN0IHtbJiomXX1vbmUgaXMgc2tpcHBlZCBzbyB0aGVyZSBpcyBubyBuZWVkIHRvIGRvIHNvLiAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBQe1smKiZdfUxZX0FLWV9DSEFOTkVMMl9XQUlUQkVGT1JFTkVYVFJFR0lTVEVSQkxPQ0sgCiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgUEx7WyYqJl19WV9BS1lfQ0hBTk5FTDNfV0FJVEJFRk9SRU5FWFRSRUdJU1RFUkJMT0NLIAogICAgICAgICAgICAgICAgICAgIGJyYSAgICAgIGluX3tbJiomXX1yZWFkX3RoZV90cmFja3MxIAoKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjtSZWFkaW5nIHRoZSBUcmFje1smKiZdfWtzLgo7ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KcmVhZF90aGVfdHJhY2tzIAo7IENoYW5uZWwgMQogICB7WyYqJl19ICAgICAgICAgICAgICAgICBkZWMgICAgICBQTFlfQUtZX0NIQU5ORUwxX1dBSVRCRUZPUkVORVhUUkVHSVNURVJCTE9DSyA7RnJhbXtbJiomXX1lcyB0byB3YWl0IGJlZm9yZSByZWFkaW5nIHRoZSBuZXh0IFJlZ2lzdGVyQmxvY2suIDAgPSBmaW5pc2hlZC4gCiAgICAgICAgICAge1smKiZdfSAgICAgICAgIGJuZSAgICAgIFBMWV9BS1lfQ0hBTk5FTDFfUkVHSVNURVJCTE9DS19QUk9DRVNTIAppbl9yZWFkX3RoZV90cmFja3N7WyYqJl19MSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtUaGlzIFJlZ2lzdGVyQntbJiomXX1sb2NrIGlzIGZpbmlzaGVkLiBSZWFkcyB0aGUgbmV4dCBvbmUgZnJvbSB0aGUgVHJhY2suIAogICAgICAgICAgICAgICAgICAgIGNse1smKiZdfXIgICAgICBpbml0RmxhZzEgICAgICAgICAgICAgICAgICAgIDtPYnZpb3VzbHksIHN0YXJ0cyBhdCB0aGUgaW5pdGlhbCBzdGF0ZS57WyYqJl19IAogICAgICAgICAgICAgICAgICAgIGxkeSAgICAgIFBMWV9BS1lfQ0hBTk5FTDFfUFRUUkFDSyAKICAgICAgICAgICAgICAgICAgIHtbJiomXX0gbGRhICAgICAgLHkrICAgICAgICAgICAgICAgICAgICAgICAgICA7IEEgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBibG9jay4gCiAge1smKiZdfSAgICAgICAgICAgICAgICAgIHN0YSAgICAgIFBMWV9BS1lfQ0hBTk5FTDFfV0FJVEJFRk9SRU5FWFRSRUdJU1RFUkJMT0NLIAogICB7WyYqJl19ICAgICAgICAgICAgICAgICBsZGQgICAgICAseSsrIAogICAgICAgICAgICAgICAgICAgIHN0ZCAgICAgIFBMWV9BS1lfQ0hBTk5FTHtbJiomXX0xX1BUUkVHSVNURVJCTE9DSyAKICAgICAgICAgICAgICAgICAgICBzdHkgICAgICBQTFlfQUtZX0NIQU5ORUwxX1BUVFJBQ0sgClBMe1smKiZdfVlfQUtZX0NIQU5ORUwxX1JFR0lTVEVSQkxPQ0tfUFJPQ0VTUyAKOwo7IENoYW5uZWwgMgogICAgICAgICAgICAgICAgICAgIGRlYyB7WyYqJl19ICAgICBQTFlfQUtZX0NIQU5ORUwyX1dBSVRCRUZPUkVORVhUUkVHSVNURVJCTE9DSyA7RnJhbWVzIHRvIHdhaXQgYmVmb3JlIHJlYXtbJiomXX1kaW5nIHRoZSBuZXh0IFJlZ2lzdGVyQmxvY2suIDAgPSBmaW5pc2hlZC4gCiAgICAgICAgICAgICAgICAgICAgYm5lICAgICAgUExZe1smKiZdfV9BS1lfQ0hBTk5FTDJfUkVHSVNURVJCTE9DS19QUk9DRVNTIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICAgIDtUaGlzIFJlZ2lzdGVyQmxvY2sgaXMgZmluaXNoZWQuIFJlYWRzIHRoZSBuZXh0IG9uZSBmcm9tIHtbJiomXX10aGUgVHJhY2suIAogICAgICAgICAgICAgICAgICAgIGNsciAgICAgIGluaXRGbGFnMiAgICAgICAgICAgICAgICAgICAgO09idmlve1smKiZdfXVzbHksIHN0YXJ0cyBhdCB0aGUgaW5pdGlhbCBzdGF0ZS4gCiAgICAgICAgICAgICAgICAgICAgbGR5ICAgICAgUExZX0FLWV9DSEF7WyYqJl19Tk5FTDJfUFRUUkFDSyAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAseSsgICAgICAgICAgICAgICAgICAgICAgICAgIDtBIHtbJiomXX1pcyB0aGUgZHVyYXRpb24gb2YgdGhlIGJsb2NrLiAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBQTFlfQUtZX0NIQU5ORUwye1smKiZdfV9XQUlUQkVGT1JFTkVYVFJFR0lTVEVSQkxPQ0sgCiAgICAgICAgICAgICAgICAgICAgbGRkICAgICAgLHkrKyAKICAgICAgICAgICB7WyYqJl19ICAgICAgICAgc3RkICAgICAgUExZX0FLWV9DSEFOTkVMMl9QVFJFR0lTVEVSQkxPQ0sgCiAgICAgICAgICAgICAgICAgICAgc3R5IHtbJiomXX0gICAgIFBMWV9BS1lfQ0hBTk5FTDJfUFRUUkFDSyAKUExZX0FLWV9DSEFOTkVMMl9SRUdJU1RFUkJMT0NLX1BST0NFU1MgCjsKOyBje1smKiZdfWhhbm5lbCAzCiAgICAgICAgICAgICAgICAgICAgZGVjICAgICAgUExZX0FLWV9DSEFOTkVMM19XQUlUQkVGT1JFTkVYVFJFR0lTVEV7WyYqJl19UkJMT0NLIDtGcmFtZXMgdG8gd2FpdCBiZWZvcmUgcmVhZGluZyB0aGUgbmV4dCBSZWdpc3RlckJsb2NrLiAwID0gZmluaXNoZWQuIHtbJiomXX0KICAgICAgICAgICAgICAgICAgICBibmUgICAgICBQTFlfQUtZX0NIQU5ORUwzX1JFR0lTVEVSQkxPQ0tfUFJPQ0VTUyAKICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7VGhpcyBSZWdpc3RlckJsb2NrIGlzIGZ7WyYqJl19aW5pc2hlZC4gUmVhZHMgdGhlIG5leHQgb25lIGZyb20gdGhlIFRyYWNrLiAKICAgICAgICAgICAgICAgICAgICBjbHIgICAgICBpbntbJiomXX1pdEZsYWczICAgICAgICAgICAgICAgICAgICA7T2J2aW91c2x5LCBzdGFydHMgYXQgdGhlIGluaXRpYWwgc3RhdGUuIAogICAgICAge1smKiZdfSAgICAgICAgICAgICBsZHkgICAgICBQTFlfQUtZX0NIQU5ORUwzX1BUVFJBQ0sgCiAgICAgICAgICAgICAgICAgICAgbGRhICAgICB7WyYqJl19ICx5KyAgICAgICAgICAgICAgICAgICAgICAgICAgO2EgaXMgdGhlIGR1cmF0aW9uIG9mIHRoZSBibG9jay4gCiAgICAgICAgICAgIHtbJiomXX0gICAgICAgIHN0YSAgICAgIFBMWV9BS1lfQ0hBTk5FTDNfV0FJVEJFRk9SRU5FWFRSRUdJU1RFUkJMT0NLIAogICAgICAgICAgICAge1smKiZdfSAgICAgICBsZGQgICAgICAseSsrIAogICAgICAgICAgICAgICAgICAgIHN0ZCAgICAgIFBMWV9BS1lfQ0hBTk5FTDNfUFRSRUdJU1R7WyYqJl19RVJCTE9DSyAKICAgICAgICAgICAgICAgICAgICBzdHkgICAgICBQTFlfQUtZX0NIQU5ORUwzX1BUVFJBQ0sgClBMWV9BS1lfQ0hBTntbJiomXX1ORUwzX1JFR0lTVEVSQkxPQ0tfUFJPQ0VTUyAKOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjtSZWFkaW5ne1smKiZdfSB0aGUgUmVnaXN0ZXJCbG9jay4KOyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgICAgICAgICAgICB7WyYqJl19ICAgIExEQSAgICAgICMwOCAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICB2b2x1bWVSZWdpc3RlciAgICAgICAgICAgICAgIHtbJiomXX07IGZpcnN0IHZvbHVtZSByZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBjbHIgICAgICBmcmVxdWVuY3lSZWdpc3RlciAKICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFJlZ2lzdGVyIDcgd2l0aCBkZWZ7WyYqJl19YXVsdCB2YWx1ZXM6IGZ1bGx5IHNvdW5kLW9wZW4gYnV0IG5vaXNlLWNsb3NlLiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7UjcgaGFzIGJlZW4gc2hpZnQgdHdpY2UgdG8gdGhlIGxlZnQsIGl0IHdpbGwge1smKiZdfWJlIHNoaWZ0ZWQgYmFjayBhcyB0aGUgY2hhbm5lbHMgYXJlIHRyZWF0ZWQuIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgICN7WyYqJl19JEUwIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIHI3IAo7CjtDaGFubmVsIDEgCiAgICAgICAgICAgICAgICAgICAgbGR5IHtbJiomXX0gICAgIFBMWV9BS1lfQ0hBTk5FTDFfUFRSRUdJU1RFUkJMT0NLIAogICAgICAgICAgICAgICAgICAgIGxkYiAgICAgIGluaXRGbGFne1smKiZdfTEgCiAgICAgICAgICAgICAgICAgICAgYlNSICAgICAgUExZX0FLWV9SRUFEUkVHSVNURVJCTE9DSyAKICAgICAgICAgICAgICAgICB7WyYqJl19ICAgbGRhICAgICAgIzEgCiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgaW5pdEZsYWcxIAogICAgICAgICAgICAgICAgICAgIHtbJiomXX1zdHkgICAgICBQTFlfQUtZX0NIQU5ORUwxX1BUUkVHSVNURVJCTE9DSyAKOwo7IENoYW5uZWwgMiAKICAgICAgICAgICAgICAgICAge1smKiZdfSAgTFNSICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICA7U2hpZnRzIHRoZSBSNyBmb3IgdGhlIG5leHQgY2hhbm5lbHN7WyYqJl19LiAKICAgICAgICAgICAgICAgICAgICBsZHkgICAgICBQTFlfQUtZX0NIQU5ORUwyX1BUUkVHSVNURVJCTE9DSyAKICAgICAgICAgIHtbJiomXX0gICAgICAgICAgbGRiICAgICAgaW5pdEZsYWcyIAogICAgICAgICAgICAgICAgICAgIGJTUiAgICAgIFBMWV9BS1lfUkVBRFJFR0lTe1smKiZdfVRFUkJMT0NLIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICMxIAogICAgICAgICAgICAgICAgICAgIHN0YSAgICAgIGluaXR7WyYqJl19RmxhZzIgCiAgICAgICAgICAgICAgICAgICAgc3R5ICAgICAgUExZX0FLWV9DSEFOTkVMMl9QVFJFR0lTVEVSQkxPQ0sgCjsKOyBDaHtbJiomXX1hbm5lbCAzIAogICAgICAgICAgICAgICAgICAgIFJPUiAgICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgO1NoaWZ0cyB0e1smKiZdfWhlIFI3IGZvciB0aGUgbmV4dCBjaGFubmVscy4gCiAgICAgICAgICAgICAgICAgICAgbGR5ICAgICAgUExZX0FLWV9DSEFOTkVMM197WyYqJl19UFRSRUdJU1RFUkJMT0NLIAogICAgICAgICAgICAgICAgICAgIGxkYiAgICAgIGluaXRGbGFnMyAKICAgICAgICAgICAgICAgICAgIHtbJiomXX0gYlNSICAgICAgUExZX0FLWV9SRUFEUkVHSVNURVJCTE9DSyAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAjMSAKICAgICAge1smKiZdfSAgICAgICAgICAgICAgc3RhICAgICAgaW5pdEZsYWczIAogICAgICAgICAgICAgICAgICAgIHN0eSAgICAgIFBMWV9BS1lfQ0hBTk57WyYqJl19RUwzX1BUUkVHSVNURVJCTE9DSyAKOwo7QWxtb3N0IGFsbCB0aGUgY2hhbm5lbCBzcGVjaWZpYyByZWdpc3RlcnMgaGF2ZSBiZWVuIHtbJiomXX1zZW50LiBOb3cgc2VuZHMgdGhlIHJlbWFpbmluZyByZWdpc3RlcnMgKDYsIDcsIDExLCAxMiwgMTMpLgo7UmVnaXN0ZXIgNy4gTm90e1smKiZdfWUgdGhhdCBtYW5hZ2luZyByZWdpc3RlciA3IGJlZm9yZSA2LzExLzEyIGlzIGRvbmUgb24gcHVycG9zZS4KICAgICAgICAgICAgICB7WyYqJl19ICAgICAgU0VUX1BTR19ESVJfVkFSICA3LCByNyAKIGlmZGVmICBQTFlfQUtZX1VTRV9Ob2lzZSAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICA7Q09ORklHIFNQRUNJRklDIAogICAgICAgICAgICAgICAgICAgIFNFVF9QU0dfRElSX1ZBUiAgNiwgUExZX0FLe1smKiZdfVlfUFNHUkVHSVNURVI2IAogZW5kaWYgIAogaWZkZWYgIFBMWV9DRkdfVXNlSGFyZHdhcmVTb3VuZHMgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19ESVJfVkFSICAxMSwgUExZX0FLWV9QU3tbJiomXX1HUkVHSVNURVIxMSAKICAgICAgICAgICAgICAgICAgICBTRVRfUFNHX0RJUl9WQVIgIDEyLCBQTFlfQUtZX1BTR1JFR0lTVEVSMTIge1smKiZdfQogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxMyAKICAgICAgICAgICAgICAgICAgICBjbXB7WyYqJl19YSAgICAgUExZX0FLWV9QU0dSRUdJU1RFUjEzX1JFVFJJRyA7SWYgSXNSZXRyaWc/LCBmb3JjZSB0aGUgUjEzIHRvIGJlIHRyaWdnZXtbJiomXX1yZWQuIAogICAgICAgICAgICAgICAgICAgIGJlcSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxM19FTkQgCiAgICAgICAgICAgICAge1smKiZdfSAgICAgIHN0YSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxM19SRVRSSUcgCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19ESVJ7WyYqJl19X1ZBUiAgMTMsIFBMWV9BS1lfUFNHUkVHSVNURVIxMyAKUExZX0FLWV9QU0dSRUdJU1RFUjEzX0VORCAKIGVuZGlmICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7UExZX0NGR19Vc2VIYXJkd2FyZVNvdW5kcyAKUExZX0FLe1smKiZdfVlfRVhJVCAKICAgICAgICAgICAgICAgICAgICBSVFMgICAgICAKCjsgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKip7WyYqJl19KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKOyAtLS0tLS0tLS0tLS0tLS0tLS0tLXtbJiomXX0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KO0dlbmVyaWMgY29kZSBpbnRle1smKiZdfXJwcmV0aW5nIHRoZSBSZWdpc3RlckJsb2NrCjsgSU46ICAgcmVnWSA9IEZpcnN0IEJ5dGUKOyAgICAgICByZWdCID0gMCA9IGluaXR7WyYqJl19aWFsIHN0YXRlLCAxID0gbm9uLWluaXRpYWwgc3RhdGUuIAo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXtbJiomXX0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpQTFlfQUtZX1JFQURSRUdJU1RFUkJMT0NLIAogICAgICAgICAge1smKiZdfSAgICAgICAgICBsZGEgICAgICAseSsgCiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgQUNDQSAKICAgICAgICAgICAgICAgICB7WyYqJl19ICAgdHN0YiAgICAgCiAgICAgICAgICAgICAgICAgICAgbGJuZSAgICAgUExZX0FLWV9SUkJfTk9OSU5JVElBTFNUQVRFIAo7SW5pdHtbJiomXX1pYWwgc3RhdGUuIAogICAgICAgICAgICAgICAgICAgIHJvciAgICAgIEFDQ0EgCiAgICAgICAgICAgICAgICAgICAgYmNzICAgICAge1smKiZdfVBMWV9BS1lfUlJCX0lTX1NPRlRXQVJFT05MWU9SU09GVFdBUkVBTkRIQVJEV0FSRSAKICAgICAgICAgICAgICAgICAgICByb3IgICB7WyYqJl19ICAgQUNDQSAKIGlmZGVmICBQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9BZ2dsb21lcmF0ZWQgICAgICAgICAgICAgIDtDT05GSUcgU3tbJiomXX1QRUNJRklDIAogICAgICAgICAgICAgICAgICAgIGJjcyAgICAgIFBMWV9BS1lfUlJCX0lTX0hBUkRXQVJFT05MWSAKIGVuZGlmICAKe1smKiZdfTsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17WyYqJl19LS0tCjtHZW5lcmljIGNvZGUgaW50ZXJwcmV0aW5nIHRoZSBSZWdpc3RlckJsb2NrIC0gSW5pdGlhbCBzdGF0ZS4KOyBJTjogICByZXtbJiomXX1nWSA9IFBvaW50cyBhZnRlciB0aGUgZmlyc3QgYnl0ZS4KOyAgICAgICBBQ0NBIChBKSA9IEZpcnN0IGJ5dGUsIHR3aWNlIHNoaWZ0e1smKiZdfWVkIHRvIHRoZSByaWdodCAodHlwZSByZW1vdmVkKS4KOyAgICAgICByNyA9IFJlZ2lzdGVyIDcuIEFsbCBzb3VuZHMgYXJlIG9wZW57WyYqJl19ICgwKSBieSBkZWZhdWx0LCBhbGwgbm9pc2VzIGNsb3NlZCAoMSkuCjsgICAgICAgdm9sdW1lUmVnaXN0ZXIgPSBWb2x1bWUgcmVnaXtbJiomXX1zdGVyLgo7ICAgICAgIGZyZXF1ZW5jeVJlZ2lzdGVyID0gTFNCIGZyZXF1ZW5jeSByZWdpc3Rlci4KOwo7IE9VVDogIHJlZ1kgTVVTe1smKiZdfVQgcG9pbnQgYWZ0ZXIgdGhlIHN0cnVjdHVyZS4KOyAgICAgICByNyA9IHVwZGF0ZWQgKE9OTFkgYml0IDIgYW5kIDUpLgo7ICAgICB7WyYqJl19ICB2b2x1bWVSZWdpc3RlciA9IFZvbHVtZSByZWdpc3RlciBpbmNyZWFzZWQgb2YgMSAoKioqIElNUE9SVEFOVCEgVGhlIGNvZGUgTXtbJiomXX1VU1QgaW5jcmVhc2UgaXQsIGV2ZW4gaWYgbm90IHVzaW5nIGl0ISAqKiopCjsgICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgPSBMU0Ige1smKiZdfWZyZXF1ZW5jeSByZWdpc3RlciwgaW5jcmVhc2VkIG9mIDIuCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17WyYqJl19LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tClBMWV9BS1lfUlJCX0lTX05PU09GVFdBUkVOT0hBUkRXQVJFIHtbJiomXX0KICAgICAgICAgICAgICAgICAgICByb3IgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtOb2lzZT8gCiAgICAgICAge1smKiZdfSAgICAgICAgICAgIGJjYyAgICAgIFBMWV9BS1lfUlJCX05JU19OT1NPRlRXQVJFTk9IQVJEV0FSRV9SRUFEVk9MVU1FIAogICAgICB7WyYqJl19ICAgICAgICAgICAgICBsZGEgICAgICAseSsgICAgICAgICAgICAgICAgICAgICAgICAgIDtUaGVyZSBpcyBhIG5vaXNlLiBSZWFkc3tbJiomXX0gaXQuIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVI2IAogICAgICAgICAgICAgICAgICAge1smKiZdfSBMREEgICAgICByNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDtPcGVucyB0aGUgbm9pc2UgY2hhbm5lbC4gCiAgICAgICAgICB7WyYqJl19ICAgICAgICAgIGFuZGEgICAgICMlMTEwMTExMTEgICAgICAgICAgICAgICAgICAgOyByZXNldCBiaXQgNSAob3BlbikgCiAgICAgIHtbJiomXX0gICAgICAgICAgICAgIFNUQSAgICAgIHI3IAo7LS0tLS0tLS0tLS0tClBMWV9BS1lfUlJCX05JU19OT1NPRlRXQVJFTk9IQVJEV0FSe1smKiZdfUVfUkVBRFZPTFVNRSAKO1RoZSB2b2x1bWUgaXMgbm93IGluIGIwLWIzLiAKO2FuZCAlMTExMSA7Tm8gbmVlZCwgdGhlIGJpdCA3IHd7WyYqJl19YXMgMC4gCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfVkFSICB2b2x1bWVSZWdpc3RlciwgQUNDQSA7U2VuZHMgdGhlIHtbJiomXX12b2x1bWUuIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIHZvbHVtZVJlZ2lzdGVyICAgICAgICAgICAgICAgO0luY3JlYXNle1smKiZdfXMgdGhlIHZvbHVtZSByZWdpc3Rlci4gCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgCiAgICB7WyYqJl19ICAgICAgICAgICAgICAgIGluYyAgICAgIGZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIHI3IHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgIDtDbG9zZXMgdGhlIHNvdW5kIGNoYW5uZWwuIAogICAgICAgICAgICAgICAgICAgIE9Se1smKiZdfUEgICAgICAjJTAwMDAwMTAwICAgICAgICAgICAgICAgICAgIDsgc2V0IGJpdCAyIChjbG9zZSkgCiAgICAgICAgICAgICAgICAgICB7WyYqJl19IFNUQSAgICAgIHI3IAogICAgICAgICAgICAgICAgICAgIFJUUyAgICAgIAoKOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXtbJiomXX0tLS0tLS0tLQogaWZkZWYgIFBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX0FnZ2xvbWVyYXRlZCAgICAgICAgICAgICAgO0NPTkZJRyBTe1smKiZdfVBFQ0lGSUMgClBMWV9BS1lfUlJCX0lTX0hBUkRXQVJFT05MWSAKICAgICAgICAgICAgICAgICAgICBST1IgICAgICBBQ0NBICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICAgICA7UmV0cmlnPyAKICAgICAgICAgICAgICAgICAgICBCQ0MgICAgICBQTFlfQUtZX1JSQl9JU19IT3tbJiomXX1fTk9SRVRSSUcgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgQUNDQSAKICAgICAgICAgICAgICAgICAgICBPUkEgICAgICAje1smKiZdfSUxMDAwMDAwMCAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFB7WyYqJl19TFlfQUtZX1BTR1JFR0lTVEVSMTNfUkVUUklHIDtBIHZhbHVlIHRvIG1ha2Ugc3VyZSB0aGUgcmV0cmlnIGlzIHBlcmZvcm1lZCwgeXtbJiomXX1ldCBBIGNhbiBzdGlsbCBiZSB1c2UuIApQTFlfQUtZX1JSQl9JU19IT19OT1JFVFJJRyAKICAgICAgICAgICAgICAgICAgICBST1Ige1smKiZdfSAgICAgQUNDQSAgICAgICAgICAgICAgICAgICAgICAgICA7Tm9pc2U/IAogICAgICAgICAgICAgICAgICAgIEJDQyAgICAgIFBMWV97WyYqJl19QUtZX1JSQl9JU19IT19OT05PSVNFIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICx5KyAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgIDtSZWFkcyB0aGUgbm9pc2UuIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVI2IAoge1smKiZdfSAgICAgICAgICAgICAgICAgICBMREEgICAgICByNyAgICAgICAgICAgICAgICAgICAgICAgICAgIDtPcGVucyB0aGUgbm9pc2UgY2h7WyYqJl19YW5uZWwuIAogICAgICAgICAgICAgICAgICAgIEFOREEgICAgICMlMTEwMTExMTEgICAgICAgICAgICAgICAgICAgOyByZXNldCBiaXtbJiomXX10IDUgKG9wZW4pIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIHI3IApQTFlfQUtZX1JSQl9JU19IT19OT05PSVNFIAogICAge1smKiZdfSAgICAgICAgICAgICAgICBMREEgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtUaGUgZW52ZWxvcGUuIAogICAgICB7WyYqJl19ICAgICAgICAgICAgICBBTkRBICAgICAjMTUgCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgUExZX0FLWV9QU0dSRUdJU1RFUntbJiomXX0xMyAKICAgICAgICAgICAgICAgICAgICBsZGQgICAgICAseSsrICAgICAgICAgICAgICAgICAgICAgICAgIDtDb3BpZXMgdGhlIGhhe1smKiZdfXJkd2FyZSBwZXJpb2QuIAogICAgICAgICAgICAgICAgICAgIFNURCAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxMSAgICAgICAgOyt7WyYqJl19MTIgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICA7Q2xvc2VzIHRoZSBzb3tbJiomXX11bmQgY2hhbm5lbC4gCiAgICAgICAgICAgICAgICAgICAgT1JBICAgICAgIyUwMDAwMDEwMCAgICAgICAgICAgICAgICAgICA7IHNle1smKiZdfXQgYml0IDIgKGNsb3NlKSAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICByNyAKICAgICAgICAgICAgICAgICAgICBTRVRfUFN7WyYqJl19R19WQVJfRElSICB2b2x1bWVSZWdpc3RlciwgJGZmIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIHZvbHVtZVJlZ2lzdGVyIHtbJiomXX0gICAgICAgICAgICAgIDtJbmNyZWFzZXMgdGhlIHZvbHVtZSByZWdpc3Rlci4gCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICAge1smKiZdfWZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIGZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICB7WyYqJl19ICAgICAgICAgICBSVFMgICAgICAKCiBlbmRpZiAgCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpQTFlfQXtbJiomXX1LWV9SUkJfSVNfU09GVFdBUkVPTkxZT1JTT0ZUV0FSRUFOREhBUkRXQVJFIAogICAgICAgICAgICAgICAgICAgIFJPUiAgICAgIEFDe1smKiZdfUNBICAgICAgICAgICAgICAgICAgICAgICAgIDtBbm90aGVyIGRlY2lzaW9uIHRvIG1ha2UgYWJvdXQgdGhlIHNvdW5kIHR5cGUuIAp7WyYqJl19IGlmZGVmICBQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9BZ2dsb21lcmF0ZWQgICAgICAgICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgCntbJiomXX0gICAgICAgICAgICAgICAgICAgIEJDUyAgICAgIFBMWV9BS1lfUlJCX0lTX1NPRlRXQVJFQU5ESEFSRFdBUkUgCiBlbmRpZiAgCjtTe1smKiZdfW9mdHdhcmUgb25seS4gU3RydWN0dXJlOiAwdnZ2dm50dC4gCiAgICAgICAgICAgICAgICAgICAgUk9SICAgICAgQUNDQSAgICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICAgO05vaXNlPyAKICAgICAgICAgICAgICAgICAgICBCQ0MgICAgICBQTFlfQUtZX1JSQl9JU19TT0ZUV3tbJiomXX1BUkVPTkxZX05PTk9JU0UgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7e1smKiZdfU5vaXNlLiBSZWFkcyBpdC4gCiAgICAgICAgICAgICAgICAgICAgbGRhICAgICAgLHkrIAogICAgICAgICAgICAgICAgICAgIFNUQSB7WyYqJl19ICAgICBQTFlfQUtZX1BTR1JFR0lTVEVSNiAKICAgICAgICAgICAgICAgICAgICBMREEgICAgICByNyAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICA7T3BlbnMgdGhlIG5vaXNlIGNoYW5uZWwuIAogICAgICAgICAgICAgICAgICAgIEFOREEgICAgICMlMTEwMTExMTEge1smKiZdfSAgICAgICAgICAgICAgICAgIDsgcmVzZXQgYml0IDUgKG9wZW4pIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIHI3IApQTFl7WyYqJl19X0FLWV9SUkJfSVNfU09GVFdBUkVPTkxZX05PTk9JU0UgCjtSZWFkcyB0aGUgdm9sdW1lIChub3cgYjAtYjMpLiAKO05vdGU6IHdlIHtbJiomXX1kbyBOT1QgcGVmb3JtIGEgJnF1b3Q7YW5kICUxMTExJnF1b3Q7IGJlY2F1c2Ugd2Uga25vdyB0aGUgYml0IDcgb2YgdGhlIG9yaWdpe1smKiZdfW5hbCBieXRlIGlzIDAsIHNvIHRoZSBiaXQgNCBpcyBjdXJyZW50bHkgMC4gRWxzZSB0aGUgaGFyZHdhcmUgdm9sdW1lIHdvdWxkIGJ7WyYqJl19ZSBvbiEgCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfVkFSICB2b2x1bWVSZWdpc3RlciwgQUNDQSA7U2VuZHMgdGhlIHtbJiomXX12b2x1bWUuIAogICAgICAgICAgICAgICAgICAgIElOQyAgICAgIHZvbHVtZVJlZ2lzdGVyICAgICAgICAgICAgICAgO0luY3JlYXNle1smKiZdfXMgdGhlIHZvbHVtZSByZWdpc3Rlci4gCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfREFUQV9ZX0lOQyAgZnJlcXVlbmN7WyYqJl19eVJlZ2lzdGVyIDtTZW5kcyB0aGUgTFNCIHNvZnR3YXJlIGZyZXF1ZW5jeS4gCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICAgZntbJiomXX1yZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICAgICAgICAgICAgIFNFVF9QU0dfVkFSX0RBVEFfWV9JTkMgIGZyZXF1ZW5jeVJlZ2lze1smKiZdfXRlciA7U2VuZHMgdGhlIE1TQiBzb2Z0d2FyZSBmcmVxdWVuY3kuIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIGZyZXF1ZW57WyYqJl19Y3lSZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBSVFMgICAgICAKCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXtbJiomXX0tLS0tLS0KIGlmZGVmICBQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9BZ2dsb21lcmF0ZWQgICAgICAgICAgICAgIDtDT05GSUcgU1BFe1smKiZdfUNJRklDIApQTFlfQUtZX1JSQl9JU19TT0ZUV0FSRUFOREhBUkRXQVJFIAogICAgICAgICAgICAgICAgICAgIFJPUiAgICAgIEFDQ0F7WyYqJl19ICAgICAgICAgICAgICAgICAgICAgICAgIDtSZXRyaWc/IAogaWZkZWYgIFBMWV9DRkdfVXNlUmV0cmlnICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgCiAgICAgICAgICAgICAgICAgICAgQkNDICAgICAgUExZX0FLWV9SUkJfe1smKiZdfUlTX1NBSF9OT1JFVFJJRyAKICAgICAgICAgICAgICAgICAgICBMREEgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIE9SQSB7WyYqJl19ICAgICAjJTEwMDAwMDAwIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxM19SRVRSSUcgO3tbJiomXX1BIHZhbHVlIHRvIG1ha2Ugc3VyZSB0aGUgcmV0cmlnIGlzIHBlcmZvcm1lZCwgeWV0IEEgY2FuIHN0aWxsIGJlIHVzZS4gCiAgICAge1smKiZdfSAgICAgICAgICAgICAgIFNUQSAgICAgIEFDQ0EgClBMWV9BS1lfUlJCX0lTX1NBSF9OT1JFVFJJRyAKIGVuZGlmICAgICAgICAgICB7WyYqJl19ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7IFBMWV9DRkdfVXNlUmV0cmlnIAogICAgICAgICAgICAgIHtbJiomXX0gICAgICBST1IgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtOb2lzZT8gCiBpZmRlZiAgUExZX0FLWV9VU0VfU29me1smKiZdfXRBbmRIYXJkX05vaXNlX0FnZ2xvbWVyYXRlZCAgICAgICAgO0NPTkZJRyBTUEVDSUZJQyAKICAgICAgICAgICAgICAgICAgICBCQ0N7WyYqJl19ICAgICAgUExZX0FLWV9SUkJfSVNfU0FIX05PTk9JU0UgCiAgICAgICAgICAgICAgICAgICAgbGRhICAgICAgLHkrICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgO1JlYWRzIHRoZSBub2lzZS4gCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgUExZX0FLWV9QU0dSe1smKiZdfUVHSVNURVI2IAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgO09wZW5zIHR7WyYqJl19aGUgbm9pc2UgY2hhbm5lbC4gCiAgICAgICAgICAgICAgICAgICAgQU5EQSAgICAgIyUxMTAxMTExMSAgICAgICAgICAgICAgICAgIHtbJiomXX0gOyByZXNldCBiaXQgNSAob3BlbiBub2lzZSkgCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgcjcgClBMWV9BS1lfUlJCX0lTe1smKiZdfV9TQUhfTk9OT0lTRSAKIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtQTFl7WyYqJl19X0FLWV9VU0VfU29mdEFuZEhhcmRfTm9pc2VfQWdnbG9tZXJhdGVkIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIEFDQ0EgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgIDtUaGUgZW52ZWxvcGUuIAogICAgICAgICAgICAgICAgICAgIEFOREEgICAgICMxNSAKICAge1smKiZdfSAgICAgICAgICAgICAgICAgU1RBICAgICAgUExZX0FLWV9QU0dSRUdJU1RFUjEzIAogICAgICAgICAgICAgICAgICAgIFNFVF9QU0d7WyYqJl19X1ZBUl9EQVRBX1lfSU5DICBmcmVxdWVuY3lSZWdpc3RlciA7U2VuZHMgdGhlIExTQiBzb2Z0d2FyZSBmcmVxdWVuY3kuIAogICAgIHtbJiomXX0gICAgICAgICAgICAgICBpbmMgICAgICBmcmVxdWVuY3lSZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBTRVRfUFNHX1ZBUl9Ee1smKiZdfUFUQV9ZX0lOQyAgZnJlcXVlbmN5UmVnaXN0ZXIgO1NlbmRzIHRoZSBNU0Igc29mdHdhcmUgZnJlcXVlbmN5LiAKICAgICAgICAgICB7WyYqJl19ICAgICAgICAgaW5jICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfRElSICB2b3tbJiomXX1sdW1lUmVnaXN0ZXIsICRmZiAgO1NldHMgdGhlIGhhcmR3YXJlIHZvbHVtZS4gCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICAge1smKiZdfXZvbHVtZVJlZ2lzdGVyICAgICAgICAgICAgICAgO0luY3JlYXNlcyB0aGUgdm9sdW1lIHJlZ2lzdGVyLiAKICAgICAgICAgICAgICB7WyYqJl19ICAgICAgbGRkICAgICAgLHkrKyAgICAgICAgICAgICAgICAgICAgICAgICA7Q29waWVzIHRoZSBoYXJkd2FyZSBwZXJpb2QuIAogIHtbJiomXX0gICAgICAgICAgICAgICAgICBzdGQgICAgICBQTFlfQUtZX1BTR1JFR0lTVEVSMTEgICAgICAgIDsgMTErMTIgCiAgICAgICAgICAge1smKiZdfSAgICAgICAgIFJUUyAgICAgIAoKIGVuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICA7IFBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX0FnZ2xvbWVyYXRlZCAKOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLXtbJiomXX0tLS0tLQo7TWFuYWdlcyB0aGUgbG9vcC4gVGhpcyBjb2RlIGlzIHB1dCBoZXJlIHNvIHRoYXQgbm8ganVtcCBuZWVkcyB0byBiZSBje1smKiZdfW9kZWQgd2hlbiBpdHMgam9iIGlzIGRvbmUuIApQTFlfQUtZX1JSQl9OSVNfTk9TT0ZUV0FSRU5PSEFSRFdBUkVfTE9PUCAKO0xvb3B7WyYqJl19cy4gUmVhZHMgdGhlIG5leHQgcG9pbnRlciB0byB0aGlzIFJlZ2lzdGVyQmxvY2suIAogICAgICAgICAgICAgICAgICAgIGxkeSAgIHtbJiomXX0gICAseSAKICAgICAgICAgICAgICAgICAgICBsZGEgICAgICAseSsgCiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgQUNDQSAKe1smKiZdfTsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17WyYqJl19LS0tCjtHZW5lcmljIGNvZGUgaW50ZXJwcmV0aW5nIHRoZSBSZWdpc3RlckJsb2NrIC0gTm9uIGluaXRpYWwgc3RhdGUuIFNlZSBjb3tbJiomXX1tbWVudCBhYm91dCB0aGUgSW5pdGlhbCBzdGF0ZSBmb3IgdGhlIHJlZ2lzdGVycyBpbnMvb3V0cy4KOyAtLS0tLS0tLS0tLS0tLS0te1smKiZdfS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUExZX0FLWV9SUkJfTk97WyYqJl19TklOSVRJQUxTVEFURSAKICAgICAgICAgICAgICAgICAgICBST1IgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIEJDUyAgIHtbJiomXX0gICBQTFlfQUtZX1JSQl9OSVNfU09GVFdBUkVPTkxZT1JTT0ZUV0FSRUFOREhBUkRXQVJFIAogICAgICAgICAgICAgICAgICAgIFJPe1smKiZdfVIgICAgICBBQ0NBIAogaWZkZWYgIFBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX0FnZ2xvbWVyYXRlZCAgICAgICAgICAgICAgO0NPTkZ7WyYqJl19SUcgU1BFQ0lGSUMgCiAgICAgICAgICAgICAgICAgICAgTEJDUyAgICAgUExZX0FLWV9SUkJfTklTX0hBUkRXQVJFT05MWSAKIGVuZHtbJiomXX1pZiAgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgQUNDQSAgICAgICAgICAgICAgICAgICAgICAgICA7Tm8gc29mdHdhcmUse1smKiZdfSBubyBoYXJkd2FyZSwgT1IgbG9vcC4gCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgQUNDQiAKICAgICAgICAgICAgICAgICB7WyYqJl19ICAgQU5EQSAgICAgIzAzICAgICAgICAgICAgICAgICAgICAgICAgICA7Qml0IDM6bG9vcD8vdm9sdW1lIGJpdCAwLCBiaXQgMjogdntbJiomXX1vbHVtZT8gCiAgICAgICAgICAgICAgICAgICAgQ01QQSAgICAgIzAyICAgICAgICAgICAgICAgICAgICAgICAgICA7SWYgbm8gdm9se1smKiZdfXVtZSwgeWV0IHRoZSB2b2x1bWUgaXMgJmd0OzAsIGl0IG1lYW5zIGxvb3AuIAogICAgICAgICAgICAgICAgICAgIEJFUSAgICAgIFB7WyYqJl19TFlfQUtZX1JSQl9OSVNfTk9TT0ZUV0FSRU5PSEFSRFdBUkVfTE9PUCAKO05vIGxvb3A6IHNvICZxdW90O25vIHNvZnR3YXJlIG5vIHtbJiomXX1oYXJkd2FyZSZxdW90Oy4gCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICA7e1smKiZdfUNsb3NlcyB0aGUgc291bmQgY2hhbm5lbC4gCiAgICAgICAgICAgICAgICAgICAgT1JBICAgICAgIyUwMDAwMDEwMCAgICAgICAgICB7WyYqJl19ICAgICAgICAgOyBzZXQgYml0IDIgKGNsb3NlIHNvdW5kKSAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICByNyAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICA7Vm9sdW1lPyBiaXQgMiAtIDIuIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIEFDQ0IgCiAge1smKiZdfSAgICAgICAgICAgICAgICAgIFJPUkEgICAgIAogICAgICAgICAgICAgICAgICAgIEJDQyAgICAgIFBMWV9BS1lfUlJCX05JU19OT1Z7WyYqJl19T0xVTUUgCiAgICAgICAgICAgICAgICAgICAgQU5EQSAgICAgIzE1IAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIEFDQ0EgCntbJiomXX0gICAgICAgICAgICAgICAgICAgIFNFVF9QU0dfVkFSX1ZBUiAgdm9sdW1lUmVnaXN0ZXIsIEFDQ0EgO1NlbmRzIHRoZSB2b2x1bWUue1smKiZdfSAKUExZX0FLWV9SUkJfTklTX05PVk9MVU1FIAo7U2FkbHksIGhhdmUgdG8gbG9zZSBhIGJpdCBvZiBDUFUgaGVyZSwgYXMgdGhpcyB7WyYqJl19bXVzdCBiZSBkb25lIGluIGFsbCBjYXNlcy4gCiAgICAgICAgICAgICAgICAgICAgSU5DICAgICAgdm9sdW1lUmVnaXN0ZXIgICAgIHtbJiomXX0gICAgICAgICAgO05leHQgdm9sdW1lIHJlZ2lzdGVyLiAKICAgICAgICAgICAgICAgICAgICBpbmMgICAgICBmcmVxdWVuY3lSZWdpe1smKiZdfXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgCjtOb2lzZT8gV2FzIG9uIGJpdCA3LCB7WyYqJl19YnV0IHRoZXJlIGhhcyBiZWVuIHR3byBzaGlmdHMuIFdlIGNhbiYjMDM5O3QgdXNlIEEsIGl0IG1heSBoYXZlIGJlZW4gbW9kaWZpZXtbJiomXX1kIGJ5IHRoZSB2b2x1bWUgQU5ELiAKICAgICAgICAgICAgICAgICAgICBMREEgICAgICAjJTAwMTAwMDAwICAgICAgICAgICAgICAge1smKiZdfSAgICA7IGJpdCA3LTIgCiAgICAgICAgICAgICAgICAgICAgQklUQSAgICAgQUNDQiAKICAgICAgICAgICAgICAgICAgICBCTkUgICB7WyYqJl19ICAgaXNOb2lzZSAKICAgICAgICAgICAgICAgICAgICBSVFMgICAgICAKCmlzTm9pc2UgCiAgICAgICAgICAgICAgICAgICAgbGRhIHtbJiomXX0gICAgICx5KyAgICAgICAgICAgICAgICAgICAgICAgICAgO05vaXNlLiAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICBQTFlfe1smKiZdfUFLWV9QU0dSRUdJU1RFUjYgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19O09wZW5zIHRoZSBub2lzZSBjaGFubmVsLiAKICAgICAgICAgICAgICAgICAgICBBTkRBICAgICAjJTExMDExMTExICAgICAgICAgIHtbJiomXX0gICAgICAgICA7IHJlc2V0IGJpdCA1IChvcGVuIG5vaXNlKSAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICByNyAKICAgICAge1smKiZdfSAgICAgICAgICAgICAgUlRTICAgICAgCgo7IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KUExZX0FLWV9SUkJ7WyYqJl19X05JU19TT0ZUV0FSRU9OTFlPUlNPRlRXQVJFQU5ESEFSRFdBUkUgCjtBbm90aGVyIGRlY2lzaW9uIHRvIG1ha2UgYWJvdXQgdGhlIHtbJiomXX1zb3VuZCB0eXBlLiAKICAgICAgICAgICAgICAgICAgICBST1IgICAgICBBQ0NBIAogaWZkZWYgIFBMWV9BS1lfVVNFX1NvZnRBbmRIe1smKiZdfWFyZF9BZ2dsb21lcmF0ZWQgICAgICAgICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgCiAgICAgICAgICAgICAgICAgICAgTEJDUyAgICB7WyYqJl19IFBMWV9BS1lfUlJCX05JU19TT0ZUV0FSRUFOREhBUkRXQVJFIAogZW5kaWYgIAo7U29mdHdhcmUgb25seS4gU3RydWN0dXJlOiBtc3tbJiomXX1wbm9pc2UgbHNwIHYgdiB2IHYgKDAgMSkuIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIEFDQ0EgCiAgICAgICAgICAgICAge1smKiZdfSAgICAgIFNUQSAgICAgIEFDQ0IgCiAgICAgICAgICAgICAgICAgICAgQU5EQSAgICAgIzE1ICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgO0dldHMgdGhlIHZvbHVtZSAoYWxyZWFkeSBzaGlmdGVkKS4gCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgQUNDQSAKIHtbJiomXX0gICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfVkFSICB2b2x1bWVSZWdpc3RlciwgQUNDQSA7U2VuZHMgdGhlIHZvbHVtZS4ge1smKiZdfQogICAgICAgICAgICAgICAgICAgIElOQyAgICAgIHZvbHVtZVJlZ2lzdGVyICAgICAgICAgICAgICAgO0luY3JlYXNlcyB0aGUgdm97WyYqJl19bHVtZSByZWdpc3Rlci4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7THtbJiomXX1TUD8gKExlYXN0IFNpZ25pZmljYW50IGJ5dGUgb2YgUGVyaW9kKS4gV2FzIGJpdCA2LCBidXQgbm93IHNoaWZ0ZWQuIAogICAgICAge1smKiZdfSAgICAgICAgICAgICBMREEgICAgICAjJTAwMDEwMDAwICAgICAgICAgICAgICAgICAgIDsgYml0IDYtMiAKICAgICAgICAgICAgICB7WyYqJl19ICAgICAgQklUQSAgICAgQUNDQiAKICAgICAgICAgICAgICAgICAgICBCRVEgICAgICBQTFlfQUtZX1JSQl9OSVNfU09GVFdBUkVPTntbJiomXX1MWV9OT0xTUCAKICAgICAgICAgICAgICAgICAgICBTRVRfUFNHX1ZBUl9EQVRBX1lfSU5DICBmcmVxdWVuY3lSZWdpc3RlciA7U2Vue1smKiZdfWRzIHRoZSBMU0Igc29mdHdhcmUgZnJlcXVlbmN5LiAKOyBmcmVxdWVuY3kgcmVnaXN0ZXIgaXMgbm90IGluY3JlbWVudGVkIG9uIHB7WyYqJl19dXJwb3NlLiAKUExZX0FLWV9SUkJfTklTX1NPRlRXQVJFT05MWV9OT0xTUCAKO01TUCBBTkQvT1IgKE5vaXNlIGFuZC9vciBuZXcgTntbJiomXX1vaXNlKT8gKE1vc3QgU2lnbmlmaWNhbnQgYnl0ZSBvZiBQZXJpb2QpLiAKICAgICAgICAgICAgICAgICAgICBMREEgICAgICAjJTAwe1smKiZdfTEwMDAwMCAgICAgICAgICAgICAgICAgICA7IGJpdCA3LTIgCiAgICAgICAgICAgICAgICAgICAgQklUQSAgICAgQUNDQiAKICAgICB7WyYqJl19ICAgICAgICAgICAgICAgQk5FICAgICAgUExZX0FLWV9SUkJfTklTX1NPRlRXQVJFT05MWV9NU1BBTkRNQVlCRU5PSVNFIAo7Qml0IHtbJiomXX1vZiBsb3NzIG9mIENQVSwgYnV0IGhhcyB0byBiZSBkb25lIGluIGFsbCBjYXNlcy4gCiAgICAgICAgICAgICAgICAgICAgaW5jICAge1smKiZdfSAgIGZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIGZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICB7WyYqJl19ICAgICAgICAgICAgICBSVFMgICAgICAKCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpQTFlfQUtZX1JSQntbJiomXX1fTklTX1NPRlRXQVJFT05MWV9NU1BBTkRNQVlCRU5PSVNFIAo7TVNQIGFuZCBub2lzZT8sIGluIHRoZSBuZXh0IGJ5dGUuIG5pcHBwe1smKiZdfXAgKG4gPSBuZXdOb2lzZT8gaSA9IGlzTm9pc2U/IHAgPSBNU0IgcGVyaW9kKS4gCiAgICAgICAgICAgICAgICAgICAgbGRhICAgICB7WyYqJl19ICx5KyAgICAgICAgICAgICAgICAgICAgICAgICAgO1VzZWxlc3MgYml0cyBhdCB0aGUgZW5kLCBub3QgYSBwcm9ibGVtLiAKICAgIHtbJiomXX0gICAgICAgICAgICAgICAgc3RhICAgICAgQUNDQSAKICAgICAgICAgICAgICAgICAgICBpbmMgICAgICBmcmVxdWVuY3lSZWdpc3Rle1smKiZdfXIgICAgICAgICAgICA7U2VuZHMgdGhlIE1TQiBzb2Z0d2FyZSBmcmVxdWVuY3kuIAogICAgICAgICAgICAgICAgICAgIFNFVF9QU0d7WyYqJl19X1ZBUl9WQVIgIGZyZXF1ZW5jeVJlZ2lzdGVyLCBBQ0NBIAogICAgICAgICAgICAgICAgICAgIGluYyAgICAgIGZyZXF1ZW5jeVJlZ3tbJiomXX1pc3RlciAKICAgICAgICAgICAgICAgICAgICBST0wgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtDYXJyeSBpcyBpe1smKiZdfXNOb2lzZT8gCiAgICAgICAgICAgICAgICAgICAgQkNTICAgICAgaXNOb2lzZTIgCiAgICAgICAgICAgICAgICAgICAgUlRTICAgICB7WyYqJl19IAoKaXNOb2lzZTIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDtPcGVucyAgIHRoZSBub3tbJiomXX1pc2UgY2hhbm5lbC4gCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICA7IHJle1smKiZdfXNldCBiaXQgNSAob3BlbikgCiAgICAgICAgICAgICAgICAgICAgQU5EQSAgICAgIyUxMTAxMTExMSAKICAgICAgICAgICAgICAgICB7WyYqJl19ICAgU1RBICAgICAgcjcgCiAgICAgICAgICAgICAgICAgICAgUk9MICAgICAgQUNDQSAgICAgICAgICAgICAgICAgICAgICAgICA7SXtbJiomXX1zIHRoZXJlIGEgbmV3IG5vaXNlIHZhbHVlPyBJZiB5ZXMsIGdldHMgdGhlIG5vaXNlLiAKICAgICAgICAgICAgICAgICAgICBCQ1Mge1smKiZdfSAgICAgbmV3Tm9pc2UyIAogICAgICAgICAgICAgICAgICAgIFJUUyAgICAgIAoKbmV3Tm9pc2UyIAogICAgICAgICAgICAgICAgICB7WyYqJl19ICBsZGEgICAgICAseSsgICAgICAgICAgICAgICAgICAgICAgICAgIDtHZXRzIHRoZSBub2lzZS4gCiAgICAgICAgICAgICAgICAgIHtbJiomXX0gIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVI2IAogICAgICAgICAgICAgICAgICAgIFJUUyAgICAgIAoKOyAtLS0tLS0tLS0te1smKiZdfS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogaWZkZWYgIFBMWV9BS1lfVVNFX1NvZnRBbmRIYXJkX0FnZ2xvbWVyYXRlZCAgICB7WyYqJl19ICAgICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgClBMWV9BS1lfUlJCX05JU19IQVJEV0FSRU9OTFkgCjtHZXRzIHRoZSBlbnZlbG9wZXtbJiomXX0gKGluaXRpYWxseSBvbiBiMi1iNCwgYnV0IGN1cnJlbnRseSBvbiBiMC1iMikuIEl0IGlzIG9uIDMgYml0cywgbXVzdCBiZSBlbmNve1smKiZdfWRlZCBvbiA0LiBCaXQgMCBtdXN0IGJlIDAuIAogICAgICAgICAgICAgICAgICAgIFJPTCAgICAgIEFDQ0EgCiAgICAgICAgICAgICB7WyYqJl19ICAgICAgIExEQSAgICAgIEFDQ0EgCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgQUNDQiAKICAgICAgICAgICAgICAgICAgIHtbJiomXX0gQU5EQSAgICAgIzE0IAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxMyAKICAgICAgICAge1smKiZdfSAgICAgICAgICAgTERBICAgICAgcjcgICAgICAgICAgICAgICAgICAgICAgICAgICA7Q2xvc2VzIHRoZSBzb3VuZCBjaGFubmVsLiB7WyYqJl19CiAgICAgICAgICAgICAgICAgICAgT1JBICAgICAgIyUwMDAwMDEwMCAgICAgICAgICAgICAgICAgICA7IHNldCBiaXQgMiAoY2xvc3tbJiomXX1lKSAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICByNyAKOyAgICAgICAgICAgIDtIYXJkd2FyZSB2b2x1bWUuCiAgICAgICAge1smKiZdfSAgICAgICAgICAgIFNFVF9QU0dfVkFSX0RJUiAgdm9sdW1lUmVnaXN0ZXIsICRmZiAKICAgICAgICAgICAgICAgICAgICBpbmMgICB7WyYqJl19ICAgdm9sdW1lUmVnaXN0ZXIgICAgICAgICAgICAgICA7SW5jcmVhc2VzIHRoZSB2b2x1bWUgcmVnaXN0ZXIuIAogICAgICAgICAgIHtbJiomXX0gICAgICAgICBpbmMgICAgICBmcmVxdWVuY3lSZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBpbmMgICAgICBmcmVxdWVuY3lSe1smKiZdfWVnaXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgQUNDQiAgICAgICAgICAgICAgICAgICAgICAgICA7TFNCIGZvciB7WyYqJl19aGFyZHdhcmUgcGVyaW9kPyBDdXJyZW50bHkgb24gYjYuIAogICAgICAgICAgICAgICAgICAgIFJPTEEgICAgIAogICAgICAgICAgIHtbJiomXX0gICAgICAgICBST0xBICAgICAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIEJDe1smKiZdfUMgICAgICBQTFlfQUtZX1JSQl9OSVNfSEFSRFdBUkVPTkxZX05PTFNCIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICx5KyB7WyYqJl19CiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgUExZX0FLWV9QU0dSRUdJU1RFUjExIApQTFlfQUtZX1JSQl9OSVNfSEFSRFdBUntbJiomXX1FT05MWV9OT0xTQiAKICAgICAgICAgICAgICAgICAgICBST0wgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtNU0Ige1smKiZdfWZvciBoYXJkd2FyZSBwZXJpb2Q/IAogICAgICAgICAgICAgICAgICAgIEJDQyAgICAgIFBMWV9BS1lfUlJCX05JU19IQVJEV0FSRU97WyYqJl19TkxZX05PTVNCIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICx5KyAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBQTHtbJiomXX1ZX0FLWV9QU0dSRUdJU1RFUjEyIApQTFlfQUtZX1JSQl9OSVNfSEFSRFdBUkVPTkxZX05PTVNCIAogICAgICAgICAgICAgICAgICAge1smKiZdfSBST0wgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtOb2lzZSBvciByZXRyaWc/IAogICAgICAgICAgICAgICAgICB7WyYqJl19ICBCQ1MgICAgICBQTFlfQUtZX1JSQl9OSVNfSEFSRFdBUkVfU0hBUkVEX05PSVNFT1JSRVRSSUdfQU5EU1RPUCAKICAgICAgICAgIHtbJiomXX0gICAgICAgICAgUlRTICAgICAgCgogZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgIDtQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9BZ2dsb21lcmF0ZWQgCjsgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS17WyYqJl19LS0tLS0KIGlmZGVmICBQTFlfQUtZX1VTRV9Tb2Z0QW5kSGFyZF9BZ2dsb21lcmF0ZWQgICAgICAgICAgICAgIDtDT05GSUcgU1BFQ3tbJiomXX1JRklDIApQTFlfQUtZX1JSQl9OSVNfU09GVFdBUkVBTkRIQVJEV0FSRSAKICAgICAgICAgICAgICAgICAgICBTRVRfUFNHX1ZBUl9Ee1smKiZdfUlSICB2b2x1bWVSZWdpc3RlciwgJGZmICA7SGFyZHdhcmUgdm9sdW1lLiAKICAgICAgICAgICAgICAgICAgICBpbmMgICAgICB2b2x7WyYqJl19dW1lUmVnaXN0ZXIgICAgICAgICAgICAgICA7SW5jcmVhc2VzIHRoZSB2b2x1bWUgcmVnaXN0ZXIuIAogICAgICAgICAgICAgICAgIHtbJiomXX0gICBST1IgICAgICBBQ0NBICAgICAgICAgICAgICAgICAgICAgICAgIDtMU0Igb2YgaGFyZHdhcmUgcGVyaW9kPyAKICAgICAgICAge1smKiZdfSAgICAgICAgICAgQkNDICAgICAgUExZX0FLWV9SUkJfTklTX1NBSEhfQUZURVJMU0JIIAogICAgICAgICAgICAgICAgICAgIGxkYSB7WyYqJl19ICAgICAseSsgCiAgICAgICAgICAgICAgICAgICAgc3RhICAgICAgUExZX0FLWV9QU0dSRUdJU1RFUjExIApQTFlfQUtZX1JSQl9OSXtbJiomXX1TX1NBSEhfQUZURVJMU0JIIAogICAgICAgICAgICAgICAgICAgIFJPUiAgICAgIEFDQ0EgICAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfTtNU0Igb2YgaGFyZHdhcmUgcGVyaW9kPyAKICAgICAgICAgICAgICAgICAgICBCQ0MgICAgICBQTFlfQUtZX1JSQl9OSVNfU0FISF97WyYqJl19QUZURVJNU0JIIAogICAgICAgICAgICAgICAgICAgIGxkYSAgICAgICx5KyAKICAgICAgICAgICAgICAgICAgICBzdGEgICAgICBQTHtbJiomXX1ZX0FLWV9QU0dSRUdJU1RFUjEyIApQTFlfQUtZX1JSQl9OSVNfU0FISF9BRlRFUk1TQkggCiAgICAgICAgICAgICAgICAgICAgTERBe1smKiZdfSAgICAgIEFDQ0EgICAgICAgICAgICAgICAgICAgICAgICAgO0xTQiBvZiBzb2Z0d2FyZSBwZXJpb2Q/IAogICAgICAgICAgICAgICB7WyYqJl19ICAgICBST1JBICAgICAKICAgICAgICAgICAgICAgICAgICBCQ0MgICAgICBQTFlfQUtZX1JSQl9OSVNfU0FISF9BRlRFUkxTQlMgCntbJiomXX0gICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIEFDQ0IgCiAgICAgICAgICAgICAgICAgICAgU0VUX1BTR19WQVJfREFUQV9ZX0lOe1smKiZdfUMgIGZyZXF1ZW5jeVJlZ2lzdGVyIDtTZW5kcyB0aGUgTFNCIHNvZnR3YXJlIGZyZXF1ZW5jeS4gCjsgZnJlcXVlbmN5IHJlZ2lzdGV7WyYqJl19ciBub3QgaW5jcmVhc2VkIG9uIHB1cnBvc2UuIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIEFDQ0IgClBMWV9BS1lfUlJCX3tbJiomXX1OSVNfU0FISF9BRlRFUkxTQlMgCiAgICAgICAgICAgICAgICAgICAgUk9SQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgO01TQiBvZiBzb2Z0d2FyZSBwZXJpb2Q/IAogICAgICAgICAgICAgICAgICAgIEJDQyAgICAgIFBMWV9BS1lfUlJCX05JU19TQUh7WyYqJl19SF9BRlRFUk1TQlMgCiAgICAgICAgICAgICAgICAgICAgU1RBICAgICAgQUNDQiAKICAgICAgICAgICAgICAgICAgICBpbmMgICAgIHtbJiomXX0gZnJlcXVlbmN5UmVnaXN0ZXIgICAgICAgICAgICA7U2VuZHMgdGhlIE1TQiBzb2Z0d2FyZSBmcmVxdWVuY3kuIAogICAgICAgICAge1smKiZdfSAgICAgICAgICBTRVRfUFNHX1ZBUl9EQVRBX1lfSU5DICBmcmVxdWVuY3lSZWdpc3RlciAKICAgICAgICAgICAgICAgICAgICBkZWN7WyYqJl19ICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgTERBICAgICAgQUNDQiAKUExZX0FLWV9SUkJfTklTX3tbJiomXX1TQUhIX0FGVEVSTVNCUyAKO0EgYml0IG9mIGxvc3Mgb2YgQ1BVLCBidXQgdGhpcyBoYXMgdG8gYmUgZG9uZSBldmVyeSB0aW1lISAKe1smKiZdfSAgICAgICAgICAgICAgICAgICAgaW5jICAgICAgZnJlcXVlbmN5UmVnaXN0ZXIgCiAgICAgICAgICAgICAgICAgICAgaW5jICAgICB7WyYqJl19IGZyZXF1ZW5jeVJlZ2lzdGVyIAogICAgICAgICAgICAgICAgICAgIFJPUmEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gIDtOZXcgaGFyZHdhcmUgZW52ZWxvcGU/IAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIEFDQ0EgCiAgICAgICAgICAgICAge1smKiZdfSAgICAgIEJDQyAgICAgIFBMWV9BS1lfUlJCX05JU19TQUhIX0FGVEVSRU5WRUxPUEUgCiAgICAgICAgICAgICAgICAgICAgbGRhICB7WyYqJl19ICAgICx5KyAKICAgICAgICAgICAgICAgICAgICBTVEEgICAgICBQTFlfQUtZX1BTR1JFR0lTVEVSMTMgClBMWV9BS1lfUlJCX05JU3tbJiomXX1fU0FISF9BRlRFUkVOVkVMT1BFIAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIEFDQ0EgICAgICAgICAgICAgICAgICAgICAge1smKiZdfSAgIDtSZXRyaWcgYW5kL29yIG5vaXNlPyAKICAgICAgICAgICAgICAgICAgICBST1JBICAgICAKICAgICAgICAgICAgICAgICAgICB7WyYqJl19QkNTICAgICAgaXNOb2lzZTMgCiAgICAgICAgICAgICAgICAgICAgUlRTICAgICAgCgppc05vaXNlMyAKIGVuZGlmICBQTFlfQUtZX3tbJiomXX1VU0VfU29mdEFuZEhhcmRfQWdnbG9tZXJhdGVkIAogaWZkZWYgIFBMWV9DRkdfVXNlSGFyZHdhcmVTb3VuZHMgICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgIDtDT05GSUcgU1BFQ0lGSUMgCjtUaGlzIGNvZGUgaXMgc2hhcmVkIHdpdGggdGhlIEhhcmR3YXJlT25seS4gSXR7WyYqJl19IHJlYWRzIHRoZSBOb2lzZS9SZXRyaWcgYnl0ZSwgaW50ZXJwcmV0cyBpdCBhbmQgZXhpdHMuIApQTFlfQUtZX1JSQl9OSVNfSEFSRHtbJiomXX1XQVJFX1NIQVJFRF9OT0lTRU9SUkVUUklHX0FORFNUT1AgCiAgICAgICAgICAgICAgICAgICAgbGRhICAgICAgLHkrICAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgO05vaXNlIG9yIHJldHJpZy4gUmVhZHMgdGhlIG5leHQgYnl0ZS4gCiAgICAgICAgICAgICAgICAgICB7WyYqJl19IFJPUkEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO1JldHJpZz8gCiBpZmRlZiAgUExZX0NGR19Vc2VSZXRyaWcgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgO0NPTkZJRyBTUEVDSUZJQyAKICAgICAgICAgICAgICAgICAgICBCQ0MgICAge1smKiZdfSAgUExZX0FLWV9SUkJfTklTX1NfTk9SX05PUkVUUklHIAogICAgICAgICAgICAgICAgICAgIE9SQSAgICAgICMlMTAwMDAwMDAgCiB7WyYqJl19ICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVIxM19SRVRSSUcgO0EgdmFsdWUgdG8gbWFrZSBzdXtbJiomXX1yZSB0aGUgcmV0cmlnIGlzIHBlcmZvcm1lZCwgeWV0IEEgY2FuIHN0aWxsIGJlIHVzZS4gClBMWV9BS1lfUlJCX05JU19TX05PUl9Oe1smKiZdfU9SRVRSSUcgCiBlbmRpZiAgUExZX0NGR19Vc2VSZXRyaWcgCiBpZmRlZiAgUExZX0FLWV9VU0VfU29mdEFuZEhhcmRfTm9pc2VfQWd7WyYqJl19Z2xvbWVyYXRlZCAgICAgICAgO0NPTkZJRyBTUEVDSUZJQyAKICAgICAgICAgICAgICAgICAgICBST1JBICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICA7Tm9pc2U/IElmIG5vLCBub3RoaW5nIG1vcmUgdG8gZG8uIAogICAgICAgICAgICAgICAgICAgIFNUe1smKiZdfUEgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIEJDUyAgICAgIGlzTm9pc2U0IAogICAgICAgICAgICAgICAgICAgIFJUUyB7WyYqJl19ICAgICAKCmlzTm9pc2U0IAogICAgICAgICAgICAgICAgICAgIExEQSAgICAgIHI3ICAgICAgICAgICAgICAgICAgICAgICAgICAgO3tbJiomXX1Ob2lzZS4gT3BlbnMgdGhlIG5vaXNlIGNoYW5uZWwuIAogICAgICAgICAgICAgICAgICAgIEFOREEgICAgICMlMTEwMTExMTEgICAge1smKiZdfSAgICAgICAgICAgICAgIDsgcmVzZXQgYml0IDUgKG9wZW4pIAogICAgICAgICAgICAgICAgICAgIFNUQSAgICAgIHI3IAogICAgICB7WyYqJl19ICAgICAgICAgICAgICBMREEgICAgICBBQ0NBIAogICAgICAgICAgICAgICAgICAgIFJPUkEgICAgICAgICAgICAgICAgICAgICAgIHtbJiomXX0gICAgICAgICAgIDtJcyB0aGVyZSBhIG5ldyBub2lzZSB2YWx1ZT8gSWYgeWVzLCBnZXRzIHRoZSBub2lzZS4gCiAgICAgICAgICAge1smKiZdfSAgICAgICAgIEJDUyAgICAgIGlzTm9pc2U1IAogICAgICAgICAgICAgICAgICAgIFJUUyAgICAgIAoKaXNOb2lzZTUgCiAgICAgICB7WyYqJl19ICAgICAgICAgICAgIFNUQSAgICAgIFBMWV9BS1lfUFNHUkVHSVNURVI2ICAgICAgICAgO1NldHMgdGhlIG5vaXNlLiAKIGVuZGlmIHtbJiomXX0gUExZX0FLWV9VU0VfU29mdEFuZEhhcmRfTm9pc2VfQWdnbG9tZXJhdGVkIAogICAgICAgICAgICAgICAgICAgIFJUUyAgICAgIAoKe1smKiZdfSBlbmRpZiAgUExZX0NGR19Vc2VIYXJkd2FyZVNvdW5kcyAKOyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgp7WyYqJl19XCI7e1smKiZdfQ==[[/code]]
    #30221
    Malban
    Participant

    Hm.
    “Edit button” does not work for me… and I can’t see the pasted source either…

    The forum software doesn’t like me…

    #30222
    Targhan
    Keymaster

    Don’t worry about the Edit button, it doesn’t work well, and I don’t intend on debugging a WordPress website :).

    The Players are made difficult to understand because of the conditional assembling.
    – the RAM/ROM player
    – The “player configuration”, which disables features the songs doesn’t use.
    – Macros to duplicate codes without having to type them myself.

    Note that “Disarking” a player (Rasm to Rasm for example) will remove all this layer of complexity and present a more straightforward code.

    Good luck!

Viewing 5 posts - 1 through 5 (of 5 total)
  • You must be logged in to reply to this topic.