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rwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgASgDEDyYBAAAAAADzCABKAMQPJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgATADzDyYBAAAAAADzCABMAPMPJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgATgCiECYBAAAAAADzCABOAKIQJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAUADRECYBAAAAAADzCABQANEQJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAUgCAESYBAAAAAADzCABSAIARJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAVACvESYBAAAAAADzCABUAK8RJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAVgDeESYBAAAAAADzCABWAN4RJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAWACNEiYBAAAAAADzCABYAI0SJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAWgC8EiYBAAAAAADzCABaALwSJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAXADrEiYBAAAAAADzCABcAOsSJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAXgCaEyYBAAAAAADzCABeAJoTJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAYADJEyYBAAAAAADzCABgAMkTJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAYgD4EyYBAAAAAADzCABiAPgTJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAZACnFCYBAAAAAADzCABkAKcUJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAZgDWFCYBAAAAAADzCABmANYUJgEAAQAAAPEIAAQArwMkAAABAAAA9wgABADEAw4AAAEBAwAA8wgAaACFFSYBAAAAAADzCABoAIUV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IHRvbyBnZW5lcmFsLCB0aGlzCm9uZSBpcyB0b28gc3BlY2lmaWMgb3IgdGhlIG9yZGVyaW5nIGlzIGluY29ycmVjdC4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGBtYXRjaGAgYmxvY2sgaGFzIHRvbyBtYW55IGFybXM6CgpgYGAKbWF0Y2ggU29tZSgwKSB7CiAgICBTb21lKGJhcikgPT4gey8qIC4uLiAqL30KICAgIHggPT4gey8qIC4uLiAqL30gLy8gVGhpcyBoYW5kbGVzIHRoZSBgTm9uZWAgY2FzZQogICAgXyA9PiB7LyogLi4uICovfSAvLyBBbGwgcG9zc2libGUgY2FzZXMgaGF2ZSBhbHJlYWR5IGJlZW4gaGFuZGxlZAp9CmBgYAoKYG1hdGNoYCBibG9ja3MgaGF2ZSB0aGVpciBwYXR0ZXJucyBtYXRjaGVkIGluIG9yZGVyLCBzbywgZm9yIGV4YW1wbGUsIHB1dHRpbmcKYSB3aWxkY2FyZCBhcm0gYWJvdmUgYSBtb3JlIHNwZWNpZmljIGFybSB3aWxsIG1ha2UgdGhlIGxhdHRlciBhcm0gaXJyZWxldmFudC4KCkVuc3VyZSB0aGUgb3JkZXJpbmcgb2YgdGhlIG1hdGNoIGFybSBpcyBjb3JyZWN0IGFuZCByZW1vdmUgYW55IHN1cGVyZmx1b3VzCmFybXMuCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wHrBgAAAOsG8wgGAIYDJgEAAAQAAgYABQEABADEAw4AAAMDAAQAxAMOAAAAAwIFAQLZAQEBAPMIAAEEAAQAxAMOAAACAwABBACvAyQAAAMCAAQArwMkAAAAAgEBAPMIAAIFALADEgAAAgIFRTAwMDEAAR8FAAAABfMIBACvAyQAAAACAQEB9wgAAQMACAC1AyYBAAAJAAACCAC1AyYBAAICsQUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGFuIGVtcHR5IG1hdGNoIGV4cHJlc3Npb24gaXMgaW52YWxpZCBiZWNhdXNlIHRoZSB0eXBlCml0IGlzIG1hdGNoaW5nIG9uIGlzIG5vbi1lbXB0eSAodGhlcmUgZXhpc3QgdmFsdWVzIG9mIHRoaXMgdHlwZSkuIEluIHNhZmUgY29kZQppdCBpcyBpbXBvc3NpYmxlIHRvIGNyZWF0ZSBhbiBpbnN0YW5jZSBvZiBhbiBlbXB0eSB0eXBlLCBzbyBlbXB0eSBtYXRjaApleHByZXNzaW9ucyBhcmUgYWxtb3N0IG5ldmVyIGRlc2lyZWQuIFRoaXMgZXJyb3IgaXMgdHlwaWNhbGx5IGZpeGVkIGJ5IGFkZGluZwpvbmUgb3IgbW9yZSBjYXNlcyB0byB0aGUgbWF0Y2ggZXhwcmVzc2lvbi4KCkFuIGV4YW1wbGUgb2YgYW4gZW1wdHkgdHlwZSBpcyBgZW51bSBFbXB0eSB7IH1gLiBTbywgdGhlIGZvbGxvd2luZyB3aWxsIHdvcms6CgpgYGAKZW51bSBFbXB0eSB7fQoKZm4gZm9vKHg6IEVtcHR5KSB7CiAgICBtYXRjaCB4IHsKICAgICAgICAvLyBlbXB0eQogICAgfQp9CmBgYAoKSG93ZXZlciwgdGhpcyB3b24ndDoKCmBgYGNvbXBpbGVfZmFpbApmbiBmb28oeDogT3B0aW9uPFN0cmluZz4pIHsKICAgIG1hdGNoIHggewogICAgICAgIC8vIGVtcHR5CiAgICB9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////3+xBQAAALEF8wgIALUDJgEAAAgAAgYACQEABADEAw4AAAMHAAQAxAMOAAAABwIFAQLZAQEBAPMIAAEIAAQAxAMOAAACBwABBACvAyQAAAMGAAQArwMkAAAABgEBAPMIAAIHALADEgAAAgIFRTAwMDIAAR8FAAAABfMIBACvAyQAAAAGAQEB9wgAAQcACgDkAyYBAAANAAACCgDkAyYBAAIC7QhUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgZ3VhcmFudGVlIGEgbWF0Y2hpbmcgcGF0dGVybiBmb3IKb25lIG9yIG1vcmUgcG9zc2libGUgaW5wdXRzIHRvIGEgbWF0Y2ggZXhwcmVzc2lvbi4gR3VhcmFudGVlZCBtYXRjaGVzIGFyZQpyZXF1aXJlZCBpbiBvcmRlciB0byBhc3NpZ24gdmFsdWVzIHRvIG1hdGNoIGV4cHJlc3Npb25zLCBvciBhbHRlcm5hdGl2ZWx5LApkZXRlcm1pbmUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNAplbnVtIFRlcm1pbmF0b3IgewogICAgSGFzdGFMYVZpc3RhQmFieSwKICAgIFRhbGtUb015SGFuZCwKfQoKbGV0IHggPSBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5OwoKbWF0Y2ggeCB7IC8vIGVycm9yOiBub24tZXhoYXVzdGl2ZSBwYXR0ZXJuczogYEhhc3RhTGFWaXN0YUJhYnlgIG5vdCBjb3ZlcmVkCiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KfQpgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgbXVzdCBhbHRlciB5b3VyIHBhdHRlcm5zIHNvIHRoYXQgZXZlcnkgcG9zc2libGUKdmFsdWUgb2YgdGhlIGlucHV0IHR5cGUgaXMgbWF0Y2hlZC4gRm9yIHR5cGVzIHdpdGggYSBzbWFsbCBudW1iZXIgb2YgdmFyaWFudHMKKGxpa2UgZW51bXMpIHlvdSBzaG91bGQgcHJvYmFibHkgY292ZXIgYWxsIGNhc2VzIGV4cGxpY2l0bHkuIEFsdGVybmF0aXZlbHksIHRoZQp1bmRlcnNjb3JlIGBfYCB3aWxkY2FyZCBwYXR0ZXJuIGNhbiBiZSBhZGRlZCBhZnRlciBhbGwgb3RoZXIgcGF0dGVybnMgdG8gbWF0Y2gKImFueXRoaW5nIGVsc2UiLiBFeGFtcGxlOgoKYGBgCmVudW0gVGVybWluYXRvciB7CiAgICBIYXN0YUxhVmlzdGFCYWJ5LAogICAgVGFsa1RvTXlIYW5kLAp9CgpsZXQgeCA9IFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnk7CgptYXRjaCB4IHsKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQogICAgVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieSA9PiB7fQp9CgovLyBvcjoKCm1hdGNoIHggewogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8H7QgAAADtCPMICgDkAyYBAAAMAAIGAA0BAAQAxAMOAAADCwAEAMQDDgAAAAsCBQEC2QEBAQDzCAABDAAEAMQDDgAAAgsAAQQArwMkAAADCgAEAK8DJAAAAAoBAQDzCAACCQCwAxIAAAICBUUwMDA0AAEfBQAAAAXzCAQArwMkAAAACgEBAfcIAAELAAwAkwQmAQAAEQAAAgwAkwQmAQACAqkEUGF0dGVybnMgdXNlZCB0byBiaW5kIG5hbWVzIG11c3QgYmUgaXJyZWZ1dGFibGUsIHRoYXQgaXMsIHRoZXkgbXVzdCBndWFyYW50ZWUKdGhhdCBhIG5hbWUgd2lsbCBiZSBleHRyYWN0ZWQgaW4gYWxsIGNhc2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNQpsZXQgeCA9IFNvbWUoMSk7CmxldCBTb21lKHkpID0geDsKLy8gZXJyb3I6IHJlZnV0YWJsZSBwYXR0ZXJuIGluIGxvY2FsIGJpbmRpbmc6IGBOb25lYCBub3QgY292ZXJlZApgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgcHJvYmFibHkgbmVlZCB0byB1c2UgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIHRvCmRlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gRXhhbXBsZToKCmBgYApsZXQgeCA9IFNvbWUoMSk7CgptYXRjaCB4IHsKICAgIFNvbWUoeSkgPT4gewogICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgfSwKICAgIE5vbmUgPT4ge30KfQoKLy8gb3I6CgppZiBsZXQgU29tZSh5KSA9IHggewogICAgLy8gZG8gc29tZXRoaW5nCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pBAAAAKkE8wgMAJMEJgEAABAAAgYAEQEABADEAw4AAAMPAAQAxAMOAAAADwIFAQLZAQEBAPMIAAEQAAQAxAMOAAACDwABBACvAyQAAAMOAAQArwMkAAAADgEBAPMIAAILALADEgAAAgIFRTAwMDUAAR8FAAAABfMIBACvAyQAAAAOAQEB9wgAAQ8ADgDCBCYBAAAVAAACDgDCBCYBAAIClgUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBiaW5kaW5ncyBpbiBhIG1hdGNoIGFybSB3b3VsZCByZXF1aXJlIGEgdmFsdWUgdG8KYmUgbW92ZWQgaW50byBtb3JlIHRoYW4gb25lIGxvY2F0aW9uLCB0aHVzIHZpb2xhdGluZyB1bmlxdWUgb3duZXJzaGlwLiBDb2RlCmxpa2UgdGhlIGZvbGxvd2luZyBpcyBpbnZhbGlkIGFzIGl0IHJlcXVpcmVzIHRoZSBlbnRpcmUgYE9wdGlvbjxTdHJpbmc+YCB0byBiZQptb3ZlZCBpbnRvIGEgdmFyaWFibGUgY2FsbGVkIGBvcF9zdHJpbmdgIHdoaWxlIHNpbXVsdGFuZW91c2x5IHJlcXVpcmluZyB0aGUKaW5uZXIgYFN0cmluZ2AgdG8gYmUgbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgc2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgyCiMhW2ZlYXR1cmUoYmluZGluZ3NfYWZ0ZXJfYXQpXQoKbGV0IHggPSBTb21lKCJzIi50b19zdHJpbmcoKSk7CgptYXRjaCB4IHsKICAgIG9wX3N0cmluZyBAIFNvbWUocykgPT4ge30sIC8vIGVycm9yOiB1c2Ugb2YgbW92ZWQgdmFsdWUKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpTZWUgYWxzbyB0aGUgZXJyb3IgRTAzMDMuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWBQAAAJYF8wgOAMIEJgEAABQAAgYAFQEABADEAw4AAAMTAAQAxAMOAAAAEwIFAQLZAQEBAPMIAAEUAAQAxAMOAAACEwABBACvAyQAAAMSAAQArwMkAAAAEgEBAPMIAAINALADEgAAAgIFRTAwMDcAAR8FAAAABfMIBACvAyQAAAASAQEB9wgAARMAEADxBCYBAAAZAAACEADxBCYBAAIC3ggjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbiBhIHBhdHRlcm4sIGFsbCB2YWx1ZXMgdGhhdCBkb24ndCBpbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBoYXZlIHRvIGJlIGJvdW5kCnRoZSBzYW1lIHdheS4gVGhlIGdvYWwgaGVyZSBpcyB0byBhdm9pZCBiaW5kaW5nIHNpbXVsdGFuZW91c2x5IGJ5LW1vdmUgYW5kCmJ5LXJlZi4KClRoaXMgbGltaXRhdGlvbiBtYXkgYmUgcmVtb3ZlZCBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUobW92ZV9yZWZfcGF0dGVybildCgpzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHksIHJlZiB6KSkgPT4ge30sIC8vIGVycm9yOiBjYW5ub3QgYmluZCBieS1tb3ZlIGFuZCBieS1yZWYgaW4gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc2FtZSBwYXR0ZXJuCiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgpZb3UgaGF2ZSB0d28gc29sdXRpb25zOgoKU29sdXRpb24gIzE6IEJpbmQgdGhlIHBhdHRlcm4ncyB2YWx1ZXMgdGhlIHNhbWUgd2F5LgoKYGBgCnN0cnVjdCBYIHsgeDogKCksIH0KCmxldCB4ID0gU29tZSgoWCB7IHg6ICgpIH0sIFggeyB4OiAoKSB9KSk7Cm1hdGNoIHggewogICAgU29tZSgocmVmIHksIHJlZiB6KSkgPT4ge30sCiAgICAvLyBvciBTb21lKCh5LCB6KSkgPT4ge30KICAgIE5vbmUgPT4gcGFuaWMhKCkKfQpgYGAKClNvbHV0aW9uICMyOiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBmb3IgdGhlIGBYYCBzdHJ1Y3R1cmUuCgpIb3dldmVyLCBwbGVhc2Uga2VlcCBpbiBtaW5kIHRoYXQgdGhlIGZpcnN0IHNvbHV0aW9uIHNob3VsZCBiZSBwcmVmZXJyZWQuCgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXQpzdHJ1Y3QgWCB7IHg6ICgpLCB9CgpsZXQgeCA9IFNvbWUoKFggeyB4OiAoKSB9LCBYIHsgeDogKCkgfSkpOwptYXRjaCB4IHsKICAgIFNvbWUoKHksIHJlZiB6KSkgPT4ge30sCiAgICBOb25lID0+IHBhbmljISgpCn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////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bnN0IEZPTzogaTMyID0geyBjb25zdCBYIDogaTMyID0gMDsgWCB9OwovLyBvciBldmVuOgpjb25zdCBGT08yOiBpMzIgPSB7IDAgfTsgLy8gYnV0IGJyYWNrZXRzIGFyZSB1c2VsZXNzIGhlcmUKYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wPJBAAAAMkE8wgWAP4FJgEAACQAAgYAJQEABADEAw4AAAMjAAQAxAMOAAAAIwIFAQLZAQEBAPMIAAEkAAQAxAMOAAACIwABBACvAyQAAAMiAAQArwMkAAAAIgEBAPMIAAIVALADEgAAAgIFRTAwMTQAAR8FAAAABfMIBACvAyQAAAAiAQEB9wgAASMAGACtBiYBAAApAAACGACtBiYBAAICtwVBIGNvbnN0YW50IGl0ZW0gd2FzIGluaXRpYWxpemVkIHdpdGggc29tZXRoaW5nIHRoYXQgaXMgbm90IGEgY29uc3RhbnQKZXhwcmVzc2lvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMTUKZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsKICAgIFNvbWUoMSkKfQoKY29uc3QgRk9POiBPcHRpb248dTg+ID0gY3JlYXRlX3NvbWUoKTsgLy8gZXJyb3IhCmBgYAoKVGhlIG9ubHkgZnVuY3Rpb25zIHRoYXQgY2FuIGJlIGNhbGxlZCBpbiBzdGF0aWMgb3IgY29uc3RhbnQgZXhwcmVzc2lvbnMgYXJlCmBjb25zdGAgZnVuY3Rpb25zLCBhbmQgc3RydWN0L2VudW0gY29uc3RydWN0b3JzLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBjYW4gZGVjbGFyZSBgY3JlYXRlX3NvbWVgIGFzIGEgY29uc3RhbnQgZnVuY3Rpb246CgpgYGAKY29uc3QgZm4gY3JlYXRlX3NvbWUoKSAtPiBPcHRpb248dTg+IHsgLy8gZGVjbGFyZWQgYXMgYSBjb25zdCBmdW5jdGlvbgogICAgU29tZSgxKQp9Cgpjb25zdCBGT086IE9wdGlvbjx1OD4gPSBjcmVhdGVfc29tZSgpOyAvLyBvayEKCi8vIFRoZXNlIGFyZSBhbHNvIHdvcmtpbmc6CnN0cnVjdCBCYXIgewogICAgeDogdTgsCn0KCmNvbnN0IE9USEVSX0ZPTzogT3B0aW9uPHU4PiA9IFNvbWUoMSk7CmNvbnN0IEJBUjogQmFyID0gQmFyIHt4OiAxfTsKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twUAAAC3BfMIGACtBiYBAAAoAAIGACkBAAQAxAMOAAADJwAEAMQDDgAAACcCBQEC2QEBAQDzCAABKAAEAMQDDgAAAicAAQQArwMkAAADJgAEAK8DJAAAACYBAQDzCAACFwCwAxIAAAICBUUwMDE1AAEfBQAAAAXzCAQArwMkAAAAJgEBAfcIAAEnABoA3AYmAQAALQAAAhoA3AYmAQACArcIQSBwYXR0ZXJuIGF0dGVtcHRlZCB0byBleHRyYWN0IGFuIGluY29ycmVjdCBudW1iZXIgb2YgZmllbGRzIGZyb20gYSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyMwplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwgLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpBIHBhdHRlcm4gdXNlZCB0byBtYXRjaCBhZ2FpbnN0IGFuIGVudW0gdmFyaWFudCBtdXN0IHByb3ZpZGUgYSBzdWItcGF0dGVybiBmb3IKZWFjaCBmaWVsZCBvZiB0aGUgZW51bSB2YXJpYW50LgoKSGVyZSB0aGUgYEFwcGxlYCB2YXJpYW50IGhhcyB0d28gZmllbGRzLCBhbmQgc2hvdWxkIGJlIG1hdGNoZWQgYWdhaW5zdCBsaWtlIHNvOgoKYGBgCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIENvcnJlY3QuCm1hdGNoIHggewogICAgRnJ1aXQ6OkFwcGxlKGEsIGIpID0+IHt9LAogICAgXyA9PiB7fQp9CmBgYAoKTWF0Y2hpbmcgd2l0aCB0aGUgd3JvbmcgbnVtYmVyIG9mIGZpZWxkcyBoYXMgbm8gc2Vuc2libGUgaW50ZXJwcmV0YXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKLy8gSW5jb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhKSA9PiB7fSwKICAgIEZydWl0OjpBcHBsZShhLCBiLCBjKSA9PiB7fSwKfQpgYGAKCkNoZWNrIGhvdyBtYW55IGZpZWxkcyB0aGUgZW51bSB3YXMgZGVjbGFyZWQgd2l0aCBhbmQgZW5zdXJlIHRoYXQgeW91ciBwYXR0ZXJuCnVzZXMgdGhlIHNhbWUgbnVtYmVyLgoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cIAAAAtwjzCBoA3AYmAQAALAACBgAtAQAEAMQDDgAAAysABADEAw4AAAArAgUBAtkBAQEA8wgAASwABADEAw4AAAIrAAEEAK8DJAAAAyoABACvAyQAAAAqAQEA8wgAAhkAsAMSAAACAgVFMDAyMwABHwUAAAAF8wgEAK8DJAAAACoBAQH3CAABKwAcAIsHJgEAADEAAAIcAIsHJgEAAgLwBEVhY2ggZmllbGQgb2YgYSBzdHJ1Y3QgY2FuIG9ubHkgYmUgYm91bmQgb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI1CnN0cnVjdCBGb28gewogICAgYTogdTgsCiAgICBiOiB1OCwKfQoKZm4gbWFpbigpewogICAgbGV0IHggPSBGb28geyBhOjEsIGI6MiB9OwoKICAgIGxldCBGb28geyBhOiB4LCBhOiB5IH0gPSB4OwogICAgLy8gZXJyb3I6IGZpZWxkIGBhYCBib3VuZCBtdWx0aXBsZSB0aW1lcyBpbiB0aGUgcGF0dGVybgp9CmBgYAoKRWFjaCBvY2N1cnJlbmNlIG9mIGEgZmllbGQgbmFtZSBiaW5kcyB0aGUgdmFsdWUgb2YgdGhhdCBmaWVsZCwgc28gdG8gZml4IHRoaXMKZXJyb3IgeW91IHdpbGwgaGF2ZSB0byByZW1vdmUgb3IgYWx0ZXIgdGhlIGR1cGxpY2F0ZSB1c2VzIG9mIHRoZSBmaWVsZCBuYW1lLgpQZXJoYXBzIHlvdSBtaXNzcGVsbGVkIGFub3RoZXIgZmllbGQgbmFtZT8gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYjogeSB9ID0geDsgLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////P/AEAAAA8ATzCBwAiwcmAQAAMAACBgAxAQAEAMQDDgAAAy8ABADEAw4AAAAvAgUBAtkBAQEA8wgAATAABADEAw4AAAIvAAEEAK8DJAAAAy4ABACvAyQAAAAuAQEA8wgAAhsAsAMSAAACAgVFMDAyNQABHwUAAAAF8wgEAK8DJAAAAC4BAQH3CAABLwAeALoHJgEAADUAAAIeALoHJgEAAgLXBUEgc3RydWN0IHBhdHRlcm4gYXR0ZW1wdGVkIHRvIGV4dHJhY3QgYSBub24tZXhpc3RlbnQgZmllbGQgZnJvbSBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjYKc3RydWN0IFRoaW5nIHsKICAgIHg6IHUzMiwKICAgIHk6IHUzMiwKfQoKbGV0IHRoaW5nID0gVGhpbmcgeyB4OiAwLCB5OiAwIH07CgptYXRjaCB0aGluZyB7CiAgICBUaGluZyB7IHgsIHogfSA9PiB7fSAvLyBlcnJvcjogYFRoaW5nOjp6YCBmaWVsZCBkb2Vzbid0IGV4aXN0Cn0KYGBgCgpJZiB5b3UgYXJlIHVzaW5nIHNob3J0aGFuZCBmaWVsZCBwYXR0ZXJucyBidXQgd2FudCB0byByZWZlciB0byB0aGUgc3RydWN0IGZpZWxkCmJ5IGEgZGlmZmVyZW50IG5hbWUsIHlvdSBzaG91bGQgcmVuYW1lIGl0IGV4cGxpY2l0bHkuIFN0cnVjdCBmaWVsZHMgYXJlCmlkZW50aWZpZWQgYnkgdGhlIG5hbWUgdXNlZCBiZWZvcmUgdGhlIGNvbG9uIGA6YCBzbyBzdHJ1Y3QgcGF0dGVybnMgc2hvdWxkCnJlc2VtYmxlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgc3RydWN0IHR5cGUgYmVpbmcgbWF0Y2hlZC4KCmBgYApzdHJ1Y3QgVGhpbmcgewogICAgeDogdTMyLAogICAgeTogdTMyLAp9CgpsZXQgdGhpbmcgPSBUaGluZyB7IHg6IDAsIHk6IDAgfTsKCm1hdGNoIHRoaW5nIHsKICAgIFRoaW5nIHsgeCwgeTogeiB9ID0+IHt9IC8vIHdlIHJlbmFtZWQgYHlgIHRvIGB6YAp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////A9cFAAAA1wXzCB4AugcmAQAANAACBgA1AQAEAMQDDgAAAzMABADEAw4AAAAzAgUBAtkBAQEA8wgAATQABADEAw4AAAIzAAEEAK8DJAAAAzIABACvAyQAAAAyAQEA8wgAAh0AsAMSAAACAgVFMDAyNgABHwUAAAAF8wgEAK8DJAAAADIBAQH3CAABMwAgAOkHJgEAADkAAAIgAOkHJgEAAgK9BUEgcGF0dGVybiBmb3IgYSBzdHJ1Y3QgZmFpbHMgdG8gc3BlY2lmeSBhIHN1Yi1wYXR0ZXJuIGZvciBldmVyeSBvbmUgb2YgdGhlCnN0cnVjdCdzIGZpZWxkcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjcKc3RydWN0IERvZyB7CiAgICBuYW1lOiBTdHJpbmcsCiAgICBhZ2U6IHUzMiwKfQoKbGV0IGQgPSBEb2cgeyBuYW1lOiAiUnVzdHkiLnRvX3N0cmluZygpLCBhZ2U6IDggfTsKCi8vIFRoaXMgaXMgaW5jb3JyZWN0LgptYXRjaCBkIHsKICAgIERvZyB7IGFnZTogeCB9ID0+IHt9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoYXQgZWFjaCBmaWVsZCBmcm9tIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uIGlzCm1lbnRpb25lZCBpbiB0aGUgcGF0dGVybiwgb3IgdXNlIGAuLmAgdG8gaWdub3JlIHVud2FudGVkIGZpZWxkcy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRG9nIHsKICAgIG5hbWU6IFN0cmluZywKICAgIGFnZTogdTMyLAp9CgpsZXQgZCA9IERvZyB7IG5hbWU6ICJSdXN0eSIudG9fc3RyaW5nKCksIGFnZTogOCB9OwoKbWF0Y2ggZCB7CiAgICBEb2cgeyBuYW1lOiByZWYgbiwgYWdlOiB4IH0gPT4ge30KfQoKLy8gVGhpcyBpcyBhbHNvIGNvcnJlY3QgKGlnbm9yZSB1bnVzZWQgZmllbGRzKS4KbWF0Y2ggZCB7CiAgICBEb2cgeyBhZ2U6IHgsIC4uIH0gPT4ge30KfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8fvQUAAAC9BfMIIADpByYBAAA4AAIGADkBAAQAxAMOAAADNwAEAMQDDgAAADcCBQEC2QEBAQDzCAABOAAEAMQDDgAAAjcAAQQArwMkAAADNgAEAK8DJAAAADYBAQDzCAACHwCwAxIAAAICBUUwMDI3AAEfBQAAAAXzCAQArwMkAAAANgEBAfcIAAE3ACIAmAgmAQAAPQAAAiIAmAgmAQACAvMFU29tZXRoaW5nIG90aGVyIHRoYW4gbnVtYmVycyBhbmQgY2hhcmFjdGVycyBoYXMgYmVlbiB1c2VkIGZvciBhIHJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyOQpsZXQgc3RyaW5nID0gInNhbHV0YXRpb25zICEiOwoKLy8gVGhlIG9yZGVyaW5nIHJlbGF0aW9uIGZvciBzdHJpbmdzIGNhbm5vdCBiZSBldmFsdWF0ZWQgYXQgY29tcGlsZSB0aW1lLAovLyBzbyB0aGlzIGRvZXNuJ3Qgd29yazoKbWF0Y2ggc3RyaW5nIHsKICAgICJoZWxsbyIgLi49ICJ3b3JsZCIgPT4ge30KICAgIF8gPT4ge30KfQoKLy8gVGhpcyBpcyBhIG1vcmUgZ2VuZXJhbCB2ZXJzaW9uLCB1c2luZyBhIGd1YXJkOgptYXRjaCBzdHJpbmcgewogICAgcyBpZiBzID49ICJoZWxsbyIgJiYgcyA8PSAid29ybGQiID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCgpJbiBhIG1hdGNoIGV4cHJlc3Npb24sIG9ubHkgbnVtYmVycyBhbmQgY2hhcmFjdGVycyBjYW4gYmUgbWF0Y2hlZCBhZ2FpbnN0IGEKcmFuZ2UuIFRoaXMgaXMgYmVjYXVzZSB0aGUgY29tcGlsZXIgY2hlY2tzIHRoYXQgdGhlIHJhbmdlIGlzIG5vbi1lbXB0eSBhdApjb21waWxlLXRpbWUsIGFuZCBpcyB1bmFibGUgdG8gZXZhbHVhdGUgYXJiaXRyYXJ5IGNvbXBhcmlzb24gZnVuY3Rpb25zLiBJZiB5b3UKd2FudCB0byBjYXB0dXJlIHZhbHVlcyBvZiBhbiBvcmRlcmFibGUgdHlwZSBiZXR3ZWVuIHR3byBlbmQtcG9pbnRzLCB5b3UgY2FuIHVzZQphIGd1YXJkLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzBQAAAPMF8wgiAJgIJgEAADwAAgYAPQEABADEAw4AAAM7AAQAxAMOAAAAOwIFAQLZAQEBAPMIAAE8AAQAxAMOAAACOwABBACvAyQAAAM6AAQArwMkAAAAOgEBAPMIAAIhALADEgAAAgIFRTAwMjkAAR8FAAAABfMIBACvAyQAAAA6AQEB9wgAATsAJADHCCYBAABBAAACJADHCCYBAAICsgNXaGVuIG1hdGNoaW5nIGFnYWluc3QgYSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlIGlzCm5vbi1lbXB0eS4gUmFuZ2UgcGF0dGVybnMgaW5jbHVkZSBib3RoIGVuZC1wb2ludHMsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0bwpyZXF1aXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gdGhlIGVuZCBvZiB0aGUKcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDMwCm1hdGNoIDV1MzIgewogICAgLy8gVGhpcyByYW5nZSBpcyBvaywgYWxiZWl0IHBvaW50bGVzcy4KICAgIDEgLi49IDEgPT4ge30KICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAxMDAwIC4uPSA1ID0+IHt9Cn0KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wGyAwAAALID8wgkAMcIJgEAAEAAAgYAQQEABADEAw4AAAM/AAQAxAMOAAAAPwIFAQLZAQEBAPMIAAFAAAQAxAMOAAACPwABBACvAyQAAAM+AAQArwMkAAAAPgEBAPMIAAIjALADEgAAAgIFRTAwMzAAAR8FAAAABfMIBACvAyQAAAA+AQEB9wgAAT8AJgD2CCYBAABFAAACJgD2CCYBAAICvgdBIHRyYWl0IHR5cGUgaGFzIGJlZW4gZGVyZWZlcmVuY2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzMwojIHRyYWl0IFNvbWVUcmFpdCB7IGZuIG1ldGhvZF9vbmUoJnNlbGYpe30gZm4gbWV0aG9kX3R3bygmc2VsZil7fSB9CiMgaW1wbDxUPiBTb21lVHJhaXQgZm9yIFQge30KbGV0IHRyYWl0X29iajogJlNvbWVUcmFpdCA9ICYic29tZV92YWx1ZSI7CgovLyBUaGlzIHRyaWVzIHRvIGltcGxpY2l0bHkgZGVyZWZlcmVuY2UgdG8gY3JlYXRlIGFuIHVuc2l6ZWQgbG9jYWwgdmFyaWFibGUuCmxldCAmaW52YWxpZCA9IHRyYWl0X29iajsKCi8vIFlvdSBjYW4gY2FsbCBtZXRob2RzIHdpdGhvdXQgYmluZGluZyB0byB0aGUgdmFsdWUgYmVpbmcgcG9pbnRlZCBhdC4KdHJhaXRfb2JqLm1ldGhvZF9vbmUoKTsKdHJhaXRfb2JqLm1ldGhvZF90d28oKTsKYGBgCgpBIHBvaW50ZXIgdG8gYSB0cmFpdCB0eXBlIGNhbm5vdCBiZSBpbXBsaWNpdGx5IGRlcmVmZXJlbmNlZCBieSBhIHBhdHRlcm4uIEV2ZXJ5CnRyYWl0IGRlZmluZXMgYSB0eXBlLCBidXQgYmVjYXVzZSB0aGUgc2l6ZSBvZiB0cmFpdCBpbXBsZW1lbnRlcnMgaXNuJ3QgZml4ZWQsCnRoaXMgdHlwZSBoYXMgbm8gY29tcGlsZS10aW1lIHNpemUuIFRoZXJlZm9yZSwgYWxsIGFjY2Vzc2VzIHRvIHRyYWl0IHR5cGVzIG11c3QKYmUgdGhyb3VnaCBwb2ludGVycy4gSWYgeW91IGVuY291bnRlciB0aGlzIGVycm9yIHlvdSBzaG91bGQgdHJ5IHRvIGF2b2lkCmRlcmVmZXJlbmNpbmcgdGhlIHBvaW50ZXIuCgpZb3UgY2FuIHJlYWQgbW9yZSBhYm91dCB0cmFpdCBvYmplY3RzIGluIHRoZSBbVHJhaXQgT2JqZWN0c10gc2VjdGlvbiBvZiB0aGUKUmVmZXJlbmNlLgoKW1RyYWl0IE9iamVjdHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS90eXBlcy5odG1sI3RyYWl0LW9iamVjdHMKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P74HAAAAvgfzCCYA9ggmAQAARAACBgBFAQAEAMQDDgAAA0MABADEAw4AAABDAgUBAtkBAQEA8wgAAUQABADEAw4AAAJDAAEEAK8DJAAAA0IABACvAyQAAABCAQEA8wgAAiUAsAMSAAACAgVFMDAzMwABHwUAAAAF8wgEAK8DJAAAAEIBAQH3CAABQwAoAKUJJgEAAEkAAAIoAKUJJgEAAgLNCVRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgd2hhdCBtZXRob2QgdG8gY2FsbCBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgbWV0aG9kCmhhcyB0aGUgc2FtZSBwcm90b3R5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM0CnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9Cgp0cmFpdCBUcmFpdDIgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQppbXBsIFRyYWl0MiBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICBUZXN0Ojpmb28oKSAvLyBlcnJvciwgd2hpY2ggZm9vKCkgdG8gY2FsbD8KfQpgYGAKClRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIGtlZXAgb25seSBvbmUgb2YgdGhlbSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuClNvIGxldCdzIHRha2Ugb3VyIGV4YW1wbGUgYW5kIGZpeCBpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgVGVzdDo6Zm9vKCkgLy8gYW5kIG5vdyB0aGF0J3MgZ29vZCEKfQpgYGAKCkhvd2V2ZXIsIGEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHVzaW5nIGZ1bGx5IGV4cGxpY2l0IG5hbWluZyBvZiB0eXBlIGFuZAp0cmFpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKdHJhaXQgVHJhaXQyIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KaW1wbCBUcmFpdDIgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgPFRlc3QgYXMgVHJhaXQxPjo6Zm9vKCkKfQpgYGAKCk9uZSBsYXN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRiB7CiAgICBmbiBtKCZzZWxmKTsKfQoKdHJhaXQgRyB7CiAgICBmbiBtKCZzZWxmKTsKfQoKc3RydWN0IFg7CgppbXBsIEYgZm9yIFggeyBmbiBtKCZzZWxmKSB7IHByaW50bG4hKCJJIGFtIEYiKTsgfSB9CmltcGwgRyBmb3IgWCB7IGZuIG0oJnNlbGYpIHsgcHJpbnRsbiEoIkkgYW0gRyIpOyB9IH0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IFg7CgogICAgRjo6bSgmZik7IC8vIGl0IGRpc3BsYXlzICJJIGFtIEYiCiAgICBHOjptKCZmKTsgLy8gaXQgZGlzcGxheXMgIkkgYW0gRyIKfQpgYGAKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NCQAAAM0J8wgoAKUJJgEAAEgAAgYASQEABADEAw4AAANHAAQAxAMOAAAARwIFAQLZAQEBAPMIAAFIAAQAxAMOAAACRwABBACvAyQAAANGAAQArwMkAAAARgEBAPMIAAInALADEgAAAgIFRTAwMzQAAR8FAAAABfMIBACvAyQAAABGAQEB9wgAAUcAKgDUCSYBAABNAAACKgDUCSYBAAICnUpGb3IgYW55IGdpdmVuIHRyYWl0IGBUcmFpdGAgdGhlcmUgbWF5IGJlIGEgcmVsYXRlZCBfdHlwZV8gY2FsbGVkIHRoZSBfdHJhaXQKb2JqZWN0IHR5cGVfIHdoaWNoIGlzIHR5cGljYWxseSB3cml0dGVuIGFzIGBkeW4gVHJhaXRgLiBJbiBlYXJsaWVyIGVkaXRpb25zIG9mClJ1c3QsIHRyYWl0IG9iamVjdCB0eXBlcyB3ZXJlIHdyaXR0ZW4gYXMgcGxhaW4gYFRyYWl0YCAoanVzdCB0aGUgbmFtZSBvZiB0aGUKdHJhaXQsIHdyaXR0ZW4gaW4gdHlwZSBwb3NpdGlvbnMpIGJ1dCB0aGlzIHdhcyBhIGJpdCB0b28gY29uZnVzaW5nLCBzbyB3ZSBub3cKd3JpdGUgYGR5biBUcmFpdGAuCgpTb21lIHRyYWl0cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXNlZCBhcyB0cmFpdCBvYmplY3QgdHlwZXMuIFRoZSB0cmFpdHMgdGhhdAphcmUgYWxsb3dlZCB0byBiZSB1c2VkIGFzIHRyYWl0IG9iamVjdCB0eXBlcyBhcmUgY2FsbGVkICJvYmplY3Qtc2FmZSIgdHJhaXRzLgpBdHRlbXB0aW5nIHRvIHVzZSBhIHRyYWl0IG9iamVjdCB0eXBlIGZvciBhIHRyYWl0IHRoYXQgaXMgbm90IG9iamVjdC1zYWZlIHdpbGwKdHJpZ2dlciBlcnJvciBFMDAzOC4KClR3byBnZW5lcmFsIGFzcGVjdHMgb2YgdHJhaXQgb2JqZWN0IHR5cGVzIGdpdmUgcmlzZSB0byB0aGUgcmVzdHJpY3Rpb25zOgoKICAxLiBUcmFpdCBvYmplY3QgdHlwZXMgYXJlIGR5bmFtaWNhbGx5IHNpemVkIHR5cGVzIChEU1RzKSwgYW5kIHRyYWl0IG9iamVjdHMgb2YKICAgICB0aGVzZSB0eXBlcyBjYW4gb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoIHBvaW50ZXJzLCBzdWNoIGFzIGAmZHluIFRyYWl0YCBvcgogICAgIGBCb3g8ZHluIFRyYWl0PmAuIFRoZSBzaXplIG9mIHN1Y2ggYSBwb2ludGVyIGlzIGtub3duLCBidXQgdGhlIHNpemUgb2YgdGhlCiAgICAgYGR5biBUcmFpdGAgb2JqZWN0IHBvaW50ZWQtdG8gYnkgdGhlIHBvaW50ZXIgaXMgX29wYXF1ZV8gdG8gY29kZSB3b3JraW5nCiAgICAgd2l0aCBpdCwgYW5kIGRpZmZlcmVudCB0cmFpdCBvYmplY3RzIHdpdGggdGhlIHNhbWUgdHJhaXQgb2JqZWN0IHR5cGUgbWF5CiAgICAgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCgogIDIuIFRoZSBwb2ludGVyIHVzZWQgdG8gYWNjZXNzIGEgdHJhaXQgb2JqZWN0IGlzIHBhaXJlZCB3aXRoIGFuIGV4dHJhIHBvaW50ZXIKICAgICB0byBhICJ2aXJ0dWFsIG1ldGhvZCB0YWJsZSIgb3IgInZ0YWJsZSIsIHdoaWNoIGlzIHVzZWQgdG8gaW1wbGVtZW50IGR5bmFtaWMKICAgICBkaXNwYXRjaCB0byB0aGUgb2JqZWN0J3MgaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdCdzIG1ldGhvZHMuIFRoZXJlIGlzIGEKICAgICBzaW5nbGUgc3VjaCB2dGFibGUgZm9yIGVhY2ggdHJhaXQgaW1wbGVtZW50YXRpb24sIGJ1dCBkaWZmZXJlbnQgdHJhaXQKICAgICBvYmplY3RzIHdpdGggdGhlIHNhbWUgdHJhaXQgb2JqZWN0IHR5cGUgbWF5IHBvaW50IHRvIHZ0YWJsZXMgZnJvbSBkaWZmZXJlbnQKICAgICBpbXBsZW1lbnRhdGlvbnMuCgpUaGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHZpb2xhdGUgb2JqZWN0LXNhZmV0eSBmb2xsb3csIG1vc3Qgb2Ygd2hpY2ggcmVsYXRlCnRvIG1pc3Npbmcgc2l6ZSBpbmZvcm1hdGlvbiBhbmQgdnRhYmxlIHBvbHltb3JwaGlzbSBhcmlzaW5nIGZyb20gdGhlc2UgYXNwZWN0cy4KCiMjIyBUaGUgdHJhaXQgcmVxdWlyZXMgYFNlbGY6IFNpemVkYAoKVHJhaXRzIHRoYXQgYXJlIGRlY2xhcmVkIGFzIGBUcmFpdDogU2l6ZWRgIG9yIHdoaWNoIG90aGVyd2lzZSBpbmhlcml0IGEKY29uc3RyYWludCBvZiBgU2VsZjpTaXplZGAgYXJlIG5vdCBvYmplY3Qtc2FmZS4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29tZXdoYXQgc3VidGxlLiBJdCBkZXJpdmVzIGZyb20gdGhlIGZhY3QgdGhhdCBSdXN0CnJlcXVpcmVzIChhbmQgZGVmaW5lcykgdGhhdCBldmVyeSB0cmFpdCBvYmplY3QgdHlwZSBgZHluIFRyYWl0YCBhdXRvbWF0aWNhbGx5CmltcGxlbWVudHMgYFRyYWl0YC4gUnVzdCBkb2VzIHRoaXMgdG8gc2ltcGxpZnkgZXJyb3IgcmVwb3J0aW5nIGFuZCBlYXNlCmludGVyb3BlcmF0aW9uIGJldHdlZW4gc3RhdGljIGFuZCBkeW5hbWljIHBvbHltb3JwaGlzbS4gRm9yIGV4YW1wbGUsIHRoaXMgY29kZQp3b3JrczoKCmBgYAp0cmFpdCBUcmFpdCB7Cn0KCmZuIHN0YXRpY19mb288VDpUcmFpdCArID9TaXplZD4oYjogJlQpIHsKfQoKZm4gZHluYW1pY19iYXIoYTogJmR5biBUcmFpdCkgewogICAgc3RhdGljX2ZvbyhhKQp9CmBgYAoKVGhpcyBjb2RlIHdvcmtzIGJlY2F1c2UgYGR5biBUcmFpdGAsIGlmIGl0IGV4aXN0cywgYWx3YXlzIGltcGxlbWVudHMgYFRyYWl0YC4KCkhvd2V2ZXIgYXMgd2Uga25vdywgYW55IGBkeW4gVHJhaXRgIGlzIGFsc28gdW5zaXplZCwgYW5kIHNvIGl0IGNhbiBuZXZlcgppbXBsZW1lbnQgYSBzaXplZCB0cmFpdCBsaWtlIGBUcmFpdDpTaXplZGAuIFNvLCByYXRoZXIgdGhhbiBhbGxvdyBhbiBleGNlcHRpb24KdG8gdGhlIHJ1bGUgdGhhdCBgZHluIFRyYWl0YCBhbHdheXMgaW1wbGVtZW50cyBgVHJhaXRgLCBSdXN0IGNob29zZXMgdG8gcHJvaGliaXQKc3VjaCBhIGBkeW4gVHJhaXRgIGZyb20gZXhpc3RpbmcgYXQgYWxsLgoKT25seSB1bnNpemVkIHRyYWl0cyBhcmUgY29uc2lkZXJlZCBvYmplY3Qtc2FmZS4KCkdlbmVyYWxseSwgYFNlbGY6IFNpemVkYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYWl0IHNob3VsZCBub3QgYmUgdXNlZAphcyBhIHRyYWl0IG9iamVjdC4gSWYgdGhlIHRyYWl0IGNvbWVzIGZyb20geW91ciBvd24gY3JhdGUsIGNvbnNpZGVyIHJlbW92aW5nCnRoaXMgcmVzdHJpY3Rpb24uCgojIyMgTWV0aG9kIHJlZmVyZW5jZXMgdGhlIGBTZWxmYCB0eXBlIGluIGl0cyBwYXJhbWV0ZXJzIG9yIHJldHVybiB0eXBlCgpUaGlzIGhhcHBlbnMgd2hlbiBhIHRyYWl0IGhhcyBhIG1ldGhvZCBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAiaGkiLnRvX293bmVkKCkKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAxCiAgICB9Cn0KYGBgCgooTm90ZSB0aGF0IGAmc2VsZmAgYW5kIGAmbXV0IHNlbGZgIGFyZSBva2F5LCBpdCdzIGFkZGl0aW9uYWwgYFNlbGZgIHR5cGVzIHdoaWNoCmNhdXNlIHRoaXMgcHJvYmxlbS4pCgpJbiBzdWNoIGEgY2FzZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBwcmVkaWN0IHRoZSByZXR1cm4gdHlwZSBvZiBgZm9vKClgIGluIGEKc2l0dWF0aW9uIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmZuIGNhbGxfZm9vKHg6IEJveDxkeW4gVHJhaXQ+KSB7CiAgICBsZXQgeSA9IHguZm9vKCk7IC8vIFdoYXQgdHlwZSBpcyB5PwogICAgLy8gLi4uCn0KYGBgCgpJZiBvbmx5IHNvbWUgbWV0aG9kcyBhcmVuJ3Qgb2JqZWN0LXNhZmUsIHlvdSBjYW4gYWRkIGEgYHdoZXJlIFNlbGY6IFNpemVkYCBib3VuZApvbiB0aGVtIHRvIG1hcmsgdGhlbSBhcyBleHBsaWNpdGx5IHVuYXZhaWxhYmxlIHRvIHRyYWl0IG9iamVjdHMuIFRoZQpmdW5jdGlvbmFsaXR5IHdpbGwgc3RpbGwgYmUgYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBpbXBsZW1lbnRlcnMsIGluY2x1ZGluZwpgQm94PGR5biBUcmFpdD5gIHdoaWNoIGlzIGl0c2VsZiBzaXplZCAoYXNzdW1pbmcgeW91IGBpbXBsIFRyYWl0IGZvciBCb3g8ZHluClRyYWl0PmApLgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZiB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgZnVuY3Rpb25zCn0KYGBgCgpOb3csIGBmb28oKWAgY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gYSB0cmFpdCBvYmplY3QsIGJ1dCB5b3Ugd2lsbCBub3cgYmUKYWxsb3dlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0LCBhbmQgdGhhdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBhbnkgb2JqZWN0LXNhZmUKbWV0aG9kcy4gV2l0aCBzdWNoIGEgYm91bmQsIG9uZSBjYW4gc3RpbGwgY2FsbCBgZm9vKClgIG9uIHR5cGVzIGltcGxlbWVudGluZwp0aGF0IHRyYWl0IHRoYXQgYXJlbid0IGJlaGluZCB0cmFpdCBvYmplY3RzLgoKIyMjIE1ldGhvZCBoYXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMKCkFzIG1lbnRpb25lZCBiZWZvcmUsIHRyYWl0IG9iamVjdHMgY29udGFpbiBwb2ludGVycyB0byBtZXRob2QgdGFibGVzLiBTbywgaWYgd2UKaGF2ZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAyCiAgICB9Cn0KLy8gLi4uCmBgYAoKQXQgY29tcGlsZSB0aW1lIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYFRyYWl0YCB3aWxsIHByb2R1Y2UgYSB0YWJsZSBjb250YWluaW5nCnRoZSB2YXJpb3VzIG1ldGhvZHMgKGFuZCBvdGhlciBpdGVtcykgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24sIHdoaWNoIHdpbGwKYmUgdXNlZCBhcyB0aGUgdmlydHVhbCBtZXRob2QgdGFibGUgZm9yIGEgYGR5biBUcmFpdGAgb2JqZWN0IGRlcml2ZWQgZnJvbSB0aGF0CmltcGxlbWVudGF0aW9uLgoKVGhpcyB3b3JrcyBmaW5lLCBidXQgd2hlbiB0aGUgbWV0aG9kIGdhaW5zIGdlbmVyaWMgcGFyYW1ldGVycywgd2UgY2FuIGhhdmUgYQpwcm9ibGVtLgoKVXN1YWxseSwgZ2VuZXJpYyBwYXJhbWV0ZXJzIGdldCBfbW9ub21vcnBoaXplZF8uIEZvciBleGFtcGxlLCBpZiBJIGhhdmUKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgLy8gLi4uCn0KYGBgCgpUaGUgbWFjaGluZSBjb2RlIGZvciBgZm9vOjo8dTg+KClgLCBgZm9vOjo8Ym9vbD4oKWAsIGBmb286OjxTdHJpbmc+KClgLCBvciBhbnkKb3RoZXIgdHlwZSBzdWJzdGl0dXRpb24gaXMgZGlmZmVyZW50LiBIZW5jZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZQppbXBsZW1lbnRhdGlvbiBvbi1kZW1hbmQuIElmIHlvdSBjYWxsIGBmb28oKWAgd2l0aCBhIGBib29sYCBwYXJhbWV0ZXIsIHRoZQpjb21waWxlciB3aWxsIG9ubHkgZ2VuZXJhdGUgY29kZSBmb3IgYGZvbzo6PGJvb2w+KClgLiBXaGVuIHdlIGhhdmUgYWRkaXRpb25hbAp0eXBlIHBhcmFtZXRlcnMsIHRoZSBudW1iZXIgb2YgbW9ub21vcnBoaXplZCBpbXBsZW1lbnRhdGlvbnMgdGhlIGNvbXBpbGVyCmdlbmVyYXRlcyBkb2VzIG5vdCBncm93IGRyYXN0aWNhbGx5LCBzaW5jZSB0aGUgY29tcGlsZXIgd2lsbCBvbmx5IGdlbmVyYXRlIGFuCmltcGxlbWVudGF0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB1bnBhcmFtZXRlcml6ZWQgc3Vic3RpdHV0aW9ucwooaS5lLiwgc3Vic3RpdHV0aW9ucyB3aGVyZSBub25lIG9mIHRoZSBzdWJzdGl0dXRlZCB0eXBlcyBhcmUgdGhlbXNlbHZlcwpwYXJhbWV0ZXJpemVkKS4KCkhvd2V2ZXIsIHdpdGggdHJhaXQgb2JqZWN0cyB3ZSBoYXZlIHRvIG1ha2UgYSB0YWJsZSBjb250YWluaW5nIF9ldmVyeV8gb2JqZWN0CnRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQuIE5vdywgaWYgaXQgaGFzIHR5cGUgcGFyYW1ldGVycywgd2UgbmVlZCB0byBhZGQKaW1wbGVtZW50YXRpb25zIGZvciBldmVyeSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQsIGFuZCB0aGVyZSBjb3VsZAp0aGVvcmV0aWNhbGx5IGJlIGFuIGluZmluaXRlIG51bWJlciBvZiB0eXBlcy4KCkZvciBleGFtcGxlLCB3aXRoOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbzxUPigmc2VsZiwgb246IFQpOwogICAgLy8gbW9yZSBtZXRob2RzCn0KCmltcGwgVHJhaXQgZm9yIFN0cmluZyB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMgogICAgfQp9CgovLyA4IG1vcmUgaW1wbGVtZW50YXRpb25zCmBgYAoKTm93LCBpZiB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAojIHRyYWl0IFRyYWl0IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCk7IH0KIyBpbXBsIFRyYWl0IGZvciBTdHJpbmcgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgdTggeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgYm9vbCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpIHt9IH0KIyAvLyBldGMuCmZuIGNhbGxfZm9vKHRoaW5nOiBCb3g8ZHluIFRyYWl0PikgewogICAgdGhpbmcuZm9vKHRydWUpOyAvLyB0aGlzIGNvdWxkIGJlIGFueSBvbmUgb2YgdGhlIDggdHlwZXMgYWJvdmUKICAgIHRoaW5nLmZvbygxKTsKICAgIHRoaW5nLmZvbygiaGVsbG8iKTsKfQpgYGAKCldlIGRvbid0IGp1c3QgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBtZXRob2RzIG9mCmBUcmFpdGAsIHdlIG5lZWQgdG8gY3JlYXRlIHN1Y2ggYSB0YWJsZSwgZm9yIGVhY2ggZGlmZmVyZW50IHR5cGUgZmVkIHRvCmBmb28oKWAuIEluIHRoaXMgY2FzZSB0aGlzIHR1cm5zIG91dCB0byBiZSAoMTAgdHlwZXMgaW1wbGVtZW50aW5nIGBUcmFpdGApXCooMwp0eXBlcyBiZWluZyBmZWQgdG8gYGZvbygpYCkgPSAzMCBpbXBsZW1lbnRhdGlvbnMhCgpXaXRoIHJlYWwgd29ybGQgdHJhaXRzIHRoZXNlIG51bWJlcnMgY2FuIGdyb3cgZHJhc3RpY2FsbHkuCgpUbyBmaXggdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQgc2ltaWxhciB0byB0aGUKZml4IGZvciB0aGUgc3ViLWVycm9yIGFib3ZlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHR5cGUKcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CmBgYAoKSWYgdGhpcyBpcyBub3QgYW4gb3B0aW9uLCBjb25zaWRlciByZXBsYWNpbmcgdGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggYW5vdGhlcgp0cmFpdCBvYmplY3QgKGUuZy4sIGlmIGBUOiBPdGhlclRyYWl0YCwgdXNlIGBvbjogQm94PGR5biBPdGhlclRyYWl0PmApLiBJZiB0aGUKbnVtYmVyIG9mIHR5cGVzIHlvdSBpbnRlbmQgdG8gZmVlZCB0byB0aGlzIG1ldGhvZCBpcyBsaW1pdGVkLCBjb25zaWRlciBtYW51YWxseQpsaXN0aW5nIG91dCB0aGUgbWV0aG9kcyBvZiBkaWZmZXJlbnQgdHlwZXMuCgojIyMgTWV0aG9kIGhhcyBubyByZWNlaXZlcgoKTWV0aG9kcyB0aGF0IGRvIG5vdCB0YWtlIGEgYHNlbGZgIHBhcmFtZXRlciBjYW4ndCBiZSBjYWxsZWQgc2luY2UgdGhlcmUgd29uJ3QgYmUKYSB3YXkgdG8gZ2V0IGEgcG9pbnRlciB0byB0aGUgbWV0aG9kIHRhYmxlIGZvciB0aGVtLgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKSAtPiB1ODsKfQpgYGAKClRoaXMgY291bGQgYmUgY2FsbGVkIGFzIGA8Rm9vIGFzIEZvbz46OmZvbygpYCwgd2hpY2ggd291bGQgbm90IGJlIGFibGUgdG8gcGljawphbiBpbXBsZW1lbnRhdGlvbi4KCkFkZGluZyBhIGBTZWxmOiBTaXplZGAgYm91bmQgdG8gdGhlc2UgbWV0aG9kcyB3aWxsIGdlbmVyYWxseSBtYWtlIHRoaXMgY29tcGlsZS4KCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCkgLT4gdTggd2hlcmUgU2VsZjogU2l6ZWQ7Cn0KYGBgCgojIyMgVHJhaXQgY29udGFpbnMgYXNzb2NpYXRlZCBjb25zdGFudHMKCkp1c3QgbGlrZSBzdGF0aWMgZnVuY3Rpb25zLCBhc3NvY2lhdGVkIGNvbnN0YW50cyBhcmVuJ3Qgc3RvcmVkIG9uIHRoZSBtZXRob2QKdGFibGUuIElmIHRoZSB0cmFpdCBvciBhbnkgc3VidHJhaXQgY29udGFpbiBhbiBhc3NvY2lhdGVkIGNvbnN0YW50LCB0aGV5IGNhbm5vdApiZSBtYWRlIGludG8gYW4gb2JqZWN0LgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBpMzI7Cn0KCmltcGwgRm9vIHt9CmBgYAoKQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSBoZWxwZXIgbWV0aG9kIGluc3RlYWQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIHgoJnNlbGYpIC0+IGkzMjsKfQpgYGAKCiMjIyBUcmFpdCB1c2VzIGBTZWxmYCBhcyBhIHR5cGUgcGFyYW1ldGVyIGluIHRoZSBzdXBlcnRyYWl0IGxpc3RpbmcKClRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2Vjb25kIHN1Yi1lcnJvciwgYnV0IHN1YnRsZXIuIEl0IGhhcHBlbnMgaW4gc2l0dWF0aW9ucwpsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKdHJhaXQgU3VwZXI8QTogP1NpemVkPiB7fQoKdHJhaXQgVHJhaXQ6IFN1cGVyPFNlbGY+IHsKfQoKc3RydWN0IEZvbzsKCmltcGwgU3VwZXI8Rm9vPiBmb3IgRm9ve30KCmltcGwgVHJhaXQgZm9yIEZvbyB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBCb3g8ZHluIFRyYWl0PjsKfQpgYGAKCkhlcmUsIHRoZSBzdXBlcnRyYWl0IG1pZ2h0IGhhdmUgbWV0aG9kcyBhcyBmb2xsb3dzOgoKYGBgCnRyYWl0IFN1cGVyPEE6ID9TaXplZD4gewogICAgZm4gZ2V0X2EoJnNlbGYpIC0+ICZBOyAvLyBub3RlIHRoYXQgdGhpcyBpcyBvYmplY3Qgc2FmZSEKfQpgYGAKCklmIHRoZSB0cmFpdCBgVHJhaXRgIHdhcyBkZXJpdmluZyBmcm9tIHNvbWV0aGluZyBsaWtlIGBTdXBlcjxTdHJpbmc+YCBvcgpgU3VwZXI8VD5gICh3aGVyZSBgRm9vYCBpdHNlbGYgaXMgYEZvbzxUPmApLCB0aGlzIGlzIG9rYXksIGJlY2F1c2UgZ2l2ZW4gYSB0eXBlCmBnZXRfYSgpYCB3aWxsIGRlZmluaXRlbHkgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCgpIb3dldmVyLCBpZiBpdCBkZXJpdmVzIGZyb20gYFN1cGVyPFNlbGY+YCwgZXZlbiB0aG91Z2ggYFN1cGVyYCBpcyBvYmplY3Qgc2FmZSwKdGhlIG1ldGhvZCBgZ2V0X2EoKWAgd291bGQgcmV0dXJuIGFuIG9iamVjdCBvZiB1bmtub3duIHR5cGUgd2hlbiBjYWxsZWQgb24gdGhlCmZ1bmN0aW9uLiBgU2VsZmAgdHlwZSBwYXJhbWV0ZXJzIGxldCB1cyBtYWtlIG9iamVjdCBzYWZlIHRyYWl0cyBubyBsb25nZXIgc2FmZSwKc28gdGhleSBhcmUgZm9yYmlkZGVuIHdoZW4gc3BlY2lmeWluZyBzdXBlcnRyYWl0cy4KClRoZXJlJ3Mgbm8gZWFzeSBmaXggZm9yIHRoaXMuIEdlbmVyYWxseSwgY29kZSB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZCBzbyB0aGF0CnlvdSBubyBsb25nZXIgbmVlZCB0byBkZXJpdmUgZnJvbSBgU3VwZXI8U2VsZj5gLgoAlQH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wGdSgAAAJ1K8wgqANQJJgEAAEwAAgYATQEABADEAw4AAANLAAQAxAMOAAAASwIFAQLZAQEBAPMIAAFMAAQAxAMOAAACSwABBACvAyQAAANKAAQArwMkAAAASgEBAPMIAAIpALADEgAAAgIFRTAwMzgAAR8FAAAABfMIBACvAyQAAABKAQEB9wgAAUsALACDCiYBAABRAAACLACDCiYBAAICvgVJdCBpcyBub3QgYWxsb3dlZCB0byBtYW51YWxseSBjYWxsIGRlc3RydWN0b3JzIGluIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQwCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IEZvbyB7IHg6IC03IH07CiAgICB4LmRyb3AoKTsgLy8gZXJyb3I6IGV4cGxpY2l0IHVzZSBvZiBkZXN0cnVjdG9yIG1ldGhvZAp9CmBgYAoKSXQgaXMgdW5uZWNlc3NhcnkgdG8gZG8gdGhpcyBzaW5jZSBgZHJvcGAgaXMgY2FsbGVkIGF1dG9tYXRpY2FsbHkgd2hlbmV2ZXIgYQp2YWx1ZSBnb2VzIG91dCBvZiBzY29wZS4gSG93ZXZlciwgaWYgeW91IHJlYWxseSBuZWVkIHRvIGRyb3AgYSB2YWx1ZSBieSBoYW5kLAp5b3UgY2FuIHVzZSB0aGUgYHN0ZDo6bWVtOjpkcm9wYCBmdW5jdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIHByaW50bG4hKCJrYWJvb20iKTsKICAgIH0KfQpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIGRyb3AoeCk7IC8vIG9rIQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++BQAAAL4F8wgsAIMKJgEAAFAAAgYAUQEABADEAw4AAANPAAQAxAMOAAAATwIFAQLZAQEBAPMIAAFQAAQAxAMOAAACTwABBACvAyQAAANOAAQArwMkAAAATgEBAPMIAAIrALADEgAAAgIFRTAwNDAAAR8FAAAABfMIBACvAyQAAABOAQEB9wgAAU8ALgCyCiYBAABVAAACLgCyCiYBAAICxgJZb3UgY2Fubm90IHVzZSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlcnMgb24gZm9yZWlnbiBpdGVtcy4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDQKZXh0ZXJuICJDIiB7IGZuIHNvbWVfZnVuYzxUPih4OiBUKTsgfQpgYGAKClRvIGZpeCB0aGlzLCByZXBsYWNlIHRoZSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBzcGVjaWFsaXphdGlvbnMgdGhhdCB5b3UKbmVlZDoKCmBgYApleHRlcm4gIkMiIHsgZm4gc29tZV9mdW5jX2kzMih4OiBpMzIpOyB9CmV4dGVybiAiQyIgeyBmbiBzb21lX2Z1bmNfaTY0KHg6IGk2NCk7IH0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wE/xgIAAADGAvMILgCyCiYBAABUAAIGAFUBAAQAxAMOAAADUwAEAMQDDgAAAFMCBQEC2QEBAQDzCAABVAAEAMQDDgAAAlMAAQQArwMkAAADUgAEAK8DJAAAAFIBAQDzCAACLQCwAxIAAAICBUUwMDQ0AAEfBQAAAAXzCAQArwMkAAAAUgEBAfcIAAFTADAA4QomAQAAWQAAAjAA4QomAQACArUDVmFyaWFkaWMgcGFyYW1ldGVycyBoYXZlIGJlZW4gdXNlZCBvbiBhIG5vbi1DIEFCSSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDUKZXh0ZXJuICJSdXN0IiB7CiAgICBmbiBmb28oeDogdTgsIC4uLik7IC8vIGVycm9yIQp9CmBgYAoKUnVzdCBvbmx5IHN1cHBvcnRzIHZhcmlhZGljIHBhcmFtZXRlcnMgZm9yIGludGVyb3BlcmFiaWxpdHkgd2l0aCBDIGNvZGUgaW4gaXRzCkZGSS4gQXMgc3VjaCwgdmFyaWFkaWMgcGFyYW1ldGVycyBjYW4gb25seSBiZSB1c2VkIHdpdGggZnVuY3Rpb25zIHdoaWNoIGFyZQp1c2luZyB0aGUgQyBBQkkuIFRvIGZpeCBzdWNoIGNvZGUsIHB1dCB0aGVtIGluIGFuIGV4dGVybiAiQyIgYmxvY2s6CgpgYGAKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28gKHg6IHU4LCAuLi4pOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8PtQMAAAC1A/MIMADhCiYBAABYAAIGAFkBAAQAxAMOAAADVwAEAMQDDgAAAFcCBQEC2QEBAQDzCAABWAAEAMQDDgAAAlcAAQQArwMkAAADVgAEAK8DJAAAAFYBAQDzCAACLwCwAxIAAAICBUUwMDQ1AAEfBQAAAAXzCAQArwMkAAAAVgEBAfcIAAFXADIAkAsmAQAAXQAAAjIAkAsmAQACAtMESXRlbXMgYXJlIG1pc3NpbmcgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDYKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7fQovLyBlcnJvcjogbm90IGFsbCB0cmFpdCBpdGVtcyBpbXBsZW1lbnRlZCwgbWlzc2luZzogYGZvb2AKYGBgCgpXaGVuIHRyeWluZyB0byBtYWtlIHNvbWUgdHlwZSBpbXBsZW1lbnQgYSB0cmFpdCBgRm9vYCwgeW91IG11c3QsIGF0IG1pbmltdW0sCnByb3ZpZGUgaW1wbGVtZW50YXRpb25zIGZvciBhbGwgb2YgYEZvb2AncyByZXF1aXJlZCBtZXRob2RzIChtZWFuaW5nIHRoZQptZXRob2RzIHRoYXQgZG8gbm90IGhhdmUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbnMpLCBhcyB3ZWxsIGFzIGFueSByZXF1aXJlZAp0cmFpdCBpdGVtcyBsaWtlIGFzc29jaWF0ZWQgdHlwZXMgb3IgY29uc3RhbnRzLiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCkge30gLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8f0wQAAADTBPMIMgCQCyYBAABcAAIGAF0BAAQAxAMOAAADWwAEAMQDDgAAAFsCBQEC2QEBAQDzCAABXAAEAMQDDgAAAlsAAQQArwMkAAADWgAEAK8DJAAAAFoBAQDzCAACMQCwAxIAAAICBUUwMDQ2AAEfBQAAAAXzCAQArwMkAAAAWgEBAfcIAAFbADQAvwsmAQAAYQAAAjQAvwsmAQACAuQFQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIHR5cGUgb3IKY29uc3QgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDkKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMCB0eXBlIHBhcmFtZXRlcnMgYnV0IGl0cyB0cmFpdCBkZWNsYXJhdGlvbiBoYXMgMQovLyB0eXBlIHBhcmFtZXRlcgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbyh4OiBib29sKSAtPiBTZWxmIHsgQmFyIH0KfQpgYGAKCkZvciBleGFtcGxlLCB0aGUgYEZvb2AgdHJhaXQgaGFzIGEgbWV0aG9kIGBmb29gIHdpdGggYSB0eXBlIHBhcmFtZXRlciBgVGAsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGZvb2AgZm9yIHRoZSB0eXBlIGBCYXJgIGlzIG1pc3NpbmcgdGhpcyBwYXJhbWV0ZXIuClRvIGZpeCB0aGlzIGVycm9yLCB0aGV5IG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb288VDogRGVmYXVsdD4oeDogVCkgLT4gU2VsZiB7IC8vIG9rIQogICAgICAgIEJhcgogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8B5AUAAADkBfMINAC/CyYBAABgAAIGAGEBAAQAxAMOAAADXwAEAMQDDgAAAF8CBQEC2QEBAQDzCAABYAAEAMQDDgAAAl8AAQQArwMkAAADXgAEAK8DJAAAAF4BAQDzCAACMwCwAxIAAAICBUUwMDQ5AAEfBQAAAAXzCAQArwMkAAAAXgEBAfcIAAFfADYA7gsmAQAAZQAAAjYA7gsmAQACAtwFQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIGZ1bmN0aW9uCnBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDUwCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYsIHg6IHU4KSAtPiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMSBwYXJhbWV0ZXIgYnV0IHRoZSBkZWNsYXJhdGlvbiBpbiB0cmFpdCBgRm9vOjpmb29gCi8vIGhhcyAyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9Cn0KYGBgCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHRyYWl0IGhhcyBhIG1ldGhvZCBgZm9vYCB3aXRoIHR3byBmdW5jdGlvbiBwYXJhbWV0ZXJzCihgJnNlbGZgIGFuZCBgdThgKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgb21pdHMKdGhlIGB1OGAgcGFyYW1ldGVyLiBUbyBmaXggdGhpcyBlcnJvciwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbCB7IC8vIG9rIQogICAgICAgIHRydWUKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3/cBQAAANwF8wg2AO4LJgEAAGQAAgYAZQEABADEAw4AAANjAAQAxAMOAAAAYwIFAQLZAQEBAPMIAAFkAAQAxAMOAAACYwABBACvAyQAAANiAAQArwMkAAAAYgEBAPMIAAI1ALADEgAAAgIFRTAwNTAAAR8FAAAABfMIBACvAyQAAABiAQEB9wgAAWMAOACdDCYBAABpAAACOACdDCYBAAIC9AJUaGUgcGFyYW1ldGVycyBvZiBhbnkgdHJhaXQgbWV0aG9kIG11c3QgbWF0Y2ggYmV0d2VlbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uCmFuZCB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4OiB1MTYpOwogICAgZm4gYmFyKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIGV4cGVjdGVkIHUxNiwgZm91bmQgaTE2CiAgICBmbiBmb28oeDogaTE2KSB7IH0KCiAgICAvLyBlcnJvciwgdHlwZXMgZGlmZmVyIGluIG11dGFiaWxpdHkKICAgIGZuIGJhcigmbXV0IHNlbGYpIHsgfQp9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0AgAAAPQC8wg4AJ0MJgEAAGgAAgYAaQEABADEAw4AAANnAAQAxAMOAAAAZwIFAQLZAQEBAPMIAAFoAAQAxAMOAAACZwABBACvAyQAAANmAAQArwMkAAAAZgEBAPMIAAI3ALADEgAAAgIFRTAwNTMAAR8FAAAABfMIBACvAyQAAABmAQEB9wgAAWcAOgDMDCYBAABtAAACOgDMDCYBAAICsgJJdCBpcyBub3QgYWxsb3dlZCB0byBjYXN0IHRvIGEgYm9vbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTQKbGV0IHggPSA1OwoKLy8gTm90IGFsbG93ZWQsIHdvbid0IGNvbXBpbGUKbGV0IHhfaXNfbm9uemVybyA9IHggYXMgYm9vbDsKYGBgCgpJZiB5b3UgYXJlIHRyeWluZyB0byBjYXN0IGEgbnVtZXJpYyB0eXBlIHRvIGEgYm9vbCwgeW91IGNhbiBjb21wYXJlIGl0IHdpdGgKemVybyBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gNTsKCi8vIE9rCmxldCB4X2lzX25vbnplcm8gPSB4ICE9IDA7CmBgYAoABf///////////wH///////////8B////////////Af///////////wH/////////AbICAAAAsgLzCDoAzAwmAQAAbAACBgBtAQAEAMQDDgAAA2sABADEAw4AAABrAgUBAtkBAQEA8wgAAWwABADEAw4AAAJrAAEEAK8DJAAAA2oABACvAyQAAABqAQEA8wgAAjkAsAMSAAACAgVFMDA1NAABHwUAAAAF8wgEAK8DJAAAAGoBAQH3CAABawA8APsMJgEAAHEAAAI8APsMJgEAAgKPBkR1cmluZyBhIG1ldGhvZCBjYWxsLCBhIHZhbHVlIGlzIGF1dG9tYXRpY2FsbHkgZGVyZWZlcmVuY2VkIGFzIG1hbnkgdGltZXMgYXMKbmVlZGVkIHRvIG1ha2UgdGhlIHZhbHVlJ3MgdHlwZSBtYXRjaCB0aGUgbWV0aG9kJ3MgcmVjZWl2ZXIuIFRoZSBjYXRjaCBpcyB0aGF0CnRoZSBjb21waWxlciB3aWxsIG9ubHkgYXR0ZW1wdCB0byBkZXJlZmVyZW5jZSBhIG51bWJlciBvZiB0aW1lcyB1cCB0byB0aGUKcmVjdXJzaW9uIGxpbWl0ICh3aGljaCBjYW4gYmUgc2V0IHZpYSB0aGUgYHJlY3Vyc2lvbl9saW1pdGAgYXR0cmlidXRlKS4KCkZvciBhIHNvbWV3aGF0IGFydGlmaWNpYWwgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NQojIVtyZWN1cnNpb25fbGltaXQ9IjQiXQoKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb28gPSBGb287CiAgICBsZXQgcmVmX2ZvbyA9ICYmJiYmRm9vOwoKICAgIC8vIGVycm9yLCByZWFjaGVkIHRoZSByZWN1cnNpb24gbGltaXQgd2hpbGUgYXV0by1kZXJlZmVyZW5jaW5nIGAmJiYmJkZvb2AKICAgIHJlZl9mb28uZm9vKCk7Cn0KYGBgCgpPbmUgZml4IG1heSBiZSB0byBpbmNyZWFzZSB0aGUgcmVjdXJzaW9uIGxpbWl0LiBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgdG8KY3JlYXRlIGFuIGluZmluaXRlIHJlY3Vyc2lvbiBvZiBkZXJlZmVyZW5jaW5nLCBpbiB3aGljaCBjYXNlIHRoZSBvbmx5IGZpeCBpcyB0bwpzb21laG93IGJyZWFrIHRoZSByZWN1cnNpb24uCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BjwYAAACPBvMIPAD7DCYBAABwAAIGAHEBAAQAxAMOAAADbwAEAMQDDgAAAG8CBQEC2QEBAQDzCAABcAAEAMQDDgAAAm8AAQQArwMkAAADbgAEAK8DJAAAAG4BAQDzCAACOwCwAxIAAAICBUUwMDU1AAEfBQAAAAXzCAQArwMkAAAAbgEBAfcIAAFvAD4Aqg0mAQAAdQAAAj4Aqg0mAQACAtkEQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBnaXZlbiB3aGVuIGNhbGxpbmcgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NwpsZXQgZiA9IHx4fCB4ICogMzsKbGV0IGEgPSBmKCk7ICAgICAgICAvLyBpbnZhbGlkLCB0b28gZmV3IHBhcmFtZXRlcnMKbGV0IGIgPSBmKDQpOyAgICAgICAvLyB0aGlzIHdvcmtzIQpsZXQgYyA9IGYoMiwgMyk7ICAgIC8vIGludmFsaWQsIHRvbyBtYW55IHBhcmFtZXRlcnMKYGBgCgpXaGVuIGludm9raW5nIGNsb3N1cmVzIG9yIG90aGVyIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgZnVuY3Rpb24gdHJhaXRzIGBGbmAsCmBGbk11dGAgb3IgYEZuT25jZWAgdXNpbmcgY2FsbCBub3RhdGlvbiwgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzIHBhc3NlZCB0byB0aGUKZnVuY3Rpb24gbXVzdCBtYXRjaCBpdHMgZGVmaW5pdGlvbi4KCkEgZ2VuZXJpYyBmdW5jdGlvbiBtdXN0IGJlIHRyZWF0ZWQgc2ltaWxhcmx5OgoKYGBgCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7CiAgICBmKCk7IC8vIHRoaXMgaXMgdmFsaWQsIGJ1dCBmKDMpIHdvdWxkIG5vdCB3b3JrCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////D9kEAAAA2QTzCD4Aqg0mAQAAdAACBgB1AQAEAMQDDgAAA3MABADEAw4AAABzAgUBAtkBAQEA8wgAAXQABADEAw4AAAJzAAEEAK8DJAAAA3IABACvAyQAAAByAQEA8wgAAj0AsAMSAAACAgVFMDA1NwABHwUAAAAF8wgEAK8DJAAAAHIBAQH3CAABcwBAANkNJgEAAHkAAAJAANkNJgEAAgLwBlRoZSBidWlsdC1pbiBmdW5jdGlvbiB0cmFpdHMgYXJlIGdlbmVyaWMgb3ZlciBhIHR1cGxlIG9mIHRoZSBmdW5jdGlvbiBhcmd1bWVudHMuCklmIG9uZSB1c2VzIGFuZ2xlLWJyYWNrZXQgbm90YXRpb24gKGBGbjwoVCwpLCBPdXRwdXQ9VT5gKSBpbnN0ZWFkIG9mIHBhcmVudGhlc2VzCihgRm4oVCkgLT4gVWApIHRvIGRlbm90ZSB0aGUgZnVuY3Rpb24gdHJhaXQsIHRoZSB0eXBlIHBhcmFtZXRlciBzaG91bGQgYmUgYQp0dXBsZS4gT3RoZXJ3aXNlIGZ1bmN0aW9uIGNhbGwgbm90YXRpb24gY2Fubm90IGJlIHVzZWQgYW5kIHRoZSB0cmFpdCB3aWxsIG5vdCBiZQppbXBsZW1lbnRlZCBieSBjbG9zdXJlcy4KClRoZSBtb3N0IGxpa2VseSBzb3VyY2Ugb2YgdGhpcyBlcnJvciBpcyB1c2luZyBhbmdsZS1icmFja2V0IG5vdGF0aW9uIHdpdGhvdXQKd3JhcHBpbmcgdGhlIGZ1bmN0aW9uIGFyZ3VtZW50IHR5cGUgaW50byBhIHR1cGxlLCBmb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1OQojIVtmZWF0dXJlKHVuYm94ZWRfY2xvc3VyZXMpXQoKZm4gZm9vPEY6IEZuPGkzMj4+KGY6IEYpIC0+IEY6Ok91dHB1dCB7IGYoMykgfQpgYGAKCkl0IGNhbiBiZSBmaXhlZCBieSBhZGp1c3RpbmcgdGhlIHRyYWl0IGJvdW5kIGxpa2UgdGhpczoKCmBgYAojIVtmZWF0dXJlKHVuYm94ZWRfY2xvc3VyZXMpXQoKZm4gZm9vPEY6IEZuPChpMzIsKT4+KGY6IEYpIC0+IEY6Ok91dHB1dCB7IGYoMykgfQpgYGAKCk5vdGUgdGhhdCBgKFQsKWAgYWx3YXlzIGRlbm90ZXMgdGhlIHR5cGUgb2YgYSAxLXR1cGxlIGNvbnRhaW5pbmcgYW4gZWxlbWVudCBvZgp0eXBlIGBUYC4gVGhlIGNvbW1hIGlzIG5lY2Vzc2FyeSBmb3Igc3ludGFjdGljIGRpc2FtYmlndWF0aW9uLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AYAAADwBvMIQADZDSYBAAB4AAIGAHkBAAQAxAMOAAADdwAEAMQDDgAAAHcCBQEC2QEBAQDzCAABeAAEAMQDDgAAAncAAQQArwMkAAADdgAEAK8DJAAAAHYBAQDzCAACPwCwAxIAAAICBUUwMDU5AAEfBQAAAAXzCAQArwMkAAAAdgEBAfcIAAF3AEIAiA4mAQAAfQAAAkIAiA4mAQACAo4IRXh0ZXJuYWwgQyBmdW5jdGlvbnMgYXJlIGFsbG93ZWQgdG8gYmUgdmFyaWFkaWMuIEhvd2V2ZXIsIGEgdmFyaWFkaWMgZnVuY3Rpb24KdGFrZXMgYSBtaW5pbXVtIG51bWJlciBvZiBhcmd1bWVudHMuIEZvciBleGFtcGxlLCBjb25zaWRlciBDJ3MgdmFyaWFkaWMgYHByaW50ZmAKZnVuY3Rpb246CgpgYGBjb21waWxlX2ZhaWwsRTAwNjAKdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwoKZXh0ZXJuICJDIiB7CiAgICBmbiBwcmludGYoXzogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKfQoKdW5zYWZlIHsgcHJpbnRmKCk7IH0gLy8gZXJyb3IhCmBgYAoKVXNpbmcgdGhpcyBkZWNsYXJhdGlvbiwgaXQgbXVzdCBiZSBjYWxsZWQgd2l0aCBhdCBsZWFzdCBvbmUgYXJndW1lbnQsIHNvCnNpbXBseSBjYWxsaW5nIGBwcmludGYoKWAgaXMgaW52YWxpZC4gQnV0IHRoZSBmb2xsb3dpbmcgdXNlcyBhcmUgYWxsb3dlZDoKCmBgYAojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKIyAjW2NmZ19hdHRyKGFsbCh3aW5kb3dzLCB0YXJnZXRfZW52ID0gIm1zdmMiKSwKIyAgICAgICAgICAgIGxpbmsobmFtZSA9ICJsZWdhY3lfc3RkaW9fZGVmaW5pdGlvbnMiLAojICAgICAgICAgICAgICAgICBraW5kID0gInN0YXRpYyIsIG1vZGlmaWVycyA9ICItYnVuZGxlIikpXQojIGV4dGVybiAiQyIgeyBmbiBwcmludGYoXzogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsgfQojIGZuIG1haW4oKSB7CnVuc2FmZSB7CiAgICB1c2Ugc3RkOjpmZmk6OkNTdHJpbmc7CgogICAgbGV0IGZtdCA9IENTdHJpbmc6Om5ldygidGVzdFxuIikudW53cmFwKCk7CiAgICBwcmludGYoZm10LmFzX3B0cigpKTsKCiAgICBsZXQgZm10ID0gQ1N0cmluZzo6bmV3KCJudW1iZXIgPSAlZFxuIikudW53cmFwKCk7CiAgICBwcmludGYoZm10LmFzX3B0cigpLCAzKTsKCiAgICBsZXQgZm10ID0gQ1N0cmluZzo6bmV3KCIlZCwgJWRcbiIpLnVud3JhcCgpOwogICAgcHJpbnRmKGZtdC5hc19wdHIoKSwgMTAsIDUpOwp9CiMgfQpgYGAKABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/3+OCAAAAI4I8whCAIgOJgEAAHwAAgYAfQEABADEAw4AAAN7AAQAxAMOAAAAewIFAQLZAQEBAPMIAAF8AAQAxAMOAAACewABBACvAyQAAAN6AAQArwMkAAAAegEBAPMIAAJBALADEgAAAgIFRTAwNjAAAR8FAAAABfMIBACvAyQAAAB6AQEB9wgAAXsARAC3DiYBAACBAQAAAkQAtw4mAQACAosEQW4gaW52YWxpZCBudW1iZXIgb2YgYXJndW1lbnRzIHdhcyBwYXNzZWQgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYxCmZuIGYodTogaTMyKSB7fQoKZigpOyAvLyBlcnJvciEKYGBgCgpUaGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBwYXNzZWQgdG8gYSBmdW5jdGlvbiBtdXN0IG1hdGNoIHRoZSBudW1iZXIgb2YgYXJndW1lbnRzCnNwZWNpZmllZCBpbiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLgoKRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gbGlrZToKCmBgYApmbiBmKGE6IHUxNiwgYjogJnN0cikge30KYGBgCgpNdXN0IGFsd2F5cyBiZSBjYWxsZWQgd2l0aCBleGFjdGx5IHR3byBhcmd1bWVudHMsIGUuZy4sIGBmKDIsICJ0ZXN0IilgLgoKTm90ZSB0aGF0IFJ1c3QgZG9lcyBub3QgaGF2ZSBhIG5vdGlvbiBvZiBvcHRpb25hbCBmdW5jdGlvbiBhcmd1bWVudHMgb3IKdmFyaWFkaWMgZnVuY3Rpb25zIChleGNlcHQgZm9yIGl0cyBDLUZGSSkuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D4sEAAAAiwTzCEQAtw4mAQAAgAEAAgYAgQEBAAQAxAMOAAADfwAEAMQDDgAAAH8CBQEC2QEBAQDzCAABgAEABADEAw4AAAJ/AAEEAK8DJAAAA34ABACvAyQAAAB+AQEA8wgAAkMAsAMSAAACAgVFMDA2MQABHwUAAAAF8wgEAK8DJAAAAH4BAQH3CAABfwBGAOYOJgEAAIUBAAACRgDmDiYBAAICvwRBIHN0cnVjdCdzIG9yIHN0cnVjdC1saWtlIGVudW0gdmFyaWFudCdzIGZpZWxkIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYyCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28gewogICAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICAgIHg6IDAsIC8vIGVycm9yOiBmaWVsZCBgeGAgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlCiAgICAgICAgICAgIH07Cn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGR1cmluZyBhbiBhdHRlbXB0IHRvIGJ1aWxkIGEgc3RydWN0IG9yIHN0cnVjdC1saWtlCmVudW0gdmFyaWFudCwgb25lIG9mIHRoZSBmaWVsZHMgd2FzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4gRWFjaCBmaWVsZCBzaG91bGQKYmUgc3BlY2lmaWVkIGV4YWN0bHkgb25lIHRpbWUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAgfTsgLy8gb2shCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////3+/BAAAAL8E8whGAOYOJgEAAIQBAAIGAIUBAQAEAMQDDgAAA4MBAAQAxAMOAAAAgwECBQEC2QEBAQDzCAABhAEABADEAw4AAAKDAQABBACvAyQAAAOCAQAEAK8DJAAAAIIBAQEA8wgAAkUAsAMSAAACAgVFMDA2MgABHwUAAAAF8wgEAK8DJAAAAIIBAQEB9wgAAYMBAEgAlQ8mAQAAiQEAAAJIAJUPJgEAAgL/AkEgc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIG5vdCBwcm92aWRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjMKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAgfTsgLy8gZXJyb3I6IG1pc3NpbmcgZmllbGQ6IGB5YAp9CmBgYAoKRWFjaCBmaWVsZCBzaG91bGQgYmUgc3BlY2lmaWVkIGV4YWN0bHkgb25jZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCwgeTogMCB9OyAvLyBvayEKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////f/8CAAAA/wLzCEgAlQ8mAQAAiAEAAgYAiQEBAAQAxAMOAAADhwEABADEAw4AAACHAQIFAQLZAQEBAPMIAAGIAQAEAMQDDgAAAocBAAEEAK8DJAAAA4YBAAQArwMkAAAAhgEBAQDzCAACRwCwAxIAAAICBUUwMDYzAAEfBQAAAAXzCAQArwMkAAAAhgEBAQH3CAABhwEASgDEDyYBAACNAQAAAkoAxA8mAQACApICQW4gaW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBleHByZXNzaW9uIHdhcyB1c2VkIG9uIGFuIGFzc2lnbm1lbnQgb3BlcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2NwoxMiArPSAxOyAvLyBlcnJvciEKYGBgCgpZb3UgbmVlZCB0byBoYXZlIGEgcGxhY2UgZXhwcmVzc2lvbiB0byBiZSBhYmxlIHRvIGFzc2lnbiBpdCBzb21ldGhpbmcuIEZvcgpleGFtcGxlOgoKYGBgCmxldCBtdXQgeDogaTggPSAxMjsKeCArPSAxOyAvLyBvayEKYGBgCgAF////////////Af///////////wH///////////8B////////////Af//D5ICAAAAkgLzCEoAxA8mAQAAjAEAAgYAjQEBAAQAxAMOAAADiwEABADEAw4AAACLAQIFAQLZAQEBAPMIAAGMAQAEAMQDDgAAAosBAAEEAK8DJAAAA4oBAAQArwMkAAAAigEBAQDzCAACSQCwAxIAAAICBUUwMDY3AAEfBQAAAAXzCAQArwMkAAAAigEBAQH3CAABiwEATADzDyYBAACRAQAAAkwA8w8mAQACAsgCVGhlIGNvbXBpbGVyIGZvdW5kIGEgZnVuY3Rpb24gd2hvc2UgYm9keSBjb250YWlucyBhIGByZXR1cm47YCBzdGF0ZW1lbnQgYnV0Cndob3NlIHJldHVybiB0eXBlIGlzIG5vdCBgKClgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2OQovLyBlcnJvcgpmbiBmb28oKSAtPiB1OCB7CiAgICByZXR1cm47Cn0KYGBgCgpTaW5jZSBgcmV0dXJuO2AgaXMganVzdCBsaWtlIGByZXR1cm4gKCk7YCwgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQpmdW5jdGlvbidzIHJldHVybiB0eXBlIGFuZCB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQuCgAG////////////Af///////////wH///////////8B////////////Af///////////wH/AcgCAAAAyALzCEwA8w8mAQAAkAEAAgYAkQEBAAQAxAMOAAADjwEABADEAw4AAACPAQIFAQLZAQEBAPMIAAGQAQAEAMQDDgAAAo8BAAEEAK8DJAAAA44BAAQArwMkAAAAjgEBAQDzCAACSwCwAxIAAAICBUUwMDY5AAEfBQAAAAXzCAQArwMkAAAAjgEBAQH3CAABjwEATgCiECYBAACVAQAAAk4AohAmAQACAqEJQW4gYXNzaWdubWVudCBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIG5vbi1wbGFjZSBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgeDogaTMyLAogICAgeTogaTMyLAp9Cgpjb25zdCBTT01FX0NPTlNUOiBpMzIgPSAxMjsKCmZuIHNvbWVfb3RoZXJfZnVuYygpIHt9CgpmbiBzb21lX2Z1bmN0aW9uKCkgewogICAgU09NRV9DT05TVCA9IDE0OyAvLyBlcnJvcjogYSBjb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCEKICAgIDEgPSAzOyAvLyBlcnJvcjogMSBpc24ndCBhIHZhbGlkIHBsYWNlIQogICAgc29tZV9vdGhlcl9mdW5jKCkgPSA0OyAvLyBlcnJvcjogd2UgY2Fubm90IGFzc2lnbiB2YWx1ZSB0byBhIGZ1bmN0aW9uIQogICAgU29tZVN0cnVjdDo6eCA9IDEyOyAvLyBlcnJvcjogU29tZVN0cnVjdCBhIHN0cnVjdHVyZSBuYW1lIGJ1dCBpdCBpcyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWtlIGEgdmFyaWFibGUhCn0KYGBgCgpUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvciBtdXN0IGJlIGEgcGxhY2UgZXhwcmVzc2lvbi4gQQpwbGFjZSBleHByZXNzaW9uIHJlcHJlc2VudHMgYSBtZW1vcnkgbG9jYXRpb24gYW5kIGNhbiBiZSBhIHZhcmlhYmxlICh3aXRoCm9wdGlvbmFsIG5hbWVzcGFjaW5nKSwgYSBkZXJlZmVyZW5jZSwgYW4gaW5kZXhpbmcgZXhwcmVzc2lvbiBvciBhIGZpZWxkCnJlZmVyZW5jZS4KCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFtFeHByZXNzaW9uc10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW0V4cHJlc3Npb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwbGFjZXMtcnZhbHVlcy1hbmQtdGVtcG9yYXJpZXMKCkFuZCBub3cgbGV0J3MgZ2l2ZSB3b3JraW5nIGV4YW1wbGVzOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQpsZXQgbXV0IHMgPSBTb21lU3RydWN0IHsgeDogMCwgeTogMCB9OwoKcy54ID0gMzsgLy8gdGhhdCdzIGdvb2QgIQoKLy8gLi4uCgpmbiBzb21lX2Z1bmMoeDogJm11dCBpMzIpIHsKICAgICp4ID0gMTI7IC8vIHRoYXQncyBnb29kICEKfQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H6EJAAAAoQnzCE4AohAmAQAAlAEAAgYAlQEBAAQAxAMOAAADkwEABADEAw4AAACTAQIFAQLZAQEBAPMIAAGUAQAEAMQDDgAAApMBAAEEAK8DJAAAA5IBAAQArwMkAAAAkgEBAQDzCAACTQCwAxIAAAICBUUwMDcwAAEfBQAAAAXzCAQArwMkAAAAkgEBAQH3CAABkwEAUADRECYBAACZAQAAAlAA0RAmAQACAq4EQSBzdHJ1Y3R1cmUtbGl0ZXJhbCBzeW50YXggd2FzIHVzZWQgdG8gY3JlYXRlIGFuIGl0ZW0gdGhhdCBpcyBub3QgYSBzdHJ1Y3R1cmUKb3IgZW51bSB2YXJpYW50LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA3MQp0eXBlIFUzMiA9IHUzMjsKbGV0IHQgPSBVMzIgeyB2YWx1ZTogNCB9OyAvLyBlcnJvcjogZXhwZWN0ZWQgc3RydWN0LCB2YXJpYW50IG9yIHVuaW9uIHR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gZm91bmQgYnVpbHRpbiB0eXBlIGB1MzJgCmBgYAoKVG8gZml4IHRoaXMsIGVuc3VyZSB0aGF0IHRoZSBuYW1lIHdhcyBjb3JyZWN0bHkgc3BlbGxlZCwgYW5kIHRoYXQgdGhlIGNvcnJlY3QKZm9ybSBvZiBpbml0aWFsaXplciB3YXMgdXNlZC4KCkZvciBleGFtcGxlLCB0aGUgY29kZSBhYm92ZSBjYW4gYmUgZml4ZWQgdG86CgpgYGAKdHlwZSBVMzIgPSB1MzI7CmxldCB0OiBVMzIgPSA0OwpgYGAKCm9yOgoKYGBgCnN0cnVjdCBVMzIgeyB2YWx1ZTogdTMyIH0KbGV0IHQgPSBVMzIgeyB2YWx1ZTogNCB9OwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w+uBAAAAK4E8whQANEQJgEAAJgBAAIGAJkBAQAEAMQDDgAAA5cBAAQAxAMOAAAAlwECBQEC2QEBAQDzCAABmAEABADEAw4AAAKXAQABBACvAyQAAAOWAQAEAK8DJAAAAJYBAQEA8wgAAk8AsAMSAAACAgVFMDA3MQABHwUAAAAF8wgEAK8DJAAAAJYBAQEB9wgAAZcBAFIAgBEmAQAAnQEAAAJSAIARJgEAAgLyCEEgcmVjdXJzaXZlIHR5cGUgaGFzIGluZmluaXRlIHNpemUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4gaW5kaXJlY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcyCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxMaXN0Tm9kZT4sIC8vIGVycm9yOiBubyBpbmRpcmVjdGlvbiBoZXJlIHNvIGltcG9zc2libGUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb21wdXRlIHRoZSB0eXBlJ3Mgc2l6ZQp9CmBgYAoKV2hlbiBkZWZpbmluZyBhIHJlY3Vyc2l2ZSBzdHJ1Y3Qgb3IgZW51bSwgYW55IHVzZSBvZiB0aGUgdHlwZSBiZWluZyBkZWZpbmVkCmZyb20gaW5zaWRlIHRoZSBkZWZpbml0aW9uIG11c3Qgb2NjdXIgYmVoaW5kIGEgcG9pbnRlciAobGlrZSBgQm94YCwgYCZgIG9yCmBSY2ApLiBUaGlzIGlzIGJlY2F1c2Ugc3RydWN0cyBhbmQgZW51bXMgbXVzdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGFuZAp3aXRob3V0IHRoZSBwb2ludGVyLCB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB3b3VsZCBuZWVkIHRvIGJlIHVuYm91bmRlZC4KCkluIHRoZSBleGFtcGxlLCB0aGUgdHlwZSBjYW5ub3QgaGF2ZSBhIHdlbGwtZGVmaW5lZCBzaXplLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlCmFyYml0cmFyaWx5IGxhcmdlIChzaW5jZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIG5lc3QgYExpc3ROb2RlYHMgdG8gYW55IGRlcHRoKS4KU3BlY2lmaWNhbGx5LAoKYGBgcGxhaW4Kc2l6ZSBvZiBgTGlzdE5vZGVgID0gMSBieXRlIGZvciBgaGVhZGAKICAgICAgICAgICAgICAgICAgICsgMSBieXRlIGZvciB0aGUgZGlzY3JpbWluYW50IG9mIHRoZSBgT3B0aW9uYAogICAgICAgICAgICAgICAgICAgKyBzaXplIG9mIGBMaXN0Tm9kZWAKYGBgCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIGJ5IHdyYXBwaW5nIGBMaXN0Tm9kZWAgaW4gYSBgQm94YCwgbGlrZSBzbzoKCmBgYApzdHJ1Y3QgTGlzdE5vZGUgewogICAgaGVhZDogdTgsCiAgICB0YWlsOiBPcHRpb248Qm94PExpc3ROb2RlPj4sCn0KYGBgCgpUaGlzIHdvcmtzIGJlY2F1c2UgYEJveGAgaXMgYSBwb2ludGVyLCBzbyBpdHMgc2l6ZSBpcyB3ZWxsLWtub3duLgoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wHyCAAAAPII8whSAIARJgEAAJwBAAIGAJ0BAQAEAMQDDgAAA5sBAAQAxAMOAAAAmwECBQEC2QEBAQDzCAABnAEABADEAw4AAAKbAQABBACvAyQAAAOaAQAEAK8DJAAAAJoBAQEA8wgAAlEAsAMSAAACAgVFMDA3MgABHwUAAAAF8wgEAK8DJAAAAJoBAQEB9wgAAZsBAFQArxEmAQAAoQEAAAJUAK8RJgEAAgKnBCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW5ub3QgZGVmaW5lIGEgc3RydWN0IChvciBlbnVtKSBgRm9vYCB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIGBGb29gCmluIG9yZGVyIHRvIG1ha2UgYSBuZXcgYEZvb2AgdmFsdWUuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB3YXkgYQpmaXJzdCBpbnN0YW5jZSBvZiBgRm9vYCBjb3VsZCBiZSBtYWRlIHRvIGluaXRpYWxpemUgYW5vdGhlciBpbnN0YW5jZSEKCkhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0IHRoYXQgaGFzIHRoaXMgcHJvYmxlbToKCmBgYApzdHJ1Y3QgRm9vIHsgeDogQm94PEZvbz4gfSAvLyBlcnJvcgpgYGAKCk9uZSBmaXggaXMgdG8gdXNlIGBPcHRpb25gLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBGb28geyB4OiBPcHRpb248Qm94PEZvbz4+IH0KYGBgCgpOb3cgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIGBGb29gOiBgRm9vIHsgeDogTm9uZSB9YC4KAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cEAAAApwTzCFQArxEmAQAAoAEAAgYAoQEBAAQAxAMOAAADnwEABADEAw4AAACfAQIFAQLZAQEBAPMIAAGgAQAEAMQDDgAAAp8BAAEEAK8DJAAAA54BAAQArwMkAAAAngEBAQDzCAACUwCwAxIAAAICBUUwMDczAAEfBQAAAAXzCAQArwMkAAAAngEBAQH3CAABnwEAVgDeESYBAAClAQAAAlYA3hEmAQACAvcDIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKV2hlbiB1c2luZyB0aGUgYCNbc2ltZF1gIGF0dHJpYnV0ZSBvbiBhIHR1cGxlIHN0cnVjdCwgdGhlIGNvbXBvbmVudHMgb2YgdGhlCnR1cGxlIHN0cnVjdCBtdXN0IGFsbCBiZSBvZiBhIGNvbmNyZXRlLCBub25nZW5lcmljIHR5cGUgc28gdGhlIGNvbXBpbGVyIGNhbgpyZWFzb24gYWJvdXQgaG93IHRvIHVzZSBTSU1EIHdpdGggdGhlbS4gVGhpcyBlcnJvciB3aWxsIG9jY3VyIGlmIHRoZSB0eXBlcwphcmUgZ2VuZXJpYy4KClRoaXMgd2lsbCBjYXVzZSBhbiBlcnJvcjoKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBCYWQ8VD4oVCwgVCwgVCwgVCk7CmBgYAoKVGhpcyB3aWxsIG5vdDoKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBHb29kKHUzMiwgdTMyLCB1MzIsIHUzMik7CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////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ZXZhbHVhdGVkIGFzIHRoZSBkZXNpcmVkIGludGVnZXIgdHlwZS4KClNlZSB0aGUgW0N1c3RvbSBEaXNjcmltaW5hbnRzXVtjdXN0b20tZGlzY3JpbWluYW50c10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlCmZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNldHRpbmcgY3VzdG9tIGludGVnZXIgdHlwZXMgb24gZmllbGRsZXNzIGVudW1zCnVzaW5nIHRoZSBbYHJlcHJgIGF0dHJpYnV0ZV1bcmVwci1hdHRyaWJ1dGVdLgoKW2N1c3RvbS1kaXNjcmltaW5hbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvZW51bWVyYXRpb25zLmh0bWwjY3VzdG9tLWRpc2NyaW1pbmFudC12YWx1ZXMtZm9yLWZpZWxkLWxlc3MtZW51bWVyYXRpb25zCltyZXByLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGUtbGF5b3V0Lmh0bWwjcmVwcmMtZW51bXMKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBgAAAN0G8wheAJoTJgEAALQBAAIGALUBAQAEAMQDDgAAA7MBAAQAxAMOAAAAswECBQEC2QEBAQDzCAABtAEABADEAw4AAAKzAQABBACvAyQAAAOyAQAEAK8DJAAAALIBAQEA8wgAAl0AsAMSAAACAgVFMDA4MAABHwUAAAAF8wgEAK8DJAAAALIBAQEB9wgAAbMBAGAAyRMmAQAAuQEAAAJgAMkTJgEAAgL7BUEgZGlzY3JpbWluYW50IHZhbHVlIGlzIHByZXNlbnQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDgxCmVudW0gRW51bSB7CiAgICBQID0gMywKICAgIFggPSAzLCAvLyBlcnJvciEKICAgIFkgPSA1LAp9CmBgYAoKRW51bSBkaXNjcmltaW5hbnRzIGFyZSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgZW51bSB2YXJpYW50cyBzdG9yZWQgaW4gbWVtb3J5LgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzYW1lIHZhbHVlIHdhcyB1c2VkIGZvciB0d28gb3IgbW9yZSB2YXJpYW50cywKbWFraW5nIGl0IGltcG9zc2libGUgdG8gZGlzdGluZ3Vpc2ggdGhlbS4KCmBgYAplbnVtIEVudW0gewogICAgUCwKICAgIFggPSAzLCAvLyBvayEKICAgIFkgPSA1LAp9CmBgYAoKTm90ZSB0aGF0IHZhcmlhbnRzIHdpdGhvdXQgYSBtYW51YWxseSBzcGVjaWZpZWQgZGlzY3JpbWluYW50IGFyZSBudW1iZXJlZCBmcm9tCnRvcCB0byBib3R0b20gc3RhcnRpbmcgZnJvbSAwLCBzbyBjbGFzaGVzIGNhbiBvY2N1ciB3aXRoIHNlZW1pbmdseSB1bnJlbGF0ZWQKdmFyaWFudHMuCgpgYGBjb21waWxlX2ZhaWwsRTAwODEKZW51bSBCYWQgewogICAgWCwKICAgIFkgPSAwLCAvLyBlcnJvciEKfQpgYGAKCkhlcmUgYFhgIHdpbGwgaGF2ZSBhbHJlYWR5IGJlZW4gc3BlY2lmaWVkIHRoZSBkaXNjcmltaW5hbnQgMCBieSB0aGUgdGltZSBgWWAgaXMKZW5jb3VudGVyZWQsIHNvIGEgY29uZmxpY3Qgb2NjdXJzLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wUAAAD7BfMIYADJEyYBAAC4AQACBgC5AQEABADEAw4AAAO3AQAEAMQDDgAAALcBAgUBAtkBAQEA8wgAAbgBAAQAxAMOAAACtwEAAQQArwMkAAADtgEABACvAyQAAAC2AQEBAPMIAAJfALADEgAAAgIFRTAwODEAAR8FAAAABfMIBACvAyQAAAC2AQEBAfcIAAG3AQBiAPgTJgEAAL0BAAACYgD4EyYBAAICkgVBbiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgemVyby12YXJpYW50IGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDg0CiNbcmVwcihpMzIpXQplbnVtIE5pZ2h0c1dhdGNoIHt9IC8vIGVycm9yOiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiBmb3IgemVyby12YXJpYW50IGVudW0KYGBgCgpJdCBpcyBpbXBvc3NpYmxlIHRvIGRlZmluZSBhbiBpbnRlZ2VyIHR5cGUgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgemVyby12YXJpYW50CmVudW0gdmFsdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHplcm8tdmFyaWFudCBlbnVtIHZhbHVlcy4gVGhlcmUgaXMgbm8gd2F5IHRvCmNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUgdXNpbmcgb25seSBzYWZlIGNvZGUuIFNvIHlvdSBoYXZlCnR3byBzb2x1dGlvbnMuIEVpdGhlciB5b3UgYWRkIHZhcmlhbnRzIGluIHlvdXIgZW51bToKCmBgYAojW3JlcHIoaTMyKV0KZW51bSBOaWdodHNXYXRjaCB7CiAgICBKb25Tbm93LAogICAgQ29tbWFuZGVyLAp9CmBgYAoKb3IgeW91IHJlbW92ZSB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGVudW06CgpgYGAKZW51bSBOaWdodHNXYXRjaCB7fQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgUAAACSBfMIYgD4EyYBAAC8AQACBgC9AQEABADEAw4AAAO7AQAEAMQDDgAAALsBAgUBAtkBAQEA8wgAAbwBAAQAxAMOAAACuwEAAQQArwMkAAADugEABACvAyQAAAC6AQEBAPMIAAJhALADEgAAAgIFRTAwODQAAR8FAAAABfMIBACvAyQAAAC6AQEBAfcIAAG7AQBkAKcUJgEAAMEBAAACZACnFCYBAAICkgMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUb28gbWFueSB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VD4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2NCwgYm9vbD4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKfQpgYGAKClRoZSBudW1iZXIgb2Ygc3VwcGxpZWQgYXJndW1lbnRzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgbnVtYmVyIG9mIGRlZmluZWQgdHlwZQpwYXJhbWV0ZXJzLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//D5IDAAAAkgPzCGQApxQmAQAAwAEAAgYAwQEBAAQAxAMOAAADvwEABADEAw4AAAC/AQIFAQLZAQEBAPMIAAHAAQAEAMQDDgAAAr8BAAEEAK8DJAAAA74BAAQArwMkAAAAvgEBAQDzCAACYwCwAxIAAAICBUUwMDg3AAEfBQAAAAXzCAQArwMkAAAAvgEBAQH3CAABvwEAZgDWFCYBAADFAQAAAmYA1hQmAQACApYHIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGdhdmUgdG9vIG1hbnkgbGlmZXRpbWUgYXJndW1lbnRzLiBFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGY6Ojwnc3RhdGljPigpIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDAsIGZvdW5kIDEKfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZ2l2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYApmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBmKCkgLy8gb2shCn0KYGBgCgpJdCdzIGFsc28gaW1wb3J0YW50IHRvIG5vdGUgdGhhdCB0aGUgUnVzdCBjb21waWxlciBjYW4gZ2VuZXJhbGx5CmRldGVybWluZSB0aGUgbGlmZXRpbWUgYnkgaXRzZWxmLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgdmFsdWU6IFN0cmluZwp9CgppbXBsIEZvbyB7CiAgICAvLyBpdCBjYW4gYmUgd3JpdHRlbiBsaWtlIHRoaXMKICAgIGZuIGdldF92YWx1ZTwnYT4oJidhIHNlbGYpIC0+ICYnYSBzdHIgeyAmc2VsZi52YWx1ZSB9CiAgICAvLyBidXQgdGhlIGNvbXBpbGVyIHdvcmtzIGZpbmUgd2l0aCB0aGlzIHRvbzoKICAgIGZuIHdpdGhvdXRfbGlmZXRpbWUoJnNlbGYpIC0+ICZzdHIgeyAmc2VsZi52YWx1ZSB9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IEZvbyB7IHZhbHVlOiAiaGVsbG8iLnRvX293bmVkKCkgfTsKCiAgICBwcmludGxuISgie30iLCBmLmdldF92YWx1ZSgpKTsKICAgIHByaW50bG4hKCJ7fSIsIGYud2l0aG91dF9saWZldGltZSgpKTsKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWBwAAAJYH8whmANYUJgEAAMQBAAIGAMUBAQAEAMQDDgAAA8MBAAQAxAMOAAAAwwECBQEC2QEBAQDzCAABxAEABADEAw4AAALDAQABBACvAyQAAAPCAQAEAK8DJAAAAMIBAQEA8wgAAmUAsAMSAAACAgVFMDA4OAABHwUAAAAF8wgEAK8DJAAAAMIBAQEB9wgAAcMBAGgAhRUmAQAAyQEAAAJoAIUVJgEAAgKaBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRvbyBmZXcgdHlwZSBhcmd1bWVudHMgd2VyZSBzdXBwbGllZCBmb3IgYSBmdW5jdGlvbi4gRm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKZm4gZm9vPFQsIFU+KCkge30KCmZuIG1haW4oKSB7CiAgICBmb286OjxmNjQ+KCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6IGV4cGVjdGVkIDIsIGZvdW5kIDEKfQpgYGAKCk5vdGUgdGhhdCBpZiBhIGZ1bmN0aW9uIHRha2VzIG11bHRpcGxlIHR5cGUgYXJndW1lbnRzIGJ1dCB5b3Ugd2FudCB0aGUgY29tcGlsZXIKdG8gaW5mZXIgc29tZSBvZiB0aGVtLCB5b3UgY2FuIHVzZSB0eXBlIHBsYWNlaG9sZGVyczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VCwgVT4oeDogVCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286OjxmNjQ+KHgpOyAgICAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDEKICAgIGZvbzo6PF8sIGY2ND4oeCk7IC8vIHNhbWUgYXMgYGZvbzo6PGJvb2wsIGY2ND4oeClgCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///x+aBQAAAJoF8whoAIUVJgEAAMgBAAIGAMkBAQAEAMQDDgAAA8cBAAQAxAMOAAAAxwECBQEC2QEBAQDzCAAByAEABADEAw4AAALHAQABBACvAyQAAAPGAQAEAK8DJAAAAMYBAQEA8wgAAmcAsAMSAAACAgVFMDA4OQABHwUAAAAF8wgEAK8DJAAAAMYBAQEB9wgAAccBAGoAtBUmAQAAzQEAAAJqALQVJgEAAgLJAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBnYXZlIHRvbyBmZXcgbGlmZXRpbWUgYXJndW1lbnRzLiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzwnYTogJ2IsICdiOiAnYT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PCdzdGF0aWM+KCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDEKfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZ2l2ZSB0aGUgcmlnaHQgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYApmbiBmb288J2E6ICdiLCAnYjogJ2E+KCkge30KCmZuIG1haW4oKSB7CiAgICBmb286Ojwnc3RhdGljLCAnc3RhdGljPigpOwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/A8kDAAAAyQPzCGoAtBUmAQAAzAEAAgYAzQEBAAQAxAMOAAADywEABADEAw4AAADLAQIFAQLZAQEBAPMIAAHMAQAEAMQDDgAAAssBAAEEAK8DJAAAA8oBAAQArwMkAAAAygEBAQDzCAACaQCwAxIAAAICBUUwMDkwAAEfBQAAAAXzCAQArwMkAAAAygEBAQH3CAABywEAbADjFSYBAADRAQAAAmwA4xUmAQACAvECQW4gdW5uZWNlc3NhcnkgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXIgd2FzIGdpdmVuIGluIGEgdHlwZSBhbGlhcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwOTEKdHlwZSBGb288VD4gPSB1MzI7IC8vIGVycm9yOiB0eXBlIHBhcmFtZXRlciBgVGAgaXMgdW51c2VkCi8vIG9yOgp0eXBlIEZvbzxBLEI+ID0gQm94PEE+OyAvLyBlcnJvcjogdHlwZSBwYXJhbWV0ZXIgYEJgIGlzIHVudXNlZApgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IHdyaXRlIHRvbyBtYW55IHBhcmFtZXRlcnMuIEV4YW1wbGU6CgpgYGAKdHlwZSBGb28gPSB1MzI7IC8vIG9rIQp0eXBlIEZvbzI8QT4gPSBCb3g8QT47IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////3/xAgAAAPEC8whsAOMVJgEAANABAAIGANEBAQAEAMQDDgAAA88BAAQAxAMOAAAAzwECBQEC2QEBAQDzCAAB0AEABADEAw4AAALPAQABBACvAyQAAAPOAQAEAK8DJAAAAM4BAQEA8wgAAmsAsAMSAAACAgVFMDA5MQABHwUAAAAF8wgEAK8DJAAAAM4BAQEB9wgAAc8BAG4AkhYmAQAA1QEAAAJuAJIWJgEAAgLGBEFuIHVuZGVmaW5lZCBhdG9taWMgb3BlcmF0aW9uIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwOTIKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBhdG9taWMgb3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmdW5jdGlvbgp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGNvbXBpbGVyL3J1c3RjX2NvZGVnZW5fbGx2bS9zcmMvaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYnJhcnkvY29yZS9zcmMvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZV9zZXFjc3QoKTsgLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BP8YEAAAAxgTzCG4AkhYmAQAA1AEAAgYA1QEBAAQAxAMOAAAD0wEABADEAw4AAADTAQIFAQLZAQEBAPMIAAHUAQAEAMQDDgAAAtMBAAEEAK8DJAAAA9IBAAQArwMkAAAA0gEBAQDzCAACbQCwAxIAAAICBUUwMDkyAAEfBQAAAAXzCAQArwMkAAAA0gEBAQH3CAAB0wEAcADBFiYBAADZAQAAAnAAwRYmAQACAokFQW4gdW5rbm93biBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MwojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gZm9vKCk7IC8vIGVycm9yOiB1bnJlY29nbml6ZWQgaW50cmluc2ljIGZ1bmN0aW9uOiBgZm9vYAp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBmb28oKTsKICAgIH0KfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IG1ha2UgYSBtaXN0YWtlIGluIHRoZSBmdW5jdGlvbidzIG5hbWUuIEFsbCBpbnRyaW5zaWMKZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBjb21waWxlci9ydXN0Y19jb2RlZ2VuX2xsdm0vc3JjL2ludHJpbnNpYy5yc2AgYW5kIGluCmBsaWJyYXJ5L2NvcmUvc3JjL2ludHJpbnNpY3MucnNgIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZmVuY2Vfc2VxY3N0KCk7IC8vIG9rIQp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBhdG9taWNfZmVuY2Vfc2VxY3N0KCk7CiAgICB9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8DiQUAAACJBfMIcADBFiYBAADYAQACBgDZAQEABADEAw4AAAPXAQAEAMQDDgAAANcBAgUBAtkBAQEA8wgAAdgBAAQAxAMOAAAC1wEAAQQArwMkAAAD1gEABACvAyQAAADWAQEBAPMIAAJvALADEgAAAgIFRTAwOTMAAR8FAAAABfMIBACvAyQAAADWAQEBAfcIAAHXAQByAPAWJgEAAN0BAAACcgDwFiYBAAIC5ARBbiBpbnZhbGlkIG51bWJlciBvZiBnZW5lcmljIHBhcmFtZXRlcnMgd2FzIHBhc3NlZCB0byBhbiBpbnRyaW5zaWMgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDk0CiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxULCBVPigpIC0+IHVzaXplOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyBudW1iZXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIG9mIHR5cGUgcGFyYW1ldGVycwp9CmBgYAoKUGxlYXNlIGNoZWNrIHRoYXQgeW91IHByb3ZpZGVkIHRoZSByaWdodCBudW1iZXIgb2YgdHlwZSBwYXJhbWV0ZXJzCmFuZCB2ZXJpZnkgd2l0aCB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb24gaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgICNbcnVzdGNfc2FmZV9pbnRyaW5zaWNdCiAgICBmbiBzaXplX29mPFQ+KCkgLT4gdXNpemU7IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////AeQEAAAA5ATzCHIA8BYmAQAA3AEAAgYA3QEBAAQAxAMOAAAD2wEABADEAw4AAADbAQIFAQLZAQEBAPMIAAHcAQAEAMQDDgAAAtsBAAEEAK8DJAAAA9oBAAQArwMkAAAA2gEBAQDzCAACcQCwAxIAAAICBUUwMDk0AAEfBQAAAAXzCAQArwMkAAAA2gEBAQH3CAAB2wEAdACfFyYBAADhAQAAAnQAnxcmAQACApAOVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBhIGxpZmV0aW1lIGlzIG1pc3NpbmcgZnJvbSBhIHR5cGUuIElmIGl0IGlzIGFuIGVycm9yCmluc2lkZSBhIGZ1bmN0aW9uIHNpZ25hdHVyZSwgdGhlIHByb2JsZW0gbWF5IGJlIHdpdGggZmFpbGluZyB0byBhZGhlcmUgdG8gdGhlCmxpZmV0aW1lIGVsaXNpb24gcnVsZXMgKHNlZSBiZWxvdykuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNgpzdHJ1Y3QgRm9vMSB7IHg6ICZib29sIH0KICAgICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgpzdHJ1Y3QgRm9vMjwnYT4geyB4OiAmJ2EgYm9vbCB9IC8vIGNvcnJlY3QKCnN0cnVjdCBCYXIxIHsgeDogRm9vMiB9CiAgICAgICAgICAgICAgLy8gXl5eXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKc3RydWN0IEJhcjI8J2E+IHsgeDogRm9vMjwnYT4gfSAvLyBjb3JyZWN0CgplbnVtIEJhejEgeyBBKHU4KSwgQigmYm9vbCksIH0KICAgICAgICAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKZW51bSBCYXoyPCdhPiB7IEEodTgpLCBCKCYnYSBib29sKSwgfSAvLyBjb3JyZWN0Cgp0eXBlIE15U3RyMSA9ICZzdHI7CiAgICAgICAgICAgLy8gXiBleHBlY3RlZCBsaWZldGltZSBwYXJhbWV0ZXIKdHlwZSBNeVN0cjI8J2E+ID0gJidhIHN0cjsgLy8gY29ycmVjdApgYGAKCkxpZmV0aW1lIGVsaXNpb24gaXMgYSBzcGVjaWFsLCBsaW1pdGVkIGtpbmQgb2YgaW5mZXJlbmNlIGZvciBsaWZldGltZXMgaW4KZnVuY3Rpb24gc2lnbmF0dXJlcyB3aGljaCBhbGxvd3MgeW91IHRvIGxlYXZlIG91dCBsaWZldGltZXMgaW4gY2VydGFpbiBjYXNlcy4KRm9yIG1vcmUgYmFja2dyb3VuZCBvbiBsaWZldGltZSBlbGlzaW9uIHNlZSBbdGhlIGJvb2tdW2Jvb2stbGVdLgoKVGhlIGxpZmV0aW1lIGVsaXNpb24gcnVsZXMgcmVxdWlyZSB0aGF0IGFueSBmdW5jdGlvbiBzaWduYXR1cmUgd2l0aCBhbiBlbGlkZWQKb3V0cHV0IGxpZmV0aW1lIG11c3QgZWl0aGVyIGhhdmU6CgogLSBleGFjdGx5IG9uZSBpbnB1dCBsaWZldGltZQogLSBvciwgbXVsdGlwbGUgaW5wdXQgbGlmZXRpbWVzLCBidXQgdGhlIGZ1bmN0aW9uIG11c3QgYWxzbyBiZSBhIG1ldGhvZCB3aXRoIGEKICAgYCZzZWxmYCBvciBgJm11dCBzZWxmYCByZWNlaXZlcgoKSW4gdGhlIGZpcnN0IGNhc2UsIHRoZSBvdXRwdXQgbGlmZXRpbWUgaXMgaW5mZXJyZWQgdG8gYmUgdGhlIHNhbWUgYXMgdGhlIHVuaXF1ZQppbnB1dCBsaWZldGltZS4gSW4gdGhlIHNlY29uZCBjYXNlLCB0aGUgbGlmZXRpbWUgaXMgaW5zdGVhZCBpbmZlcnJlZCB0byBiZSB0aGUKc2FtZSBhcyB0aGUgbGlmZXRpbWUgb24gYCZzZWxmYCBvciBgJm11dCBzZWxmYC4KCkhlcmUgYXJlIHNvbWUgZXhhbXBsZXMgb2YgZWxpc2lvbiBlcnJvcnM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYKLy8gZXJyb3IsIG5vIGlucHV0IGxpZmV0aW1lcwpmbiBmb28oKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB4YCBhbmQgYHlgIGhhdmUgZGlzdGluY3QgbGlmZXRpbWVzIGluZmVycmVkCmZuIGJhcih4OiAmc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQoKLy8gZXJyb3IsIGB5YCdzIGxpZmV0aW1lIGlzIGluZmVycmVkIHRvIGJlIGRpc3RpbmN0IGZyb20gYHhgJ3MKZm4gYmF6PCdhPih4OiAmJ2Egc3RyLCB5OiAmc3RyKSAtPiAmc3RyIHsgfQpgYGAKCltib29rLWxlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDMtbGlmZXRpbWUtc3ludGF4Lmh0bWwjbGlmZXRpbWUtZWxpc2lvbgoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wOQDgAAAJAO8wh0AJ8XJgEAAOABAAIGAOEBAQAEAMQDDgAAA98BAAQAxAMOAAAA3wECBQEC2QEBAQDzCAAB4AEABADEAw4AAALfAQABBACvAyQAAAPeAQAEAK8DJAAAAN4BAQEA8wgAAnMAsAMSAAACAgVFMDEwNgABHwUAAAAF8wgEAK8DJAAAAN4BAQEB9wgAAd8BAHYAzhcmAQAA5QEAAAJ2AM4XJgEAAgKtCkFuIGluY29ycmVjdCBudW1iZXIgb2YgZ2VuZXJpYyBhcmd1bWVudHMgd2FzIHByb3ZpZGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vPFQ+IHsgeDogVCB9CgpzdHJ1Y3QgQmFyIHsgeDogRm9vIH0gICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAxLCBmb3VuZCAwCnN0cnVjdCBCYXo8UywgVD4geyB4OiBGb288UywgVD4gfSAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sPih4KTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCiAgICBmb286Ojxib29sLCBpMzIsIGkzMj4oeCwgMiwgNCk7IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAzCiAgICBmOjo8J3N0YXRpYz4oKTsgICAgICAgICAgICAgICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgbGlmZXRpbWUgYXJndW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAwLCBmb3VuZCAxCn0KYGBgCgpXaGVuIHVzaW5nL2RlY2xhcmluZyBhbiBpdGVtIHdpdGggZ2VuZXJpYyBhcmd1bWVudHMsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIGV4YWN0CnNhbWUgbnVtYmVyOgoKYGBgCnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXI8VD4geyB4OiBGb288VD4gfSAgICAgICAgICAgICAgIC8vIG9rIQpzdHJ1Y3QgQmF6PFMsIFQ+IHsgeDogRm9vPFM+LCB5OiBGb288VD4gfSAvLyBvayEKCmZuIGZvbzxULCBVPih4OiBULCB5OiBVKSB7fQpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeDogYm9vbCA9IHRydWU7CiAgICBmb286Ojxib29sLCB1MzI+KHgsIDEyKTsgICAgICAgICAgICAgIC8vIG9rIQogICAgZigpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBvayEKfQpgYGAKABX///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wetCgAAAK0K8wh2AM4XJgEAAOQBAAIGAOUBAQAEAMQDDgAAA+MBAAQAxAMOAAAA4wECBQEC2QEBAQDzCAAB5AEABADEAw4AAALjAQABBACvAyQAAAPiAQAEAK8DJAAAAOIBAQEA8wgAAnUAsAMSAAACAgVFMDEwNwABHwUAAAAF8wgEAK8DJAAAAOIBAQEB9wgAAeMBAHgA/RcmAQAA6QEAAAJ4AP0XJgEAAgKEBVlvdSB0cmllZCB0byBwcm92aWRlIGEgZ2VuZXJpYyBhcmd1bWVudCB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwOQp0eXBlIFggPSB1MzI8aTMyPjsgLy8gZXJyb3I6IHR5cGUgYXJndW1lbnRzIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyB0eXBlCnR5cGUgWSA9IGJvb2w8J3N0YXRpYz47IC8vIGVycm9yOiBsaWZldGltZSBwYXJhbWV0ZXJzIGFyZSBub3QgYWxsb3dlZCBvbgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcyB0eXBlCmBgYAoKQ2hlY2sgdGhhdCB5b3UgdXNlZCB0aGUgY29ycmVjdCBhcmd1bWVudCBhbmQgdGhhdCB0aGUgZGVmaW5pdGlvbiBpcyBjb3JyZWN0LgoKRXhhbXBsZToKCmBgYAp0eXBlIFggPSB1MzI7IC8vIG9rIQp0eXBlIFkgPSBib29sOyAvLyBvayEKYGBgCgpOb3RlIHRoYXQgZ2VuZXJpYyBhcmd1bWVudHMgZm9yIGVudW0gdmFyaWFudCBjb25zdHJ1Y3RvcnMgZ28gYWZ0ZXIgdGhlIHZhcmlhbnQsCm5vdCBhZnRlciB0aGUgZW51bS4gRm9yIGV4YW1wbGUsIHlvdSB3b3VsZCB3cml0ZSBgT3B0aW9uOjpOb25lOjo8dTMyPmAsCnJhdGhlciB0aGFuIGBPcHRpb246Ojx1MzI+OjpOb25lYC4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BD4QFAAAAhAXzCHgA/RcmAQAA6AEAAgYA6QEBAAQAxAMOAAAD5wEABADEAw4AAADnAQIFAQLZAQEBAPMIAAHoAQAEAMQDDgAAAucBAAEEAK8DJAAAA+YBAAQArwMkAAAA5gEBAQDzCAACdwCwAxIAAAICBUUwMTA5AAEfBQAAAAXzCAQArwMkAAAA5gEBAQH3CAAB5wEAegCsGCYBAADtAQAAAnoArBgmAQACAqEBIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IHRyaWVkIHRvIHByb3ZpZGUgYSBsaWZldGltZSB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgpTZWUgYEUwMTA5YCBmb3IgbW9yZSBkZXRhaWxzLgoAA////////////wH///////////8B/////x+hAQAAAKEB8wh6AKwYJgEAAOwBAAIGAO0BAQAEAMQDDgAAA+sBAAQAxAMOAAAA6wECBQEC2QEBAQDzCAAB7AEABADEAw4AAALrAQABBACvAyQAAAPqAQAEAK8DJAAAAOoBAQEA8wgAAnkAsAMSAAACAgVFMDExMAABHwUAAAAF8wgEAK8DJAAAAOoBAQEB9wgAAesBAHwA2xgmAQAA8QEAAAJ8ANsYJgEAAgKkBkFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBhIHR5cGUgb3V0c2lkZSB0aGUgY3VycmVudCBjcmF0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTYKaW1wbCBWZWM8dTg+IHsgfSAvLyBlcnJvcgpgYGAKCllvdSBjYW4gb25seSBkZWZpbmUgYW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gZm9yIGEgdHlwZSBpbiB0aGUgc2FtZSBjcmF0ZQp3aGVyZSB0aGUgdHlwZSB3YXMgZGVmaW5lZC4gRm9yIGV4YW1wbGUsIGFuIGBpbXBsYCBibG9jayBhcyBhYm92ZSBpcyBub3QgYWxsb3dlZApzaW5jZSBgVmVjYCBpcyBkZWZpbmVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IGNhbiBlaXRoZXI6CgogLSBkZWZpbmUgYSB0cmFpdCB0aGF0IGhhcyB0aGUgZGVzaXJlZCBhc3NvY2lhdGVkIGZ1bmN0aW9ucy90eXBlcy9jb25zdGFudHMgYW5kCiAgIGltcGxlbWVudCB0aGUgdHJhaXQgZm9yIHRoZSB0eXBlIGluIHF1ZXN0aW9uCiAtIGRlZmluZSBhIG5ldyB0eXBlIHdyYXBwaW5nIHRoZSB0eXBlIGFuZCBkZWZpbmUgYW4gaW1wbGVtZW50YXRpb24gb24gdGhlIG5ldwogICB0eXBlCgpOb3RlIHRoYXQgdXNpbmcgdGhlIGB0eXBlYCBrZXl3b3JkIGRvZXMgbm90IHdvcmsgaGVyZSBiZWNhdXNlIGB0eXBlYCBvbmx5CmludHJvZHVjZXMgYSB0eXBlIGFsaWFzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE2CnR5cGUgQnl0ZXMgPSBWZWM8dTg+OwoKaW1wbCBCeXRlcyB7IH0gLy8gZXJyb3IsIHNhbWUgYXMgYWJvdmUKYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8BpAYAAACkBvMIfADbGCYBAADwAQACBgDxAQEABADEAw4AAAPvAQAEAMQDDgAAAO8BAgUBAtkBAQEA8wgAAfABAAQAxAMOAAAC7wEAAQQArwMkAAAD7gEABACvAyQAAADuAQEBAPMIAAJ7ALADEgAAAgIFRTAxMTYAAR8FAAAABfMIBACvAyQAAADuAQEBAfcIAAHvAQB+AIoZJgEAAPUBAAACfgCKGSYBAAIC+QlPbmx5IHRyYWl0cyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGNyYXRlIGNhbiBiZSBpbXBsZW1lbnRlZCBmb3IgYXJiaXRyYXJ5IHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExNwppbXBsIERyb3AgZm9yIHUzMiB7fQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgdmlvbGF0aW9uIG9mIG9uZSBvZiBSdXN0J3Mgb3JwaGFuIHJ1bGVzIGZvciB0cmFpdAppbXBsZW1lbnRhdGlvbnMuIFRoZSBydWxlIHByb2hpYml0cyBhbnkgaW1wbGVtZW50YXRpb24gb2YgYSBmb3JlaWduIHRyYWl0IChhCnRyYWl0IGRlZmluZWQgaW4gYW5vdGhlciBjcmF0ZSkgd2hlcmUKCiAtIHRoZSB0eXBlIHRoYXQgaXMgaW1wbGVtZW50aW5nIHRoZSB0cmFpdCBpcyBmb3JlaWduCiAtIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdGhlIHRyYWl0IChpZiB0aGVyZSBhcmUgYW55KSBhcmUgYWxzbwogICBmb3JlaWduLgoKVG8gYXZvaWQgdGhpcyBraW5kIG9mIGVycm9yLCBlbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgbG9jYWwgdHlwZSBpcyByZWZlcmVuY2VkCmJ5IHRoZSBgaW1wbGA6CgpgYGAKcHViIHN0cnVjdCBGb287IC8vIHlvdSBkZWZpbmUgeW91ciB0eXBlIGluIHlvdXIgY3JhdGUKCmltcGwgRHJvcCBmb3IgRm9vIHsgLy8gYW5kIHlvdSBjYW4gaW1wbGVtZW50IHRoZSB0cmFpdCBvbiBpdCEKICAgIC8vIGNvZGUgb2YgdHJhaXQgaW1wbGVtZW50YXRpb24gaGVyZQojICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgfQp9CgppbXBsIEZyb208Rm9vPiBmb3IgaTMyIHsgLy8gb3IgeW91IHVzZSBhIHR5cGUgZnJvbSB5b3VyIGNyYXRlIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHR5cGUgcGFyYW1ldGVyCiAgICBmbiBmcm9tKGk6IEZvbykgLT4gaTMyIHsKICAgICAgICAwCiAgICB9Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBkZWZpbmUgYSB0cmFpdCBsb2NhbGx5IGFuZCBpbXBsZW1lbnQgdGhhdCBpbnN0ZWFkOgoKYGBgCnRyYWl0IEJhciB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsIEJhciBmb3IgdTMyIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsIHNlZSBbUkZDIDEwMjNdLgoKW1JGQyAxMDIzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTAyMy1yZWJhbGFuY2luZy1jb2hlcmVuY2UubWQKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8B+QkAAAD5CfMIfgCKGSYBAAD0AQACBgD1AQEABADEAw4AAAPzAQAEAMQDDgAAAPMBAgUBAtkBAQEA8wgAAfQBAAQAxAMOAAAC8wEAAQQArwMkAAAD8gEABACvAyQAAADyAQEBAPMIAAJ9ALADEgAAAgIFRTAxMTcAAR8FAAAABfMIBACvAyQAAADyAQEBAfcIAAHzAQCAAQC5GSYBAAD5AQAAAoABALkZJgEAAgKkB0FuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBkZWZpbmVkIGZvciBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBzdHJ1Y3QsCmVudW0sIHVuaW9uLCBvciB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTE4CmltcGw8VD4gVCB7IC8vIGVycm9yOiBubyBub21pbmFsIHR5cGUgZm91bmQgZm9yIGluaGVyZW50IGltcGxlbWVudGF0aW9uCiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgLy8gLi4uCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGltcGxlbWVudCBhIHRyYWl0IG9uIHRoZSB0eXBlIG9yIHdyYXAgaXQgaW4gYSBzdHJ1Y3QuCkV4YW1wbGU6CgpgYGAKLy8gd2UgY3JlYXRlIGEgdHJhaXQgaGVyZQp0cmFpdCBMaXZlTG9uZ0FuZFByb3NwZXIgewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmc7Cn0KCi8vIGFuZCBub3cgeW91IGNhbiBpbXBsZW1lbnQgaXQgb24gVAppbXBsPFQ+IExpdmVMb25nQW5kUHJvc3BlciBmb3IgVCB7CiAgICBmbiBnZXRfc3RhdGUoJnNlbGYpIC0+IFN0cmluZyB7CiAgICAgICAgIkhlJ3MgZGVhZCwgSmltISIudG9fb3duZWQoKQogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBjcmVhdGUgYSBuZXd0eXBlLiBBIG5ld3R5cGUgaXMgYSB3cmFwcGluZyB0dXBsZS1zdHJ1Y3QuCkZvciBleGFtcGxlLCBgTmV3VHlwZWAgaXMgYSBuZXd0eXBlIG92ZXIgYEZvb2AgaW4gYHN0cnVjdCBOZXdUeXBlKEZvbylgLgpFeGFtcGxlOgoKYGBgCnN0cnVjdCBUeXBlV3JhcHBlcjxUPihUKTsKCmltcGw8VD4gVHlwZVdyYXBwZXI8VD4gewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICJGYXNjaW5hdGluZyEiLnRvX293bmVkKCkKICAgIH0KfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////AaQHAAAApAfzCIABALkZJgEAAPgBAAIGAPkBAQAEAMQDDgAAA/cBAAQAxAMOAAAA9wECBQEC2QEBAQDzCAAB+AEABADEAw4AAAL3AQABBACvAyQAAAP2AQAEAK8DJAAAAPYBAQEA8wgAAn8AsAMSAAACAgVFMDExOAABHwUAAAAF8wgEAK8DJAAAAPYBAQEB9wgAAfcBAIIBAOgZJgEAAP0BAAACggEA6BkmAQACApIJVGhlcmUgYXJlIGNvbmZsaWN0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTkKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CgpzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiB1c2l6ZQp9CgppbXBsIE15VHJhaXQgZm9yIEZvbyB7IC8vIGVycm9yOiBjb25mbGljdGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdHJhaXQKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYE15VHJhaXRgIGZvciB0eXBlIGBGb29gCiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgc2VsZi52YWx1ZSB9Cn0KYGBgCgpXaGVuIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRyYWl0LCB0aGUgY29tcGlsZXIgZmluZHMKYm90aCB0aGUgYGltcGw8VD4gTXlUcmFpdCBmb3IgVGAgd2hlcmUgVCBpcyBhbGwgdHlwZXMgYW5kIHRoZSBgaW1wbApNeVRyYWl0IGZvciBGb29gLiBTaW5jZSBhIHRyYWl0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBtdWx0aXBsZSB0aW1lcywKdGhpcyBpcyBhbiBlcnJvci4gU28sIHdoZW4geW91IHdyaXRlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKClRoaXMgbWFrZXMgdGhlIHRyYWl0IGltcGxlbWVudGVkIG9uIGFsbCB0eXBlcyBpbiB0aGUgc2NvcGUuIFNvIGlmIHlvdQp0cnkgdG8gaW1wbGVtZW50IGl0IG9uIGFub3RoZXIgb25lIGFmdGVyIHRoYXQsIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbApjb25mbGljdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb287CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb287CgogICAgZi5nZXQoKTsgLy8gdGhlIHRyYWl0IGlzIGltcGxlbWVudGVkIHNvIHdlIGNhbiB1c2UgaXQKfQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SCQAAAJIJ8wiCAQDoGSYBAAD8AQACBgD9AQEABADEAw4AAAP7AQAEAMQDDgAAAPsBAgUBAtkBAQEA8wgAAfwBAAQAxAMOAAAC+wEAAQQArwMkAAAD+gEABACvAyQAAAD6AQEBAPMIAAKBAQCwAxIAAAICBUUwMTE5AAEfBQAAAAXzCAQArwMkAAAA+gEBAQH3CAAB+wEAhAEAlxomAQAAgQIAAAKEAQCXGiYBAAICvQVEcm9wIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHRyYWl0LCB3aGljaCBpcyBub3QgYWxsb3dlZDogb25seSBzdHJ1Y3RzIGFuZAplbnVtcyBjYW4gaW1wbGVtZW50IERyb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIwCnRyYWl0IE15VHJhaXQge30KCmltcGwgRHJvcCBmb3IgTXlUcmFpdCB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHdyYXAgdGhlIHRyYWl0IHVwIGluIGEgc3RydWN0LCBhbmQgaW1wbGVtZW50CkRyb3Agb24gdGhhdDoKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CnN0cnVjdCBNeVdyYXBwZXI8VDogTXlUcmFpdD4geyBmb286IFQgfQoKaW1wbCA8VDogTXlUcmFpdD4gRHJvcCBmb3IgTXlXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpgYGAKCkFsdGVybmF0aXZlbHksIHdyYXBwaW5nIHRyYWl0IG9iamVjdHMgcmVxdWlyZXMgc29tZXRoaW5nOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCi8vb3IgQm94PE15VHJhaXQ+LCBpZiB5b3Ugd2FudGVkIGFuIG93bmVkIHRyYWl0IG9iamVjdApzdHJ1Y3QgTXlXcmFwcGVyPCdhPiB7IGZvbzogJidhIE15VHJhaXQgfQoKaW1wbCA8J2E+IERyb3AgZm9yIE15V3JhcHBlcjwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H70FAAAAvQXzCIQBAJcaJgEAAIACAAIGAIECAQAEAMQDDgAAA/8BAAQAxAMOAAAA/wECBQEC2QEBAQDzCAABgAIABADEAw4AAAL/AQABBACvAyQAAAP+AQAEAK8DJAAAAP4BAQEA8wgAAoMBALADEgAAAgIFRTAxMjAAAR8FAAAABfMIBACvAyQAAAD+AQEBAfcIAAH/AQCGAQDGGiYBAACFAgAAAoYBAMYaJgEAAgLzA1RoZSB0eXBlIHBsYWNlaG9sZGVyIGBfYCB3YXMgdXNlZCB3aXRoaW4gYSB0eXBlIG9uIGFuIGl0ZW0ncyBzaWduYXR1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIxCmZuIGZvbygpIC0+IF8geyA1IH0gLy8gZXJyb3IKCnN0YXRpYyBCQVI6IF8gPSAidGVzdCI7IC8vIGVycm9yCmBgYAoKSW4gdGhvc2UgY2FzZXMsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIHR5cGUgZXhwbGljaXRseToKCmBgYApmbiBmb28oKSAtPiBpMzIgeyA1IH0gLy8gb2shCgpzdGF0aWMgQkFSOiAmc3RyID0gInRlc3QiOyAvLyBvayEKYGBgCgpUaGUgdHlwZSBwbGFjZWhvbGRlciBgX2AgY2FuIGJlIHVzZWQgb3V0c2lkZSBpdGVtJ3Mgc2lnbmF0dXJlIGFzIGZvbGxvd3M6CgpgYGAKbGV0IHggPSAiYTRhIi5zcGxpdCgnNCcpCiAgICAuY29sbGVjdDo6PFZlYzxfPj4oKTsgLy8gTm8gbmVlZCB0byBwcmVjaXNlIHRoZSBWZWMncyBnZW5lcmljIHR5cGUuCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A/MDAAAA8wPzCIYBAMYaJgEAAIQCAAIGAIUCAQAEAMQDDgAAA4MCAAQAxAMOAAAAgwICBQEC2QEBAQDzCAABhAIABADEAw4AAAKDAgABBACvAyQAAAOCAgAEAK8DJAAAAIICAQEA8wgAAoUBALADEgAAAgIFRTAxMjEAAR8FAAAABfMIBACvAyQAAACCAgEBAfcIAAGDAgCIAQD1GiYBAACJAgAAAogBAPUaJgEAAgLQAkEgc3RydWN0IHdhcyBkZWNsYXJlZCB3aXRoIHR3byBmaWVsZHMgaGF2aW5nIHRoZSBzYW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI0CnN0cnVjdCBGb28gewogICAgZmllbGQxOiBpMzIsCiAgICBmaWVsZDE6IGkzMiwgLy8gZXJyb3I6IGZpZWxkIGlzIGFscmVhZHkgZGVjbGFyZWQKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgZmllbGQgbmFtZXMgaGF2ZSBiZWVuIGNvcnJlY3RseSBzcGVsbGVkLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBpMzIsCiAgICBmaWVsZDI6IGkzMiwgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//wPQAgAAANAC8wiIAQD1GiYBAACIAgACBgCJAgEABADEAw4AAAOHAgAEAMQDDgAAAIcCAgUBAtkBAQEA8wgAAYgCAAQAxAMOAAAChwIAAQQArwMkAAADhgIABACvAyQAAACGAgEBAPMIAAKHAQCwAxIAAAICBUUwMTI0AAEfBQAAAAXzCAQArwMkAAAAhgIBAQH3CAABhwIAigEApBsmAQAAjQIAAAKKAQCkGyYBAAIC2gRBIHR5cGUgcGFyYW1ldGVyIHdpdGggZGVmYXVsdCB2YWx1ZSBpcyB1c2luZyBmb3J3YXJkIGRlY2xhcmVkIGlkZW50aWZpZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI4CnN0cnVjdCBGb288VCA9IFUsIFUgPSAoKT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9Ci8vIGVycm9yOiBnZW5lcmljIHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgY2Fubm90IHVzZSBmb3J3YXJkIGRlY2xhcmVkCi8vICAgICAgICBpZGVudGlmaWVycwpgYGAKClR5cGUgcGFyYW1ldGVyIGRlZmF1bHRzIGNhbiBvbmx5IHVzZSBwYXJhbWV0ZXJzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZW0uIFNpbmNlCnR5cGUgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluLW9yZGVyLCB0aGlzIGlzc3VlIGNvdWxkIGJlIGZpeGVkIGJ5IGRvaW5nOgoKYGBgCnN0cnVjdCBGb288VSA9ICgpLCBUID0gVT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9CmBgYAoKUGxlYXNlIGFsc28gdmVyaWZ5IHRoYXQgdGhpcyB3YXNuJ3QgYmVjYXVzZSBvZiBhIG5hbWUtY2xhc2ggYW5kIHJlbmFtZSB0aGUgdHlwZQpwYXJhbWV0ZXIgaWYgc28uCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H9oEAAAA2gTzCIoBAKQbJgEAAIwCAAIGAI0CAQAEAMQDDgAAA4sCAAQAxAMOAAAAiwICBQEC2QEBAQDzCAABjAIABADEAw4AAAKLAgABBACvAyQAAAOKAgAEAK8DJAAAAIoCAQEA8wgAAokBALADEgAAAgIFRTAxMjgAAR8FAAAABfMIBACvAyQAAACKAgEBAfcIAAGLAgCMAQDTGyYBAACRAgAAAowBANMbJgEAAgKPBEEgcGF0dGVybiB3YXMgZGVjbGFyZWQgYXMgYW4gYXJndW1lbnQgaW4gYSBmb3JlaWduIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMApleHRlcm4gIkMiIHsKICAgIGZuIGZvbygoYSwgYik6ICh1MzIsIHUzMikpOyAvLyBlcnJvcjogcGF0dGVybnMgYXJlbid0IGFsbG93ZWQgaW4gZm9yZWlnbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCByZXBsYWNlIHRoZSBwYXR0ZXJuIGFyZ3VtZW50IHdpdGggYSByZWd1bGFyIG9uZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU29tZVN0cnVjdCB7CiAgICBhOiB1MzIsCiAgICBiOiB1MzIsCn0KCmV4dGVybiAiQyIgewogICAgZm4gZm9vKHM6IFNvbWVTdHJ1Y3QpOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCmV4dGVybiAiQyIgewogICAgZm4gZm9vKGE6ICh1MzIsIHUzMikpOyAvLyBvayEKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//AY8EAAAAjwTzCIwBANMbJgEAAJACAAIGAJECAQAEAMQDDgAAA48CAAQAxAMOAAAAjwICBQEC2QEBAQDzCAABkAIABADEAw4AAAKPAgABBACvAyQAAAOOAgAEAK8DJAAAAI4CAQEA8wgAAosBALADEgAAAgIFRTAxMzAAAR8FAAAABfMIBACvAyQAAACOAgEBAfcIAAGPAgCOAQCCHCYBAACVAgAAAo4BAIIcJgEAAgKrAlRoZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMxCmZuIG1haW48VD4oKSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUgZ2VuZXJpYyBwYXJhbWV0ZXJzCn0KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBgbWFpbmAgZnVuY3Rpb24gd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCkl0IG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cy4KAAX///////////8B////////////Af///////////wH///////////8B////////AasCAAAAqwLzCI4BAIIcJgEAAJQCAAIGAJUCAQAEAMQDDgAAA5MCAAQAxAMOAAAAkwICBQEC2QEBAQDzCAABlAIABADEAw4AAAKTAgABBACvAyQAAAOSAgAEAK8DJAAAAJICAQEA8wgAAo0BALADEgAAAgIFRTAxMzEAAR8FAAAABfMIBACvAyQAAACSAgEBAfcIAAGTAgCQAQCxHCYBAACZAgAAApABALEcJgEAAgKRBUEgZnVuY3Rpb24gd2l0aCB0aGUgYHN0YXJ0YCBhdHRyaWJ1dGUgd2FzIGRlY2xhcmVkIHdpdGggdHlwZSBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMgojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGY8VD4oKSB7fQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byBkZWNsYXJlIHR5cGUgcGFyYW1ldGVycyBvbiBhIGZ1bmN0aW9uIHRoYXQgaGFzIHRoZSBgc3RhcnRgCmF0dHJpYnV0ZS4gU3VjaCBhIGZ1bmN0aW9uIG11c3QgaGF2ZSB0aGUgZm9sbG93aW5nIHR5cGUgc2lnbmF0dXJlIChmb3IgbW9yZQppbmZvcm1hdGlvbiwgdmlldyBbdGhlIHVuc3RhYmxlIGJvb2tdWzFdKToKClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2xhbmctaXRlbXMuaHRtbCN3cml0aW5nLWFuLWV4ZWN1dGFibGUtd2l0aG91dC1zdGRsaWIKCmBgYAojIGxldCBfOgpmbihpc2l6ZSwgKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemU7CmBgYAoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIG15X3N0YXJ0KGFyZ2M6IGlzaXplLCBhcmd2OiAqY29uc3QgKmNvbnN0IHU4KSAtPiBpc2l6ZSB7CiAgICAwCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B5EFAAAAkQXzCJABALEcJgEAAJgCAAIGAJkCAQAEAMQDDgAAA5cCAAQAxAMOAAAAlwICBQEC2QEBAQDzCAABmAIABADEAw4AAAKXAgABBACvAyQAAAOWAgAEAK8DJAAAAJYCAQEA8wgAAo8BALADEgAAAgIFRTAxMzIAAR8FAAAABfMIBACvAyQAAACWAgEBAfcIAAGXAgCSAQDgHCYBAACdAgAAApIBAOAcJgEAAgKmBlVuc2FmZSBjb2RlIHdhcyB1c2VkIG91dHNpZGUgb2YgYW4gdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMwp1bnNhZmUgZm4gZigpIHsgcmV0dXJuOyB9IC8vIFRoaXMgaXMgdGhlIHVuc2FmZSBjb2RlCgpmbiBtYWluKCkgewogICAgZigpOyAvLyBlcnJvcjogY2FsbCB0byB1bnNhZmUgZnVuY3Rpb24gcmVxdWlyZXMgdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrCn0KYGBgCgpVc2luZyB1bnNhZmUgZnVuY3Rpb25hbGl0eSBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYW5kIGRpc2FsbG93ZWQgYnkgc2FmZXR5CmNoZWNrcy4gRXhhbXBsZXM6CgoqIERlcmVmZXJlbmNpbmcgcmF3IHBvaW50ZXJzCiogQ2FsbGluZyBmdW5jdGlvbnMgdmlhIEZGSQoqIENhbGxpbmcgZnVuY3Rpb25zIG1hcmtlZCB1bnNhZmUKClRoZXNlIHNhZmV0eSBjaGVja3MgY2FuIGJlIHJlbGF4ZWQgZm9yIGEgc2VjdGlvbiBvZiB0aGUgY29kZSBieSB3cmFwcGluZyB0aGUKdW5zYWZlIGluc3RydWN0aW9ucyB3aXRoIGFuIGB1bnNhZmVgIGJsb2NrLiBGb3IgaW5zdGFuY2U6CgpgYGAKdW5zYWZlIGZuIGYoKSB7IHJldHVybjsgfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IGYoKTsgfSAvLyBvayEKfQpgYGAKClNlZSB0aGUgW3Vuc2FmZSBzZWN0aW9uXVt1bnNhZmUtc2VjdGlvbl0gb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KClt1bnNhZmUtc2VjdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTAxLXVuc2FmZS1ydXN0Lmh0bWwKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wemBgAAAKYG8wiSAQDgHCYBAACcAgACBgCdAgEABADEAw4AAAObAgAEAMQDDgAAAJsCAgUBAtkBAQEA8wgAAZwCAAQAxAMOAAACmwIAAQQArwMkAAADmgIABACvAyQAAACaAgEBAPMIAAKRAQCwAxIAAAICBUUwMTMzAAEfBQAAAAXzCAQArwMkAAAAmgIBAQH3CAABmwIAlAEAjx0mAQAAoQIAAAKUAQCPHSYBAAICjgMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNb3JlIHRoYW4gb25lIGBtYWluYCBmdW5jdGlvbiB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKSB7CiAgICAvLyAuLi4KfQoKLy8gLi4uCgpmbiBtYWluKCkgeyAvLyBlcnJvciEKICAgIC8vIC4uLgp9CmBgYAoKQSBiaW5hcnkgY2FuIG9ubHkgaGF2ZSBvbmUgZW50cnkgcG9pbnQsIGFuZCBieSBkZWZhdWx0IHRoYXQgZW50cnkgcG9pbnQgaXMgdGhlCmBtYWluKClgIGZ1bmN0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgZnVuY3Rpb24sIHBsZWFzZQpyZW5hbWUgb25lIG9mIHRoZW0uCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/3+OAwAAAI4D8wiUAQCPHSYBAACgAgACBgChAgEABADEAw4AAAOfAgAEAMQDDgAAAJ8CAgUBAtkBAQEA8wgAAaACAAQAxAMOAAACnwIAAQQArwMkAAADngIABACvAyQAAACeAgEBAPMIAAKTAQCwAxIAAAICBUUwMTM2AAEfBQAAAAXzCAQArwMkAAAAngIBAQH3CAABnwIAlgEAvh0mAQAApQIAAAKWAQC+HSYBAAICngQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNb3JlIHRoYW4gb25lIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZCB3aXRoIHRoZSBgI1ttYWluXWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmb28oKSB7fQoKI1ttYWluXQpmbiBmKCkge30gLy8gZXJyb3I6IG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIGEgYCNbbWFpbl1gIGF0dHJpYnV0ZQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1ttYWluXWAgYXR0cmlidXRlLiBUaGlzIGlzIGFuIGVycm9yIGJlY2F1c2UgdGhlcmUgbXVzdCBiZSBhIHVuaXF1ZSBlbnRyeQpwb2ludCBpbnRvIGEgUnVzdCBwcm9ncmFtLiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUobWFpbildCgojW21haW5dCmZuIGYoKSB7fSAvLyBvayEKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A54EAAAAngTzCJYBAL4dJgEAAKQCAAIGAKUCAQAEAMQDDgAAA6MCAAQAxAMOAAAAowICBQEC2QEBAQDzCAABpAIABADEAw4AAAKjAgABBACvAyQAAAOiAgAEAK8DJAAAAKICAQEA8wgAApUBALADEgAAAgIFRTAxMzcAAR8FAAAABfMIBACvAyQAAACiAgEBAfcIAAGjAgCYAQDtHSYBAACpAgAAApgBAO0dJgEAAgLTBE1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gd2FzIGRlY2xhcmVkIHdpdGggdGhlIGAjW3N0YXJ0XWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzOAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUge30KCiNbc3RhcnRdCmZuIGYoYXJnYzogaXNpemUsIGFyZ3Y6ICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplIHt9Ci8vIGVycm9yOiBtdWx0aXBsZSAnc3RhcnQnIGZ1bmN0aW9ucwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1tzdGFydF1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgeyAwIH0gLy8gb2shCmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H9MEAAAA0wTzCJgBAO0dJgEAAKgCAAIGAKkCAQAEAMQDDgAAA6cCAAQAxAMOAAAApwICBQEC2QEBAQDzCAABqAIABADEAw4AAAKnAgABBACvAyQAAAOmAgAEAK8DJAAAAKYCAQEA8wgAApcBALADEgAAAgIFRTAxMzgAAR8FAAAABfMIBACvAyQAAACmAgEBAfcIAAGnAgCaAQCcHiYBAACtAgAAApoBAJweJgEAAgLmFCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZXJlIGFyZSB2YXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB0cmFuc211dGluZyBiZXR3ZWVuIHR5cGVzIGluIFJ1c3Q7IGZvciBleGFtcGxlCnR5cGVzIGJlaW5nIHRyYW5zbXV0ZWQgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUuIFRvIGFwcGx5IGFsbCB0aGVzZSByZXN0cmljdGlvbnMsCnRoZSBjb21waWxlciBtdXN0IGtub3cgdGhlIGV4YWN0IHR5cGVzIHRoYXQgbWF5IGJlIHRyYW5zbXV0ZWQuIFdoZW4gdHlwZQpwYXJhbWV0ZXJzIGFyZSBpbnZvbHZlZCwgdGhpcyBjYW5ub3QgYWx3YXlzIGJlIGRvbmUuCgpTbywgZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgbm90IGFsbG93ZWQ6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7CgpmbiBmb288VD4oeDogVmVjPFQ+KSB7CiAgICAvLyB3ZSBhcmUgdHJhbnNtdXRpbmcgYmV0d2VlbiBWZWM8VD4gYW5kIEZvbzxGPiBoZXJlCiAgICBsZXQgeTogRm9vPFQ+ID0gdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH07CiAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB5Cn0KYGBgCgpJbiB0aGlzIHNwZWNpZmljIGNhc2UgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIHRyYW5zbXV0ZSBpcyBoYXJtbGVzcyAoYnV0CnRoaXMgaXMgbm90IGd1YXJhbnRlZWQgYnkgUnVzdCkuIEhvd2V2ZXIsIHdoZW4gYWxpZ25tZW50IGFuZCBlbnVtIG9wdGltaXphdGlvbnMKY29tZSBpbnRvIHRoZSBwaWN0dXJlLCBpdCdzIHF1aXRlIGxpa2VseSB0aGF0IHRoZSBzaXplcyBtYXkgb3IgbWF5IG5vdCBtYXRjaAp3aXRoIGRpZmZlcmVudCB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zLiBJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB0aGlzIGZvcgpfYWxsXyBwb3NzaWJsZSB0eXBlcywgc28gYHRyYW5zbXV0ZSgpYCBzaW1wbHkgb25seSBhY2NlcHRzIHR5cGVzIHdpdGhvdXQgYW55CnVuc3Vic3RpdHV0ZWQgdHlwZSBwYXJhbWV0ZXJzLgoKSWYgeW91IG5lZWQgdGhpcywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuIEtlZXAgaW4KbWluZCB0aGF0IFJ1c3QgZG9lc24ndCBndWFyYW50ZWUgbXVjaCBhYm91dCB0aGUgbGF5b3V0IG9mIGRpZmZlcmVudCBzdHJ1Y3RzCihldmVuIHR3byBzdHJ1Y3RzIHdpdGggaWRlbnRpY2FsIGRlY2xhcmF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgbGF5b3V0cykuIElmCnRoZXJlIGlzIGEgc29sdXRpb24gdGhhdCBhdm9pZHMgdGhlIHRyYW5zbXV0ZSBlbnRpcmVseSwgdHJ5IGl0IGluc3RlYWQuCgpJZiBpdCdzIHBvc3NpYmxlLCBoYW5kLW1vbm9tb3JwaGl6ZSB0aGUgY29kZSBieSB3cml0aW5nIHRoZSBmdW5jdGlvbiBmb3IgZWFjaApwb3NzaWJsZSB0eXBlIHN1YnN0aXR1dGlvbi4gSXQncyBwb3NzaWJsZSB0byB1c2UgdHJhaXRzIHRvIGRvIHRoaXMgY2xlYW5seSwKZm9yIGV4YW1wbGU6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7Cgp0cmFpdCBNeVRyYW5zbXV0YWJsZVR5cGU6IFNpemVkIHsKICAgIGZuIHRyYW5zbXV0ZShfOiBWZWM8U2VsZj4pIC0+IEZvbzxTZWxmPjsKfQoKaW1wbCBNeVRyYW5zbXV0YWJsZVR5cGUgZm9yIHU4IHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8dTg+KSAtPiBGb288dTg+IHsKICAgICAgICB1bnNhZmUgeyB0cmFuc211dGUoeCkgfQogICAgfQp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgU3RyaW5nIHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8U3RyaW5nPikgLT4gRm9vPFN0cmluZz4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCi8vIC4uLiBtb3JlIGltcGxzIGZvciB0aGUgdHlwZXMgeW91IGludGVuZCB0byB0cmFuc211dGUKCmZuIGZvbzxUOiBNeVRyYW5zbXV0YWJsZVR5cGU+KHg6IFZlYzxUPikgewogICAgbGV0IHk6IEZvbzxUPiA9IDxUIGFzIE15VHJhbnNtdXRhYmxlVHlwZT46OnRyYW5zbXV0ZSh4KTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkVhY2ggaW1wbCB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgc2l6ZSBtYXRjaCBpbiB0aGUgdHJhbnNtdXRlIGFzIHVzdWFsLCBhbmQgc2luY2UKdGhlcmUgYXJlIG5vIHVuYm91bmQgdHlwZSBwYXJhbWV0ZXJzIGludm9sdmVkLCB0aGlzIHNob3VsZCBjb21waWxlIHVubGVzcyB0aGVyZQppcyBhIHNpemUgbWlzbWF0Y2ggaW4gb25lIG9mIHRoZSBpbXBscy4KCkl0IGlzIGFsc28gcG9zc2libGUgdG8gbWFudWFsbHkgdHJhbnNtdXRlOgoKYGBgCiMgdXNlIHN0ZDo6cHRyOwojIGxldCB2ID0gU29tZSgidmFsdWUiKTsKIyB0eXBlIFNvbWVUeXBlID0gJidzdGF0aWMgW3U4XTsKdW5zYWZlIHsKICAgIHB0cjo6cmVhZCgmdiBhcyAqY29uc3QgXyBhcyAqY29uc3QgU29tZVR5cGUpIC8vIGB2YCB0cmFuc211dGVkIHRvIGBTb21lVHlwZWAKfQojIDsKYGBgCgpOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBtb3ZlIGB2YCAodW5saWtlIGB0cmFuc211dGVgKSwgYW5kIG1heSBuZWVkIGEKY2FsbCB0byBgbWVtOjpmb3JnZXQodilgIGluIGNhc2UgeW91IHdhbnQgdG8gYXZvaWQgZGVzdHJ1Y3RvcnMgYmVpbmcgY2FsbGVkLgoAKv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8H5hQAAADmFPMImgEAnB4mAQAArAIAAgYArQIBAAQAxAMOAAADqwIABADEAw4AAACrAgIFAQLZAQEBAPMIAAGsAgAEAMQDDgAAAqsCAAEEAK8DJAAAA6oCAAQArwMkAAAAqgIBAQDzCAACmQEAsAMSAAACAgVFMDEzOQABHwUAAAAF8wgEAK8DJAAAAKoCAQEB9wgAAasCAJwBAMseJgEAALECAAACnAEAyx4mAQACAo8FQSBsYW5nIGl0ZW0gd2FzIHJlZGVmaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNTIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJvd25lZF9ib3giXQpzdHJ1Y3QgRm9vPFQ+KFQpOyAvLyBlcnJvcjogZHVwbGljYXRlIGxhbmcgaXRlbSBmb3VuZDogYG93bmVkX2JveGAKYGBgCgpMYW5nIGl0ZW1zIGFyZSBhbHJlYWR5IGltcGxlbWVudGVkIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LiBVbmxlc3MgeW91IGFyZQp3cml0aW5nIGEgZnJlZS1zdGFuZGluZyBhcHBsaWNhdGlvbiAoZS5nLiwgYSBrZXJuZWwpLCB5b3UgZG8gbm90IG5lZWQgdG8gcHJvdmlkZQp0aGVtIHlvdXJzZWxmLgoKWW91IGNhbiBidWlsZCBhIGZyZWUtc3RhbmRpbmcgY3JhdGUgYnkgYWRkaW5nIGAjIVtub19zdGRdYCB0byB0aGUgY3JhdGUKYXR0cmlidXRlczoKCmBgYGlnbm9yZSAob25seS1mb3Itc3ludGF4LWhpZ2hsaWdodCkKIyFbbm9fc3RkXQpgYGAKClNlZSBhbHNvIHRoZSBbdW5zdGFibGUgYm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//AY8FAAAAjwXzCJwBAMseJgEAALACAAIGALECAQAEAMQDDgAAA68CAAQAxAMOAAAArwICBQEC2QEBAQDzCAABsAIABADEAw4AAAKvAgABBACvAyQAAAOuAgAEAK8DJAAAAK4CAQEA8wgAApsBALADEgAAAgIFRTAxNTIAAR8FAAAABfMIBACvAyQAAACuAgEBAfcIAAGvAgCeAQD6HiYBAAC1AgAAAp4BAPoeJgEAAgLDBiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkltcG9ydHMgKGB1c2VgIHN0YXRlbWVudHMpIGFyZSBub3QgYWxsb3dlZCBhZnRlciBub24taXRlbSBzdGF0ZW1lbnRzLCBzdWNoIGFzCnZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLgoKSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBlcnJvcjoKCmBgYApmbiBmKCkgewogICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24gYmVmb3JlIGltcG9ydAogICAgbGV0IHggPSAwOwogICAgdXNlIHN0ZDo6aW86OlJlYWQ7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHRoZSBpbXBvcnRzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLCBmdW5jdGlvbiwgb3IKZmlsZS4KCkhlcmUgaXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgYWdhaW4sIHdpdGggdGhlIGNvcnJlY3Qgb3JkZXI6CgpgYGAKZm4gZigpIHsKICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwogICAgbGV0IHggPSAwOwogICAgLy8gLi4uCn0KYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHwwYAAADDBvMIngEA+h4mAQAAtAIAAgYAtQIBAAQAxAMOAAADswIABADEAw4AAACzAgIFAQLZAQEBAPMIAAG0AgAEAMQDDgAAArMCAAEEAK8DJAAAA7ICAAQArwMkAAAAsgIBAQDzCAACnQEAsAMSAAACAgVFMDE1NAABHwUAAAAF8wgEAK8DJAAAALICAQEB9wgAAbMCAKABAKkfJgEAALkCAAACoAEAqR8mAQACAsgGQW4gYXNzb2NpYXRlZCBjb25zdCBoYXMgYmVlbiByZWZlcmVuY2VkIGluIGEgcGF0dGVybi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNTgKZW51bSBFRm9vIHsgQSwgQiwgQywgRCB9Cgp0cmFpdCBGb28gewogICAgY29uc3QgWDogRUZvbzsKfQoKZm4gdGVzdDxBOiBGb28+KGFyZzogRUZvbykgewogICAgbWF0Y2ggYXJnIHsKICAgICAgICBBOjpYID0+IHsgLy8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJBOjpYIik7CiAgICAgICAgfQogICAgfQp9CmBgYAoKYGNvbnN0YCBhbmQgYHN0YXRpY2AgbWVhbiBkaWZmZXJlbnQgdGhpbmdzLiBBIGBjb25zdGAgaXMgYSBjb21waWxlLXRpbWUKY29uc3RhbnQsIGFuIGFsaWFzIGZvciBhIGxpdGVyYWwgdmFsdWUuIFRoaXMgcHJvcGVydHkgbWVhbnMgeW91IGNhbiBtYXRjaCBpdApkaXJlY3RseSB3aXRoaW4gYSBwYXR0ZXJuLgoKVGhlIGBzdGF0aWNgIGtleXdvcmQsIG9uIHRoZSBvdGhlciBoYW5kLCBndWFyYW50ZWVzIGEgZml4ZWQgbG9jYXRpb24gaW4gbWVtb3J5LgpUaGlzIGRvZXMgbm90IGFsd2F5cyBtZWFuIHRoYXQgdGhlIHZhbHVlIGlzIGNvbnN0YW50LiBGb3IgZXhhbXBsZSwgYSBnbG9iYWwKbXV0ZXggY2FuIGJlIGRlY2xhcmVkIGBzdGF0aWNgIGFzIHdlbGwuCgpJZiB5b3Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IGEgYHN0YXRpY2AsIGNvbnNpZGVyIHVzaW5nIGEgZ3VhcmQgaW5zdGVhZDoKCmBgYApzdGF0aWMgRk9SVFlfVFdPOiBpMzIgPSA0MjsKCm1hdGNoIFNvbWUoNDIpIHsKICAgIFNvbWUoeCkgaWYgeCA9PSBGT1JUWV9UV08gPT4ge30KICAgIF8gPT4ge30KfQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wHIBgAAAMgG8wigAQCpHyYBAAC4AgACBgC5AgEABADEAw4AAAO3AgAEAMQDDgAAALcCAgUBAtkBAQEA8wgAAbgCAAQAxAMOAAACtwIAAQQArwMkAAADtgIABACvAyQAAAC2AgEBAPMIAAKfAQCwAxIAAAICBUUwMTU4AAEfBQAAAAXzCAQArwMkAAAAtgIBAQH3CAABtwIAogEA2B8mAQAAvQIAAAKiAQDYHyYBAAICmgZBIHZhbHVlIHdhcyBtb3ZlZCB3aG9zZSBzaXplIHdhcyBub3Qga25vd24gYXQgY29tcGlsZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2MQp0cmFpdCBCYXIgewogICAgZm4gZihzZWxmKTsKfQoKaW1wbCBCYXIgZm9yIGkzMiB7CiAgICBmbiBmKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gQm94OjpuZXcoMGkzMik7CiAgICBiLmYoKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgbW92ZSBhIHZhbHVlIG9mIHR5cGUgZHluIEJhcjogdGhlIHNpemUgb2YgZHluIEJhciBjYW5ub3QKICAgIC8vICAgICAgICBiZSBzdGF0aWNhbGx5IGRldGVybWluZWQKfQpgYGAKCkluIFJ1c3QsIHlvdSBjYW4gb25seSBtb3ZlIGEgdmFsdWUgd2hlbiBpdHMgc2l6ZSBpcyBrbm93biBhdCBjb21waWxlIHRpbWUuCgpUbyB3b3JrIGFyb3VuZCB0aGlzIHJlc3RyaWN0aW9uLCBjb25zaWRlciAiaGlkaW5nIiB0aGUgdmFsdWUgYmVoaW5kIGEgcmVmZXJlbmNlOgplaXRoZXIgYCZ4YCBvciBgJm11dCB4YC4gU2luY2UgYSByZWZlcmVuY2UgaGFzIGEgZml4ZWQgc2l6ZSwgdGhpcyBsZXRzIHlvdSBtb3ZlCml0IGFyb3VuZCBhcyB1c3VhbC4gRXhhbXBsZToKCmBgYAp0cmFpdCBCYXIgewogICAgZm4gZigmc2VsZik7Cn0KCmltcGwgQmFyIGZvciBpMzIgewogICAgZm4gZigmc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCBiOiBCb3g8ZHluIEJhcj4gPSBCb3g6Om5ldygwaTMyKTsKICAgIGIuZigpOwogICAgLy8gb2shCn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oGAAAAmgbzCKIBANgfJgEAALwCAAIGAL0CAQAEAMQDDgAAA7sCAAQAxAMOAAAAuwICBQEC2QEBAQDzCAABvAIABADEAw4AAAK7AgABBACvAyQAAAO6AgAEAK8DJAAAALoCAQEA8wgAAqEBALADEgAAAgIFRTAxNjEAAR8FAAAABfMIBACvAyQAAAC6AgEBAfcIAAG7AgCkAQCHICYBAADBAgAAAqQBAIcgJgEAAgLfBCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGBpZiBsZXRgIHBhdHRlcm4gYXR0ZW1wdHMgdG8gbWF0Y2ggdGhlIHBhdHRlcm4sIGFuZCBlbnRlcnMgdGhlIGJvZHkgaWYgdGhlCm1hdGNoIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUgKHdoZW4gaXQgY2Fubm90IGZhaWwgdG8KbWF0Y2gpLCB1c2UgYSByZWd1bGFyIGBsZXRgLWJpbmRpbmcgaW5zdGVhZC4gRm9yIGluc3RhbmNlOgoKYGBgCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgovLyBUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUuCmlmIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlyciB7CiAgICAvLyBUaGlzIGJvZHkgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQuCiAgICAvLyAuLi4KfQpgYGAKClRyeSB0aGlzIGluc3RlYWQ6CgpgYGAKc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCmxldCBJcnJlZnV0YWJsZSh4KSA9IGlycjsKcHJpbnRsbiEoInt9IiwgeCk7CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8H3wQAAADfBPMIpAEAhyAmAQAAwAIAAgYAwQIBAAQAxAMOAAADvwIABADEAw4AAAC/AgIFAQLZAQEBAPMIAAHAAgAEAMQDDgAAAr8CAAEEAK8DJAAAA74CAAQArwMkAAAAvgIBAQDzCAACowEAsAMSAAACAgVFMDE2MgABHwUAAAAF8wgEAK8DJAAAAL4CAQEB9wgAAb8CAKYBALYgJgEAAMUCAAACpgEAtiAmAQACAtIEU29tZXRoaW5nIHdoaWNoIGlzIG5laXRoZXIgYSB0dXBsZSBzdHJ1Y3Qgbm9yIGEgdHVwbGUgdmFyaWFudCB3YXMgdXNlZCBhcyBhCnBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTY0CmVudW0gQSB7CiAgICBCLAogICAgQywKfQoKaW1wbCBBIHsKICAgIGZuIG5ldygpIHt9Cn0KCmZuIGJhcihmb286IEEpIHsKICAgIG1hdGNoIGZvbyB7CiAgICAgICAgQTo6bmV3KCkgPT4gKCksIC8vIGVycm9yIQogICAgICAgIF8gPT4ge30KICAgIH0KfQpgYGAKClRoaXMgZXJyb3IgbWVhbnMgdGhhdCBhbiBhdHRlbXB0IHdhcyBtYWRlIHRvIG1hdGNoIHNvbWV0aGluZyB3aGljaCBpcyBuZWl0aGVyIGEKdHVwbGUgc3RydWN0IG5vciBhIHR1cGxlIHZhcmlhbnQuIE9ubHkgdGhlc2UgdHdvIGVsZW1lbnRzIGFyZSBhbGxvd2VkIGFzIGEKcGF0dGVybjoKCmBgYAplbnVtIEEgewogICAgQiwKICAgIEMsCn0KCmltcGwgQSB7CiAgICBmbiBuZXcoKSB7fQp9CgpmbiBiYXIoZm9vOiBBKSB7CiAgICBtYXRjaCBmb28gewogICAgICAgIEE6OkIgPT4gKCksIC8vIG9rIQogICAgICAgIF8gPT4ge30KICAgIH0KfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w/SBAAAANIE8wimAQC2ICYBAADEAgACBgDFAgEABADEAw4AAAPDAgAEAMQDDgAAAMMCAgUBAtkBAQEA8wgAAcQCAAQAxAMOAAACwwIAAQQArwMkAAADwgIABACvAyQAAADCAgEBAPMIAAKlAQCwAxIAAAICBUUwMTY0AAEfBQAAAAXzCAQArwMkAAAAwgIBAQH3CAABwwIAqAEA5SAmAQAAyQIAAAKoAQDlICYBAAIC2wQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIGB3aGlsZSBsZXRgIHBhdHRlcm4gYXR0ZW1wdHMgdG8gbWF0Y2ggdGhlIHBhdHRlcm4sIGFuZCBlbnRlcnMgdGhlIGJvZHkgaWYgdGhlCm1hdGNoIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUgKHdoZW4gaXQgY2Fubm90IGZhaWwgdG8KbWF0Y2gpLCB1c2UgYSByZWd1bGFyIGBsZXRgLWJpbmRpbmcgaW5zaWRlIGEgYGxvb3BgIGluc3RlYWQuIEZvciBpbnN0YW5jZToKCmBgYG5vX3J1bgpzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKLy8gVGhpcyBmYWlscyB0byBjb21waWxlIGJlY2F1c2UgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlLgp3aGlsZSBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnIgewogICAgLy8gLi4uCn0KYGBgCgpUcnkgdGhpcyBpbnN0ZWFkOgoKYGBgbm9fcnVuCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7Cgpsb29wIHsKICAgIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlycjsKICAgIC8vIC4uLgp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bBAAAANsE8wioAQDlICYBAADIAgACBgDJAgEABADEAw4AAAPHAgAEAMQDDgAAAMcCAgUBAtkBAQEA8wgAAcgCAAQAxAMOAAACxwIAAQQArwMkAAADxgIABACvAyQAAADGAgEBAPMIAAKnAQCwAxIAAAICBUUwMTY1AAEfBQAAAAXzCAQArwMkAAAAxgIBAQH3CAABxwIAqgEAlCEmAQAAzQIAAAKqAQCUISYBAAIC3AhBIHBhdHRlcm4gYmluZGluZyBpcyB1c2luZyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgdmFyaWFudHMgb2YgYSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3MAojICMhW2Rlbnkod2FybmluZ3MpXQplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CgpmbiBpc19lbXB0eShzOiBNZXRob2QpIC0+IGJvb2wgewogICAgbWF0Y2ggcyB7CiAgICAgICAgR0VUID0+IHRydWUsCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpFbnVtIHZhcmlhbnRzIGFyZSBxdWFsaWZpZWQgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMgdHlwZToKCmBgYAplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CmBgYAoKWW91IHdvdWxkIG1hdGNoIGl0IHVzaW5nOgoKYGBgCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KCmxldCBtID0gTWV0aG9kOjpHRVQ7CgptYXRjaCBtIHsKICAgIE1ldGhvZDo6R0VUID0+IHt9LAogICAgTWV0aG9kOjpQT1NUID0+IHt9LAp9CmBgYAoKSWYgeW91IGRvbid0IHF1YWxpZnkgdGhlIG5hbWVzLCB0aGUgY29kZSB3aWxsIGJpbmQgbmV3IHZhcmlhYmxlcyBuYW1lZCAiR0VUIiBhbmQKIlBPU1QiIGluc3RlYWQuIFRoaXMgYmVoYXZpb3IgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50LCBzbyBgcnVzdGNgIHdhcm5zIHdoZW4KdGhhdCBoYXBwZW5zLgoKUXVhbGlmaWVkIG5hbWVzIGFyZSBnb29kIHByYWN0aWNlLCBhbmQgbW9zdCBjb2RlIHdvcmtzIHdlbGwgd2l0aCB0aGVtLiBCdXQgaWYKeW91IHByZWZlciB0aGVtIHVucXVhbGlmaWVkLCB5b3UgY2FuIGltcG9ydCB0aGUgdmFyaWFudHMgaW50byBzY29wZToKCmBgYAp1c2UgTWV0aG9kOjoqOwplbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYAoKSWYgeW91IHdhbnQgb3RoZXJzIHRvIGJlIGFibGUgdG8gaW1wb3J0IHZhcmlhbnRzIGZyb20geW91ciBtb2R1bGUgZGlyZWN0bHksIHVzZQpgcHViIHVzZWA6CgpgYGAKcHViIHVzZSBNZXRob2Q6Oio7CnB1YiBlbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////f9wIAAAA3AjzCKoBAJQhJgEAAMwCAAIGAM0CAQAEAMQDDgAAA8sCAAQAxAMOAAAAywICBQEC2QEBAQDzCAABzAIABADEAw4AAALLAgABBACvAyQAAAPKAgAEAK8DJAAAAMoCAQEA8wgAAqkBALADEgAAAgIFRTAxNzAAAR8FAAAABfMIBACvAyQAAADKAgEBAfcIAAHLAgCsAQDDISYBAADRAgAAAqwBAMMhJgEAAgLIBFRoZSBgK2AgdHlwZSBvcGVyYXRvciB3YXMgdXNlZCBpbiBhbiBhbWJpZ3VvdXMgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNzgKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPCdhPiB7CiAgICB4OiAmJ2EgRm9vICsgJ2EsICAgICAvLyBlcnJvciEKICAgIHk6ICYnYSBtdXQgRm9vICsgJ2EsIC8vIGVycm9yIQogICAgejogZm4oKSAtPiBGb28gKyAnYSwgLy8gZXJyb3IhCn0KYGBgCgpJbiB0eXBlcywgdGhlIGArYCB0eXBlIG9wZXJhdG9yIGhhcyBsb3cgcHJlY2VkZW5jZSwgc28gaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5CnRvIHVzZSBwYXJlbnRoZXNlczoKCmBgYAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSAoRm9vICsgJ2EpLCAgICAgLy8gb2shCiAgICB5OiAmJ2EgbXV0IChGb28gKyAnYSksIC8vIG9rIQogICAgejogZm4oKSAtPiAoRm9vICsgJ2EpLCAvLyBvayEKfQpgYGAKCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gW1JGQyA0MzhdLgoKW1JGQyA0MzhdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC80MzgKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AcgEAAAAyATzCKwBAMMhJgEAANACAAIGANECAQAEAMQDDgAAA88CAAQAxAMOAAAAzwICBQEC2QEBAQDzCAAB0AIABADEAw4AAALPAgABBACvAyQAAAPOAgAEAK8DJAAAAM4CAQEA8wgAAqsBALADEgAAAgIFRTAxNzgAAR8FAAAABfMIBACvAyQAAADOAgEBAfcIAAHPAgCuAQDyISYBAADVAgAAAq4BAPIhJgEAAgLXBk1hbnVhbCBpbXBsZW1lbnRhdGlvbiBvZiBhIGBGbipgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4MwpzdHJ1Y3QgTXlDbG9zdXJlIHsKICAgIGZvbzogaTMyCn0KCmltcGwgRm5PbmNlPCgpPiBmb3IgTXlDbG9zdXJlIHsgIC8vIGVycm9yCiAgICB0eXBlIE91dHB1dCA9ICgpOwogICAgZXh0ZXJuICJydXN0LWNhbGwiIGZuIGNhbGxfb25jZShzZWxmLCBhcmdzOiAoKSkgLT4gU2VsZjo6T3V0cHV0IHsKICAgICAgICBwcmludGxuISgie30iLCBzZWxmLmZvbyk7CiAgICB9Cn0KYGBgCgpNYW51YWxseSBpbXBsZW1lbnRpbmcgYEZuYCwgYEZuTXV0YCBvciBgRm5PbmNlYCBpcyB1bnN0YWJsZQphbmQgcmVxdWlyZXMgYCMhW2ZlYXR1cmUoZm5fdHJhaXRzLCB1bmJveGVkX2Nsb3N1cmVzKV1gLgoKYGBgCiMhW2ZlYXR1cmUoZm5fdHJhaXRzLCB1bmJveGVkX2Nsb3N1cmVzKV0KCnN0cnVjdCBNeUNsb3N1cmUgewogICAgZm9vOiBpMzIKfQoKaW1wbCBGbk9uY2U8KCk+IGZvciBNeUNsb3N1cmUgeyAgLy8gb2shCiAgICB0eXBlIE91dHB1dCA9ICgpOwogICAgZXh0ZXJuICJydXN0LWNhbGwiIGZuIGNhbGxfb25jZShzZWxmLCBhcmdzOiAoKSkgLT4gU2VsZjo6T3V0cHV0IHsKICAgICAgICBwcmludGxuISgie30iLCBzZWxmLmZvbyk7CiAgICB9Cn0KYGBgCgpUaGUgYXJndW1lbnRzIG11c3QgYmUgYSB0dXBsZSByZXByZXNlbnRpbmcgdGhlIGFyZ3VtZW50IGxpc3QuCkZvciBtb3JlIGluZm8sIHNlZSB0aGUgW3RyYWNraW5nIGlzc3VlXVtpc3MyOTYyNV06CgpbaXNzMjk2MjVdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzI5NjI1CgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wPXBgAAANcG8wiuAQDyISYBAADUAgACBgDVAgEABADEAw4AAAPTAgAEAMQDDgAAANMCAgUBAtkBAQEA8wgAAdQCAAQAxAMOAAAC0wIAAQQArwMkAAAD0gIABACvAyQAAADSAgEBAPMIAAKtAQCwAxIAAAICBUUwMTgzAAEfBQAAAAXzCAQArwMkAAAA0gIBAQH3CAAB0wIAsAEAoSImAQAA2QIAAAKwAQChIiYBAAICpwRUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2l0aCBhIGBEcm9wYCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODQKI1tkZXJpdmUoQ29weSldCnN0cnVjdCBGb287IC8vIGVycm9yIQoKaW1wbCBEcm9wIGZvciBGb28gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgIH0KfQpgYGAKCkV4cGxpY2l0bHkgaW1wbGVtZW50aW5nIGJvdGggYERyb3BgIGFuZCBgQ29weWAgdHJhaXQgb24gYSB0eXBlIGlzIGN1cnJlbnRseQpkaXNhbGxvd2VkLiBUaGlzIGZlYXR1cmUgY2FuIG1ha2Ugc29tZSBzZW5zZSBpbiB0aGVvcnksIGJ1dCB0aGUgY3VycmVudAppbXBsZW1lbnRhdGlvbiBpcyBpbmNvcnJlY3QgYW5kIGNhbiBsZWFkIHRvIG1lbW9yeSB1bnNhZmV0eSAoc2VlCltpc3N1ZSAjMjAxMjZdW2lzczIwMTI2XSksIHNvIGl0IGhhcyBiZWVuIGRpc2FibGVkIGZvciBub3cuCgpbaXNzMjAxMjZdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzIwMTI2CgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////w+nBAAAAKcE8wiwAQChIiYBAADYAgACBgDZAgEABADEAw4AAAPXAgAEAMQDDgAAANcCAgUBAtkBAQEA8wgAAdgCAAQAxAMOAAAC1wIAAQQArwMkAAAD1gIABACvAyQAAADWAgEBAPMIAAKvAQCwAxIAAAICBUUwMTg0AAEfBQAAAAXzCAQArwMkAAAA1gIBAQH3CAAB1wIAsgEA0CImAQAA3QIAAAKyAQDQIiYBAAIC1wVBbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIGZvciBhIHRyYWl0IHdhcyBkZWZpbmVkIHRvIGJlIHN0YXRpYywgYnV0IGFuCmltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFpdCBkZWNsYXJlZCB0aGUgc2FtZSBmdW5jdGlvbiB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8KdGFrZSBhIGBzZWxmYCBwYXJhbWV0ZXIpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4NQp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgaW1wbCwgYnV0IG5vdCBpbgogICAgLy8gdGhlIHRyYWl0CiAgICBmbiBmb28oJnNlbGYpIHt9Cn0KYGBgCgpXaGVuIGEgdHlwZSBpbXBsZW1lbnRzIGEgdHJhaXQncyBhc3NvY2lhdGVkIGZ1bmN0aW9uLCBpdCBoYXMgdG8gdXNlIHRoZSBzYW1lCnNpZ25hdHVyZS4gU28gaW4gdGhpcyBjYXNlLCBzaW5jZSBgRm9vOjpmb29gIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50IGFuZApkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcsIGl0cyBpbXBsZW1lbnRhdGlvbiBvbiBgQmFyYCBzaG91bGQgYmUgdGhlIHNhbWU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fSAvLyBvayEKfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wPXBQAAANcF8wiyAQDQIiYBAADcAgACBgDdAgEABADEAw4AAAPbAgAEAMQDDgAAANsCAgUBAtkBAQEA8wgAAdwCAAQAxAMOAAAC2wIAAQQArwMkAAAD2gIABACvAyQAAADaAgEBAPMIAAKxAQCwAxIAAAICBUUwMTg1AAEfBQAAAAXzCAQArwMkAAAA2gIBAQH3CAAB2wIAtAEA/yImAQAA4QIAAAK0AQD/IiYBAAIC3wVBbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIGZvciBhIHRyYWl0IHdhcyBkZWZpbmVkIHRvIGJlIGEgbWV0aG9kIChpLmUuLCB0byB0YWtlIGEKYHNlbGZgIHBhcmFtZXRlciksIGJ1dCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhaXQgZGVjbGFyZWQgdGhlIHNhbWUgZnVuY3Rpb24KdG8gYmUgc3RhdGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4Ngp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIG1ldGhvZCBgZm9vYCBoYXMgYSBgJnNlbGZgIGRlY2xhcmF0aW9uIGluIHRoZSB0cmFpdCwgYnV0IG5vdCBpbgogICAgLy8gdGhlIGltcGwKICAgIGZuIGZvbygpIHt9Cn0KYGBgCgpXaGVuIGEgdHlwZSBpbXBsZW1lbnRzIGEgdHJhaXQncyBhc3NvY2lhdGVkIGZ1bmN0aW9uLCBpdCBoYXMgdG8gdXNlIHRoZSBzYW1lCnNpZ25hdHVyZS4gU28gaW4gdGhpcyBjYXNlLCBzaW5jZSBgRm9vOjpmb29gIHRha2VzIGBzZWxmYCBhcyBhcmd1bWVudCBhbmQKZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLCBpdHMgaW1wbGVtZW50YXRpb24gb24gYEJhcmAgc2hvdWxkIGJlIHRoZSBzYW1lOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oJnNlbGYpIHt9IC8vIG9rIQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wffBQAAAN8F8wi0AQD/IiYBAADgAgACBgDhAgEABADEAw4AAAPfAgAEAMQDDgAAAN8CAgUBAtkBAQEA8wgAAeACAAQAxAMOAAAC3wIAAQQArwMkAAAD3gIABACvAyQAAADeAgEBAPMIAAKzAQCwAxIAAAICBUUwMTg2AAEfBQAAAAXzCAQArwMkAAAA3gIBAQH3CAAB3wIAtgEAriMmAQAA5QIAAAK2AQCuIyYBAAICiARBbiBhc3NvY2lhdGVkIHR5cGUgd2Fzbid0IHNwZWNpZmllZCBmb3IgYSB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTkxCnRyYWl0IFRyYWl0IHsKICAgIHR5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bW1vbiB1c2FnZSB3b3VsZCBsb29rCnNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCiNbZGVyaXZlKENvcHksQ2xvbmUpXQpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBXcmFwcGVkOiBUCn0KaW1wbCA8VD4gRm9vIGZvciBXcmFwcGVyPFQ+IHdoZXJlIFdyYXBwZXI8VD46IENsb25lIHsKICAgIGZuIGJhcigmc2VsZikgeyB9Cn0KYGBgCgpIZXJlLCB3ZSdyZSBzYXlpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZXhpc3RzIG9uIFdyYXBwZXIgb25seSB3aGVuIHRoZQp3cmFwcGVkIHR5cGUgYFRgIGltcGxlbWVudHMgYENsb25lYC4gVGhlIGB3aGVyZWAgY2xhdXNlIGlzIGltcG9ydGFudCBiZWNhdXNlCnNvbWUgdHlwZXMgd2lsbCBub3QgaW1wbGVtZW50IGBDbG9uZWAsIGFuZCB0aHVzIHdpbGwgbm90IGdldCB0aGlzIG1ldGhvZC4KCkluIG91ciBlcnJvbmVvdXMgZXhhbXBsZSwgaG93ZXZlciwgd2UncmUgcmVmZXJlbmNpbmcgYSBzaW5nbGUgY29uY3JldGUgdHlwZS4KU2luY2Ugd2Uga25vdyBmb3IgY2VydGFpbiB0aGF0IGBXcmFwcGVyPHUzMj5gIGltcGxlbWVudHMgYENsb25lYCwgdGhlcmUncyBubwpyZWFzb24gdG8gYWxzbyBzcGVjaWZ5IGl0IGluIGEgYHdoZXJlYCBjbGF1c2UuCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////f78IAAAAvwjzCLoBAIwkJgEAAOwCAAIGAO0CAQAEAMQDDgAAA+sCAAQAxAMOAAAA6wICBQEC2QEBAQDzCAAB7AIABADEAw4AAALrAgABBACvAyQAAAPqAgAEAK8DJAAAAOoCAQEA8wgAArkBALADEgAAAgIFRTAxOTMAAR8FAAAABfMIBACvAyQAAADqAgEBAfcIAAHrAgC8AQC7JCYBAADxAgAAArwBALskJgEAAgLeBVRoZSBsaWZldGltZSBwYXJhbWV0ZXJzIG9mIHRoZSBtZXRob2QgZG8gbm90IG1hdGNoIHRoZSB0cmFpdCBkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxOTUKdHJhaXQgVHJhaXQgewogICAgZm4gYmFyPCdhLCdiOidhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKTsKfQoKc3RydWN0IEZvbzsKCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBiYXI8J2EsJ2I+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpIHsKICAgIC8vIGVycm9yOiBsaWZldGltZSBwYXJhbWV0ZXJzIG9yIGJvdW5kcyBvbiBtZXRob2QgYGJhcmAKICAgIC8vIGRvIG5vdCBtYXRjaCB0aGUgdHJhaXQgZGVjbGFyYXRpb24KICAgIH0KfQpgYGAKClRoZSBsaWZldGltZSBjb25zdHJhaW50IGAnYmAgZm9yIGBiYXIoKWAgaW1wbGVtZW50YXRpb24gZG9lcyBub3QgbWF0Y2ggdGhlCnRyYWl0IGRlY2xhcmF0aW9uLiBFbnN1cmUgbGlmZXRpbWUgZGVjbGFyYXRpb25zIG1hdGNoIGV4YWN0bHkgaW4gYm90aCB0cmFpdApkZWNsYXJhdGlvbiBhbmQgaW1wbGVtZW50YXRpb24uIEV4YW1wbGU6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gdDwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cik7Cn0KCnN0cnVjdCBGb287CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gdDwnYSwnYjonYT4oeDogJidhIHN0ciwgeTogJidiIHN0cikgeyAvLyBvayEKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8D3gUAAADeBfMIvAEAuyQmAQAA8AIAAgYA8QIBAAQAxAMOAAAD7wIABADEAw4AAADvAgIFAQLZAQEBAPMIAAHwAgAEAMQDDgAAAu8CAAEEAK8DJAAAA+4CAAQArwMkAAAA7gIBAQDzCAACuwEAsAMSAAACAgVFMDE5NQABHwUAAAAF8wgEAK8DJAAAAO4CAQEB9wgAAe8CAL4BAOokJgEAAPUCAAACvgEA6iQmAQACArsDQW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCB1bnNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk3CnN0cnVjdCBGb287Cgp1bnNhZmUgaW1wbCBGb28geyB9IC8vIGVycm9yIQpgYGAKCkluaGVyZW50IGltcGxlbWVudGF0aW9ucyAob25lIHRoYXQgZG8gbm90IGltcGxlbWVudCBhIHRyYWl0IGJ1dCBwcm92aWRlCm1ldGhvZHMgYXNzb2NpYXRlZCB3aXRoIGEgdHlwZSkgYXJlIGFsd2F5cyBzYWZlIGJlY2F1c2UgdGhleSBhcmUgbm90CmltcGxlbWVudGluZyBhbiB1bnNhZmUgdHJhaXQuIFJlbW92aW5nIHRoZSBgdW5zYWZlYCBrZXl3b3JkIGZyb20gdGhlIGluaGVyZW50CmltcGxlbWVudGF0aW9uIHdpbGwgcmVzb2x2ZSB0aGlzIGVycm9yLgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7IH0gLy8gb2shCmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////B7sDAAAAuwPzCL4BAOokJgEAAPQCAAIGAPUCAQAEAMQDDgAAA/MCAAQAxAMOAAAA8wICBQEC2QEBAQDzCAAB9AIABADEAw4AAALzAgABBACvAyQAAAPyAgAEAK8DJAAAAPICAQEA8wgAAr0BALADEgAAAgIFRTAxOTcAAR8FAAAABfMIBACvAyQAAADyAgEBAfcIAAHz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ICAgIHR5cGUgUXV1eDsKICAgIGZuIGJheigmc2VsZikgLT4gYm9vbDsKfQoKaW1wbCBCYXogZm9yIEZvbyB7CiAgICB0eXBlIFF1dXggPSB1MzI7CgogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9CgogICAgLy8gZXJyb3I6IGR1cGxpY2F0ZSBtZXRob2QKICAgIGZuIGJheigmc2VsZikgLT4gYm9vbCB7IHNlbGYuMCA+IDUgfQoKICAgIC8vIGVycm9yOiBkdXBsaWNhdGUgYXNzb2NpYXRlZCB0eXBlCiAgICB0eXBlIFF1dXggPSB1MzI7Cn0KYGBgCgpOb3RlLCBob3dldmVyLCB0aGF0IGl0ZW1zIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgYWxsb3dlZCBmb3IgaW5oZXJlbnQgYGltcGxgCmJsb2NrcyB0aGF0IGRvbid0IG92ZXJsYXA6CgpgYGAKc3RydWN0IEZvbzxUPihUKTsKCmltcGwgRm9vPHU4PiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KfQoKaW1wbCBGb288Ym9vbD4gewogICAgZm4gYmFyKCZzZWxmKSAtPiBib29sIHsgc2VsZi4wIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////A7MGAAAAswbzCMYBAKYmJgEAAIQDAAIGAIUDAQAEAMQDDgAAA4MDAAQAxAMOAAAAgwMCBQEC2QEBAQDzCAABhAMABADEAw4AAAKDAwABBACvAyQAAAOCAwAEAK8DJAAAAIIDAQEA8wgAAsUBALADEgAAAgIFRTAyMDEAAR8FAAAABfMIBACvAyQAAACCAwEBAfcIAAGDAwDIAQDVJiYBAACJAwAAAsgBANUmJgEAAgLdAkhhdmluZyBtdWx0aXBsZSByZWxheGVkIGRlZmF1bHQgYm91bmRzIGlzIHVuc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIwMwpzdHJ1Y3QgQmFkPFQ6ID9TaXplZCArID9TZW5kPnsKICAgIGlubmVyOiBUCn0KYGBgCgpIZXJlIHRoZSB0eXBlIGBUYCBjYW5ub3QgaGF2ZSBhIHJlbGF4ZWQgYm91bmQgZm9yIG11bHRpcGxlIGRlZmF1bHQgdHJhaXRzCihgU2l6ZWRgIGFuZCBgU2VuZGApLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBvbmx5IHVzaW5nIG9uZSByZWxheGVkIGJvdW5kLgoKYGBgCnN0cnVjdCBHb29kPFQ6ID9TaXplZD57CiAgICBpbm5lcjogVAp9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdAgAAAN0C8wjIAQDVJiYBAACIAwACBgCJAwEABADEAw4AAAOHAwAEAMQDDgAAAIcDAgUBAtkBAQEA8wgAAYgDAAQAxAMOAAAChwMAAQQArwMkAAADhgMABACvAyQAAACGAwEBAPMIAALHAQCwAxIAAAICBUUwMjAzAAEfBQAAAAXzCAQArwMkAAAAhgMBAQH3CAABhwMAygEAhCcmAQAAjQMAAALKAQCEJyYBAAICqwVUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2hpY2ggY29udGFpbnMgYSBmaWVsZCB0aGF0IGRvZXNuJ3QKaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CnN0cnVjdCBGb28gewogICAgZm9vOiBWZWM8dTMyPiwKfQoKaW1wbCBDb3B5IGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKClRoZSBgQ29weWAgdHJhaXQgaXMgaW1wbGVtZW50ZWQgYnkgZGVmYXVsdCBvbmx5IG9uIHByaW1pdGl2ZSB0eXBlcy4gSWYgeW91cgp0eXBlIG9ubHkgY29udGFpbnMgcHJpbWl0aXZlIHR5cGVzLCB5b3UnbGwgYmUgYWJsZSB0byBpbXBsZW1lbnQgYENvcHlgIG9uIGl0LgpPdGhlcndpc2UsIGl0IHdvbid0IGJlIHBvc3NpYmxlLgoKSGVyZSdzIGFub3RoZXIgZXhhbXBsZSB0aGF0IHdpbGwgZmFpbDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAojW2Rlcml2ZShDb3B5KV0gLy8gZXJyb3IhCnN0cnVjdCBGb288J2E+IHsKICAgIHR5OiAmJ2EgbXV0IGJvb2wsCn0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYCZtdXQgVGAgaXMgbm90IGBDb3B5YCwgZXZlbiB3aGVuIGBUYCBpcyBgQ29weWAgKHRoaXMKZGlmZmVycyBmcm9tIHRoZSBiZWhhdmlvciBmb3IgYCZUYCwgd2hpY2ggaXMgYWx3YXlzIGBDb3B5YCkuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wGrBQAAAKsF8wjKAQCEJyYBAACMAwACBgCNAwEABADEAw4AAAOLAwAEAMQDDgAAAIsDAgUBAtkBAQEA8wgAAYwDAAQAxAMOAAACiwMAAQQArwMkAAADigMABACvAyQAAACKAwEBAPMIAALJAQCwAxIAAAICBUUwMjA0AAEfBQAAAAXzCAQArwMkAAAAigMBAQH3CAABiwMAzAEAsycmAQAAkQMAAALMAQCzJyYBAAIC2gUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBhdHRlbXB0IHRvIGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGZvciBhbiBlbnVtIGZhaWxlZCBiZWNhdXNlIG9uZSBvZiB0aGUKdmFyaWFudHMgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YC4gVG8gZml4IHRoaXMsIHlvdSBtdXN0IGltcGxlbWVudCBgQ29weWAgZm9yCnRoZSBtZW50aW9uZWQgdmFyaWFudC4gTm90ZSB0aGF0IHRoaXMgbWF5IG5vdCBiZSBwb3NzaWJsZSwgYXMgaW4gdGhlIGV4YW1wbGUgb2YKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAplbnVtIEZvbyB7CiAgICBCYXIoVmVjPHUzMj4pLAogICAgQmF6LAp9CgppbXBsIENvcHkgZm9yIEZvbyB7IH0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYFZlYzxUPmAgZG9lcyBub3QgaW1wbGVtZW50IGBDb3B5YCBmb3IgYW55IGBUYC4KCkhlcmUncyBhbm90aGVyIGV4YW1wbGUgdGhhdCB3aWxsIGZhaWw6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKI1tkZXJpdmUoQ29weSldCmVudW0gRm9vPCdhPiB7CiAgICBCYXIoJidhIG11dCBib29sKSwKICAgIEJheiwKfQpgYGAKClRoaXMgZmFpbHMgYmVjYXVzZSBgJm11dCBUYCBpcyBub3QgYENvcHlgLCBldmVuIHdoZW4gYFRgIGlzIGBDb3B5YCAodGhpcwpkaWZmZXJzIGZyb20gdGhlIGJlaGF2aW9yIGZvciBgJlRgLCB3aGljaCBpcyBhbHdheXMgYENvcHlgKS4KAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///x/aBQAAANoF8wjMAQCzJyYBAACQAwACBgCRAwEABADEAw4AAAOPAwAEAMQDDgAAAI8DAgUBAtkBAQEA8wgAAZADAAQAxAMOAAACjwMAAQQArwMkAAADjgMABACvAyQAAACOAwEBAPMIAALLAQCwAxIAAAICBUUwMjA1AAEfBQAAAAXzCAQArwMkAAAAjgMBAQH3CAABjwMAzgEA4icmAQAAlQMAAALOAQDiJyYBAAIC4gJUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2hpY2ggaXMgbmVpdGhlciBhIHN0cnVjdCBub3IgYW4KZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDYKI1tkZXJpdmUoQ29weSwgQ2xvbmUpXQpzdHJ1Y3QgQmFyOwoKaW1wbCBDb3B5IGZvciAmJ3N0YXRpYyBtdXQgQmFyIHsgfSAvLyBlcnJvciEKYGBgCgpZb3UgY2FuIG9ubHkgaW1wbGVtZW50IGBDb3B5YCBmb3IgYSBzdHJ1Y3Qgb3IgYW4gZW51bS4KVGhlIHByZXZpb3VzIGV4YW1wbGUgd2lsbCBmYWlsIGJlY2F1c2UgYCYnc3RhdGljIG11dCBCYXJgCmlzIG5vdCBhIHN0cnVjdCBvciBlbnVtLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////z/iAgAAAOIC8wjOAQDiJyYBAACUAwACBgCVAwEABADEAw4AAAOTAwAEAMQDDgAAAJMDAgUBAtkBAQEA8wgAAZQDAAQAxAMOAAACkwMAAQQArwMkAAADkgMABACvAyQAAACSAwEBAPMIAALNAQCwAxIAAAICBUUwMjA2AAEfBQAAAAXzCAQArwMkAAAAkgMBAQH3CAABkwMA0AEAkSgmAQAAmQMAAALQAQCRKCYBAAICqSRBIHR5cGUsIGNvbnN0IG9yIGxpZmV0aW1lIHBhcmFtZXRlciB0aGF0IGlzIHNwZWNpZmllZCBmb3IgYGltcGxgIGlzIG5vdApjb25zdHJhaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKc3RydWN0IEZvbzsKCmltcGw8VDogRGVmYXVsdD4gRm9vIHsKICAgIC8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwgc2VsZgogICAgLy8gdHlwZSwgb3IgcHJlZGljYXRlcyBbRTAyMDddCiAgICBmbiBnZXQoJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCkFueSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlciBvZiBhbiBgaW1wbGAgbXVzdCBtZWV0IGF0IGxlYXN0IG9uZSBvZiB0aGUKZm9sbG93aW5nIGNyaXRlcmlhOgoKIC0gaXQgYXBwZWFycyBpbiB0aGUgX2ltcGxlbWVudGluZyB0eXBlXyBvZiB0aGUgaW1wbCwgZS5nLiBgaW1wbDxUPiBGb288VD5gCiAtIGZvciBhIHRyYWl0IGltcGwsIGl0IGFwcGVhcnMgaW4gdGhlIF9pbXBsZW1lbnRlZCB0cmFpdF8sIGUuZy4KICAgYGltcGw8VD4gU29tZVRyYWl0PFQ+IGZvciBGb29gCiAtIGl0IGlzIGJvdW5kIGFzIGFuIGFzc29jaWF0ZWQgdHlwZSwgZS5nLiBgaW1wbDxULCBVPiBTb21lVHJhaXQgZm9yIFQKICAgd2hlcmUgVDogQW5vdGhlclRyYWl0PEFzc29jVHlwZT1VPmAKCkFueSB1bmNvbnN0cmFpbmVkIGxpZmV0aW1lIHBhcmFtZXRlciBvZiBhbiBgaW1wbGAgaXMgbm90IHN1cHBvcnRlZCBpZiB0aGUKbGlmZXRpbWUgcGFyYW1ldGVyIGlzIHVzZWQgYnkgYW4gYXNzb2NpYXRlZCB0eXBlLgoKIyMjIEVycm9yIGV4YW1wbGUgMQoKU3VwcG9zZSB3ZSBoYXZlIGEgc3RydWN0IGBGb29gIGFuZCB3ZSB3b3VsZCBsaWtlIHRvIGRlZmluZSBzb21lIG1ldGhvZHMgZm9yIGl0LgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGhhcyBhIGRlZmluaXRpb24gd2hpY2ggbGVhZHMgdG8gYSBjb21waWxlciBlcnJvcjoKClRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHBhcmFtZXRlciBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBpbXBsZW1lbnRpbmcgdHlwZQooYEZvb2ApIG9mIHRoZSBpbXBsLiBJbiB0aGlzIGNhc2UsIHdlIGNhbiBmaXggdGhlIGVycm9yIGJ5IG1vdmluZyB0aGUgdHlwZQpwYXJhbWV0ZXIgZnJvbSB0aGUgYGltcGxgIHRvIHRoZSBtZXRob2QgYGdldGA6CgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIHR5cGUgcGFyYW1ldGVyIGZyb20gdGhlIGltcGwgdG8gdGhlIG1ldGhvZAppbXBsIEZvbyB7CiAgICBmbiBnZXQ8VDogRGVmYXVsdD4oJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDIKCkFzIGFub3RoZXIgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGEgYE1ha2VyYCB0cmFpdCBhbmQgd2FudCB0byBlc3RhYmxpc2ggYQp0eXBlIGBGb29NYWtlcmAgdGhhdCBtYWtlcyBgRm9vYHM6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKdHJhaXQgTWFrZXIgewogICAgdHlwZSBJdGVtOwogICAgZm4gbWFrZSgmbXV0IHNlbGYpIC0+IFNlbGY6Okl0ZW07Cn0KCnN0cnVjdCBGb288VD4gewogICAgZm9vOiBUCn0KCnN0cnVjdCBGb29NYWtlcjsKCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyIHsKLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCi8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgpUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSB0cmFpdCBvciBpbiB0aGUKaW1wbGVtZW50aW5nIHR5cGUuCgpPbmUgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXMgdG8gaW50cm9kdWNlIGEgcGhhbnRvbSB0eXBlIHBhcmFtZXRlciBpbnRvCmBGb29NYWtlcmAsIGxpa2Ugc286CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgovLyBBZGQgYSB0eXBlIHBhcmFtZXRlciB0byBgRm9vTWFrZXJgCnN0cnVjdCBGb29NYWtlcjxUPiB7CiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTxUPiwKfQoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlciBmb3IgRm9vTWFrZXI8VD4gewogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7CiAgICAgICAgICAgIGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpBbm90aGVyIHdheSBpcyB0byBkbyBhd2F5IHdpdGggdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiBgTWFrZXJgIGFuZCB1c2UgYW4gaW5wdXQKdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZDoKCmBgYAovLyBVc2UgYSB0eXBlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0ZWQgdHlwZSBoZXJlCnRyYWl0IE1ha2VyPEl0ZW0+IHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyPEZvbzxUPj4gZm9yIEZvb01ha2VyIHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgojIyMgRXJyb3IgZXhhbXBsZSAzCgpTdXBwb3NlIHdlIGhhdmUgYSBzdHJ1Y3QgYEZvb2AgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGVmaW5lIHNvbWUgbWV0aG9kcyBmb3IgaXQuClRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIGhhcyBhIGRlZmluaXRpb24gd2hpY2ggbGVhZHMgdG8gYSBjb21waWxlciBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNwpzdHJ1Y3QgRm9vOwoKaW1wbDxjb25zdCBUOiBpMzI+IEZvbyB7CiAgICAvLyBlcnJvcjogdGhlIGNvbnN0IHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCiAgICAvLyB0eXBlLCBvciBwcmVkaWNhdGVzIFtFMDIwN10KICAgIGZuIGdldCgmc2VsZikgLT4gaTMyIHsKICAgICAgICBpMzI6OmRlZmF1bHQoKQogICAgfQp9CmBgYAoKVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29uc3QgcGFyYW1ldGVyIGBUYCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGltcGxlbWVudGluZwp0eXBlIChgRm9vYCkgb2YgdGhlIGltcGwuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgZXJyb3IgYnkgbW92aW5nIHRoZSB0eXBlCnBhcmFtZXRlciBmcm9tIHRoZSBgaW1wbGAgdG8gdGhlIG1ldGhvZCBgZ2V0YDoKCgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIGNvbnN0IHBhcmFtZXRlciBmcm9tIHRoZSBpbXBsIHRvIHRoZSBtZXRob2QKaW1wbCBGb28gewogICAgZm4gZ2V0PGNvbnN0IFQ6IGkzMj4oJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgaTMyOjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDQKClN1cHBvc2Ugd2UgaGF2ZSBhIHN0cnVjdCBgRm9vYCBhbmQgYSBzdHJ1Y3QgYEJhcmAgdGhhdCB1c2VzIGxpZmV0aW1lIGAnYWAuIFdlCndvdWxkIGxpa2UgdG8gaW1wbGVtZW50IHRyYWl0IGBDb250YWluc2AgZm9yIGBGb29gLiBUaGUgdHJhaXQgYENvbnRhaW5zYCBoYXZlCnRoZSBhc3NvY2lhdGVkIHR5cGUgYEJgLiBUaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBoYXMgYSBkZWZpbml0aW9uIHdoaWNoCmxlYWRzIHRvIGEgY29tcGlsZXIgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjwnYT47Cgp0cmFpdCBDb250YWlucyB7CiAgICB0eXBlIEI7CgogICAgZm4gZ2V0KCZzZWxmKSAtPiBpMzI7Cn0KCmltcGw8J2E+IENvbnRhaW5zIGZvciBGb28gewogICAgdHlwZSBCID0gQmFyPCdhPjsKCiAgICAvLyBlcnJvcjogdGhlIGxpZmV0aW1lIHBhcmFtZXRlciBgJ2FgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwKICAgIC8vIHNlbGYgdHlwZSwgb3IgcHJlZGljYXRlcyBbRTAyMDddCiAgICBmbiBnZXQoJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgaTMyOjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKClBsZWFzZSBub3RlIHRoYXQgdW5jb25zdHJhaW5lZCBsaWZldGltZSBwYXJhbWV0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGlmIHRoZXkgYXJlCmJlaW5nIHVzZWQgYnkgYW4gYXNzb2NpYXRlZCB0eXBlLgoKIyMjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24KCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIFtSRkMgNDQ3XS4KCltSRkMgNDQ3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDQ0Ny1uby11bnVzZWQtaW1wbC1wYXJhbWV0ZXJzLm1kCgBJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/qSQAAACpJPMI0AEAkSgmAQAAmAMAAgYAmQMBAAQAxAMOAAADlwMABADEAw4AAACXAwIFAQLZAQEBAPMIAAGYAwAEAMQDDgAAApcDAAEEAK8DJAAAA5YDAAQArwMkAAAAlgMBAQDzCAACzwEAsAMSAAACAgVFMDIwNwABHwUAAAAF8wgEAK8DJAAAAJYDAQEB9wgAAZcDANIBAMAoJgEAAJ0DAAAC0gEAwCgmAQACAuQWVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB2aW9sYXRpb24gb2Ygb25lIG9mIFJ1c3QncyBvcnBoYW4gcnVsZXMgZm9yIHRyYWl0CmltcGxlbWVudGF0aW9ucy4gVGhlIHJ1bGUgY29uY2VybnMgdGhlIHVzZSBvZiB0eXBlIHBhcmFtZXRlcnMgaW4gYW4KaW1wbGVtZW50YXRpb24gb2YgYSBmb3JlaWduIHRyYWl0IChhIHRyYWl0IGRlZmluZWQgaW4gYW5vdGhlciBjcmF0ZSksIGFuZApzdGF0ZXMgdGhhdCB0eXBlIHBhcmFtZXRlcnMgbXVzdCBiZSAiY292ZXJlZCIgYnkgYSBsb2NhbCB0eXBlLgoKV2hlbiBpbXBsZW1lbnRpbmcgYSBmb3JlaWduIHRyYWl0IGZvciBhIGZvcmVpZ24gdHlwZSwKdGhlIHRyYWl0IG11c3QgaGF2ZSBvbmUgb3IgbW9yZSB0eXBlIHBhcmFtZXRlcnMuCkEgdHlwZSBsb2NhbCB0byB5b3VyIGNyYXRlIG11c3QgYXBwZWFyIGJlZm9yZSBhbnkgdXNlIG9mIGFueSB0eXBlIHBhcmFtZXRlcnMuCgpUbyB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucywgaXQgaXMgcGVyaGFwcyBlYXNpZXIgdG8gY29uc2lkZXIgYSBmZXcgZXhhbXBsZXMuCgpJZiBgRm9yZWlnblRyYWl0YCBpcyBhIHRyYWl0IGRlZmluZWQgaW4gc29tZSBleHRlcm5hbCBjcmF0ZSBgZm9vYCwgdGhlbiB0aGUKZm9sbG93aW5nIHRyYWl0IGBpbXBsYCBpcyBhbiBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDIxMAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gY3JhdGUgZm9vOwojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQp1c2UgZm9vOjpGb3JlaWduVHJhaXQ7CiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwoKaW1wbDxUPiBGb3JlaWduVHJhaXQgZm9yIFQgeyB9IC8vIGVycm9yCiMgZm4gbWFpbigpIHt9CmBgYAoKVG8gd29yayBhcm91bmQgdGhpcywgaXQgY2FuIGJlIGNvdmVyZWQgd2l0aCBhIGxvY2FsIHR5cGUsIGBNeVR5cGVgOgoKYGBgCiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwpzdHJ1Y3QgTXlUeXBlPFQ+KFQpOwppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgTXlUeXBlPFQ+IHsgfSAvLyBPawpgYGAKClBsZWFzZSBub3RlIHRoYXQgYSB0eXBlIGFsaWFzIGlzIG5vdCBzdWZmaWNpZW50LgoKRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBhbiBlcnJvciwgc3VwcG9zZSB0aGVyZSdzIGFub3RoZXIgdHJhaXQgZGVmaW5lZCBpbiBgZm9vYApuYW1lZCBgRm9yZWlnblRyYWl0MmAgdGhhdCB0YWtlcyB0d28gdHlwZSBwYXJhbWV0ZXJzLiBUaGVuIHRoaXMgYGltcGxgIHJlc3VsdHMKaW4gdGhlIHNhbWUgcnVsZSB2aW9sYXRpb246CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKc3RydWN0IE15VHlwZTI7CmltcGw8VD4gRm9yZWlnblRyYWl0MjxULCBNeVR5cGU8VD4+IGZvciBNeVR5cGUyIHsgfSAvLyBlcnJvcgpgYGAKClRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGFwcGVhcmFuY2VzIG9mIHR5cGUgcGFyYW1ldGVyIGBUYCBpbgp0aGUgYGltcGxgIGhlYWRlciwgYm90aCBhcyBwYXJhbWV0ZXJzIGZvciBgRm9yZWlnblRyYWl0MmAuIFRoZSBmaXJzdCBhcHBlYXJhbmNlCmlzIHVuY292ZXJlZCwgYW5kIHNvIHJ1bnMgYWZvdWwgb2YgdGhlIG9ycGhhbiBydWxlLgoKQ29uc2lkZXIgb25lIG1vcmUgZXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQppbXBsPFQ+IEZvcmVpZ25UcmFpdDI8TXlUeXBlPFQ+LCBUPiBmb3IgTXlUeXBlMiB7IH0gLy8gT2sKYGBgCgpUaGlzIG9ubHkgZGlmZmVycyBmcm9tIHRoZSBwcmV2aW91cyBgaW1wbGAgaW4gdGhhdCB0aGUgcGFyYW1ldGVycyBgVGAgYW5kCmBNeVR5cGU8VD5gIGZvciBgRm9yZWlnblRyYWl0MmAgaGF2ZSBiZWVuIHN3YXBwZWQuIFRoaXMgZXhhbXBsZSBkb2VzICpub3QqCnZpb2xhdGUgdGhlIG9ycGhhbiBydWxlOyBpdCBpcyBwZXJtaXR0ZWQuCgpUbyBzZWUgd2h5IHRoYXQgbGFzdCBleGFtcGxlIHdhcyBhbGxvd2VkLCB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsCnJ1bGUuIFVuZm9ydHVuYXRlbHkgdGhpcyBydWxlIGlzIGEgYml0IHRyaWNreSB0byBzdGF0ZS4gQ29uc2lkZXIgYW4gYGltcGxgOgoKYGBgaWdub3JlIChvbmx5LWZvci1zeW50YXgtaGlnaGxpZ2h0KQppbXBsPFAxLCAuLi4sIFBtPiBGb3JlaWduVHJhaXQ8VDEsIC4uLiwgVG4+IGZvciBUMCB7IC4uLiB9CmBgYAoKd2hlcmUgYFAxLCAuLi4sIFBtYCBhcmUgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgYGltcGxgIGFuZCBgVDAsIC4uLiwgVG5gCmFyZSB0eXBlcy4gT25lIG9mIHRoZSB0eXBlcyBgVDAsIC4uLiwgVG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlICh0aGlzIGlzIGFub3RoZXIKb3JwaGFuIHJ1bGUsIHNlZSB0aGUgZXhwbGFuYXRpb24gZm9yIEUwMTE3KS4KCkJvdGggb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6CjEuIEF0IGxlYXN0IG9uZSBvZiB0aGUgdHlwZXMgYFQwLi49VG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlLgpMZXQgYFRpYCBiZSB0aGUgZmlyc3Qgc3VjaCB0eXBlLgoyLiBObyB1bmNvdmVyZWQgdHlwZSBwYXJhbWV0ZXJzIGBQMS4uPVBtYCBtYXkgYXBwZWFyIGluIGBUMC4uVGlgCihleGNsdWRpbmcgYFRpYCkuCgpGb3IgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBvZiB0aGUgb3JwaGFuIHJ1bGVzLApzZWUgW1JGQyAyNDUxXSBhbmQgW1JGQyAxMDIzXS4KCltSRkMgMjQ1MV06IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9yZmNzLzI0NTEtcmUtcmViYWxhbmNpbmctY29oZXJlbmNlLmh0bWwKW1JGQyAxMDIzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTAyMy1yZWJhbGFuY2luZy1jb2hlcmVuY2UubWQKAC7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wHkFgAAAOQW8wjSAQDAKCYBAACcAwACBgCdAwEABADEAw4AAAObAwAEAMQDDgAAAJsDAgUBAtkBAQEA8wgAAZwDAAQAxAMOAAACmwMAAQQArwMkAAADmgMABACvAyQAAACaAwEBAPMIAALRAQCwAxIAAAICBUUwMjEwAAEfBQAAAAXzCAQArwMkAAAAmgMBAQH3CAABmwMA1AEA7ygmAQAAoQMAAALUAQDvKCYBAAICiwwjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdXNlZCBhIGZ1bmN0aW9uIG9yIHR5cGUgd2hpY2ggZG9lc24ndCBmaXQgdGhlIHJlcXVpcmVtZW50cyBmb3Igd2hlcmUgaXQgd2FzCnVzZWQuIEVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxUPigpOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyB0eXBlCn0KCi8vIG9yOgoKZm4gbWFpbigpIC0+IGkzMiB7IDAgfQovLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBleHBlY3RzIHR5cGU6IGBmbigpIHttYWlufWA6IGV4cGVjdGVkICgpLCBmb3VuZCBpMzIKCi8vIG9yOgoKbGV0IHggPSAxdTg7Cm1hdGNoIHggewogICAgMHU4Li49M2k4ID0+ICgpLAogICAgLy8gZXJyb3I6IG1pc21hdGNoZWQgdHlwZXMgaW4gcmFuZ2U6IGV4cGVjdGVkIHU4LCBmb3VuZCBpOAogICAgXyA9PiAoKQp9CgovLyBvcjoKCnVzZSBzdGQ6OnJjOjpSYzsKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIHgoc2VsZjogUmM8Rm9vPikge30KICAgIC8vIGVycm9yOiBtaXNtYXRjaGVkIHNlbGYgdHlwZTogZXhwZWN0ZWQgYEZvb2A6IGV4cGVjdGVkIHN0cnVjdAogICAgLy8gICAgICAgIGBGb29gLCBmb3VuZCBzdHJ1Y3QgYGFsbG9jOjpyYzo6UmNgCn0KYGBgCgpGb3IgdGhlIGZpcnN0IGNvZGUgZXhhbXBsZSwgcGxlYXNlIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKClRoZSBzZWNvbmQgY2FzZSBleGFtcGxlIGlzIGEgYml0IHBhcnRpY3VsYXI6IHRoZSBtYWluIGZ1bmN0aW9uIG11c3QgYWx3YXlzCmhhdmUgdGhpcyBkZWZpbml0aW9uOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKTsKYGBgCgpUaGV5IG5ldmVyIHRha2UgcGFyYW1ldGVycyBhbmQgbmV2ZXIgcmV0dXJuIHR5cGVzLgoKRm9yIHRoZSB0aGlyZCBleGFtcGxlLCB3aGVuIHlvdSBtYXRjaCwgYWxsIHBhdHRlcm5zIG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlCmFzIHRoZSB0eXBlIHlvdSdyZSBtYXRjaGluZyBvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDF1ODsKCm1hdGNoIHggewogICAgMHU4Li49M3U4ID0+ICgpLCAvLyBvayEKICAgIF8gPT4gKCkKfQpgYGAKCkFuZCBmaW5hbGx5LCBmb3IgdGhlIGxhc3QgZXhhbXBsZSwgb25seSBgQm94PFNlbGY+YCwgYCZTZWxmYCwgYFNlbGZgLApvciBgJm11dCBTZWxmYCB3b3JrIGFzIGV4cGxpY2l0IHNlbGYgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4geChzZWxmOiBCb3g8Rm9vPikge30gLy8gb2shCn0KYGBgCgAZ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/w+LDAAAAIsM8wjUAQDvKCYBAACgAwACBgChAwEABADEAw4AAAOfAwAEAMQDDgAAAJ8DAgUBAtkBAQEA8wgAAaADAAQAxAMOAAACnwMAAQQArwMkAAADngMABACvAyQAAACeAwEBAPMIAALTAQCwAxIAAAICBUUwMjExAAEfBQAAAAXzCAQArwMkAAAAngMBAQH3CAABnwMA1gEAnikmAQAApQMAAALWAQCeKSYBAAICpgVDYW5ub3QgdXNlIHRoZSBhc3NvY2lhdGVkIHR5cGUgb2YKYSB0cmFpdCB3aXRoIHVuaW5mZXJyZWQgZ2VuZXJpYyBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxMgpwdWIgdHJhaXQgRm9vPFQ+IHsKICAgIHR5cGUgQTsKCiAgICBmbiBnZXQoJnNlbGYsIHQ6IFQpIC0+IFNlbGY6OkE7Cn0KCmZuIGZvbzI8SSA6IGZvcjwneD4gRm9vPCYneCBpc2l6ZT4+KAogICAgZmllbGQ6IEk6OkEpIHt9IC8vIGVycm9yIQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgaGF2ZSB0byBpbnN0YW50aWF0ZSBgJ3hgLCBhbmQKd2UgZG9uJ3Qga25vdyB3aGF0IGxpZmV0aW1lIHRvIGluc3RhbnRpYXRlIGl0IHdpdGguClRvIGZpeCB0aGlzLCBzcGVsbCBvdXQgdGhlIHByZWNpc2UgbGlmZXRpbWVzIGludm9sdmVkLgpFeGFtcGxlOgoKYGBgCnB1YiB0cmFpdCBGb288VD4gewogICAgdHlwZSBBOwoKICAgIGZuIGdldCgmc2VsZiwgdDogVCkgLT4gU2VsZjo6QTsKfQoKZm4gZm9vMzxJIDogZm9yPCd4PiBGb288Jid4IGlzaXplPj4oCiAgICB4OiA8SSBhcyBGb288JmlzaXplPj46OkEpIHt9IC8vIG9rIQoKCmZuIGZvbzQ8J2EsIEkgOiBmb3I8J3g+IEZvbzwmJ3ggaXNpemU+PigKICAgIHg6IDxJIGFzIEZvbzwmJ2EgaXNpemU+Pjo6QSkge30gLy8gb2shCmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wemBQAAAKYF8wjWAQCeKSYBAACkAwACBgClAwEABADEAw4AAAOjAwAEAMQDDgAAAKMDAgUBAtkBAQEA8wgAAaQDAAQAxAMOAAACowMAAQQArwMkAAADogMABACvAyQAAACiAwEBAPMIAALVAQCwAxIAAAICBUUwMjEyAAEfBQAAAAXzCAQArwMkAAAAogMBAQH3CAABowMA2AEAzSkmAQAAqQMAAALYAQDNKSYBAAICmgNBIGdlbmVyaWMgdHlwZSB3YXMgZGVzY3JpYmVkIHVzaW5nIHBhcmVudGhlc2VzIHJhdGhlciB0aGFuIGFuZ2xlIGJyYWNrZXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxNApsZXQgdjogVmVjKCZzdHIpID0gdmVjIVsiZm9vIl07CmBgYAoKVGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDogYHZgIHNob3VsZCBiZSBkZWZpbmVkIGFzIGBWZWM8JnN0cj5gLgpQYXJlbnRoZXNlcyBhcmUgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIGdlbmVyaWMgdHlwZXMgd2hlbiBkZWZpbmluZyBwYXJhbWV0ZXJzCmZvciBgRm5gLWZhbWlseSB0cmFpdHMuCgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGZpeGVkOgoKYGBgCmxldCB2OiBWZWM8JnN0cj4gPSB2ZWMhWyJmb28iXTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////H5oDAAAAmgPzCNgBAM0pJgEAAKgDAAIGAKkDAQAEAMQDDgAAA6cDAAQAxAMOAAAApwMCBQEC2QEBAQDzCAABqAMABADEAw4AAAKnAwABBACvAyQAAAOmAwAEAK8DJAAAAKYDAQEA8wgAAtcBALADEgAAAgIFRTAyMTQAAR8FAAAABfMIBACvAyQAAACmAwEBAfcIAAGnAwDaAQD8KSYBAACtAwAAAtoBAPwpJgEAAgKJBlRoZSBhc3NvY2lhdGVkIHR5cGUgdXNlZCB3YXMgbm90IGRlZmluZWQgaW4gdGhlIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxGPWkzMj47IC8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYEZgIG5vdCBmb3VuZCBmb3IgYFQxYAoKLy8gb3I6Cgp0cmFpdCBUMiB7CiAgICB0eXBlIEJhcjsKCiAgICAvLyBlcnJvcjogQmF6IGlzIHVzZWQgYnV0IG5vdCBkZWNsYXJlZAogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCgpNYWtlIHN1cmUgdGhhdCB5b3UgaGF2ZSBkZWZpbmVkIHRoZSBhc3NvY2lhdGVkIHR5cGUgaW4gdGhlIHRyYWl0IGJvZHkuCkFsc28sIHZlcmlmeSB0aGF0IHlvdSB1c2VkIHRoZSByaWdodCB0cmFpdCBvciB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZQphc3NvY2lhdGVkIHR5cGUgbmFtZS4gRXhhbXBsZToKCmBgYAp0cmFpdCBUMSB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUMTxCYXI9aTMyPjsgLy8gb2shCgovLyBvcjoKCnRyYWl0IFQyIHsKICAgIHR5cGUgQmFyOwogICAgdHlwZSBCYXo7IC8vIHdlIGRlY2xhcmUgYEJhemAgaW4gb3VyIHRyYWl0LgoKICAgIC8vIGFuZCBub3cgd2UgY2FuIHVzZSBpdCBoZXJlOgogICAgZm4gcmV0dXJuX2Jvb2woJnNlbGYsIF86ICZTZWxmOjpCYXIsIF86ICZTZWxmOjpCYXopIC0+IGJvb2w7Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wOJBgAAAIkG8wjaAQD8KSYBAACsAwACBgCtAwEABADEAw4AAAOrAwAEAMQDDgAAAKsDAgUBAtkBAQEA8wgAAawDAAQAxAMOAAACqwMAAQQArwMkAAADqgMABACvAyQAAACqAwEBAPMIAALZAQCwAxIAAAICBUUwMjIwAAEfBQAAAAXzCAQArwMkAAAAqgMBAQH3CAABqwMA3AEAqyomAQAAsQMAAALcAQCrKiYBAAICgAdBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJldHJpZXZlIGFuIGFzc29jaWF0ZWQgdHlwZSwgYnV0IHRoZSB0eXBlIHdhcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIxCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IFNlbGY6OkE7CiAgICB9Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBGb29gIGRlZmluZXMgYW4gYXNzb2NpYXRlZCB0eXBlIGBBYC4gYEJhcmAgaW5oZXJpdHMgdGhhdCB0eXBlCmZyb20gYEZvb2AsIGFuZCBkZWZpbmVzIGFub3RoZXIgYXNzb2NpYXRlZCB0eXBlIG9mIHRoZSBzYW1lIG5hbWUuIEFzIGEgcmVzdWx0LAp3aGVuIHdlIGF0dGVtcHQgdG8gdXNlIGBTZWxmOjpBYCwgaXQncyBhbWJpZ3VvdXMgd2hldGhlciB3ZSBtZWFuIHRoZSBgQWAgZGVmaW5lZApieSBgRm9vYCBvciB0aGUgb25lIGRlZmluZWQgYnkgYEJhcmAuCgpUaGVyZSBhcmUgdHdvIG9wdGlvbnMgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4gVGhlIGZpcnN0IGlzIHNpbXBseSB0byByZW5hbWUKb25lIG9mIHRoZSB0eXBlcy4gQWx0ZXJuYXRpdmVseSwgb25lIGNhbiBzcGVjaWZ5IHRoZSBpbnRlbmRlZCB0eXBlIHVzaW5nIHRoZQpmb2xsb3dpbmcgc3ludGF4OgoKYGBgCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IDxTZWxmIGFzIEJhcj46OkE7CiAgICB9Cn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAgAcAAACAB/MI3AEAqyomAQAAsAMAAgYAsQMBAAQAxAMOAAADrwMABADEAw4AAACvAwIFAQLZAQEBAPMIAAGwAwAEAMQDDgAAAq8DAAEEAK8DJAAAA64DAAQArwMkAAAArgMBAQDzCAAC2wEAsAMSAAACAgVFMDIyMQABHwUAAAAF8wgEAK8DJAAAAK4DAQEB9wgAAa8DAN4BANoqJgEAALUDAAAC3gEA2iomAQACAsgKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjb25zdHJhaW4gYW4gYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMgpwdWIgdHJhaXQgVmVoaWNsZSB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94IHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3hDYXIgOiBCb3ggKyBWZWhpY2xlIHt9CgpmbiBkZW50X29iamVjdDxDT0xPUj4oYzogZHluIEJveENhcjxDb2xvcj1DT0xPUj4pIHt9IC8vIEludmFsaWQgY29uc3RyYWludApgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEJveENhcmAgaGFzIHR3byBzdXBlcnRyYWl0czogYFZlaGljbGVgIGFuZCBgQm94YC4gQm90aCBvZgp0aGVzZSB0cmFpdHMgZGVmaW5lIGFuIGFzc29jaWF0ZWQgdHlwZSBgQ29sb3JgLiBgQm94Q2FyYCBpbmhlcml0cyB0d28gdHlwZXMKd2l0aCB0aGF0IG5hbWUgZnJvbSBib3RoIHN1cGVydHJhaXRzLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gdXNlIHRoZQpmdWxseSBxdWFsaWZpZWQgcGF0aCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGBDb2xvcmAgYXNzb2NpYXRlZAp0eXBlLCBlaXRoZXIgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCBvciBgPEJveENhciBhcyBCb3g+OjpDb2xvcmAsIGJ1dCB0aGlzCnN5bnRheCBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGluIGEgZnVuY3Rpb24gc2lnbmF0dXJlLgoKSW4gb3JkZXIgdG8gZW5jb2RlIHRoaXMga2luZCBvZiBjb25zdHJhaW50LCBhIGB3aGVyZWAgY2xhdXNlIGFuZCBhIG5ldyB0eXBlCnBhcmFtZXRlciBhcmUgbmVlZGVkOgoKYGBgCnB1YiB0cmFpdCBWZWhpY2xlIHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3ggewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveENhciA6IEJveCArIFZlaGljbGUge30KCi8vIEludHJvZHVjZSBhIG5ldyBgQ0FSYCB0eXBlIHBhcmFtZXRlcgpmbiBmb288Q0FSLCBDT0xPUj4oCiAgICBjOiBDQVIsCikgd2hlcmUKICAgIC8vIEJpbmQgdGhlIHR5cGUgcGFyYW1ldGVyIGBDQVJgIHRvIHRoZSB0cmFpdCBgQm94Q2FyYAogICAgQ0FSOiBCb3hDYXIsCiAgICAvLyBGdXJ0aGVyIHJlc3RyaWN0IGA8Qm94Q2FyIGFzIFZlaGljbGU+OjpDb2xvcmAgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCiAgICAvLyB0eXBlIHBhcmFtZXRlciBgQ09MT1JgCiAgICBDQVI6IFZlaGljbGU8Q29sb3IgPSBDT0xPUj4sCiAgICAvLyBXZSBjYW4gYWxzbyBzaW11bHRhbmVvdXNseSByZXN0cmljdCB0aGUgb3RoZXIgdHJhaXQncyBhc3NvY2lhdGVkIHR5cGUKICAgIENBUjogQm94PENvbG9yID0gQ09MT1I+Cnt9CmBgYAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8ByAoAAADICvMI3gEA2iomAQAAtAMAAgYAtQMBAAQAxAMOAAADswMABADEAw4AAACzAwIFAQLZAQEBAPMIAAG0AwAEAMQDDgAAArMDAAEEAK8DJAAAA7IDAAQArwMkAAAAsgMBAQDzCAAC3QEAsAMSAAACAgVFMDIyMgABHwUAAAAF8wgEAK8DJAAAALIDAQEB9wgAAbMDAOABAIkrJgEAALkDAAAC4AEAiSsmAQACAuwGQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byByZXRyaWV2ZSBhbiBhc3NvY2lhdGVkIHR5cGUsIGJ1dCB0aGUgdHlwZSB3YXMgYW1iaWd1b3VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMwp0cmFpdCBNeVRyYWl0IHt0eXBlIFg7IH0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vOiBNeVRyYWl0OjpYOwp9CmBgYAoKVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IHdlJ3JlIGF0dGVtcHRpbmcgdG8gdGFrZSB0aGUgdHlwZSBvZiBYIGZyb20gTXlUcmFpdC4KVW5mb3J0dW5hdGVseSwgdGhlIHR5cGUgb2YgWCBpcyBub3QgZGVmaW5lZCwgYmVjYXVzZSBpdCdzIG9ubHkgbWFkZSBjb25jcmV0ZSBpbgppbXBsZW1lbnRhdGlvbnMgb2YgdGhlIHRyYWl0LiBBIHdvcmtpbmcgdmVyc2lvbiBvZiB0aGlzIGNvZGUgbWlnaHQgbG9vayBsaWtlOgoKYGBgCnRyYWl0IE15VHJhaXQge3R5cGUgWDsgfQpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIE15VHJhaXQgZm9yIE15U3RydWN0IHsKICAgIHR5cGUgWCA9IHUzMjsKfQoKZm4gbWFpbigpIHsKICAgIGxldCBmb286IDxNeVN0cnVjdCBhcyBNeVRyYWl0Pjo6WDsKfQpgYGAKClRoaXMgc3ludGF4IHNwZWNpZmllcyB0aGF0IHdlIHdhbnQgdGhlIFggdHlwZSBmcm9tIE15VHJhaXQsIGFzIG1hZGUgY29uY3JldGUgaW4KTXlTdHJ1Y3QuIFRoZSByZWFzb24gdGhhdCB3ZSBjYW5ub3Qgc2ltcGx5IHVzZSBgTXlTdHJ1Y3Q6OlhgIGlzIHRoYXQgTXlTdHJ1Y3QKbWlnaHQgaW1wbGVtZW50IHR3byBkaWZmZXJlbnQgdHJhaXRzIHdpdGggaWRlbnRpY2FsbHktbmFtZWQgYXNzb2NpYXRlZCB0eXBlcy4KVGhpcyBzeW50YXggYWxsb3dzIGRpc2FtYmlndWF0aW9uIGJldHdlZW4gdGhlIHR3by4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////A+wGAAAA7AbzCOABAIkrJgEAALgDAAIGALkDAQAEAMQDDgAAA7cDAAQAxAMOAAAAtwMCBQEC2QEBAQDzCAABuAMABADEAw4AAAK3AwABBACvAyQAAAO2AwAEAK8DJAAAALYDAQEA8wgAAt8BALADEgAAAgIFRTAyMjMAAR8FAAAABfMIBACvAyQAAAC2AwEBAfcIAAG3AwDiAQC4KyYBAAC9AwAAAuIBALgrJgEAAgKJAkEgdHJhaXQgb2JqZWN0IHdhcyBkZWNsYXJlZCB3aXRoIG5vIHRyYWl0cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjQKdHlwZSBGb28gPSBkeW4gJ3N0YXRpYyArOwpgYGAKClJ1c3QgZG9lcyBub3QgY3VycmVudGx5IHN1cHBvcnQgdGhpcy4KClRvIHNvbHZlLCBlbnN1cmUgdGhhdCB0aGUgdHJhaXQgb2JqZWN0IGhhcyBhdCBsZWFzdCBvbmUgdHJhaXQ6CgpgYGAKdHlwZSBGb28gPSBkeW4gJ3N0YXRpYyArIENvcHk7CmBgYAoABf///////////wH///////////8B////////////Af///////////wH/A4kCAAAAiQLzCOIBALgrJgEAALwDAAIGAL0DAQAEAMQDDgAAA7sDAAQAxAMOAAAAuwMCBQEC2QEBAQDzCAABvAMABADEAw4AAAK7AwABBACvAyQAAAO6AwAEAK8DJAAAALoDAQEA8wgAAuEBALADEgAAAgIFRTAyMjQAAR8FAAAABfMIBACvAyQAAAC6AwEBAfcIAAG7AwDkAQDnKyYBAADBAwAAAuQBAOcrJgEAAgLvA011bHRpcGxlIHR5cGVzIHdlcmUgdXNlZCBhcyBib3VuZHMgZm9yIGEgY2xvc3VyZSBvciB0cmFpdCBvYmplY3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI1CmZuIG1haW4oKSB7CiAgICBsZXQgXzogQm94PGR5biBzdGQ6OmlvOjpSZWFkICsgc3RkOjppbzo6V3JpdGU+Owp9CmBgYAoKUnVzdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzLgoKQXV0byB0cmFpdHMgc3VjaCBhcyBTZW5kIGFuZCBTeW5jIGFyZSBhbiBleGNlcHRpb24gdG8gdGhpcyBydWxlOgpJdCdzIHBvc3NpYmxlIHRvIGhhdmUgYm91bmRzIG9mIG9uZSBub24tYnVpbHRpbiB0cmFpdCwgcGx1cyBhbnkgbnVtYmVyIG9mCmF1dG8gdHJhaXRzLiBGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBjb21waWxlcyBjb3JyZWN0bHk6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBfOiBCb3g8ZHluIHN0ZDo6aW86OlJlYWQgKyBTZW5kICsgU3luYz47Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x/vAwAAAO8D8wjkAQDnKyYBAADAAwACBgDBAwEABADEAw4AAAO/AwAEAMQDDgAAAL8DAgUBAtkBAQEA8wgAAcADAAQAxAMOAAACvwMAAQQArwMkAAADvgMABACvAyQAAAC+AwEBAPMIAALjAQCwAxIAAAICBUUwMjI1AAEfBQAAAAXzCAQArwMkAAAAvgMBAQH3CAABvwMA5gEAliwmAQAAxQMAAALmAQCWLCYBAAICnARNb3JlIHRoYW4gb25lIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIHdhcyB1c2VkIG9uIGEgdHJhaXQgb2JqZWN0LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNgp0cmFpdCBGb28ge30KCnR5cGUgVDwnYSwgJ2I+ID0gZHluIEZvbyArICdhICsgJ2I7IC8vIGVycm9yOiBUcmFpdCBvYmplY3QgYGFyZ2AgaGFzIHR3bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbGlmZXRpbWUgYm91bmQsICdhIGFuZCAnYi4KYGBgCgpIZXJlIGBUYCBpcyBhIHRyYWl0IG9iamVjdCB3aXRoIHR3byBleHBsaWNpdCBsaWZldGltZSBib3VuZHMsICdhIGFuZCAnYi4KCk9ubHkgYSBzaW5nbGUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgaXMgcGVybWl0dGVkIG9uIHRyYWl0IG9iamVjdHMuClRvIGZpeCB0aGlzIGVycm9yLCBjb25zaWRlciByZW1vdmluZyBvbmUgb2YgdGhlIGxpZmV0aW1lIGJvdW5kczoKCmBgYAp0cmFpdCBGb28ge30KCnR5cGUgVDwnYT4gPSBkeW4gRm9vICsgJ2E7CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////f5wEAAAAnATzCOYBAJYsJgEAAMQDAAIGAMUDAQAEAMQDDgAAA8MDAAQAxAMOAAAAwwMCBQEC2QEBAQDzCAABxAMABADEAw4AAALDAwABBACvAyQAAAPCAwAEAK8DJAAAAMIDAQEA8wgAAuUBALADEgAAAgIFRTAyMjYAAR8FAAAABfMIBACvAyQAAADCAwEBAfcIAAHDAwDoAQDFLCYBAADJAwAAAugBAMUsJgEAAgKxBVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcwpleGFjdGx5IG9uZSB1bmlxdWUgcmVnaW9uIGluIHRoZSBzZXQgb2YgZGVyaXZlZCByZWdpb24gYm91bmRzLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNwp0cmFpdCBGb288J2Zvbz46ICdmb28ge30KdHJhaXQgQmFyPCdiYXI+OiAnYmFyIHt9Cgp0cmFpdCBGb29CYXI8J2ZvbywgJ2Jhcj46IEZvbzwnZm9vPiArIEJhcjwnYmFyPiB7fQoKc3RydWN0IEJhejwnZm9vLCAnYmFyPiB7CiAgICBiYXo6IGR5biBGb29CYXI8J2ZvbywgJ2Jhcj4sCn0KYGBgCgpIZXJlLCBgYmF6YCBjYW4gaGF2ZSBlaXRoZXIgYCdmb29gIG9yIGAnYmFyYCBsaWZldGltZXMuCgpUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHByb3ZpZGUgYW4gZXhwbGljaXQgbGlmZXRpbWU6CgpgYGBydXN0CnRyYWl0IEZvbzwnZm9vPjogJ2ZvbyB7fQp0cmFpdCBCYXI8J2Jhcj46ICdiYXIge30KCnRyYWl0IEZvb0JhcjwnZm9vLCAnYmFyPjogRm9vPCdmb28+ICsgQmFyPCdiYXI+IHt9CgpzdHJ1Y3QgQmF6PCdmb28sICdiYXIsICdiYXo+CndoZXJlCiAgICAnYmF6OiAnZm9vICsgJ2JhciwKewogICAgb2JqOiBkeW4gRm9vQmFyPCdmb28sICdiYXI+ICsgJ2JheiwKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f7EFAAAAsQXzCOgBAMUsJgEAAMgDAAIGAMkDAQAEAMQDDgAAA8cDAAQAxAMOAAAAxwMCBQEC2QEBAQDzCAAByAMABADEAw4AAALHAwABBACvAyQAAAPGAwAEAK8DJAAAAMYDAQEA8wgAAucBALADEgAAAgIFRTAyMjcAAR8FAAAABfMIBACvAyQAAADGAwEBAfcIAAHHAwDqAQD0LCYBAADNAwAAAuoBAPQsJgEAAgLDCFRoZSBsaWZldGltZSBib3VuZCBmb3IgdGhpcyBvYmplY3QgdHlwZSBjYW5ub3QgYmUgZGVkdWNlZCBmcm9tIGNvbnRleHQgYW5kIG11c3QKYmUgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyOAp0cmFpdCBUcmFpdCB7IH0KCnN0cnVjdCBUd29Cb3VuZHM8J2EsICdiLCBUOiBTaXplZCArICdhICsgJ2I+IHsKICAgIHg6ICYnYSBpMzIsCiAgICB5OiAmJ2IgaTMyLAogICAgejogVCwKfQoKdHlwZSBGb288J2EsICdiPiA9IFR3b0JvdW5kczwnYSwgJ2IsIGR5biBUcmFpdD47CmBgYAoKV2hlbiBhIHRyYWl0IG9iamVjdCBpcyB1c2VkIGFzIGEgdHlwZSBhcmd1bWVudCBvZiBhIGdlbmVyaWMgdHlwZSwgUnVzdCB3aWxsIHRyeQp0byBpbmZlciBpdHMgbGlmZXRpbWUgaWYgdW5zcGVjaWZpZWQuIEhvd2V2ZXIsIHRoaXMgaXNuJ3QgcG9zc2libGUgd2hlbiB0aGUKY29udGFpbmluZyB0eXBlIGhhcyBtb3JlIHRoYW4gb25lIGxpZmV0aW1lIGJvdW5kLgoKVGhlIGFib3ZlIGV4YW1wbGUgY2FuIGJlIHJlc29sdmVkIGJ5IGVpdGhlciByZWR1Y2luZyB0aGUgbnVtYmVyIG9mIGxpZmV0aW1lCmJvdW5kcyB0byBvbmUgb3IgYnkgbWFraW5nIHRoZSB0cmFpdCBvYmplY3QgbGlmZXRpbWUgZXhwbGljaXQsIGxpa2Ugc286CgpgYGAKdHJhaXQgVHJhaXQgeyB9CgpzdHJ1Y3QgVHdvQm91bmRzPCdhLCAnYiwgVDogU2l6ZWQgKyAnYSArICdiPiB7CiAgICB4OiAmJ2EgaTMyLAogICAgeTogJidiIGkzMiwKICAgIHo6IFQsCn0KCnR5cGUgRm9vPCdhLCAnYj4gPSBUd29Cb3VuZHM8J2EsICdiLCBkeW4gVHJhaXQgKyAnYj47CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbUkZDIDU5OV0gYW5kIGl0cyBhbWVuZG1lbnQgW1JGQyAxMTU2XS4KCltSRkMgNTk5XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDU5OS1kZWZhdWx0LW9iamVjdC1ib3VuZC5tZApbUkZDIDExNTZdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8xMTU2LWFkanVzdC1kZWZhdWx0LW9iamVjdC1ib3VuZHMubWQKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQfDCAAAAMMI8wjqAQD0LCYBAADMAwACBgDNAwEABADEAw4AAAPLAwAEAMQDDgAAAMsDAgUBAtkBAQEA8wgAAcwDAAQAxAMOAAACywMAAQQArwMkAAADygMABACvAyQAAADKAwEBAPMIAALpAQCwAxIAAAICBUUwMjI4AAEfBQAAAAXzCAQArwMkAAAAygMBAQH3CAABywMA7AEAoy0mAQAA0QMAAALsAQCjLSYBAAICzQVBbiBhc3NvY2lhdGVkIHR5cGUgYmluZGluZyB3YXMgZG9uZSBvdXRzaWRlIG9mIHRoZSB0eXBlIHBhcmFtZXRlciBkZWNsYXJhdGlvbgphbmQgYHdoZXJlYCBjbGF1c2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjI5CnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBOwogICAgZm4gYm9vKCZzZWxmKSAtPiA8U2VsZiBhcyBGb28+OjpBOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIGlzaXplIHsKICAgIHR5cGUgQSA9IHVzaXplOwogICAgZm4gYm9vKCZzZWxmKSAtPiB1c2l6ZSB7IDQyIH0KfQoKZm4gYmF6PEk+KHg6ICY8SSBhcyBGb288QT1CYXI+Pjo6QSkge30KLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBiaW5kaW5ncyBhcmUgbm90IGFsbG93ZWQgaGVyZQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IsIHBsZWFzZSBtb3ZlIHRoZSB0eXBlIGJpbmRpbmdzIGluIHRoZSB0eXBlIHBhcmFtZXRlcgpkZWNsYXJhdGlvbjoKCmBgYAojIHN0cnVjdCBCYXI7CiMgdHJhaXQgRm9vIHsgdHlwZSBBOyB9CmZuIGJhejxJOiBGb288QT1CYXI+Pih4OiAmPEkgYXMgRm9vPjo6QSkge30gLy8gb2shCmBgYAoKT3IgaW4gdGhlIGB3aGVyZWAgY2xhdXNlOgoKYGBgCiMgc3RydWN0IEJhcjsKIyB0cmFpdCBGb28geyB0eXBlIEE7IH0KZm4gYmF6PEk+KHg6ICY8SSBhcyBGb28+OjpBKSB3aGVyZSBJOiBGb288QT1CYXI+IHt9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NBQAAAM0F8wjsAQCjLSYBAADQAwACBgDRAwEABADEAw4AAAPPAwAEAMQDDgAAAM8DAgUBAtkBAQEA8wgAAdADAAQAxAMOAAACzwMAAQQArwMkAAADzgMABACvAyQAAADOAwEBAPMIAALrAQCwAxIAAAICBUUwMjI5AAEfBQAAAAXzCAQArwMkAAAAzgMBAQH3CAABzwMA7gEA0i0mAQAA1QMAAALuAQDSLSYBAAIC/ghUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMAojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZCA9ICJlcnJvciBvbiBge1NlbGZ9YCB3aXRoIHBhcmFtcyBgPHtBfSx7Qn0+YCJdIC8vIGVycm9yCnRyYWl0IEJhZEFubm90YXRpb248QT4ge30KYGBgCgpUaGVyZSB3aWxsIGJlIGFuIGVycm9yIGFib3V0IGBib29sYCBub3QgaW1wbGVtZW50aW5nIGBJbmRleDx1OD5gLCBmb2xsb3dlZCBieSBhCm5vdGUgc2F5aW5nICJ0aGUgdHlwZSBgYm9vbGAgY2Fubm90IGJlIGluZGV4ZWQgYnkgYHU4YCIuCgpBcyB5b3UgY2FuIHNlZSwgeW91IGNhbiBzcGVjaWZ5IHR5cGUgcGFyYW1ldGVycyBpbiBjdXJseSBicmFjZXMgZm9yCnN1YnN0aXR1dGlvbiB3aXRoIHRoZSBhY3R1YWwgdHlwZXMgKHVzaW5nIHRoZSByZWd1bGFyIGZvcm1hdCBzdHJpbmcgc3ludGF4KSBpbgphIGdpdmVuIHNpdHVhdGlvbi4gRnVydGhlcm1vcmUsIGB7U2VsZn1gIHdpbGwgc3Vic3RpdHV0ZSB0byB0aGUgdHlwZSAoaW4gdGhpcwpjYXNlLCBgYm9vbGApIHRoYXQgd2UgdHJpZWQgdG8gdXNlLgoKVGhpcyBlcnJvciBhcHBlYXJzIHdoZW4gdGhlIGN1cmx5IGJyYWNlcyBjb250YWluIGFuIGlkZW50aWZpZXIgd2hpY2ggZG9lc24ndAptYXRjaCB3aXRoIGFueSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9yIHRoZSBzdHJpbmcgYFNlbGZgLiBUaGlzIG1pZ2h0IGhhcHBlbgppZiB5b3UgbWlzc3BlbGxlZCBhIHR5cGUgcGFyYW1ldGVyLCBvciBpZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGxpdGVyYWwgY3VybHkKYnJhY2VzLiBJZiBpdCBpcyB0aGUgbGF0dGVyLCBlc2NhcGUgdGhlIGN1cmx5IGJyYWNlcyB3aXRoIGEgc2Vjb25kIGN1cmx5IGJyYWNlCm9mIHRoZSBzYW1lIHR5cGU7IGUuZy4sIGEgbGl0ZXJhbCBge2AgaXMgYHt7YC4KABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P/4IAAAA/gjzCO4BANItJgEAANQDAAIGANUDAQAEAMQDDgAAA9MDAAQAxAMOAAAA0wMCBQEC2QEBAQDzCAAB1AMABADEAw4AAALTAwABBACvAyQAAAPSAwAEAK8DJAAAANIDAQEA8wgAAu0BALADEgAAAgIFRTAyMzAAAR8FAAAABfMIBACvAyQAAADSAwEBAfcIAAHTAwDwAQCBLiYBAADZAwAAAvABAIEuJgEAAgLeB1RoZSBgI1tydXN0Y19vbl91bmltcGxlbWVudGVkXWAgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgYSBjdXN0b20gZXJyb3IKbWVzc2FnZSBmb3Igd2hlbiBhIHBhcnRpY3VsYXIgdHJhaXQgaXNuJ3QgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHBsYWNlZCBpbiBhCnBvc2l0aW9uIHRoYXQgbmVlZHMgdGhhdCB0cmFpdC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIGZvbGxvd2luZyBjb2RlIGlzCmNvbXBpbGVkOgoKYGBgY29tcGlsZV9mYWlsLEUwMjMxCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19vbl91bmltcGxlbWVudGVkID0gImVycm9yIG9uIGB7U2VsZn1gIHdpdGggcGFyYW1zIGA8e0F9LHt9PmAiXSAvLyBlcnJvciEKdHJhaXQgQmFkQW5ub3RhdGlvbjxBPiB7fQpgYGAKCnRoZXJlIHdpbGwgYmUgYW4gZXJyb3IgYWJvdXQgYGJvb2xgIG5vdCBpbXBsZW1lbnRpbmcgYEluZGV4PHU4PmAsIGZvbGxvd2VkIGJ5IGEKbm90ZSBzYXlpbmcgInRoZSB0eXBlIGBib29sYCBjYW5ub3QgYmUgaW5kZXhlZCBieSBgdThgIi4KCkFzIHlvdSBjYW4gc2VlLCB5b3UgY2FuIHNwZWNpZnkgdHlwZSBwYXJhbWV0ZXJzIGluIGN1cmx5IGJyYWNlcyBmb3IKc3Vic3RpdHV0aW9uIHdpdGggdGhlIGFjdHVhbCB0eXBlcyAodXNpbmcgdGhlIHJlZ3VsYXIgZm9ybWF0IHN0cmluZyBzeW50YXgpIGluCmEgZ2l2ZW4gc2l0dWF0aW9uLiBGdXJ0aGVybW9yZSwgYHtTZWxmfWAgd2lsbCBzdWJzdGl0dXRlIHRvIHRoZSB0eXBlIChpbiB0aGlzCmNhc2UsIGBib29sYCkgdGhhdCB3ZSB0cmllZCB0byB1c2UuCgpUaGlzIGVycm9yIGFwcGVhcnMgd2hlbiB0aGUgY3VybHkgYnJhY2VzIGRvIG5vdCBjb250YWluIGFuIGlkZW50aWZpZXIuIFBsZWFzZQphZGQgb25lIG9mIHRoZSBzYW1lIG5hbWUgYXMgYSB0eXBlIHBhcmFtZXRlci4gSWYgeW91IGludGVuZGVkIHRvIHVzZSBsaXRlcmFsCmJyYWNlcywgdXNlIGB7e2AgYW5kIGB9fWAgdG8gZXNjYXBlIHRoZW0uCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wPeBwAAAN4H8wjwAQCBLiYBAADYAwACBgDZAwEABADEAw4AAAPXAwAEAMQDDgAAANcDAgUBAtkBAQEA8wgAAdgDAAQAxAMOAAAC1wMAAQQArwMkAAAD1gMABACvAyQAAADWAwEBAPMIAALvAQCwAxIAAAICBUUwMjMxAAEfBQAAAAXzCAQArwMkAAAA1gMBAQH3CAAB1wMA8gEAsC4mAQAA3QMAAALyAQCwLiYBAAICkgVUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMgojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZChsb3JlbT0iIildIC8vIGVycm9yIQp0cmFpdCBCYWRBbm5vdGF0aW9uIHt9CmBgYAoKdGhlcmUgd2lsbCBiZSBhbiBlcnJvciBhYm91dCBgYm9vbGAgbm90IGltcGxlbWVudGluZyBgSW5kZXg8dTg+YCwgZm9sbG93ZWQgYnkgYQpub3RlIHNheWluZyAidGhlIHR5cGUgYGJvb2xgIGNhbm5vdCBiZSBpbmRleGVkIGJ5IGB1OGAiLgoKRm9yIHRoaXMgdG8gd29yaywgc29tZSBub3RlIG11c3QgYmUgc3BlY2lmaWVkLiBBbiBlbXB0eSBhdHRyaWJ1dGUgd2lsbCBub3QgZG8KYW55dGhpbmcsIHBsZWFzZSByZW1vdmUgdGhlIGF0dHJpYnV0ZSBvciBhZGQgc29tZSBoZWxwZnVsIG5vdGUgZm9yIHVzZXJzIG9mIHRoZQp0cmFpdC4KAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8PkgUAAACSBfMI8gEAsC4mAQAA3AMAAgYA3QMBAAQAxAMOAAAD2wMABADEAw4AAADbAwIFAQLZAQEBAPMIAAHcAwAEAMQDDgAAAtsDAAEEAK8DJAAAA9oDAAQArwMkAAAA2gMBAQDzCAAC8QEAsAMSAAACAgVFMDIzMgABHwUAAAAF8wgEAK8DJAAAANoDAQEB9wgAAdsDAPQBAN8uJgEAAOEDAAAC9AEA3y4mAQACAuMCIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCBub3QgZW5vdWdoIHR5cGUgcGFyYW1ldGVycyB3ZXJlIGZvdW5kIGluIGEgdHlwZSBvcgp0cmFpdC4KCkZvciBleGFtcGxlLCB0aGUgYEZvb2Agc3RydWN0IGJlbG93IGlzIGRlZmluZWQgdG8gYmUgZ2VuZXJpYyBpbiBgVGAsIGJ1dCB0aGUKdHlwZSBwYXJhbWV0ZXIgaXMgbWlzc2luZyBpbiB0aGUgZGVmaW5pdGlvbiBvZiBgQmFyYDoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpzdHJ1Y3QgRm9vPFQ+IHsgeDogVCB9CgpzdHJ1Y3QgQmFyIHsgeDogRm9vIH0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH/////f+MCAAAA4wLzCPQBAN8uJgEAAOADAAIGAOEDAQAEAMQDDgAAA98DAAQAxAMOAAAA3wMCBQEC2QEBAQDzCAAB4AMABADEAw4AAALfAwABBACvAyQAAAPeAwAEAK8DJAAAAN4DAQEA8wgAAvMBALADEgAAAgIFRTAyNDMAAR8FAAAABfMIBACvAyQAAADeAwEBAfcIAAHfAwD2AQCOLyYBAADlAwAAAvYBAI4vJgEAAgLbAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdG9vIG1hbnkgdHlwZSBwYXJhbWV0ZXJzIHdlcmUgZm91bmQgaW4gYSB0eXBlIG9yCnRyYWl0LgoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCBzdHJ1Y3QgYmVsb3cgaGFzIG5vIHR5cGUgcGFyYW1ldGVycywgYnV0IGlzIHN1cHBsaWVkCndpdGggdHdvIGluIHRoZSBkZWZpbml0aW9uIG9mIGBCYXJgOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb28geyB4OiBib29sIH0KCnN0cnVjdCBCYXI8UywgVD4geyB4OiBGb288UywgVD4gfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///z/bAgAAANsC8wj2AQCOLyYBAADkAwACBgDlAwEABADEAw4AAAPjAwAEAMQDDgAAAOMDAgUBAtkBAQEA8wgAAeQDAAQAxAMOAAAC4wMAAQQArwMkAAAD4gMABACvAyQAAADiAwEBAPMIAAL1AQCwAxIAAAICBUUwMjQ0AAEfBQAAAAXzCAQArwMkAAAA4gMBAQH3CAAB4wMA+AEAvS8mAQAA6QMAAAL4AQC9LyYBAAIC+QIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUd28gaXRlbXMgb2YgdGhlIHNhbWUgbmFtZSBjYW5ub3QgYmUgaW1wb3J0ZWQgd2l0aG91dCByZWJpbmRpbmcgb25lIG9mIHRoZQppdGVtcyB1bmRlciBhIG5ldyBsb2NhbCBuYW1lLgoKQW4gZXhhbXBsZSBvZiB0aGlzIGVycm9yOgoKYGBgCnVzZSBmb286OmJhejsKdXNlIGJhcjo6KjsgLy8gZXJyb3IsIGRvIGB1c2UgZm9vOjpiYXogYXMgcXV1eGAgaW5zdGVhZCBvbiB0aGUgcHJldmlvdXMgbGluZQoKZm4gbWFpbigpIHt9Cgptb2QgZm9vIHsKICAgIHB1YiBzdHJ1Y3QgYmF6Owp9Cgptb2QgYmFyIHsKICAgIHB1YiBtb2QgYmF6IHt9Cn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5AgAAAPkC8wj4AQC9LyYBAADoAwACBgDpAwEABADEAw4AAAPnAwAEAMQDDgAAAOcDAgUBAtkBAQEA8wgAAegDAAQAxAMOAAAC5wMAAQQArwMkAAAD5gMABACvAyQAAADmAwEBAPMIAAL3AQCwAxIAAAICBUUwMjUxAAEfBQAAAAXzCAQArwMkAAAA5gMBAQH3CAAB5wMA+gEA7C8mAQAA7QMAAAL6AQDsLyYBAAICqAVUd28gaXRlbXMgb2YgdGhlIHNhbWUgbmFtZSBjYW5ub3QgYmUgaW1wb3J0ZWQgd2l0aG91dCByZWJpbmRpbmcgb25lIG9mIHRoZQppdGVtcyB1bmRlciBhIG5ldyBsb2NhbCBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1Mgp1c2UgZm9vOjpiYXo7CnVzZSBiYXI6OmJhejsgLy8gZXJyb3IsIGRvIGB1c2UgYmFyOjpiYXogYXMgcXV1eGAgaW5zdGVhZAoKZm4gbWFpbigpIHt9Cgptb2QgZm9vIHsKICAgIHB1YiBzdHJ1Y3QgYmF6Owp9Cgptb2QgYmFyIHsKICAgIHB1YiBtb2QgYmF6IHt9Cn0KYGBgCgpZb3UgY2FuIHVzZSBhbGlhc2VzIGluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLiBFeGFtcGxlOgoKYGBgCnVzZSBmb286OmJheiBhcyBmb29fYmF6Owp1c2UgYmFyOjpiYXo7IC8vIG9rIQoKZm4gbWFpbigpIHt9Cgptb2QgZm9vIHsKICAgIHB1YiBzdHJ1Y3QgYmF6Owp9Cgptb2QgYmFyIHsKICAgIHB1YiBtb2QgYmF6IHt9Cn0KYGBgCgpPciB5b3UgY2FuIHJlZmVyZW5jZSB0aGUgaXRlbSB3aXRoIGl0cyBwYXJlbnQ6CgpgYGAKdXNlIGJhcjo6YmF6OwoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gZm9vOjpiYXo7IC8vIG9rIQp9Cgptb2QgZm9vIHsKICAgIHB1YiBzdHJ1Y3QgYmF6Owp9Cgptb2QgYmFyIHsKICAgIHB1YiBtb2QgYmF6IHt9Cn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gFAAAAqAXzCPoBAOwvJgEAAOwDAAIGAO0DAQAEAMQDDgAAA+sDAAQAxAMOAAAA6wMCBQEC2QEBAQDzCAAB7AMABADEAw4AAALrAwABBACvAyQAAAPqAwAEAK8DJAAAAOoDAQEA8wgAAvkBALADEgAAAgIFRTAyNTIAAR8FAAAABfMIBACvAyQAAADqAwEBAfcIAAHrAwD8AQCbMCYBAADxAwAAAvwBAJswJgEAAgKbA0F0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIHVuaW1wb3J0YWJsZSB2YWx1ZS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdHJ5aW5nCnRvIGltcG9ydCBhIG1ldGhvZCBmcm9tIGEgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjUzCm1vZCBmb28gewogICAgcHViIHRyYWl0IE15VHJhaXQgewogICAgICAgIGZuIGRvX3NvbWV0aGluZygpOwogICAgfQp9Cgp1c2UgZm9vOjpNeVRyYWl0Ojpkb19zb21ldGhpbmc7Ci8vIGVycm9yOiBgZG9fc29tZXRoaW5nYCBpcyBub3QgZGlyZWN0bHkgaW1wb3J0YWJsZQoKZm4gbWFpbigpIHt9CmBgYAoKSXQncyBpbnZhbGlkIHRvIGRpcmVjdGx5IGltcG9ydCBtZXRob2RzIGJlbG9uZ2luZyB0byBhIHRyYWl0IG9yIGNvbmNyZXRlIHR5cGUuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////P5sDAAAAmwPzCPwBAJswJgEAAPADAAIGAPEDAQAEAMQDDgAAA+8DAAQAxAMOAAAA7wMCBQEC2QEBAQDzCAAB8AMABADEAw4AAALvAwABBACvAyQAAAPuAwAEAK8DJAAAAO4DAQEA8wgAAvsBALADEgAAAgIFRTAyNTMAAR8FAAAABfMIBACvAyQAAADuAwEBAfcIAAHvAwD+AQDKMCYBAAD1AwAAAv4BAMowJgEAAgLYBEF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIGl0ZW0gd2hlcmVhcyBhbiBleHRlcm4gY3JhdGUgd2l0aCB0aGlzIG5hbWUgaGFzCmFscmVhZHkgYmVlbiBpbXBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTQKZXh0ZXJuIGNyYXRlIGNvcmU7Cgptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBjb3JlIHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6Y29yZTsgIC8vIGVycm9yOiBhbiBleHRlcm4gY3JhdGUgbmFtZWQgYGNvcmVgIGhhcyBhbHJlYWR5CiAgICAgICAgICAgICAgICAvLyAgICAgICAgYmVlbiBpbXBvcnRlZCBpbiB0aGlzIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBoYXZlIHRvIHJlbmFtZSBhdCBsZWFzdCBvbmUgb2YgdGhlIHR3byBpbXBvcnRzLgpFeGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGxpYmNvcmU7IC8vIG9rIQoKbW9kIGZvbyB7CiAgICBwdWIgdHJhaXQgY29yZSB7CiAgICAgICAgZm4gZG9fc29tZXRoaW5nKCk7CiAgICB9Cn0KCnVzZSBmb286OmNvcmU7CgpmbiBtYWluKCkge30KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B9gEAAAA2ATzCP4BAMowJgEAAPQDAAIGAPUDAQAEAMQDDgAAA/MDAAQAxAMOAAAA8wMCBQEC2QEBAQDzCAAB9AMABADEAw4AAALzAwABBACvAyQAAAPyAwAEAK8DJAAAAPIDAQEA8wgAAv0BALADEgAAAgIFRTAyNTQAAR8FAAAABfMIBACvAyQAAADyAwEBAfcIAAHzAwCAAgD5MCYBAAD5AwAAAoACAPkwJgEAAgLdBFlvdSBjYW4ndCBpbXBvcnQgYSB2YWx1ZSB3aG9zZSBuYW1lIGlzIHRoZSBzYW1lIGFzIGFub3RoZXIgdmFsdWUgZGVmaW5lZCBpbiB0aGUKbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1NQp1c2UgYmFyOjpmb287IC8vIGVycm9yOiBhbiBpdGVtIG5hbWVkIGBmb29gIGlzIGFscmVhZHkgaW4gc2NvcGUKCmZuIGZvbygpIHt9Cgptb2QgYmFyIHsKICAgICBwdWIgZm4gZm9vKCkge30KfQoKZm4gbWFpbigpIHt9CmBgYAoKWW91IGNhbiB1c2UgYWxpYXNlcyBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvci4gRXhhbXBsZToKCmBgYAp1c2UgYmFyOjpmb28gYXMgYmFyX2ZvbzsgLy8gb2shCgpmbiBmb28oKSB7fQoKbW9kIGJhciB7CiAgICAgcHViIGZuIGZvbygpIHt9Cn0KCmZuIG1haW4oKSB7fQpgYGAKCk9yIHlvdSBjYW4gcmVmZXJlbmNlIHRoZSBpdGVtIHdpdGggaXRzIHBhcmVudDoKCmBgYApmbiBmb28oKSB7fQoKbW9kIGJhciB7CiAgICAgcHViIGZuIGZvbygpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBiYXI6OmZvbygpOyAvLyB3ZSBnZXQgdGhlIGl0ZW0gYnkgcmVmZXJyaW5nIHRvIGl0cyBwYXJlbnQKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0EAAAA3QTzCIACAPkwJgEAAPgDAAIGAPkDAQAEAMQDDgAAA/cDAAQAxAMOAAAA9wMCBQEC2QEBAQDzCAAB+AMABADEAw4AAAL3AwABBACvAyQAAAP2AwAEAK8DJAAAAPYDAQEA8wgAAv8BALADEgAAAgIFRTAyNTUAAR8FAAAABfMIBACvAyQAAAD2AwEBAfcIAAH3AwCCAgCoMSYBAAD9AwAAAoICAKgxJgEAAgLUAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW4ndCBpbXBvcnQgYSB0eXBlIG9yIG1vZHVsZSB3aGVuIHRoZSBuYW1lIG9mIHRoZSBpdGVtIGJlaW5nIGltcG9ydGVkIGlzCnRoZSBzYW1lIGFzIGFub3RoZXIgdHlwZSBvciBzdWJtb2R1bGUgZGVmaW5lZCBpbiB0aGUgbW9kdWxlLgoKQW4gZXhhbXBsZSBvZiB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBmb286OkJhcjsgLy8gZXJyb3IKCnR5cGUgQmFyID0gdTMyOwoKbW9kIGZvbyB7CiAgICBwdWIgbW9kIEJhciB7IH0KfQoKZm4gbWFpbigpIHt9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B//8/1AIAAADUAvMIggIAqDEmAQAA/AMAAgYA/QMBAAQAxAMOAAAD+wMABADEAw4AAAD7AwIFAQLZAQEBAPMIAAH8AwAEAMQDDgAAAvsDAAEEAK8DJAAAA/oDAAQArwMkAAAA+gMBAQDzCAACgQIAsAMSAAACAgVFMDI1NgABHwUAAAAF8wgEAK8DJAAAAPoDAQEB9wgAAfsDAIQCANcxJgEAAIEEAAAChAIA1zEmAQACAsMDVGhlIG5hbWUgY2hvc2VuIGZvciBhbiBleHRlcm5hbCBjcmF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4dGVybmFsIGNyYXRlCnRoYXQgaGFzIGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgY3VycmVudCBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU5CmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIGNvcmU7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gaXMgdG8gY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUgdGhhdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggYW55CmV4dGVybmFsIGNyYXRlIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKQ29ycmVjdCBleGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIG90aGVyX25hbWU7CgpmbiBtYWluKCkge30KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQfDAwAAAMMD8wiEAgDXMSYBAACABAACBgCBBAEABADEAw4AAAP/AwAEAMQDDgAAAP8DAgUBAtkBAQEA8wgAAYAEAAQAxAMOAAAC/wMAAQQArwMkAAAD/gMABACvAyQAAAD+AwEBAPMIAAKDAgCwAxIAAAICBUUwMjU5AAEfBQAAAAXzCAQArwMkAAAA/gMBAQH3CAAB/wMAhgIAhjImAQAAhQQAAAKGAgCGMiYBAAICigVUaGUgbmFtZSBmb3IgYW4gaXRlbSBkZWNsYXJhdGlvbiBjb25mbGljdHMgd2l0aCBhbiBleHRlcm5hbCBjcmF0ZSdzIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYwCmV4dGVybiBjcmF0ZSBjb3JlOwoKc3RydWN0IGNvcmU7CgpmbiBtYWluKCkge30KYGBgCgpUaGVyZSBhcmUgdHdvIHBvc3NpYmxlIHNvbHV0aW9uczoKClNvbHV0aW9uICMxOiBSZW5hbWUgdGhlIGl0ZW0uCgpgYGAKZXh0ZXJuIGNyYXRlIGNvcmU7CgpzdHJ1Y3QgeHl6OwpgYGAKClNvbHV0aW9uICMyOiBJbXBvcnQgdGhlIGNyYXRlIHdpdGggYSBkaWZmZXJlbnQgbmFtZS4KCmBgYApleHRlcm4gY3JhdGUgY29yZSBhcyB4eXo7CgpzdHJ1Y3QgYWJjOwpgYGAKClNlZSB0aGUgW0RlY2xhcmF0aW9uIFN0YXRlbWVudHNdW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdIHNlY3Rpb24gb2YgdGhlCnJlZmVyZW5jZSBmb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB3aGF0IGNvbnN0aXR1dGVzIGFuIGl0ZW0gZGVjbGFyYXRpb24KYW5kIHdoYXQgZG9lcyBub3QuCgpbZGVjbGFyYXRpb24tc3RhdGVtZW50c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3N0YXRlbWVudHMuaHRtbCNkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8HigUAAACKBfMIhgIAhjImAQAAhAQAAgYAhQQBAAQAxAMOAAADgwQABADEAw4AAACDBAIFAQLZAQEBAPMIAAGEBAAEAMQDDgAAAoMEAAEEAK8DJAAAA4IEAAQArwMkAAAAggQBAQDzCAAChQIAsAMSAAACAgVFMDI2MAABHwUAAAAF8wgEAK8DJAAAAIIEAQEB9wgAAYMEAIgCALUyJgEAAIkEAAACiAIAtTImAQACAuUGQW4gdW5kZWNsYXJlZCBsaWZldGltZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjEKLy8gZXJyb3IsIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYApmbiBmb28oeDogJidhIHN0cikgeyB9CgpzdHJ1Y3QgRm9vIHsKICAgIC8vIGVycm9yLCB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKICAgIHg6ICYnYSBzdHIsCn0KYGBgCgpUaGVzZSBjYW4gYmUgZml4ZWQgYnkgZGVjbGFyaW5nIGxpZmV0aW1lIHBhcmFtZXRlcnM6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIHN0ciwKfQoKZm4gZm9vPCdhPih4OiAmJ2Egc3RyKSB7fQpgYGAKCkltcGwgYmxvY2tzIGRlY2xhcmUgbGlmZXRpbWUgcGFyYW1ldGVycyBzZXBhcmF0ZWx5LiBZb3UgbmVlZCB0byBhZGQgbGlmZXRpbWUKcGFyYW1ldGVycyB0byBhbiBpbXBsIGJsb2NrIGlmIHlvdSdyZSBpbXBsZW1lbnRpbmcgYSB0eXBlIHRoYXQgaGFzIGEgbGlmZXRpbWUKcGFyYW1ldGVyIG9mIGl0cyBvd24uCkZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYxCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBzdHIsCn0KCi8vIGVycm9yLCAgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCmltcGwgRm9vPCdhPiB7CiAgICBmbiBmb288J2E+KHg6ICYnYSBzdHIpIHt9Cn0KYGBgCgpUaGlzIGlzIGZpeGVkIGJ5IGRlY2xhcmluZyB0aGUgaW1wbCBibG9jayBsaWtlIHRoaXM6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogJidhIHN0ciwKfQoKLy8gY29ycmVjdAppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGZvbyh4OiAmJ2Egc3RyKSB7fQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wPlBgAAAOUG8wiIAgC1MiYBAACIBAACBgCJBAEABADEAw4AAAOHBAAEAMQDDgAAAIcEAgUBAtkBAQEA8wgAAYgEAAQAxAMOAAAChwQAAQQArwMkAAADhgQABACvAyQAAACGBAEB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bmcgPSAicGFuaWNfaW1wbCJdIC8vIG9rIQogICAgZm4gY2FrZSgpOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oDAAAAqgPzCI4CAMIzJgEAAJQEAAIGAJUEAQAEAMQDDgAAA5MEAAQAxAMOAAAAkwQCBQEC2QEBAQDzCAABlAQABADEAw4AAAKTBAABBACvAyQAAAOSBAAEAK8DJAAAAJIEAQEA8wgAAo0CALADEgAAAgIFRTAyNjQAAR8FAAAABfMIBACvAyQAAACSBAEBAfcIAAGTBACQAgDxMyYBAACZBAAAApACAPEzJgEAAgLkA0EgbG9vcCBrZXl3b3JkIChgYnJlYWtgIG9yIGBjb250aW51ZWApIHdhcyB1c2VkIGluc2lkZSBhIGNsb3N1cmUgYnV0IG91dHNpZGUgb2YKYW55IGxvb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY3CmxldCB3ID0gfHwgeyBicmVhazsgfTsgLy8gZXJyb3I6IGBicmVha2AgaW5zaWRlIG9mIGEgY2xvc3VyZQpgYGAKCmBicmVha2AgYW5kIGBjb250aW51ZWAga2V5d29yZHMgY2FuIGJlIHVzZWQgYXMgbm9ybWFsIGluc2lkZSBjbG9zdXJlcyBhcyBsb25nIGFzCnRoZXkgYXJlIGFsc28gY29udGFpbmVkIHdpdGhpbiBhIGxvb3AuIFRvIGhhbHQgdGhlIGV4ZWN1dGlvbiBvZiBhIGNsb3N1cmUgeW91CnNob3VsZCBpbnN0ZWFkIHVzZSBhIHJldHVybiBzdGF0ZW1lbnQuIEV4YW1wbGU6CgpgYGAKbGV0IHcgPSB8fCB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7CiAgICB9Cn07Cgp3KCk7CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wHkAwAAAOQD8wiQAgDxMyYBAACYBAACBgCZBAEABADEAw4AAAOXBAAEAMQDDgAAAJcEAgUBAtkBAQEA8wgAAZgEAAQAxAMOAAAClwQAAQQArwMkAAADlgQABACvAyQAAACWBAEBAPMIAAKPAgCwAxIAAAICBUUwMjY3AAEfBQAAAAXzCAQArwMkAAAAlgQBAQH3CAABlwQAkgIAoDQmAQAAnQQAAAKSAgCgNCYBAAICpwNBIGxvb3Aga2V5d29yZCAoYGJyZWFrYCBvciBgY29udGludWVgKSB3YXMgdXNlZCBvdXRzaWRlIG9mIGEgbG9vcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjgKZm4gc29tZV9mdW5jKCkgewogICAgYnJlYWs7IC8vIGVycm9yOiBgYnJlYWtgIG91dHNpZGUgb2YgYSBsb29wCn0KYGBgCgpXaXRob3V0IGEgbG9vcCB0byBicmVhayBvdXQgb2Ygb3IgY29udGludWUgaW4sIG5vIHNlbnNpYmxlIGFjdGlvbiBjYW4gYmUgdGFrZW4uClBsZWFzZSB2ZXJpZnkgdGhhdCB5b3UgYXJlIHVzaW5nIGBicmVha2AgYW5kIGBjb250aW51ZWAgb25seSBpbiBsb29wcy4gRXhhbXBsZToKCmBgYApmbiBzb21lX2Z1bmMoKSB7CiAgICBmb3IgXyBpbiAwLi4xMCB7CiAgICAgICAgYnJlYWs7IC8vIG9rIQogICAgfQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////D6cDAAAApwPzCJICAKA0JgEAAJwEAAIGAJ0EAQAEAMQDDgAAA5sEAAQAxAMOAAAAmwQCBQEC2QEBAQDzCAABnAQABADEAw4AAAKbBAABBACvAyQAAAOaBAAEAK8DJAAAAJoEAQEA8wgAApECALADEgAAAgIFRTAyNjgAAR8FAAAABfMIBACvAyQAAACaBAEBAfcIAAGbBACUAgDPNCYBAAChBAAAApQCAM80JgEAAgKcD0EgdHlwZSBtaXNtYXRjaGVkIGFuIGFzc29jaWF0ZWQgdHlwZSBvZiBhIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3MQp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZT11MzI+IHsKLy8gICAgICAgICAgICAgICAgICAgIH5+fn5+fn5+IH5+fn5+fn5+fn5+fn5+fn5+fgovLyAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICB8Ci8vICAgICAgICAgVGhpcyBzYXlzIGBmb29gIGNhbiAgICAgICAgIHwKLy8gICAgICAgICAgIG9ubHkgYmUgdXNlZCB3aXRoICAgICAgICAgfAovLyAgICAgICAgICAgICAgc29tZSB0eXBlIHRoYXQgICAgICAgICB8Ci8vICAgICAgICAgaW1wbGVtZW50cyBgVHJhaXRgLiAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpcyBzYXlzIG5vdCBvbmx5IG11c3QKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGBUYCBiZSBhbiBpbXBsIG9mIGBUcmFpdGAKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1dCBhbHNvIHRoYXQgdGhlIGltcGwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11c3QgYXNzaWduIHRoZSB0eXBlIGB1MzJgCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byB0aGUgYXNzb2NpYXRlZCB0eXBlLgogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI7IH0KLy9+fn5+fn5+fn5+fn5+fn4gICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgovLyAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gYGk4YCBkb2VzIGhhdmUgICAgICAgICAgICAgICAgICAgICB8Ci8vIGltcGxlbWVudGF0aW9uICAgICAgICAgICAgICAgICAgICAgfAovLyBvZiBgVHJhaXRgLi4uICAgICAgICAgICAgICAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAuLi4gYnV0IGl0IGlzIGFuIGltcGxlbWVudGF0aW9uCi8vICAgICAgICAgICAgICAgICAgICAgdGhhdCBhc3NpZ25zIGAmJ3N0YXRpYyBzdHJgIHRvCi8vICAgICAgICAgICAgICAgICAgICAgdGhlIGFzc29jaWF0ZWQgdHlwZS4KCmZvbygzX2k4KTsKLy8gSGVyZSwgd2UgaW52b2tlIGBmb29gIHdpdGggYW4gYGk4YCwgd2hpY2ggZG9lcyBub3Qgc2F0aXNmeQovLyB0aGUgY29uc3RyYWludCBgPGk4IGFzIFRyYWl0Pjo6QXNzb2NpYXRlZFR5cGU9dTMyYCwgYW5kCi8vIHRoZXJlZm9yZSB0aGUgdHlwZS1jaGVja2VyIGNvbXBsYWlucyB3aXRoIHRoaXMgZXJyb3IgY29kZS4KYGBgCgpUaGUgaXNzdWUgY2FuIGJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSBhc3NvY2lhdGVkIHR5cGU6CjEpIGluIHRoZSBgZm9vYCBpbXBsZW1lbnRhdGlvbjoKYGBgCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyPiB7CiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cjsgfQoKZm9vKDNfaTgpOwpgYGAKCjIpIGluIHRoZSBgVHJhaXRgIGltcGxlbWVudGF0aW9uIGZvciBgaThgOgpgYGAKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGUgPSB1MzI+IHsKICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gdTMyOyB9Cgpmb28oM19pOCk7CmBgYAoAH////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cDwAAAJwP8wiUAgDPNCYBAACgBAACBgChBAEABADEAw4AAAOfBAAEAMQDDgAAAJ8EAgUBAtkBAQEA8wgAAaAEAAQAxAMOAAACnwQAAQQArwMkAAADngQABACvAyQAAACeBAEBAPMIAAKTAgCwAxIAAAICBUUwMjcxAAEfBQAAAAXzCAQArwMkAAAAngQBAQH3CAABnwQAlgIA/jQmAQAApQQAAAKWAgD+NCYBAAIC4QVBbiBldmFsdWF0aW9uIG9mIGEgdHJhaXQgcmVxdWlyZW1lbnQgb3ZlcmZsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzUKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPFQ+KFQpOwoKaW1wbDxUPiBGb28gZm9yIFQgd2hlcmUgQmFyPFQ+OiBGb28ge30KYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZXJlIHdhcyBhIHJlY3Vyc2l2ZSB0cmFpdCByZXF1aXJlbWVudCB0aGF0IG92ZXJmbG93ZWQKYmVmb3JlIGl0IGNvdWxkIGJlIGV2YWx1YXRlZC4gVGhpcyBvZnRlbiBtZWFucyB0aGF0IHRoZXJlIGlzIGFuIHVuYm91bmRlZApyZWN1cnNpb24gaW4gcmVzb2x2aW5nIHNvbWUgdHlwZSBib3VuZHMuCgpUbyBkZXRlcm1pbmUgaWYgYSBgVGAgaXMgYEZvb2AsIHdlIG5lZWQgdG8gY2hlY2sgaWYgYEJhcjxUPmAgaXMgYEZvb2AuIEhvd2V2ZXIsCnRvIGRvIHRoaXMgY2hlY2ssIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoYXQgYEJhcjxCYXI8VD4+YCBpcyBgRm9vYC4gVG8KZGV0ZXJtaW5lIHRoaXMsIHdlIGNoZWNrIGlmIGBCYXI8QmFyPEJhcjxUPj4+YCBpcyBgRm9vYCwgYW5kIHNvIG9uLiBUaGlzIGlzCmNsZWFybHkgYSByZWN1cnNpdmUgcmVxdWlyZW1lbnQgdGhhdCBjYW4ndCBiZSByZXNvbHZlZCBkaXJlY3RseS4KCkNvbnNpZGVyIGNoYW5naW5nIHlvdXIgdHJhaXQgYm91bmRzIHNvIHRoYXQgdGhleSdyZSBsZXNzIHNlbGYtcmVmZXJlbnRpYWwuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EFAAAA4QXzCJYCAP40JgEAAKQEAAIGAKUEAQAEAMQDDgAAA6MEAAQAxAMOAAAAowQCBQEC2QEBAQDzCAABpAQABADEAw4AAAKjBAABBACvAyQAAAOiBAAEAK8DJAAAAKIEAQEA8wgAApUCALADEgAAAgIFRTAyNzUAAR8FAAAABfMIBACvAyQAAACiBAEBAfcIAAGjBACYAgCtNSYBAACpBAAAApgCAK01JgEAAgK3BEEgdHJhaXQgaW1wbGVtZW50YXRpb24gaGFzIHN0cmljdGVyIHJlcXVpcmVtZW50cyB0aGFuIHRoZSB0cmFpdCBkZWZpbml0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3Ngp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ+KHg6IFQpOwp9CgppbXBsIEZvbyBmb3IgYm9vbCB7CiAgICBmbiBmb288VD4oeDogVCkgd2hlcmUgVDogQ29weSB7fQp9CmBgYAoKSGVyZSwgYWxsIHR5cGVzIGltcGxlbWVudGluZyBgRm9vYCBtdXN0IGhhdmUgYSBtZXRob2QgYGZvbzxUPih4OiBUKWAgd2hpY2ggY2FuCnRha2UgYW55IHR5cGUgYFRgLiBIb3dldmVyLCBpbiB0aGUgYGltcGxgIGZvciBgYm9vbGAsIHdlIGhhdmUgYWRkZWQgYW4gZXh0cmEKYm91bmQgdGhhdCBgVGAgaXMgYENvcHlgLCB3aGljaCBpc24ndCBjb21wYXRpYmxlIHdpdGggdGhlIG9yaWdpbmFsIHRyYWl0LgoKQ29uc2lkZXIgcmVtb3ZpbmcgdGhlIGJvdW5kIGZyb20gdGhlIG1ldGhvZCBvciBhZGRpbmcgdGhlIGJvdW5kIHRvIHRoZSBvcmlnaW5hbAptZXRob2QgZGVmaW5pdGlvbiBpbiB0aGUgdHJhaXQuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cEAAAAtwTzCJgCAK01JgEAAKgEAAIGAKkEAQAEAMQDDgAAA6cEAAQAxAMOAAAApwQCBQEC2QEBAQDzCAABqAQABADEAw4AAAKnBAABBACvAyQAAAOmBAAEAK8DJAAAAKYEAQEA8wgAApcCALADEgAAAgIFRTAyNzYAAR8FAAAABfMIBACvAyQAAACmBAEBAfcIAAGnBACaAgDcNSYBAACtBAAAApoCANw1JgEAAgLzEFlvdSB0cmllZCB0byB1c2UgYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IHNvbWUgdHJhaXQgaW4gYSBwbGFjZSB3aGljaApleHBlY3RlZCB0aGF0IHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI3NwovLyBoZXJlIHdlIGRlY2xhcmUgdGhlIEZvbyB0cmFpdCB3aXRoIGEgYmFyIG1ldGhvZAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKLy8gd2Ugbm93IGRlY2xhcmUgYSBmdW5jdGlvbiB3aGljaCB0YWtlcyBhbiBvYmplY3QgaW1wbGVtZW50aW5nIHRoZSBGb28gdHJhaXQKZm4gc29tZV9mdW5jPFQ6IEZvbz4oZm9vOiBUKSB7CiAgICBmb28uYmFyKCk7Cn0KCmZuIG1haW4oKSB7CiAgICAvLyB3ZSBub3cgY2FsbCB0aGUgbWV0aG9kIHdpdGggdGhlIGkzMiB0eXBlLCB3aGljaCBkb2Vzbid0IGltcGxlbWVudAogICAgLy8gdGhlIEZvbyB0cmFpdAogICAgc29tZV9mdW5jKDVpMzIpOyAvLyBlcnJvcjogdGhlIHRyYWl0IGJvdW5kIGBpMzIgOiBGb29gIGlzIG5vdCBzYXRpc2ZpZWQKfQpgYGAKCkluIG9yZGVyIHRvIGZpeCB0aGlzIGVycm9yLCB2ZXJpZnkgdGhhdCB0aGUgdHlwZSB5b3UncmUgdXNpbmcgZG9lcyBpbXBsZW1lbnQKdGhlIHRyYWl0LiBFeGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CgovLyB3ZSBpbXBsZW1lbnQgdGhlIHRyYWl0IG9uIHRoZSBpMzIgdHlwZQppbXBsIEZvbyBmb3IgaTMyIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKZm4gc29tZV9mdW5jPFQ6IEZvbz4oZm9vOiBUKSB7CiAgICBmb28uYmFyKCk7IC8vIHdlIGNhbiBub3cgdXNlIHRoaXMgbWV0aG9kIHNpbmNlIGkzMiBpbXBsZW1lbnRzIHRoZQogICAgICAgICAgICAgICAvLyBGb28gdHJhaXQKfQoKZm4gbWFpbigpIHsKICAgIHNvbWVfZnVuYyg1aTMyKTsgLy8gb2shCn0KYGBgCgpPciBpbiBhIGdlbmVyaWMgY29udGV4dCwgYW4gZXJyb25lb3VzIGNvZGUgZXhhbXBsZSB3b3VsZCBsb29rIGxpa2U6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzcKZm4gc29tZV9mdW5jPFQ+KGZvbzogVCkgewogICAgcHJpbnRsbiEoIns6P30iLCBmb28pOyAvLyBlcnJvcjogdGhlIHRyYWl0IGBjb3JlOjpmbXQ6OkRlYnVnYCBpcyBub3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGltcGxlbWVudGVkIGZvciB0aGUgdHlwZSBgVGAKfQoKZm4gbWFpbigpIHsKICAgIC8vIFdlIG5vdyBjYWxsIHRoZSBtZXRob2Qgd2l0aCB0aGUgaTMyIHR5cGUsCiAgICAvLyB3aGljaCAqZG9lcyogaW1wbGVtZW50IHRoZSBEZWJ1ZyB0cmFpdC4KICAgIHNvbWVfZnVuYyg1aTMyKTsKfQpgYGAKCk5vdGUgdGhhdCB0aGUgZXJyb3IgaGVyZSBpcyBpbiB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgZ2VuZXJpYyBmdW5jdGlvbi4gQWx0aG91Z2gKd2Ugb25seSBjYWxsIGl0IHdpdGggYSBwYXJhbWV0ZXIgdGhhdCBkb2VzIGltcGxlbWVudCBgRGVidWdgLCB0aGUgY29tcGlsZXIKc3RpbGwgcmVqZWN0cyB0aGUgZnVuY3Rpb24uIEl0IG11c3Qgd29yayB3aXRoIGFsbCBwb3NzaWJsZSBpbnB1dCB0eXBlcy4gSW4Kb3JkZXIgdG8gbWFrZSB0aGlzIGV4YW1wbGUgY29tcGlsZSwgd2UgbmVlZCB0byByZXN0cmljdCB0aGUgZ2VuZXJpYyB0eXBlIHdlJ3JlCmFjY2VwdGluZzoKCmBgYAp1c2Ugc3RkOjpmbXQ7CgovLyBSZXN0cmljdCB0aGUgaW5wdXQgdHlwZSB0byB0eXBlcyB0aGF0IGltcGxlbWVudCBEZWJ1Zy4KZm4gc29tZV9mdW5jPFQ6IGZtdDo6RGVidWc+KGZvbzogVCkgewogICAgcHJpbnRsbiEoIns6P30iLCBmb28pOwp9CgpmbiBtYWluKCkgewogICAgLy8gQ2FsbGluZyB0aGUgbWV0aG9kIGlzIHN0aWxsIGZpbmUsIGFzIGkzMiBpbXBsZW1lbnRzIERlYnVnLgogICAgc29tZV9mdW5jKDVpMzIpOwoKICAgIC8vIFRoaXMgd291bGQgZmFpbCB0byBjb21waWxlIG5vdzoKICAgIC8vIHN0cnVjdCBXaXRob3V0RGVidWc7CiAgICAvLyBzb21lX2Z1bmMoV2l0aG91dERlYnVnKTsKfQpgYGAKClJ1c3Qgb25seSBsb29rcyBhdCB0aGUgc2lnbmF0dXJlIG9mIHRoZSBjYWxsZWQgZnVuY3Rpb24sIGFzIHN1Y2ggaXQgbXVzdAphbHJlYWR5IHNwZWNpZnkgYWxsIHJlcXVpcmVtZW50cyB0aGF0IHdpbGwgYmUgdXNlZCBmb3IgZXZlcnkgdHlwZSBwYXJhbWV0ZXIuCgAi////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzEAAAAPMQ8wiaAgDcNSYBAACsBAACBgCtBAEABADEAw4AAAOrBAAEAMQDDgAAAKsEAgUBAtkBAQEA8wgAAawEAAQAxAMOAAACqwQAAQQArwMkAAADqgQABACvAyQAAACqBAEBAPMIAAKZAgCwAxIAAAICBUUwMjc3AAEfBQAAAAXzCAQArwMkAAAAqgQBAQH3CAABqwQAnAIAizYmAQAAsQQAAAKcAgCLNiYBAAICrwUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gc3VwcGx5IGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgbG9jYXRpb24Kd2hpY2ggZXhwZWN0ZWQgdGhhdCB0cmFpdC4gVGhpcyBlcnJvciB0eXBpY2FsbHkgb2NjdXJzIHdoZW4gd29ya2luZyB3aXRoCmBGbmAtYmFzZWQgdHlwZXMuIEVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gZm9vPEY6IEZuKHVzaXplKT4oeDogRikgeyB9CgpmbiBtYWluKCkgewogICAgLy8gdHlwZSBtaXNtYXRjaDogLi4uIGltcGxlbWVudHMgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPChTdHJpbmcsKT5gLAogICAgLy8gYnV0IHRoZSB0cmFpdCBgY29yZTo6b3BzOjpGbjwodXNpemUsKT5gIGlzIHJlcXVpcmVkCiAgICAvLyBbRTAyODFdCiAgICBmb28ofHk6IFN0cmluZ3wgeyB9KTsKfQpgYGAKClRoZSBpc3N1ZSBpbiB0aGlzIGNhc2UgaXMgdGhhdCBgZm9vYCBpcyBkZWZpbmVkIGFzIGFjY2VwdGluZyBhIGBGbmAgd2l0aCBvbmUKYXJndW1lbnQgb2YgdHlwZSBgU3RyaW5nYCwgYnV0IHRoZSBjbG9zdXJlIHdlIGF0dGVtcHRlZCB0byBwYXNzIHRvIGl0IHJlcXVpcmVzCm9uZSBhcmd1bWVudHMgb2YgdHlwZSBgdXNpemVgLgoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8frwUAAACvBfMInAIAizYmAQAAsAQAAgYAsQQBAAQAxAMOAAADrwQABADEAw4AAACvBAIFAQLZAQEBAPMIAAGwBAAEAMQDDgAAAq8EAAEEAK8DJAAAA64EAAQArwMkAAAArgQBAQDzCAACmwIAsAMSAAACAgVFMDI4MQABHwUAAAAF8wgEAK8DJAAAAK4EAQEB9wgAAa8EAJ4CALo2JgEAALUEAAACngIAujYmAQACAuoPVGhlIGNvbXBpbGVyIGNvdWxkIG5vdCBpbmZlciBhIHR5cGUgYW5kIGFza2VkIGZvciBhIHR5cGUgYW5ub3RhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODIKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdCgpOwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdHlwZSBpbmZlcmVuY2UgZGlkIG5vdCByZXN1bHQgaW4gb25lIHVuaXF1ZSBwb3NzaWJsZQp0eXBlLCBhbmQgZXh0cmEgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuIEluIG1vc3QgY2FzZXMgdGhpcyBjYW4gYmUgcHJvdmlkZWQKYnkgYWRkaW5nIGEgdHlwZSBhbm5vdGF0aW9uLiBTb21ldGltZXMgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgbWFudWFsbHkuCgpBIGNvbW1vbiBleGFtcGxlIGlzIHRoZSBgY29sbGVjdGAgbWV0aG9kIG9uIGBJdGVyYXRvcmAuIEl0IGhhcyBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgd2l0aCBhIGBGcm9tSXRlcmF0b3JgIGJvdW5kLCB3aGljaCBmb3IgYSBgY2hhcmAgaXRlcmF0b3IgaXMKaW1wbGVtZW50ZWQgYnkgYFZlY2AgYW5kIGBTdHJpbmdgIGFtb25nIG90aGVycy4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0CnRoYXQgcmV2ZXJzZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmc6CgpJbiB0aGUgZmlyc3QgY29kZSBleGFtcGxlLCB0aGUgY29tcGlsZXIgY2Fubm90IGluZmVyIHdoYXQgdGhlIHR5cGUgb2YgYHhgIHNob3VsZApiZTogYFZlYzxjaGFyPmAgYW5kIGBTdHJpbmdgIGFyZSBib3RoIHN1aXRhYmxlIGNhbmRpZGF0ZXMuIFRvIHNwZWNpZnkgd2hpY2ggdHlwZQp0byB1c2UsIHlvdSBjYW4gdXNlIGEgdHlwZSBhbm5vdGF0aW9uIG9uIGB4YDoKCmBgYApsZXQgeDogVmVjPGNoYXI+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFubm90YXRlIHRoZSBmdWxsIHR5cGUuIE9uY2UgdGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZCwKdGhlIGNvbXBpbGVyIGNhbiBpbmZlciB0aGUgcmVzdDoKCmBgYApsZXQgeDogVmVjPF8+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpBbm90aGVyIHdheSB0byBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiwgaXMgdG8gc3BlY2lmeSB0aGUKZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcjoKCmBgYApsZXQgeCA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0Ojo8VmVjPGNoYXI+PigpOwpgYGAKCkFnYWluLCB5b3UgbmVlZCBub3Qgc3BlY2lmeSB0aGUgZnVsbCB0eXBlIGlmIHRoZSBjb21waWxlciBjYW4gaW5mZXIgaXQ6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKYGBgCgpBcGFydCBmcm9tIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyLCB0aGlzIGVycm9yIGNhbgpvY2N1ciB3aGVuIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBzdHJ1Y3Qgb3IgdHJhaXQgY2Fubm90IGJlIGluZmVycmVkLiBJbiB0aGF0CmNhc2UgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byB1c2UgYSB0eXBlIGFubm90YXRpb24sIGJlY2F1c2UgYWxsIGNhbmRpZGF0ZXMKaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZS4gRm9yIGluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCnN0cnVjdCBGb288VD4gewogICAgbnVtOiBULAp9CgppbXBsPFQ+IEZvbzxUPiB7CiAgICBmbiBiYXIoKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KCiAgICBmbiBiYXooKSB7CiAgICAgICAgbGV0IG51bWJlciA9IEZvbzo6YmFyKCk7CiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IHdoaWNoIGluc3RhbmNlIG9mIGBGb29gIHRvCmNhbGwgYGJhcmAgb24uIENoYW5nZSBgRm9vOjpiYXIoKWAgdG8gYEZvbzo6PFQ+OjpiYXIoKWAgdG8gcmVzb2x2ZSB0aGUgZXJyb3IuCgAg////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f+oPAAAA6g/zCJ4CALo2JgEAALQEAAIGALUEAQAEAMQDDgAAA7MEAAQAxAMOAAAAswQCBQEC2QEBAQDzCAABtAQABADEAw4AAAKzBAABBACvAyQAAAOyBAAEAK8DJAAAALIEAQEA8wgAAp0CALADEgAAAgIFRTAyODIAAR8FAAAABfMIBACvAyQAAACyBAEBAfcIAAGzBACgAgDpNiYBAAC5BAAAAqACAOk2JgEAAgK8BEFuIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjaG9zZW4gdW5hbWJpZ3VvdXNseSBiZWNhdXNlIG9mIGxhY2sgb2YgaW5mb3JtYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgzCnN0cnVjdCBGb287CgppbXBsIEludG88dTMyPiBmb3IgRm9vIHsKICAgIGZuIGludG8oc2VsZikgLT4gdTMyIHsgMSB9Cn0KCmxldCBmb28gPSBGb287CmxldCBiYXI6IHUzMiA9IGZvby5pbnRvKCkgKiAxdTMyOwpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIHNvbHZlZCBieSBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucyB0aGF0IHByb3ZpZGUgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2x1dGlvbiBpcyB0byBzcGVjaWZ5IHRoZQp0cmFpdCdzIHR5cGUgcGFyYW1ldGVyOgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEludG88dTMyPiBmb3IgRm9vIHsKICAgIGZuIGludG8oc2VsZikgLT4gdTMyIHsgMSB9Cn0KCmxldCBmb28gPSBGb287CmxldCBiYXI6IHUzMiA9IEludG86Ojx1MzI+OjppbnRvKGZvbykgKiAxdTMyOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////D7wEAAAAvATzCKACAOk2JgEAALgEAAIGALkEAQAEAMQDDgAAA7cEAAQAxAMOAAAAtwQCBQEC2QEBAQDzCAABuAQABADEAw4AAAK3BAABBACvAyQAAAO2BAAEAK8DJAAAALYEAQEA8wgAAp8CALADEgAAAgIFRTAyODMAAR8FAAAABfMIBACvAyQAAAC2BAEBAfcIAAG3BACiAgCYNyYBAAC9BAAAAqICAJg3JgEAAgLgBlRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byB1bmFtYmlndW91c2x5IGluZmVyIHRoZQpyZXR1cm4gdHlwZSBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCBpcyBnZW5lcmljIG9uIHJldHVybiB0eXBlLCBzdWNoCmFzIHRoZSBgY29sbGVjdGAgbWV0aG9kIGZvciBgSXRlcmF0b3Jgcy4KCkZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjg0CmZuIG1haW4oKSB7CiAgICBsZXQgbjogdTMyID0gMTsKICAgIGxldCBtdXQgZDogdTY0ID0gMjsKICAgIGQgPSBkICsgbi5pbnRvKCk7Cn0KYGBgCgpIZXJlIHdlIGhhdmUgYW4gYWRkaXRpb24gb2YgYGRgIGFuZCBgbi5pbnRvKClgLiBIZW5jZSwgYG4uaW50bygpYCBjYW4gcmV0dXJuCmFueSB0eXBlIGBUYCB3aGVyZSBgdTY0OiBBZGQ8VD5gLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGBpbnRvYCBtZXRob2QgY2FuCnJldHVybiBhbnkgdHlwZSB3aGVyZSBgdTMyOiBJbnRvPFQ+YC4KClRoZSBhdXRob3Igb2YgdGhpcyBjb2RlIHByb2JhYmx5IHdhbnRzIGBpbnRvKClgIHRvIHJldHVybiBhIGB1NjRgLCBidXQgdGhlCmNvbXBpbGVyIGNhbid0IGJlIHN1cmUgdGhhdCB0aGVyZSBpc24ndCBhbm90aGVyIHR5cGUgYFRgIHdoZXJlIGJvdGgKYHUzMjogSW50bzxUPmAgYW5kIGB1NjQ6IEFkZDxUPmAuCgpUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBpbnRlcm1lZGlhdGUgZXhwcmVzc2lvbjoKCmBgYApmbiBtYWluKCkgewogICAgbGV0IG46IHUzMiA9IDE7CiAgICBsZXQgbXV0IGQ6IHU2NCA9IDI7CiAgICBsZXQgbTogdTY0ID0gbi5pbnRvKCk7CiAgICBkID0gZCArIG07Cn0KYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8P4AYAAADgBvMIogIAmDcmAQAAvAQAAgYAvQQBAAQAxAMOAAADuwQABADEAw4AAAC7BAIFAQLZAQEBAPMIAAG8BAAEAMQDDgAAArsEAAEEAK8DJAAAA7oEAAQArwMkAAAAugQBAQDzCAACoQIAsAMSAAACAgVFMDI4NAABHwUAAAAF8wgEAK8DJAAAALoEAQEB9wgAAbsEAKQCAMc3JgEAAMEEAAACpAIAxzcmAQACApAGIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKUGF0dGVybnMgdXNlZCB0byBiaW5kIG5hbWVzIG11c3QgYmUgaXJyZWZ1dGFibGUuIFRoYXQgaXMsIHRoZXkgbXVzdCBndWFyYW50ZWUKdGhhdCBhIG5hbWUgd2lsbCBiZSBleHRyYWN0ZWQgaW4gYWxsIGNhc2VzLiBJbnN0ZWFkIG9mIHBhdHRlcm4gbWF0Y2hpbmcgdGhlCmxvb3AgdmFyaWFibGUsIGNvbnNpZGVyIHVzaW5nIGEgYG1hdGNoYCBvciBgaWYgbGV0YCBpbnNpZGUgdGhlIGxvb3AgYm9keS4gRm9yCmluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA1CmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKLy8gVGhpcyBmYWlscyBiZWNhdXNlIGBOb25lYCBpcyBub3QgY292ZXJlZC4KZm9yIFNvbWUoeCkgaW4geHMgewogICAgLy8gLi4uCn0KYGBgCgpNYXRjaCBpbnNpZGUgdGhlIGxvb3AgaW5zdGVhZDoKCmBgYApsZXQgeHMgOiBWZWM8T3B0aW9uPGkzMj4+ID0gdmVjIVtTb21lKDEpLCBOb25lXTsKCmZvciBpdGVtIGluIHhzIHsKICAgIG1hdGNoIGl0ZW0gewogICAgICAgIFNvbWUoeCkgPT4ge30sCiAgICAgICAgTm9uZSA9PiB7fSwKICAgIH0KfQpgYGAKCk9yIHVzZSBgaWYgbGV0YDoKCmBgYApsZXQgeHMgOiBWZWM8T3B0aW9uPGkzMj4+ID0gdmVjIVtTb21lKDEpLCBOb25lXTsKCmZvciBpdGVtIGluIHhzIHsKICAgIGlmIGxldCBTb21lKHgpID0gaXRlbSB7CiAgICAgICAgLy8gLi4uCiAgICB9Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8DkAYAAACQBvMIpAIAxzcmAQAAwAQAAgYAwQQBAAQAxAMOAAADvwQABADEAw4AAAC/BAIFAQLZAQEBAPMIAAHABAAEAMQDDgAAAr8EAAEEAK8DJAAAA74EAAQArwMkAAAAvgQBAQDzCAACowIAsAMSAAACAgVFMDI5NwABHwUAAAAF8wgEAK8DJAAAAL4EAQEB9wgAAb8EAKYCAPY3JgEAAMUEAAACpgIA9jcmAQACAvIEIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKTXV0YWJsZSBib3Jyb3dzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgbXV0YWJsZQpib3Jyb3dzIHdlcmUgYWxsb3dlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NgptYXRjaCBTb21lKCgpKSB7CiAgICBOb25lID0+IHsgfSwKICAgIG9wdGlvbiBpZiBvcHRpb24udGFrZSgpLmlzX25vbmUoKSA9PiB7CiAgICAgICAgLyogaW1wb3NzaWJsZSwgb3B0aW9uIGlzIGBTb21lYCAqLwogICAgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8B8gQAAADyBPMIpgIA9jcmAQAAxAQAAgYAxQQBAAQAxAMOAAADwwQABADEAw4AAADDBAIFAQLZAQEBAPMIAAHEBAAEAMQDDgAAAsMEAAEEAK8DJAAAA8IEAAQArwMkAAAAwgQBAQDzCAACpQIAsAMSAAACAgVFMDMwMQABHwUAAAAF8wgEAK8DJAAAAMIEAQEB9wgAAcMEAKgCAKU4JgEAAMkEAAACqAIApTgmAQACArwEIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQXNzaWdubWVudHMgYXJlIG5vdCBhbGxvd2VkIGluIHBhdHRlcm4gZ3VhcmRzLCBiZWNhdXNlIG1hdGNoaW5nIGNhbm5vdCBoYXZlCnNpZGUgZWZmZWN0cy4gU2lkZSBlZmZlY3RzIGNvdWxkIGFsdGVyIHRoZSBtYXRjaGVkIG9iamVjdCBvciB0aGUgZW52aXJvbm1lbnQKb24gd2hpY2ggdGhlIG1hdGNoIGRlcGVuZHMgaW4gc3VjaCBhIHdheSwgdGhhdCB0aGUgbWF0Y2ggd291bGQgbm90IGJlCmV4aGF1c3RpdmUuIEZvciBpbnN0YW5jZSwgdGhlIGZvbGxvd2luZyB3b3VsZCBub3QgbWF0Y2ggYW55IGFybSBpZiBhc3NpZ25tZW50cwp3ZXJlIGFsbG93ZWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbWF0Y2ggU29tZSgoKSkgewogICAgTm9uZSA9PiB7IH0sCiAgICBvcHRpb24gaWYgeyBvcHRpb24gPSBOb25lOyBmYWxzZSB9ID0+IHsgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8PvAQAAAC8BPMIqAIApTgmAQAAyAQAAgYAyQQBAAQAxAMOAAADxwQABADEAw4AAADHBAIFAQLZAQEBAPMIAAHIBAAEAMQDDgAAAscEAAEEAK8DJAAAA8YEAAQArwMkAAAAxgQBAQDzCAACpwIAsAMSAAACAgVFMDMwMgABHwUAAAAF8wgEAK8DJAAAAMYEAQEB9wgAAccEAKoCANQ4JgEAAM0EAAACqgIA1DgmAQACAv8GIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKU3ViLWJpbmRpbmdzLCBlLmcuIGByZWYgeCBAIFNvbWUocmVmIHkpYCBhcmUgbm93IGFsbG93ZWQgdW5kZXIKYCMhW2ZlYXR1cmUoYmluZGluZ3NfYWZ0ZXJfYXQpXWAgYW5kIGNoZWNrZWQgdG8gbWFrZSBzdXJlIHRoYXQKbWVtb3J5IHNhZmV0eSBpcyB1cGhlbGQuCgotLS0tLS0tLS0tLS0tLQoKSW4gY2VydGFpbiBjYXNlcyBpdCBpcyBwb3NzaWJsZSBmb3Igc3ViLWJpbmRpbmdzIHRvIHZpb2xhdGUgbWVtb3J5IHNhZmV0eS4KVXBkYXRlcyB0byB0aGUgYm9ycm93IGNoZWNrZXIgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiBSdXN0IG1heSByZW1vdmUgdGhpcwpyZXN0cmljdGlvbiwgYnV0IGZvciBub3cgcGF0dGVybnMgbXVzdCBiZSByZXdyaXR0ZW4gd2l0aG91dCBzdWItYmluZGluZ3MuCgpCZWZvcmU6CgpgYGBjb21waWxlX2ZhaWwKbWF0Y2ggU29tZSgiaGkiLnRvX3N0cmluZygpKSB7CiAgICByZWYgb3Bfc3RyaW5nX3JlZiBAIFNvbWUocykgPT4ge30sCiAgICBOb25lID0+IHt9LAp9CmBgYAoKQWZ0ZXI6CgpgYGAKbWF0Y2ggU29tZSgiaGkiLnRvX3N0cmluZygpKSB7CiAgICBTb21lKHJlZiBzKSA9PiB7CiAgICAgICAgbGV0IG9wX3N0cmluZ19yZWYgPSAmU29tZShzKTsKICAgICAgICAvLyAuLi4KICAgIH0sCiAgICBOb25lID0+IHt9LAp9CmBgYAoKVGhlIGBvcF9zdHJpbmdfcmVmYCBiaW5kaW5nIGhhcyB0eXBlIGAmT3B0aW9uPCZTdHJpbmc+YCBpbiBib3RoIGNhc2VzLgoKU2VlIGFsc28gW0lzc3VlIDE0NTg3XVtpc3N1ZS0xNDU4N10uCgpbaXNzdWUtMTQ1ODddOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzE0NTg3CgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////f/8GAAAA/wbzCKoCANQ4JgEAAMwEAAIGAM0EAQAEAMQDDgAAA8sEAAQAxAMOAAAAywQCBQEC2QEBAQDzCAABzAQABADEAw4AAALLBAABBACvAyQAAAPKBAAEAK8DJAAAAMoEAQEA8wgAAqkCALADEgAAAgIFRTAzMDMAAR8FAAAABfMIBACvAyQAAADKBAEBAfcIAAHLBACsAgCDOSYBAADRBAAAAqwCAIM5JgEAAgLqD1RoZSBgc2VsZmAgcGFyYW1ldGVyIGluIGEgbWV0aG9kIGhhcyBhbiBpbnZhbGlkICJyZWNlaXZlciB0eXBlIi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZik7Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKCk1ldGhvZHMgdGFrZSBhIHNwZWNpYWwgZmlyc3QgcGFyYW1ldGVyLCBvZiB3aGljaCB0aGVyZSBhcmUgdGhyZWUgdmFyaWFudHM6CmBzZWxmYCwgYCZzZWxmYCwgYW5kIGAmbXV0IHNlbGZgLiBUaGVzZSBhcmUgc3ludGFjdGljIHN1Z2FyIGZvcgpgc2VsZjogU2VsZmAsIGBzZWxmOiAmU2VsZmAsIGFuZCBgc2VsZjogJm11dCBTZWxmYCByZXNwZWN0aXZlbHkuCgpgYGAKIyBzdHJ1Y3QgRm9vOwp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwovLyAgICAgICAgIF5eXl5eIGBzZWxmYCBoZXJlIGlzIGEgcmVmZXJlbmNlIHRvIHRoZSByZWNlaXZlciBvYmplY3QKfQoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbygmc2VsZikge30KLy8gICAgICAgICBeXl5eXiB0aGUgcmVjZWl2ZXIgdHlwZSBpcyBgJkZvb2AKfQpgYGAKClRoZSB0eXBlIGBTZWxmYCBhY3RzIGFzIGFuIGFsaWFzIHRvIHRoZSB0eXBlIG9mIHRoZSBjdXJyZW50IHRyYWl0CmltcGxlbWVudGVyLCBvciAicmVjZWl2ZXIgdHlwZSIuIEJlc2lkZXMgdGhlIGFscmVhZHkgbWVudGlvbmVkIGBTZWxmYCwKYCZTZWxmYCBhbmQgYCZtdXQgU2VsZmAgdmFsaWQgcmVjZWl2ZXIgdHlwZXMsIHRoZSBmb2xsb3dpbmcgYXJlIGFsc28gdmFsaWQ6CmBzZWxmOiBCb3g8U2VsZj5gLCBgc2VsZjogUmM8U2VsZj5gLCBgc2VsZjogQXJjPFNlbGY+YCwgYW5kIGBzZWxmOiBQaW48UD5gCih3aGVyZSBQIGlzIG9uZSBvZiB0aGUgcHJldmlvdXMgdHlwZXMgZXhjZXB0IGBTZWxmYCkuIE5vdGUgdGhhdCBgU2VsZmAgY2FuCmFsc28gYmUgdGhlIHVuZGVybHlpbmcgaW1wbGVtZW50aW5nIHR5cGUsIGxpa2UgYEZvb2AgaW4gdGhlIGZvbGxvd2luZwpleGFtcGxlOgoKYGBgCiMgc3RydWN0IEZvbzsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZGb28pIHt9Cn0KYGBgCgpUaGlzIGVycm9yIHdpbGwgYmUgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIgd2hlbiB1c2luZyBhbiBpbnZhbGlkIHJlY2VpdmVyIHR5cGUsCmxpa2UgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CiMgc3RydWN0IEZvbzsKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IFRyYWl0IHsKIyAgICAgZm4gZm9vKCZzZWxmKTsKIyB9CmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oc2VsZjogJkJhcikge30KfQpgYGAKClRoZSBuaWdodGx5IGZlYXR1cmUgW0FyYml0cmFyeSBzZWxmIHR5cGVzXVtBU1RdIGV4dGVuZHMgdGhlIGFjY2VwdGVkCnNldCBvZiByZWNlaXZlciB0eXBlcyB0byBhbHNvIGluY2x1ZGUgYW55IHR5cGUgdGhhdCBjYW4gZGVyZWZlcmVuY2UgdG8KYFNlbGZgOgoKYGBgCiMhW2ZlYXR1cmUoYXJiaXRyYXJ5X3NlbGZfdHlwZXMpXQoKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCi8vIEJlY2F1c2UgeW91IGNhbiBkZXJlZmVyZW5jZSBgQmFyYCBpbnRvIGBGb29gLi4uCmltcGwgc3RkOjpvcHM6OkRlcmVmIGZvciBCYXIgewogICAgdHlwZSBUYXJnZXQgPSBGb287CgogICAgZm4gZGVyZWYoJnNlbGYpIC0+ICZGb28gewogICAgICAgICZGb28KICAgIH0KfQoKaW1wbCBGb28gewogICAgZm4gZm9vKHNlbGY6IEJhcikge30KLy8gICAgICAgICBeXl5eXl5eXl4gLi4uaXQgY2FuIGJlIHVzZWQgYXMgdGhlIHJlY2VpdmVyIHR5cGUKfQpgYGAKCltBU1RdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvYXJiaXRyYXJ5LXNlbGYtdHlwZXMuaHRtbAoAIP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qDwAAAOoP8wisAgCDOSYBAADQBAACBgDRBAEABADEAw4AAAPPBAAEAMQDDgAAAM8EAgUBAtkBAQEA8wgAAdAEAAQAxAMOAAACzwQAAQQArwMkAAADzgQABACvAyQAAADOBAEBAPMIAAKrAgCwAxIAAAICBUUwMzA3AAEfBQAAAAXzCAQArwMkAAAAzgQBAQH3CAABzwQArgIAsjkmAQAA1QQAAAKuAgCyOSYBAAICxwVFeHBlY3RlZCB0eXBlIGRpZCBub3QgbWF0Y2ggdGhlIHJlY2VpdmVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDMwOApmbiBwbHVzX29uZSh4OiBpMzIpIC0+IGkzMiB7CiAgICB4ICsgMQp9CgpwbHVzX29uZSgiTm90IGEgbnVtYmVyIik7Ci8vICAgICAgIF5eXl5eXl5eXl5eXl5eIGV4cGVjdGVkIGBpMzJgLCBmb3VuZCBgJnN0cmAKCmlmICJOb3QgYSBib29sIiB7Ci8vIF5eXl5eXl5eXl5eXiBleHBlY3RlZCBgYm9vbGAsIGZvdW5kIGAmc3RyYAp9CgpsZXQgeDogZjMyID0gIk5vdCBhIGZsb2F0IjsKLy8gICAgIC0tLSAgIF5eXl5eXl5eXl5eXl4gZXhwZWN0ZWQgYGYzMmAsIGZvdW5kIGAmc3RyYAovLyAgICAgfAovLyAgICAgZXhwZWN0ZWQgZHVlIHRvIHRoaXMKYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGV4cHJlc3Npb24gd2FzIHVzZWQgaW4gYSBwbGFjZSB3aGVyZSB0aGUgY29tcGlsZXIKZXhwZWN0ZWQgYW4gZXhwcmVzc2lvbiBvZiBhIGRpZmZlcmVudCB0eXBlLiBJdCBjYW4gb2NjdXIgaW4gc2V2ZXJhbCBjYXNlcywgdGhlCm1vc3QgY29tbW9uIGJlaW5nIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwYXNzaW5nIGFuIGFyZ3VtZW50IHdoaWNoIGhhcyBhCmRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIG1hdGNoaW5nIHR5cGUgaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8Bf8cFAAAAxwXzCK4CALI5JgEAANQEAAIGANUEAQAEAMQDDgAAA9MEAAQAxAMOAAAA0wQCBQEC2QEBAQDzCAAB1AQABADEAw4AAALTBAABBACvAyQAAAPSBAAEAK8DJAAAANIEAQEA8wgAAq0CALADEgAAAgIFRTAzMDgAAR8FAAAABfMIBACvAyQAAADSBAEBAfcIAAHTBACwAgDhOSYBAADZBAAAArACAOE5JgEAAgLdCUEgcGFyYW1ldGVyIHR5cGUgaXMgbWlzc2luZyBhbiBleHBsaWNpdCBsaWZldGltZSBib3VuZCBhbmQgbWF5IG5vdCBsaXZlIGxvbmcKZW5vdWdoLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMwOQovLyBUaGlzIHdvbid0IGNvbXBpbGUgYmVjYXVzZSB0aGUgYXBwbGljYWJsZSBpbXBsIG9mCi8vIGBTb21lVHJhaXRgIChiZWxvdykgcmVxdWlyZXMgdGhhdCBgVDogJ2FgLCBidXQgdGhlIHN0cnVjdCBkb2VzCi8vIG5vdCBoYXZlIGEgbWF0Y2hpbmcgd2hlcmUtY2xhdXNlLgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICBmb286IDxUIGFzIFNvbWVUcmFpdDwnYT4+OjpPdXRwdXQsCn0KCnRyYWl0IFNvbWVUcmFpdDwnYT4gewogICAgdHlwZSBPdXRwdXQ7Cn0KCmltcGw8J2EsIFQ+IFNvbWVUcmFpdDwnYT4gZm9yIFQKd2hlcmUKICAgIFQ6ICdhLAp7CiAgICB0eXBlIE91dHB1dCA9IHUzMjsKfQpgYGAKClRoZSB0eXBlIGRlZmluaXRpb24gY29udGFpbnMgc29tZSBmaWVsZCB3aG9zZSB0eXBlIHJlcXVpcmVzIGFuIG91dGxpdmVzCmFubm90YXRpb24uIE91dGxpdmVzIGFubm90YXRpb25zIChlLmcuLCBgVDogJ2FgKSBhcmUgdXNlZCB0byBndWFyYW50ZWUgdGhhdCBhbGwKdGhlIGRhdGEgaW4gYFRgIGlzIHZhbGlkIGZvciBhdCBsZWFzdCB0aGUgbGlmZXRpbWUgYCdhYC4gVGhpcyBzY2VuYXJpbyBtb3N0CmNvbW1vbmx5IGFyaXNlcyB3aGVuIHRoZSB0eXBlIGNvbnRhaW5zIGFuIGFzc29jaWF0ZWQgdHlwZSByZWZlcmVuY2UgbGlrZQpgPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dGAsIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBjb2RlLgoKVGhlcmUsIHRoZSB3aGVyZSBjbGF1c2UgYFQ6ICdhYCB0aGF0IGFwcGVhcnMgb24gdGhlIGltcGwgaXMgbm90IGtub3duIHRvIGJlCnNhdGlzZmllZCBvbiB0aGUgc3RydWN0LiBUbyBtYWtlIHRoaXMgZXhhbXBsZSBjb21waWxlLCB5b3UgaGF2ZSB0byBhZGQgYQp3aGVyZS1jbGF1c2UgbGlrZSBgVDogJ2FgIHRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbjoKCmBgYApzdHJ1Y3QgRm9vPCdhLCBUPgp3aGVyZQogICAgVDogJ2EsCnsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dAp9Cgp0cmFpdCBTb21lVHJhaXQ8J2E+IHsKICAgIHR5cGUgT3V0cHV0Owp9CgppbXBsPCdhLCBUPiBTb21lVHJhaXQ8J2E+IGZvciBUCndoZXJlCiAgICBUOiAnYSwKewogICAgdHlwZSBPdXRwdXQgPSB1MzI7Cn0KYGBgCgAU////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8B3QkAAADdCfMIsAIA4TkmAQAA2AQAAgYA2QQBAAQAxAMOAAAD1wQABADEAw4AAADXBAIFAQLZAQEBAPMIAAHYBAAEAMQDDgAAAtcEAAEEAK8DJAAAA9YEAAQArwMkAAAA1gQBAQDzCAACrwIAsAMSAAACAgVFMDMwOQABHwUAAAAF8wgEAK8DJAAAANYEAQEB9wgAAdcEALICAJA6JgEAAN0EAAACsgIAkDomAQACArUFQSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGEgbGlmZXRpbWUgY29uc3RyYWludCBvciBoYXMgYSBsaWZldGltZSB0aGF0CmRvZXMgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEwCi8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIFQgaXMgbm90IGNvbnN0cmFpbmVkIHRvIHRoZSBzdGF0aWMgbGlmZXRpbWUKLy8gdGhlIHJlZmVyZW5jZSBuZWVkcwpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYAoKVHlwZSBwYXJhbWV0ZXJzIGluIHR5cGUgZGVmaW5pdGlvbnMgaGF2ZSBsaWZldGltZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdApyZXByZXNlbnQgaG93IGxvbmcgdGhlIGRhdGEgc3RvcmVkIHdpdGhpbiB0aGVtIGlzIGd1YXJhbnRlZWQgdG8gbGl2ZS4gVGhpcwpsaWZldGltZSBtdXN0IGJlIGFzIGxvbmcgYXMgdGhlIGRhdGEgbmVlZHMgdG8gYmUgYWxpdmUsIGFuZCBtaXNzaW5nIHRoZQpjb25zdHJhaW50IHRoYXQgZGVub3RlcyB0aGlzIHdpbGwgY2F1c2UgdGhpcyBlcnJvci4KClRoaXMgd2lsbCBjb21waWxlLCBiZWNhdXNlIGl0IGhhcyB0aGUgY29uc3RyYWludCBvbiB0aGUgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKc3RydWN0IEZvbzxUOiAnc3RhdGljPiB7CiAgICBmb286ICYnc3RhdGljIFQKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w+1BQAAALUF8wiyAgCQOiYBAADcBAACBgDdBAEABADEAw4AAAPbBAAEAMQDDgAAANsEAgUBAtkBAQEA8wgAAdwEAAQAxAMOAAAC2wQAAQQArwMkAAAD2gQABACvAyQAAADaBAEBAPMIAAKxAgCwAxIAAAICBUUwMzEwAAEfBQAAAAXzCAQArwMkAAAA2gQBAQH3CAAB2wQAtAIAvzomAQAA4QQAAAK0AgC/OiYBAAIC6wtUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZXJlIGlzIGFuIHVuc2F0aXNmaWVkIG91dGxpdmVzIGJvdW5kIGludm9sdmluZyBhbgplbGlkZWQgcmVnaW9uIGFuZCBhIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIgb3IgYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMxMQpmbiBub19yZXN0cmljdGlvbjxUPih4OiAmKCkpIC0+ICYoKSB7CiAgICB3aXRoX3Jlc3RyaWN0aW9uOjo8VD4oeCkKfQoKZm4gd2l0aF9yZXN0cmljdGlvbjwnYSwgVDogJ2E+KHg6ICYnYSAoKSkgLT4gJidhICgpIHsKICAgIHgKfQpgYGAKCldoeSBkb2Vzbid0IHRoaXMgY29kZSBjb21waWxlPyBJdCBoZWxwcyB0byBsb29rIGF0IHRoZSBsaWZldGltZSBib3VuZHMgdGhhdCBhcmUKYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgY29tcGlsZXIuIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgpbbGlmZXRpbWUgZWxpc2lvbl0oIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2xpZmV0aW1lLWVsaXNpb24uaHRtbCkuCgpUaGUgY29tcGlsZXIgZWxpZGVzIHRoZSBsaWZldGltZSBvZiBgeGAgYW5kIHRoZSByZXR1cm4gdHlwZSB0byBzb21lIGFyYml0cmFyeQpsaWZldGltZSBgJ2Fub25gIGluIGBub19yZXN0cmljdGlvbigpYC4gVGhlIG9ubHkgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZQpjb21waWxlciBpcyB0aGF0IGAnYW5vbmAgaXMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24uIFdoZW4KY2FsbGluZyBgd2l0aF9yZXN0cmljdGlvbigpYCwgdGhlIGNvbXBpbGVyIHJlcXVpcmVzIHRoZSBjb21wbGV0ZWx5IHVucmVsYXRlZAp0eXBlIHBhcmFtZXRlciBgVGAgdG8gb3V0bGl2ZSBgJ2Fub25gIGJlY2F1c2Ugb2YgdGhlIGBUOiAnYWAgYm91bmQgaW4KYHdpdGhfcmVzdHJpY3Rpb24oKWAuIFRoaXMgY2F1c2VzIGFuIGVycm9yIGJlY2F1c2UgYFRgIGlzIG5vdCByZXF1aXJlZCB0bwpvdXRsaXZlIGAnYW5vbmAgaW4gYG5vX3Jlc3RyaWN0aW9uKClgLgoKSWYgYG5vX3Jlc3RyaWN0aW9uKClgIHdlcmUgdG8gdXNlIGAmVGAgaW5zdGVhZCBvZiBgJigpYCBhcyBhbiBhcmd1bWVudCwgdGhlCmNvbXBpbGVyIHdvdWxkIGhhdmUgYWRkZWQgYW4gaW1wbGllZCBib3VuZCwgY2F1c2luZyB0aGlzIHRvIGNvbXBpbGUuCgpUaGlzIGVycm9yIGNhbiBiZSByZXNvbHZlZCBieSBleHBsaWNpdGx5IG5hbWluZyB0aGUgZWxpZGVkIGxpZmV0aW1lIGZvciBgeGAgYW5kCnRoZW4gZXhwbGljaWx5IHJlcXVpcmluZyB0aGF0IHRoZSBnZW5lcmljIHBhcmFtZXRlciBgVGAgb3V0bGl2ZXMgdGhhdCBsaWZldGltZToKCmBgYApmbiBub19yZXN0cmljdGlvbjwnYSwgVDogJ2E+KHg6ICYnYSAoKSkgLT4gJidhICgpIHsKICAgIHdpdGhfcmVzdHJpY3Rpb246OjxUPih4KQp9CgpmbiB3aXRoX3Jlc3RyaWN0aW9uPCdhLCBUOiAnYT4oeDogJidhICgpKSAtPiAmJ2EgKCkgewogICAgeAp9CmBgYAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////AesLAAAA6wvzCLQCAL86JgEAAOAEAAIGAOEEAQAEAMQDDgAAA98EAAQAxAMOAAAA3wQCBQEC2QEBAQDzCAAB4AQABADEAw4AAALfBAABBACvAyQAAAPeBAAEAK8DJAAAAN4EAQEA8wgAArMCALADEgAAAgIFRTAzMTEAAR8FAAAABfMIBACvAyQAAADeBAEBAfcIAAHfBAC2AgDuOiYBAADlBAAAArYCAO46JgEAAgL8BiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClJlZmVyZW5jZSdzIGxpZmV0aW1lIG9mIGJvcnJvd2VkIGNvbnRlbnQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnB1YiBmbiBvcHRfc3RyPCdhPihtYXliZXN0cjogJidhIE9wdGlvbjxTdHJpbmc+KSAtPiAmJ3N0YXRpYyBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIEludmFsaWQgbGlmZXRpbWUhCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGxlc3NlbiB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUgb3IgZmluZCBhIHdheSB0byBub3QgaGF2ZQp0byB1c2UgdGhpcyByZWZlcmVuY2Ugb3V0c2lkZSBvZiBpdHMgY3VycmVudCBzY29wZSAoYnkgcnVubmluZyB0aGUgY29kZSBkaXJlY3RseQppbiB0aGUgc2FtZSBibG9jayBmb3IgZXhhbXBsZT8pOgoKYGBgCi8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgaXNzdWUgYnkgc3dpdGNoaW5nIGZyb20gInN0YXRpYyIgbGlmZXRpbWUgdG8gJ2EKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnYSBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIE9rIQogICAgfQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////w/8BgAAAPwG8wi2AgDuOiYBAADkBAACBgDlBAEABADEAw4AAAPjBAAEAMQDDgAAAOMEAgUBAtkBAQEA8wgAAeQEAAQAxAMOAAAC4wQAAQQArwMkAAAD4gQABACvAyQAAADiBAEBAPMIAAK1AgCwAxIAAAICBUUwMzEyAAEfBQAAAAXzCAQArwMkAAAA4gQBAQH3CAAB4wQAuAIAnTsmAQAA6QQAAAK4AgCdOyYBAAICkQZBIGB3aGVyZWAgY2xhdXNlIGNvbnRhaW5zIGEgbmVzdGVkIHF1YW50aWZpY2F0aW9uIG92ZXIgbGlmZXRpbWVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMxNgp0cmFpdCBUcjwnYSwgJ2I+IHt9CgpmbiBmb288VD4odDogVCkKd2hlcmUKICAgIGZvcjwnYT4gJidhIFQ6IGZvcjwnYj4gVHI8J2EsICdiPiwgLy8gZXJyb3I6IG5lc3RlZCBxdWFudGlmaWNhdGlvbgp7Cn0KYGBgCgpSdXN0IHN5bnRheCBhbGxvd3MgbGlmZXRpbWUgcXVhbnRpZmljYXRpb25zIGluIHR3byBwbGFjZXMgd2l0aGluCmB3aGVyZWAgY2xhdXNlczogUXVhbnRpZnlpbmcgb3ZlciB0aGUgdHJhaXQgYm91bmQgb25seSAoYXMgaW4KYFR5OiBmb3I8J2w+IFRyYWl0PCdsPmApIGFuZCBxdWFudGlmeWluZyBvdmVyIHRoZSB3aG9sZSBjbGF1c2UKKGFzIGluIGBmb3I8J2w+ICYnbCBUeTogVHJhaXQ8J2w+YCkuIFVzaW5nIGJvdGggaW4gdGhlIHNhbWUgY2xhdXNlCmxlYWRzIHRvIGEgbmVzdGVkIGxpZmV0aW1lIHF1YW50aWZpY2F0aW9uLCB3aGljaCBpcyBub3Qgc3VwcG9ydGVkLgoKVGhlIGZvbGxvd2luZyBleGFtcGxlIGNvbXBpbGVzLCBiZWNhdXNlIHRoZSBjbGF1c2Ugd2l0aCB0aGUgbmVzdGVkCnF1YW50aWZpY2F0aW9uIGhhcyBiZWVuIHJld3JpdHRlbiB0byB1c2Ugb25seSBvbmUgYGZvcjw+YDoKCmBgYAp0cmFpdCBUcjwnYSwgJ2I+IHt9CgpmbiBmb288VD4odDogVCkKd2hlcmUKICAgIGZvcjwnYSwgJ2I+ICYnYSBUOiBUcjwnYSwgJ2I+LCAvLyBvawp7Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8HkQYAAACRBvMIuAIAnTsmAQAA6AQAAgYA6QQBAAQAxAMOAAAD5wQABADEAw4AAADnBAIFAQLZAQEBAPMIAAHoBAAEAMQDDgAAAucEAAEEAK8DJAAAA+YEAAQArwMkAAAA5gQBAQDzCAACtwIAsAMSAAACAgVFMDMxNgABHwUAAAAF8wgEAK8DJAAAAOYEAQEB9wgAAecEALoCAMw7JgEAAO0EAAACugIAzDsmAQACApUFQW4gYGlmYCBleHByZXNzaW9uIGlzIG1pc3NpbmcgYW4gYGVsc2VgIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMxNwpsZXQgeCA9IDU7CmxldCBhID0gaWYgeCA9PSA1IHsKICAgIDEKfTsKYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGBpZmAgZXhwcmVzc2lvbiB3aXRob3V0IGFuIGBlbHNlYCBibG9jayBpcyB1c2VkIGluIGEKY29udGV4dCB3aGVyZSBhIHR5cGUgb3RoZXIgdGhhbiBgKClgIGlzIGV4cGVjdGVkLiBJbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLAp0aGUgYGxldGAgZXhwcmVzc2lvbiB3YXMgZXhwZWN0aW5nIGEgdmFsdWUgYnV0IHNpbmNlIHRoZXJlIHdhcyBubyBgZWxzZWAsIG5vCnZhbHVlIHdhcyByZXR1cm5lZC4KCkFuIGBpZmAgZXhwcmVzc2lvbiB3aXRob3V0IGFuIGBlbHNlYCBibG9jayBoYXMgdGhlIHR5cGUgYCgpYCwgc28gdGhpcyBpcyBhIHR5cGUKZXJyb3IuIFRvIHJlc29sdmUgaXQsIGFkZCBhbiBgZWxzZWAgYmxvY2sgaGF2aW5nIHRoZSBzYW1lIHR5cGUgYXMgdGhlIGBpZmAKYmxvY2suCgpTbyB0byBmaXggdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZToKCmBgYApsZXQgeCA9IDU7CmxldCBhID0gaWYgeCA9PSA1IHsKICAgIDEKfSBlbHNlIHsKICAgIDIKfTsKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//f5UFAAAAlQXzCLoCAMw7JgEAAOwEAAIGAO0EAQAEAMQDDgAAA+sEAAQAxAMOAAAA6wQCBQEC2QEBAQDzCAAB7AQABADEAw4AAALrBAABBACvAyQAAAPqBAAEAK8DJAAAAOoEAQEA8wgAArkCALADEgAAAgIFRTAzMTcAAR8FAAAABfMIBACvAyQAAADqBAEBAfcIAAHrBAC8AgD7OyYBAADxBAAAArwCAPs7JgEAAgLmBEEgY3Jvc3MtY3JhdGUgb3B0LW91dCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIHdhc24ndCBhIHN0cnVjdApvciBlbnVtIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIxCiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKc3RydWN0IEZvbzsKCmltcGwgIVN5bmMgZm9yIEZvbyB7fQoKdW5zYWZlIGltcGwgU2VuZCBmb3IgJidzdGF0aWMgRm9vIHt9Ci8vIGVycm9yOiBjcm9zcy1jcmF0ZSB0cmFpdHMgd2l0aCBhIGRlZmF1bHQgaW1wbCwgbGlrZSBgY29yZTo6bWFya2VyOjpTZW5kYCwKLy8gICAgICAgIGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvciBhIHN0cnVjdC9lbnVtIHR5cGUsIG5vdAovLyAgICAgICAgYCYnc3RhdGljIEZvb2AKYGBgCgpPbmx5IHN0cnVjdHMgYW5kIGVudW1zIGFyZSBwZXJtaXR0ZWQgdG8gaW1wbCBTZW5kLCBTeW5jLCBhbmQgb3RoZXIgb3B0LW91dAp0cmFpdCwgYW5kIHRoZSBzdHJ1Y3Qgb3IgZW51bSBtdXN0IGJlIGxvY2FsIHRvIHRoZSBjdXJyZW50IGNyYXRlLiBTbywgZm9yCmV4YW1wbGUsIGB1bnNhZmUgaW1wbCBTZW5kIGZvciBSYzxGb28+YCBpcyBub3QgYWxsb3dlZC4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmBAAAAOYE8wi8AgD7OyYBAADwBAACBgDxBAEABADEAw4AAAPvBAAEAMQDDgAAAO8EAgUBAtkBAQEA8wgAAfAEAAQAxAMOAAAC7wQAAQQArwMkAAAD7gQABACvAyQAAADuBAEBAPMIAAK7AgCwAxIAAAICBUUwMzIxAAEfBQAAAAXzCAQArwMkAAAA7gQBAQH3CAAB7wQAvgIAqjwmAQAA9QQAAAK+AgCqPCYBAAIC4wNBIGJ1aWx0LWluIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBleHBsaWNpdGx5LiBBbGwgaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdAphcmUgcHJvdmlkZWQgYXV0b21hdGljYWxseSBieSB0aGUgY29tcGlsZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIyCnN0cnVjdCBGb287CgppbXBsIFNpemVkIGZvciBGb28ge30gLy8gZXJyb3IhCmBgYAoKVGhlIGBTaXplZGAgdHJhaXQgaXMgYSBzcGVjaWFsIHRyYWl0IGJ1aWx0LWluIHRvIHRoZSBjb21waWxlciBmb3IgdHlwZXMgd2l0aCBhCmNvbnN0YW50IHNpemUga25vd24gYXQgY29tcGlsZS10aW1lLiBUaGlzIHRyYWl0IGlzIGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQKZm9yIHR5cGVzIGFzIG5lZWRlZCBieSB0aGUgY29tcGlsZXIsIGFuZCBpdCBpcyBjdXJyZW50bHkgZGlzYWxsb3dlZCB0bwpleHBsaWNpdGx5IGltcGxlbWVudCBpdCBmb3IgYSB0eXBlLgoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////f+MDAAAA4wPzCL4CAKo8JgEAAPQEAAIGAPUEAQAEAMQDDgAAA/MEAAQAxAMOAAAA8wQCBQEC2QEBAQDzCAAB9AQABADEAw4AAALzBAABBACvAyQAAAPyBAAEAK8DJAAAAPIEAQEA8wgAAr0CALADEgAAAgIFRTAzMjIAAR8FAAAABfMIBACvAyQAAADyBAEBAfcIAAHzBADAAgDZPCYBAAD5BAAAAsACANk8JgEAAgL2BEFuIGFzc29jaWF0ZWQgY29uc3Qgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjMKdHJhaXQgRm9vIHsKICAgIHR5cGUgTjsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCBjb25zdCwgd2hpY2ggZG9lc24ndCBtYXRjaCBpdHMKICAgIC8vICAgICAgICB0cmFpdCBgPEJhciBhcyBGb28+YAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBhc3NvY2lhdGVkIGNvbnN0IHdhc24ndCBtaXNzcGVsbGVkIGFuZCB0aGUgY29ycmVjdCB0cmFpdAp3YXMgaW1wbGVtZW50ZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgdHlwZSBOID0gdTMyOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsgLy8gb2shCn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////x/2BAAAAPYE8wjAAgDZPCYBAAD4BAACBgD5BAEABADEAw4AAAP3BAAEAMQDDgAAAPcEAgUBAtkBAQEA8wgAAfgEAAQAxAMOAAAC9wQAAQQArwMkAAAD9gQABACvAyQAAAD2BAEBAPMIAAK/AgCwAxIAAAICBUUwMzIzAAEfBQAAAAXzCAQArwMkAAAA9gQBAQH3CAAB9wQAwgIAiD0mAQAA/QQAAALCAgCIPSYBAAIC2wRBIG1ldGhvZCB3YXMgaW1wbGVtZW50ZWQgd2hlbiBhbm90aGVyIHRyYWl0IGl0ZW0gd2FzIGV4cGVjdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7CgogICAgZm4gTSgpOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIE4oKSB7fQogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgbWV0aG9kLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBtZXRob2QgbmFtZSB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQKdmVyaWZ5IHRoYXQgeW91IGFyZSBpbmRlZWQgaW1wbGVtZW50aW5nIHRoZSBjb3JyZWN0IHRyYWl0IGl0ZW1zLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKCiAgICBmbiBNKCk7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7CgogICAgZm4gTSgpIHt9IC8vIG9rIQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z/bBAAAANsE8wjCAgCIPSYBAAD8BAACBgD9BAEABADEAw4AAAP7BAAEAMQDDgAAAPsEAgUBAtkBAQEA8wgAAfwEAAQAxAMOAAAC+wQAAQQArwMkAAAD+gQABACvAyQAAAD6BAEBAPMIAALBAgCwAxIAAAICBUUwMzI0AAEfBQAAAAXzCAQArwMkAAAA+gQBAQH3CAAB+wQAxAIAtz0mAQAAgQUAAALEAgC3PSYBAAICkAVBbiBhc3NvY2lhdGVkIHR5cGUgd2FzIGltcGxlbWVudGVkIHdoZW4gYW5vdGhlciB0cmFpdCBpdGVtIHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjUKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsKICAgIC8vIGVycm9yOiBpdGVtIGBOYCBpcyBhbiBhc3NvY2lhdGVkIHR5cGUsIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggaXRzCiAgICAvLyAgICAgICAgdHJhaXQgYDxCYXIgYXMgRm9vPmAKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCB0eXBlIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIHlvdXIKaW1wbGVtZW50YXRpb24gY29ycmVzcG9uZHMgdG8gdGhlIHRyYWl0IGRlZmluaXRpb24uIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgdHlwZSBOID0gdTMyOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsgLy8gb2shCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//A5AFAAAAkAXzCMQCALc9JgEAAIAFAAIGAIEFAQAEAMQDDgAAA/8EAAQAxAMOAAAA/wQCBQEC2QEBAQDzCAABgAUABADEAw4AAAL/BAABBACvAyQAAAP+BAAEAK8DJAAAAP4EAQEA8wgAAsMCALADEgAAAgIFRTAzMjUAAR8FAAAABfMIBACvAyQAAAD+BAEBAfcIAAH/BADGAgDmPSYBAACFBQAAAsYCAOY9JgEAAgLkAkFuIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgZG9lc24ndCBtYXRjaCB0aGUgdHlwZSBjb25zdHJhaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNgp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBCQVI6IHUzMiA9IDU7IC8vIGVycm9yLCBleHBlY3RlZCBib29sLCBmb3VuZCB1MzIKfQpgYGAKClRoZSB0eXBlcyBvZiBhbnkgYXNzb2NpYXRlZCBjb25zdGFudHMgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbiBtdXN0IG1hdGNoIHRoZQp0eXBlcyBpbiB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////AeQCAAAA5ALzCMYCAOY9JgEAAIQFAAIGAIUFAQAEAMQDDgAAA4MFAAQAxAMOAAAAgwUCBQEC2QEBAQDzCAABhAUABADEAw4AAAKDBQABBACvAyQAAAOCBQAEAK8DJAAAAIIFAQEA8wgAAsUCALADEgAAAgIFRTAzMjYAAR8FAAAABfMIBACvAyQAAACCBQEBAfcIAAGDBQDIAgCVPiYBAACJBQAAAsgCAJU+JgEAAgLOBlRoZSBVbnNpemUgdHJhaXQgc2hvdWxkIG5vdCBiZSBpbXBsZW1lbnRlZCBkaXJlY3RseS4gQWxsIGltcGxlbWVudGF0aW9ucyBvZgpVbnNpemUgYXJlIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvbXBpbGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyOAojIVtmZWF0dXJlKHVuc2l6ZSldCgp1c2Ugc3RkOjptYXJrZXI6OlVuc2l6ZTsKCnB1YiBzdHJ1Y3QgTXlUeXBlOwoKaW1wbDxUPiBVbnNpemU8VD4gZm9yIE15VHlwZSB7fQpgYGAKCklmIHlvdSBhcmUgZGVmaW5pbmcgeW91ciBvd24gc21hcnQgcG9pbnRlciB0eXBlIGFuZCB3b3VsZCBsaWtlIHRvIGVuYWJsZQpjb252ZXJzaW9uIGZyb20gYSBzaXplZCB0byBhbiB1bnNpemVkIHR5cGUgd2l0aCB0aGUKW0RTVCBjb2VyY2lvbiBzeXN0ZW1dW1JGQyA5ODJdLCB1c2UgW2BDb2VyY2VVbnNpemVkYF0gaW5zdGVhZC4KCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnB1YiBzdHJ1Y3QgTXlUeXBlPFQ6ID9TaXplZD4gewogICAgZmllbGRfd2l0aF91bnNpemVkX3R5cGU6IFQsCn0KCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxNeVR5cGU8VT4+IGZvciBNeVR5cGU8VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpbUkZDIDk4Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzA5ODItZHN0LWNvZXJjaW9uLm1kCltgQ29lcmNlVW5zaXplZGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9vcHMvdHJhaXQuQ29lcmNlVW5zaXplZC5odG1sCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/zgYAAADOBvMIyAIAlT4mAQAAiAUAAgYAiQUBAAQAxAMOAAADhwUABADEAw4AAACHBQIFAQLZAQEBAPMIAAGIBQAEAMQDDgAAAocFAAEEAK8DJAAAA4YFAAQArwMkAAAAhgUBAQDzCAACxwIAsAMSAAACAgVFMDMyOAABHwUAAAAF8wgEAK8DJAAAAIYFAQEB9wgAAYcFAMoCAMQ+JgEAAI0FAAACygIAxD4mAQACArkFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhY2Nlc3MgYW4gYXNzb2NpYXRlZCBjb25zdGFudCB0aHJvdWdoIGVpdGhlciBhIGdlbmVyaWMKdHlwZSBwYXJhbWV0ZXIgb3IgYFNlbGZgLiBUaGlzIGlzIG5vdCBzdXBwb3J0ZWQgeWV0LiBBbiBleGFtcGxlIGNhdXNpbmcgdGhpcwplcnJvciBpcyBzaG93biBiZWxvdzoKCmBgYAp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBmNjQ7Cn0KCnN0cnVjdCBNeVN0cnVjdDsKCmltcGwgRm9vIGZvciBNeVN0cnVjdCB7CiAgICBjb25zdCBCQVI6IGY2NCA9IDBmNjQ7Cn0KCmZuIGdldF9iYXJfYmFkPEY6IEZvbz4odDogRikgLT4gZjY0IHsKICAgIEY6OkJBUgp9CmBgYAoKQ3VycmVudGx5LCB0aGUgdmFsdWUgb2YgYEJBUmAgZm9yIGEgcGFydGljdWxhciB0eXBlIGNhbiBvbmx5IGJlIGFjY2Vzc2VkCnRocm91Z2ggYSBjb25jcmV0ZSB0eXBlLCBhcyBzaG93biBiZWxvdzoKCmBgYAp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBmNjQ7Cn0KCnN0cnVjdCBNeVN0cnVjdDsKCmltcGwgRm9vIGZvciBNeVN0cnVjdCB7CiAgICBjb25zdCBCQVI6IGY2NCA9IDBmNjQ7Cn0KCmZuIGdldF9iYXJfZ29vZCgpIC0+IGY2NCB7CiAgICA8TXlTdHJ1Y3QgYXMgRm9vPjo6QkFSCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkFAAAAuQXzCMoCAMQ+JgEAAIwFAAIGAI0FAQAEAMQDDgAAA4sFAAQAxAMOAAAAiwUCBQEC2QEBAQDzCAABjAUABADEAw4AAAKLBQABBACvAyQAAAOKBQAEAK8DJAAAAIoFAQEA8wgAAskCALADEgAAAgIFRTAzMjkAAR8FAAAABfMIBACvAyQAAACKBQEBAfcIAAGLBQDMAgDzPiYBAACRBQAAAswCAPM+JgEAAgKpBVByaXZhdGUgaXRlbXMgY2Fubm90IGJlIHB1YmxpY2x5IHJlLWV4cG9ydGVkLiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHlvdQphdHRlbXB0ZWQgdG8gYHB1YiB1c2VgIGEgdHlwZSBvciB2YWx1ZSB0aGF0IHdhcyBub3QgaXRzZWxmIHB1YmxpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjQKbW9kIGEgewogICAgZm4gZm9vKCkge30KCiAgICBtb2QgYSB7CiAgICAgICAgcHViIHVzZSBzdXBlcjo6Zm9vOyAvLyBlcnJvciEKICAgIH0KfQpgYGAKClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGl0ZW1zIHRoYXQgeW91IGFyZQpyZS1leHBvcnRpbmcgYXJlIHRoZW1zZWx2ZXMgbWFya2VkIHdpdGggYHB1YmA6CgpgYGAKbW9kIGEgewogICAgcHViIGZuIGZvbygpIHt9IC8vIG9rIQoKICAgIG1vZCBhIHsKICAgICAgICBwdWIgdXNlIHN1cGVyOjpmb287CiAgICB9Cn0KYGBgCgpTZWUgdGhlIFtVc2UgRGVjbGFyYXRpb25zXVt1c2UtZGVjbGFyYXRpb25zXSBzZWN0aW9uIG9mIHRoZSByZWZlcmVuY2UgZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYy4KClt1c2UtZGVjbGFyYXRpb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdXNlLWRlY2xhcmF0aW9ucy5odG1sCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////P6kFAAAAqQXzCMwCAPM+JgEAAJAFAAIGAJEFAQAEAMQDDgAAA48FAAQAxAMOAAAAjwUCBQEC2QEBAQDzCAABkAUABADEAw4AAAKPBQABBACvAyQAAAOOBQAEAK8DJAAAAI4FAQEA8wgAAssCALADEgAAAgIFRTAzNjQAAR8FAAAABfMIBACvAyQAAACOBQEBAfcIAAGPBQDOAgCiPyYBAACVBQAAAs4CAKI/JgEAAgKRBVByaXZhdGUgbW9kdWxlcyBjYW5ub3QgYmUgcHVibGljbHkgcmUtZXhwb3J0ZWQuIFRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgeW91CmF0dGVtcHRlZCB0byBgcHViIHVzZWAgYSBtb2R1bGUgdGhhdCB3YXMgbm90IGl0c2VsZiBwdWJsaWMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY1Cm1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gdG8gdGhpcyBwcm9ibGVtIGlzIHRvIGVuc3VyZSB0aGF0IHRoZSBtb2R1bGUgdGhhdCB5b3UgYXJlCnJlLWV4cG9ydGluZyBpcyBpdHNlbGYgbWFya2VkIHdpdGggYHB1YmA6CgpgYGAKcHViIG1vZCBmb28gewogICAgcHViIGNvbnN0IFg6IHUzMiA9IDE7Cn0KCnB1YiB1c2UgZm9vIGFzIGZvbzI7CgpmbiBtYWluKCkge30KYGBgCgpTZWUgdGhlIFtVc2UgRGVjbGFyYXRpb25zXVt1c2UtZGVjbGFyYXRpb25zXSBzZWN0aW9uIG9mIHRoZSByZWZlcmVuY2UgZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYy4KClt1c2UtZGVjbGFyYXRpb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdXNlLWRlY2xhcmF0aW9ucy5odG1sCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//B5EFAAAAkQXzCM4CAKI/JgEAAJQFAAIGAJUFAQAEAMQDDgAAA5MFAAQAxAMOAAAAkwUCBQEC2QEBAQDzCAABlAUABADEAw4AAAKTBQABBACvAyQAAAOSBQAEAK8DJAAAAJIFAQEA8wgAAs0CALADEgAAAgIFRTAzNjUAAR8FAAAABfMIBACvAyQAAACSBQEBAfcIAAGTBQDQAgDRPyYBAACZBQAAAtACANE/JgEAAgKMBEFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gaW1wbGVtZW50IGBEcm9wYCBvbiBhIGNvbmNyZXRlIHNwZWNpYWxpemF0aW9uIG9mIGEKZ2VuZXJpYyB0eXBlLiBBbiBleGFtcGxlIGlzIHNob3duIGJlbG93OgoKYGBgY29tcGlsZV9mYWlsLEUwMzY2CnN0cnVjdCBGb288VD4gewogICAgdDogVAp9CgppbXBsIERyb3AgZm9yIEZvbzx1MzI+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoKVGhpcyBjb2RlIGlzIG5vdCBsZWdhbDogaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpYWxpemUgYERyb3BgIHRvIGEgc3Vic2V0IG9mCmltcGxlbWVudGF0aW9ucyBvZiBhIGdlbmVyaWMgdHlwZS4gT25lIHdvcmthcm91bmQgZm9yIHRoaXMgaXMgdG8gd3JhcCB0aGUKZ2VuZXJpYyB0eXBlLCBhcyBzaG93biBiZWxvdzoKCmBgYApzdHJ1Y3QgRm9vPFQ+IHsKICAgIHQ6IFQKfQoKc3RydWN0IEJhciB7CiAgICB0OiBGb288dTMyPgp9CgppbXBsIERyb3AgZm9yIEJhciB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8fjAQAAACMBPMI0AIA0T8mAQAAmAUAAgYAmQUBAAQAxAMOAAADlwUABADEAw4AAACXBQIFAQLZAQEBAPMIAAGYBQAEAMQDDgAAApcFAAEEAK8DJAAAA5YFAAQArwMkAAAAlgUBAQDzCAACzwIAsAMSAAACAgVFMDM2NgABHwUAAAAF8wgEAK8DJAAAAJYFAQEB9wgAAZcFANICAIBAJgEAAJ0FAAAC0gIAgEAmAQACAtgFQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBpbXBsZW1lbnQgYERyb3BgIG9uIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBnZW5lcmljIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY3CnRyYWl0IEZvbyB7fQoKc3RydWN0IE15U3RydWN0PFQ+IHsKICAgIHQ6IFQKfQoKaW1wbDxUOiBGb28+IERyb3AgZm9yIE15U3RydWN0PFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoKVGhpcyBjb2RlIGlzIG5vdCBsZWdhbDogaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpYWxpemUgYERyb3BgIHRvIGEgc3Vic2V0IG9mCmltcGxlbWVudGF0aW9ucyBvZiBhIGdlbmVyaWMgdHlwZS4gSW4gb3JkZXIgZm9yIHRoaXMgY29kZSB0byB3b3JrLCBgTXlTdHJ1Y3RgCm11c3QgYWxzbyByZXF1aXJlIHRoYXQgYFRgIGltcGxlbWVudHMgYEZvb2AuIEFsdGVybmF0aXZlbHksIGFub3RoZXIgb3B0aW9uIGlzCnRvIHdyYXAgdGhlIGdlbmVyaWMgdHlwZSBpbiBhbm90aGVyIHRoYXQgc3BlY2lhbGl6ZXMgYXBwcm9wcmlhdGVseToKCmBgYAp0cmFpdCBGb297fQoKc3RydWN0IE15U3RydWN0PFQ+IHsKICAgIHQ6IFQKfQoKc3RydWN0IE15U3RydWN0V3JhcHBlcjxUOiBGb28+IHsKICAgIHQ6IE15U3RydWN0PFQ+Cn0KCmltcGwgPFQ6IEZvbz4gRHJvcCBmb3IgTXlTdHJ1Y3RXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B9gFAAAA2AXzCNICAIBAJgEAAJwFAAIGAJ0FAQAEAMQDDgAAA5sFAAQAxAMOAAAAmwUCBQEC2QEBAQDzCAABnAUABADEAw4AAAKbBQABBACvAyQAAAOaBQAEAK8DJAAAAJoFAQEA8wgAAtECALADEgAAAgIFRTAzNjcAAR8FAAAABfMIBACvAyQAAACaBQEBAfcIAAGbBQDUAgCvQCYBAAChBQAAAtQCAK9AJgEAAgK+CUEgYmluYXJ5IGFzc2lnbm1lbnQgb3BlcmF0b3IgbGlrZSBgKz1gIG9yIGBePWAgd2FzIGFwcGxpZWQgdG8gYSB0eXBlIHRoYXQKZG9lc24ndCBzdXBwb3J0IGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OApsZXQgbXV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHR5cGUgYGYzMmAKCnggPDw9IDI7CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBjaGVjayB0aGF0IHRoaXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgYmluYXJ5Cm9wZXJhdGlvbi4gRXhhbXBsZToKCmBgYApsZXQgbXV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgdGhlIGBTaGxBc3NpZ25gIHRyYWl0Cgp4IDw8PSAyOyAvLyBvayEKYGBgCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJsb2FkIG1vc3Qgb3BlcmF0b3JzIGZvciB5b3VyIG93biB0eXBlIGJ5CmltcGxlbWVudGluZyB0aGUgYFtPUF1Bc3NpZ25gIHRyYWl0cyBmcm9tIGBzdGQ6Om9wc2AuCgpBbm90aGVyIHByb2JsZW0geW91IG1pZ2h0IGJlIGZhY2luZyBpcyB0aGlzOiBzdXBwb3NlIHlvdSd2ZSBvdmVybG9hZGVkIHRoZSBgK2AKb3BlcmF0b3IgZm9yIHNvbWUgdHlwZSBgRm9vYCBieSBpbXBsZW1lbnRpbmcgdGhlIGBzdGQ6Om9wczo6QWRkYCB0cmFpdCBmb3IKYEZvb2AsIGJ1dCB5b3UgZmluZCB0aGF0IHVzaW5nIGArPWAgZG9lcyBub3Qgd29yaywgYXMgaW4gdGhpcyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY4CnVzZSBzdGQ6Om9wczo6QWRkOwoKc3RydWN0IEZvbyh1MzIpOwoKaW1wbCBBZGQgZm9yIEZvbyB7CiAgICB0eXBlIE91dHB1dCA9IEZvbzsKCiAgICBmbiBhZGQoc2VsZiwgcmhzOiBGb28pIC0+IEZvbyB7CiAgICAgICAgRm9vKHNlbGYuMCArIHJocy4wKQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4OiBGb28gPSBGb28oNSk7CiAgICB4ICs9IEZvbyg3KTsgLy8gZXJyb3IsIGArPSBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgdHlwZSBgRm9vYAp9CmBgYAoKVGhpcyBpcyBiZWNhdXNlIGBBZGRBc3NpZ25gIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkLCBzbyB5b3UgbmVlZCB0bwptYW51YWxseSBpbXBsZW1lbnQgaXQgZm9yIHlvdXIgdHlwZS4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z++CQAAAL4J8wjUAgCvQCYBAACgBQACBgChBQEABADEAw4AAAOfBQAEAMQDDgAAAJ8FAgUBAtkBAQEA8wgAAaAFAAQAxAMOAAACnwUAAQQArwMkAAADngUABACvAyQAAACeBQEBAPMIAALTAgCwAxIAAAICBUUwMzY4AAEfBQAAAAXzCAQArwMkAAAAngUBAQH3CAABnwUA1gIA3kAmAQAApQUAAALWAgDeQCYBAAIC+wZBIGJpbmFyeSBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OQpsZXQgeCA9IDEyZjMyOyAvLyBlcnJvcjogYmluYXJ5IG9wZXJhdGlvbiBgPDxgIGNhbm5vdCBiZSBhcHBsaWVkIHRvCiAgICAgICAgICAgICAgIC8vICAgICAgICB0eXBlIGBmMzJgCgp4IDw8IDI7CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBjaGVjayB0aGF0IHRoaXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgYmluYXJ5Cm9wZXJhdGlvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDEydTMyOyAvLyB0aGUgYHUzMmAgdHlwZSBkb2VzIGltcGxlbWVudCBpdDoKICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvc3RkL29wcy90cmFpdC5TaGwuaHRtbAoKeCA8PCAyOyAvLyBvayEKYGBgCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJsb2FkIG1vc3Qgb3BlcmF0b3JzIGZvciB5b3VyIG93biB0eXBlIGJ5CmltcGxlbWVudGluZyB0cmFpdHMgZnJvbSBgc3RkOjpvcHNgLgoKU3RyaW5nIGNvbmNhdGVuYXRpb24gYXBwZW5kcyB0aGUgc3RyaW5nIG9uIHRoZSByaWdodCB0byB0aGUgc3RyaW5nIG9uIHRoZQpsZWZ0IGFuZCBtYXkgcmVxdWlyZSByZWFsbG9jYXRpb24uIFRoaXMgcmVxdWlyZXMgb3duZXJzaGlwIG9mIHRoZSBzdHJpbmcKb24gdGhlIGxlZnQuIElmIHNvbWV0aGluZyBzaG91bGQgYmUgYWRkZWQgdG8gYSBzdHJpbmcgbGl0ZXJhbCwgbW92ZSB0aGUKbGl0ZXJhbCB0byB0aGUgaGVhcCBieSBhbGxvY2F0aW5nIGl0IHdpdGggYHRvX293bmVkKClgIGxpa2UgaW4KYCJZb3VyIHRleHQiLnRvX293bmVkKClgLgoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wf7BgAAAPsG8wjWAgDeQCYBAACkBQACBgClBQEABADEAw4AAAOjBQAEAMQDDgAAAKMFAgUBAtkBAQEA8wgAAaQFAAQAxAMOAAACowUAAQQArwMkAAADogUABACvAyQAAACiBQEBAPMIAALVAgCwAxIAAAICBUUwMzY5AAEfBQAAAAXzCAQArwMkAAAAogUBAQH3CAABowUA2AIAjUEmAQAAqQUAAALYAgCNQSYBAAICvAVUaGUgbWF4aW11bSB2YWx1ZSBvZiBhbiBlbnVtIHdhcyByZWFjaGVkLCBzbyBpdCBjYW5ub3QgYmUgYXV0b21hdGljYWxseQpzZXQgaW4gdGhlIG5leHQgZW51bSB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCiAgICBZLCAvLyBlcnJvcjogZW51bSBkaXNjcmltaW5hbnQgb3ZlcmZsb3dlZCBvbiB2YWx1ZSBhZnRlcgogICAgICAgLy8gICAgICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDc6IGk2NDsgc2V0IGV4cGxpY2l0bHkgdmlhCiAgICAgICAvLyAgICAgICAgWSA9IC05MjIzMzcyMDM2ODU0Nzc1ODA4IGlmIHRoYXQgaXMgZGVzaXJlZCBvdXRjb21lCn0KYGBgCgpUbyBmaXggdGhpcywgcGxlYXNlIHNldCBtYW51YWxseSB0aGUgbmV4dCBlbnVtIHZhbHVlIG9yIHB1dCB0aGUgZW51bSB2YXJpYW50CndpdGggdGhlIG1heGltdW0gdmFsdWUgYXQgdGhlIGVuZCBvZiB0aGUgZW51bS4gRXhhbXBsZXM6CgpgYGAKI1tyZXByKGk2NCldCmVudW0gRm9vIHsKICAgIFggPSAweDdmZmZmZmZmZmZmZmZmZmYsCiAgICBZID0gMCwgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWSA9IDAsIC8vIG9rIQogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8PvAUAAAC8BfMI2AIAjUEmAQAAqAUAAgYAqQUBAAQAxAMOAAADpwUABADEAw4AAACnBQIFAQLZAQEBAPMIAAGoBQAEAMQDDgAAAqcFAAEEAK8DJAAAA6YFAAQArwMkAAAApgUBAQDzCAAC1wIAsAMSAAACAgVFMDM3MAABHwUAAAAF8wgEAK8DJAAAAKYFAQEB9wgAAacFANoCALxBJgEAAK0FAAAC2gIAvEEmAQACAt0FQSB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYW5vdGhlciB3aGljaCBhbHJlYWR5IGF1dG9tYXRpY2FsbHkgaW1wbGVtZW50ZWQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MQp0cmFpdCBGb28geyBmbiBmb28oJnNlbGYpIHsgfSB9CnRyYWl0IEJhcjogRm9vIHsgfQp0cmFpdCBCYXo6IEJhciB7IH0KCmltcGwgQmFyIGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCBpbXBsZW1lbnRzIGBCYXJgIGJ5IGRlZmluaXRpb24KaW1wbCBGb28gZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgIGltcGxlbWVudHMgYEJhcmAgd2hpY2ggaW1wbGVtZW50cyBgRm9vYAppbXBsIEJheiBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgKHRyaXZpYWxseSkgaW1wbGVtZW50cyBgQmF6YAppbXBsIEJheiBmb3IgQmFyIHsgfSAvLyBOb3RlOiBUaGlzIGlzIE9LCmBgYAoKV2hlbiBgVHJhaXQyYCBpcyBhIHN1YnRyYWl0IG9mIGBUcmFpdDFgIChmb3IgZXhhbXBsZSwgd2hlbiBgVHJhaXQyYCBoYXMgYQpkZWZpbml0aW9uIGxpa2UgYHRyYWl0IFRyYWl0MjogVHJhaXQxIHsgLi4uIH1gKSwgaXQgaXMgbm90IGFsbG93ZWQgdG8gaW1wbGVtZW50CmBUcmFpdDFgIGZvciBgVHJhaXQyYC4gVGhpcyBpcyBiZWNhdXNlIGBUcmFpdDJgIGFscmVhZHkgaW1wbGVtZW50cyBgVHJhaXQxYCBieQpkZWZpbml0aW9uLCBzbyBpdCBpcyBub3QgdXNlZnVsIHRvIGRvIHRoaXMuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////Ad0FAAAA3QXzCNoCALxBJgEAAKwFAAIGAK0FAQAEAMQDDgAAA6sFAAQAxAMOAAAAqwUCBQEC2QEBAQDzCAABrAUABADEAw4AAAKrBQABBACvAyQAAAOqBQAEAK8DJAAAAKoFAQEA8wgAAtkCALADEgAAAgIFRTAzNzEAAR8FAAAABfMIBACvAyQAAACqBQEBAfcIAAGrBQDcAgDrQSYBAACxBQAAAtwCAOtBJgEAAgLMEEEgY2FwdHVyZWQgdmFyaWFibGUgaW4gYSBjbG9zdXJlIG1heSBub3QgbGl2ZSBsb25nIGVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMKZm4gZm9vKCkgLT4gQm94PEZuKHUzMikgLT4gdTMyPiB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBCb3g6Om5ldyh8eXwgeCArIHkpCn0KYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byB1c2UgZGF0YSBjYXB0dXJlZCBieSBhIGNsb3N1cmUsCndoZW4gdGhhdCBkYXRhIG1heSBubyBsb25nZXIgZXhpc3QuIEl0J3MgbW9zdCBjb21tb25seSBzZWVuIHdoZW4gYXR0ZW1wdGluZyB0bwpyZXR1cm4gYSBjbG9zdXJlIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUuCgpOb3RpY2UgdGhhdCBgeGAgaXMgc3RhY2stYWxsb2NhdGVkIGJ5IGBmb28oKWAuIEJ5IGRlZmF1bHQsIFJ1c3QgY2FwdHVyZXMKY2xvc2VkLW92ZXIgZGF0YSBieSByZWZlcmVuY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmNlIGBmb28oKWAgcmV0dXJucywgYHhgIG5vCmxvbmdlciBleGlzdHMuIEFuIGF0dGVtcHQgdG8gYWNjZXNzIGB4YCB3aXRoaW4gdGhlIGNsb3N1cmUgd291bGQgdGh1cyBiZQp1bnNhZmUuCgpBbm90aGVyIHNpdHVhdGlvbiB3aGVyZSB0aGlzIG1pZ2h0IGJlIGVuY291bnRlcmVkIGlzIHdoZW4gc3Bhd25pbmcgdGhyZWFkczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MwpmbiBmb28oKSB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBsZXQgeSA9IDF1MzI7CgogICAgbGV0IHRociA9IHN0ZDo6dGhyZWFkOjpzcGF3bih8fCB7CiAgICAgICAgeCArIHkKICAgIH0pOwp9CmBgYAoKU2luY2Ugb3VyIG5ldyB0aHJlYWQgcnVucyBpbiBwYXJhbGxlbCwgdGhlIHN0YWNrIGZyYW1lIGNvbnRhaW5pbmcgYHhgIGFuZCBgeWAKbWF5IHdlbGwgaGF2ZSBkaXNhcHBlYXJlZCBieSB0aGUgdGltZSB3ZSB0cnkgdG8gdXNlIHRoZW0uIEV2ZW4gaWYgd2UgY2FsbApgdGhyLmpvaW4oKWAgd2l0aGluIGZvbyAod2hpY2ggYmxvY2tzIHVudGlsIGB0aHJgIGhhcyBjb21wbGV0ZWQsIGVuc3VyaW5nIHRoZQpzdGFjayBmcmFtZSB3b24ndCBkaXNhcHBlYXIpLCB3ZSB3aWxsIG5vdCBzdWNjZWVkOiB0aGUgY29tcGlsZXIgY2Fubm90IHByb3ZlCnRoYXQgdGhpcyBiZWhhdmlvciBpcyBzYWZlLCBhbmQgc28gd29uJ3QgbGV0IHVzIGRvIGl0LgoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB1c3VhbGx5IHRvIHN3aXRjaCB0byB1c2luZyBhIGBtb3ZlYCBjbG9zdXJlLgpUaGlzIGFwcHJvYWNoIG1vdmVzIChvciBjb3BpZXMsIHdoZXJlIHBvc3NpYmxlKSBkYXRhIGludG8gdGhlIGNsb3N1cmUsIHJhdGhlcgp0aGFuIHRha2luZyByZWZlcmVuY2VzIHRvIGl0LiBGb3IgZXhhbXBsZToKCmBgYApmbiBmb28oKSAtPiBCb3g8Rm4odTMyKSAtPiB1MzI+IHsKICAgIGxldCB4ID0gMHUzMjsKICAgIEJveDo6bmV3KG1vdmUgfHl8IHggKyB5KQp9CmBgYAoKTm93IHRoYXQgdGhlIGNsb3N1cmUgaGFzIGl0cyBvd24gY29weSBvZiB0aGUgZGF0YSwgdGhlcmUncyBubyBuZWVkIHRvIHdvcnJ5CmFib3V0IHNhZmV0eS4KClRoaXMgZXJyb3IgbWF5IGFsc28gYmUgZW5jb3VudGVyZWQgd2hpbGUgdXNpbmcgYGFzeW5jYCBibG9ja3M6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMsZWRpdGlvbjIwMTgKdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7Cgphc3luYyBmbiBmKCkgewogICAgbGV0IHYgPSB2ZWMhWzEsIDIsIDNpMzJdOwogICAgc3Bhd24oYXN5bmMgeyAvL34gRVJST1IgRTAzNzMKICAgICAgICBwcmludGxuISgiezo/fSIsIHYpCiAgICB9KTsKfQoKZm4gc3Bhd248RjogRnV0dXJlICsgU2VuZCArICdzdGF0aWM+KGZ1dHVyZTogRikgewogICAgdW5pbXBsZW1lbnRlZCEoKQp9CmBgYAoKU2ltaWxhcmx5IHRvIGNsb3N1cmVzLCBgYXN5bmNgIGJsb2NrcyBhcmUgbm90IGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFuZCBtYXkKY2FwdHVyZSBjbG9zZWQtb3ZlciBkYXRhIGJ5IHJlZmVyZW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQpodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vYXN5bmMtYm9vay8wM19hc3luY19hd2FpdC8wMV9jaGFwdGVyLmh0bWwuCgAi////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/x/MEAAAAMwQ8wjcAgDrQSYBAACwBQACBgCxBQEABADEAw4AAAOvBQAEAMQDDgAAAK8FAgUBAtkBAQEA8wgAAbAFAAQAxAMOAAACrwUAAQQArwMkAAADrgUABACvAyQAAACuBQEBAPMIAALbAgCwAxIAAAICBUUwMzczAAEfBQAAAAXzCAQArwMkAAAArgUBAQH3CAABrwUA3gIAmkImAQAAtQUAAALeAgCaQiYBAAIC0QxgQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGRvZXMgbm90IGNvbnRhaW4gYSBmaWVsZCB3aXRoCmFuIHVuc2l6ZWQgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzQKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCn0KCi8vIGVycm9yOiBTdHJ1Y3QgYEZvb2AgaGFzIG5vIHVuc2l6ZWQgZmllbGRzIHRoYXQgbmVlZCBgQ29lcmNlVW5zaXplZGAuCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpBbiBbdW5zaXplZCB0eXBlXVsxXSBpcyBhbnkgdHlwZSB3aGVyZSB0aGUgY29tcGlsZXIgZG9lcyBub3Qga25vdyB0aGUgbGVuZ3RoIG9yCmFsaWdubWVudCBvZiBhdCBjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbwp1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKCmBDb2VyY2VVbnNpemVkYCBpcyB1c2VkIHRvIGNvZXJjZSBvbmUgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlCmludG8gYW5vdGhlciBzdHJ1Y3QgY29udGFpbmluZyBhIGRpZmZlcmVudCB1bnNpemVkIHR5cGUuIElmIHRoZSBzdHJ1Y3QKZG9lc24ndCBoYXZlIGFueSBmaWVsZHMgb2YgdW5zaXplZCB0eXBlcyB0aGVuIHlvdSBkb24ndCBuZWVkIGV4cGxpY2l0CmNvZXJjaW9uIHRvIGdldCB0aGUgdHlwZXMgeW91IHdhbnQuIFRvIGZpeCB0aGlzIHlvdSBjYW4gZWl0aGVyCm5vdCB0cnkgdG8gaW1wbGVtZW50IGBDb2VyY2VVbnNpemVkYCBvciB5b3UgY2FuIGFkZCBhIGZpZWxkIHRoYXQgaXMKdW5zaXplZCB0byB0aGUgc3RydWN0LgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKLy8gV2UgZG9uJ3QgbmVlZCB0byBpbXBsIGBDb2VyY2VVbnNpemVkYCBoZXJlLgpzdHJ1Y3QgRm9vIHsKICAgIGE6IGkzMiwKfQoKLy8gV2UgYWRkIHRoZSB1bnNpemVkIHR5cGUgZmllbGQgdG8gdGhlIHN0cnVjdC4Kc3RydWN0IEJhcjxUOiA/U2l6ZWQ+IHsKICAgIGE6IGkzMiwKICAgIGI6IFQsCn0KCi8vIFRoZSBzdHJ1Y3QgaGFzIGFuIHVuc2l6ZWQgZmllbGQgc28gd2UgY2FuIGltcGxlbWVudAovLyBgQ29lcmNlVW5zaXplZGAgZm9yIGl0LgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8QmFyPFU+PiBmb3IgQmFyPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKTm90ZSB0aGF0IGBDb2VyY2VVbnNpemVkYCBpcyBtYWlubHkgdXNlZCBieSBzbWFydCBwb2ludGVycyBsaWtlIGBCb3hgLCBgUmNgCmFuZCBgQXJjYCB0byBiZSBhYmxlIHRvIG1hcmsgdGhhdCB0aGV5IGNhbiBjb2VyY2UgdW5zaXplZCB0eXBlcyB0aGF0IHRoZXkKYXJlIHBvaW50aW5nIGF0LgoAGv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wfRDAAAANEM8wjeAgCaQiYBAAC0BQACBgC1BQEABADEAw4AAAOzBQAEAMQDDgAAALMFAgUBAtkBAQEA8wgAAbQFAAQAxAMOAAACswUAAQQArwMkAAADsgUABACvAyQAAACyBQEBAPMIAALdAgCwAxIAAAICBUUwMzc0AAEfBQAAAAXzCAQArwMkAAAAsgUBAQH3CAABswUA4AIAyUImAQAAuQUAAALgAgDJQiYBAAICmg5gQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmllbGQKd2l0aCBhbiB1bnNpemVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc1CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZCwgVTogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAogICAgYzogVSwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbW9yZSB0aGFuIG9uZSB1bnNpemVkIGZpZWxkLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFUsIFQ+PiBmb3IgRm9vPFQsIFU+IHt9CmBgYAoKQSBzdHJ1Y3Qgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGNhbm5vdCBpbXBsZW1lbnQKYENvZXJjZVVuc2l6ZWRgLiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gY29lcmNlIG9uZSBvZiB0aGUKdHlwZXMgaW4geW91ciBzdHJ1Y3QgdG8gYW5vdGhlciB0eXBlIGluIHRoZSBzdHJ1Y3QuIEluIHRoaXMgY2FzZSB3ZSB0cnkgdG8KaW1wbCBgQ29lcmNlVW5zaXplZGAgZnJvbSBgVGAgdG8gYFVgIHdoaWNoIGFyZSBib3RoIHR5cGVzIHRoYXQgdGhlIHN0cnVjdAp0YWtlcy4gQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHRoZQpsZW5ndGggb3IgYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppcyBhbHNvIHVuc2l6ZWQuCgpgQ29lcmNlVW5zaXplZGAgb25seSBhbGxvd3MgZm9yIGNvZXJjaW9uIGZyb20gYSBzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZQp1bnNpemVkIHR5cGUgZmllbGQgdG8gYW5vdGhlciBzdHJ1Y3Qgd2l0aCBhIHNpbmdsZSB1bnNpemVkIHR5cGUgZmllbGQuCkluIGZhY3QgUnVzdCBvbmx5IGFsbG93cyBmb3IgYSBzdHJ1Y3QgdG8gaGF2ZSBvbmUgdW5zaXplZCB0eXBlIGluIGEgc3RydWN0CmFuZCB0aGF0IHVuc2l6ZWQgdHlwZSBtdXN0IGJlIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIFNvIGhhdmluZyB0d28KdW5zaXplZCB0eXBlcyBpbiBhIHNpbmdsZSBzdHJ1Y3QgaXMgbm90IGFsbG93ZWQgYnkgdGhlIGNvbXBpbGVyLiBUbyBmaXggdGhpcwp1c2Ugb25seSBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaW4gdGhlIHN0cnVjdCBhbmQgdGhlbiB1c2UKbXVsdGlwbGUgc3RydWN0cyB0byBtYW5hZ2UgZWFjaCB1bnNpemVkIHR5cGUgZmllbGQgeW91IG5lZWQuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKaW1wbCA8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KCmZuIGNvZXJjZV9mb288VDogQ29lcmNlVW5zaXplZDxVPiwgVT4odDogVCkgLT4gRm9vPFU+IHsKICAgIEZvbyB7IGE6IDEyaTMyLCBiOiB0IH0gLy8gd2UgdXNlIGNvZXJjaW9uIHRvIGdldCB0aGUgYEZvbzxVPmAgdHlwZSB3ZSBuZWVkCn0KYGBgCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8fmg4AAACaDvMI4AIAyUImAQAAuAUAAgYAuQUBAAQAxAMOAAADtwUABADEAw4AAAC3BQIFAQLZAQEBAPMIAAG4BQAEAMQDDgAAArcFAAEEAK8DJAAAA7YFAAQArwMkAAAAtgUBAQDzCAAC3wIAsAMSAAACAgVFMDM3NQABHwUAAAAF8wgEAK8DJAAAALYFAQEB9wgAAbcFAOICAPhCJgEAAL0FAAAC4gIA+EImAQACAvoKYENvZXJjZVVuc2l6ZWRgIHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgdGhhdCBpc24ndCBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzYKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCnN0cnVjdCBGb288VDogP1NpemVkPiB7CiAgICBhOiBULAp9CgovLyBlcnJvcjogVGhlIHR5cGUgYFVgIGlzIG5vdCBhIHN0cnVjdAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8VT4gZm9yIEZvbzxUPiB7fQpgYGAKCmBDb2VyY2VVbnNpemVkYCBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgYSBzdHJ1Y3QuIFVuc2l6ZWQgdHlwZXMgYXJlCmFscmVhZHkgYWJsZSB0byBiZSBjb2VyY2VkIHdpdGhvdXQgYW4gaW1wbGVtZW50YXRpb24gb2YgYENvZXJjZVVuc2l6ZWRgCndoZXJlYXMgYSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgbmVlZHMgdG8ga25vdyB0aGUgdW5zaXplZCB0eXBlCmZpZWxkIGl0J3MgY29udGFpbmluZyBpcyBhYmxlIHRvIGJlIGNvZXJjZWQuIEFuIFt1bnNpemVkIHR5cGVdWzFdCmlzIGFueSB0eXBlIHRoYXQgdGhlIGNvbXBpbGVyIGRvZXNuJ3Qga25vdyB0aGUgbGVuZ3RoIG9yIGFsaWdubWVudCBvZiBhdApjb21waWxlIHRpbWUuIEFueSBzdHJ1Y3QgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaXMgYWxzbyB1bnNpemVkLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wNC1hZHZhbmNlZC10eXBlcy5odG1sI2R5bmFtaWNhbGx5LXNpemVkLXR5cGVzLWFuZC10aGUtc2l6ZWQtdHJhaXQKClRoZSBgQ29lcmNlVW5zaXplZGAgdHJhaXQgdGFrZXMgYSBzdHJ1Y3QgdHlwZS4gTWFrZSBzdXJlIHRoZSB0eXBlIHlvdSBhcmUKcHJvdmlkaW5nIHRvIGBDb2VyY2VVbnNpemVkYCBpcyBhIHN0cnVjdCB3aXRoIG9ubHkgdGhlIGxhc3QgZmllbGQgY29udGFpbmluZyBhbgp1bnNpemVkIHR5cGUuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGE6IFQsCn0KCi8vIFRoZSBgRm9vPFU+YCBpcyBhIHN0cnVjdCBzbyBgQ29lcmNlVW5zaXplZGAgY2FuIGJlIGltcGxlbWVudGVkCmltcGw8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4gd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCk5vdGUgdGhhdCBpbiBSdXN0LCBzdHJ1Y3RzIGNhbiBvbmx5IGNvbnRhaW4gYW4gdW5zaXplZCB0eXBlIGlmIHRoZSBmaWVsZApjb250YWluaW5nIHRoZSB1bnNpemVkIHR5cGUgaXMgdGhlIGxhc3QgYW5kIG9ubHkgdW5zaXplZCB0eXBlIGZpZWxkIGluIHRoZQpzdHJ1Y3QuCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8D+goAAAD6CvMI4gIA+EImAQAAvAUAAgYAvQUBAAQAxAMOAAADuwUABADEAw4AAAC7BQIFAQLZAQEBAPMIAAG8BQAEAMQDDgAAArsFAAEEAK8DJAAAA7oFAAQArwMkAAAAugUBAQDzCAAC4QIAsAMSAAACAgVFMDM3NgABHwUAAAAF8wgEAK8DJAAAALoFAQEB9wgAAbsFAOQCAKdDJgEAAMEFAAAC5AIAp0MmAQACAqoJVGhlIGBEaXNwYXRjaEZyb21EeW5gIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBzb21ldGhpbmcgd2hpY2ggaXMgbm90IGEgcG9pbnRlcgpvciBhIG5ld3R5cGUgd3JhcHBlciBhcm91bmQgYSBwb2ludGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3OAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluKV0KdXNlIHN0ZDo6b3BzOjpEaXNwYXRjaEZyb21EeW47CgpzdHJ1Y3QgV3JhcHBlckV4dHJhRmllbGQ8VD4gewogICAgcHRyOiBULAogICAgZXh0cmFfc3R1ZmY6IGkzMiwKfQoKaW1wbDxULCBVPiBEaXNwYXRjaEZyb21EeW48V3JhcHBlckV4dHJhRmllbGQ8VT4+IGZvciBXcmFwcGVyRXh0cmFGaWVsZDxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKClRoZSBgRGlzcGF0Y2hGcm9tRHluYCB0cmFpdCBjdXJyZW50bHkgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yCmJ1aWx0aW4gcG9pbnRlciB0eXBlcyBhbmQgc3RydWN0cyB0aGF0IGFyZSBuZXd0eXBlIHdyYXBwZXJzIGFyb3VuZCB0aGVtCuKAlCB0aGF0IGlzLCB0aGUgc3RydWN0IG11c3QgaGF2ZSBvbmx5IG9uZSBmaWVsZCAoZXhjZXB0IGZvcmBQaGFudG9tRGF0YWApLAphbmQgdGhhdCBmaWVsZCBtdXN0IGl0c2VsZiBpbXBsZW1lbnQgYERpc3BhdGNoRnJvbUR5bmAuCgpgYGAKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5biwgdW5zaXplKV0KdXNlIHN0ZDo6ewogICAgbWFya2VyOjpVbnNpemUsCiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKfTsKCnN0cnVjdCBQdHI8VDogP1NpemVkPigqY29uc3QgVCk7CgppbXBsPFQ6ID9TaXplZCwgVTogP1NpemVkPiBEaXNwYXRjaEZyb21EeW48UHRyPFU+PiBmb3IgUHRyPFQ+CndoZXJlCiAgICBUOiBVbnNpemU8VT4sCnt9CmBgYAoKQW5vdGhlciBleGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4pXQp1c2Ugc3RkOjp7CiAgICBvcHM6OkRpc3BhdGNoRnJvbUR5biwKICAgIG1hcmtlcjo6UGhhbnRvbURhdGEsCn07CgpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBwdHI6IFQsCiAgICBfcGhhbnRvbTogUGhhbnRvbURhdGE8KCk+LAp9CgppbXBsPFQsIFU+IERpc3BhdGNoRnJvbUR5bjxXcmFwcGVyPFU+PiBmb3IgV3JhcHBlcjxUPgp3aGVyZQogICAgVDogRGlzcGF0Y2hGcm9tRHluPFU+LAp7fQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3+qCQAAAKoJ8wjkAgCnQyYBAADABQACBgDBBQEABADEAw4AAAO/BQAEAMQDDgAAAL8FAgUBAtkBAQEA8wgAAcAFAAQAxAMOAAACvwUAAQQArwMkAAADvgUABACvAyQAAAC+BQEBAPMIAALjAgCwAxIAAAICBUUwMzc4AAEfBQAAAAXzCAQArwMkAAAAvgUBAQH3CAABvwUA5gIA1kMmAQAAxQUAAALmAgDWQyYBAAICmwJBIHRyYWl0IG1ldGhvZCB3YXMgZGVjbGFyZWQgY29uc3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc5CnRyYWl0IEZvbyB7CiAgICBjb25zdCBmbiBiYXIoKSAtPiB1MzI7IC8vIGVycm9yIQp9CmBgYAoKVHJhaXQgbWV0aG9kcyBjYW5ub3QgYmUgZGVjbGFyZWQgYGNvbnN0YCBieSBkZXNpZ24uIEZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUKW1JGQyA5MTFdLgoKW1JGQyA5MTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC85MTEKAAX///////////8B////////////Af///////////wH///////////8B////P5sCAAAAmwLzCOYCANZDJgEAAMQFAAIGAMUFAQAE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IGBSY2AsIGEgdmFsdWUgY2Fubm90IGJlIG93bmVkIGJ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCgpTb21ldGltZXMgd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSB2YWx1ZS4gVXNpbmcgYSByZWZlcmVuY2UsIHdlIGNhbiBsZXQgYW5vdGhlcgpmdW5jdGlvbiBib3Jyb3cgdGhlIHZhbHVlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG93bmVyc2hpcC4gSW4gdGhlIGV4YW1wbGUgYmVsb3csCndlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gbW92ZSBvdXIgc3RyaW5nIHRvIGBjYWxjdWxhdGVfbGVuZ3RoYCwgd2UgY2FuIGdpdmUgaXQKYSByZWZlcmVuY2UgdG8gaXQgd2l0aCBgJmAgaW5zdGVhZC4KCmBgYApmbiBtYWluKCkgewogICAgbGV0IHMxID0gU3RyaW5nOjpmcm9tKCJoZWxsbyIpOwoKICAgIGxldCBsZW4gPSBjYWxjdWxhdGVfbGVuZ3RoKCZzMSk7CgogICAgcHJpbnRsbiEoIlRoZSBsZW5ndGggb2YgJ3t9JyBpcyB7fS4iLCBzMSwgbGVuKTsKfQoKZm4gY2FsY3VsYXRlX2xlbmd0aChzOiAmU3RyaW5nKSAtPiB1c2l6ZSB7CiAgICBzLmxlbigpCn0KYGBgCgpBIG11dGFibGUgcmVmZXJlbmNlIGNhbiBiZSBjcmVhdGVkIHdpdGggYCZtdXRgLgoKU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgYSByZWZlcmVuY2UsIGJ1dCBhIGR1cGxpY2F0ZS4gQWxsIHR5cGVzIG1hcmtlZCBgQ2xvbmVgCmNhbiBiZSBkdXBsaWNhdGVkIGJ5IGNhbGxpbmcgYC5jbG9uZSgpYC4gU3Vic2VxdWVudCBjaGFuZ2VzIHRvIGEgY2xvbmUgZG8gbm90CmFmZmVjdCB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCgpNb3N0IHR5cGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBtYXJrZWQgYENsb25lYC4gVGhlIGV4YW1wbGUgYmVsb3cKZGVtb25zdHJhdGVzIHVzaW5nIGBjbG9uZSgpYCBvbiBhIHN0cmluZy4gYHMxYCBpcyBmaXJzdCBzZXQgdG8gIm1hbnkiLCBhbmQgdGhlbgpjb3BpZWQgdG8gYHMyYC4gVGhlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzMWAgaXMgcmVtb3ZlZCwgd2l0aG91dCBhZmZlY3RpbmcKYHMyYC4gImFueSBtYW55IiBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHMxID0gU3RyaW5nOjpmcm9tKCJtYW55Iik7CiAgICBsZXQgczIgPSBzMS5jbG9uZSgpOwogICAgczEucmVtb3ZlKDApOwogICAgcHJpbnRsbiEoInt9IHt9IiwgczEsIHMyKTsKfQpgYGAKCklmIHdlIGNvbnRyb2wgdGhlIGRlZmluaXRpb24gb2YgYSB0eXBlLCB3ZSBjYW4gaW1wbGVtZW50IGBDbG9uZWAgb24gaXQgb3Vyc2VsdmVzCndpdGggYCNbZGVyaXZlKENsb25lKV1gLgoKU29tZSB0eXBlcyBoYXZlIG5vIG93bmVyc2hpcCBzZW1hbnRpY3MgYXQgYWxsIGFuZCBhcmUgdHJpdmlhbCB0byBkdXBsaWNhdGUuIEFuCmV4YW1wbGUgaXMgYGkzMmAgYW5kIHRoZSBvdGhlciBudW1iZXIgdHlwZXMuIFdlIGRvbid0IGhhdmUgdG8gY2FsbCBgLmNsb25lKClgIHRvCmNsb25lIHRoZW0sIGJlY2F1c2UgdGhleSBhcmUgbWFya2VkIGBDb3B5YCBpbiBhZGRpdGlvbiB0byBgQ2xvbmVgLiBJbXBsaWNpdApjbG9uaW5nIGlzIG1vcmUgY29udmVuaWVudCBpbiB0aGlzIGNhc2UuIFdlIGNhbiBtYXJrIG91ciBvd24gdHlwZXMgYENvcHlgIGlmCmFsbCB0aGVpciBtZW1iZXJzIGFsc28gYXJlIG1hcmtlZCBgQ29weWAuCgpJbiB0aGUgZXhhbXBsZSBiZWxvdywgd2UgaW1wbGVtZW50IGEgYFBvaW50YCB0eXBlLiBCZWNhdXNlIGl0IG9ubHkgc3RvcmVzIHR3bwppbnRlZ2Vycywgd2Ugb3B0LW91dCBvZiBvd25lcnNoaXAgc2VtYW50aWNzIHdpdGggYENvcHlgLiBUaGVuIHdlIGNhbgpgbGV0IHAyID0gcDFgIHdpdGhvdXQgYHAxYCBiZWluZyBtb3ZlZC4KCmBgYAojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBQb2ludCB7IHg6IGkzMiwgeTogaTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHAxID0gUG9pbnR7IHg6IC0xLCB5OiAyIH07CiAgICBsZXQgcDIgPSBwMTsKICAgIHAxLnggPSAxOwogICAgcHJpbnRsbiEoInAxOiB7fSwge30iLCBwMS54LCBwMS55KTsKICAgIHByaW50bG4hKCJwMjoge30sIHt9IiwgcDIueCwgcDIueSk7Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB3ZSBkb24ndCBjb250cm9sIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uLCBvciBtdXRhYmxlIHNoYXJlZApvd25lcnNoaXAgaXMgdHJ1bHkgcmVxdWlyZWQsIHdlIGNhbiB1c2UgYFJjYCBhbmQgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CnVzZSBzdGQ6OnJjOjpSYzsKCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gUmM6Om5ldyhSZWZDZWxsOjpuZXcoTXlTdHJ1Y3R7IHM6IDV1MzIgfSkpOwogICAgbGV0IHkgPSB4LmNsb25lKCk7CiAgICB4LmJvcnJvd19tdXQoKS5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHguYm9ycm93KCkucyk7Cn0KYGBgCgpXaXRoIHRoaXMgYXBwcm9hY2gsIHggYW5kIHkgc2hhcmUgb3duZXJzaGlwIG9mIHRoZSBkYXRhIHZpYSB0aGUgYFJjYCAocmVmZXJlbmNlCmNvdW50IHR5cGUpLiBgUmVmQ2VsbGAgZXNzZW50aWFsbHkgcGVyZm9ybXMgcnVudGltZSBib3Jyb3cgY2hlY2tpbmc6IGVuc3VyaW5nCnRoYXQgYXQgbW9zdCBvbmUgd3JpdGVyIG9yIG11bHRpcGxlIHJlYWRlcnMgY2FuIGFjY2VzcyB0aGUgZGF0YSBhdCBhbnkgb25lIHRpbWUuCgpJZiB5b3Ugd2lzaCB0byBsZWFybiBtb3JlIGFib3V0IG93bmVyc2hpcCBpbiBSdXN0LCBzdGFydCB3aXRoIHRoZQpbVW5kZXJzdGFuZGluZyBPd25lcnNoaXBdW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXSBjaGFwdGVyIGluIHRoZSBCb29rLgoKW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDAtdW5kZXJzdGFuZGluZy1vd25lcnNoaXAuaHRtbAoANf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8HmBoAAACYGvMI7AIA40QmAQAA0AUAAgYA0QUBAAQAxAMOAAADzwUABADEAw4AAADPBQIFAQLZAQEBAPMIAAHQBQAEAMQDDgAAAs8FAAEEAK8DJAAAA84FAAQArwMkAAAAzgUBAQDzCAAC6wIAsAMSAAACAgVFMDM4MgABHwUAAAAF8wgEAK8DJAAAAM4FAQEB9wgAAc8FAO4CAJJFJgEAANUFAAAC7gIAkkUmAQACAsUFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gcGFydGlhbGx5IHJlaW5pdGlhbGl6ZSBhCnN0cnVjdHVyZSB0aGF0IGlzIGN1cnJlbnRseSB1bmluaXRpYWxpemVkLgoKRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGhhcHBlbiB3aGVuIGEgZHJvcCBoYXMgdGFrZW4gcGxhY2U6CgpgYGBjb21waWxlX2ZhaWwKc3RydWN0IEZvbyB7CiAgICBhOiB1MzIsCn0KaW1wbCBEcm9wIGZvciBGb28gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgLyogLi4uICovIH0KfQoKbGV0IG11dCB4ID0gRm9vIHsgYTogMSB9Owpkcm9wKHgpOyAvLyBgeGAgaXMgbm93IHVuaW5pdGlhbGl6ZWQKeC5hID0gMjsgLy8gZXJyb3IsIHBhcnRpYWwgcmVpbml0aWFsaXphdGlvbiBvZiB1bmluaXRpYWxpemVkIHN0cnVjdHVyZSBgdGAKYGBgCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBmdWxseSByZWluaXRpYWxpemluZyB0aGUgc3RydWN0dXJlIGluIHF1ZXN0aW9uOgoKYGBgCnN0cnVjdCBGb28gewogICAgYTogdTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KCmxldCBtdXQgeCA9IEZvbyB7IGE6IDEgfTsKZHJvcCh4KTsKeCA9IEZvbyB7IGE6IDIgfTsKYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfxQUAAADFBfMI7gIAkkUmAQAA1AUAAgYA1QUBAAQAxAMOAAAD0wUABADEAw4AAADTBQIFAQLZAQEBAPMIAAHUBQAEAMQDDgAAAtMFAAEEAK8DJAAAA9IFAAQArwMkAAAA0gUBAQDzCAAC7QIAsAMSAAACAgVFMDM4MwABHwUAAAAF8wgEAK8DJAAAANIFAQEB9wgAAdMFAPACAMFFJgEAANkFAAAC8AIAwUUmAQACAv0CQW4gaW1tdXRhYmxlIHZhcmlhYmxlIHdhcyByZWFzc2lnbmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM4NApmbiBtYWluKCkgewogICAgbGV0IHggPSAzOwogICAgeCA9IDU7IC8vIGVycm9yLCByZWFzc2lnbm1lbnQgb2YgaW1tdXRhYmxlIHZhcmlhYmxlCn0KYGBgCgpCeSBkZWZhdWx0LCB2YXJpYWJsZXMgaW4gUnVzdCBhcmUgaW1tdXRhYmxlLiBUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBrZXl3b3JkCmBtdXRgIGFmdGVyIHRoZSBrZXl3b3JkIGBsZXRgIHdoZW4gZGVjbGFyaW5nIHRoZSB2YXJpYWJsZS4gRm9yIGV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgeCA9IDM7CiAgICB4ID0gNTsKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0CAAAA/QLzCPACAMFFJgEAANgFAAIGANkFAQAEAMQDDgAAA9cFAAQAxAMOAAAA1wUCBQEC2QEBAQDzCAAB2AUABADEAw4AAALXBQABBACvAyQAAAPWBQAEAK8DJAAAANYFAQEA8wgAAu8CALADEgAAAgIFRTAzODQAAR8FAAAABfMIBACvAyQAAADWBQEBAfcIAAHXBQDyAgDwRSYBAADdBQAAAvICAPBFJgEAAgLZBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG11dGF0ZSB0aGUgdGFyZ2V0IG9mIGEgbXV0YWJsZQpyZWZlcmVuY2Ugc3RvcmVkIGluc2lkZSBhbiBpbW11dGFibGUgY29udGFpbmVyLgoKRm9yIGV4YW1wbGUsIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHN0b3JpbmcgYSBgJm11dGAgaW5zaWRlIGFuIGltbXV0YWJsZSBgQm94YDoKCmBgYApsZXQgbXV0IHg6IGk2NCA9IDE7CmxldCB5OiBCb3g8Xz4gPSBCb3g6Om5ldygmbXV0IHgpOwoqKnkgPSAyOyAvLyBlcnJvciwgY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGFuIGltbXV0YWJsZSBjb250YWluZXIKYGBgCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBtYWtpbmcgdGhlIGNvbnRhaW5lciBtdXRhYmxlOgoKYGBgCmxldCBtdXQgeDogaTY0ID0gMTsKbGV0IG11dCB5OiBCb3g8Xz4gPSBCb3g6Om5ldygmbXV0IHgpOwoqKnkgPSAyOwpgYGAKCkl0IGNhbiBhbHNvIGJlIGZpeGVkIGJ5IHVzaW5nIGEgdHlwZSB3aXRoIGludGVyaW9yIG11dGFiaWxpdHksIHN1Y2ggYXMgYENlbGxgCm9yIGBSZWZDZWxsYDoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKbGV0IHg6IGk2NCA9IDE7CmxldCB5OiBCb3g8Q2VsbDxfPj4gPSBCb3g6Om5ldyhDZWxsOjpuZXcoeCkpOwp5LnNldCgyKTsKYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QUAAADZBfMI8gIA8EUmAQAA3AUAAgYA3QUBAAQAxAMOAAAD2wUABADEAw4AAADbBQIFAQLZAQEBAPMIAAHcBQAEAMQDDgAAAtsFAAEEAK8DJAAAA9oFAAQArwMkAAAA2gUBAQDzCAAC8QIAsAMSAAACAgVFMDM4NgABHwUAAAAF8wgEAK8DJAAAANoFAQEB9wgAAdsFAPQCAJ9GJgEAAOEFAAAC9AIAn0YmAQACAu4MIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbXV0YXRlIG9yIG11dGFibHkgcmVmZXJlbmNlIGRhdGEKdGhhdCBhIGNsb3N1cmUgaGFzIGNhcHR1cmVkIGltbXV0YWJseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKLy8gQWNjZXB0cyBhIGZ1bmN0aW9uIG9yIGEgY2xvc3VyZSB0aGF0IGNhcHR1cmVzIGl0cyBlbnZpcm9ubWVudCBpbW11dGFibHkuCi8vIENsb3N1cmVzIHBhc3NlZCB0byBmb28gd2lsbCBub3QgYmUgYWJsZSB0byBtdXRhdGUgdGhlaXIgY2xvc2VkLW92ZXIgc3RhdGUuCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7IH0KCi8vIEF0dGVtcHRzIHRvIG11dGF0ZSBjbG9zZWQtb3ZlciBkYXRhLiBFcnJvciBtZXNzYWdlIHJlYWRzOgovLyBgY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGEgY2FwdHVyZWQgb3V0ZXIgdmFyaWFibGUuLi5gCmZuIG11dGFibGUoKSB7CiAgICBsZXQgbXV0IHggPSAwdTMyOwogICAgZm9vKHx8IHggPSAyKTsKfQoKLy8gQXR0ZW1wdHMgdG8gdGFrZSBhIG11dGFibGUgcmVmZXJlbmNlIHRvIGNsb3NlZC1vdmVyIGRhdGEuICBFcnJvciBtZXNzYWdlCi8vIHJlYWRzOiBgY2Fubm90IGJvcnJvdyBkYXRhIG11dGFibHkgaW4gYSBjYXB0dXJlZCBvdXRlciB2YXJpYWJsZS4uLmAKZm4gbXV0X2FkZHIoKSB7CiAgICBsZXQgbXV0IHggPSAwdTMyOwogICAgZm9vKHx8IHsgbGV0IHkgPSAmbXV0IHg7IH0pOwp9CmBgYAoKVGhlIHByb2JsZW0gaGVyZSBpcyB0aGF0IGZvbyBpcyBkZWZpbmVkIGFzIGFjY2VwdGluZyBhIHBhcmFtZXRlciBvZiB0eXBlIGBGbmAuCkNsb3N1cmVzIHBhc3NlZCBpbnRvIGZvbyB3aWxsIHRodXMgYmUgaW5mZXJyZWQgdG8gYmUgb2YgdHlwZSBgRm5gLCBtZWFuaW5nIHRoYXQKdGhleSBjYXB0dXJlIHRoZWlyIGNvbnRleHQgaW1tdXRhYmx5LgoKSWYgdGhlIGRlZmluaXRpb24gb2YgYGZvb2AgaXMgdW5kZXIgeW91ciBjb250cm9sLCB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8KY2FwdHVyZSB0aGUgZGF0YSBtdXRhYmx5LiBUaGlzIGNhbiBiZSBkb25lIGJ5IGRlZmluaW5nIGBmb29gIHRvIHRha2UgRm5NdXQKcmF0aGVyIHRoYW4gRm46CgpgYGAKZm4gZm9vPEY6IEZuTXV0KCk+KGY6IEYpIHsgfQpgYGAKCkFsdGVybmF0aXZlbHksIHdlIGNhbiBjb25zaWRlciB1c2luZyB0aGUgYENlbGxgIGFuZCBgUmVmQ2VsbGAgdHlwZXMgdG8gYWNoaWV2ZQppbnRlcmlvciBtdXRhYmlsaXR5IHRocm91Z2ggYSBzaGFyZWQgcmVmZXJlbmNlLiBPdXIgZXhhbXBsZSdzIGBtdXRhYmxlYApmdW5jdGlvbiBjb3VsZCBiZSByZWRlZmluZWQgYXMgYmVsb3c6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCmZuIGZvbzxGOiBGbigpPihmOiBGKSB7IH0KCmZuIG11dGFibGUoKSB7CiAgICBsZXQgeCA9IENlbGw6Om5ldygwdTMyKTsKICAgIGZvbyh8fCB4LnNldCgyKSk7Cn0KYGBgCgpZb3UgY2FuIHJlYWQgbW9yZSBpbiB0aGUgQVBJIGRvY3VtZW50YXRpb24gZm9yIFtDZWxsXVtzdGQtY2VsbF0uCgpbc3RkLWNlbGxdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9jZWxsLwoAGv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7gwAAADuDPMI9AIAn0YmAQAA4AUAAgYA4QUBAAQAxAMOAAAD3wUABADEAw4AAADfBQIFAQLZAQEBAPMIAAHgBQAEAMQDDgAAAt8FAAEEAK8DJAAAA94FAAQArwMkAAAA3gUBAQDzCAAC8wIAsAMSAAACAgVFMDM4NwABHwUAAAAF8wgEAK8DJAAAAN4FAQEB9wgAAd8FAPYCAM5GJgEAAOUFAAAC9gIAzkYmAQACAkEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgAC////////////AQFBAAAAQfMI9gIAzkYmAQAA5AUAAgYA5QUBAAQAxAMOAAAD4wUABADEAw4AAADjBQIFAQLZAQEBAPMIAAHkBQAEAMQDDgAAAuMFAAEEAK8DJAAAA+IFAAQArwMkAAAA4gUBAQDzCAAC9QIAsAMSAAACAgVFMDM4OAABHwUAAAAF8wgEAK8DJAAAAOIFAQEB9wgAAeMFAPgCAP1GJgEAAOkFAAAC+AIA/UYmAQACArMLIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtdXRhdGUgZGF0YSB1c2luZyBhIG5vbi1tdXRhYmxlIHJlZmVyZW5jZS4gVGhpcwpjb21tb25seSBvY2N1cnMgd2hlbiBhdHRlbXB0aW5nIHRvIGFzc2lnbiB0byBhIG5vbi1tdXRhYmxlIHJlZmVyZW5jZSBvZiBhCm11dGFibGUgcmVmZXJlbmNlIChgJigmbXV0IFQpYCkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBmYW5jeSA9IEZhbmN5TnVteyBudW06IDUgfTsKICAgIGxldCBmYW5jeV9yZWYgPSAmKCZtdXQgZmFuY3kpOwogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIGVycm9yOiBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYSBgJmAgcmVmZXJlbmNlCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCkhlcmUsIGAmbXV0IGZhbmN5YCBpcyBtdXRhYmxlLCBidXQgYCYoJm11dCBmYW5jeSlgIGlzIG5vdC4gQ3JlYXRpbmcgYW4KaW1tdXRhYmxlIHJlZmVyZW5jZSB0byBhIHZhbHVlIGJvcnJvd3MgaXQgaW1tdXRhYmx5LiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUKcmVmZXJlbmNlcyBvZiB0eXBlIGAmKCZtdXQgVClgIHRoYXQgcG9pbnQgdG8gdGhlIHNhbWUgdmFsdWUsIHNvIHRoZXkgbXVzdCBiZQppbW11dGFibGUgdG8gcHJldmVudCBtdWx0aXBsZSBtdXRhYmxlIHJlZmVyZW5jZXMgdG8gdGhlIHNhbWUgdmFsdWUuCgpUbyBmaXggdGhpcywgZWl0aGVyIHJlbW92ZSB0aGUgb3V0ZXIgcmVmZXJlbmNlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBmYW5jeSA9IEZhbmN5TnVteyBudW06IDUgfTsKCiAgICBsZXQgZmFuY3lfcmVmID0gJm11dCBmYW5jeTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0IEZhbmN5TnVtLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYAoKT3IgbWFrZSB0aGUgb3V0ZXIgcmVmZXJlbmNlIG11dGFibGU6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgKCZtdXQgZmFuY3kpOwogICAgLy8gYGZhbmN5X3JlZmAgaXMgbm93ICZtdXQoJm11dCBGYW5jeU51bSksIHJhdGhlciB0aGFuICYoJm11dCBGYW5jeU51bSkKCiAgICBmYW5jeV9yZWYubnVtID0gNjsgLy8gTm8gZXJyb3IhCgogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8DswsAAACzC/MI+AIA/UYmAQAA6AUAAgYA6QUBAAQAxAMOAAAD5wUABADEAw4AAADnBQIFAQLZAQEBAPMIAAHoBQAEAMQDDgAAAucFAAEEAK8DJAAAA+YFAAQArwMkAAAA5gUBAQDzCAAC9wIAsAMSAAACAgVFMDM4OQABHwUAAAAF8wgEAK8DJAAAAOYFAQEB9wgAAecFAPoCAKxHJgEAAO0FAAAC+gIArEcmAQACAo0GQSBtZXRob2Qgb3IgY29uc3RhbnQgd2FzIGltcGxlbWVudGVkIG9uIGEgcHJpbWl0aXZlIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkwCnN0cnVjdCBGb28gewogICAgeDogaTMyCn0KCmltcGwgKm11dCBGb28ge30KLy8gZXJyb3I6IGNhbm5vdCBkZWZpbmUgaW5oZXJlbnQgYGltcGxgIGZvciBwcmltaXRpdmUgdHlwZXMKYGBgCgpUaGlzIGlzbid0IGFsbG93ZWQsIGJ1dCB1c2luZyBhIHRyYWl0IHRvIGltcGxlbWVudCBhIG1ldGhvZCBvciBjb25zdGFudAppcyBhIGdvb2Qgc29sdXRpb24uCkV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIKfQoKdHJhaXQgQmFyIHsKICAgIGZuIGJhcigpOwp9CgppbXBsIEJhciBmb3IgKm11dCBGb28gewogICAgZm4gYmFyKCkge30gLy8gb2shCn0KYGBgCgpJbnN0ZWFkIG9mIGRlZmluaW5nIGFuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIG9uIGEgcmVmZXJlbmNlLCB5b3UgY291bGQgYWxzbwptb3ZlIHRoZSByZWZlcmVuY2UgaW5zaWRlIHRoZSBpbXBsZW1lbnRhdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MApzdHJ1Y3QgRm9vOwoKaW1wbCAmRm9vIHsgLy8gZXJyb3I6IG5vIG5vbWluYWwgdHlwZSBmb3VuZCBmb3IgaW5oZXJlbnQgaW1wbGVtZW50YXRpb24KICAgIGZuIGJhcihzZWxmLCBvdGhlcjogU2VsZikge30KfQpgYGAKCmJlY29tZXMKCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4gYmFyKCZzZWxmLCBvdGhlcjogJlNlbGYpIHt9Cn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NBgAAAI0G8wj6AgCsRyYBAADsBQACBgDtBQEABADEAw4AAAPrBQAEAMQDDgAAAOsFAgUBAtkBAQEA8wgAAewFAAQAxAMOAAAC6wUAAQQArwMkAAAD6gUABACvAyQAAADqBQEBAPMIAAL5AgCwAxIAAAICBUUwMzkwAAEfBQAAAAXzCAQArwMkAAAA6gUBAQH3CAAB6wUA/AIA20cmAQAA8QUAAAL8AgDbRyYBAAICwAJBIHR5cGUgZGVwZW5kZW5jeSBjeWNsZSBoYXMgYmVlbiBlbmNvdW50ZXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTEKdHJhaXQgRmlyc3RUcmFpdCA6IFNlY29uZFRyYWl0IHsKCn0KCnRyYWl0IFNlY29uZFRyYWl0IDogRmlyc3RUcmFpdCB7Cgp9CmBgYAoKVGhlIHByZXZpb3VzIGV4YW1wbGUgY29udGFpbnMgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gdHdvIHRyYWl0czoKYEZpcnN0VHJhaXRgIGRlcGVuZHMgb24gYFNlY29uZFRyYWl0YCB3aGljaCBpdHNlbGYgZGVwZW5kcyBvbiBgRmlyc3RUcmFpdGAuCgAG////////////Af///////////wH///////////8B////////////Af///////////wEAwAIAAADAAvMI/AIA20cmAQAA8AUAAgYA8QUBAAQAxAMOAAAD7wUABADEAw4AAADvBQIFAQLZAQEBAPMIAAHwBQAEAMQDDgAAAu8FAAEEAK8DJAAAA+4FAAQArwMkAAAA7gUBAQDzCAAC+wIAsAMSAAACAgVFMDM5MQABHwUAAAAF8wgEAK8DJAAAAO4FAQEB9wgAAe8FAP4CAIpIJgEAAPUFAAAC/gIAikgmAQACAvEKQSB0eXBlIG9yIGxpZmV0aW1lIHBhcmFtZXRlciBoYXMgYmVlbiBkZWNsYXJlZCBidXQgaXMgbm90IGFjdHVhbGx5IHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkyCmVudW0gRm9vPFQ+IHsKICAgIEJhciwKfQpgYGAKCklmIHRoZSB0eXBlIHBhcmFtZXRlciB3YXMgaW5jbHVkZWQgYnkgbWlzdGFrZSwgdGhpcyBlcnJvciBjYW4gYmUgZml4ZWQKYnkgc2ltcGx5IHJlbW92aW5nIHRoZSB0eXBlIHBhcmFtZXRlciwgYXMgc2hvd24gYmVsb3c6CgpgYGAKZW51bSBGb28gewogICAgQmFyLAp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgaWYgdGhlIHR5cGUgcGFyYW1ldGVyIHdhcyBpbnRlbnRpb25hbGx5IGluc2VydGVkLCBpdCBtdXN0IGJlCnVzZWQuIEEgc2ltcGxlIGZpeCBpcyBzaG93biBiZWxvdzoKCmBgYAplbnVtIEZvbzxUPiB7CiAgICBCYXIoVCksCn0KYGBgCgpUaGlzIGVycm9yIG1heSBhbHNvIGNvbW1vbmx5IGJlIGZvdW5kIHdoZW4gd29ya2luZyB3aXRoIHVuc2FmZSBjb2RlLiBGb3IKZXhhbXBsZSwgd2hlbiB1c2luZyByYXcgcG9pbnRlcnMgb25lIG1heSB3aXNoIHRvIHNwZWNpZnkgdGhlIGxpZmV0aW1lIGZvcgp3aGljaCB0aGUgcG9pbnRlZC1hdCBkYXRhIGlzIHZhbGlkLiBBbiBpbml0aWFsIGF0dGVtcHQgKGJlbG93KSBjYXVzZXMgdGhpcwplcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICB4OiAqY29uc3QgVCwKfQpgYGAKCldlIHdhbnQgdG8gZXhwcmVzcyB0aGUgY29uc3RyYWludCB0aGF0IEZvbyBzaG91bGQgbm90IG91dGxpdmUgYCdhYCwgYmVjYXVzZQp0aGUgZGF0YSBwb2ludGVkIHRvIGJ5IGBUYCBpcyBvbmx5IHZhbGlkIGZvciB0aGF0IGxpZmV0aW1lLiBUaGUgcHJvYmxlbSBpcwp0aGF0IHRoZXJlIGFyZSBubyBhY3R1YWwgdXNlcyBvZiBgJ2FgLiBJdCdzIHBvc3NpYmxlIHRvIHdvcmsgYXJvdW5kIHRoaXMKYnkgYWRkaW5nIGEgUGhhbnRvbURhdGEgdHlwZSB0byB0aGUgc3RydWN0LCB1c2luZyBpdCB0byB0ZWxsIHRoZSBjb21waWxlcgp0byBhY3QgYXMgaWYgdGhlIHN0cnVjdCBjb250YWluZWQgYSBib3Jyb3dlZCByZWZlcmVuY2UgYCYnYSBUYDoKCmBgYAp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKc3RydWN0IEZvbzwnYSwgVDogJ2E+IHsKICAgIHg6ICpjb25zdCBULAogICAgcGhhbnRvbTogUGhhbnRvbURhdGE8JidhIFQ+Cn0KYGBgCgpbUGhhbnRvbURhdGFdIGNhbiBhbHNvIGJlIHVzZWQgdG8gZXhwcmVzcyBpbmZvcm1hdGlvbiBhYm91dCB1bnVzZWQgdHlwZQpwYXJhbWV0ZXJzLgoKW1BoYW50b21EYXRhXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvbWFya2VyL3N0cnVjdC5QaGFudG9tRGF0YS5odG1sCgAW////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////f/EKAAAA8QrzCP4CAIpIJgEAAPQFAAIGAPUFAQAEAMQDDgAAA/MFAAQAxAMOAAAA8wUCBQEC2QEBAQDzCAAB9AUABADEAw4AAALzBQABBACvAyQAAAPyBQAEAK8DJAAAAPIFAQEA8wgAAv0CALADEgAAAgIFRTAzOTIAAR8FAAAABfMIBACvAyQAAADyBQEBAfcIAAHzBQCAAwC5SCYBAAD5BQAAAoADALlIJgEAAgKgCUEgdHlwZSBwYXJhbWV0ZXIgd2hpY2ggcmVmZXJlbmNlcyBgU2VsZmAgaW4gaXRzIGRlZmF1bHQgdmFsdWUgd2FzIG5vdCBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkzCnRyYWl0IEE8VD1TZWxmPiB7fQoKZm4gdG9nZXRoZXJfd2Vfd2lsbF9ydWxlX3RoZV9nYWxheHkoc29uOiAmQSkge30KLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgbXVzdCBiZSBleHBsaWNpdGx5IHNwZWNpZmllZCBpbiBhbgovLyAgICAgICAgb2JqZWN0IHR5cGUgYmVjYXVzZSBpdHMgZGVmYXVsdCB2YWx1ZSBgU2VsZmAgcmVmZXJlbmNlcyB0aGUKLy8gICAgICAgIHR5cGUgYFNlbGZgCmBgYAoKQSB0cmFpdCBvYmplY3QgaXMgZGVmaW5lZCBvdmVyIGEgc2luZ2xlLCBmdWxseS1kZWZpbmVkIHRyYWl0LiBXaXRoIGEgcmVndWxhcgpkZWZhdWx0IHBhcmFtZXRlciwgdGhpcyBwYXJhbWV0ZXIgY2FuIGp1c3QgYmUgc3Vic3RpdHV0ZWQgaW4uIEhvd2V2ZXIsIGlmIHRoZQpkZWZhdWx0IHBhcmFtZXRlciBpcyBgU2VsZmAsIHRoZSB0cmFpdCBjaGFuZ2VzIGZvciBlYWNoIGNvbmNyZXRlIHR5cGU7IGkuZS4KYGkzMmAgd2lsbCBiZSBleHBlY3RlZCB0byBpbXBsZW1lbnQgYEE8aTMyPmAsIGBib29sYCB3aWxsIGJlIGV4cGVjdGVkIHRvCmltcGxlbWVudCBgQTxib29sPmAsIGV0Yy4uLiBUaGVzZSB0eXBlcyB3aWxsIG5vdCBzaGFyZSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBhCmZ1bGx5LWRlZmluZWQgdHJhaXQ7IGluc3RlYWQgdGhleSBzaGFyZSBpbXBsZW1lbnRhdGlvbnMgb2YgYSB0cmFpdCB3aXRoCmRpZmZlcmVudCBwYXJhbWV0ZXJzIHN1YnN0aXR1dGVkIGluIGZvciBlYWNoIGltcGxlbWVudGF0aW9uLiBUaGlzIGlzCmlycmVjb25jaWxhYmxlIHdpdGggd2hhdCB3ZSBuZWVkIHRvIG1ha2UgYSB0cmFpdCBvYmplY3Qgd29yaywgYW5kIGlzIHRodXMKZGlzYWxsb3dlZC4gTWFraW5nIHRoZSB0cmFpdCBjb25jcmV0ZSBieSBleHBsaWNpdGx5IHNwZWNpZnlpbmcgdGhlIHZhbHVlIG9mIHRoZQpkZWZhdWx0ZWQgcGFyYW1ldGVyIHdpbGwgZml4IHRoaXMgaXNzdWUuIEZpeGVkIGV4YW1wbGU6CgpgYGAKdHJhaXQgQTxUPVNlbGY+IHt9CgpmbiB0b2dldGhlcl93ZV93aWxsX3J1bGVfdGhlX2dhbGF4eShzb246ICZBPGkzMj4pIHt9IC8vIE9rIQpgYGAKABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////D6AJAAAAoAnzCIADALlIJgEAAPgFAAIGAPkFAQAEAMQDDgAAA/cFAAQAxAMOAAAA9wUCBQEC2QEBAQDzCAAB+AUABADEAw4AAAL3BQABBACvAyQAAAP2BQAEAK8DJAAAAPYFAQEA8wgAAv8CALADEgAAAgIFRTAzOTMAAR8FAAAABfMIBACvAyQAAAD2BQEBAfcIAAH3BQCCAwDoSCYBAAD9BQAAAoIDAOhIJgEAAgKVCyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkluIFJ1c3QgMS4zLCB0aGUgZGVmYXVsdCBvYmplY3QgbGlmZXRpbWUgYm91bmRzIGFyZSBleHBlY3RlZCB0byBjaGFuZ2UsIGFzCmRlc2NyaWJlZCBpbiBbUkZDIDExNTZdLiBZb3UgYXJlIGdldHRpbmcgYSB3YXJuaW5nIGJlY2F1c2UgdGhlIGNvbXBpbGVyCnRoaW5rcyBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoaXMgY2hhbmdlIHdpbGwgY2F1c2UgYSBjb21waWxhdGlvbiBlcnJvciBpbiB5b3VyCmNvZGUuIEl0IGlzIHBvc3NpYmxlLCB0aG91Z2ggdW5saWtlbHksIHRoYXQgdGhpcyBpcyBhIGZhbHNlIGFsYXJtLgoKVGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2UgaXMgdGhhdCB3aGVyZSBgJidhIEJveDxTb21lVHJhaXQ+YCB1c2VkIHRvIGRlZmF1bHQgdG8KYCYnYSBCb3g8U29tZVRyYWl0KydhPmAsIGl0IG5vdyBkZWZhdWx0cyB0byBgJidhIEJveDxTb21lVHJhaXQrJ3N0YXRpYz5gIChoZXJlLApgU29tZVRyYWl0YCBpcyB0aGUgbmFtZSBvZiBzb21lIHRyYWl0IHR5cGUpLiBOb3RlIHRoYXQgdGhlIG9ubHkgdHlwZXMgd2hpY2ggYXJlCmFmZmVjdGVkIGFyZSByZWZlcmVuY2VzIHRvIGJveGVzLCBsaWtlIGAmQm94PFNvbWVUcmFpdD5gIG9yCmAmW0JveDxTb21lVHJhaXQ+XWAuIE1vcmUgY29tbW9uIHR5cGVzIGxpa2UgYCZTb21lVHJhaXRgIG9yIGBCb3g8U29tZVRyYWl0PmAKYXJlIHVuYWZmZWN0ZWQuCgpUbyBzaWxlbmNlIHRoaXMgd2FybmluZywgZWRpdCB5b3VyIGNvZGUgdG8gdXNlIGFuIGV4cGxpY2l0IGJvdW5kLiBNb3N0IG9mIHRoZQp0aW1lLCB0aGlzIG1lYW5zIHRoYXQgeW91IHdpbGwgd2FudCB0byBjaGFuZ2UgdGhlIHNpZ25hdHVyZSBvZiBhIGZ1bmN0aW9uIHRoYXQKeW91IGFyZSBjYWxsaW5nLiBGb3IgZXhhbXBsZSwgaWYgdGhlIGVycm9yIGlzIHJlcG9ydGVkIG9uIGEgY2FsbCBsaWtlIGBmb28oeClgLAphbmQgYGZvb2AgaXMgZGVmaW5lZCBhcyBmb2xsb3dzOgoKYGBgCiMgdHJhaXQgU29tZVRyYWl0IHt9CmZuIGZvbyhhcmc6ICZCb3g8U29tZVRyYWl0PikgeyAvKiAuLi4gKi8gfQpgYGAKCllvdSBtaWdodCBjaGFuZ2UgaXQgdG86CgpgYGAKIyB0cmFpdCBTb21lVHJhaXQge30KZm4gZm9vPCdhPihhcmc6ICYnYSBCb3g8U29tZVRyYWl0KydhPikgeyAvKiAuLi4gKi8gfQpgYGAKClRoaXMgZXhwbGljaXRseSBzdGF0ZXMgdGhhdCB5b3UgZXhwZWN0IHRoZSB0cmFpdCBvYmplY3QgYFNvbWVUcmFpdGAgdG8gY29udGFpbgpyZWZlcmVuY2VzICh3aXRoIGEgbWF4aW11bSBsaWZldGltZSBvZiBgJ2FgKS4KCltSRkMgMTE1Nl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzExNTYtYWRqdXN0LWRlZmF1bHQtb2JqZWN0LWJvdW5kcy5tZAoAF////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//3+VCwAAAJUL8wiCAwDoSCYBAAD8BQACBgD9BQEABADEAw4AAAP7BQAEAMQDDgAAAPsFAgUBAtkBAQEA8wgAAfwFAAQAxAMOAAAC+wUAAQQArwMkAAAD+gUABACvAyQAAAD6BQEBAPMIAAKBAwCwAxIAAAICBUUwMzk4AAEfBQAAAAXzCAQArwMkAAAA+gUBAQH3CAAB+wUAhAMAl0kmAQAAgQYAAAKEAwCXSSYBAAIC3AUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIKCllvdSBpbXBsZW1lbnRlZCBhIHRyYWl0LCBvdmVycmlkaW5nIG9uZSBvciBtb3JlIG9mIGl0cyBhc3NvY2lhdGVkIHR5cGVzIGJ1dCBkaWQKbm90IHJlaW1wbGVtZW50IGl0cyBkZWZhdWx0IG1ldGhvZHMuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBc3NvYyA9IHU4OwogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIC8vIGVycm9yIC0gdGhlIGZvbGxvd2luZyB0cmFpdCBpdGVtcyBuZWVkIHRvIGJlIHJlaW1wbGVtZW50ZWQgYXMKICAgIC8vICAgICAgICAgYEFzc29jYCB3YXMgb3ZlcnJpZGRlbjogYGJhcmAKICAgIHR5cGUgQXNzb2MgPSBpMzI7Cn0KYGBgCgpUbyBmaXggdGhpcywgYWRkIGFuIGltcGxlbWVudGF0aW9uIGZvciBlYWNoIGRlZmF1bHQgbWV0aG9kIGZyb20gdGhlIHRyYWl0OgoKYGBgCiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2RlZmF1bHRzKV0KCnB1YiB0cmFpdCBGb28gewogICAgdHlwZSBBc3NvYyA9IHU4OwogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIHR5cGUgQXNzb2MgPSBpMzI7CiAgICBmbiBiYXIoJnNlbGYpIHt9IC8vIG9rIQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////f9wFAAAA3AXzCIQDAJdJJgEAAIAGAAIGAIEGAQAEAMQDDgAAA/8FAAQAxAMOAAAA/wUCBQEC2QEBAQDzCAABgAYABADEAw4AAAL/BQABBACvAyQAAAP+BQAEAK8DJAAAAP4FAQEA8wgAAoMDALADEgAAAgIFRTAzOTkAAR8FAAAABfMIBACvAyQAAAD+BQEBAfcIAAH/BQCGAwDGSSYBAACFBgAAAoYDAMZJJgEAAgKXDUlubmVyIGl0ZW1zIGRvIG5vdCBpbmhlcml0IHR5cGUgb3IgY29uc3QgcGFyYW1ldGVycyBmcm9tIHRoZSBmdW5jdGlvbnMKdGhleSBhcmUgZW1iZWRkZWQgaW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICBmbiBiYXIoeTogVCkgeyAvLyBUIGlzIGRlZmluZWQgaW4gdGhlICJvdXRlciIgZnVuY3Rpb24KICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKTm9yIHdpbGwgdGhpczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgdHlwZSBNYXliZVQgPSBPcHRpb248VD47CiAgICAvLyAuLi4KfQpgYGAKCk9yIHRoaXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIHN0cnVjdCBGb28gewogICAgICAgIHg6IFQsCiAgICB9CiAgICAvLyAuLi4KfQpgYGAKCkl0ZW1zIGluc2lkZSBmdW5jdGlvbnMgYXJlIGJhc2ljYWxseSBqdXN0IGxpa2UgdG9wLWxldmVsIGl0ZW1zLCBleGNlcHQKdGhhdCB0aGV5IGNhbiBvbmx5IGJlIHVzZWQgZnJvbSB0aGUgZnVuY3Rpb24gdGhleSBhcmUgaW4uCgpUaGVyZSBhcmUgYSBjb3VwbGUgb2Ygc29sdXRpb25zIGZvciB0aGlzLgoKSWYgdGhlIGl0ZW0gaXMgYSBmdW5jdGlvbiwgeW91IG1heSB1c2UgYSBjbG9zdXJlOgoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICBsZXQgYmFyID0gfHk6IFR8IHsgLy8gZXhwbGljaXQgdHlwZSBhbm5vdGF0aW9uIG1heSBub3QgYmUgbmVjZXNzYXJ5CiAgICAgICAgLy8gLi4KICAgIH07CiAgICBiYXIoeCk7Cn0KYGBgCgpGb3IgYSBnZW5lcmljIGl0ZW0sIHlvdSBjYW4gY29weSBvdmVyIHRoZSBwYXJhbWV0ZXJzOgoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICBmbiBiYXI8VD4oeTogVCkgewogICAgICAgIC8vIC4uCiAgICB9CiAgICBiYXIoeCk7Cn0KYGBgCgpgYGAKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIHR5cGUgTWF5YmVUPFQ+ID0gT3B0aW9uPFQ+Owp9CmBgYAoKQmUgc3VyZSB0byBjb3B5IG92ZXIgYW55IGJvdW5kcyBhcyB3ZWxsOgoKYGBgCmZuIGZvbzxUOiBDb3B5Pih4OiBUKSB7CiAgICBmbiBiYXI8VDogQ29weT4oeTogVCkgewogICAgICAgIC8vIC4uCiAgICB9CiAgICBiYXIoeCk7Cn0KYGBgCgpgYGAKZm4gZm9vPFQ6IENvcHk+KHg6IFQpIHsKICAgIHN0cnVjdCBGb288VDogQ29weT4gewogICAgICAgIHg6IFQsCiAgICB9Cn0KYGBgCgpUaGlzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwgdHlwZSBoaW50cyBpbiB0aGUgZnVuY3Rpb24gYm9keS4KCkluIGNhc2UgdGhlIGl0ZW0gaXMgYSBmdW5jdGlvbiBpbnNpZGUgYW4gYGltcGxgLCBkZWZpbmluZyBhIHByaXZhdGUgaGVscGVyCmZ1bmN0aW9uIG1pZ2h0IGJlIGVhc2llcjoKCmBgYAojIHN0cnVjdCBGb288VD4oVCk7CmltcGw8VD4gRm9vPFQ+IHsKICAgIHB1YiBmbiBmb28oJnNlbGYsIHg6IFQpIHsKICAgICAgICBzZWxmLmJhcih4KTsKICAgIH0KCiAgICBmbiBiYXIoJnNlbGYsIHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQp9CmBgYAoKRm9yIGRlZmF1bHQgaW1wbHMgaW4gdHJhaXRzLCB0aGUgcHJpdmF0ZSBoZWxwZXIgc29sdXRpb24gd29uJ3Qgd29yaywgaG93ZXZlcgpjbG9zdXJlcyBvciBjb3B5aW5nIHRoZSBwYXJhbWV0ZXJzIHNob3VsZCBzdGlsbCB3b3JrLgoAG////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////A5cNAAAAlw3zCIYDAMZJJgEAAIQGAAIGAIUGAQAEAMQDDgAAA4MGAAQAxAMOAAAAgwYCBQEC2QEBAQDzCAABhAYABADEAw4AAAKDBgABBACvAyQAAAOCBgAEAK8DJAAAAIIGAQEA8wgAAoUDALADEgAAAgIFRTA0MDEAAR8FAAAABfMIBACvAyQAAACCBgEBAfcIAAGDBgCIAwD1SSYBAACJBgAAAogDAPVJJgEAAgLyBFNvbWUgdHlwZSBwYXJhbWV0ZXJzIGhhdmUgdGhlIHNhbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDMKZm4gZjxULCBUPihzOiBULCB1OiBUKSB7fSAvLyBlcnJvcjogdGhlIG5hbWUgYFRgIGlzIGFscmVhZHkgdXNlZCBmb3IgYSBnZW5lcmljCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHBhcmFtZXRlciBpbiB0aGlzIGl0ZW0ncyBnZW5lcmljIHBhcmFtZXRlcnMKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgbm9uZSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIGFyZSBtaXNzcGVsbGVkLCBhbmQgcmVuYW1lIGFueQpjbGFzaGluZyBwYXJhbWV0ZXJzLiBFeGFtcGxlOgoKYGBgCmZuIGY8VCwgWT4oczogVCwgdTogWSkge30gLy8gb2shCmBgYAoKVHlwZSBwYXJhbWV0ZXJzIGluIGFuIGFzc29jaWF0ZWQgaXRlbSBhbHNvIGNhbm5vdCBzaGFkb3cgcGFyYW1ldGVycyBmcm9tIHRoZQpjb250YWluaW5nIGl0ZW06CgpgYGBjb21waWxlX2ZhaWwsRTA0MDMKdHJhaXQgRm9vPFQ+IHsKICAgIGZuIGRvX3NvbWV0aGluZygmc2VsZikgLT4gVDsKICAgIGZuIGRvX3NvbWV0aGluZ19lbHNlPFQ6IENsb25lPigmc2VsZiwgYmFyOiBUKTsKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////AfIEAAAA8gTzCIgDAPVJJgEAAIgGAAIGAIkGAQAEAMQDDgAAA4cGAAQAxAMOAAAAhwYCBQEC2QEBAQDzCAABiAYABADEAw4AAAKHBgABBACvAyQAAAOGBgAEAK8DJAAAAIYGAQEA8wgAAocDALADEgAAAgIFRTA0MDMAAR8FAAAABfMIBACvAyQAAACGBgEBAfcIAAGHBgCKAwCkSiYBAACNBgAAAooDAKRKJgEAAgKWCUEgdHlwZSB0aGF0IGlzIG5vdCBhIHRyYWl0IHdhcyB1c2VkIGluIGEgdHJhaXQgcG9zaXRpb24sIHN1Y2ggYXMgYSBib3VuZApvciBgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA0CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgbm90IGEgdHJhaXQKYGBgCgpBbm90aGVyIGVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDQKdHlwZSBGb28gPSBJdGVyYXRvcjxJdGVtPVN0cmluZz47CgpmbiBiYXI8VDogRm9vPih0OiBUKSB7fSAvLyBlcnJvcjogYEZvb2AgaXMgYSB0eXBlIGFsaWFzCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSB0cmFpdCdzIG5hbWUgd2FzIG5vdCBtaXNzcGVsbGVkIG9yIHRoYXQgdGhlIHJpZ2h0CmlkZW50aWZpZXIgd2FzIHVzZWQuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0Kc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgeyAvLyBvayEKICAgIC8vIGZ1bmN0aW9ucyBpbXBsZW1lbnRhdGlvbgp9CgpmbiBiYXo8VDogRm9vPih0OiBUKSB7fSAvLyBvayEKYGBgCgpBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgaW50cm9kdWNlIGEgbmV3IHRyYWl0IHdpdGggeW91ciBkZXNpcmVkIHJlc3RyaWN0aW9ucwphcyBhIHN1cGVyIHRyYWl0OgoKYGBgCiMgdHJhaXQgRm9vIHt9CiMgc3RydWN0IEJhcjsKIyBpbXBsIEZvbyBmb3IgQmFyIHt9CnRyYWl0IFF1eDogRm9vIHt9IC8vIEFueXRoaW5nIHRoYXQgaW1wbGVtZW50cyBRdXggYWxzbyBuZWVkcyB0byBpbXBsZW1lbnQgRm9vCmZuIGJhejxUOiBRdXg+KHQ6IFQpIHt9IC8vIGFsc28gb2shCmBgYAoKRmluYWxseSwgaWYgeW91IGFyZSBvbiBuaWdodGx5IGFuZCB3YW50IHRvIHVzZSBhIHRyYWl0IGFsaWFzCmluc3RlYWQgb2YgYSB0eXBlIGFsaWFzLCB5b3Ugc2hvdWxkIHVzZSBgIyFbZmVhdHVyZSh0cmFpdF9hbGlhcyldYDoKCmBgYAojIVtmZWF0dXJlKHRyYWl0X2FsaWFzKV0KdHJhaXQgRm9vID0gSXRlcmF0b3I8SXRlbT1TdHJpbmc+OwoKZm4gYmFyPFQ6IEZvbz4odDogVCkge30gLy8gb2shCmBgYAoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wGWCQAAAJYJ8wiKAwCkSiYBAACMBgACBgCNBgEABADEAw4AAAOLBgAEAMQDDgAAAIsGAgUBAtkBAQEA8wgAAYwGAAQAxAMOAAACiwYAAQQArwMkAAADigYABACvAyQAAACKBgEBAPMIAAKJAwCwAxIAAAICBUUwNDA0AAEfBQAAAAXzCAQArwMkAAAAigYBAQH3CAABiwYAjAMA00omAQAAkQYAAAKMAwDTSiYBAAIC9wNUaGUgY29kZSByZWZlcnMgdG8gYSB0cmFpdCB0aGF0IGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDUKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28ge30gLy8gZXJyb3I6IHRyYWl0IGBTb21lVHJhaXRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgbmFtZSBvZiB0aGUgdHJhaXQgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IGl0CndhcyBpbXBvcnRlZC4gRXhhbXBsZToKCmBgYAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQovLyBzb2x1dGlvbiAxOgp1c2Ugc29tZV9maWxlOjpTb21lVHJhaXQ7CgovLyBzb2x1dGlvbiAyOgp0cmFpdCBTb21lVHJhaXQgewogICAgLy8gc29tZSBmdW5jdGlvbnMKfQoKc3RydWN0IEZvbzsKCmltcGwgU29tZVRyYWl0IGZvciBGb28geyAvLyBvayEKICAgIC8vIGltcGxlbWVudHMgZnVuY3Rpb25zCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/9wMAAAD3A/MIjAMA00omAQAAkAYAAgYAkQYBAAQAxAMOAAADjwYABADEAw4AAACPBgIFAQLZAQEBAPMIAAGQBgAEAMQDDgAAAo8GAAEEAK8DJAAAA44GAAQArwMkAAAAjgYBAQDzCAACiwMAsAMSAAACAgVFMDQwNQABHwUAAAAF8wgEAK8DJAAAAI4GAQEB9wgAAY8GAI4DAIJLJgEAAJUGAAACjgMAgksmAQACAvQEQSBkZWZpbml0aW9uIG9mIGEgbWV0aG9kIG5vdCBpbiB0aGUgaW1wbGVtZW50ZWQgdHJhaXQgd2FzIGdpdmVuIGluIGEgdHJhaXQKaW1wbGVtZW50YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA3CnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQogICAgZm4gYigpIHt9IC8vIGVycm9yOiBtZXRob2QgYGJgIGlzIG5vdCBhIG1lbWJlciBvZiB0cmFpdCBgRm9vYAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBtZXRob2QgbmFtZSBhbmQgeW91IHVzZWQgdGhlIGNvcnJlY3QKdHJhaXQuIEZpcnN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKICAgIGZuIGIoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9CiAgICBmbiBiKCkge30gLy8gb2shCn0KYGBgCgpTZWNvbmQgZXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYSgpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KfQoKaW1wbCBCYXIgewogICAgZm4gYigpIHt9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0BAAAAPQE8wiOAwCCSyYBAACUBgACBgCVBgEABADEAw4AAAOTBgAEAMQDDgAAAJMGAgUBAtkBAQEA8wgAAZQGAAQAxAMOAAACkwYAAQQArwMkAAADkgYABACvAyQAAACSBgEBAPMIAAKNAwCwAxIAAAICBUUwNDA3AAEfBQAAAAXzCAQArwMkAAAAkgYBAQH3CAABkwYAkAMAsUsmAQAAmQYAAAKQAwCxSyYBAAICrQhBbiAib3IiIHBhdHRlcm4gd2FzIHVzZWQgd2hlcmUgdGhlIHZhcmlhYmxlIGJpbmRpbmdzIGFyZSBub3QgY29uc2lzdGVudGx5IGJvdW5kCmFjcm9zcyBwYXR0ZXJucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDgKbWF0Y2ggeCB7CiAgICBTb21lKHkpIHwgTm9uZSA9PiB7IC8qIHVzZSB5ICovIH0gLy8gZXJyb3I6IHZhcmlhYmxlIGB5YCBmcm9tIHBhdHRlcm4gIzEgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbm90IGJvdW5kIGluIHBhdHRlcm4gIzIKICAgIF8gPT4gKCkKfQpgYGAKCkhlcmUsIGB5YCBpcyBib3VuZCB0byB0aGUgY29udGVudHMgb2YgdGhlIGBTb21lYCBhbmQgY2FuIGJlIHVzZWQgd2l0aGluIHRoZQpibG9jayBjb3JyZXNwb25kaW5nIHRvIHRoZSBtYXRjaCBhcm0uIEhvd2V2ZXIsIGluIGNhc2UgYHhgIGlzIGBOb25lYCwgd2UgaGF2ZQpub3Qgc3BlY2lmaWVkIHdoYXQgYHlgIGlzLCBhbmQgdGhlIGJsb2NrIHdpbGwgdXNlIGEgbm9uZXhpc3RlbnQgdmFyaWFibGUuCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIHNwbGl0IGludG8gbXVsdGlwbGUgbWF0Y2ggYXJtczoKCmBgYApsZXQgeCA9IFNvbWUoMSk7Cm1hdGNoIHggewogICAgU29tZSh5KSA9PiB7IC8qIHVzZSB5ICovIH0KICAgIE5vbmUgPT4geyAvKiAuLi4gKi8gfQp9CmBgYAoKb3IsIGJpbmQgdGhlIHZhcmlhYmxlIHRvIGEgZmllbGQgb2YgdGhlIHNhbWUgdHlwZSBpbiBhbGwgc3ViLXBhdHRlcm5zIG9mIHRoZQpvciBwYXR0ZXJuOgoKYGBgCmxldCB4ID0gKDAsIDIpOwptYXRjaCB4IHsKICAgICgwLCB5KSB8ICh5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiB7fQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBpZiBgeGAgbWF0Y2hlcyB0aGUgcGF0dGVybiBgKDAsIF8pYCwgdGhlIHNlY29uZCBmaWVsZCBpcyBzZXQKdG8gYHlgLiBJZiBpdCBtYXRjaGVzIGAoXywgMClgLCB0aGUgZmlyc3QgZmllbGQgaXMgc2V0IHRvIGB5YDsgc28gaW4gYWxsCmNhc2VzIGB5YCBpcyBzZXQgdG8gc29tZSB2YWx1ZS4KABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////B60IAAAArQjzCJADALFLJgEAAJgGAAIGAJkGAQAEAMQDDgAAA5cGAAQAxAMOAAAAlwYCBQEC2QEBAQDzCAABmAYABADEAw4AAAKXBgABBACvAyQAAAOWBgAEAK8DJAAAAJYGAQEA8wgAAo8DALADEgAAAgIFRTA0MDgAAR8FAAAABfMIBACvAyQAAACWBgEBAfcIAAGXBgCSAwDgSyYBAACdBgAAApIDAOBLJgEAAgLhBkFuICJvciIgcGF0dGVybiB3YXMgdXNlZCB3aGVyZSB0aGUgdmFyaWFibGUgYmluZGluZ3MgYXJlIG5vdCBjb25zaXN0ZW50bHkgYm91bmQKYWNyb3NzIHBhdHRlcm5zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwOQpsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHksIDApID0+IHsgLyogdXNlIHkgKi99IC8vIGVycm9yOiB2YXJpYWJsZSBgeWAgaXMgYm91bmQgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZGlmZmVyZW50IG1vZGUgaW4gcGF0dGVybiAjMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhhbiBpbiBwYXR0ZXJuICMxCiAgICBfID0+ICgpCn0KYGBgCgpIZXJlLCBgeWAgaXMgYm91bmQgYnktdmFsdWUgaW4gb25lIGNhc2UgYW5kIGJ5LXJlZmVyZW5jZSBpbiB0aGUgb3RoZXIuCgpUbyBmaXggdGhpcyBlcnJvciwganVzdCB1c2UgdGhlIHNhbWUgbW9kZSBpbiBib3RoIGNhc2VzLgpHZW5lcmFsbHkgdXNpbmcgYHJlZmAgb3IgYHJlZiBtdXRgIHdoZXJlIG5vdCBhbHJlYWR5IHVzZWQgd2lsbCBmaXggdGhpczoKCmBgYApsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHJlZiB5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgc3BsaXQgdGhlIHBhdHRlcm46CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKHksIDApID0+IHsgLyogdXNlIHkgKi8gfQogICAgKDAsIHJlZiB5KSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EGAAAA4QbzCJIDAOBLJgEAAJwGAAIGAJ0GAQAEAMQDDgAAA5sGAAQAxAMOAAAAmwYCBQEC2QEBAQDzCAABnAYABADEAw4AAAKbBgABBACvAyQAAAOaBgAEAK8DJAAAAJoGAQEA8wgAApEDALADEgAAAgIFRTA0MDkAAR8FAAAABfMIBACvAyQAAACaBgEBAfcIAAGbBgCUAwCPTCYBAAChBgAAApQDAI9MJgEAAgLmB1RoZSBgU2VsZmAga2V5d29yZCB3YXMgdXNlZCBvdXRzaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDExCjxTZWxmPjo6Zm9vOyAvLyBlcnJvcjogdXNlIG9mIGBTZWxmYCBvdXRzaWRlIG9mIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlCiAgICAgICAgICAgICAvLyBkZWZpbml0aW9uCmBgYAoKVGhlIGBTZWxmYCBrZXl3b3JkIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdHlwZSwgd2hpY2ggZXhwbGFpbnMgd2h5IGl0IGNhbiBvbmx5CmJlIHVzZWQgaW5zaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uIEl0IGdpdmVzIGFjY2VzcyB0byB0aGUKYXNzb2NpYXRlZCBpdGVtcyBvZiBhIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gewogICAgZm4gYmFyKCkgLT4gU2VsZjo6QmFyOyAvLyBsaWtlIHRoaXMKfQpgYGAKCkhvd2V2ZXIsIGJlIGNhcmVmdWwgd2hlbiB0d28gdHlwZXMgaGF2ZSBhIGNvbW1vbiBhc3NvY2lhdGVkIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBGb28yIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gKyBGb28yIHsKICAgIGZuIGJhcigpIC0+IFNlbGY6OkJhcjsKICAgIC8vIGVycm9yOiBhbWJpZ3VvdXMgYXNzb2NpYXRlZCB0eXBlIGBCYXJgIGluIGJvdW5kcyBvZiBgU2VsZmAKfQpgYGAKClRoaXMgcHJvYmxlbSBjYW4gYmUgc29sdmVkIGJ5IHNwZWNpZnlpbmcgZnJvbSB3aGljaCB0cmFpdCB3ZSB3YW50IHRvIHVzZSB0aGUKYEJhcmAgdHlwZToKCmBgYAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEZvbzIgewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyArIEZvbzIgewogICAgZm4gYmFyKCkgLT4gPFNlbGYgYXMgRm9vPjo6QmFyOyAvLyBvayEKfQpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmBwAAAOYH8wiUAwCPTCYBAACgBgACBgChBgEABADEAw4AAAOfBgAEAMQDDgAAAJ8GAgUBAtkBAQEA8wgAAaAGAAQAxAMOAAACnwYAAQQArwMkAAADngYABACvAyQAAACeBgEBAPMIAAKTAwCwAxIAAAICBUUwNDExAAEfBQAAAAXzCAQArwMkAAAAngYBAQH3CAABnwYAlgMAvkwmAQAApQYAAAKWAwC+TCYBAAIC8AhBIHVzZWQgdHlwZSBuYW1lIGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDEyCmltcGwgU29tZXRoaW5nIHt9IC8vIGVycm9yOiB0eXBlIG5hbWUgYFNvbWV0aGluZ2AgaXMgbm90IGluIHNjb3BlCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoTik7IC8vIGVycm9yOiB0eXBlIG5hbWUgYE5gIGlzIG5vdCBpbiBzY29wZQp9CgovLyBvcjoKCmZuIGZvbyh4OiBUKSB7fSAvLyB0eXBlIG5hbWUgYFRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHR5cGUgbmFtZSwgeW91IGRpZApkZWNsYXJlIGl0IG9yIGltcG9ydGVkIGl0IGludG8gdGhlIHNjb3BlLiBFeGFtcGxlczoKCmBgYApzdHJ1Y3QgU29tZXRoaW5nOwoKaW1wbCBTb21ldGhpbmcge30gLy8gb2shCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47CgogICAgZm4gYmFyKF86IFNlbGY6Ok4pOyAvLyBvayEKfQoKLy8gb3I6CgpmbiBmb288VD4oeDogVCkge30gLy8gb2shCmBgYAoKQW5vdGhlciBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgd2hlbiBhIHR5cGUgaXMgaW1wb3J0ZWQgaW50byBhIHBhcmVudAptb2R1bGUuIFRvIGZpeCB0aGlzLCB5b3UgY2FuIGZvbGxvdyB0aGUgc3VnZ2VzdGlvbiBhbmQgdXNlIEZpbGUgZGlyZWN0bHkgb3IKYHVzZSBzdXBlcjo6RmlsZTtgIHdoaWNoIHdpbGwgaW1wb3J0IHRoZSB0eXBlcyBmcm9tIHRoZSBwYXJlbnQgbmFtZXNwYWNlLiBBbgpleGFtcGxlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgYmVsb3c6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTIKdXNlIHN0ZDo6ZnM6OkZpbGU7Cgptb2QgZm9vIHsKICAgIGZuIHNvbWVfZnVuY3Rpb24oZjogRmlsZSkge30KfQpgYGAKCmBgYAp1c2Ugc3RkOjpmczo6RmlsZTsKCm1vZCBmb28gewogICAgLy8gZWl0aGVyCiAgICB1c2Ugc3VwZXI6OkZpbGU7CiAgICAvLyBvcgogICAgLy8gdXNlIHN0ZDo6ZnM6OkZpbGU7CiAgICBmbiBmb28oZjogRmlsZSkge30KfQojIGZuIG1haW4oKSB7fSAvLyBkb24ndCBpbnNlcnQgaXQgZm9yIHVzOyB0aGF0J2xsIGJyZWFrIGltcG9ydHMKYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AgAAADwCPMIlgMAvkwmAQAApAYAAgYApQYBAAQAxAMOAAADowYABADEAw4AAACjBgIFAQLZAQEBAPMIAAGkBgAEAMQDDgAAAqMGAAEEAK8DJAAAA6IGAAQArwMkAAAAogYBAQDzCAAClQMAsAMSAAACAgVFMDQxMgABHwUAAAAF8wgEAK8DJAAAAKIGAQEB9wgAAaMGAJgDAO1MJgEAAKkGAAACmAMA7UwmAQACAtcCTW9yZSB0aGFuIG9uZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQxNQpmbiBmb28oZjogaTMyLCBmOiBpMzIpIHt9IC8vIGVycm9yOiBpZGVudGlmaWVyIGBmYCBpcyBib3VuZCBtb3JlIHRoYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgb25jZSBpbiB0aGlzIHBhcmFtZXRlciBsaXN0CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHBhcmFtZXRlcnMnIG5hbWUuIEV4YW1wbGU6CgpgYGAKZm4gZm9vKGY6IGkzMiwgZzogaTMyKSB7fSAvLyBvayEKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8D1wIAAADXAvMImAMA7UwmAQAAqAYAAgYAqQYBAAQAxAMOAAADpwYABADEAw4AAACnBgIFAQLZAQEBAPMIAAGoBgAEAMQDDgAAAqcGAAEEAK8DJAAAA6YGAAQArwMkAAAApgYBAQDzCAAClwMAsAMSAAACAgVFMDQxNQABHwUAAAAF8wgEAK8DJAAAAKYGAQEB9wgAAacGAJoDAJxNJgEAAK0GAAACmgMAnE0mAQACAtYEQW4gaWRlbnRpZmllciBpcyBib3VuZCBtb3JlIHRoYW4gb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDE2Cm1hdGNoICgxLCAyKSB7CiAgICAoeCwgeCkgPT4ge30gLy8gZXJyb3I6IGlkZW50aWZpZXIgYHhgIGlzIGJvdW5kIG1vcmUgdGhhbiBvbmNlIGluIHRoZQogICAgICAgICAgICAgICAgIC8vICAgICAgICBzYW1lIHBhdHRlcm4KfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBpZGVudGlmaWVycycgbmFtZS4gRXhhbXBsZToKCmBgYAptYXRjaCAoMSwgMikgewogICAgKHgsIHkpID0+IHt9IC8vIG9rIQp9CmBgYAoKT3IgbWF5YmUgZGlkIHlvdSBtZWFuIHRvIHVuaWZ5PyBDb25zaWRlciB1c2luZyBhIGd1YXJkOgoKYGBgCiMgbGV0IChBLCBCLCBDKSA9ICgxLCAyLCAzKTsKbWF0Y2ggKEEsIEIsIEMpIHsKICAgICh4LCB4Miwgc2VlKSBpZiB4ID09IHgyID0+IHsgLyogQSBhbmQgQiBhcmUgZXF1YWwsIGRvIG9uZSB0aGluZyAqLyB9CiAgICAoeSwgeiwgc2VlKSA9PiB7IC8qIEEgYW5kIEIgdW5lcXVhbDsgZG8gYW5vdGhlciB0aGluZyAqLyB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////AdYEAAAA1gTzCJoDAJxNJgEAAKwGAAIGAK0GAQAEAMQDDgAAA6sGAAQAxAMOAAAAqwYCBQEC2QEBAQDzCAABrAYABADEAw4AAAKrBgABBACvAyQAAAOqBgAEAK8DJAAAAKoGAQEA8wgAApkDALADEgAAAgIFRTA0MTYAAR8FAAAABfMIBACvAyQAAACqBgEBAfcIAAGrBgCcAwDLTSYBAACxBgAAApwDAMtNJgEAAgKpA0FuIGlkZW50aWZpZXIgdGhhdCBpcyBuZWl0aGVyIGRlZmluZWQgbm9yIGEgc3RydWN0IHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMgpmbiBtYWluICgpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMSwgeTogMiB9Owp9CmBgYAoKSW4gdGhpcyBjYXNlLCBgRm9vYCBpcyB1bmRlZmluZWQsIHNvIGl0IGluaGVyZW50bHkgaXNuJ3QgYW55dGhpbmcsIGFuZApkZWZpbml0ZWx5IG5vdCBhIHN0cnVjdC4KCmBgYGNvbXBpbGVfZmFpbApmbiBtYWluICgpIHsKICAgIGxldCBmb28gPSAxOwogICAgbGV0IHggPSBmb28geyB4OiAxLCB5OiAyIH07Cn0KYGBgCgpJbiB0aGlzIGNhc2UsIGBmb29gIGlzIGRlZmluZWQsIGJ1dCBpcyBub3QgYSBzdHJ1Y3QsIHNvIFJ1c3QgY2FuJ3QgdXNlIGl0IGFzCm9uZS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pAwAAAKkD8wicAwDLTSYBAACwBgACBgCxBgEABADEAw4AAAOvBgAEAMQDDgAAAK8GAgUBAtkBAQEA8wgAAbAGAAQAxAMOAAACrwYAAQQArwMkAAADrgYABACvAyQAAACuBgEBAPMIAAKbAwCwAxIAAAICBUUwNDIyAAEfBQAAAAXzCAQArwMkAAAArgYBAQH3CAABrwYAngMA+k0mAQAAtQYAAAKeAwD6TSYBAAICtAhBbiBpZGVudGlmaWVyIHdhcyB1c2VkIGxpa2UgYSBmdW5jdGlvbiBuYW1lIG9yIGEgdmFsdWUgd2FzIGV4cGVjdGVkIGFuZCB0aGUKaWRlbnRpZmllciBleGlzdHMgYnV0IGl0IGJlbG9uZ3MgdG8gYSBkaWZmZXJlbnQgbmFtZXNwYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpzdHJ1Y3QgRm9vIHsgYTogYm9vbCB9OwoKbGV0IGYgPSBGb28oKTsKLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYEZvb2AKLy8gYEZvb2AgaXMgYSBzdHJ1Y3QgbmFtZSwgYnV0IHRoaXMgZXhwcmVzc2lvbiB1c2VzIGl0IGxpa2UgYSBmdW5jdGlvbiBuYW1lCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBuYW1lIG9mIHdoYXQgeW91IGFjdHVhbGx5IHdhbnRlZCB0byB1c2UKaGVyZS4gRXhhbXBsZToKCmBgYApmbiBGb28oKSAtPiB1MzIgeyAwIH0KCmxldCBmID0gRm9vKCk7IC8vIG9rIQpgYGAKCkl0IGlzIGNvbW1vbiB0byBmb3JnZXQgdGhlIHRyYWlsaW5nIGAhYCBvbiBtYWNybyBpbnZvY2F0aW9ucywgd2hpY2ggd291bGQgYWxzbwp5aWVsZCB0aGlzIGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnByaW50bG4oIiIpOwovLyBlcnJvcjogZXhwZWN0ZWQgZnVuY3Rpb24sIHR1cGxlIHN0cnVjdCBvciB0dXBsZSB2YXJpYW50LAovLyBmb3VuZCBtYWNybyBgcHJpbnRsbmAKLy8gZGlkIHlvdSBtZWFuIGBwcmludGxuISguLi4pYD8gKG5vdGljZSB0aGUgdHJhaWxpbmcgYCFgKQpgYGAKCkFub3RoZXIgY2FzZSB3aGVyZSB0aGlzIGVycm9yIGlzIGVtaXR0ZWQgaXMgd2hlbiBhIHZhbHVlIGlzIGV4cGVjdGVkLCBidXQKc29tZXRoaW5nIGVsc2UgaXMgZm91bmQ6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKcHViIG1vZCBhIHsKICAgIHB1YiBjb25zdCBJOiBpMzIgPSAxOwp9CgpmbiBoMSgpIC0+IGkzMiB7CiAgICBhLkkKICAgIC8vfl4gRVJST1IgZXhwZWN0ZWQgdmFsdWUsIGZvdW5kIG1vZHVsZSBgYWAKICAgIC8vIGRpZCB5b3UgbWVhbiBgYTo6SWA/Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8HtAgAAAC0CPMIngMA+k0mAQAAtAYAAgYAtQYBAAQAxAMOAAADswYABADEAw4AAACzBgIFAQLZAQEBAPMIAAG0BgAEAMQDDgAAArMGAAEEAK8DJAAAA7IGAAQArwMkAAAAsgYBAQDzCAACnQMAsAMSAAACAgVFMDQyMwABHwUAAAAF8wgEAK8DJAAAALIGAQEB9wgAAbMGAKADAKlOJgEAALkGAAACoAMAqU4mAQACAucIVGhlIGBzZWxmYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBvZiBhbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIHdpdGhvdXQgYSAiYHNlbGZgCnJlY2VpdmVyIiBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI0CnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICAvLyBgYmFyYCBpcyBhIG1ldGhvZCwgYmVjYXVzZSBpdCBoYXMgYSByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgLy8gYGZvb2AgaXMgbm90IGEgbWV0aG9kLCBiZWNhdXNlIGl0IGhhcyBubyByZWNlaXZlciBwYXJhbWV0ZXIuCiAgICBmbiBmb28oKSB7CiAgICAgICAgc2VsZi5iYXIoKTsgLy8gZXJyb3I6IGBzZWxmYCB2YWx1ZSBpcyBhIGtleXdvcmQgb25seSBhdmFpbGFibGUgaW4KICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbWV0aG9kcyB3aXRoIGEgYHNlbGZgIHBhcmFtZXRlcgogICAgfQp9CmBgYAoKVGhlIGBzZWxmYCBrZXl3b3JkIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIG1ldGhvZHMsIHdoaWNoIGFyZSBhc3NvY2lhdGVkCmZ1bmN0aW9ucyAoZnVuY3Rpb25zIGRlZmluZWQgaW5zaWRlIG9mIGEgYHRyYWl0YCBvciBgaW1wbGAgYmxvY2spIHRoYXQgaGF2ZSBhCmBzZWxmYCByZWNlaXZlciBhcyBpdHMgZmlyc3QgcGFyYW1ldGVyLCBsaWtlIGBzZWxmYCwgYCZzZWxmYCwgYCZtdXQgc2VsZmAgb3IKYHNlbGY6ICZtdXQgUGluPFNlbGY+YCAodGhpcyBsYXN0IG9uZSBpcyBhbiBleGFtcGxlIG9mIGFuIFsiYXJiaXRyYXJ5IGBzZWxmYAp0eXBlIl0oaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80NDg3NCkpLgoKQ2hlY2sgaWYgdGhlIGFzc29jaWF0ZWQgZnVuY3Rpb24ncyBwYXJhbWV0ZXIgbGlzdCBzaG91bGQgaGF2ZSBjb250YWluZWQgYSBgc2VsZmAKcmVjZWl2ZXIgZm9yIGl0IHRvIGJlIGEgbWV0aG9kLCBhbmQgYWRkIGl0IGlmIHNvLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9CgogICAgZm4gZm9vKHNlbGYpIHsgLy8gYGZvb2AgaXMgbm93IGEgbWV0aG9kLgogICAgICAgIHNlbGYuYmFyKCk7IC8vIG9rIQogICAgfQp9CmBgYAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8P5wgAAADnCPMIoAMAqU4mAQAAuAYAAgYAuQYBAAQAxAMOAAADtwYABADEAw4AAAC3BgIFAQLZAQEBAPMIAAG4BgAEAMQDDgAAArcGAAEEAK8DJAAAA7YGAAQArwMkAAAAtgYBAQDzCAACnwMAsAMSAAACAgVFMDQyNAABHwUAAAAF8wgEAK8DJAAAALYGAQEB9wgAAbcGAKIDANhOJgEAAL0GAAACogMA2E4mAQACAq4IQW4gdW5yZXNvbHZlZCBuYW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjUKc29tZXRoaW5nX3RoYXRfZG9lc250X2V4aXN0Ojpmb287Ci8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYHNvbWV0aGluZ190aGF0X2RvZXNudF9leGlzdDo6Zm9vYAoKLy8gb3I6Cgp0cmFpdCBGb28gewogICAgZm4gYmFyKCkgewogICAgICAgIFNlbGY7IC8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYFNlbGZgCiAgICB9Cn0KCi8vIG9yOgoKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAgLy8gZXJyb3I6IHVucmVzb2x2ZWQgbmFtZSBgdW5rbm93bl92YXJpYWJsZWAKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IHRoZQppZGVudGlmaWVyIGJlaW5nIHJlZmVycmVkIHRvIGlzIHZhbGlkIGZvciB0aGUgZ2l2ZW4gc2l0dWF0aW9uLiBFeGFtcGxlOgoKYGBgCmVudW0gc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBGb28sCn0KYGBgCgpPcjoKCmBgYAptb2Qgc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBwdWIgc3RhdGljIGZvbyA6IGkzMiA9IDBpMzI7Cn0KCnNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3Q6OmZvbzsgLy8gb2shCmBgYAoKT3I6CgpgYGAKbGV0IHVua25vd25fdmFyaWFibGUgPSAxMnUzMjsKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAvLyBvayEKYGBgCgpJZiB0aGUgaXRlbSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtb2R1bGUsIGl0IG11c3QgYmUgaW1wb3J0ZWQgdXNpbmcgYQpgdXNlYCBzdGF0ZW1lbnQsIGxpa2Ugc286CgpgYGAKIyBtb2QgZm9vIHsgcHViIGZuIGJhcigpIHt9IH0KIyBmbiBtYWluKCkgewp1c2UgZm9vOjpiYXI7CmJhcigpOwojIH0KYGBgCgpJZiB0aGUgaXRlbSB5b3UgYXJlIGltcG9ydGluZyBpcyBub3QgZGVmaW5lZCBpbiBzb21lIHN1cGVyLW1vZHVsZSBvZiB0aGUKY3VycmVudCBtb2R1bGUsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGRlY2xhcmVkIGFzIHB1YmxpYyAoZS5nLiwgYHB1YiBmbmApLgoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8PrggAAACuCPMIogMA2E4mAQAAvAYAAgYAvQYBAAQAxAMOAAADuwYABADEAw4AAAC7BgIFAQLZAQEBAPMIAAG8BgAEAMQDDgAAArsGAAEEAK8DJAAAA7oGAAQArwMkAAAAugYBAQDzCAACoQMAsAMSAAACAgVFMDQyNQABHwUAAAAF8wgEAK8DJAAAALoGAQEB9wgAAbsGAKQDAIdPJgEAAMEGAAACpAMAh08mAQACAoACQW4gdW5kZWNsYXJlZCBsYWJlbCB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjYKbG9vcCB7CiAgICBicmVhayAnYTsgLy8gZXJyb3I6IHVzZSBvZiB1bmRlY2xhcmVkIGxhYmVsIGAnYWAKfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IHNwZWxsZWQgb3IgZGVjbGFyZWQgdGhlIGxhYmVsIGNvcnJlY3RseS4gRXhhbXBsZToKCmBgYAonYTogbG9vcCB7CiAgICBicmVhayAnYTsgLy8gb2shCn0KYGBgCgAF////////////Af///////////wH///////////8B////////////AQCAAgAAAIAC8wikAwCHTyYBAADABgACBgDBBgEABADEAw4AAAO/BgAEAMQDDgAAAL8GAgUBAtkBAQEA8wgAAcAGAAQAxAMOAAACvwYAAQQArwMkAAADvgYABACvAyQAAAC+BgEBAPMIAAKjAwCwAxIAAAICBUUwNDI2AAEfBQAAAAXzCAQArwMkAAAAvgYBAQH3CAABvwYApgMAtk8mAQAAxQYAAAKmAwC2TyYBAAICvQJBIHR5cGUgb3IgbW9kdWxlIGhhcyBiZWVuIGRlZmluZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI4CnN0cnVjdCBCYXI7CnN0cnVjdCBCYXI7IC8vIGVycm9yOiBkdXBsaWNhdGUgZGVmaW5pdGlvbiBvZiB2YWx1ZSBgQmFyYApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZS9tb2R1bGUncyBuYW1lIG9yIHJlbW92ZS9yZW5hbWUgdGhlCmR1cGxpY2F0ZWQgb25lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7CnN0cnVjdCBCYXIyOyAvLyBvayEKYGBgCgAF////////////Af///////////wH///////////8B////////////Af//////////H70CAAAAvQLzCKYDALZPJgEAAMQGAAIGAMUGAQAEAMQDDgAAA8MGAAQAxAMOAAAAwwYCBQEC2QEBAQDzCAABxAYABADEAw4AAALDBgABBACvAyQAAAPCBgAEAK8DJAAAAMIGAQEA8wgAAqUDALADEgAAAgIFRTA0MjgAAR8FAAAABfMIBACvAyQAAADCBgEBAfcIAAHDBgCoAwDlTyYBAADJBgAAAqgDAOVPJgEAAgLNA1RoZSBgc2VsZmAga2V5d29yZCBjYW5ub3QgYXBwZWFyIGFsb25lIGFzIHRoZSBsYXN0IHNlZ21lbnQgaW4gYSBgdXNlYApkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjkKdXNlIHN0ZDo6Zm10OjpzZWxmOyAvLyBlcnJvcjogYHNlbGZgIGltcG9ydHMgYXJlIG9ubHkgYWxsb3dlZCB3aXRoaW4gYSB7IH0gbGlzdApgYGAKClRvIHVzZSBhIG5hbWVzcGFjZSBpdHNlbGYgaW4gYWRkaXRpb24gdG8gc29tZSBvZiBpdHMgbWVtYmVycywgYHNlbGZgIG1heSBhcHBlYXIKYXMgcGFydCBvZiBhIGJyYWNlLWVuY2xvc2VkIGxpc3Qgb2YgaW1wb3J0czoKCmBgYAp1c2Ugc3RkOjpmbXQ6OntzZWxmLCBEZWJ1Z307CmBgYAoKSWYgeW91IG9ubHkgd2FudCB0byBpbXBvcnQgdGhlIG5hbWVzcGFjZSwgZG8gc28gZGlyZWN0bHk6CgpgYGAKdXNlIHN0ZDo6Zm10OwpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z/NAwAAAM0D8wioAwDlTyYBAADIBgACBgDJBgEABADEAw4AAAPHBgAEAMQDDgAAAMcGAgUBAtkBAQEA8wgAAcgGAAQAxAMOAAACxwYAAQQArwMkAAADxgYABACvAyQAAADGBgEBAPMIAAKnAwCwAxIAAAICBUUwNDI5AAEfBQAAAAXzCAQArwMkAAAAxgYBAQH3CAABxwYAqgMAlFAmAQAAzQYAAAKqAwCUUCYBAAIClwNUaGUgYHNlbGZgIGltcG9ydCBhcHBlYXJzIG1vcmUgdGhhbiBvbmNlIGluIHRoZSBsaXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMAp1c2Ugc29tZXRoaW5nOjp7c2VsZiwgc2VsZn07IC8vIGVycm9yOiBgc2VsZmAgaW1wb3J0IGNhbiBvbmx5IGFwcGVhciBvbmNlIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoZSBsaXN0CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBpbXBvcnQgbmFtZSBvciByZW1vdmUgdGhlIGR1cGxpY2F0ZWQKYHNlbGZgIGltcG9ydC4gRXhhbXBsZToKCmBgYAojIG1vZCBzb21ldGhpbmcge30KIyBmbiBtYWluKCkgewp1c2Ugc29tZXRoaW5nOjp7c2VsZn07IC8vIG9rIQojIH0KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////A5cDAAAAlwPzCKoDAJRQJgEAAMwGAAIGAM0GAQAEAMQDDgAAA8sGAAQAxAMOAAAAywYCBQEC2QEBAQDzCAABzAYABADEAw4AAALLBgABBACvAyQAAAPKBgAEAK8DJAAAAMoGAQEA8wgAAqkDALADEgAAAgIFRTA0MzAAAR8FAAAABfMIBACvAyQAAADKBgEBAfcIAAHLBgCsAwDDUCYBAADRBgAAAqwDAMNQJgEAAgK6AkFuIGludmFsaWQgYHNlbGZgIGltcG9ydCB3YXMgbWFkZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzEKdXNlIHtzZWxmfTsgLy8gZXJyb3I6IGBzZWxmYCBpbXBvcnQgY2FuIG9ubHkgYXBwZWFyIGluIGFuIGltcG9ydCBsaXN0IHdpdGggYQogICAgICAgICAgICAvLyAgICAgICAgbm9uLWVtcHR5IHByZWZpeApgYGAKCllvdSBjYW5ub3QgaW1wb3J0IHRoZSBjdXJyZW50IG1vZHVsZSBpbnRvIGl0c2VsZiwgcGxlYXNlIHJlbW92ZSB0aGlzIGltcG9ydApvciB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBpdC4KAAX///////////8B////////////Af///////////wH///////////8B//////////8DugIAAAC6AvMIrAMAw1AmAQAA0AYAAgYA0QYBAAQAxAMOAAADzwYABADEAw4AAADPBgIFAQLZAQEBAPMIAAHQBgAEAMQDDgAAAs8GAAEEAK8DJAAAA84GAAQArwMkAAAAzgYBAQDzCAACqwMAsAMSAAACAgVFMDQzMQABHwUAAAAF8wgEAK8DJAAAAM4GAQEB9wgAAc8GAK4DAPJQJgEAANUGAAACrgMA8lAmAQACAtIKQW4gaW1wb3J0IHdhcyB1bnJlc29sdmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzMgp1c2Ugc29tZXRoaW5nOjpGb287IC8vIGVycm9yOiB1bnJlc29sdmVkIGltcG9ydCBgc29tZXRoaW5nOjpGb29gLgpgYGAKCkluIFJ1c3QgMjAxNSwgcGF0aHMgaW4gYHVzZWAgc3RhdGVtZW50cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGNyYXRlIHJvb3QuIFRvCmltcG9ydCBpdGVtcyByZWxhdGl2ZSB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMsIHVzZSB0aGUgYHNlbGY6OmAgYW5kCmBzdXBlcjo6YCBwcmVmaXhlcywgcmVzcGVjdGl2ZWx5LgoKSW4gUnVzdCAyMDE4IG9yIGxhdGVyLCBwYXRocyBpbiBgdXNlYCBzdGF0ZW1lbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3VycmVudAptb2R1bGUgdW5sZXNzIHRoZXkgYmVnaW4gd2l0aCB0aGUgbmFtZSBvZiBhIGNyYXRlIG9yIGEgbGl0ZXJhbCBgY3JhdGU6OmAsIGluCndoaWNoIGNhc2UgdGhleSBzdGFydCBmcm9tIHRoZSBjcmF0ZSByb290LiBBcyBpbiBSdXN0IDIwMTUgY29kZSwgdGhlIGBzZWxmOjpgCmFuZCBgc3VwZXI6OmAgcHJlZml4ZXMgcmVmZXIgdG8gdGhlIGN1cnJlbnQgYW5kIHBhcmVudCBtb2R1bGVzIHJlc3BlY3RpdmVseS4KCkFsc28gdmVyaWZ5IHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgYW5kIHRoYXQgdGhlIGltcG9ydCBleGlzdHMKaW4gdGhlIG1vZHVsZSBmcm9tIHdoZXJlIHlvdSB0cmllZCB0byBpbXBvcnQgaXQuIEV4YW1wbGU6CgpgYGAKdXNlIHNlbGY6OnNvbWV0aGluZzo6Rm9vOyAvLyBPay4KCm1vZCBzb21ldGhpbmcgewogICAgcHViIHN0cnVjdCBGb287Cn0KIyBmbiBtYWluKCkge30KYGBgCgpJZiB5b3UgdHJpZWQgdG8gdXNlIGEgbW9kdWxlIGZyb20gYW4gZXh0ZXJuYWwgY3JhdGUgYW5kIGFyZSB1c2luZyBSdXN0IDIwMTUsCnlvdSBtYXkgaGF2ZSBtaXNzZWQgdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uICh3aGljaCBpcyB1c3VhbGx5IHBsYWNlZCBpbgp0aGUgY3JhdGUgcm9vdCk6CgpgYGBlZGl0aW9uMjAxNQpleHRlcm4gY3JhdGUgY29yZTsgLy8gUmVxdWlyZWQgdG8gdXNlIHRoZSBgY29yZWAgY3JhdGUgaW4gUnVzdCAyMDE1LgoKdXNlIGNvcmU6OmFueTsKIyBmbiBtYWluKCkge30KYGBgCgpTaW5jZSBSdXN0IDIwMTggdGhlIGBleHRlcm4gY3JhdGVgIGRlY2xhcmF0aW9uIGlzIG5vdCByZXF1aXJlZCBhbmQKeW91IGNhbiBpbnN0ZWFkIGp1c3QgYHVzZWAgaXQ6CgpgYGBlZGl0aW9uMjAxOAp1c2UgY29yZTo6YW55OyAvLyBObyBleHRlcm4gY3JhdGUgcmVxdWlyZWQgaW4gUnVzdCAyMDE4LgojIGZuIG1haW4oKSB7fQpgYGAKABb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w/SCgAAANIK8wiuAwDyUCYBAADUBgACBgDVBgEABADEAw4AAAPTBgAEAMQDDgAAANMGAgUBAtkBAQEA8wgAAdQGAAQAxAMOAAAC0wYAAQQArwMkAAAD0gYABACvAyQAAADSBgEBAPMIAAKtAwCwAxIAAAICBUUwNDMyAAEfBQAAAAXzCAQArwMkAAAA0gYBAQH3CAAB0wYAsAMAoVEmAQAA2QYAAAKwAwChUSYBAAIC3wVBbiB1bmRlY2xhcmVkIGNyYXRlLCBtb2R1bGUsIG9yIHR5cGUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMzCmxldCBtYXAgPSBIYXNoTWFwOjpuZXcoKTsKLy8gZXJyb3I6IGZhaWxlZCB0byByZXNvbHZlOiB1c2Ugb2YgdW5kZWNsYXJlZCB0eXBlIGBIYXNoTWFwYApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgdHlwZS9tb2R1bGUncyBuYW1lIG9yIHRoYXQgeW91IGRpZG4ndApmb3JnZXQgdG8gaW1wb3J0IGl0OgoKYGBgCnVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOyAvLyBIYXNoTWFwIGhhcyBiZWVuIGltcG9ydGVkLgpsZXQgbWFwOiBIYXNoTWFwPHUzMiwgdTMyPiA9IEhhc2hNYXA6Om5ldygpOyAvLyBTbyBpdCBjYW4gYmUgdXNlZCEKYGBgCgpJZiB5b3UndmUgZXhwZWN0ZWQgdG8gdXNlIGEgY3JhdGUgbmFtZToKCmBgYGNvbXBpbGVfZmFpbAp1c2UgZmVycmlzX3doZWVsOjpCaWdPOwovLyBlcnJvcjogZmFpbGVkIHRvIHJlc29sdmU6IHVzZSBvZiB1bmRlY2xhcmVkIGNyYXRlIG9yIG1vZHVsZSBgZmVycmlzX3doZWVsYApgYGAKCk1ha2Ugc3VyZSB0aGUgY3JhdGUgaGFzIGJlZW4gYWRkZWQgYXMgYSBkZXBlbmRlbmN5IGluIGBDYXJnby50b21sYC4KClRvIHVzZSBhIG1vZHVsZSBmcm9tIHlvdXIgY3VycmVudCBjcmF0ZSwgYWRkIHRoZSBgY3JhdGU6OmAgcHJlZml4IHRvIHRoZSBwYXRoLgoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wffBQAAAN8F8wiwAwChUSYBAADYBgACBgDZBgEABADEAw4AAAPXBgAEAMQDDgAAANcGAgUBAtkBAQEA8wgAAdgGAAQAxAMOAAAC1wYAAQQArwMkAAAD1gYABACvAyQAAADWBgEBAPMIAAKvAwCwAxIAAAICBUUwNDMzAAEfBQAAAAXzCAQArwMkAAAA1gYBAQH3CAAB1wYAsgMA0FEmAQAA3QYAAAKyAwDQUSYBAAIC5QVBIHZhcmlhYmxlIHVzZWQgaW5zaWRlIGFuIGlubmVyIGZ1bmN0aW9uIGNvbWVzIGZyb20gYSBkeW5hbWljIGVudmlyb25tZW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNApmbiBmb28oKSB7CiAgICBsZXQgeSA9IDU7CiAgICBmbiBiYXIoKSAtPiB1MzIgewogICAgICAgIHkgLy8gZXJyb3I6IGNhbid0IGNhcHR1cmUgZHluYW1pYyBlbnZpcm9ubWVudCBpbiBhIGZuIGl0ZW07IHVzZSB0aGUKICAgICAgICAgIC8vICAgICAgICB8fCB7IC4uLiB9IGNsb3N1cmUgZm9ybSBpbnN0ZWFkLgogICAgfQp9CmBgYAoKSW5uZXIgZnVuY3Rpb25zIGRvIG5vdCBoYXZlIGFjY2VzcyB0byB0aGVpciBjb250YWluaW5nIGVudmlyb25tZW50LiBUbyBmaXggdGhpcwplcnJvciwgeW91IGNhbiByZXBsYWNlIHRoZSBmdW5jdGlvbiB3aXRoIGEgY2xvc3VyZToKCmBgYApmbiBmb28oKSB7CiAgICBsZXQgeSA9IDU7CiAgICBsZXQgYmFyID0gfHwgewogICAgICAgIHkKICAgIH07Cn0KYGBgCgpPciByZXBsYWNlIHRoZSBjYXB0dXJlZCB2YXJpYWJsZSB3aXRoIGEgY29uc3RhbnQgb3IgYSBzdGF0aWMgaXRlbToKCmBgYApmbiBmb28oKSB7CiAgICBzdGF0aWMgbXV0IFg6IHUzMiA9IDQ7CiAgICBjb25zdCBZOiB1MzIgPSA1OwogICAgZm4gYmFyKCkgLT4gdTMyIHsKICAgICAgICB1bnNhZmUgewogICAgICAgICAgICBYID0gMzsKICAgICAgICB9CiAgICAgICAgWQogICAgfQp9CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8D5QUAAADlBfMIsgMA0FEmAQAA3AYAAgYA3QYBAAQAxAMOAAAD2wYABADEAw4AAADbBgIFAQLZAQEBAPMIAAHcBgAEAMQDDgAAAtsGAAEEAK8DJAAAA9oGAAQArwMkAAAA2gYBAQDzCAACsQMAsAMSAAACAgVFMDQzNAABHwUAAAAF8wgEAK8DJAAAANoGAQEB9wgAAdsGALQDAP9RJgEAAOEGAAACtAMA/1EmAQACAvgEQSBub24tY29uc3RhbnQgdmFsdWUgd2FzIHVzZWQgaW4gYSBjb25zdGFudCBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQzNQpsZXQgZm9vID0gNDI7CmxldCBhOiBbdTg7IGZvb107IC8vIGVycm9yOiBhdHRlbXB0IHRvIHVzZSBhIG5vbi1jb25zdGFudCB2YWx1ZSBpbiBhIGNvbnN0YW50CmBgYAoKJ2NvbnN0YW50JyBtZWFucyAnYSBjb21waWxlLXRpbWUgdmFsdWUnLgoKTW9yZSBkZXRhaWxzIGNhbiBiZSBmb3VuZCBpbiB0aGUgW1ZhcmlhYmxlcyBhbmQgTXV0YWJpbGl0eV0gc2VjdGlvbiBvZiB0aGUgYm9vay4KCltWYXJpYWJsZXMgYW5kIE11dGFiaWxpdHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwMy0wMS12YXJpYWJsZXMtYW5kLW11dGFiaWxpdHkuaHRtbCNkaWZmZXJlbmNlcy1iZXR3ZWVuLXZhcmlhYmxlcy1hbmQtY29uc3RhbnRzCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHJlcGxhY2UgdGhlIHZhbHVlIHdpdGggYSBjb25zdGFudC4gRXhhbXBsZToKCmBgYApsZXQgYTogW3U4OyA0Ml07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCmNvbnN0IEZPTzogdXNpemUgPSA0MjsKbGV0IGE6IFt1ODsgRk9PXTsgLy8gb2shCmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+AQAAAD4BPMItAMA/1EmAQAA4AYAAgYA4QYBAAQAxAMOAAAD3wYABADEAw4AAADfBgIFAQLZAQEBAPMIAAHgBgAEAMQDDgAAAt8GAAEEAK8DJAAAA94GAAQArwMkAAAA3gYBAQDzCAACswMAsAMSAAACAgVFMDQzNQABHwUAAAAF8wgEAK8DJAAAAN4GAQEB9wgAAd8GALYDAK5SJgEAAOUGAAACtgMArlImAQACApsMVGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM2CmVudW0gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgV2Vla2x5LAogICAgU2VtaU1vbnRobHkgeyBkYXlzOiAodTgsIHU4KSwgYW5udWFsX3NwZWNpYWw6IGJvb2wgfSwKfQoKZm4gb25lX3VwX2NvbXBldGl0b3IoY29tcGV0aXRvcl9mcmVxdWVuY3k6IFB1YmxpY2F0aW9uRnJlcXVlbmN5KQogICAgICAgICAgICAgICAgICAgICAtPiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBtYXRjaCBjb21wZXRpdG9yX2ZyZXF1ZW5jeSB7CiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OldlZWtseSA9PiBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICBkYXlzOiAoMSwgMTUpLCBhbm51YWxfc3BlY2lhbDogZmFsc2UKICAgICAgICB9LAogICAgICAgIGMgQCBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGFubnVhbF9zcGVjaWFsOiB0cnVlLCAuLmMgLy8gZXJyb3I6IGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc3ludGF4IHJlcXVpcmVzIGEgc3RydWN0CiAgICAgICAgfQogICAgfQp9CmBgYAoKVGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggaXMgb25seSBhbGxvd2VkIGZvciBzdHJ1Y3RzIChzdHJ1Y3QtbGlrZQplbnVtIHZhcmlhbnRzIGRvbid0IHF1YWxpZnksIGZvciBleGFtcGxlKS4gVG8gZml4IHRoZSBwcmV2aW91cyBjb2RlLCByZXdyaXRlIHRoZQpleHByZXNzaW9uIHdpdGhvdXQgZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlIHN5bnRheDoKCmBgYAplbnVtIFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIFdlZWtseSwKICAgIFNlbWlNb250aGx5IHsgZGF5czogKHU4LCB1OCksIGFubnVhbF9zcGVjaWFsOiBib29sIH0sCn0KCmZuIG9uZV91cF9jb21wZXRpdG9yKGNvbXBldGl0b3JfZnJlcXVlbmN5OiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgLT4gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgbWF0Y2ggY29tcGV0aXRvcl9mcmVxdWVuY3kgewogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpXZWVrbHkgPT4gUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgZGF5czogKDEsIDE1KSwgYW5udWFsX3NwZWNpYWw6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IGRheXMsIC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGRheXMsIGFubnVhbF9zcGVjaWFsOiB0cnVlIC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKABn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwwAAACbDPMItgMArlImAQAA5AYAAgYA5QYBAAQAxAMOAAAD4wYABADEAw4AAADjBgIFAQLZ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Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfc2h1ZmZsZTxBLEI+KGE6IEEsIGI6IEEsIGM6IFt1MzI7IDhdKSAtPiBCOwogICAgLy8gZXJyb3I6IGludmFsaWQgYHNpbWRfc2h1ZmZsZWAsIG5lZWRzIGxlbmd0aDogYHNpbWRfc2h1ZmZsZWAKfQpgYGAKClRoZSBgc2ltZF9zaHVmZmxlYCBmdW5jdGlvbiBuZWVkcyB0aGUgbGVuZ3RoIG9mIHRoZSBhcnJheSBwYXNzZWQgYXMKbGFzdCBwYXJhbWV0ZXIgaW4gaXRzIG5hbWUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX3NodWZmbGU4PEEsQj4oYTogQSwgYjogQSwgYzogW3UzMjsgOF0pIC0+IEI7Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3/4BAAAAPgE8wi8AwC7UyYBAADwBgACBgDxBgEABADEAw4AAAPvBgAEAMQDDgAAAO8GAgUBAtkBAQEA8wgAAfAGAAQAxAMOAAAC7wYAAQQArwMkAAAD7gYABACvAyQAAADuBgEBAPMIAAK7AwCwAxIAAAICBUUwNDM5AAEfBQAAAAXzCAQArwMkAAAA7gYBAQH3CAAB7wYAvgMA6lMmAQAA9QYAAAK+AwDqUyYBAAIC+QVBIHByaXZhdGUgdHJhaXQgd2FzIHVzZWQgb24gYSBwdWJsaWMgdHlwZSBwYXJhbWV0ZXIgYm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ0NQojIVtkZW55KHByaXZhdGVfaW5fcHVibGljKV0KCnRyYWl0IEZvbyB7CiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gZXJyb3I6IHByaXZhdGUgdHJhaXQgaW4gcHVibGljIGludGVyZmFjZQpwdWIgc3RydWN0IEJhcjI8VDogRm9vPihwdWIgVCk7IC8vIHNhbWUgZXJyb3IKcHViIGZuIGZvbzxUOiBGb28+ICh0OiBUKSB7fSAvLyBzYW1lIGVycm9yCgpmbiBtYWluKCkge30KYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgdGhlIHRyYWl0IGlzIGFsc28gcHVibGljLiBUaGUgdHJhaXQKY2FuIGJlIG1hZGUgaW5hY2Nlc3NpYmxlIGlmIG5lY2Vzc2FyeSBieSBwbGFjaW5nIGl0IGludG8gYSBwcml2YXRlIGlubmVyCm1vZHVsZSwgYnV0IGl0IHN0aWxsIGhhcyB0byBiZSBtYXJrZWQgd2l0aCBgcHViYC4gRXhhbXBsZToKCmBgYApwdWIgdHJhaXQgRm9vIHsgLy8gd2Ugc2V0IHRoZSBGb28gdHJhaXQgcHVibGljCiAgICBmbiBkdW1teSgmc2VsZikgeyB9Cn0KCnB1YiB0cmFpdCBCYXIgOiBGb28ge30gLy8gb2shCnB1YiBzdHJ1Y3QgQmFyMjxUOiBGb28+KHB1YiBUKTsgLy8gb2shCnB1YiBmbiBmb288VDogRm9vPiAodDogVCkge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5BQAAAPkF8wi+AwDqUyYBAAD0BgACBgD1BgEABADEAw4AAAPzBgAEAMQDDgAAAPMGAgUBAtkBAQEA8wgAAfQGAAQAxAMOAAAC8wYAAQQArwMkAAAD8gYABACvAyQAAADyBgEBAPMIAAK9AwCwAxIAAAICBUUwNDQ1AAEfBQAAAAXzCAQArwMkAAAA8gYBAQH3CAAB8wYAwAMAmVQmAQAA+QYAAALAAwCZVCYBAAICjAdBIHByaXZhdGUgdHlwZSB3YXMgdXNlZCBpbiBhIHB1YmxpYyB0eXBlIHNpZ25hdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NDYKIyFbZGVueShwcml2YXRlX2luX3B1YmxpYyldCnN0cnVjdCBCYXIodTMyKTsKCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIgZm4gYmFyKCkgLT4gQmFyIHsgLy8gZXJyb3I6IHByaXZhdGUgdHlwZSBpbiBwdWJsaWMgaW50ZXJmYWNlCiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZXJlIGFyZSB0d28gd2F5cyB0byBzb2x2ZSB0aGlzIGVycm9yLiBUaGUgZmlyc3QgaXMgdG8gbWFrZSB0aGUgcHVibGljIHR5cGUKc2lnbmF0dXJlIG9ubHkgcHVibGljIHRvIGEgbW9kdWxlIHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoZSBwcml2YXRlIHR5cGUuClRoaXMgaXMgZG9uZSBieSB1c2luZyBwdWIoY3JhdGUpIG9yIHB1YihpbiBjcmF0ZTo6bXlfbW9kOjpldGMpCkV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcih1MzIpOwoKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YihjcmF0ZSkgZm4gYmFyKCkgLT4gQmFyIHsgLy8gb25seSBwdWJsaWMgdG8gY3JhdGUgcm9vdAogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgb3RoZXIgd2F5IHRvIHNvbHZlIHRoaXMgZXJyb3IgaXMgdG8gbWFrZSB0aGUgcHJpdmF0ZSB0eXBlIHB1YmxpYy4KRXhhbXBsZToKCmBgYApwdWIgc3RydWN0IEJhcih1MzIpOyAvLyB3ZSBzZXQgdGhlIEJhciB0eXBlIHB1YmxpYwptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViIGZuIGJhcigpIC0+IEJhciB7IC8vIG9rIQogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/H4wHAAAAjAfzCMADAJlUJgEAAPgGAAIGAPkGAQAEAMQDDgAAA/cGAAQAxAMOAAAA9wYCBQEC2QEBAQDzCAAB+AYABADEAw4AAAL3BgABBACvAyQAAAP2BgAEAK8DJAAAAPYGAQEA8wgAAr8DALADEgAAAgIFRTA0NDYAAR8FAAAABfMIBACvAyQAAAD2BgEBAfcIAAH3BgDCAwDIVCYBAAD9BgAAAsIDAMhUJgEAAgKPAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBgcHViYCBrZXl3b3JkIHdhcyB1c2VkIGluc2lkZSBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYApmbiBmb28oKSB7CiAgICBwdWIgc3RydWN0IEJhcjsgLy8gZXJyb3I6IHZpc2liaWxpdHkgaGFzIG5vIGVmZmVjdCBpbnNpZGUgZnVuY3Rpb25zCn0KYGBgCgpTaW5jZSB3ZSBjYW5ub3QgYWNjZXNzIGl0ZW1zIGRlZmluZWQgaW5zaWRlIGEgZnVuY3Rpb24sIHRoZSB2aXNpYmlsaXR5IG9mIGl0cwppdGVtcyBkb2VzIG5vdCBpbXBhY3Qgb3V0ZXIgY29kZS4gU28gdXNpbmcgdGhlIGBwdWJgIGtleXdvcmQgaW4gdGhpcyBjb250ZXh0CmlzIGludmFsaWQuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8BjwMAAACPA/MIwgMAyFQmAQAA/AYAAgYA/QYBAAQAxAMOAAAD+wYABADEAw4AAAD7BgIFAQLZAQEBAPMIAAH8BgAEAMQDDgAAAvsGAAEEAK8DJAAAA/oGAAQArwMkAAAA+gYBAQDzCAACwQMAsAMSAAACAgVFMDQ0NwABHwUAAAAF8wgEAK8DJAAAAPoGAQEB9wgAAfsGAMQDAPdUJgEAAIEHAAACxAMA91QmAQACAsQDIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGBwdWJgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIGEgcHVibGljIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnB1YiBlbnVtIEZvbyB7CiAgICBwdWIgQmFyLCAvLyBlcnJvcjogdW5uZWNlc3NhcnkgYHB1YmAgdmlzaWJpbGl0eQp9CmBgYAoKU2luY2UgdGhlIGVudW0gaXMgYWxyZWFkeSBwdWJsaWMsIGFkZGluZyBgcHViYCBvbiBvbmUgaXRzIGVsZW1lbnRzIGlzCnVubmVjZXNzYXJ5LiBFeGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmVudW0gRm9vIHsKICAgIHB1YiBCYXIsIC8vIG5vdCBvayEKfQpgYGAKClRoaXMgaXMgdGhlIGNvcnJlY3Qgc3ludGF4OgoKYGBgCnB1YiBlbnVtIEZvbyB7CiAgICBCYXIsIC8vIG9rIQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPxAMAAADEA/MIxAMA91QmAQAAgAcAAgYAgQcBAAQAxAMOAAAD/wYABADEAw4AAAD/BgIFAQLZAQEBAPMIAAGABwAEAMQDDgAAAv8GAAEEAK8DJAAAA/4GAAQArwMkAAAA/gYBAQDzCAACwwMAsAMSAAACAgVFMDQ0OAABHwUAAAAF8wgEAK8DJAAAAP4GAQEB9wgAAf8GAMYDAKZVJgEAAIUHAAACxgMAplUmAQACAuAFQSB2aXNpYmlsaXR5IHF1YWxpZmllciB3YXMgdXNlZCB3aGVuIGl0IHdhcyB1bm5lY2Vzc2FyeS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ5CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnB1YiBpbXBsIEJhciB7fSAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKCnB1YiBpbXBsIEZvbyBmb3IgQmFyIHsgLy8gZXJyb3I6IHVubmVjZXNzYXJ5IHZpc2liaWxpdHkgcXVhbGlmaWVyCiAgICBwdWIgZm4gZm9vKCkge30gLy8gZXJyb3I6IHVubmVjZXNzYXJ5IHZpc2liaWxpdHkgcXVhbGlmaWVyCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHJlbW92ZSB0aGUgdmlzaWJpbGl0eSBxdWFsaWZpZXIgd2hlbiBpdCBpcyBub3QKcmVxdWlyZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKLy8gRGlyZWN0bHkgaW1wbGVtZW50ZWQgbWV0aG9kcyBzaGFyZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdHlwZSBpdHNlbGYsCi8vIHNvIGBwdWJgIGlzIHVubmVjZXNzYXJ5IGhlcmUKaW1wbCBCYXIge30KCi8vIFRyYWl0IG1ldGhvZHMgc2hhcmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRyYWl0LCBzbyBgcHViYCBpcwovLyB1bm5lY2Vzc2FyeSBpbiBlaXRoZXIgY2FzZQppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygpIHt9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////D+AFAAAA4AXzCMYDAKZVJgEAAIQHAAIGAIUHAQAEAMQDDgAAA4MHAAQAxAMOAAAAgwcCBQEC2QEBAQDzCAABhAcABADEAw4AAAKDBwABBACvAyQAAAOCBwAEAK8DJAAAAIIHAQEA8wgAAsUDALADEgAAAgIFRTA0NDkAAR8FAAAABfMIBACvAyQAAACCBwEBAfcIAAGDBwDIAwDVVSYBAACJBwAAAsgDANVVJgEAAgL4BkEgc3RydWN0IGNvbnN0cnVjdG9yIHdpdGggcHJpdmF0ZSBmaWVsZHMgd2FzIGludm9rZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDUxCm1vZCBiYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBiOiBpc2l6ZSwKICAgIH0KfQoKbGV0IGYgPSBiYXI6OkZvb3sgYTogMCwgYjogMCB9OyAvLyBlcnJvcjogZmllbGQgYGJgIG9mIHN0cnVjdCBgYmFyOjpGb29gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGlzIHByaXZhdGUKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIGVuc3VyZSB0aGF0IGFsbCB0aGUgZmllbGRzIG9mIHRoZSBzdHJ1Y3QgYXJlIHB1YmxpYywKb3IgaW1wbGVtZW50IGEgZnVuY3Rpb24gZm9yIGVhc3kgaW5zdGFudGlhdGlvbi4gRXhhbXBsZXM6CgpgYGAKbW9kIGJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIHB1YiBiOiBpc2l6ZSwgLy8gd2Ugc2V0IGBiYCBmaWVsZCBwdWJsaWMKICAgIH0KfQoKbGV0IGYgPSBiYXI6OkZvb3sgYTogMCwgYjogMCB9OyAvLyBvayEKYGBgCgpPcjoKCmBgYAptb2QgYmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgYjogaXNpemUsIC8vIHN0aWxsIHByaXZhdGUKICAgIH0KCiAgICBpbXBsIEZvbyB7CiAgICAgICAgcHViIGZuIG5ldygpIC0+IEZvbyB7IC8vIHdlIGNyZWF0ZSBhIG1ldGhvZCB0byBpbnN0YW50aWF0ZSBgRm9vYAogICAgICAgICAgICBGb28geyBhOiAwLCBiOiAwIH0KICAgICAgICB9CiAgICB9Cn0KCmxldCBmID0gYmFyOjpGb286Om5ldygpOyAvLyBvayEKYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+AYAAAD4BvMIyAMA1VUmAQAAiAcAAgYAiQcBAAQAxAMOAAADhwcABADEAw4AAACHBwIFAQLZAQEBAPMIAAGIBwAEAMQDDgAAAocHAAEEAK8DJAAAA4YHAAQArwMkAAAAhgcBAQDzCAACxwMAsAMSAAACAgVFMDQ1MQABHwUAAAAF8wgEAK8DJAAAAIYHAQEB9wgAAYcHAMoDAIRWJgEAAI0HAAACygMAhFYmAQACAtgCQW4gaW52YWxpZCBsaW50IGF0dHJpYnV0ZSBoYXMgYmVlbiBnaXZlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTIKIyFbYWxsb3coZm9vID0gIiIpXSAvLyBlcnJvcjogbWFsZm9ybWVkIGxpbnQgYXR0cmlidXRlCmBgYAoKTGludCBhdHRyaWJ1dGVzIG9ubHkgYWNjZXB0IGEgbGlzdCBvZiBpZGVudGlmaWVycyAod2hlcmUgZWFjaCBpZGVudGlmaWVyIGlzIGEKbGludCBuYW1lKS4gRW5zdXJlIHRoZSBhdHRyaWJ1dGUgaXMgb2YgdGhpcyBmb3JtOgoKYGBgCiMhW2FsbG93KGZvbyldIC8vIG9rIQovLyBvcjoKIyFbYWxsb3coZm9vLCBmb28yKV0gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////B9gCAAAA2ALzCMoDAIRWJgEAAIwHAAIGAI0HAQAEAMQDDgAAA4sHAAQAxAMOAAAAiwcCBQEC2QEBAQDzCAABjAcABADEAw4AAAKLBwABBACvAyQAAAOKBwAEAK8DJAAAAIoHAQEA8wgAAskDALADEgAAAgIFRTA0NTIAAR8FAAAABfMIBACvAyQAAACKBwEBAfcIAAGLBwDMAwCzViYBAACRBwAAAswDALNWJgEAAgKnCEEgbGludCBjaGVjayBhdHRyaWJ1dGUgd2FzIG92ZXJydWxlZCBieSBhIGBmb3JiaWRgIGRpcmVjdGl2ZSBzZXQgYXMgYW4KYXR0cmlidXRlIG9uIGFuIGVuY2xvc2luZyBzY29wZSwgb3Igb24gdGhlIGNvbW1hbmQgbGluZSB3aXRoIHRoZSBgLUZgIG9wdGlvbi4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTMKIyFbZm9yYmlkKG5vbl9zbmFrZV9jYXNlKV0KCiNbYWxsb3cobm9uX3NuYWtlX2Nhc2UpXQpmbiBtYWluKCkgewogICAgbGV0IE15TnVtYmVyID0gMjsgLy8gZXJyb3I6IGFsbG93KG5vbl9zbmFrZV9jYXNlKSBvdmVycnVsZWQgYnkgb3V0ZXIKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmb3JiaWQobm9uX3NuYWtlX2Nhc2UpCn0KYGBgCgpUaGUgYGZvcmJpZGAgbGludCBzZXR0aW5nLCBsaWtlIGBkZW55YCwgdHVybnMgdGhlIGNvcnJlc3BvbmRpbmcgY29tcGlsZXIKd2FybmluZyBpbnRvIGEgaGFyZCBlcnJvci4gVW5saWtlIGBkZW55YCwgYGZvcmJpZGAgcHJldmVudHMgaXRzZWxmIGZyb20gYmVpbmcKb3ZlcnJpZGRlbiBieSBpbm5lciBhdHRyaWJ1dGVzLgoKSWYgeW91J3JlIHN1cmUgeW91IHdhbnQgdG8gb3ZlcnJpZGUgdGhlIGxpbnQgY2hlY2ssIHlvdSBjYW4gY2hhbmdlIGBmb3JiaWRgIHRvCmBkZW55YCAob3IgdXNlIGAtRGAgaW5zdGVhZCBvZiBgLUZgIGlmIHRoZSBgZm9yYmlkYCBzZXR0aW5nIHdhcyBnaXZlbiBhcyBhCmNvbW1hbmQtbGluZSBvcHRpb24pIHRvIGFsbG93IHRoZSBpbm5lciBsaW50IGNoZWNrIGF0dHJpYnV0ZToKCmBgYAojIVtkZW55KG5vbl9zbmFrZV9jYXNlKV0KCiNbYWxsb3cobm9uX3NuYWtlX2Nhc2UpXQpmbiBtYWluKCkgewogICAgbGV0IE15TnVtYmVyID0gMjsgLy8gb2shCn0KYGBgCgpPdGhlcndpc2UsIGVkaXQgdGhlIGNvZGUgdG8gcGFzcyB0aGUgbGludCBjaGVjaywgYW5kIHJlbW92ZSB0aGUgb3ZlcnJ1bGVkCmF0dHJpYnV0ZToKCmBgYAojIVtmb3JiaWQobm9uX3NuYWtlX2Nhc2UpXQoKZm4gbWFpbigpIHsKICAgIGxldCBteV9udW1iZXIgPSAyOwp9CmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////w+nCAAAAKcI8wjMAwCzViYBAACQBwACBgCRBwEABADEAw4AAAOPBwAEAMQDDgAAAI8HAgUBAtkBAQEA8wgAAZAHAAQAxAMOAAACjwcAAQQArwMkAAADjgcABACvAyQAAACOBwEBAPMIAALLAwCwAxIAAAICBUUwNDUzAAEfBQAAAAXzCAQArwMkAAAAjgcBAQH3CAABjwcAzgMA4lYmAQAAlQcAAALOAwDiViYBAAIC0QJBIGxpbmsgbmFtZSB3YXMgZ2l2ZW4gd2l0aCBhbiBlbXB0eSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1NAojW2xpbmsobmFtZSA9ICIiKV0gZXh0ZXJuICJDIiB7fQovLyBlcnJvcjogYCNbbGluayhuYW1lID0gIiIpXWAgZ2l2ZW4gd2l0aCBlbXB0eSBuYW1lCmBgYAoKVGhlIHJ1c3QgY29tcGlsZXIgY2Fubm90IGxpbmsgdG8gYW4gZXh0ZXJuYWwgbGlicmFyeSBpZiB5b3UgZG9uJ3QgZ2l2ZSBpdCBpdHMKbmFtZS4gRXhhbXBsZToKCmBgYG5vX3J1bgojW2xpbmsobmFtZSA9ICJzb21lX2xpYiIpXSBleHRlcm4gIkMiIHt9IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//B9ECAAAA0QLzCM4DAOJWJgEAAJQHAAIGAJUHAQAEAMQDDgAAA5MHAAQAxAMOAAAAkwcCBQEC2QEBAQDzCAABlAcABADEAw4AAAKTBwABBACvAyQAAAOSBwAEAK8DJAAAAJIHAQEA8wgAAs0DALADEgAAAgIFRTA0NTQAAR8FAAAABfMIBACvAyQAAACSBwEBAfcIAAGTBwDQAwCRVyYBAACZBwAAAtADAJFXJgEAAgLiBlNvbWUgbGlua2luZyBraW5kcyBhcmUgdGFyZ2V0LXNwZWNpZmljIGFuZCBub3Qgc3VwcG9ydGVkIG9uIGFsbCBwbGF0Zm9ybXMuCgpMaW5raW5nIHdpdGggYGtpbmQ9ZnJhbWV3b3JrYCBpcyBvbmx5IHN1cHBvcnRlZCB3aGVuIHRhcmdldGluZyBtYWNPUywKYXMgZnJhbWV3b3JrcyBhcmUgc3BlY2lmaWMgdG8gdGhhdCBvcGVyYXRpbmcgc3lzdGVtLgoKU2ltaWxhcmx5LCBga2luZD1yYXctZHlsaWJgIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGFyZ2V0aW5nIFdpbmRvd3MtbGlrZQpwbGF0Zm9ybXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChzaG91bGQtY29tcGlsZV9mYWlsLWJ1dC1jYW5ub3QtZG9jdGVzdC1jb25kaXRpb25hbGx5LXdpdGhvdXQtbWFjb3MpCiNbbGluayhuYW1lID0gIkZvb0NvcmVTZXJ2aWNlcyIsIGtpbmQgPSAiZnJhbWV3b3JrIildIGV4dGVybiAiQyIge30KLy8gT1MgdXNlZCB0byBjb21waWxlIGlzIExpbnV4IGZvciBleGFtcGxlCmBgYAoKVG8gc29sdmUgdGhpcyBlcnJvciB5b3UgY2FuIHVzZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjoKCmBgYAojW2NmZ19hdHRyKHRhcmdldD0ibWFjb3MiLCBsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKSldCmV4dGVybiAiQyIge30KYGBgCgpMZWFybiBtb3JlIGluIHRoZSBbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzLmh0bWwjY29uZGl0aW9uYWwtY29tcGlsYXRpb24KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////z/iBgAAAOIG8wjQAwCRVyYBAACYBwACBgCZBwEABADEAw4AAAOXBwAEAMQDDgAAAJcHAgUBAtkBAQEA8wgAAZgHAAQAxAMOAAAClwcAAQQArwMkAAADlgcABACvAyQAAACWBwEBAPMIAALPAwCwAxIAAAICBUUwNDU1AAEfBQAAAAXzCAQArwMkAAAAlgcBAQH3CAABlwcA0gMAwFcmAQAAnQcAAALSAwDAVyYBAAICswJBbiB1bmtub3duICJraW5kIiB3YXMgc3BlY2lmaWVkIGZvciBhIGxpbmsgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OAojW2xpbmsoa2luZCA9ICJ3b25kZXJmdWxfdW5pY29ybiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiB1bmtub3duIGtpbmQ6IGB3b25kZXJmdWxfdW5pY29ybmAKYGBgCgpQbGVhc2Ugc3BlY2lmeSBhIHZhbGlkICJraW5kIiB2YWx1ZSwgZnJvbSBvbmUgb2YgdGhlIGZvbGxvd2luZzoKCiogc3RhdGljCiogZHlsaWIKKiBmcmFtZXdvcmsKKiByYXctZHlsaWIKAAX///////////8B////////////Af///////////wH///////////8B/////////wOzAgAAALMC8wjSAwDAVyYBAACcBwACBgCdBwEABADEAw4AAAObBwAEAMQDDgAAAJsHAgUBAtkBAQEA8wgAAZwHAAQAxAMOAAACmwcAAQQArwMkAAADmgcABACvAyQAAACaBwEBAPMIAALRAwCwAxIAAAICBUUwNDU4AAEfBQAAAAXzCAQArwMkAAAAmgcBAQH3CAABmwcA1AMA71cmAQAAoQcAAALUAwDvVyYBAAIC7gJBIGxpbmsgd2FzIHVzZWQgd2l0aG91dCBhIG5hbWUgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1OQojW2xpbmsoa2luZCA9ICJkeWxpYiIpXSBleHRlcm4gIkMiIHt9Ci8vIGVycm9yOiBgI1tsaW5rKC4uLildYCBzcGVjaWZpZWQgd2l0aG91dCBgbmFtZSA9ICJmb28iYApgYGAKClBsZWFzZSBhZGQgdGhlIG5hbWUgcGFyYW1ldGVyIHRvIGFsbG93IHRoZSBydXN0IGNvbXBpbGVyIHRvIGZpbmQgdGhlIGxpYnJhcnkKeW91IHdhbnQuIEV4YW1wbGU6CgpgYGBub19ydW4KI1tsaW5rKGtpbmQgPSAiZHlsaWIiLCBuYW1lID0gInNvbWVfbGliIildIGV4dGVybiAiQyIge30gLy8gb2shCmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////D+4CAAAA7gLzCNQDAO9XJgEAAKAHAAIGAKEHAQAEAMQDDgAAA58HAAQAxAMOAAAAnwcCBQEC2QEBAQDzCAABoAcABADEAw4AAAKfBwABBACvAyQAAAOeBwAEAK8DJAAAAJ4HAQEA8wgAAtMDALADEgAAAgIFRTA0NTkAAR8FAAAABfMIBACvAyQAAACeBwEBAfcIAAGfBwDWAwCeWCYBAAClBwAAAtYDAJ5YJgEAAgL+CkEgcGx1Z2luL2NyYXRlIHdhcyBkZWNsYXJlZCBidXQgY2Fubm90IGJlIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2MwojIVtmZWF0dXJlKHBsdWdpbildCiMhW3BsdWdpbihjb29raWVfbW9uc3RlcildIC8vIGVycm9yOiBjYW4ndCBmaW5kIGNyYXRlIGZvciBgY29va2llX21vbnN0ZXJgCmV4dGVybiBjcmF0ZSBjYWtlX2lzX2FfbGllOyAvLyBlcnJvcjogY2FuJ3QgZmluZCBjcmF0ZSBmb3IgYGNha2VfaXNfYV9saWVgCmBgYAoKWW91IG5lZWQgdG8gbGluayB5b3VyIGNvZGUgdG8gdGhlIHJlbGV2YW50IGNyYXRlIGluIG9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGl0Cih0aHJvdWdoIENhcmdvIG9yIHRoZSBgLUxgIG9wdGlvbiBvZiBydXN0YyBleGFtcGxlKS4gUGx1Z2lucyBhcmUgY3JhdGVzIGFzCndlbGwsIGFuZCB5b3UgbGluayB0byB0aGVtIHRoZSBzYW1lIHdheS4KCiMjIENvbW1vbiBjYXVzZXMKCi0gVGhlIGNyYXRlIGlzIG5vdCBwcmVzZW50IGF0IGFsbC4gSWYgdXNpbmcgQ2FyZ28sIGFkZCBpdCB0byBgW2RlcGVuZGVuY2llc11gCiAgaW4gQ2FyZ28udG9tbC4KLSBUaGUgY3JhdGUgaXMgcHJlc2VudCwgYnV0IHVuZGVyIGEgZGlmZmVyZW50IG5hbWUuIElmIHVzaW5nIENhcmdvLCBsb29rIGZvcgogIGBwYWNrYWdlID0gYCB1bmRlciBgW2RlcGVuZGVuY2llc11gIGluIENhcmdvLnRvbWwuCgojIyBDb21tb24gY2F1c2VzIGZvciBtaXNzaW5nIGBzdGRgIG9yIGBjb3JlYAoKLSBZb3UgYXJlIGNyb3NzLWNvbXBpbGluZyBmb3IgYSB0YXJnZXQgd2hpY2ggZG9lc24ndCBoYXZlIGBzdGRgIHByZXBhY2thZ2VkLgogIENvbnNpZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nOgogICsgQWRkaW5nIGEgcHJlLWNvbXBpbGVkIHZlcnNpb24gb2Ygc3RkIHdpdGggYHJ1c3R1cCB0YXJnZXQgYWRkYAogICsgQnVpbGRpbmcgc3RkIGZyb20gc291cmNlIHdpdGggYGNhcmdvIGJ1aWxkIC1aIGJ1aWxkLXN0ZGAKICArIFVzaW5nIGAjIVtub19zdGRdYCBhdCB0aGUgY3JhdGUgcm9vdCwgc28geW91IHdvbid0IG5lZWQgYHN0ZGAgaW4gdGhlIGZpcnN0CiAgICBwbGFjZS4KLSBZb3UgYXJlIGRldmVsb3BpbmcgdGhlIGNvbXBpbGVyIGl0c2VsZiBhbmQgaGF2ZW4ndCBidWlsdCBsaWJzdGQgZnJvbSBzb3VyY2UuCiAgWW91IGNhbiB1c3VhbGx5IGJ1aWxkIGl0IHdpdGggYHgucHkgYnVpbGQgbGlicmFyeS9zdGRgLiBNb3JlIGluZm9ybWF0aW9uCiAgYWJvdXQgeC5weSBpcyBhdmFpbGFibGUgaW4gdGhlIFtydXN0Yy1kZXYtZ3VpZGVdLgoKW3J1c3RjLWRldi1ndWlkZV06IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvYnVpbGRpbmcvaG93LXRvLWJ1aWxkLWFuZC1ydW4uaHRtbCNidWlsZGluZy10aGUtY29tcGlsZXIKABb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z/+CgAAAP4K8wjWAwCeWCYBAACkBwACBgClBwEABADEAw4AAAOjBwAEAMQDDgAAAKMHAgUBAtkBAQEA8wgAAaQHAAQAxAMOAAACowcAAQQArwMkAAADogcABACvAyQAAACiBwEBAPMIAALVAwCwAxIAAAICBUUwNDYzAAEfBQAAAAXzCAQArwMkAAAAogcBAQH3CAABowcA2AMAzVgmAQAAqQcAAALYAwDNWCYBAAICvwJUaGUgY29tcGlsZXIgZm91bmQgbXVsdGlwbGUgbGlicmFyeSBmaWxlcyB3aXRoIHRoZSByZXF1ZXN0ZWQgY3JhdGUgbmFtZS4KClRoaXMgZXJyb3IgY2FuIG9jY3VyIGluIHNldmVyYWwgZGlmZmVyZW50IGNhc2VzIC0tIGZvciBleGFtcGxlLCB3aGVuIHVzaW5nCmBleHRlcm4gY3JhdGVgIG9yIHBhc3NpbmcgYC0tZXh0ZXJuYCBvcHRpb25zIHdpdGhvdXQgY3JhdGUgcGF0aHMuIEl0IGNhbiBhbHNvIGJlCmNhdXNlZCBieSBjYWNoaW5nIGlzc3VlcyB3aXRoIHRoZSBidWlsZCBkaXJlY3RvcnksIGluIHdoaWNoIGNhc2UgYGNhcmdvIGNsZWFuYAptYXkgaGVscC4KAAX///////////8B////////////Af///////////wH///////////8B//////////9/vwIAAAC/AvMI2AMAzVgmAQAAqAcAAgYAqQcBAAQAxAMOAAADpwcABADEAw4AAACnBwIFAQLZAQEBAPMIAAGoBwAEAMQDDgAAAqcHAAEEAK8DJAAAA6YHAAQArwMkAAAApgcBAQDzCAAC1wMAsAMSAAACAgVFMDQ2NAABHwUAAAAF8wgEAK8DJAAAAKYHAQEB9wgAAacHANoDAPxYJgEAAK0HAAAC2gMA/FgmAQACAt0GTWFjcm8gaW1wb3J0IGRlY2xhcmF0aW9uIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2NgojW21hY3JvX3VzZShhX21hY3JvKGFub3RoZXJfbWFjcm8pKV0gLy8gZXJyb3I6IGludmFsaWQgaW1wb3J0IGRlY2xhcmF0aW9uCmV4dGVybiBjcmF0ZSBjb3JlIGFzIHNvbWVfY3JhdGU7CgojW21hY3JvX3VzZShpX3dhbnQgPSAic29tZV9tYWNyb3MiKV0gLy8gZXJyb3I6IGludmFsaWQgaW1wb3J0IGRlY2xhcmF0aW9uCmV4dGVybiBjcmF0ZSBjb3JlIGFzIGFub3RoZXJfY3JhdGU7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIG1hY3JvIGltcG9ydHMgaXMgdGhlIGZvbGxvd2luZzoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQovLyBJbiBzb21lX2NyYXRlOgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGdldF90YWNvcyB7CiAgICAuLi4KfQoKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBnZXRfcGltaWVudG9zIHsKICAgIC4uLgp9CgovLyBJbiB5b3VyIGNyYXRlOgojW21hY3JvX3VzZShnZXRfdGFjb3MsIGdldF9waW1pZW50b3MpXSAvLyBJdCBpbXBvcnRzIGBnZXRfdGFjb3NgIGFuZApleHRlcm4gY3JhdGUgc29tZV9jcmF0ZTsgICAgICAgICAgICAgICAvLyBgZ2V0X3BpbWllbnRvc2AgbWFjcm9zIGZyb20gc29tZV9jcmF0ZQpgYGAKCklmIHlvdSB3b3VsZCBsaWtlIHRvIGltcG9ydCBhbGwgZXhwb3J0ZWQgbWFjcm9zLCB3cml0ZSBgbWFjcm9fdXNlYCB3aXRoIG5vCmFyZ3VtZW50cy4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBgAAAN0G8wjaAwD8WCYBAACsBwACBgCtBwEABADEAw4AAAOrBwAEAMQDDgAAAKsHAgUBAtkBAQEA8wgAAawHAAQAxAMOAAACqwcAAQQArwMkAAADqgcABACvAyQAAACqBwEBAPMIAALZAwCwAxIAAAICBUUwNDY2AAEfBQAAAAXzCAQArwMkAAAAqgcBAQH3CAABqwcA3AMAq1kmAQAAsQcAAALcAwCrWSYBAAIC8QRBIG5vbi1yb290IG1vZHVsZSB0cmllZCB0byBpbXBvcnQgbWFjcm9zIGZyb20gYW5vdGhlciBjcmF0ZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NjgKbW9kIGZvbyB7CiAgICAjW21hY3JvX3VzZShkZWJ1Z19hc3NlcnQpXSAgLy8gZXJyb3I6IG11c3QgYmUgYXQgY3JhdGUgcm9vdCB0byBpbXBvcnQKICAgIGV4dGVybiBjcmF0ZSBjb3JlOyAgICAgICAgICAvLyAgICAgICAgbWFjcm9zIGZyb20gYW5vdGhlciBjcmF0ZQogICAgZm4gcnVuX21hY3JvKCkgeyBkZWJ1Z19hc3NlcnQhKHRydWUpOyB9Cn0KYGBgCgpPbmx5IGBleHRlcm4gY3JhdGVgIGltcG9ydHMgYXQgdGhlIGNyYXRlIHJvb3QgbGV2ZWwgYXJlIGFsbG93ZWQgdG8gaW1wb3J0Cm1hY3Jvcy4KCkVpdGhlciBtb3ZlIHRoZSBtYWNybyBpbXBvcnQgdG8gY3JhdGUgcm9vdCBvciBkbyB3aXRob3V0IHRoZSBmb3JlaWduIG1hY3Jvcy4KVGhpcyB3aWxsIHdvcms6CgpgYGAKI1ttYWNyb191c2UoZGVidWdfYXNzZXJ0KV0gLy8gb2shCmV4dGVybiBjcmF0ZSBjb3JlOwoKbW9kIGZvbyB7CiAgICBmbiBydW5fbWFjcm8oKSB7IGRlYnVnX2Fzc2VydCEodHJ1ZSk7IH0KfQojIGZuIG1haW4oKSB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////9/8QQAAADxBPMI3AMAq1kmAQAAsAcAAgYAsQcBAAQAxAMOAAADrwcABADEAw4AAACvBwIFAQLZAQEBAPMIAAGwBwAEAMQDDgAAAq8HAAEEAK8DJAAAA64HAAQArwMkAAAArgcBAQDzCAAC2wMAsAMSAAACAgVFMDQ2OAABHwUAAAAF8wgEAK8DJAAAAK4HAQEB9wgAAa8HAN4DANpZJgEAALUHAAAC3gMA2lkmAQACAvMFQSBtYWNybyBsaXN0ZWQgZm9yIGltcG9ydCB3YXMgbm90IGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2OQojW21hY3JvX3VzZShkcmluaywgYmVfbWVycnkpXSAvLyBlcnJvcjogaW1wb3J0ZWQgbWFjcm8gbm90IGZvdW5kCmV4dGVybiBjcmF0ZSBhbGxvYzsKCmZuIG1haW4oKSB7CiAgICAvLyAuLi4KfQpgYGAKCkVpdGhlciB0aGUgbGlzdGVkIG1hY3JvIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGltcG9ydGVkIGNyYXRlLCBvciBpdCBpcyBub3QKZXhwb3J0ZWQgZnJvbSB0aGUgZ2l2ZW4gY3JhdGUuCgpUaGlzIGNvdWxkIGJlIGNhdXNlZCBieSBhIHR5cG8uIERpZCB5b3UgbWlzc3BlbGwgdGhlIG1hY3JvJ3MgbmFtZT8KCkRvdWJsZS1jaGVjayB0aGUgbmFtZXMgb2YgdGhlIG1hY3JvcyBsaXN0ZWQgZm9yIGltcG9ydCwgYW5kIHRoYXQgdGhlIGNyYXRlCmluIHF1ZXN0aW9uIGV4cG9ydHMgdGhlbS4KCkEgd29ya2luZyB2ZXJzaW9uIHdvdWxkIGJlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCi8vIEluIHNvbWVfY3JhdGUgY3JhdGU6CiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZWF0IHsKICAgIC4uLgp9CgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGRyaW5rIHsKICAgIC4uLgp9CgovLyBJbiB5b3VyIGNyYXRlOgojW21hY3JvX3VzZShlYXQsIGRyaW5rKV0KZXh0ZXJuIGNyYXRlIHNvbWVfY3JhdGU7IC8vb2shCmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wPzBQAAAPMF8wjeAwDaWSYBAAC0BwACBgC1BwEABADEAw4AAAOzBwAEAMQDDgAAALMHAgUBAtkBAQEA8wgAAbQHAAQAxAMOAAACswcAAQQArwMkAAADsgcABACvAyQAAACyBwEBAPMIAALdAwCwAxIAAAICBUUwNDY5AAEfBQAAAAXzCAQArwMkAAAAsgcBAQH3CAABswcA4AMAiVomAQAAuQcAAALgAwCJWiYBAAICoggjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgdHlwZSBkb2VzIG5vdCBmdWxmaWxsIHRoZSByZXF1aXJlZCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKdXNlIHN0ZDo6c3luYzo6TXV0ZXg7CgpzdHJ1Y3QgTXlTdHJpbmc8J2E+IHsKICAgIGRhdGE6ICYnYSBzdHIsCn0KCmZuIGlfd2FudF9zdGF0aWNfY2xvc3VyZTxGPihhOiBGKQogICAgd2hlcmUgRjogRm4oKSArICdzdGF0aWMge30KCmZuIHByaW50X3N0cmluZzwnYT4oczogTXV0ZXg8TXlTdHJpbmc8J2E+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIGVycm9yOiB0aGlzIGNsb3N1cmUgaGFzIGxpZmV0aW1lICdhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmF0aGVyIHRoYW4gJ3N0YXRpYwogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBjbG9zdXJlIGRvZXMgbm90IHNhdGlzZnkgdGhlIGAnc3RhdGljYCBsaWZldGltZSBjb25zdHJhaW50LgpUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoZSBsaWZldGltZSBvZiB0aGUgdHlwZS4gSGVyZSwgd2UKY2FuIGZpeCB0aGlzIHByb2JsZW0gYnkgZ2l2aW5nIGBzYCBhIHN0YXRpYyBsaWZldGltZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nKHM6IE11dGV4PE15U3RyaW5nPCdzdGF0aWM+PikgewoKICAgIGlfd2FudF9zdGF0aWNfY2xvc3VyZShtb3ZlIHx8IHsgICAgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIHMubG9jaygpLnVud3JhcCgpLmRhdGEpOwogICAgfSk7Cn0KYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8/oggAAACiCPMI4AMAiVomAQAAuAcAAgYAuQcBAAQAxAMOAAADtwcABADEAw4AAAC3BwIFAQLZAQEBAPMIAAG4BwAEAMQDDgAAArcHAAEEAK8DJAAAA7YHAAQArwMkAAAAtgcBAQDzCAAC3wMAsAMSAAACAgVFMDQ3NwABHwUAAAAF8wgEAK8DJAAAALYHAQEB9wgAAbcHAOIDALhaJgEAAL0HAAAC4gMAuFomAQACAs0GQSBsaWZldGltZSBib3VuZCB3YXMgbm90IHNhdGlzZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NzgKLy8gQ2hlY2sgdGhhdCB0aGUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgKGAnU25vd1doaXRlYCwgaW4gdGhpcyBleGFtcGxlKSBtdXN0Ci8vIG91dGxpdmUgYWxsIHRoZSBzdXBlcmJvdW5kcyBmcm9tIHRoZSB0cmFpdCAoYCdraXNzYCwgaW4gdGhpcyBleGFtcGxlKS4KCnRyYWl0IFdlZGRpbmc8J3Q+OiAndCB7IH0KCnN0cnVjdCBQcmluY2U8J2tpc3MsICdTbm93V2hpdGU+IHsKICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwKICAgIC8vIGVycm9yOiBsaWZldGltZSBib3VuZCBub3Qgc2F0aXNmaWVkCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHRoZSBgJ1Nub3dXaGl0ZWAgbGlmZXRpbWUgaXMgc3VwcG9zZWQgdG8gb3V0bGl2ZSB0aGUgYCdraXNzYApsaWZldGltZSBidXQgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBgUHJpbmNlYCBzdHJ1Y3QgZG9lc24ndCBlbmZvcmNlIGl0LiBUbyBmaXgKdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gc3BlY2lmeSBpdDoKCmBgYAp0cmFpdCBXZWRkaW5nPCd0PjogJ3QgeyB9CgpzdHJ1Y3QgUHJpbmNlPCdraXNzLCAnU25vd1doaXRlOiAna2lzcz4geyAvLyBZb3Ugc2F5IGhlcmUgdGhhdCAnU25vd1doaXRlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG11c3QgbGl2ZSBsb25nZXIgdGhhbiAna2lzcy4KICAgIGNoaWxkOiBCb3g8V2VkZGluZzwna2lzcz4gKyAnU25vd1doaXRlPiwgLy8gQW5kIG5vdyBpdCdzIGFsbCBnb29kIQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/P80GAAAAzQbzCOIDALhaJgEAALwHAAIGAL0HAQAEAMQDDgAAA7sHAAQAxAMOAAAAuwcCBQEC2QEBAQDzCAABvAcABADEAw4AAAK7BwABBACvAyQAAAO6BwAEAK8DJAAAALoHAQEA8wgAAuEDALADEgAAAgIFRTA0NzgAAR8FAAAABfMIBACvAyQAAAC6BwEBAfcIAAG7BwDkAwDnWiYBAADBBwAAAuQDAOdaJgEAAgLpDyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgbGlmZXRpbWUgb2YgYSByZXR1cm5lZCB2YWx1ZSBkb2VzIG5vdCBvdXRsaXZlIHRoZSBmdW5jdGlvbiBjYWxsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMApmbiBwcmVmaXg8J2E+KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnYSBzdHI+CikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiB7IC8vIGVycm9yIQogICAgd29yZHMubWFwKHx2fCBmb3JtYXQhKCJmb28te30iLCB2KSkKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBtYWtlIHRoZSBsaWZldGltZSBvZiB0aGUgcmV0dXJuZWQgdmFsdWUgZXhwbGljaXQ6CgpgYGAKZm4gcHJlZml4PCdhPigKICAgIHdvcmRzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAmJ2Egc3RyPiArICdhCikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiArICdhIHsgLy8gb2shCiAgICB3b3Jkcy5tYXAofHZ8IGZvcm1hdCEoImZvby17fSIsIHYpKQp9CmBgYAoKVGhlIFtgaW1wbCBUcmFpdGBdIGZlYXR1cmUgaW4gdGhpcyBleGFtcGxlIHVzZXMgYW4gaW1wbGljaXQgYCdzdGF0aWNgIGxpZmV0aW1lCnJlc3RyaWN0aW9uIGluIHRoZSByZXR1cm5lZCB0eXBlLiBIb3dldmVyIHRoZSB0eXBlIGltcGxlbWVudGluZyB0aGUgYEl0ZXJhdG9yYApwYXNzZWQgdG8gdGhlIGZ1bmN0aW9uIGxpdmVzIGp1c3QgYXMgbG9uZyBhcyBgJ2FgLCB3aGljaCBpcyBub3QgbG9uZyBlbm91Z2guCgpUaGUgc29sdXRpb24gaW52b2x2ZXMgYWRkaW5nIGxpZmV0aW1lIGJvdW5kIHRvIGJvdGggZnVuY3Rpb24gYXJndW1lbnQgYW5kCnRoZSByZXR1cm4gdmFsdWUgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHZhbHVlcyBpbnNpZGUgdGhlIGl0ZXJhdG9yCmFyZSBub3QgZHJvcHBlZCB3aGVuIHRoZSBmdW5jdGlvbiBnb2VzIG91dCBvZiB0aGUgc2NvcGUuCgpBbiBhbHRlcm5hdGl2ZSBzb2x1dGlvbiB3b3VsZCBiZSB0byBndWFyYW50ZWUgdGhhdCB0aGUgYEl0ZW1gIHJlZmVyZW5jZXMKaW4gdGhlIGl0ZXJhdG9yIGFyZSBhbGl2ZSBmb3IgdGhlIHdob2xlIGxpZmV0aW1lIG9mIHRoZSBwcm9ncmFtLgoKYGBgCmZuIHByZWZpeCgKICAgIHdvcmRzOiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSAmJ3N0YXRpYyBzdHI+CikgLT4gaW1wbCBJdGVyYXRvcjxJdGVtID0gU3RyaW5nPiB7ICAvLyBvayEKICAgIHdvcmRzLm1hcCh8dnwgZm9ybWF0ISgiZm9vLXt9IiwgdikpCn0KYGBgCgpBIHNpbWlsYXIgbGlmZXRpbWUgcHJvYmxlbSBtaWdodCBhcmlzZSB3aGVuIHJldHVybmluZyBjbG9zdXJlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMApmbiBmb28oCiAgICB4OiAmbXV0IFZlYzxpMzI+CikgLT4gaW1wbCBGbk11dCgmbXV0IFZlYzxpMzI+KSAtPiAmW2kzMl0geyAvLyBlcnJvciEKICAgIHx5fCB7CiAgICAgICAgeS5hcHBlbmQoeCk7CiAgICAgICAgeQogICAgfQp9CmBgYAoKQW5hbG9naWNhbGx5LCBhIHNvbHV0aW9uIGhlcmUgaXMgdG8gdXNlIGV4cGxpY2l0IHJldHVybiBsaWZldGltZQphbmQgbW92ZSB0aGUgb3duZXJzaGlwIG9mIHRoZSB2YXJpYWJsZSB0byB0aGUgY2xvc3VyZS4KCmBgYApmbiBmb288J2E+KAogICAgeDogJidhIG11dCBWZWM8aTMyPgopIC0+IGltcGwgRm5NdXQoJm11dCBWZWM8aTMyPikgLT4gJltpMzJdICsgJ2EgeyAvLyBvayEKICAgIG1vdmUgfHl8IHsKICAgICAgICB5LmFwcGVuZCh4KTsKICAgICAgICB5CiAgICB9Cn0KYGBgCgpUbyBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgbGlmZXRpbWUgdHJlYXRtZW50IGluIHRoZSBbYGltcGwgVHJhaXRgXSwKcGxlYXNlIHNlZSB0aGUgW1JGQyAxOTUxXS4KCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS90eXBlcy9pbXBsLXRyYWl0Lmh0bWwKW1JGQyAxOTUxXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMTk1MS1leHBhbmQtaW1wbC10cmFpdC5odG1sCgAg////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////P+kPAAAA6Q/zCOQDAOdaJgEAAMAHAAIGAMEHAQAEAMQDDgAAA78HAAQAxAMOAAAAvwcCBQEC2QEBAQDzCAABwAcABADEAw4AAAK/BwABBACvAyQAAAO+BwAEAK8DJAAAAL4HAQEA8wgAAuMDALADEgAAAgIFRTA0ODIAAR8FAAAABfMIBACvAyQAAAC+BwEBAfcIAAG/BwDmAwCWWyYBAADFBwAAAuYDAJZbJgEAAgKdBkEgcmVmZXJlbmNlIGhhcyBhIGxvbmdlciBsaWZldGltZSB0aGFuIHRoZSBkYXRhIGl0IHJlZmVyZW5jZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkxCnN0cnVjdCBGb288J2E+IHsKICAgIHg6IGZuKCYnYSBpMzIpLAp9Cgp0cmFpdCBUcmFpdDwnYSwgJ2I+IHsKICAgIHR5cGUgT3V0Owp9CgppbXBsPCdhLCAnYj4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgewogICAgdHlwZSBPdXQgPSAmJ2EgRm9vPCdiPjsgLy8gZXJyb3IhCn0KYGBgCgpIZXJlLCB0aGUgcHJvYmxlbSBpcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgYmUgc3VyZSB0aGF0IHRoZSBgJ2JgIGxpZmV0aW1lCndpbGwgbGl2ZSBsb25nZXIgdGhhbiBgJ2FgLCB3aGljaCBzaG91bGQgYmUgbWFuZGF0b3J5IGluIG9yZGVyIHRvIGJlIHN1cmUgdGhhdApgVHJhaXQ6Ok91dGAgd2lsbCBhbHdheXMgaGF2ZSBhIHJlZmVyZW5jZSBwb2ludGluZyB0byBhbiBleGlzdGluZyB0eXBlLiBTbyBpbgp0aGlzIGNhc2UsIHdlIGp1c3QgbmVlZCB0byB0ZWxsIHRoZSBjb21waWxlciB0aGFuIGAnYmAgbXVzdCBvdXRsaXZlIGAnYWA6CgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogZm4oJidhIGkzMiksCn0KCnRyYWl0IFRyYWl0PCdhLCAnYj4gewogICAgdHlwZSBPdXQ7Cn0KCmltcGw8J2EsICdiOiAnYT4gVHJhaXQ8J2EsICdiPiBmb3IgdXNpemUgeyAvLyB3ZSBhZGRlZCB0aGUgbGlmZXRpbWUgZW5mb3JjZW1lbnQKICAgIHR5cGUgT3V0ID0gJidhIEZvbzwnYj47IC8vIGl0IG5vdyB3b3JrcyEKfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////AZ0GAAAAnQbzCOYDAJZbJgEAAMQHAAIGAMUHAQAEAMQDDgAAA8MHAAQAxAMOAAAAwwcCBQEC2QEBAQDzCAABxAcABADEAw4AAALDBwABBACvAyQAAAPCBwAEAK8DJAAAAMIHAQEA8wgAAuUDALADEgAAAgIFRTA0OTEAAR8FAAAABfMIBACvAyQAAADCBwEBAfcIAAHDBwDoAwDFWyYBAADJBwAAAugDAMVbJgEAAgL4D0EgYm9ycm93IG9mIGEgY29uc3RhbnQgY29udGFpbmluZyBpbnRlcmlvciBtdXRhYmlsaXR5IHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDkyCnVzZSBzdGQ6OnN5bmM6OmF0b21pYzo6QXRvbWljVXNpemU7Cgpjb25zdCBBOiBBdG9taWNVc2l6ZSA9IEF0b21pY1VzaXplOjpuZXcoMCk7CmNvbnN0IEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7Ci8vIGVycm9yOiBjYW5ub3QgYm9ycm93IGEgY29uc3RhbnQgd2hpY2ggbWF5IGNvbnRhaW4gaW50ZXJpb3IgbXV0YWJpbGl0eSwKLy8gICAgICAgIGNyZWF0ZSBhIHN0YXRpYyBpbnN0ZWFkCmBgYAoKQSBgY29uc3RgIHJlcHJlc2VudHMgYSBjb25zdGFudCB2YWx1ZSB0aGF0IHNob3VsZCBuZXZlciBjaGFuZ2UuIElmIG9uZSB0YWtlcwphIGAmYCByZWZlcmVuY2UgdG8gdGhlIGNvbnN0YW50LCB0aGVuIG9uZSBpcyB0YWtpbmcgYSBwb2ludGVyIHRvIHNvbWUgbWVtb3J5CmxvY2F0aW9uIGNvbnRhaW5pbmcgdGhlIHZhbHVlLiBOb3JtYWxseSB0aGlzIGlzIHBlcmZlY3RseSBmaW5lOiBtb3N0IHZhbHVlcwpjYW4ndCBiZSBjaGFuZ2VkIHZpYSBhIHNoYXJlZCBgJmAgcG9pbnRlciwgYnV0IGludGVyaW9yIG11dGFiaWxpdHkgd291bGQgYWxsb3cKaXQuIFRoYXQgaXMsIGEgY29uc3RhbnQgdmFsdWUgY291bGQgYmUgbXV0YXRlZC4gT24gdGhlIG90aGVyIGhhbmQsIGEgYHN0YXRpY2AgaXMKZXhwbGljaXRseSBhIHNpbmdsZSBtZW1vcnkgbG9jYXRpb24sIHdoaWNoIGNhbiBiZSBtdXRhdGVkIGF0IHdpbGwuCgpTbywgaW4gb3JkZXIgdG8gc29sdmUgdGhpcyBlcnJvciwgdXNlIHN0YXRpY3Mgd2hpY2ggYXJlIGBTeW5jYDoKCmBgYAp1c2Ugc3RkOjpzeW5jOjphdG9taWM6OkF0b21pY1VzaXplOwoKc3RhdGljIEE6IEF0b21pY1VzaXplID0gQXRvbWljVXNpemU6Om5ldygwKTsKc3RhdGljIEI6ICYnc3RhdGljIEF0b21pY1VzaXplID0gJkE7IC8vIG9rIQpgYGAKCllvdSBjYW4gYWxzbyBoYXZlIHRoaXMgZXJyb3Igd2hpbGUgdXNpbmcgYSBjZWxsIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTIKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCmNvbnN0IEE6IENlbGw8dXNpemU+ID0gQ2VsbDo6bmV3KDEpOwpjb25zdCBCOiAmQ2VsbDx1c2l6ZT4gPSAmQTsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYSBjb25zdGFudCB3aGljaCBtYXkgY29udGFpbiBpbnRlcmlvciBtdXRhYmlsaXR5LAovLyAgICAgICAgY3JlYXRlIGEgc3RhdGljIGluc3RlYWQKCi8vIG9yOgpzdHJ1Y3QgQyB7IGE6IENlbGw8dXNpemU+IH0KCmNvbnN0IEQ6IEMgPSBDIHsgYTogQ2VsbDo6bmV3KDEpIH07CmNvbnN0IEU6ICZDZWxsPHVzaXplPiA9ICZELmE7IC8vIGVycm9yCgovLyBvcjoKY29uc3QgRjogJkMgPSAmRDsgLy8gZXJyb3IKYGBgCgpUaGlzIGlzIGJlY2F1c2UgY2VsbCB0eXBlcyBkbyBvcGVyYXRpb25zIHRoYXQgYXJlIG5vdCB0aHJlYWQtc2FmZS4gRHVlIHRvIHRoaXMsCnRoZXkgZG9uJ3QgaW1wbGVtZW50IFN5bmMgYW5kIHRodXMgY2FuJ3QgYmUgcGxhY2VkIGluIHN0YXRpY3MuCgpIb3dldmVyLCBpZiB5b3Ugc3RpbGwgd2lzaCB0byB1c2UgdGhlc2UgdHlwZXMsIHlvdSBjYW4gYWNoaWV2ZSB0aGlzIGJ5IGFuIHVuc2FmZQp3cmFwcGVyOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CnVzZSBzdGQ6Om1hcmtlcjo6U3luYzsKCnN0cnVjdCBOb3RUaHJlYWRTYWZlPFQ+IHsKICAgIHZhbHVlOiBDZWxsPFQ+LAp9Cgp1bnNhZmUgaW1wbDxUPiBTeW5jIGZvciBOb3RUaHJlYWRTYWZlPFQ+IHt9CgpzdGF0aWMgQTogTm90VGhyZWFkU2FmZTx1c2l6ZT4gPSBOb3RUaHJlYWRTYWZlIHsgdmFsdWUgOiBDZWxsOjpuZXcoMSkgfTsKc3RhdGljIEI6ICYnc3RhdGljIE5vdFRocmVhZFNhZmU8dXNpemU+ID0gJkE7IC8vIG9rIQpgYGAKClJlbWVtYmVyIHRoaXMgc29sdXRpb24gaXMgdW5zYWZlISBZb3Ugd2lsbCBoYXZlIHRvIGVuc3VyZSB0aGF0IGFjY2Vzc2VzIHRvIHRoZQpjZWxsIGFyZSBzeW5jaHJvbml6ZWQuCgAg////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+A8AAAD4D/MI6AMAxVsmAQAAyAcAAgYAyQcBAAQAxAMOAAADxwcABADEAw4AAADHBwIFAQLZAQEBAPMIAAHIBwAEAMQDDgAAAscHAAEEAK8DJAAAA8YHAAQArwMkAAAAxgcBAQDzCAAC5wMAsAMSAAACAgVFMDQ5MgABHwUAAAAF8wgEAK8DJAAAAMYHAQEB9wgAAccHAOoDAPRbJgEAAM0HAAAC6gMA9FsmAQACAoEHQSB2YWx1ZSB3aXRoIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBtYXkgYmUgZHJvcHBlZCBkdXJpbmcgY29uc3QtZXZhbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTMKZW51bSBEcm9wVHlwZSB7CiAgICBBLAp9CgppbXBsIERyb3AgZm9yIERyb3BUeXBlIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpzdHJ1Y3QgRm9vIHsKICAgIGZpZWxkMTogRHJvcFR5cGUsCn0KCnN0YXRpYyBGT086IEZvbyA9IEZvbyB7IGZpZWxkMTogKERyb3BUeXBlOjpBLCBEcm9wVHlwZTo6QSkuMSB9OyAvLyBlcnJvciEKYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgaWYgdGhlIGdpdmVuIHR5cGUgb3Igb25lIG9mIGl0cyBmaWVsZHMgaW1wbGVtZW50cyB0aGUKYERyb3BgIHRyYWl0LCB0aGlzIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGhpbiBhIGNvbnN0CmNvbnRleHQgc2luY2UgaXQgbWF5IHJ1biBhcmJpdHJhcnksIG5vbi1jb25zdC1jaGVja2VkIGNvZGUuIFRvIHByZXZlbnQgdGhpcwppc3N1ZSwgZW5zdXJlIGFsbCB2YWx1ZXMgd2l0aCBhIGN1c3RvbSBgRHJvcGAgaW1wbGVtZW50YXRpb24gZXNjYXBlIHRoZQppbml0aWFsaXplci4KCmBgYAplbnVtIERyb3BUeXBlIHsKICAgIEEsCn0KCmltcGwgRHJvcCBmb3IgRHJvcFR5cGUgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBEcm9wVHlwZSwKfQoKc3RhdGljIEZPTzogRm9vID0gRm9vIHsgZmllbGQxOiBEcm9wVHlwZTo6QSB9OyAvLyBXZSBpbml0aWFsaXplIGFsbCBmaWVsZHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBieSBoYW5kLgpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQGBBwAAAIEH8wjqAwD0WyYBAADMBwACBgDNBwEABADEAw4AAAPLBwAEAMQDDgAAAMsHAgUBAtkBAQEA8wgAAcwHAAQAxAMOAAACywcAAQQArwMkAAADygcABACvAyQAAADKBwEBAPMIAALpAwCwAxIAAAICBUUwNDkzAAEfBQAAAAXzCAQArwMkAAAAygcBAQH3CAABywcA7AMAo1wmAQAA0QcAAALsAwCjXCYBAAICkgcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIGxpZmV0aW1lIGNhbm5vdCBiZSBkZXRlcm1pbmVkIGluIHRoZSBnaXZlbiBzaXR1YXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmZuIHRyYW5zbXV0ZV9saWZldGltZTwnYSwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIGVycm9yIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQoKbGV0IHkgPSBCb3g6Om5ldygoNDIsKSk7CmxldCB4ID0gdHJhbnNtdXRlX2xpZmV0aW1lKCZ5KTsKYGBgCgpJbiB0aGlzIGNvZGUsIHlvdSBoYXZlIHR3byB3YXlzIHRvIHNvbHZlIHRoaXMgaXNzdWU6CiAxLiBFbmZvcmNlIHRoYXQgYCdhYCBsaXZlcyBhdCBsZWFzdCBhcyBsb25nIGFzIGAnYmAuCiAyLiBVc2UgdGhlIHNhbWUgbGlmZXRpbWUgcmVxdWlyZW1lbnQgZm9yIGJvdGggaW5wdXQgYW5kIG91dHB1dCB2YWx1ZXMuCgpTbyBmb3IgdGhlIGZpcnN0IHNvbHV0aW9uLCB5b3UgY2FuIGRvIGl0IGJ5IHJlcGxhY2luZyBgJ2FgIHdpdGggYCdhOiAnYmA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhOiAnYiwgJ2IsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2IgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIG9rIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQpgYGAKCkluIHRoZSBzZWNvbmQgeW91IGNhbiBkbyBpdCBieSBzaW1wbHkgcmVtb3ZpbmcgYCdiYCBzbyB0aGV5IGJvdGggdXNlIGAnYWA6CgpgYGAKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhLCBUPih0OiAmJ2EgKFQsKSkgLT4gJidhIFQgewogICAgbWF0Y2ggKCZ0LCkgeyAvLyBvayEKICAgICAgICAoKHUsKSwpID0+IHUsCiAgICB9Cn0KYGBgCgAP////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SBwAAAJIH8wjsAwCjXCYBAADQBwACBgDRBwEABADEAw4AAAPPBwAEAMQDDgAAAM8HAgUBAtkBAQEA8wgAAdAHAAQAxAMOAAACzwcAAQQArwMkAAADzgcABACvAyQAAADOBwEBAPMIAALrAwCwAxIAAAICBUUwNDk1AAEfBQAAAAXzCAQArwMkAAAAzgcBAQH3CAABzwcA7gMA0lwmAQAA1QcAAALuAwDSXCYBAAIC/QNBIGxpZmV0aW1lIG5hbWUgaXMgc2hhZG93aW5nIGFub3RoZXIgbGlmZXRpbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTYKc3RydWN0IEZvbzwnYT4gewogICAgYTogJidhIGkzMiwKfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmPCdhPih4OiAmJ2EgaTMyKSB7IC8vIGVycm9yOiBsaWZldGltZSBuYW1lIGAnYWAgc2hhZG93cyBhIGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBuYW1lIHRoYXQgaXMgYWxyZWFkeSBpbiBzY29wZQogICAgfQp9CmBgYAoKUGxlYXNlIGNoYW5nZSB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGxpZmV0aW1lcyB0byByZW1vdmUgdGhpcyBlcnJvci4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICBhOiAmJ2EgaTMyLAp9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGY8J2I+KHg6ICYnYiBpMzIpIHsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0DAAAA/QPzCO4DANJcJgEAANQHAAIGANUHAQAEAMQDDgAAA9MHAAQAxAMOAAAA0wcCBQEC2QEBAQDzCAAB1AcABADEAw4AAALTBwABBACvAyQAAAPSBwAEAK8DJAAAANIHAQEA8wgAAu0DALADEgAAAgIFRTA0OTYAAR8FAAAABfMIBACvAyQAAADSBwEBAfcIAAHTBwDwAwCBXSYBAADZBwAAAvADAIFdJgEAAgLCAyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgc3RhYmlsaXR5IGF0dHJpYnV0ZSB3YXMgdXNlZCBvdXRzaWRlIG9mIHRoZSBzdGFuZGFyZCBsaWJyYXJ5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojW3N0YWJsZV0gLy8gZXJyb3I6IHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG1heSBub3QgYmUgdXNlZCBvdXRzaWRlIG9mIHRoZQogICAgICAgICAgLy8gICAgICAgIHN0YW5kYXJkIGxpYnJhcnkKZm4gZm9vKCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gdXNlIHN0YWJpbGl0eSBhdHRyaWJ1dGVzIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCkFsc28sIGZvciBub3csIGl0IGlzIG5vdCBwb3NzaWJsZSB0byB3cml0ZSBkZXByZWNhdGlvbiBtZXNzYWdlcyBlaXRoZXIuCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQPCAwAAAMID8wjwAwCBXSYBAADYBwACBgDZBwEABADEAw4AAAPXBwAEAMQDDgAAANcHAgUBAtkBAQEA8wgAAdgHAAQAxAMOAAAC1wcAAQQArwMkAAAD1gcABACvAyQAAADWBwEBAPMIAALvAwCwAxIAAAICBUUwNDk3AAEfBQAAAAXzCAQArwMkAAAA1gcBAQH3CAAB1wcA8gMAsF0mAQAA3QcAAALyAwCwXSYBAAIC0ARUaGUgYHBsdWdpbmAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk4CiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyhhcmdzKSldIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CiMhW3BsdWdpbihiYXI9InRlc3QiKV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKYGBgCgpUaGUgYCNbcGx1Z2luXWAgYXR0cmlidXRlIHNob3VsZCB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLgoKRm9yIGV4YW1wbGUsIGZvciB0aGUgcGx1Z2luIGBmb29gOgoKYGBgaWdub3JlIChyZXF1aXJlcyBleHRlcm5hbCBwbHVnaW4gY3JhdGUpCiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyldIC8vIG9rIQpgYGAKClNlZSB0aGUgW2BwbHVnaW5gIGZlYXR1cmVdIHNlY3Rpb24gb2YgdGhlIFVuc3RhYmxlIGJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltgcGx1Z2luYCBmZWF0dXJlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvcGx1Z2luLmh0bWwKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wPQBAAAANAE8wjyAwCwXSYBAADcBwACBgDdBwEABADEAw4AAAPbBwAEAMQDDgAAANsHAgUBAtkBAQEA8wgAAdwHAAQAxAMOAAAC2wcAAQQArwMkAAAD2gcABACvAyQAAADaBwEBAPMIAALxAwCwAxIAAAICBUUwNDk4AAEfBQAAAAXzCAQArwMkAAAA2gcBAQH3CAAB2wcA9AMA310mAQAA4QcAAAL0AwDfXSYBAAICuAVBIHZhcmlhYmxlIHdhcyBib3Jyb3dlZCBhcyBtdXRhYmxlIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5OQpsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7CmxldCBtdXQgYSA9ICZtdXQgaTsKeDsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYGlgIGFzIG11dGFibGUgbW9yZSB0aGFuIG9uY2UgYXQgYSB0aW1lCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBpbiBSdXN0LCB5b3UgY2FuIGVpdGhlciBoYXZlIG1hbnkgaW1tdXRhYmxlIHJlZmVyZW5jZXMsIG9yIG9uZQptdXRhYmxlIHJlZmVyZW5jZS4gRm9yIG1vcmUgZGV0YWlscyB5b3UgbWF5IHdhbnQgdG8gcmVhZCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbAoKRXhhbXBsZToKCmBgYApsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7IC8vIG9rIQoKLy8gb3I6CmxldCBtdXQgaSA9IDA7CmxldCBhID0gJmk7IC8vIG9rIQpsZXQgYiA9ICZpOyAvLyBzdGlsbCBvayEKbGV0IGMgPSAmaTsgLy8gc3RpbGwgb2shCmI7CmE7CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f7gFAAAAuAXzCPQDAN9dJgEAAOAHAAIGAOEHAQAEAMQDDgAAA98HAAQAxAMOAAAA3wcCBQEC2QEBAQDzCAAB4AcABADEAw4AAALfBwABBACvAyQAAAPeBwAEAK8DJAAAAN4HAQEA8wgAAvMDALADEgAAAgIFRTA0OTkAAR8FAAAABfMIBACvAyQAAADeBwEBAfcIAAHfBwD2AwCOXiYBAADlBwAAAvYDAI5eJgEAAgL8B0EgYm9ycm93ZWQgdmFyaWFibGUgd2FzIHVzZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMApmbiB5b3Vfa25vd19ub3RoaW5nKGpvbl9zbm93OiAmbXV0IGkzMikgewogICAgbGV0IG5pZ2h0c193YXRjaCA9ICZqb25fc25vdzsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsgLy8gZXJyb3I6IGNsb3N1cmUgcmVxdWlyZXMgdW5pcXVlIGFjY2VzcyB0byBgam9uX3Nub3dgCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGJ1dCBpdCBpcyBhbHJlYWR5IGJvcnJvd2VkCiAgICB9OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKfQpgYGAKCkluIGhlcmUsIGBqb25fc25vd2AgaXMgYWxyZWFkeSBib3Jyb3dlZCBieSB0aGUgYG5pZ2h0c193YXRjaGAgcmVmZXJlbmNlLCBzbyBpdApjYW5ub3QgYmUgYm9ycm93ZWQgYnkgdGhlIGBzdGFya3NgIGNsb3N1cmUgYXQgdGhlIHNhbWUgdGltZS4gVG8gZml4IHRoaXMgaXNzdWUsCnlvdSBjYW4gY3JlYXRlIHRoZSBjbG9zdXJlIGFmdGVyIHRoZSBib3Jyb3cgaGFzIGVuZGVkOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbmlnaHRzX3dhdGNoID0gJmpvbl9zbm93OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07Cn0KYGBgCgpPciwgaWYgdGhlIHR5cGUgaW1wbGVtZW50cyB0aGUgYENsb25lYCB0cmFpdCwgeW91IGNhbiBjbG9uZSBpdCBiZXR3ZWVuCmNsb3N1cmVzOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGpvbl9jb3B5ID0gam9uX3Nub3cuY2xvbmUoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07CiAgICBwcmludGxuISgie30iLCBqb25fY29weSk7Cn0KYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8P/AcAAAD8B/MI9gMAjl4mAQAA5AcAAgYA5QcBAAQAxAMOAAAD4wcABADEAw4AAADjBwIFAQLZAQEBAPMIAAHkBwAEAMQDDgAAAuMHAAEEAK8DJAAAA+IHAAQArwMkAAAA4gcBAQDzCAAC9QMAsAMSAAACAgVFMDUwMAABHwUAAAAF8wgEAK8DJAAAAOIHAQEB9wgAAeMHAPgDAL1eJgEAAOkHAAAC+AMAvV4mAQACArcOQSBtdXRhYmxlIHZhcmlhYmxlIGlzIHVzZWQgYnV0IGl0IGlzIGFscmVhZHkgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMQpmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikgewogICAgLy8gQWN0aW9ucyB3aGljaCByZXF1aXJlIHVuaXF1ZSBhY2Nlc3MKfQoKZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7CiAgICAvLyBBY3Rpb25zIHdoaWNoIHJlcXVpcmUgdW5pcXVlIGFjY2Vzcwp9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgKmFgIGFzIG11dGFibGUgYmVjYXVzZSBwcmV2aW91cwogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzLgogICAgYmFyKCk7Cn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbXV0YWJsZSB2YXJpYWJsZSBpcyB1c2VkIHdoaWxlIGl0IGlzIHN0aWxsIGNhcHR1cmVkCmJ5IGEgY2xvc3VyZS4gQmVjYXVzZSB0aGUgY2xvc3VyZSBoYXMgYm9ycm93ZWQgdGhlIHZhcmlhYmxlLCBpdCBpcyBub3QgYXZhaWxhYmxlCnVudGlsIHRoZSBjbG9zdXJlIGdvZXMgb3V0IG9mIHNjb3BlLgoKTm90ZSB0aGF0IGEgY2FwdHVyZSB3aWxsIGVpdGhlciBtb3ZlIG9yIGJvcnJvdyBhIHZhcmlhYmxlLCBidXQgaW4gdGhpcwpzaXR1YXRpb24sIHRoZSBjbG9zdXJlIGlzIGJvcnJvd2luZyB0aGUgdmFyaWFibGUuIFRha2UgYSBsb29rIGF0IHRoZSBjaGFwdGVyCm9uIFtDYXB0dXJpbmddW2NhcHR1cmluZ10gaW4gUnVzdCBCeSBFeGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKW2NhcHR1cmluZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3J1c3QtYnktZXhhbXBsZS9mbi9jbG9zdXJlcy9jYXB0dXJlLmh0bWwKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGZpbmlzaCB1c2luZyB0aGUgY2xvc3VyZSBiZWZvcmUgdXNpbmcgdGhlIGNhcHR1cmVkCnZhcmlhYmxlOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgYmFyKCk7CiAgICAvLyBib3Jyb3cgb24gYGFgIGVuZHMuCiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7IC8vIG9rIQp9CmBgYAoKT3IgeW91IGNhbiBwYXNzIHRoZSB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2xvc3VyZToKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHxzOiAmbXV0IGkzMnwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKHMpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOwogICAgYmFyKGEpOwp9CmBgYAoKSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgY2xvc3VyZSBsYXRlcjoKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIGJhcigpOwp9CmBgYAoAHf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cOAAAAtw7zCPgDAL1eJgEAAOgHAAIGAOkHAQAEAMQDDgAAA+cHAAQAxAMOAAAA5wcCBQEC2QEBAQDzCAAB6AcABADEAw4AAALnBwABBACvAyQAAAPmBwAEAK8DJAAAAOYHAQEA8wgAAvcDALADEgAAAgIFRTA1MDEAAR8FAAAABfMIBACvAyQAAADmBwEBAfcIAAHnBwD6AwDsXiYBAADtBwAAAvoDAOxeJgEAAgK4BkEgdmFyaWFibGUgYWxyZWFkeSBib3Jyb3dlZCBhcyBpbW11dGFibGUgd2FzIGJvcnJvd2VkIGFzIG11dGFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAyCmZuIGJhcih4OiAmbXV0IGkzMikge30KZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgeSA9ICZhOyAvLyBhIGlzIGJvcnJvd2VkIGFzIGltbXV0YWJsZS4KICAgIGJhcihhKTsgLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYCphYCBhcyBtdXRhYmxlIGJlY2F1c2UgYGFgIGlzIGFsc28gYm9ycm93ZWQKICAgICAgICAgICAgLy8gICAgICAgIGFzIGltbXV0YWJsZQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoYXQgeW91IGRvbid0IGhhdmUgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlCnZhcmlhYmxlIGJlZm9yZSB0cnlpbmcgdG8gYWNjZXNzIGl0IG11dGFibHk6CgpgYGAKZm4gYmFyKHg6ICZtdXQgaTMyKSB7fQpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGJhcihhKTsKICAgIGxldCB5ID0gJmE7IC8vIG9rIQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f7gGAAAAuAbzCPoDAOxeJgEAAOwHAAIGAO0HAQAEAMQDDgAAA+sHAAQAxAMOAAAA6wcCBQEC2QEBAQDzCAAB7AcABADEAw4AAALrBwABBACvAyQAAAPqBwAEAK8DJAAAAOoHAQEA8wgAAvkDALADEgAAAgIFRTA1MDIAAR8FAAAABfMIBACvAyQAAADqBwEBAfcIAAHrBwD8AwCbXyYBAADxBwAAAvwDAJtfJgEAAgL1C0EgdmFsdWUgd2FzIHVzZWQgYWZ0ZXIgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAzCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIENyZWF0ZSBhIG11dGFibGUgYm9ycm93IG9mIGB2YWx1ZWAuCiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIGxldCBfc3VtID0gdmFsdWUgKyAxOyAvLyBlcnJvcjogY2Fubm90IHVzZSBgdmFsdWVgIGJlY2F1c2UKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXQgd2FzIG11dGFibHkgYm9ycm93ZWQKICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGB2YWx1ZWAgaXMgbXV0YWJseSBib3Jyb3dlZCBieSBgYm9ycm93YCBhbmQgY2Fubm90IGJlCnVzZWQgdG8gY2FsY3VsYXRlIGBzdW1gLiBUaGlzIGlzIG5vdCBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgd291bGQgdmlvbGF0ZQpSdXN0J3MgbXV0YWJpbGl0eSBydWxlcy4KCllvdSBjYW4gZml4IHRoaXMgZXJyb3IgYnkgZmluaXNoaW5nIHVzaW5nIHRoZSBib3Jyb3cgYmVmb3JlIHRoZSBuZXh0IHVzZSBvZgp0aGUgdmFsdWU6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgdmFsdWUgPSAzOwogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwogICAgLy8gVGhlIGJsb2NrIGhhcyBlbmRlZCBhbmQgd2l0aCBpdCB0aGUgYm9ycm93LgogICAgLy8gWW91IGNhbiBub3cgdXNlIGB2YWx1ZWAgYWdhaW4uCiAgICBsZXQgX3N1bSA9IHZhbHVlICsgMTsKfQpgYGAKCk9yIGJ5IGNsb25pbmcgYHZhbHVlYCBiZWZvcmUgYm9ycm93aW5nIGl0OgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIC8vIFdlIGNsb25lIGB2YWx1ZWAsIGNyZWF0aW5nIGEgY29weS4KICAgIGxldCB2YWx1ZV9jbG9uZWQgPSB2YWx1ZS5jbG9uZSgpOwogICAgLy8gVGhlIG11dGFibGUgYm9ycm93IGlzIGEgcmVmZXJlbmNlIHRvIGB2YWx1ZWAgYW5kCiAgICAvLyBub3QgdG8gYHZhbHVlX2Nsb25lZGAuLi4KICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgLy8gLi4uIHdoaWNoIG1lYW5zIHdlIGNhbiBzdGlsbCB1c2UgYHZhbHVlX2Nsb25lZGAsCiAgICBsZXQgX3N1bSA9IHZhbHVlX2Nsb25lZCArIDE7CiAgICAvLyBldmVuIHRob3VnaCB0aGUgYm9ycm93IG9ubHkgZW5kcyBoZXJlLgogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKfQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFJ1c3QncyBvd25lcnNoaXAgc3lzdGVtLCB0YWtlIGEgbG9vayBhdCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w/1CwAAAPUL8wj8AwCbXyYBAADwBwACBgDxBwEABADEAw4AAAPvBwAEAMQDDgAAAO8HAgUBAtkBAQEA8wgAAfAHAAQAxAMOAAAC7wcAAQQArwMkAAAD7gcABACvAyQAAADuBwEBAPMIAAL7AwCwAxIAAAICBUUwNTAzAAEfBQAAAAXzCAQArwMkAAAA7gcBAQH3CAAB7wcA/gMAyl8mAQAA9QcAAAL+AwDKXyYBAAIC+REjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIGEgYm9ycm93ZWQgdmFyaWFibGUgaW50byBhCmNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKICAgICAgICAvLyBlcnJvcjogY2Fubm90IG1vdmUgYGZhbmN5X251bWAgaW50byBjbG9zdXJlIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKICAgIH07CgogICAgeCgpOwogICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgZmFuY3lfbnVtYCBpcyBib3Jyb3dlZCBieSBgZmFuY3lfcmVmYCBhbmQgc28gY2Fubm90IGJlIG1vdmVkIGludG8KdGhlIGNsb3N1cmUgYHhgLiBUaGVyZSBpcyBubyB3YXkgdG8gbW92ZSBhIHZhbHVlIGludG8gYSBjbG9zdXJlIHdoaWxlIGl0IGlzCmJvcnJvd2VkLCBhcyB0aGF0IHdvdWxkIGludmFsaWRhdGUgdGhlIGJvcnJvdy4KCklmIHRoZSBjbG9zdXJlIGNhbid0IG91dGxpdmUgdGhlIHZhbHVlIGJlaW5nIG1vdmVkLCB0cnkgdXNpbmcgYSByZWZlcmVuY2UKcmF0aGVyIHRoYW4gbW92aW5nOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGZhbmN5X3JlZiBpcyB1c2FibGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QgbW92ZSBgZmFuY3lfbnVtYAogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKICAgIH07CgogICAgeCgpOwoKICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwp9CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCBhbmQgdGhlbiBtb3ZlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZgp0aGUgYm9ycm93IHVzaW5nIGEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgogICAgewogICAgICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwogICAgICAgIC8vIGBmYW5jeV9yZWZgIGdvZXMgb3V0IG9mIHNjb3BlIGhlcmUKICAgIH0KCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGBmYW5jeV9udW1gIGNhbiBiZSBtb3ZlZCBub3cgKG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdCkKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7CiAgICB9OwoKICAgIHgoKTsKfQpgYGAKCklmIHRoZSBsaWZldGltZSBvZiBhIHJlZmVyZW5jZSBpc24ndCBlbm91Z2gsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkaW5nLApjb25zaWRlciB1c2luZyBhbiBgQXJjYCB0byBjcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCB2YWx1ZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpBcmM7CnVzZSBzdGQ6OnRocmVhZDsKCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X3JlZjEgPSBBcmM6Om5ldyhGYW5jeU51bSB7IG51bTogNSB9KTsKICAgIGxldCBmYW5jeV9yZWYyID0gZmFuY3lfcmVmMS5jbG9uZSgpOwoKICAgIGxldCB4ID0gdGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICAvLyBgZmFuY3lfcmVmMWAgY2FuIGJlIG1vdmVkIGFuZCBoYXMgYSBgJ3N0YXRpY2AgbGlmZXRpbWUKICAgICAgICBwcmludGxuISgiY2hpbGQgdGhyZWFkOiB7fSIsIGZhbmN5X3JlZjEubnVtKTsKICAgIH0pOwoKICAgIHguam9pbigpLmV4cGVjdCgiY2hpbGQgdGhyZWFkIHNob3VsZCBmaW5pc2giKTsKICAgIHByaW50bG4hKCJtYWluIHRocmVhZDoge30iLCBmYW5jeV9yZWYyLm51bSk7Cn0KYGBgCgAk////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wH5EQAAAPkR8wj+AwDKXyYBAAD0BwACBgD1BwEABADEAw4AAAPzBwAEAMQDDgAAAPMHAgUBAtkBAQEA8wgAAfQHAAQAxAMOAAAC8wcAAQQArwMkAAAD8gcABACvAyQAAADyBwEBAPMIAAL9AwCwAxIAAAICBUUwNTA0AAEfBQAAAAXzCAQArwMkAAAA8gcBAQH3CAAB8wcAgAQA+V8mAQAA+QcAAAKABAD5XyYBAAIChwxBIHZhbHVlIHdhcyBtb3ZlZCBvdXQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwNQpzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6IFZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKICAgIGxldCBfcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7CiAgICBib3Jyb3coX3JlZl90b192YWwpOwp9CmBgYAoKSGVyZSwgdGhlIGZ1bmN0aW9uIGBlYXRgIHRha2VzIG93bmVyc2hpcCBvZiBgeGAuIEhvd2V2ZXIsCmB4YCBjYW5ub3QgYmUgbW92ZWQgYmVjYXVzZSB0aGUgYm9ycm93IHRvIGBfcmVmX3RvX3ZhbGAKbmVlZHMgdG8gbGFzdCB0aWxsIHRoZSBmdW5jdGlvbiBgYm9ycm93YC4KVG8gZml4IHRoYXQgeW91IGNhbiBkbyBhIGZldyBkaWZmZXJlbnQgdGhpbmdzOgoKKiBUcnkgdG8gYXZvaWQgbW92aW5nIHRoZSB2YXJpYWJsZS4KKiBSZWxlYXNlIGJvcnJvdyBiZWZvcmUgbW92ZS4KKiBJbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBvbiB0aGUgdHlwZS4KCkV4YW1wbGVzOgoKYGBgCnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogJlZhbHVlKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gVmFsdWV7fTsKCiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoJngpOyAvLyBwYXNzIGJ5IHJlZmVyZW5jZSwgaWYgaXQncyBwb3NzaWJsZQogICAgYm9ycm93KHJlZl90b192YWwpOwp9CmBgYAoKT3I6CgpgYGAKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CgogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgYm9ycm93KHJlZl90b192YWwpOwogICAgLy8gcmVmX3RvX3ZhbCBpcyBubyBsb25nZXIgdXNlZC4KICAgIGVhdCh4KTsKfQpgYGAKCk9yOgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gaW1wbGVtZW50IENvcHkgdHJhaXQKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CiAgICBsZXQgcmVmX3RvX3ZhbDogJlZhbHVlID0gJng7CiAgICBlYXQoeCk7IC8vIGl0IHdpbGwgYmUgY29waWVkIGhlcmUuCiAgICBib3Jyb3cocmVmX3RvX3ZhbCk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKABn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wF/hwwAAACHDPMIgAQA+V8mAQAA+AcAAgYA+QcBAAQAxAMOAAAD9wcABADEAw4AAAD3BwIFAQLZAQEBAPMIAAH4BwAEAMQDDgAAAvcHAAEEAK8DJAAAA/YHAAQArwMkAAAA9gcBAQDzCAAC/wMAsAMSAAACAgVFMDUwNQABHwUAAAAF8wgEAK8DJAAAAPYHAQEB9wgAAfcHAIIEAKhgJgEAAP0HAAACggQAqGAmAQACAvYLQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhc3NpZ24gdG8gYSBib3Jyb3dlZCB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDYKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07Ci8vIGVycm9yOiBjYW5ub3QgYXNzaWduIHRvIGBmYW5jeV9udW1gIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKCnByaW50bG4hKCJOdW06IHt9LCBSZWY6IHt9IiwgZmFuY3lfbnVtLm51bSwgZmFuY3lfcmVmLm51bSk7CmBgYAoKQmVjYXVzZSBgZmFuY3lfcmVmYCBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSB0byBgZmFuY3lfbnVtYCwgYGZhbmN5X251bWAgY2FuJ3QKYmUgYXNzaWduZWQgdG8gYSBuZXcgdmFsdWUgYXMgaXQgd291bGQgaW52YWxpZGF0ZSB0aGUgcmVmZXJlbmNlLgoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIG1vdmUgb3V0IG9mIGBmYW5jeV9udW1gIGludG8gYSBzZWNvbmQgYGZhbmN5X251bWA6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IG1vdmVkX251bSA9IGZhbmN5X251bTsKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKCnByaW50bG4hKCJOdW06IHt9LCBNb3ZlZCBudW06IHt9IiwgZmFuY3lfbnVtLm51bSwgbW92ZWRfbnVtLm51bSk7CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYm9ycm93IHVzaW5nCmEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07Cgp7CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKICAgIHByaW50bG4hKCJSZWY6IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KCi8vIFdvcmtzIGJlY2F1c2UgYGZhbmN5X3JlZmAgaXMgbm8gbG9uZ2VyIGluIHNjb3BlCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYAoKT3IgYnkgbW92aW5nIHRoZSByZWZlcmVuY2UgaW50byBhIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBwcmludF9mYW5jeV9yZWYoZmFuY3lfcmVmOiAmRmFuY3lOdW0pewogICAgcHJpbnRsbiEoIlJlZjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwoKcHJpbnRfZmFuY3lfcmVmKCZmYW5jeV9udW0pOwoKLy8gV29ya3MgYmVjYXVzZSBmdW5jdGlvbiBib3Jyb3cgaGFzIGVuZGVkCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYAoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////x/2CwAAAPYL8wiCBACoYCYBAAD8BwACBgD9BwEABADEAw4AAAP7BwAEAMQDDgAAAPsHAgUBAtkBAQEA8wgAAfwHAAQAxAMOAAAC+wcAAQQArwMkAAAD+gcABACvAyQAAAD6BwEBAPMIAAKBBACwAxIAAAICBUUwNTA2AAEfBQAAAAXzCAQArwMkAAAA+gcBAQH3CAAB+wcAhAQA12AmAQAAgQgAAAKEBADXYCYBAAICuxVBIGJvcnJvd2VkIHZhbHVlIHdhcyBtb3ZlZCBvdXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwoKICAgIHguYm9ycm93KCkubm90aGluZ19pc190cnVlKCk7IC8vIGVycm9yOiBjYW5ub3QgbW92ZSBvdXQgb2YgYm9ycm93ZWQgY29udGVudAp9CmBgYAoKSGVyZSwgdGhlIGBub3RoaW5nX2lzX3RydWVgIG1ldGhvZCB0YWtlcyB0aGUgb3duZXJzaGlwIG9mIGBzZWxmYC4gSG93ZXZlciwKYHNlbGZgIGNhbm5vdCBiZSBtb3ZlZCBiZWNhdXNlIGAuYm9ycm93KClgIG9ubHkgcHJvdmlkZXMgYW4gYCZUaGVEYXJrS25pZ2h0YCwKd2hpY2ggaXMgYSBib3Jyb3cgb2YgdGhlIGNvbnRlbnQgb3duZWQgYnkgdGhlIGBSZWZDZWxsYC4gVG8gZml4IHRoaXMgZXJyb3IsCnlvdSBoYXZlIHRocmVlIGNob2ljZXM6CgoqIFRyeSB0byBhdm9pZCBtb3ZpbmcgdGhlIHZhcmlhYmxlLgoqIFNvbWVob3cgcmVjbGFpbSB0aGUgb3duZXJzaGlwLgoqIEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IG9uIHRoZSB0eXBlLgoKVGhpcyBjYW4gYWxzbyBoYXBwZW4gd2hlbiB1c2luZyBhIHR5cGUgaW1wbGVtZW50aW5nIGBGbmAgb3IgYEZuTXV0YCwgYXMgbmVpdGhlcgphbGxvd3MgbW92aW5nIG91dCBvZiB0aGVtICh0aGV5IHVzdWFsbHkgcmVwcmVzZW50IGNsb3N1cmVzIHdoaWNoIGNhbiBiZSBjYWxsZWQKbW9yZSB0aGFuIG9uY2UpLiBNdWNoIG9mIHRoZSB0ZXh0IGZvbGxvd2luZyBhcHBsaWVzIGVxdWFsbHkgd2VsbCB0byBub24tYEZuT25jZWAKY2xvc3VyZSBib2RpZXMuCgpFeGFtcGxlczoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKCZzZWxmKSB7fSAvLyBGaXJzdCBjYXNlLCB3ZSBkb24ndCB0YWtlIG93bmVyc2hpcAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKICAgIGxldCB4ID0geC5pbnRvX2lubmVyKCk7IC8vIHdlIGdldCBiYWNrIG93bmVyc2hpcAoKICAgIHgubm90aGluZ19pc190cnVlKCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gd2UgaW1wbGVtZW50IHRoZSBDb3B5IHRyYWl0CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpNb3ZpbmcgYSBtZW1iZXIgb3V0IG9mIGEgbXV0YWJseSBib3Jyb3dlZCBzdHJ1Y3Qgd2lsbCBhbHNvIGNhdXNlIEUwNTA3IGVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA3CnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpzdHJ1Y3QgQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgY2F2ZSA9IEJhdGNhdmUgewogICAgICAgIGtuaWdodDogVGhlRGFya0tuaWdodAogICAgfTsKICAgIGxldCBib3Jyb3dlZCA9ICZtdXQgY2F2ZTsKCiAgICBib3Jyb3dlZC5rbmlnaHQubm90aGluZ19pc190cnVlKCk7IC8vIEUwNTA3Cn0KYGBgCgpJdCBpcyBmaW5lIG9ubHkgaWYgeW91IHB1dCBzb21ldGhpbmcgYmFjay4gYG1lbTo6cmVwbGFjZWAgY2FuIGJlIHVzZWQgZm9yIHRoYXQ6CgpgYGAKIyBzdHJ1Y3QgVGhlRGFya0tuaWdodDsKIyBpbXBsIFRoZURhcmtLbmlnaHQgeyBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30gfQojIHN0cnVjdCBCYXRjYXZlIHsga25pZ2h0OiBUaGVEYXJrS25pZ2h0IH0KdXNlIHN0ZDo6bWVtOwoKbGV0IG11dCBjYXZlID0gQmF0Y2F2ZSB7CiAgICBrbmlnaHQ6IFRoZURhcmtLbmlnaHQKfTsKbGV0IGJvcnJvd2VkID0gJm11dCBjYXZlOwoKbWVtOjpyZXBsYWNlKCZtdXQgYm9ycm93ZWQua25pZ2h0LCBUaGVEYXJrS25pZ2h0KS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCgAr////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8HuxUAAAC7FfMIhAQA12AmAQAAgAgAAgYAgQgBAAQAxAMOAAAD/wcABADEAw4AAAD/BwIFAQLZAQEBAPMIAAGACAAEAMQDDgAAAv8HAAEEAK8DJAAAA/4HAAQArwMkAAAA/gcBAQDzCAACgwQAsAMSAAACAgVFMDUwNwABHwUAAAAF8wgEAK8DJAAAAP4HAQEB9wgAAf8HAIYEAIZhJgEAAIUIAAAChgQAhmEmAQACAu4IQSB2YWx1ZSB3YXMgbW92ZWQgb3V0IG9mIGEgbm9uLWNvcHkgZml4ZWQtc2l6ZSBhcnJheS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDgKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdOyAvLyBlcnJvcjogY2Fubm90IG1vdmUgb3V0IG9mIHR5cGUgYFtOb25Db3B5OyAxXWAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhIG5vbi1jb3B5IGZpeGVkLXNpemUgYXJyYXkKfQpgYGAKClRoZSBmaXJzdCBlbGVtZW50IHdhcyBtb3ZlZCBvdXQgb2YgdGhlIGFycmF5LCBidXQgdGhpcyBpcyBub3QKcG9zc2libGUgYmVjYXVzZSBgTm9uQ29weWAgZG9lcyBub3QgaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQuCgpDb25zaWRlciBib3Jyb3dpbmcgdGhlIGVsZW1lbnQgaW5zdGVhZCBvZiBtb3ZpbmcgaXQ6CgpgYGAKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgbGV0IF92YWx1ZSA9ICZhcnJheVswXTsgLy8gQm9ycm93aW5nIGlzIGFsbG93ZWQsIHVubGlrZSBtb3ZpbmcuCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB5b3VyIHR5cGUgaW1wbGVtZW50cyBgQ2xvbmVgIGFuZCB5b3UgbmVlZCB0byBvd24gdGhlIHZhbHVlLApjb25zaWRlciBib3Jyb3dpbmcgYW5kIHRoZW4gY2xvbmluZzoKCmBgYAojW2Rlcml2ZShDbG9uZSldCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIC8vIE5vdyB5b3UgY2FuIGNsb25lIHRoZSBhcnJheSBlbGVtZW50LgogICAgbGV0IF92YWx1ZSA9IGFycmF5WzBdLmNsb25lKCk7Cn0KYGBgCgpJZiB5b3UgcmVhbGx5IHdhbnQgdG8gbW92ZSB0aGUgdmFsdWUgb3V0LCB5b3UgY2FuIHVzZSBhIGRlc3RydWN0dXJpbmcgYXJyYXkKcGF0dGVybiB0byBtb3ZlIGl0OgoKYGBgCnN0cnVjdCBOb25Db3B5OwoKZm4gbWFpbigpIHsKICAgIGxldCBhcnJheSA9IFtOb25Db3B5OyAxXTsKICAgIC8vIERlc3RydWN0dXJpbmcgdGhlIGFycmF5CiAgICBsZXQgW192YWx1ZV0gPSBhcnJheTsKfQpgYGAKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w/uCAAAAO4I8wiGBACGYSYBAACECAACBgCFCAEABADEAw4AAAODCAAEAMQDDgAAAIMIAgUBAtkBAQEA8wgAAYQIAAQAxAMOAAACgwgAAQQArwMkAAADgggABACvAyQAAACCCAEBAPMIAAKFBACwAxIAAAICBUUwNTA4AAEfBQAAAAXzCAQArwMkAAAAgggBAQH3CAABgwgAiAQAtWEmAQAAiQgAAAKIBAC1YSYBAAIC/hJUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIG91dCBvZiBhIHZhbHVlIHdob3NlIHR5cGUKaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwOQpzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1c2l6ZQp9CgpzdHJ1Y3QgRHJvcFN0cnVjdCB7CiAgICBmYW5jeTogRmFuY3lOdW0KfQoKaW1wbCBEcm9wIGZvciBEcm9wU3RydWN0IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgLy8gRGVzdHJ1Y3QgRHJvcFN0cnVjdCwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBkcm9wX3N0cnVjdCA9IERyb3BTdHJ1Y3R7ZmFuY3k6IEZhbmN5TnVte251bTogNX19OwogICAgbGV0IGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIEVycm9yIEUwNTA5CiAgICBwcmludGxuISgiRmFuY3k6IHt9IiwgZmFuY3lfZmllbGQubnVtKTsKICAgIC8vIGltcGxpY2l0IGNhbGwgdG8gYGRyb3Bfc3RydWN0LmRyb3AoKWAgYXMgZHJvcF9zdHJ1Y3QgZ29lcyBvdXQgb2Ygc2NvcGUKfQpgYGAKCkhlcmUsIHdlIHRyaWVkIHRvIG1vdmUgYSBmaWVsZCBvdXQgb2YgYSBzdHJ1Y3Qgb2YgdHlwZSBgRHJvcFN0cnVjdGAgd2hpY2gKaW1wbGVtZW50cyB0aGUgYERyb3BgIHRyYWl0LiBIb3dldmVyLCBhIHN0cnVjdCBjYW5ub3QgYmUgZHJvcHBlZCBpZiBvbmUgb3IKbW9yZSBvZiBpdHMgZmllbGRzIGhhdmUgYmVlbiBtb3ZlZC4KClN0cnVjdHMgaW1wbGVtZW50aW5nIHRoZSBgRHJvcGAgdHJhaXQgaGF2ZSBhbiBpbXBsaWNpdCBkZXN0cnVjdG9yIHRoYXQgZ2V0cwpjYWxsZWQgd2hlbiB0aGV5IGdvIG91dCBvZiBzY29wZS4gVGhpcyBkZXN0cnVjdG9yIG1heSB1c2UgdGhlIGZpZWxkcyBvZiB0aGUKc3RydWN0LCBzbyBtb3Zpbmcgb3V0IG9mIHRoZSBzdHJ1Y3QgY291bGQgbWFrZSBpdCBpbXBvc3NpYmxlIHRvIHJ1biB0aGUKZGVzdHJ1Y3Rvci4gVGhlcmVmb3JlLCB3ZSBtdXN0IHRoaW5rIG9mIGFsbCB2YWx1ZXMgd2hvc2UgdHlwZSBpbXBsZW1lbnRzIHRoZQpgRHJvcGAgdHJhaXQgYXMgc2luZ2xlIHVuaXRzIHdob3NlIGZpZWxkcyBjYW5ub3QgYmUgbW92ZWQuCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBjcmVhdGluZyBhIHJlZmVyZW5jZSB0byB0aGUgZmllbGRzIG9mIGEgc3RydWN0LAplbnVtLCBvciB0dXBsZSB1c2luZyB0aGUgYHJlZmAga2V5d29yZDoKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1c2l6ZQp9CgpzdHJ1Y3QgRHJvcFN0cnVjdCB7CiAgICBmYW5jeTogRmFuY3lOdW0KfQoKaW1wbCBEcm9wIGZvciBEcm9wU3RydWN0IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgLy8gRGVzdHJ1Y3QgRHJvcFN0cnVjdCwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIGxldCBkcm9wX3N0cnVjdCA9IERyb3BTdHJ1Y3R7ZmFuY3k6IEZhbmN5TnVte251bTogNX19OwogICAgbGV0IHJlZiBmYW5jeV9maWVsZCA9IGRyb3Bfc3RydWN0LmZhbmN5OyAvLyBObyBtb3JlIGVycm9ycyEKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKTm90ZSB0aGF0IHRoaXMgdGVjaG5pcXVlIGNhbiBhbHNvIGJlIHVzZWQgaW4gdGhlIGFybXMgb2YgYSBtYXRjaCBleHByZXNzaW9uOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCmVudW0gRHJvcEVudW0gewogICAgRmFuY3koRmFuY3lOdW0pCn0KCmltcGwgRHJvcCBmb3IgRHJvcEVudW0gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wRW51bSwgcG9zc2libHkgdXNpbmcgRmFuY3lOdW0KICAgIH0KfQoKZm4gbWFpbigpIHsKICAgIC8vIENyZWF0ZXMgYW5kIGVudW0gb2YgdHlwZSBgRHJvcEVudW1gLCB3aGljaCBpbXBsZW1lbnRzIGBEcm9wYAogICAgbGV0IGRyb3BfZW51bSA9IERyb3BFbnVtOjpGYW5jeShGYW5jeU51bXtudW06IDEwfSk7CiAgICBtYXRjaCBkcm9wX2VudW0gewogICAgICAgIC8vIENyZWF0ZXMgYSByZWZlcmVuY2UgdG8gdGhlIGluc2lkZSBvZiBgRHJvcEVudW06OkZhbmN5YAogICAgICAgIERyb3BFbnVtOjpGYW5jeShyZWYgZmFuY3lfZmllbGQpID0+IC8vIE5vIGVycm9yIQogICAgICAgICAgICBwcmludGxuISgiSXQgd2FzIGZhbmN5LS0ge30hIiwgZmFuY3lfZmllbGQubnVtKSwKICAgIH0KICAgIC8vIGltcGxpY2l0IGNhbGwgdG8gYGRyb3BfZW51bS5kcm9wKClgIGFzIGRyb3BfZW51bSBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoAJv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////z/+EgAAAP4S8wiIBAC1YSYBAACICAACBgCJCAEABADEAw4AAAOHCAAEAMQDDgAAAIcIAgUBAtkBAQEA8wgAAYgIAAQAxAMOAAAChwgAAQQArwMkAAADhggABACvAyQAAACGCAEBAPMIAAKHBACwAxIAAAICBUUwNTA5AAEfBQAAAAXzCAQArwMkAAAAhggBAQH3CAABhwgAigQA5GEmAQAAjQgAAAKKBADkYSYBAAIC4wRUaGUgbWF0Y2hlZCB2YWx1ZSB3YXMgYXNzaWduZWQgaW4gYSBtYXRjaCBndWFyZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTAKbGV0IG11dCB4ID0gU29tZSgwKTsKbWF0Y2ggeCB7CiAgICBOb25lID0+IHt9CiAgICBTb21lKF8pIGlmIHsgeCA9IE5vbmU7IGZhbHNlIH0gPT4ge30gLy8gZXJyb3IhCiAgICBTb21lKF8pID0+IHt9Cn0KYGBgCgpXaGVuIG1hdGNoaW5nIG9uIGEgdmFyaWFibGUgaXQgY2Fubm90IGJlIG11dGF0ZWQgaW4gdGhlIG1hdGNoIGd1YXJkcywgYXMgdGhpcwpjb3VsZCBjYXVzZSB0aGUgbWF0Y2ggdG8gYmUgbm9uLWV4aGF1c3RpdmUuCgpIZXJlIGV4ZWN1dGluZyBgeCA9IE5vbmVgIHdvdWxkIG1vZGlmeSB0aGUgdmFsdWUgYmVpbmcgbWF0Y2hlZCBhbmQgcmVxdWlyZSB1cwp0byBnbyAiYmFjayBpbiB0aW1lIiB0byB0aGUgYE5vbmVgIGFybS4gVG8gZml4IGl0LCBjaGFuZ2UgdGhlIHZhbHVlIGluIHRoZSBtYXRjaAphcm06CgpgYGAKbGV0IG11dCB4ID0gU29tZSgwKTsKbWF0Y2ggeCB7CiAgICBOb25lID0+IHt9CiAgICBTb21lKF8pID0+IHsKICAgICAgICB4ID0gTm9uZTsgLy8gb2shCiAgICB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////3/jBAAAAOME8wiKBADkYSYBAACMCAACBgCNCAEABADEAw4AAAOLCAAEAMQDDgAAAIsIAgUBAtkBAQEA8wgAAYwIAAQAxAMOAAACiwgAAQQArwMkAAADiggABACvAyQAAACKCAEBAPMIAAKJBACwAxIAAAICBUUwNTEwAAEfBQAAAAXzCAQArwMkAAAAiggBAQH3CAABiwgAjAQAk2ImAQAAkQgAAAKMBACTYiYBAAIC8gRJbnZhbGlkIG1vbm9tb3JwaGl6YXRpb24gb2YgYW4gaW50cmluc2ljIGZ1bmN0aW9uIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxMQojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKZXh0ZXJuICJwbGF0Zm9ybS1pbnRyaW5zaWMiIHsKICAgIGZuIHNpbWRfYWRkPFQ+KGE6IFQsIGI6IFQpIC0+IFQ7Cn0KCmZuIG1haW4oKSB7CiAgICB1bnNhZmUgeyBzaW1kX2FkZCgwLCAxKTsgfQogICAgLy8gZXJyb3I6IGludmFsaWQgbW9ub21vcnBoaXphdGlvbiBvZiBgc2ltZF9hZGRgIGludHJpbnNpYwp9CmBgYAoKVGhlIGdlbmVyaWMgdHlwZSBoYXMgdG8gYmUgYSBTSU1EIHR5cGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQojIVtmZWF0dXJlKHBsYXRmb3JtX2ludHJpbnNpY3MpXQoKI1tyZXByKHNpbWQpXQojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBpMzJ4MihpMzIsIGkzMik7CgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9hZGQ8VD4oYTogVCwgYjogVCkgLT4gVDsKfQoKdW5zYWZlIHsgc2ltZF9hZGQoaTMyeDIoMCwgMCksIGkzMngyKDEsIDIpKTsgfSAvLyBvayEKYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wHyBAAAAPIE8wiMBACTYiYBAACQCAACBgCRCAEABADEAw4AAAOPCAAEAMQDDgAAAI8IAgUBAtkBAQEA8wgAAZAIAAQAxAMOAAACjwgAAQQArwMkAAADjggABACvAyQAAACOCAEBAPMIAAKLBACwAxIAAAICBUUwNTExAAEfBQAAAAXzCAQArwMkAAAAjggBAQH3CAABjwgAjgQAwmImAQAAlQgAAAKOBADCYiYBAAICmgRUcmFuc211dGUgd2l0aCB0d28gZGlmZmVyZW50bHkgc2l6ZWQgdHlwZXMgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTIKZm4gdGFrZXNfdTgoXzogdTgpIHt9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgdGFrZXNfdTgoOjpzdGQ6Om1lbTo6dHJhbnNtdXRlKDB1MTYpKTsgfQogICAgLy8gZXJyb3I6IGNhbm5vdCB0cmFuc211dGUgYmV0d2VlbiB0eXBlcyBvZiBkaWZmZXJlbnQgc2l6ZXMsCiAgICAvLyAgICAgICAgb3IgZGVwZW5kZW50bHktc2l6ZWQgdHlwZXMKfQpgYGAKClBsZWFzZSB1c2UgdHlwZXMgd2l0aCBzYW1lIHNpemUgb3IgdXNlIHRoZSBleHBlY3RlZCB0eXBlIGRpcmVjdGx5LiBFeGFtcGxlOgoKYGBgCmZuIHRha2VzX3U4KF86IHU4KSB7fQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHRha2VzX3U4KDo6c3RkOjptZW06OnRyYW5zbXV0ZSgwaTgpKTsgfSAvLyBvayEKICAgIC8vIG9yOgogICAgdW5zYWZlIHsgdGFrZXNfdTgoMHU4KTsgfSAvLyBvayEKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///x+aBAAAAJoE8wiOBADCYiYBAACUCAACBgCVCAEABADEAw4AAAOTCAAEAMQDDgAAAJMIAgUBAtkBAQEA8wgAAZQIAAQAxAMOAAACkwgAAQQArwMkAAADkggABACvAyQAAACSCAEBAPMIAAKNBACwAxIAAAICBUUwNTEyAAEfBQAAAAXzCAQArwMkAAAAkggBAQH3CAABkwgAkAQA8WImAQAAmQgAAAKQBADxYiYBAAICpQVBIHJlZmVyZW5jZSB0byBhIGxvY2FsIHZhcmlhYmxlIHdhcyByZXR1cm5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTUKZm4gZ2V0X2RhbmdsaW5nX3JlZmVyZW5jZSgpIC0+ICYnc3RhdGljIGkzMiB7CiAgICBsZXQgeCA9IDA7CiAgICAmeAp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNTE1CnVzZSBzdGQ6OnNsaWNlOjpJdGVyOwpmbiBnZXRfZGFuZ2xpbmdfaXRlcmF0b3I8J2E+KCkgLT4gSXRlcjwnYSwgaTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2Lml0ZXIoKQp9CmBgYAoKTG9jYWwgdmFyaWFibGVzLCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3JhcmllcyBhcmUgYWxsIGRyb3BwZWQgYmVmb3JlIHRoZQplbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkuIFNvIGEgcmVmZXJlbmNlIHRvIHRoZW0gY2Fubm90IGJlIHJldHVybmVkLgoKQ29uc2lkZXIgcmV0dXJuaW5nIGFuIG93bmVkIHZhbHVlIGluc3RlYWQ6CgpgYGAKdXNlIHN0ZDo6dmVjOjpJbnRvSXRlcjsKCmZuIGdldF9pbnRlZ2VyKCkgLT4gaTMyIHsKICAgIGxldCB4ID0gMDsKICAgIHgKfQoKZm4gZ2V0X293bmVkX2l0ZXJhdG9yKCkgLT4gSW50b0l0ZXI8aTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2LmludG9faXRlcigpCn0KYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A6UFAAAApQXzCJAEAPFiJgEAAJgIAAIGAJkIAQAEAMQDDgAAA5cIAAQAxAMOAAAAlwgCBQEC2QEBAQDzCAABmAgABADEAw4AAAKXCAABBACvAyQAAAOWCAAEAK8DJAAAAJYIAQEA8wgAAo8EALADEgAAAgIFRTA1MTUAAR8FAAAABfMIBACvAyQAAACWCAEBAfcIAAGXCACSBACgYyYBAACdCAAAApIEAKBjJgEAAgLvAVRoZSBgdHlwZW9mYCBrZXl3b3JkIGlzIGN1cnJlbnRseSByZXNlcnZlZCBidXQgdW5pbXBsZW1lbnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTYKZm4gbWFpbigpIHsKICAgIGxldCB4OiB0eXBlb2YoOTIpID0gOTI7Cn0KYGBgCgpUcnkgdXNpbmcgdHlwZSBpbmZlcmVuY2UgaW5zdGVhZC4gRXhhbXBsZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHggPSA5MjsKfQpgYGAKAAT///////////8B////////////Af///////////wH///////8f7wEAAADvAfMIkgQAoGMmAQAAnAgAAgYAnQgBAAQAxAMOAAADmwgABADEAw4AAACbCAIFAQLZAQEBAPMIAAGcCAAEAMQDDgAAApsIAAEEAK8DJAAAA5oIAAQArwMkAAAAmggBAQDzCAACkQQAsAMSAAACAgVFMDUxNgABHwUAAAAF8wgEAK8DJAAAAJoIAQEB9wgAAZsIAJQEAM9jJgEAAKEIAAAClAQAz2MmAQACAuoLQSBgI1tyZXByKC4uKV1gIGF0dHJpYnV0ZSB3YXMgcGxhY2VkIG9uIGFuIHVuc3VwcG9ydGVkIGl0ZW0uCgpFeGFtcGxlcyBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNwojW3JlcHIoQyldCnR5cGUgRm9vID0gdTg7CgojW3JlcHIocGFja2VkKV0KZW51bSBGb28ge0JhciwgQmF6fQoKI1tyZXByKHU4KV0Kc3RydWN0IEZvbyB7YmFyOiBib29sLCBiYXo6IGJvb2x9CgojW3JlcHIoQyldCmltcGwgRm9vIHsKICAgIC8vIC4uLgp9CmBgYAoKKiBUaGUgYCNbcmVwcihDKV1gIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBwbGFjZWQgb24gc3RydWN0cyBhbmQgZW51bXMuCiogVGhlIGAjW3JlcHIocGFja2VkKV1gIGFuZCBgI1tyZXByKHNpbWQpXWAgYXR0cmlidXRlcyBvbmx5IHdvcmsgb24gc3RydWN0cy4KKiBUaGUgYCNbcmVwcih1OCldYCwgYCNbcmVwcihpMTYpXWAsIGV0YyBhdHRyaWJ1dGVzIG9ubHkgd29yayBvbiBlbnVtcy4KClRoZXNlIGF0dHJpYnV0ZXMgZG8gbm90IHdvcmsgb24gdHlwZWRlZnMsIHNpbmNlIHR5cGVkZWZzIGFyZSBqdXN0IGFsaWFzZXMuCgpSZXByZXNlbnRhdGlvbnMgbGlrZSBgI1tyZXByKHU4KV1gLCBgI1tyZXByKGk2NCldYCBhcmUgZm9yIHNlbGVjdGluZyB0aGUKZGlzY3JpbWluYW50IHNpemUgZm9yIGVudW1zIHdpdGggbm8gZGF0YSBmaWVsZHMgb24gYW55IG9mIHRoZSB2YXJpYW50cywgZS5nLgpgZW51bSBDb2xvciB7UmVkLCBCbHVlLCBHcmVlbn1gLCBlZmZlY3RpdmVseSBzZXR0aW5nIHRoZSBzaXplIG9mIHRoZSBlbnVtIHRvCnRoZSBzaXplIG9mIHRoZSBwcm92aWRlZCB0eXBlLiBTdWNoIGFuIGVudW0gY2FuIGJlIGNhc3QgdG8gYSB2YWx1ZSBvZiB0aGUgc2FtZQp0eXBlIGFzIHdlbGwuIEluIHNob3J0LCBgI1tyZXByKHU4KV1gIG1ha2VzIHRoZSBlbnVtIGJlaGF2ZSBsaWtlIGFuIGludGVnZXIKd2l0aCBhIGNvbnN0cmFpbmVkIHNldCBvZiBhbGxvd2VkIHZhbHVlcy4KCk9ubHkgZmllbGQtbGVzcyBlbnVtcyBjYW4gYmUgY2FzdCB0byBudW1lcmljYWwgcHJpbWl0aXZlcywgc28gdGhpcyBhdHRyaWJ1dGUKd2lsbCBub3QgYXBwbHkgdG8gc3RydWN0cy4KCmAjW3JlcHIocGFja2VkKV1gIHJlZHVjZXMgcGFkZGluZyB0byBtYWtlIHRoZSBzdHJ1Y3Qgc2l6ZSBzbWFsbGVyLiBUaGUKcmVwcmVzZW50YXRpb24gb2YgZW51bXMgaXNuJ3Qgc3RyaWN0bHkgZGVmaW5lZCBpbiBSdXN0LCBhbmQgdGhpcyBhdHRyaWJ1dGUKd29uJ3Qgd29yayBvbiBlbnVtcy4KCmAjW3JlcHIoc2ltZCldYCB3aWxsIGdpdmUgYSBzdHJ1Y3QgY29uc2lzdGluZyBvZiBhIGhvbW9nZW5lb3VzIHNlcmllcyBvZiBtYWNoaW5lCnR5cGVzIChpLmUuLCBgdThgLCBgaTMyYCwgZXRjKSBhIHJlcHJlc2VudGF0aW9uIHRoYXQgcGVybWl0cyB2ZWN0b3JpemF0aW9uIHZpYQpTSU1ELiBUaGlzIGRvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlIGZvciBlbnVtcyBzaW5jZSB0aGV5IGRvbid0IGNvbnNpc3Qgb2YgYQpzaW5nbGUgbGlzdCBvZiBkYXRhLgoAGP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////9/6gsAAADqC/MIlAQAz2MmAQAAoAgAAgYAoQgBAAQAxAMOAAADnwgABADEAw4AAACfCAIFAQLZAQEBAPMIAAGgCAAEAMQDDgAAAp8IAAEEAK8DJAAAA54IAAQArwMkAAAAnggBAQDzCAACkwQAsAMSAAACAgVFMDUxNwABHwUAAAAF8wgEAK8DJAAAAJ4IAQEB9wgAAZ8IAJYEAP5jJgEAAKUIAAAClgQA/mMmAQACArkFQW4gYCNbaW5saW5lKC4uKV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEKZnVuY3Rpb24gb3IgbWV0aG9kLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxOAojW2lubGluZShhbHdheXMpXQpzdHJ1Y3QgRm9vOwoKI1tpbmxpbmUobmV2ZXIpXQppbXBsIEZvbyB7CiAgICAvLyAuLi4KfQpgYGAKCmAjW2lubGluZV1gIGhpbnRzIHRoZSBjb21waWxlciB3aGV0aGVyIG9yIG5vdCB0byBhdHRlbXB0IHRvIGlubGluZSBhIG1ldGhvZCBvcgpmdW5jdGlvbi4gQnkgZGVmYXVsdCwgdGhlIGNvbXBpbGVyIGRvZXMgYSBwcmV0dHkgZ29vZCBqb2Igb2YgZmlndXJpbmcgdGhpcyBvdXQKaXRzZWxmLCBidXQgaWYgeW91IGZlZWwgdGhlIG5lZWQgZm9yIGFubm90YXRpb25zLCBgI1tpbmxpbmUoYWx3YXlzKV1gIGFuZApgI1tpbmxpbmUobmV2ZXIpXWAgY2FuIG92ZXJyaWRlIG9yIGZvcmNlIHRoZSBjb21waWxlcidzIGRlY2lzaW9uLgoKSWYgeW91IHdpc2ggdG8gYXBwbHkgdGhpcyBhdHRyaWJ1dGUgdG8gYWxsIG1ldGhvZHMgaW4gYW4gaW1wbCwgbWFudWFsbHkgYW5ub3RhdGUKZWFjaCBtZXRob2Q7IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBhbm5vdGF0ZSB0aGUgZW50aXJlIGltcGwgd2l0aCBhbiBgI1tpbmxpbmVdYAphdHRyaWJ1dGUuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkFAAAAuQXzCJYEAP5jJgEAAKQIAAIGAKUIAQAEAMQDDgAAA6MIAAQAxAMOAAAAowgCBQEC2QEBAQDzCAABpAgABADEAw4AAAKjCAABBACvAyQAAAOiCAAEAK8DJAAAAKIIAQEA8wgAApUEALADEgAAAgIFRTA1MTgAAR8FAAAABfMIBACvAyQAAACiCAEBAfcIAAGjCACYBACtZCYBAACpCAAAApgEAK1kJgEAAgLYC0Egbm9uLWRlZmF1bHQgaW1wbGVtZW50YXRpb24gd2FzIGFscmVhZHkgbWFkZSBvbiB0aGlzIHR5cGUgc28gaXQgY2Fubm90IGJlCnNwZWNpYWxpemVkIGZ1cnRoZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTIwCiMhW2ZlYXR1cmUoc3BlY2lhbGl6YXRpb24pXQoKdHJhaXQgU3BhY2VMbGFtYSB7CiAgICBmbiBmbHkoJnNlbGYpOwp9CgovLyBhcHBsaWVzIHRvIGFsbCBUCmltcGw8VD4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30KfQoKLy8gbm9uLWRlZmF1bHQgaW1wbAovLyBhcHBsaWVzIHRvIGFsbCBgQ2xvbmVgIFQgYW5kIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgaW1wbAppbXBsPFQ6IENsb25lPiBTcGFjZUxsYW1hIGZvciBUIHsKICAgIGZuIGZseSgmc2VsZikge30KfQoKLy8gc2luY2UgYGkzMmAgaXMgY2xvbmUsIHRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHByZXZpb3VzIGltcGxlbWVudGF0aW9uCmltcGwgU3BhY2VMbGFtYSBmb3IgaTMyIHsKICAgIGRlZmF1bHQgZm4gZmx5KCZzZWxmKSB7fQogICAgLy8gZXJyb3I6IGl0ZW0gYGZseWAgaXMgcHJvdmlkZWQgYnkgYW4gYGltcGxgIHRoYXQgc3BlY2lhbGl6ZXMKICAgIC8vICAgICAgICBhbm90aGVyLCBidXQgdGhlIGl0ZW0gaW4gdGhlIHBhcmVudCBgaW1wbGAgaXMgbm90IG1hcmtlZAogICAgLy8gICAgICAgIGBkZWZhdWx0YCBhbmQgc28gaXQgY2Fubm90IGJlIHNwZWNpYWxpemVkLgp9CmBgYAoKU3BlY2lhbGl6YXRpb24gb25seSBhbGxvd3MgeW91IHRvIG92ZXJyaWRlIGBkZWZhdWx0YCBmdW5jdGlvbnMgaW4KaW1wbGVtZW50YXRpb25zLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1hcmsgYWxsIHRoZSBwYXJlbnQgaW1wbGVtZW50YXRpb25zIGFzIGRlZmF1bHQuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCgp0cmFpdCBTcGFjZUxsYW1hIHsKICAgIGZuIGZseSgmc2VsZik7Cn0KCi8vIGFwcGxpZXMgdG8gYWxsIFQKaW1wbDxUPiBTcGFjZUxsYW1hIGZvciBUIHsKICAgIGRlZmF1bHQgZm4gZmx5KCZzZWxmKSB7fSAvLyBUaGlzIGlzIGEgcGFyZW50IGltcGxlbWVudGF0aW9uLgp9CgovLyBhcHBsaWVzIHRvIGFsbCBgQ2xvbmVgIFQ7IG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgaW1wbAppbXBsPFQ6IENsb25lPiBTcGFjZUxsYW1hIGZvciBUIHsKICAgIGRlZmF1bHQgZm4gZmx5KCZzZWxmKSB7fSAvLyBUaGlzIGlzIGEgcGFyZW50IGltcGxlbWVudGF0aW9uIGJ1dCB3YXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBwcmV2aW91c2x5IG5vdCBhIGRlZmF1bHQgb25lLCBjYXVzaW5nIHRoZSBlcnJvcgp9CgovLyBhcHBsaWVzIHRvIGkzMiwgb3ZlcnJpZGVzIHRoZSBwcmV2aW91cyB0d28gaW1wbHMKaW1wbCBTcGFjZUxsYW1hIGZvciBpMzIgewogICAgZm4gZmx5KCZzZWxmKSB7fSAvLyBBbmQgbm93IHRoYXQncyBvayEKfQpgYGAKABj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///wfYCwAAANgL8wiYBACtZCYBAACoCAACBgCpCAEABADEAw4AAAOnCAAEAMQDDgAAAKcIAgUBAtkBAQEA8wgAAagIAAQAxAMOAAACpwgAAQQArwMkAAADpggABACvAyQAAACmCAEBAPMIAAKXBACwAxIAAAICBUUwNTIwAAEfBQAAAAXzCAQArwMkAAAApggBAQH3CAABpwgAmgQA3GQmAQAArQgAAAKaBADcZCYBAAICqwZCb3Jyb3dlZCBkYXRhIGVzY2FwZXMgb3V0c2lkZSBvZiBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyMQpsZXQgbXV0IGxpc3Q6IFZlYzwmc3RyPiA9IFZlYzo6bmV3KCk7CgpsZXQgX2FkZCA9IHxlbDogJnN0cnwgewogICAgbGlzdC5wdXNoKGVsKTsgLy8gZXJyb3I6IGBlbGAgZXNjYXBlcyB0aGUgY2xvc3VyZSBib2R5IGhlcmUKfTsKYGBgCgpBIHR5cGUgYW5ub3RhdGlvbiBvZiBhIGNsb3N1cmUgcGFyYW1ldGVyIGltcGxpZXMgYSBuZXcgbGlmZXRpbWUgZGVjbGFyYXRpb24uCkNvbnNpZGVyIHRvIGRyb3AgaXQsIHRoZSBjb21waWxlciBpcyByZWxpYWJseSBhYmxlIHRvIGluZmVyIHRoZW0uCgpgYGAKbGV0IG11dCBsaXN0OiBWZWM8JnN0cj4gPSBWZWM6Om5ldygpOwoKbGV0IF9hZGQgPSB8ZWx8IHsKICAgIGxpc3QucHVzaChlbCk7Cn07CmBgYAoKU2VlIHRoZSBbQ2xvc3VyZSB0eXBlIGluZmVyZW5jZSBhbmQgYW5ub3RhdGlvbl1bY2xvc3VyZS1pbmZlcmUtYW5ub3RhdGlvbl0gYW5kCltMaWZldGltZSBlbGlzaW9uXVtsaWZldGltZS1lbGlzaW9uXSBzZWN0aW9ucyBvZiB0aGUgQm9vayBmb3IgbW9yZSBkZXRhaWxzLgoKW2Nsb3N1cmUtaW5mZXJlLWFubm90YXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMy0wMS1jbG9zdXJlcy5odG1sI2Nsb3N1cmUtdHlwZS1pbmZlcmVuY2UtYW5kLWFubm90YXRpb24KW2xpZmV0aW1lLWVsaXNpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9saWZldGltZS1lbGlzaW9uLmh0bWwKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8BqwYAAACrBvMImgQA3GQmAQAArAgAAgYArQgBAAQAxAMOAAADqwgABADEAw4AAACrCAIFAQLZAQEBAPMIAAGsCAAEAMQDDgAAAqsIAAEEAK8DJAAAA6oIAAQArwMkAAAAqggBAQDzCAACmQQAsAMSAAACAgVFMDUyMQABHwUAAAAF8wgEAK8DJAAAAKoIAQEB9wgAAasIAJwEAItlJgEAALEIAAACnAQAi2UmAQACAq8EVGhlIGxhbmcgYXR0cmlidXRlIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJjb29raWUiXQpmbiBjb29raWUoKSAtPiAhIHsgLy8gZXJyb3I6IGRlZmluaXRpb24gb2YgYW4gdW5rbm93biBsYW5ndWFnZSBpdGVtOiBgY29va2llYAogICAgbG9vcCB7fQp9CmBgYAoKVGhlIGxhbmcgYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBtYXJraW5nIHNwZWNpYWwgaXRlbXMgdGhhdCBhcmUgYnVpbHQtaW4gdG8KUnVzdCBpdHNlbGYuIFRoaXMgaW5jbHVkZXMgc3BlY2lhbCB0cmFpdHMgKGxpa2UgYENvcHlgIGFuZCBgU2l6ZWRgKSB0aGF0IGFmZmVjdApob3cgdGhlIGNvbXBpbGVyIGJlaGF2ZXMsIGFzIHdlbGwgYXMgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgYXV0b21hdGljYWxseQppbnZva2VkIChzdWNoIGFzIHRoZSBoYW5kbGVyIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gaW5kZXhpbmcgYSBzbGljZSkuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8frwQAAACvBPMInAQAi2UmAQAAsAgAAgYAsQgBAAQAxAMOAAADrwgABADEAw4AAACvCAIFAQLZAQEBAPMIAAGwCAAEAMQDDgAAAq8IAAEEAK8DJAAAA64IAAQArwMkAAAArggBAQDzCAACmwQAsAMSAAACAgVFMDUyMgABHwUAAAAF8wgEAK8DJAAAAK4IAQEB9wgAAa8IAJ4EALplJgEAALUIAAACngQAumUmAQACAo0KQSB2YXJpYWJsZSB3aGljaCByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIGlzIGJlaW5nIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbG9zdXJlCmF0IHRoZSBzYW1lIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI0CmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgbGV0IG11dCBjMSA9IHx8IHNldCh4KTsKICAgIGxldCBtdXQgYzIgPSB8fCBzZXQoeCk7IC8vIGVycm9yIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKVG8gc29sdmUgdGhpcyBpc3N1ZSwgbXVsdGlwbGUgc29sdXRpb25zIGFyZSBhdmFpbGFibGUuIEZpcnN0LCBpcyBpdCByZXF1aXJlZApmb3IgdGhpcyB2YXJpYWJsZSB0byBiZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xvc3VyZSBhdCBhIHRpbWU/IElmIGl0IGlzIHRoZQpjYXNlLCB1c2UgcmVmZXJlbmNlIGNvdW50ZWQgdHlwZXMgc3VjaCBhcyBgUmNgIChvciBgQXJjYCBpZiBpdCBydW5zCmNvbmN1cnJlbnRseSk6CgpgYGAKdXNlIHN0ZDo6cmM6OlJjOwp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICBsZXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KHgpKTsKICAgIGxldCB5ID0gUmM6OmNsb25lKCZ4KTsKICAgIGxldCBtdXQgYzEgPSB8fCB7IGxldCBtdXQgeDIgPSB4LmJvcnJvd19tdXQoKTsgc2V0KCZtdXQgeDIpOyB9OwogICAgbGV0IG11dCBjMiA9IHx8IHsgbGV0IG11dCB4MiA9IHkuYm9ycm93X211dCgpOyBzZXQoJm11dCB4Mik7IH07IC8vIG9rIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKSWYgbm90LCBqdXN0IHJ1biBjbG9zdXJlcyBvbmUgYXQgYSB0aW1lOgoKYGBgCmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgeyAvLyBUaGlzIGJsb2NrIGlzbid0IG5lY2Vzc2FyeSBzaW5jZSBub24tbGV4aWNhbCBsaWZldGltZXMsIGl0J3MganVzdCB0bwogICAgICAvLyBtYWtlIGl0IG1vcmUgY2xlYXIuCiAgICAgICAgbGV0IG11dCBjMSA9IHx8IHNldCgmbXV0ICp4KTsKICAgICAgICBjMSgpOwogICAgfSAvLyBgYzFgIGhhcyBiZWVuIGRyb3BwZWQgaGVyZSBzbyB3ZSdyZSBmcmVlIHRvIHVzZSBgeGAgYWdhaW4hCiAgICBsZXQgbXV0IGMyID0gfHwgc2V0KCZtdXQgKngpOwogICAgYzIoKTsKfQpgYGAKABX///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/jQoAAACNCvMIngQAumUmAQAAtAgAAgYAtQgBAAQAxAMOAAADswgABADEAw4AAACzCAIFAQLZAQEBAPMIAAG0CAAEAMQDDgAAArMIAAEEAK8DJAAAA7IIAAQArwMkAAAAsggBAQDzCAACnQQAsAMSAAACAgVFMDUyNAABHwUAAAAF8wgEAK8DJAAAALIIAQEB9wgAAbMIAKAEAOllJgEAALkIAAACoAQA6WUmAQACApkIQSBjbG9zdXJlIHdhcyB1c2VkIGJ1dCBkaWRuJ3QgaW1wbGVtZW50IHRoZSBleHBlY3RlZCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjUKc3RydWN0IFg7CgpmbiBmb288VD4oXzogVCkge30KZm4gYmFyPFQ6IEZuKHUzMik+KF86IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBYOwogICAgbGV0IGNsb3N1cmUgPSB8X3wgZm9vKHgpOyAvLyBlcnJvcjogZXhwZWN0ZWQgYSBjbG9zdXJlIHRoYXQgaW1wbGVtZW50cwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIGBGbmAgdHJhaXQsIGJ1dCB0aGlzIGNsb3N1cmUgb25seQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW1wbGVtZW50cyBgRm5PbmNlYAogICAgYmFyKGNsb3N1cmUpOwp9CmBgYAoKSW4gdGhlIGV4YW1wbGUgYWJvdmUsIGBjbG9zdXJlYCBpcyBhbiBgRm5PbmNlYCBjbG9zdXJlIHdoZXJlYXMgdGhlIGBiYXJgCmZ1bmN0aW9uIGV4cGVjdGVkIGFuIGBGbmAgY2xvc3VyZS4gSW4gdGhpcyBjYXNlLCBpdCdzIHNpbXBsZSB0byBmaXggdGhlIGlzc3VlLAp5b3UganVzdCBoYXZlIHRvIGltcGxlbWVudCBgQ29weWAgYW5kIGBDbG9uZWAgdHJhaXRzIG9uIGBzdHJ1Y3QgWGAgYW5kIGl0J2xsCmJlIG9rOgoKYGBgCiNbZGVyaXZlKENsb25lLCBDb3B5KV0gLy8gV2UgaW1wbGVtZW50IGBDbG9uZWAgYW5kIGBDb3B5YCB0cmFpdHMuCnN0cnVjdCBYOwoKZm4gZm9vPFQ+KF86IFQpIHt9CmZuIGJhcjxUOiBGbih1MzIpPihfOiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gWDsKICAgIGxldCBjbG9zdXJlID0gfF98IGZvbyh4KTsKICAgIGJhcihjbG9zdXJlKTsgLy8gb2shCn0KYGBgCgpUbyBiZXR0ZXIgdW5kZXJzdGFuZCBob3cgdGhlc2Ugd29yayBpbiBSdXN0LCByZWFkIHRoZSBbQ2xvc3VyZXNdW2Nsb3N1cmVzXQpjaGFwdGVyIG9mIHRoZSBCb29rLgoKW2Nsb3N1cmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTMtMDEtY2xvc3VyZXMuaHRtbAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8PmQgAAACZCPMIoAQA6WUmAQAAuAgAAgYAuQgBAAQAxAMOAAADtwgABADEAw4AAAC3CAIFAQLZAQEBAPMIAAG4CAAEAMQDDgAAArcIAAEEAK8DJAAAA7YIAAQArwMkAAAAtggBAQDzCAACnwQAsAMSAAACAgVFMDUyNQABHwUAAAAF8wgEAK8DJAAAALYIAQEB9wgAAbcIAKIEAJhmJgEAAL0IAAACogQAmGYmAQACAsoEVGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIGRpZmZlcmVkIGZyb20gdGhlIG51bWJlciBvZgplbGVtZW50cyBpbiB0aGUgYXJyYXkgYmVpbmcgbWF0Y2hlZC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjcKbGV0IHIgPSAmWzEsIDIsIDMsIDRdOwptYXRjaCByIHsKICAgICZbYSwgYl0gPT4geyAvLyBlcnJvcjogcGF0dGVybiByZXF1aXJlcyAyIGVsZW1lbnRzIGJ1dCBhcnJheQogICAgICAgICAgICAgICAgIC8vICAgICAgICBoYXMgNAogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgcGF0dGVybiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG1hdGNoZWQKYXJyYXkuIEFkZGl0aW9uYWwgZWxlbWVudHMgY2FuIGJlIG1hdGNoZWQgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIC4uXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wfKBAAAAMoE8wiiBACYZiYBAAC8CAACBgC9CAEABADEAw4AAAO7CAAEAMQDDgAAALsIAgUBAtkBAQEA8wgAAbwIAAQAxAMOAAACuwgAAQQArwMkAAADuggABACvAyQAAAC6CAEBAPMIAAKhBACwAxIAAAICBUUwNTI3AAEfBQAAAAXzCAQArwMkAAAAuggBAQH3CAABuwgApAQAx2YmAQAAwQgAAAKkBADHZiYBAAIC2gVBbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIHJlcXVpcmVkIG1vcmUgZWxlbWVudHMgdGhhbiB3ZXJlIHByZXNlbnQgaW4gdGhlCm1hdGNoZWQgYXJyYXkuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI4CmxldCByID0gJlsxLCAyXTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIGMsIHJlc3QgQCAuLl0gPT4geyAvLyBlcnJvcjogcGF0dGVybiByZXF1aXJlcyBhdCBsZWFzdCAzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZWxlbWVudHMgYnV0IGFycmF5IGhhcyAyCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30sIGM9e30gcmVzdD17Oj99IiwgYSwgYiwgYywgcmVzdCk7CiAgICB9Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgbWF0Y2hlZCBhcnJheSBoYXMgYXQgbGVhc3QgYXMgbWFueSBlbGVtZW50cyBhcyB0aGUgcGF0dGVybgpyZXF1aXJlcy4gWW91IGNhbiBtYXRjaCBhbiBhcmJpdHJhcnkgbnVtYmVyIG9mIHJlbWFpbmluZyBlbGVtZW50cyB3aXRoIGAuLmA6CgpgYGAKbGV0IHIgPSAmWzEsIDIsIDMsIDQsIDVdOwptYXRjaCByIHsKICAgICZbYSwgYiwgYywgcmVzdCBAIC4uXSA9PiB7IC8vIG9rIQogICAgICAgIC8vIHByaW50cyBgYT0xLCBiPTIsIGM9MyByZXN0PVs0LCA1XWAKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSwgYz17fSByZXN0PXs6P30iLCBhLCBiLCBjLCByZXN0KTsKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///x/aBQAAANoF8wikBADHZiYBAADACAACBgDBCAEABADEAw4AAAO/CAAEAMQDDgAAAL8IAgUBAtkBAQEA8wgAAcAIAAQAxAMOAAACvwgAAQQArwMkAAADvggABACvAyQAAAC+CAEBAPMIAAKjBACwAxIAAAICBUUwNTI4AAEfBQAAAAXzCAQArwMkAAAAvggBAQH3CAABvwgApgQA9mYmAQAAxQgAAAKmBAD2ZiYBAAICxANBbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIHdhcyBtYXRjaGVkIGFnYWluc3Qgc29tZSBvdGhlciB0eXBlLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOQpsZXQgcjogZjMyID0gMS4wOwptYXRjaCByIHsKICAgIFthLCBiXSA9PiB7IC8vIGVycm9yOiBleHBlY3RlZCBhbiBhcnJheSBvciBzbGljZSwgZm91bmQgYGYzMmAKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIHBhdHRlcm4gYW5kIHRoZSBleHByZXNzaW9uIGJlaW5nIG1hdGNoZWQgb24gYXJlIG9mIGNvbnNpc3RlbnQKdHlwZXM6CgpgYGAKbGV0IHIgPSBbMS4wLCAyLjBdOwptYXRjaCByIHsKICAgIFthLCBiXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ/EAwAAAMQD8wimBAD2ZiYBAADECAACBgDFCAEABADEAw4AAAPDCAAEAMQDDgAAAMMIAgUBAtkBAQEA8wgAAcQIAAQAxAMOAAACwwgAAQQArwMkAAADwggABACvAyQAAADCCAEBAPMIAAKlBACwAxIAAAICBUUwNTI5AAEfBQAAAAXzCAQArwMkAAAAwggBAQH3CAABwwgAqAQApWcmAQAAyQgAAAKoBAClZyYBAAICtgZBIGJpbmRpbmcgc2hhZG93ZWQgc29tZXRoaW5nIGl0IHNob3VsZG4ndC4KCkEgbWF0Y2ggYXJtIG9yIGEgdmFyaWFibGUgaGFzIGEgbmFtZSB0aGF0IGlzIGFscmVhZHkgdXNlZCBieQpzb21ldGhpbmcgZWxzZSwgZS5nLgoKKiBzdHJ1Y3QgbmFtZQoqIGVudW0gdmFyaWFudAoqIHN0YXRpYwoqIGFzc29jaWF0ZWQgY29uc3RhbnQKClRoaXMgZXJyb3IgbWF5IGFsc28gaGFwcGVuIHdoZW4gYW4gZW51bSB2YXJpYW50ICp3aXRoIGZpZWxkcyogaXMgdXNlZAppbiBhIHBhdHRlcm4sIGJ1dCB3aXRob3V0IGl0cyBmaWVsZHMuCgpgYGBjb21waWxlX2ZhaWwKZW51bSBFbnVtIHsKICAgIFdpdGhGaWVsZChpMzIpCn0KCnVzZSBFbnVtOjoqOwptYXRjaCBXaXRoRmllbGQoMSkgewogICAgV2l0aEZpZWxkID0+IHt9IC8vIGVycm9yOiBtaXNzaW5nIChfKQp9CmBgYAoKTWF0Y2ggYmluZGluZ3MgY2Fubm90IHNoYWRvdyBzdGF0aWNzOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMwCnN0YXRpYyBURVNUOiBpMzIgPSAwOwoKbGV0IHIgPSAxMjM7Cm1hdGNoIHIgewogICAgVEVTVCA9PiB7fSAvLyBlcnJvcjogbmFtZSBvZiBhIHN0YXRpYwp9CmBgYAoKRml4ZWQgZXhhbXBsZXM6CgpgYGAKc3RhdGljIFRFU1Q6IGkzMiA9IDA7CgpsZXQgciA9IDEyMzsKbWF0Y2ggciB7CiAgICBzb21lX3ZhbHVlID0+IHt9IC8vIG9rIQp9CmBgYAoKb3IKCmBgYApjb25zdCBURVNUOiBpMzIgPSAwOyAvLyBjb25zdCwgbm90IHN0YXRpYwoKbGV0IHIgPSAxMjM7Cm1hdGNoIHIgewogICAgVEVTVCA9PiB7fSAvLyBjb25zdCBpcyBvayEKICAgIG90aGVyX3ZhbHVlcyA9PiB7fQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8ftgYAAAC2BvMIqAQApWcmAQAAyAgAAgYAyQgBAAQAxAMOAAADxwgABADEAw4AAADHCAIFAQLZAQEBAPMIAAHICAAEAMQDDgAAAscIAAEEAK8DJAAAA8YIAAQArwMkAAAAxggBAQDzCAACpwQAsAMSAAACAgVFMDUzMAABHwUAAAAF8wgEAK8DJAAAAMYIAQEB9wgAAccIAKoEANRnJgEAAM0IAAACqgQA1GcmAQACAuYFQW4gdW5rbm93biB0dXBsZSBzdHJ1Y3QvdmFyaWFudCBoYXMgYmVlbiB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMQpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBlcnJvciEKbWF0Y2ggQmFyKDEyKSB7CiAgICBCYXIoeCkgPT4ge30gLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpJbiBtb3N0IGNhc2VzLCBpdCdzIGVpdGhlciBhIGZvcmdvdHRlbiBpbXBvcnQgb3IgYSB0eXBvLiBIb3dldmVyLCBsZXQncyBsb29rIGF0CmhvdyB5b3UgY2FuIGhhdmUgc3VjaCBhIHR5cGU6CgpgYGBlZGl0aW9uMjAxOApzdHJ1Y3QgVHlwZSh1MzIpOyAvLyB0aGlzIGlzIGEgdHVwbGUgc3RydWN0CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwgLy8gdGhpcyBpcyBhIHR1cGxlIHZhcmlhbnQKfQoKdXNlIEZvbzo6KjsgLy8gVG8gdXNlIEZvbydzIHZhcmlhbnQgZGlyZWN0bHksIHdlIG5lZWQgdG8gaW1wb3J0IHRoZW0gaW4KICAgICAgICAgICAgLy8gdGhlIHNjb3BlLgpgYGAKCkVpdGhlciB3YXksIGl0IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBvdXIgcHJldmlvdXMgY29kZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwKfQp1c2UgRm9vOjoqOwoKbGV0IFR5cGUoeCkgPSBUeXBlKDEyKTsgLy8gb2shCm1hdGNoIFR5cGUoMTIpIHsKICAgIFR5cGUoeCkgPT4ge30gLy8gb2shCiAgICBfID0+IHt9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wfmBQAAAOYF8wiqBADUZyYBAADMCAACBgDNCAEABADEAw4AAAPLCAAEAMQDDgAAAMsIAgUBAtkBAQEA8wgAAcwIAAQAxAMOAAACywgAAQQArwMkAAADyggABACvAyQAAADKCAEBAPMIAAKpBACwAxIAAAICBUUwNTMxAAEfBQAAAAXzCAQArwMkAAAAyggBAQH3CAABywgArAQAg2gmAQAA0QgAAAKsBACDaCYBAAICuQVQYXR0ZXJuIGFybSBkaWQgbm90IG1hdGNoIGV4cGVjdGVkIGtpbmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTMyCmVudW0gU3RhdGUgewogICAgU3VjY2VlZGVkLAogICAgRmFpbGVkKFN0cmluZyksCn0KCmZuIHByaW50X29uX2ZhaWx1cmUoc3RhdGU6ICZTdGF0ZSkgewogICAgbWF0Y2ggKnN0YXRlIHsKICAgICAgICAvLyBlcnJvcjogZXhwZWN0ZWQgdW5pdCBzdHJ1Y3QsIHVuaXQgdmFyaWFudCBvciBjb25zdGFudCwgZm91bmQgdHVwbGUKICAgICAgICAvLyAgICAgICAgdmFyaWFudCBgU3RhdGU6OkZhaWxlZGAKICAgICAgICBTdGF0ZTo6RmFpbGVkID0+IHByaW50bG4hKCJGYWlsZWQiKSwKICAgICAgICBfID0+ICgpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoZSBtYXRjaCBhcm0ga2luZCBpcyB0aGUgc2FtZSBhcyB0aGUgZXhwcmVzc2lvbgptYXRjaGVkLgoKRml4ZWQgZXhhbXBsZToKCmBgYAplbnVtIFN0YXRlIHsKICAgIFN1Y2NlZWRlZCwKICAgIEZhaWxlZChTdHJpbmcpLAp9CgpmbiBwcmludF9vbl9mYWlsdXJlKHN0YXRlOiAmU3RhdGUpIHsKICAgIG1hdGNoICpzdGF0ZSB7CiAgICAgICAgU3RhdGU6OkZhaWxlZChyZWYgbXNnKSA9PiBwcmludGxuISgiRmFpbGVkIHdpdGgge30iLCBtc2cpLAogICAgICAgIF8gPT4gKCkKICAgIH0KfQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8BuQUAAAC5BfMIrAQAg2gmAQAA0AgAAgYA0QgBAAQAxAMOAAADzwgABADEAw4AAADPCAIFAQLZAQEBAPMIAAHQCAAEAMQDDgAAAs8IAAEEAK8DJAAAA84IAAQArwMkAAAAzggBAQDzCAACqwQAsAMSAAACAgVFMDUzMgABHwUAAAAF8wgEAK8DJAAAAM4IAQEB9wgAAc8IAK4EALJoJgEAANUIAAACrgQAsmgmAQACAuAEQW4gaXRlbSB3aGljaCBpc24ndCBhIHVuaXQgc3RydWN0LCBhIHZhcmlhbnQsIG5vciBhIGNvbnN0YW50IGhhcyBiZWVuIHVzZWQgYXMgYQptYXRjaCBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMwpzdHJ1Y3QgVG9ydG9pc2U7CgppbXBsIFRvcnRvaXNlIHsKICAgIGZuIHR1cnRsZSgmc2VsZikgLT4gdTMyIHsgMCB9Cn0KCm1hdGNoIDB1MzIgewogICAgVG9ydG9pc2U6OnR1cnRsZSA9PiB7fSAvLyBFcnJvciEKICAgIF8gPT4ge30KfQppZiBsZXQgVG9ydG9pc2U6OnR1cnRsZSA9IDB1MzIge30gLy8gU2FtZSBlcnJvciEKYGBgCgpJZiB5b3Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IGEgdmFsdWUgcmV0dXJuZWQgYnkgYSBtZXRob2QsIHlvdSBuZWVkIHRvIGJpbmQgdGhlCnZhbHVlIGZpcnN0OgoKYGBgCnN0cnVjdCBUb3J0b2lzZTsKCmltcGwgVG9ydG9pc2UgewogICAgZm4gdHVydGxlKCZzZWxmKSAtPiB1MzIgeyAwIH0KfQoKbWF0Y2ggMHUzMiB7CiAgICB4IGlmIHggPT0gVG9ydG9pc2UudHVydGxlKCkgPT4ge30gLy8gQm91bmQgaW50byBgeGAgdGhlbiB3ZSBjb21wYXJlIGl0IQogICAgXyA9PiB7fQp9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8P4AQAAADgBPMIrgQAsmgmAQAA1AgAAgYA1QgBAAQAxAMOAAAD0wgABADEAw4AAADTCAIFAQLZAQEBAPMIAAHUCAAEAMQDDgAAAtMIAAEEAK8DJAAAA9IIAAQArwMkAAAA0ggBAQDzCAACrQQAsAMSAAACAgVFMDUzMwABHwUAAAAF8wgEAK8DJAAAANIIAQEB9wgAAdMIALAEAOFoJgEAANkIAAACsAQA4WgmAQACArMFVGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNAojW2lubGluZSgpXSAvLyBlcnJvcjogZXhwZWN0ZWQgb25lIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIHBhcmVudGhlc2l6ZWQgYGlubGluZWAgYXR0cmlidXRlIHJlcXVpcmVzIHRoZSBwYXJhbWV0ZXIgdG8gYmUgc3BlY2lmaWVkOgoKYGBgCiNbaW5saW5lKGFsd2F5cyldCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKb3I6CgpgYGAKI1tpbmxpbmUobmV2ZXIpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkFsdGVybmF0aXZlbHksIGEgcGFyZW4tbGVzcyB2ZXJzaW9uIG9mIHRoZSBhdHRyaWJ1dGUgbWF5IGJlIHVzZWQgdG8gaGludCB0aGUKY29tcGlsZXIgYWJvdXQgaW5saW5pbmcgb3Bwb3J0dW5pdHk6CgpgYGAKI1tpbmxpbmVdCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGlubGluZWAgYXR0cmlidXRlXVtpbmxpbmUtYXR0cmlidXRlXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbaW5saW5lLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sI3RoZS1pbmxpbmUtYXR0cmlidXRlCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8DswUAAACzBfMIsAQA4WgmAQAA2AgAAgYA2QgBAAQAxAMOAAAD1wgABADEAw4AAADXCAIFAQLZAQEBAPMIAAHYCAAEAMQDDgAAAtcIAAEEAK8DJAAAA9YIAAQArwMkAAAA1ggBAQDzCAACrwQAsAMSAAACAgVFMDUzNAABHwUAAAAF8wgEAK8DJAAAANYIAQEB9wgAAdcIALIEAJBpJgEAAN0IAAACsgQAkGkmAQACAugEQW4gdW5rbm93biBhcmd1bWVudCB3YXMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzUKI1tpbmxpbmUodW5rbm93bildIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSBvbmx5IHN1cHBvcnRzIHR3byBhcmd1bWVudHM6CgogKiBhbHdheXMKICogbmV2ZXIKCkFsbCBvdGhlciBhcmd1bWVudHMgZ2l2ZW4gdG8gdGhlIGBpbmxpbmVgIGF0dHJpYnV0ZSB3aWxsIHJldHVybiB0aGlzIGVycm9yLgpFeGFtcGxlOgoKYGBgCiNbaW5saW5lKG5ldmVyKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGlubGluZWAgQXR0cmlidXRlXVtpbmxpbmUtYXR0cmlidXRlXSBzZWN0aW9uCm9mIHRoZSBSZWZlcmVuY2UuCgpbaW5saW5lLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sI3RoZS1pbmxpbmUtYXR0cmlidXRlCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8f6AQAAADoBPMIsgQAkGkmAQAA3AgAAgYA3QgBAAQAxAMOAAAD2wgABADEAw4AAADbCAIFAQLZAQEBAPMIAAHcCAAEAMQDDgAAAtsIAAEEAK8DJAAAA9oIAAQArwMkAAAA2ggBAQDzCAACsQQAsAMSAAACAgVFMDUzNQABHwUAAAAF8wgEAK8DJAAAANoIAQEB9wgAAdsIALQEAL9pJgEAAOEIAAACtAQAv2kmAQACAqkEVGhlIGBub3RgIGNmZy1wcmVkaWNhdGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzYKI1tjZmcobm90KCkpXSAvLyBlcnJvcjogZXhwZWN0ZWQgMSBjZmctcGF0dGVybgpwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpUaGUgYG5vdGAgcHJlZGljYXRlIGV4cGVjdHMgb25lIGNmZy1wYXR0ZXJuLiBFeGFtcGxlOgoKYGBgCiNbY2ZnKG5vdCh0YXJnZXRfb3MgPSAibGludXgiKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGNmZ2AgYXR0cmlidXRlLCByZWFkIHRoZSBzZWN0aW9uIG9uCltDb25kaXRpb25hbCBDb21waWxhdGlvbl1bY29uZGl0aW9uYWwtY29tcGlsYXRpb25dIGluIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pBAAAAKkE8wi0BAC/aSYBAADgCAACBgDhCAEABADEAw4AAAPfCAAEAMQDDgAAAN8IAgUBAtkBAQEA8wgAAeAIAAQAxAMOAAAC3wgAAQQArwMkAAAD3ggABACvAyQAAADeCAEBAPMIAAKzBACwAxIAAAICBUUwNTM2AAEfBQAAAAXzCAQArwMkAAAA3ggBAQH3CAAB3wgAtgQA7mkmAQAA5QgAAAK2BADuaSYBAAIC7ARBbiB1bmtub3duIHByZWRpY2F0ZSB3YXMgdXNlZCBpbnNpZGUgdGhlIGBjZmdgIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzcKI1tjZmcodW5rbm93bigpKV0gLy8gZXJyb3I6IGludmFsaWQgcHJlZGljYXRlIGB1bmtub3duYApwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpUaGUgYGNmZ2AgYXR0cmlidXRlIHN1cHBvcnRzIG9ubHkgdGhyZWUga2luZHMgb2YgcHJlZGljYXRlczoKCiAqIGFueQogKiBhbGwKICogbm90CgpFeGFtcGxlOgoKYGBgCiNbY2ZnKG5vdCh0YXJnZXRfb3MgPSAibGludXgiKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KCnB1YiBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYGNmZ2AgYXR0cmlidXRlLCByZWFkIHRoZSBzZWN0aW9uIG9uCltDb25kaXRpb25hbCBDb21waWxhdGlvbl1bY29uZGl0aW9uYWwtY29tcGlsYXRpb25dIGluIHRoZSBSZWZlcmVuY2UuCgpbY29uZGl0aW9uYWwtY29tcGlsYXRpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9jb25kaXRpb25hbC1jb21waWxhdGlvbi5odG1sCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////A+wEAAAA7ATzCLYEAO5pJgEAAOQIAAIGAOUIAQAEAMQDDgAAA+MIAAQAxAMOAAAA4wgCBQEC2QEBAQDzCAAB5AgABADEAw4AAALjCAABBACvAyQAAAPiCAAEAK8DJAAAAOIIAQEA8wgAArUEALADEgAAAgIFRTA1MzcAAR8FAAAABfMIBACvAyQAAADiCAEBAfcIAAHjCAC4BACdaiYBAADpCAAAArgEAJ1qJgEAAgLBBEF0dHJpYnV0ZSBjb250YWlucyBzYW1lIG1ldGEgaXRlbSBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzgKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIG5vdGU9IkZpcnN0IGRlcHJlY2F0aW9uIG5vdGUuIiwKICAgIG5vdGU9IlNlY29uZCBkZXByZWNhdGlvbiBub3RlLiIgLy8gZXJyb3I6IG11bHRpcGxlIHNhbWUgbWV0YSBpdGVtCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gRWFjaCBrZXkgbWF5IG9ubHkgYmUKdXNlZCBvbmNlIGluIGVhY2ggYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCByZW1vdmUgYWxsIGJ1dCBvbmUgb2YgdGhlIG1ldGEgaXRlbXMgd2l0aCB0aGUgc2FtZSBrZXkuCgpFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJGaXJzdCBkZXByZWNhdGlvbiBub3RlLiIKKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQHBBAAAAMEE8wi4BACdaiYBAADoCAACBgDpCAEABADEAw4AAAPnCAAEAMQDDgAAAOcIAgUBAtkBAQEA8wgAAegIAAQAxAMOAAAC5wgAAQQArwMkAAAD5ggABACvAyQAAADmCAEBAPMIAAK3BACwAxIAAAICBUUwNTM4AAEfBQAAAAXzCAQArwMkAAAA5ggBAQH3CAAB5wgAugQAzGomAQAA7QgAAAK6BADMaiYBAAIC2wlBbiBpbnZhbGlkIG1ldGEtaXRlbSB3YXMgdXNlZCBpbnNpZGUgYW4gYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzOQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbZGVwcmVjYXRlZChub3RlKV0gLy8gZXJyb3IhCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJkZXByZWNhdGVkX2ZuIiwgaXNzdWUgPSAiMTIzIildCmZuIGRlcHJlY2F0ZWQoKSB7fQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX3N0cnVjdCIsIGlzc3VlKV0gLy8gZXJyb3IhCnN0cnVjdCBVbnN0YWJsZTsKCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9zdHJ1Y3QiLCBzaW5jZSldIC8vIGVycm9yIQpzdHJ1Y3QgU3RhYmxlOwoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4KVG8gZml4IHRoZXNlIGlzc3VlcyB5b3UgbmVlZCB0byBnaXZlIHJlcXVpcmVkIGtleS12YWx1ZSBwYWlycy4KCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbZGVwcmVjYXRlZChzaW5jZSA9ICIxLjM5LjAiLCBub3RlID0gInJlYXNvbiIpXSAvLyBvayEKI1t1bnN0YWJsZShmZWF0dXJlID0gImRlcHJlY2F0ZWRfZm4iLCBpc3N1ZSA9ICIxMjMiKV0KZm4gZGVwcmVjYXRlZCgpIHt9CgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfc3RydWN0IiwgaXNzdWUgPSAiMTIzIildIC8vIG9rIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfZm4iLCBpc3N1ZSA9ICIxMjQiKV0gLy8gb2shCmNvbnN0IGZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX3N0cnVjdCIsIHNpbmNlID0gIjEuMzkuMCIpXSAvLyBvayEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4zOS4wIildIC8vIG9rIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKABT///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////P9sJAAAA2wnzCLoEAMxqJgEAAOwIAAIGAO0IAQAEAMQDDgAAA+sIAAQAxAMOAAAA6wgCBQEC2QEBAQDzCAAB7AgABADEAw4AAALrCAABBACvAyQAAAPqCAAEAK8DJAAAAOoIAQEA8wgAArkEALADEgAAAgIFRTA1MzkAAR8FAAAABfMIBACvAyQAAADqCAEBAfcIAAHrCAC8BAD7aiYBAADxCAAAArwEAPtqJgEAAgLoBUFuIHVua25vd24gbWV0YSBpdGVtIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0MQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgLy8gZXJyb3I6IHVua25vd24gbWV0YSBpdGVtCiAgICByZWFzb249IkV4YW1wbGUgaW52YWxpZCBtZXRhIGl0ZW0uIFNob3VsZCBiZSAnbm90ZSciKQpdCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gVGhlIGtleXMgcHJvdmlkZWQKbXVzdCBiZSBvbmUgb2YgdGhlIHZhbGlkIGtleXMgZm9yIHRoZSBzcGVjaWZpZWQgYXR0cmlidXRlLgoKVG8gZml4IHRoZSBwcm9ibGVtLCBlaXRoZXIgcmVtb3ZlIHRoZSB1bmtub3duIG1ldGEgaXRlbSwgb3IgcmVuYW1lIGl0IGlmIHlvdQpwcm92aWRlZCB0aGUgd3JvbmcgbmFtZS4KCkluIHRoZSBlcnJvbmVvdXMgY29kZSBleGFtcGxlIGFib3ZlLCB0aGUgd3JvbmcgbmFtZSB3YXMgcHJvdmlkZWQsIHNvIGNoYW5naW5nCnRvIGEgY29ycmVjdCBvbmUgaXQgd2lsbCBmaXggdGhlIGVycm9yLiBFeGFtcGxlOgoKYGBgCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJUaGlzIGlzIGEgdmFsaWQgbWV0YSBpdGVtIGZvciB0aGUgZGVwcmVjYXRlZCBhdHRyaWJ1dGUuIgopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////x/oBQAAAOgF8wi8BAD7aiYBAADwCAACBgDxCAEABADEAw4AAAPvCAAEAMQDDgAAAO8IAgUBAtkBAQEA8wgAAfAIAAQAxAMOAAAC7wgAAQQArwMkAAAD7ggABACvAyQAAADuCAEBAPMIAAK7BACwAxIAAAICBUUwNTQxAAEfBQAAAAXzCAQArwMkAAAA7ggBAQH3CAAB7wgAvgQAqmsmAQAA9QgAAAK+BACqayYBAAICwApUaGUgYHNpbmNlYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDIKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShmZWF0dXJlID0gIl9zdGFibGVfZm4iKV0gLy8gaW52YWxpZApmbiBfc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9jb25zdF9mbiIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF9zdGFibGVfY29uc3RfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIsIHNpbmNlID0gIjAuMS4wIildCiNbZGVwcmVjYXRlZCgKICAgIG5vdGUgPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBpbnZhbGlkCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYHNpbmNlYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9mbiIsIHNpbmNlID0gIjEuMC4wIildIC8vIG9rIQpmbiBfc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9jb25zdF9mbiIsIHNpbmNlID0gIjEuMC4wIildIC8vIG9rIQpjb25zdCBmbiBfc3RhYmxlX2NvbnN0X2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iLCBzaW5jZSA9ICIwLjEuMCIpXQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMCIsCiAgICBub3RlID0gImV4cGxhbmF0aW9uIGZvciBkZXByZWNhdGlvbiIKKV0gLy8gb2shCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAFv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQDACgAAAMAK8wi+BACqayYBAAD0CAACBgD1CAEABADEAw4AAAPzCAAEAMQDDgAAAPMIAgUBAtkBAQEA8wgAAfQIAAQAxAMOAAAC8wgAAQQArwMkAAAD8ggABACvAyQAAADyCAEBAPMIAAK9BACwAxIAAAICBUUwNTQyAAEfBQAAAAXzCAQArwMkAAAA8ggBAQH3CAAB8wgAwAQA2WsmAQAA+QgAAALABADZayYBAAICzwdUaGUgYG5vdGVgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0MwojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKHNpbmNlID0gIjAuMS4wIiwgZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIpXQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMCIKKV0gLy8gaW52YWxpZApmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBub3RlYCBmaWVsZC4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKHNpbmNlID0gIjAuMS4wIiwgZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIpXQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMCIsCiAgICBub3RlID0gImV4cGxhbmF0aW9uIGZvciBkZXByZWNhdGlvbiIKKV0gLy8gb2shCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//Ac8HAAAAzwfzCMAEANlrJgEAAPgIAAIGAPkIAQAEAMQDDgAAA/cIAAQAxAMOAAAA9wgCBQEC2QEBAQDzCAAB+AgABADEAw4AAAL3CAABBACvAyQAAAP2CAAEAK8DJAAAAPYIAQEA8wgAAr8EALADEgAAAgIFRTA1NDMAAR8FAAAABfMIBACvAyQAAAD2CAEBAfcIAAH3CADCBACIbCYBAAD9CAAAAsIEAIhsJgEAAgL1Bk11bHRpcGxlIHN0YWJpbGl0eSBhdHRyaWJ1dGVzIHdlcmUgZGVjbGFyZWQgb24gdGhlIHNhbWUgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDQKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJydXN0MSIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJydXN0MSIsIHNpbmNlID0gIjEuMC4wIildCiNbc3RhYmxlKGZlYXR1cmUgPSAidGVzdCIsIHNpbmNlID0gIjIuMC4wIildIC8vIGludmFsaWQKZm4gZm9vKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgZW5zdXJlIHRoYXQgZWFjaCBpdGVtIGhhcyBhdCBtb3N0IG9uZSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAicnVzdDEiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAidGVzdCIsIHNpbmNlID0gIjIuMC4wIildIC8vIG9rIQpmbiBmb28oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8P9QYAAAD1BvMIwgQAiGwmAQAA/AgAAgYA/QgBAAQAxAMOAAAD+wgABADEAw4AAAD7CAIFAQLZAQEBAPMIAAH8CAAEAMQDDgAAAvsIAAEEAK8DJAAAA/oIAAQArwMkAAAA+ggBAQDzCAACwQQAsAMSAAACAgVFMDU0NAABHwUAAAAF8wgEAK8DJAAAAPoIAQEB9wgAAfsIAMQEALdsJgEAAIEJAAACxAQAt2wmAQACAskIVGhlIGBpc3N1ZWAgdmFsdWUgaXMgaW5jb3JyZWN0IGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDUKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMCIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgYSBjb3JyZWN0IHZhbHVlIGluIHRoZSBgaXNzdWVgIGZpZWxkLgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gb2shCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2NvbnN0X2ZuIiwgaXNzdWUgPSAiMSIpXSAvLyBvayEKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wPJCAAAAMkI8wjEBAC3bCYBAACACQACBgCBCQEABADEAw4AAAP/CAAEAMQDDgAAAP8IAgUBAtkBAQEA8wgAAYAJAAQAxAMOAAAC/wgAAQQArwMkAAAD/ggABACvAyQAAAD+CAEBAPMIAALDBACwAxIAAAICBUUwNTQ1AAEfBQAAAAXzCAQArwMkAAAA/ggBAQH3CAAB/wgAxgQA5mwmAQAAhQkAAALGBADmbCYBAAICwwdUaGUgYGZlYXR1cmVgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0NgojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoaXNzdWUgPSAibm9uZSIpXSAvLyBpbnZhbGlkCmZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKHNpbmNlID0gIjEuMC4wIildIC8vIGludmFsaWQKZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYGZlYXR1cmVgIGZpZWxkLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX2ZuIiwgaXNzdWUgPSAibm9uZSIpXSAvLyBvayEKZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfZm4iLCBzaW5jZSA9ICIxLjAuMCIpXSAvLyBvayEKZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQfDBwAAAMMH8wjGBADmbCYBAACECQACBgCFCQEABADEAw4AAAODCQAEAMQDDgAAAIMJAgUBAtkBAQEA8wgAAYQJAAQAxAMOAAACgwkAAQQArwMkAAADggkABACvAyQAAACCCQEBAPMIAALFBACwAxIAAAICBUUwNTQ2AAEfBQAAAAXzCAQArwMkAAAAggkBAQH3CAABgwkAyAQAlW0mAQAAiQkAAALIBACVbSYBAAICpwhUaGUgYGlzc3VlYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDcKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIildIC8vIGludmFsaWQKZm4gX3Vuc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoZmVhdHVyZSA9ICJfdW5zdGFibGVfY29uc3RfZm4iKV0gLy8gaW52YWxpZApjb25zdCBmbiBfdW5zdGFibGVfY29uc3RfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgaXNzdWVgIGZpZWxkLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gb2shCmZuIF91bnN0YWJsZV9mbigpIHt9CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKAogICAgZmVhdHVyZSA9ICJfdW5zdGFibGVfY29uc3RfZm4iLAogICAgaXNzdWUgPSAibm9uZSIKKV0gLy8gb2shCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8PpwgAAACnCPMIyAQAlW0mAQAAiAkAAgYAiQkBAAQAxAMOAAADhwkABADEAw4AAACHCQIFAQLZAQEBAPMIAAGICQAEAMQDDgAAAocJAAEEAK8DJAAAA4YJAAQArwMkAAAAhgkBAQDzCAACxwQAsAMSAAACAgVFMDU0NwABHwUAAAAF8wgEAK8DJAAAAIYJAQEB9wgAAYcJAMoEAMRtJgEAAI0JAAACygQAxG0mAQACAooIQSBgZGVwcmVjYXRlZGAgYXR0cmlidXRlIHdhc24ndCBwYWlyZWQgd2l0aCBhIGBzdGFibGVgL2B1bnN0YWJsZWAgYXR0cmlidXRlIHdpdGgKYCMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldYCBlbmFibGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0OQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4xIiwKICAgIG5vdGUgPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBpbnZhbGlkCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gYWRkIGFsc28gYW4gYXR0cmlidXRlIGBzdGFibGVgIG9yIGB1bnN0YWJsZWAuCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMSIsCiAgICBub3RlID0gImV4cGxhbmF0aW9uIGZvciBkZXByZWNhdGlvbiIKKV0gLy8gb2shCmZuIF9kZXByZWNhdGVkX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/B4oIAAAAigjzCMoEAMRtJgEAAIwJAAIGAI0JAQAEAMQDDgAAA4sJAAQAxAMOAAAAiwkCBQEC2QEBAQDzCAABjAkABADEAw4AAAKLCQABBACvAyQAAAOKCQAEAK8DJAAAAIoJAQEA8wgAAskEALADEgAAAgIFRTA1NDkAAR8FAAAABfMIBACvAyQAAACKCQEBAfcIAAGLCQDMBADzbSYBAACRCQAAAswEAPNtJgEAAgKuAyMjIyMgTm90ZTogdGhpcyBl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aWNvbi4KClsiQWx0ZXJuYXRpdmUgUmVwcmVzZW50YXRpb25zIiBzZWN0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ub21pY29uL290aGVyLXJlcHJzLmh0bWwKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BD4QFAAAAhAXzCNAEANFuJgEAAJgJAAIGAJkJAQAEAMQDDgAAA5cJAAQAxAMOAAAAlwkCBQEC2QEBAQDzCAABmAkABADEAw4AAAKXCQABBACvAyQAAAOWCQAEAK8DJAAAAJYJAQEA8wgAAs8EALADEgAAAgIFRTA1NTIAAR8FAAAABfMIBACvAyQAAACWCQEBAfcIAAGXCQDSBACAbyYBAACdCQAAAtIEAIBvJgEAAgLKA0ZlYXR1cmUgYXR0cmlidXRlcyBhcmUgb25seSBhbGxvd2VkIG9uIHRoZSBuaWdodGx5IHJlbGVhc2UgY2hhbm5lbC4gU3RhYmxlIG9yCmJldGEgY29tcGlsZXJzIHdpbGwgbm90IGNvbXBseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGRlcGVuZHMgb24gcmVsZWFzZSBjaGFubmVsKQojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXSAvLyBlcnJvcjogYCMhW2ZlYXR1cmVdYCBtYXkgbm90IGJlIHVzZWQgb24gdGhlCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzdGFibGUgcmVsZWFzZSBjaGFubmVsCmBgYAoKSWYgeW91IG5lZWQgdGhlIGZlYXR1cmUsIG1ha2Ugc3VyZSB0byB1c2UgYSBuaWdodGx5IHJlbGVhc2Ugb2YgdGhlIGNvbXBpbGVyCihidXQgYmUgd2FybmVkIHRoYXQgdGhlIGZlYXR1cmUgbWF5IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBpbiB0aGUgZnV0dXJlKS4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wfKAwAAAMoD8wjSBACAbyYBAACcCQACBgCdCQEABADEAw4AAAObCQAEAMQDDgAAAJsJAgUBAtkBAQEA8wgAAZwJAAQAxAMOAAACmwkAAQQArwMkAAADmgkABACvAyQAAACaCQEBAPMIAALRBACwAxIAAAICBUUwNTU0AAEfBQAAAAXzCAQArwMkAAAAmgkBAQH3CAABmwkA1AQAr28mAQAAoQkAAALUBACvbyYBAAIC6gJUaGUgYGZlYXR1cmVgIGF0dHJpYnV0ZSB3YXMgYmFkbHkgZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1NgojIVtmZWF0dXJlKGZvb19iYXJfYmF6LCBmb28oYmFyKSwgZm9vID0gImJheiIsIGZvbyldIC8vIGVycm9yIQojIVtmZWF0dXJlXSAvLyBlcnJvciEKIyFbZmVhdHVyZSA9ICJmb28iXSAvLyBlcnJvciEKYGBgCgpUaGUgYGZlYXR1cmVgIGF0dHJpYnV0ZSBvbmx5IGFjY2VwdCBhICJmZWF0dXJlIGZsYWciIGFuZCBjYW4gb25seSBiZSB1c2VkIG9uCm5pZ2h0bHkuIEV4YW1wbGU6CgpgYGBpZ25vcmUgKG9ubHkgd29ya3MgaW4gbmlnaHRseSkKIyFbZmVhdHVyZShmbGFnKV0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qAgAAAOoC8wjUBACvbyYBAACgCQACBgChCQEABADEAw4AAAOfCQAEAMQDDgAAAJ8JAgUBAtkBAQEA8wgAAaAJAAQAxAMOAAACnwkAAQQArwMkAAADngkABACvAyQAAACeCQEBAPMIAALTBACwAxIAAAICBUUwNTU2AAEfBQAAAAXzCAQArwMkAAAAngkBAQH3CAABnwkA1gQA3m8mAQAApQkAAALWBADebyYBAAIC1gFBIGZlYXR1cmUgYXR0cmlidXRlIG5hbWVkIGEgZmVhdHVyZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU3CiMhW2ZlYXR1cmUobWFuYWdlZF9ib3hlcyldIC8vIGVycm9yOiBmZWF0dXJlIGhhcyBiZWVuIHJlbW92ZWQKYGBgCgpEZWxldGUgdGhlIG9mZmVuZGluZyBmZWF0dXJlIGF0dHJpYnV0ZS4KAAT///////////8B////////////Af///////////wH///8B1gEAAADWAfMI1gQA3m8mAQAApAkAAgYApQkBAAQAxAMOAAADowkABADEAw4AAACjCQIFAQLZAQEBAPMIAAGkCQAEAMQDDgAAAqMJAAEEAK8DJAAAA6IJAAQArwMkAAAAogkBAQDzCAAC1QQAsAMSAAACAgVFMDU1NwABHwUAAAAF8wgEAK8DJAAAAKIJAQEB9wgAAaMJANgEAI1wJgEAAKkJAAAC2AQAjXAmAQACAqUDQW4gdW5rbm93biBmaWVsZCB3YXMgc3BlY2lmaWVkIGludG8gYW4gZW51bSdzIHN0cnVjdHVyZSB2YXJpYW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1OQplbnVtIEZpZWxkIHsKICAgIEZvb2wgeyB4OiB1MzIgfSwKfQoKbGV0IHMgPSBGaWVsZDo6Rm9vbCB7IGpva2U6IDAgfTsKLy8gZXJyb3I6IHN0cnVjdCB2YXJpYW50IGBGaWVsZDo6Rm9vbGAgaGFzIG5vIGZpZWxkIG5hbWVkIGBqb2tlYApgYGAKClZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBmaWVsZCdzIG5hbWUgb3IgdGhhdCB0aGUgZmllbGQgZXhpc3RzLiBFeGFtcGxlOgoKYGBgCmVudW0gRmllbGQgewogICAgRm9vbCB7IGpva2U6IHUzMiB9LAp9CgpsZXQgcyA9IEZpZWxkOjpGb29sIHsgam9rZTogMCB9OyAvLyBvayEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8DpQMAAAClA/MI2AQAjXAmAQAAqAkAAgYAqQkBAAQAxAMOAAADpwkABADEAw4AAACnCQIFAQLZAQEBAPMIAAGoCQAEAMQDDgAAAqcJAAEEAK8DJAAAA6YJAAQArwMkAAAApgkBAQDzCAAC1wQAsAMSAAACAgVFMDU1OQABHwUAAAAF8wgEAK8DJAAAAKYJAQEB9wgAAacJANoEALxwJgEAAK0JAAAC2gQAvHAmAQACAqQDQW4gdW5rbm93biBmaWVsZCB3YXMgc3BlY2lmaWVkIGludG8gYSBzdHJ1Y3R1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTYwCnN0cnVjdCBTaW1iYSB7CiAgICBtb3RoZXI6IHUzMiwKfQoKbGV0IHMgPSBTaW1iYSB7IG1vdGhlcjogMSwgZmF0aGVyOiAwIH07Ci8vIGVycm9yOiBzdHJ1Y3R1cmUgYFNpbWJhYCBoYXMgbm8gZmllbGQgbmFtZWQgYGZhdGhlcmAKYGBgCgpWZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlIGZpZWxkIGV4aXN0cy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU2ltYmEgewogICAgbW90aGVyOiB1MzIsCiAgICBmYXRoZXI6IHUzMiwKfQoKbGV0IHMgPSBTaW1iYSB7IG1vdGhlcjogMSwgZmF0aGVyOiAwIH07IC8vIG9rIQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wGkAwAAAKQD8wjaBAC8cCYBAACsCQACBgCtCQEABADEAw4AAAOrCQAEAMQDDgAAAKsJAgUBAtkBAQEA8wgAAawJAAQAxAMOAAACqwkAAQQArwMkAAADqgkABACvAyQAAACqCQEBAPMIAALZBACwAxIAAAICBUUwNTYwAAEfBQAAAAXzCAQArwMkAAAAqgkBAQH3CAABqwkA3AQA63AmAQAAsQkAAALcBADrcCYBAAICkgRBIG5vbi1pZGVudCBvciBub24td2lsZGNhcmQgcGF0dGVybiBoYXMgYmVlbiB1c2VkIGFzIGEgcGFyYW1ldGVyIG9mIGEgZnVuY3Rpb24KcG9pbnRlciB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MQp0eXBlIEExID0gZm4obXV0IHBhcmFtOiB1OCk7IC8vIGVycm9yIQp0eXBlIEEyID0gZm4oJnBhcmFtOiB1MzIpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIGFuIGFsaWFzIG92ZXIgYSBmdW5jdGlvbiB0eXBlLCB5b3UgY2Fubm90IGUuZy4gZGVub3RlIGEgcGFyYW1ldGVyIGFzCmJlaW5nIG11dGFibGUuCgpUbyBmaXggdGhlIGlzc3VlLCByZW1vdmUgcGF0dGVybnMgKGBfYCBpcyBhbGxvd2VkIHRob3VnaCkuIEV4YW1wbGU6CgpgYGAKdHlwZSBBMSA9IGZuKHBhcmFtOiB1OCk7IC8vIG9rIQp0eXBlIEEyID0gZm4oXzogdTMyKTsgLy8gb2shCmBgYAoKWW91IGNhbiBhbHNvIG9taXQgdGhlIHBhcmFtZXRlciBuYW1lOgoKYGBgCnR5cGUgQTMgPSBmbihpMTYpOyAvLyBvayEKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SBAAAAJIE8wjcBADrcCYBAACwCQACBgCxCQEABADEAw4AAAOvCQAEAMQDDgAAAK8JAgUBAtkBAQEA8wgAAbAJAAQAxAMOAAACrwkAAQQArwMkAAADrgkABACvAyQAAACuCQEBAPMIAALbBACwAxIAAAICBUUwNTYxAAEfBQAAAAXzCAQArwMkAAAArgkBAQH3CAABrwkA3gQAmnEmAQAAtQkAAALeBACacSYBAAIChAZBYnN0cmFjdCByZXR1cm4gdHlwZXMgKHdyaXR0ZW4gYGltcGwgVHJhaXRgIGZvciBzb21lIHRyYWl0IGBUcmFpdGApIGFyZSBvbmx5CmFsbG93ZWQgYXMgZnVuY3Rpb24gYW5kIGluaGVyZW50IGltcGwgcmV0dXJuIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MgpmbiBtYWluKCkgewogICAgbGV0IGNvdW50X3RvX3RlbjogaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiA9IDAuLjEwOwogICAgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBub3QgYWxsb3dlZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBtZXRob2QKICAgIC8vICAgICAgICByZXR1cm4gdHlwZXMKICAgIGZvciBpIGluIGNvdW50X3RvX3RlbiB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgaSk7CiAgICB9Cn0KYGBgCgpNYWtlIHN1cmUgYGltcGwgVHJhaXRgIG9ubHkgYXBwZWFycyBpbiByZXR1cm4tdHlwZSBwb3NpdGlvbi4KCmBgYApmbiBjb3VudF90b19uKG46IHVzaXplKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW09dXNpemU+IHsKICAgIDAuLm4KfQoKZm4gbWFpbigpIHsKICAgIGZvciBpIGluIGNvdW50X3RvX24oMTApIHsgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKU2VlIFtSRkMgMTUyMl0gZm9yIG1vcmUgZGV0YWlscy4KCltSRkMgMTUyMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzE1MjItY29uc2VydmF0aXZlLWltcGwtdHJhaXQubWQKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAYAAACEBvMI3gQAmnEmAQAAtAkAAgYAtQkBAAQAxAMOAAADswkABADEAw4AAACzCQIFAQLZAQEBAPMIAAG0CQAEAMQDDgAAArMJAAEEAK8DJAAAA7IJAAQArwMkAAAAsgkBAQDzCAAC3QQAsAMSAAACAgVFMDU2MgABHwUAAAAF8wgEAK8DJAAAALIJAQEB9wgAAbMJAOAEAMlxJgEAALkJAAAC4AQAyXEmAQACAr8DQSBsaXRlcmFsIHdhcyB1c2VkIGluIGEgYnVpbHQtaW4gYXR0cmlidXRlIHRoYXQgZG9lc24ndCBzdXBwb3J0IGxpdGVyYWxzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NQojW3JlcHIoIkMiKV0gLy8gZXJyb3I6IG1ldGEgaXRlbSBpbiBgcmVwcmAgbXVzdCBiZSBhbiBpZGVudGlmaWVyCnN0cnVjdCBSZXByIHt9CgpmbiBtYWluKCkge30KYGBgCgpMaXRlcmFscyBpbiBhdHRyaWJ1dGVzIGFyZSBuZXcgYW5kIGxhcmdlbHkgdW5zdXBwb3J0ZWQgaW4gYnVpbHQtaW4gYXR0cmlidXRlcy4KV29yayB0byBzdXBwb3J0IGxpdGVyYWxzIHdoZXJlIGFwcHJvcHJpYXRlIGlzIG9uZ29pbmcuIFRyeSB1c2luZyBhbiB1bnF1b3RlZApuYW1lIGluc3RlYWQ6CgpgYGAKI1tyZXByKEMpXSAvLyBvayEKc3RydWN0IFJlcHIge30KCmZuIG1haW4oKSB7fQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////3+/AwAAAL8D8wjgBADJcSYBAAC4CQACBgC5CQEABADEAw4AAAO3CQAEAMQDDgAAALcJAgUBAtkBAQEA8wgAAbgJAAQAxAMOAAACtwkAAQQArwMkAAADtgkABACvAyQAAAC2CQEBAPMIAALfBACwAxIAAAICBUUwNTY1AAEfBQAAAAXzCAQArwMkAAAAtgkBAQH3CAABtwkA4gQA+HEmAQAAvQkAAALiBAD4cSYBAAICrwNDb25mbGljdGluZyByZXByZXNlbnRhdGlvbiBoaW50cyBoYXZlIGJlZW4gdXNlZCBvbiBhIHNhbWUgaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjYKI1tyZXByKHUzMiwgdTY0KV0KZW51bSBSZXByIHsgQSB9CmBgYAoKSW4gbW9zdCBjYXNlcyAoaWYgbm90IGFsbCksIHVzaW5nIGp1c3Qgb25lIHJlcHJlc2VudGF0aW9uIGhpbnQgaXMgbW9yZSB0aGFuCmVub3VnaC4gSWYgeW91IHdhbnQgdG8gaGF2ZSBhIHJlcHJlc2VudGF0aW9uIGhpbnQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50CmFyY2hpdGVjdHVyZSwgdXNlIGBjZmdfYXR0cmAuIEV4YW1wbGU6CgpgYGAKI1tjZmdfYXR0cihsaW51eCwgcmVwcih1MzIpKV0KI1tjZmdfYXR0cihub3QobGludXgpLCByZXByKHU2NCkpXQplbnVtIFJlcHIgeyBBIH0KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////H68DAAAArwPzCOIEAPhxJgEAALwJAAIGAL0JAQAEAMQDDgAAA7sJAAQAxAMOAAAAuwkCBQEC2QEBAQDzCAABvAkABADEAw4AAAK7CQABBACvAyQAAAO6CQAEAK8DJAAAALoJAQEA8wgAAuEEALADEgAAAgIFRTA1NjYAAR8FAAAABfMIBACvAyQAAAC6CQEBAfcIAAG7CQDkBACnciYBAADBCQAAAuQEAKdyJgEAAgK3A0dlbmVyaWNzIGhhdmUgYmVlbiB1c2VkIG9uIGFuIGF1dG8gdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY3CiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKYXV0byB0cmFpdCBHZW5lcmljPFQ+IHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKClNpbmNlIGFuIGF1dG8gdHJhaXQgaXMgaW1wbGVtZW50ZWQgb24gYWxsIGV4aXN0aW5nIHR5cGVzLCB0aGUKY29tcGlsZXIgd291bGQgbm90IGJlIGFibGUgdG8gaW5mZXIgdGhlIHR5cGVzIG9mIHRoZSB0cmFpdCdzIGdlbmVyaWMKcGFyYW1ldGVycy4KClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgZ2VuZXJpY3M6CgpgYGAKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEdlbmVyaWMge30gLy8gb2shCiMgZm4gbWFpbigpIHt9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////8/twMAAAC3A/MI5AQAp3ImAQAAwAkAAgYAwQkBAAQAxAMOAAADvwkABADEAw4AAAC/CQIFAQLZAQEBAPMIAAHACQAEAMQDDgAAAr8JAAEEAK8DJAAAA74JAAQArwMkAAAAvgkBAQDzCAAC4wQAsAMSAAACAgVFMDU2NwABHwUAAAAF8wgEAK8DJAAAAL4JAQEB9wgAAb8JAOYEANZyJgEAAMUJAAAC5gQA1nImAQACAqoEQSBzdXBlciB0cmFpdCBoYXMgYmVlbiBhZGRlZCB0byBhbiBhdXRvIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2OAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCmF1dG8gdHJhaXQgQm91bmQgOiBDb3B5IHt9IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKU2luY2UgYW4gYXV0byB0cmFpdCBpcyBpbXBsZW1lbnRlZCBvbiBhbGwgZXhpc3RpbmcgdHlwZXMsIGFkZGluZyBhIHN1cGVyIHRyYWl0CndvdWxkIGZpbHRlciBvdXQgYSBsb3Qgb2YgdGhvc2UgdHlwZXMuIEluIHRoZSBjdXJyZW50IGV4YW1wbGUsIGFsbW9zdCBub25lIG9mCmFsbCB0aGUgZXhpc3RpbmcgdHlwZXMgY291bGQgaW1wbGVtZW50IGBCb3VuZGAgYmVjYXVzZSB2ZXJ5IGZldyBvZiB0aGVtIGhhdmUgdGhlCmBDb3B5YCB0cmFpdC4KClRvIGZpeCB0aGlzIGlzc3VlLCBqdXN0IHJlbW92ZSB0aGUgc3VwZXIgdHJhaXQ6CgpgYGAKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEJvdW5kIHt9IC8vIG9rIQoKZm4gbWFpbigpIHt9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////9/qgQAAACqBPMI5gQA1nImAQAAxAkAAgYAxQkBAAQAxAMOAAADwwkABADEAw4AAADDCQIFAQLZAQEBAPMIAAHECQAEAMQDDgAAAsMJAAEEAK8DJAAAA8IJAAQArwMk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b20gYSBgd2hpbGVgIGxvb3AKICAgIH0KICAgIGkgKz0gMTsKfTsKYGBgCgpUaGUgYGJyZWFrYCBzdGF0ZW1lbnQgY2FuIHRha2UgYW4gYXJndW1lbnQgKHdoaWNoIHdpbGwgYmUgdGhlIHZhbHVlIG9mIHRoZSBsb29wCmV4cHJlc3Npb24gaWYgdGhlIGBicmVha2Agc3RhdGVtZW50IGlzIGV4ZWN1dGVkKSBpbiBgbG9vcGAgbG9vcHMsIGJ1dCBub3QKYGZvcmAsIGB3aGlsZWAsIG9yIGB3aGlsZSBsZXRgIGxvb3BzLgoKTWFrZSBzdXJlIGBicmVhayB2YWx1ZTtgIHN0YXRlbWVudHMgb25seSBvY2N1ciBpbiBgbG9vcGAgbG9vcHM6CgpgYGAKIyBsZXQgbXV0IGkgPSAxOwojIGZuIHNhdGlzZmllZChuOiB1c2l6ZSkgLT4gYm9vbCB7IG4gJSAyMyA9PSAwIH0KbGV0IHJlc3VsdCA9IGxvb3AgeyAvLyBUaGlzIGlzIG5vdyBhICJsb29wIiBsb29wLgogICAgaWYgc2F0aXNmaWVkKGkpIHsKICAgICAgICBicmVhayAyICogaTsgLy8gb2shCiAgICB9CiAgICBpICs9IDE7Cn07CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgYAAACOBvMI7AQA43MmAQAA0AkAAgYA0QkBAAQAxAMOAAADzwkABADEAw4AAADPCQIFAQLZAQEBAPMIAAHQCQAEAMQDDgAAAs8JAAEEAK8DJAAAA84JAAQArwMkAAAAzgkBAQDzCAAC6wQAsAMSAAACAgVFMDU3MQABHwUAAAAF8wgEAK8DJAAAAM4JAQEB9wgAAc8JAO4EAJJ0JgEAANUJAAAC7gQAknQmAQACApIDQSByZXR1cm4gc3RhdGVtZW50IHdhcyBmb3VuZCBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzIKY29uc3QgRk9POiB1MzIgPSByZXR1cm4gMDsgLy8gZXJyb3I6IHJldHVybiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBmdW5jdGlvbiBib2R5CgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIHJldHVybiBrZXl3b3JkIG9yIG1vdmUgdGhlIGV4cHJlc3Npb24gaW50byBhCmZ1bmN0aW9uLiBFeGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogdTMyID0gMDsKCmZuIHNvbWVfZm4oKSAtPiB1MzIgewogICAgcmV0dXJuIEZPTzsKfQoKZm4gbWFpbigpIHsKICAgIHNvbWVfZm4oKTsKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SAwAAAJID8wjuBACSdCYBAADUCQACBgDVCQEABADEAw4AAAPTCQAEAMQDDgAAANMJAgUBAtkBAQEA8wgAAdQJAAQAxAMOAAAC0wkAAQQArwMkAAAD0gkABACvAyQAAADSCQEBAPMIAALtBACwAxIAAAICBUUwNTcyAAEfBQAAAAXzCAQArwMkAAAA0gkBAQH3CAAB0wkA8AQAwXQmAQAA2QkAAALwBADBdCYBAAIC0ApTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU3MwplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbjo6Qm9ybiB7IC8vIGVycm9yIQogICAgRHJhZ29uOjpCb3JuCn0KCmNvbnN0IEhPQkJJVDogdTMyID0gMjsKaW1wbCBIT0JCSVQge30gLy8gZXJyb3IhCgplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKF86IFdpemFyZDo6U2FydW1hbik7IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwgaWYKd2Ugd2FudCB0byByZXR1cm4gdGhlIGBCb3JuYCB2YXJpYW50IGZyb20gdGhlIGBEcmFnb25gIGVudW0sIHdlIG11c3Qgc2V0IHRoZQpmdW5jdGlvbiB0byByZXR1cm4gdGhlIGVudW0gYW5kIG5vdCBpdHMgdmFyaWFudDoKCmBgYAplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbiB7IC8vIG9rIQogICAgRHJhZ29uOjpCb3JuCn0KYGBgCgpJbiB0aGUgc2Vjb25kIGVycm9yLCB5b3UgY2FuJ3QgaW1wbGVtZW50IHNvbWV0aGluZyBvbiBhbiBpdGVtLCBvbmx5IG9uIHR5cGVzLgpXZSB3b3VsZCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0eXBlIGlmIHdlIHdhbnRlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhcjoKCmBgYApzdHJ1Y3QgSG9iYml0KHUzMik7IC8vIHdlIGNyZWF0ZSBhIG5ldyB0eXBlCgpjb25zdCBIT0JCSVQ6IEhvYmJpdCA9IEhvYmJpdCgyKTsKaW1wbCBIb2JiaXQge30gLy8gb2shCmBgYAoKSW4gdGhlIHRoaXJkIGNhc2UsIHdlIHRyaWVkIHRvIG9ubHkgZXhwZWN0IG9uZSB2YXJpYW50IG9mIHRoZSBgV2l6YXJkYCBlbnVtLAp3aGljaCBpcyBub3QgcG9zc2libGUuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIHRvIHVzaW5nIHBhdHRlcm4gbWF0Y2hpbmcKb3ZlciB0aGUgYFdpemFyZGAgZW51bToKCmBgYAplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKHc6IFdpemFyZCkgeyAvLyBvayEKICAgICAgICBtYXRjaCB3IHsKICAgICAgICAgICAgV2l6YXJkOjpTYXJ1bWFuID0+IHsKICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIF8gPT4ge30gLy8gaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQogICAgICAgIH0KICAgIH0KfQpgYGAKABb///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wPQCgAAANAK8wjwBADBdCYBAADYCQACBgDZCQEABADEAw4AAAPXCQAEAMQDDgAAANcJAgUBAtkBAQEA8wgAAdgJAAQAxAMOAAAC1wkAAQQArwMkAAAD1gkABACvAyQAAADWCQEBAPMIAALvBACwAxIAAAICBUUwNTczAAEfBQAAAAXzCAQArwMkAAAA1gkBAQH3CAAB1wkA8gQA8HQmAQAA3QkAAALyBADwdCYBAAIClAdTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiBoYXMgYmVlbiB1c2VkIHdoZW4gb25lIHdhcwpleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzQKbW9kIG1vcmRvciB7fQoKbGV0IHNhdXJvbiA9IG1vcmRvciB7IHg6ICgpIH07IC8vIGVycm9yIQoKZW51bSBKYWsgewogICAgRGF4dGVyIHsgaTogaXNpemUgfSwKfQoKbGV0IGVjbyA9IEphazo6RGF4dGVyIHsgaTogMSB9OwptYXRjaCBlY28gewogICAgSmFrIHsgaSB9ID0+IHt9IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwKd2UgdHJpZWQgdG8gaW5zdGFudGlhdGUgdGhlIGBtb3Jkb3JgIG1vZHVsZSwgd2hpY2ggaXMgaW1wb3NzaWJsZS4gSWYgeW91IHdhbnQKdG8gaW5zdGFudGlhdGUgYSB0eXBlIGluc2lkZSBhIG1vZHVsZSwgeW91IGNhbiBkbyBpdCBhcyBmb2xsb3c6CgpgYGAKbW9kIG1vcmRvciB7CiAgICBwdWIgc3RydWN0IFRoZVJpbmcgewogICAgICAgIHB1YiB4OiB1c2l6ZSwKICAgIH0KfQoKbGV0IHNhdXJvbiA9IG1vcmRvcjo6VGhlUmluZyB7IHg6IDEgfTsgLy8gb2shCmBgYAoKSW4gdGhlIHNlY29uZCBlcnJvciwgd2UgdHJpZWQgdG8gYmluZCB0aGUgYEpha2AgZW51bSBkaXJlY3RseSwgd2hpY2ggaXMgbm90CnBvc3NpYmxlOiB5b3UgY2FuIG9ubHkgYmluZCBvbmUgb2YgaXRzIHZhcmlhbnRzLiBUbyBkbyBzbzoKCmBgYAplbnVtIEphayB7CiAgICBEYXh0ZXIgeyBpOiBpc2l6ZSB9LAp9CgpsZXQgZWNvID0gSmFrOjpEYXh0ZXIgeyBpOiAxIH07Cm1hdGNoIGVjbyB7CiAgICBKYWs6OkRheHRlciB7IGkgfSA9PiB7fSAvLyBvayEKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//P5QHAAAAlAfzCPIEAPB0JgEAANwJAAIGAN0JAQAEAMQDDgAAA9sJAAQAxAMOAAAA2wkCBQEC2QEBAQDzCAAB3AkABADEAw4AAALbCQABBACvAyQAAAPaCQAEAK8DJAAAANoJAQEA8wgAAvEEALADEgAAAgIFRTA1NzQAAR8FAAAABfMIBACvAyQAAADaCQEBAfcIAAHbCQD0BACfdSYBAADhCQAAAvQEAJ91JgEAAgLYB1NvbWV0aGluZyBvdGhlciB0aGFuIGEgdHlwZSBvciBhbiBhc3NvY2lhdGVkIHR5cGUgd2FzIGdpdmVuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3NQplbnVtIFJpY2sgeyBNb3J0eSB9CgpsZXQgXzogPHU4IGFzIFJpY2s+OjpNb3J0eTsgLy8gZXJyb3IhCgp0cmFpdCBBZ2UgewogICAgdHlwZSBFbXBpcmU7CiAgICBmbiBNeXRob2xvZ3koKSB7fQp9CgppbXBsIEFnZSBmb3IgdTggewogICAgdHlwZSBFbXBpcmUgPSB1MTY7Cn0KCmxldCBfOiA8dTggYXMgQWdlPjo6TXl0aG9sb2d5OyAvLyBlcnJvciEKYGBgCgpJbiBib3RoIGNhc2VzLCB3ZSdyZSBkZWNsYXJpbmcgYSB2YXJpYWJsZSAoY2FsbGVkIGBfYCkgYW5kIHdlJ3JlIGdpdmluZyBpdCBhCnR5cGUuIEhvd2V2ZXIsIGA8dTggYXMgUmljaz46Ok1vcnR5YCBhbmQgYDx1OCBhcyBBZ2U+OjpNeXRob2xvZ3lgIGFyZW4ndCB0eXBlcywKdGhlcmVmb3JlIHRoZSBjb21waWxlciB0aHJvd3MgYW4gZXJyb3IuCgpgPHU4IGFzIFJpY2s+OjpNb3J0eWAgaXMgYW4gZW51bSB2YXJpYW50LCB5b3UgY2Fubm90IHVzZSBhIHZhcmlhbnQgYXMgYSB0eXBlLAp5b3UgaGF2ZSB0byB1c2UgdGhlIGVudW0gZGlyZWN0bHk6CgpgYGAKZW51bSBSaWNrIHsgTW9ydHkgfQoKbGV0IF86IFJpY2s7IC8vIG9rIQpgYGAKCmA8dTggYXMgQWdlPjo6TXl0aG9sb2d5YCBpcyBhIHRyYWl0IG1ldGhvZCwgd2hpY2ggaXMgZGVmaW5pdGVseSBub3QgYSB0eXBlLgpIb3dldmVyLCB0aGUgYEFnZWAgdHJhaXQgcHJvdmlkZXMgYW4gYXNzb2NpYXRlZCB0eXBlIGBFbXBpcmVgIHdoaWNoIGNhbiBiZQp1c2VkIGFzIGEgdHlwZToKCmBgYAp0cmFpdCBBZ2UgewogICAgdHlwZSBFbXBpcmU7CiAgICBmbiBNeXRob2xvZ3koKSB7fQp9CgppbXBsIEFnZSBmb3IgdTggewogICAgdHlwZSBFbXBpcmUgPSB1MTY7Cn0KCmxldCBfOiA8dTggYXMgQWdlPjo6RW1waXJlOyAvLyBvayEKYGBgCgAQ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////B9gHAAAA2AfzCPQEAJ91JgEAAOAJAAIGAOEJAQAEAMQDDgAAA98JAAQAxAMOAAAA3wkCBQEC2QEBAQDzCAAB4AkABADEAw4AAALfCQABBACvAyQAAAPeCQAEAK8DJAAAAN4JAQEA8wgAAvMEALADEgAAAgIFRTA1NzUAAR8FAAAABfMIBACvAyQAAADeCQEBAfcIAAHfCQD2BADOdSYBAADlCQAAAvYEAM51JgEAAgKiA0FuIGFzc29jaWF0ZWQgaXRlbSB3YXNuJ3QgZm91bmQgaW4gdGhlIGdpdmVuIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc2CnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpZb3U7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSB0cmllZCB0byB1c2UgdGhlIG5vbi1leGlzdGVudCBhc3NvY2lhdGVkIHR5cGUgYFlvdWAgb2YgdGhlCmBIZWxsb2AgdHJhaXQuIFRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYW4gZXhpc3RpbmcgYXNzb2NpYXRlZCB0eXBlOgoKYGBgCnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpXaG87IC8vIG9rIQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8/ogMAAACiA/MI9gQAznUmAQAA5AkAAgYA5QkBAAQAxAMOAAAD4wkABADEAw4AAADjCQIFAQLZAQEBAPMIAAHkCQAEAMQDDgAAAuMJAAEEAK8DJAAAA+IJAAQArwMkAAAA4gkBAQDzCAAC9QQAsAMSAAACAgVFMDU3NgABHwUAAAAF8wgEAK8DJAAAAOIJAQEB9wgAAeMJAPgEAP11JgEAAOkJAAAC+AQA/XUmAQACAvcDU29tZXRoaW5nIG90aGVyIHRoYW4gYSBtb2R1bGUgd2FzIGZvdW5kIGluIHZpc2liaWxpdHkgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc3LGVkaXRpb24yMDE4CnB1YiBzdHJ1Y3QgU2VhOwoKcHViIChpbiBjcmF0ZTo6U2VhKSBzdHJ1Y3QgU2hhcms7IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKYFNlYWAgaXMgbm90IGEgbW9kdWxlLCB0aGVyZWZvcmUgaXQgaXMgaW52YWxpZCB0byB1c2UgaXQgaW4gYSB2aXNpYmlsaXR5IHBhdGguClRvIGZpeCB0aGlzIGVycm9yIHdlIG5lZWQgdG8gZW5zdXJlIGBzZWFgIGlzIGEgbW9kdWxlLgoKUGxlYXNlIG5vdGUgdGhhdCB0aGUgdmlzaWJpbGl0eSBzY29wZSBjYW4gb25seSBiZSBhcHBsaWVkIG9uIGFuY2VzdG9ycyEKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2Qgc2VhIHsKICAgIHB1YiAoaW4gY3JhdGU6OnNlYSkgc3RydWN0IFNoYXJrOyAvLyBvayEKfQoKZm4gbWFpbigpIHt9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P/cDAAAA9wPzCPgEAP11JgEAAOgJAAIGAOkJAQAEAMQDDgAAA+cJAAQAxAMOAAAA5wkCBQEC2QEBAQDzCAAB6AkABADEAw4AAALnCQABBACvAyQAAAPmCQAEAK8DJAAAAOYJAQEA8wgAAvcEALADEgAAAgIFRTA1NzcAAR8FAAAABfMIBACvAyQAAADmCQEBAfcIAAHnCQD6BACsdiYBAADtCQAAAvoEAKx2JgEAAgKEBEEgbW9kdWxlIGNhbm5vdCBiZSBmb3VuZCBhbmQgdGhlcmVmb3JlLCB0aGUgdmlzaWJpbGl0eSBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzgsZWRpdGlvbjIwMTgKZm9vISgpOwoKcHViIChpbiA6OlNlYSkgc3RydWN0IFNoYXJrOyAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCkJlY2F1c2Ugb2YgdGhlIGNhbGwgdG8gdGhlIGBmb29gIG1hY3JvLCB0aGUgY29tcGlsZXIgZ3Vlc3NlcyB0aGF0IHRoZSBtaXNzaW5nCm1vZHVsZSBjb3VsZCBiZSBpbnNpZGUgaXQgYW5kIGZhaWxzIGJlY2F1c2UgdGhlIG1hY3JvIGRlZmluaXRpb24gY2Fubm90IGJlCmZvdW5kLgoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBiZSBzdXJlIHRoYXQgdGhlIG1vZHVsZSBpcyBpbiBzY29wZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgU2VhIHsKICAgIHB1YiAoaW4gY3JhdGU6OlNlYSkgc3RydWN0IFNoYXJrOwp9CgpmbiBtYWluKCkge30KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEPhAQAAACEBPMI+gQArHYmAQAA7AkAAgYA7QkBAAQAxAMOAAAD6wkABADEAw4AAADrCQIFAQLZAQEBAPMIAAHsCQAEAMQDDgAAAusJAAEEAK8DJAAAA+oJAAQArwMkAAAA6gkBAQDzCAAC+QQAsAMSAAACAgVFMDU3OAABHwUAAAAF8wgEAK8DJAAAAOoJAQEB9wgAAesJAPwEANt2JgEAAPEJAAAC/AQA23YmAQACAs8EQSBsb3dlciByYW5nZSB3YXNuJ3QgbGVzcyB0aGFuIHRoZSB1cHBlciByYW5nZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzkKIyFbZmVhdHVyZShleGNsdXNpdmVfcmFuZ2VfcGF0dGVybildCgpmbiBtYWluKCkgewogICAgbWF0Y2ggNXUzMiB7CiAgICAgICAgLy8gVGhpcyByYW5nZSBpcyBvaywgYWxiZWl0IHBvaW50bGVzcy4KICAgICAgICAxLi4yID0+IHt9CiAgICAgICAgLy8gVGhpcyByYW5nZSBpcyBlbXB0eSwgYW5kIHRoZSBjb21waWxlciBjYW4gdGVsbC4KICAgICAgICA1Li41ID0+IHt9IC8vIGVycm9yIQogICAgfQp9CmBgYAoKV2hlbiBtYXRjaGluZyBhZ2FpbnN0IGFuIGV4Y2x1c2l2ZSByYW5nZSwgdGhlIGNvbXBpbGVyIHZlcmlmaWVzIHRoYXQgdGhlIHJhbmdlCmlzIG5vbi1lbXB0eS4gRXhjbHVzaXZlIHJhbmdlIHBhdHRlcm5zIGluY2x1ZGUgdGhlIHN0YXJ0IHBvaW50IGJ1dCBub3QgdGhlIGVuZApwb2ludCwgc28gdGhpcyBpcyBlcXVpdmFsZW50IHRvIHJlcXVpcmluZyB0aGUgc3RhcnQgb2YgdGhlIHJhbmdlIHRvIGJlIGxlc3MKdGhhbiB0aGUgZW5kIG9mIHRoZSByYW5nZS4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wHPBAAAAM8E8wj8BADbdiYBAADwCQACBgDxCQEABADEAw4AAAPvCQAEAMQDDgAAAO8JAgUBAtkBAQEA8wgAAfAJAAQAxAMOAAAC7wkAAQQArwMkAAAD7gkABACvAyQAAADuCQEBAPMIAAL7BACwAxIAAAICBUUwNTc5AAEfBQAAAAXzCAQArwMkAAAA7gkBAQH3CAAB7wkA/gQAincmAQAA9QkAAAL+BACKdyYBAAICoQNUaGUgYG1haW5gIGZ1bmN0aW9uIHdhcyBpbmNvcnJlY3RseSBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODAKZm4gbWFpbih4OiBpMzIpIHsgLy8gZXJyb3I6IG1haW4gZnVuY3Rpb24gaGFzIHdyb25nIHR5cGUKICAgIHByaW50bG4hKCJ7fSIsIHgpOwp9CmBgYAoKVGhlIGBtYWluYCBmdW5jdGlvbiBwcm90b3R5cGUgc2hvdWxkIG5ldmVyIHRha2UgYXJndW1lbnRzLgpFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyB5b3VyIGNvZGUKfQpgYGAKCklmIHlvdSB3YW50IHRvIGdldCBjb21tYW5kLWxpbmUgYXJndW1lbnRzLCB1c2UgYHN0ZDo6ZW52OjphcmdzYC4gVG8gZXhpdCB3aXRoIGEKc3BlY2lmaWVkIGV4aXQgY29kZSwgdXNlIGBzdGQ6OnByb2Nlc3M6OmV4aXRgLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8foQMAAAChA/MI/gQAincmAQAA9AkAAgYA9QkBAAQAxAMOAAAD8wkABADEAw4AAADzCQIFAQLZAQEBAPMIAAH0CQAEAMQDDgAAAvMJAAEEAK8DJAAAA/IJAAQArwMkAAAA8gkBAQDzCAAC/QQAsAMSAAACAgVFMDU4MAABHwUAAAAF8wgEAK8DJAAAAPIJAQEB9wgAAfMJAIAFALl3JgEAAPkJAAACgAUAuXcmAQACAtQGSW4gYSBgZm5gIHR5cGUsIGEgbGlmZXRpbWUgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZQphbmQgbm90IGluIHRoZSBhcmd1bWVudHMgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgxCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigpIC0+ICYnYSBpMzI7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgdGhlIGxpZmV0aW1lIGlzbid0IGNvbnN0cmFpbmVkIGJ5IGFueSBvZiB0aGUgYXJndW1lbnRzLAptYWtpbmcgaXQgaW1wb3NzaWJsZSB0byBkZXRlcm1pbmUgaG93IGxvbmcgaXQncyBzdXBwb3NlZCB0byBsaXZlLgoKVG8gZml4IHRoaXMgaXNzdWUsIGVpdGhlciB1c2UgdGhlIGxpZmV0aW1lIGluIHRoZSBhcmd1bWVudHMsIG9yIHVzZSB0aGUKYCdzdGF0aWNgIGxpZmV0aW1lLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyBIZXJlLCBgJ2FgIGFwcGVhcnMgb25seSBpbiB0aGUgcmV0dXJuIHR5cGU6CiAgICBsZXQgeDogZm9yPCdhPiBmbigmJ2EgaTMyKSAtPiAmJ2EgaTMyOwogICAgbGV0IHk6IGZuKCkgLT4gJidzdGF0aWMgaTMyOwp9CmBgYAoKTm90ZTogVGhlIGV4YW1wbGVzIGFib3ZlIHVzZWQgdG8gYmUgKGVycm9uZW91c2x5KSBhY2NlcHRlZCBieSB0aGUKY29tcGlsZXIsIGJ1dCB0aGlzIHdhcyBzaW5jZSBjb3JyZWN0ZWQuIFNlZSBbaXNzdWUgIzMzNjg1XSBmb3IgbW9yZQpkZXRhaWxzLgoKW2lzc3VlICMzMzY4NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMzM2ODUKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8/1AYAAADUBvMIgAUAuXcmAQAA+AkAAgYA+QkBAAQAxAMOAAAD9wkABADEAw4AAAD3CQIFAQLZAQEBAPMIAAH4CQAEAMQDDgAAAvcJAAEEAK8DJAAAA/YJAAQArwMkAAAA9gkBAQDzCAAC/wQAsAMSAAACAgVFMDU4MQABHwUAAAAF8wgEAK8DJAAAAPYJAQEB9wgAAfcJAIIFAOh3JgEAAP0JAAACggUA6HcmAQACAqAGQSBsaWZldGltZSBpcyBvbmx5IHByZXNlbnQgaW4gYW4gYXNzb2NpYXRlZC10eXBlIGJpbmRpbmcsIGFuZCBub3QgaW4gdGhlIGlucHV0CnR5cGVzIHRvIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODIKZm4gYmFyPEY+KHQ6IEYpCiAgICAvLyBObyB0eXBlIGNhbiBzYXRpc2Z5IHRoaXMgcmVxdWlyZW1lbnQsIHNpbmNlIGAnYWAgZG9lcyBub3QKICAgIC8vIGFwcGVhciBpbiBhbnkgb2YgdGhlIGlucHV0IHR5cGVzIChoZXJlLCBgaTMyYCk6CiAgICB3aGVyZSBGOiBmb3I8J2E+IEZuKGkzMikgLT4gT3B0aW9uPCYnYSBpMzI+CnsKfQoKZm4gbWFpbigpIHsgfQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCBlaXRoZXIgdXNlIHRoZSBsaWZldGltZSBpbiB0aGUgaW5wdXRzLCBvciB1c2UKYCdzdGF0aWNgLiBFeGFtcGxlOgoKYGBgCmZuIGJhcjxGLCBHPih0OiBGLCB1OiBHKQogICAgd2hlcmUgRjogZm9yPCdhPiBGbigmJ2EgaTMyKSAtPiBPcHRpb248JidhIGkzMj4sCiAgICAgICAgICBHOiBGbihpMzIpIC0+IE9wdGlvbjwmJ3N0YXRpYyBpMzI+LAp7Cn0KCmZuIG1haW4oKSB7IH0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8PoAYAAACgBvMIggUA6HcmAQAA/AkAAgYA/QkBAAQAxAMOAAAD+wkABADEAw4AAAD7CQIFAQLZAQEBAPMIAAH8CQAEAMQDDgAAAvsJAAEEAK8DJAAAA/oJAAQArwMkAAAA+gkBAQDzCAACgQUAsAMSAAACAgVFMDU4MgABHwUAAAAF8wgEAK8DJAAAAPoJAQEB9wgAAfsJAIQFAJd4JgEAAIEKAAAChAUAl3gmAQACAqEDQSBmaWxlIHdhc24ndCBmb3VuZCBmb3IgYW4gb3V0LW9mLWxpbmUgbW9kdWxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4Mwptb2QgZmlsZV90aGF0X2RvZXNudF9leGlzdDsgLy8gZXJyb3I6IGZpbGUgbm90IGZvdW5kIGZvciBtb2R1bGUKCmZuIG1haW4oKSB7fQpgYGAKClBsZWFzZSBiZSBzdXJlIHRoYXQgYSBmaWxlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1vZHVsZSBleGlzdHMuIElmIHlvdQp3YW50IHRvIHVzZSBhIG1vZHVsZSBuYW1lZCBgZmlsZV90aGF0X2RvZXNudF9leGlzdGAsIHlvdSBuZWVkIHRvIGhhdmUgYSBmaWxlCm5hbWVkIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0LnJzYCBvciBgZmlsZV90aGF0X2RvZXNudF9leGlzdC9tb2QucnNgIGluIHRoZQpzYW1lIGRpcmVjdG9yeS4KAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H6EDAAAAoQPzCIQFAJd4JgEAAIAKAAIGAIEKAQAEAMQDDgAAA/8JAAQAxAMOAAAA/wkCBQEC2QEBAQDzCAABgAoABADEAw4AAAL/CQABBACvAyQAAAP+CQAEAK8DJAAAAP4JAQEA8wgAAoMFALADEgAAAgIFRTA1ODMAAR8FAAAABfMIBACvAyQAAAD+CQEBAfcIAAH/CQCGBQDGeCYBAACFCgAAAoYFAMZ4JgEAAgKIBEEgZG9jIGNvbW1lbnQgdGhhdCBpcyBub3QgYXR0YWNoZWQgdG8gYW55dGhpbmcgaGFzIGJlZW4gZW5jb3VudGVyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg0CnRyYWl0IElzbGFuZCB7CiAgICBmbiBsb3N0KCk7CgogICAgLy8vIEknbSBsb3N0IQp9CmBgYAoKQSBsaXR0bGUgcmVtaW5kZXI6IGEgZG9jIGNvbW1lbnQgaGFzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlIGl0ZW0gaXQncyBzdXBwb3NlZAp0byBkb2N1bWVudC4gU28gaWYgeW91IHdhbnQgdG8gZG9jdW1lbnQgdGhlIGBJc2xhbmRgIHRyYWl0LCB5b3UgbmVlZCB0byBwdXQgYQpkb2MgY29tbWVudCBiZWZvcmUgaXQsIG5vdCBpbnNpZGUgaXQuIFNhbWUgZ29lcyBmb3IgdGhlIGBsb3N0YCBtZXRob2Q6IHRoZSBkb2MKY29tbWVudCBuZWVkcyB0byBiZSBiZWZvcmUgaXQ6CgpgYGAKLy8vIEknbSBUSEUgaXNsYW5kIQp0cmFpdCBJc2xhbmQgewogICAgLy8vIEknbSBsb3N0IQogICAgZm4gbG9zdCgpOwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/wGIBAAAAIgE8wiGBQDGeCYBAACECgACBgCFCgEABADEAw4AAAODCgAEAMQDDgAAAIMKAgUBAtkBAQEA8wgAAYQKAAQAxAMOAAACgwoAAQQArwMkAAADggoABACvAyQAAACCCgEBAPMIAAKFBQCwAxIAAAICBUUwNTg0AAEfBQAAAAXzCAQArwMkAAAAggoBAQH3CAABgwoAiAUA9XgmAQAAiQoAAAKIBQD1eCYBAAICuQNBIGRvY3VtZW50YXRpb24gY29tbWVudCB0aGF0IGRvZXNuJ3QgZG9jdW1lbnQgYW55dGhpbmcgd2FzIGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NQpmbiBtYWluKCkgewogICAgLy8gVGhlIGZvbGxvd2luZyBkb2MgY29tbWVudCB3aWxsIGZhaWw6CiAgICAvLy8gVGhpcyBpcyBhIHVzZWxlc3MgZG9jIGNvbW1lbnQhCn0KYGBgCgpEb2N1bWVudGF0aW9uIGNvbW1lbnRzIG5lZWQgdG8gYmUgZm9sbG93ZWQgYnkgaXRlbXMsIGluY2x1ZGluZyBmdW5jdGlvbnMsCnR5cGVzLCBtb2R1bGVzLCBldGMuIEV4YW1wbGVzOgoKYGBgCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBzdHJ1Y3Q6CnN0cnVjdCBGb287CgovLy8gSSdtIGRvY3VtZW50aW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb246CmZuIGZvbygpIHt9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkDAAAAuQPzCIgFAPV4JgEAAIgKAAIGAIkKAQAEAMQDDgAAA4cKAAQAxAMOAAAAhwoCBQEC2QEBAQDzCAABiAoABADEAw4AAAKHCgABBACvAyQAAAOGCgAEAK8DJAAAAIYKAQEA8wgAAocFALADEgAAAgIFRTA1ODUAAR8FAAAABfMIBACvAyQAAACGCgEBAfcIAAGHCgCKBQCkeSYBAACNCgAAAooFAKR5JgEAAgLjBEFuIGluY2x1c2l2ZSByYW5nZSB3YXMgdXNlZCB3aXRoIG5vIGVuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODYKZm4gbWFpbigpIHsKICAgIGxldCB0bXAgPSB2ZWMhWzAsIDEsIDIsIDMsIDQsIDQsIDMsIDMsIDIsIDFdOwogICAgbGV0IHggPSAmdG1wWzEuLj1dOyAvLyBlcnJvcjogaW5jbHVzaXZlIHJhbmdlIHdhcyB1c2VkIHdpdGggbm8gZW5kCn0KYGBgCgpBbiBpbmNsdXNpdmUgcmFuZ2UgbmVlZHMgYW4gZW5kIGluIG9yZGVyIHRvICppbmNsdWRlKiBpdC4gSWYgeW91IGp1c3QgbmVlZCBhCnN0YXJ0IGFuZCBubyBlbmQsIHVzZSBhIG5vbi1pbmNsdXNpdmUgcmFuZ2UgKHdpdGggYC4uYCk6CgpgYGAKZm4gbWFpbigpIHsKICAgIGxldCB0bXAgPSB2ZWMhWzAsIDEsIDIsIDMsIDQsIDQsIDMsIDMsIDIsIDFdOwogICAgbGV0IHggPSAmdG1wWzEuLl07IC8vIG9rIQp9CmBgYAoKT3IgcHV0IGFuIGVuZCB0byB5b3VyIGluY2x1c2l2ZSByYW5nZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uPTNdOyAvLyBvayEKfQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////f+MEAAAA4wTzCIoFAKR5JgEAAIwKAAIGAI0KAQAEAMQDDgAAA4sKAAQAxAMOAAAAiwoCBQEC2QEBAQDzCAABjAoABADEAw4AAAKLCgABBACvAyQAAAOKCgAEAK8DJAAAAIoKAQEA8wgAAokFALADEgAAAgIFRTA1ODYAAR8FAAAABfMIBACvAyQAAACKCgEBAfcIAAGLCgCMBQDTeSYBAACRCgAAAowFANN5JgEAAgLrAkEgdHlwZSBoYXMgYm90aCBgcGFja2VkYCBhbmQgYGFsaWduYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODcKI1tyZXByKHBhY2tlZCwgYWxpZ24oOCkpXSAvLyBlcnJvciEKc3RydWN0IFVtYnJlbGxhKGkzMik7CmBgYAoKWW91IGNhbm5vdCB1c2UgYHBhY2tlZGAgYW5kIGBhbGlnbmAgaGludHMgb24gYSBzYW1lIHR5cGUuIElmIHlvdSB3YW50IHRvIHBhY2sgYQp0eXBlIHRvIGEgZ2l2ZW4gc2l6ZSwgeW91IHNob3VsZCBwcm92aWRlIGEgc2l6ZSB0byBwYWNrZWQ6CgpgYGAKI1tyZXByKHBhY2tlZCldIC8vIG9rIQpzdHJ1Y3QgVW1icmVsbGEoaTMyKTsKYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wIAAADrAvMIjAUA03kmAQAAkAoAAgYAkQoBAAQAxAMOAAADjwoABADEAw4AAACPCgIFAQLZAQEBAPMIAAGQCgAEAMQDDgAAAo8KAAEEAK8DJAAAA44KAAQArwMkAAAAjgoBAQDzCAACiwUAsAMSAAACAgVFMDU4NwABHwUAAAAF8wgEAK8DJAAAAI4KAQEB9wgAAY8KAI4FAIJ6JgEAAJUKAAACjgUAgnomAQACApQEQSB0eXBlIHdpdGggYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludCBoYXMgYSBmaWVsZCB3aXRoIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODgKI1tyZXByKGFsaWduKDE2KSldCnN0cnVjdCBBbGlnbmVkKGkzMik7CgojW3JlcHIocGFja2VkKV0gLy8gZXJyb3IhCnN0cnVjdCBQYWNrZWQoQWxpZ25lZCk7CmBgYAoKSnVzdCBsaWtlIHlvdSBjYW5ub3QgaGF2ZSBib3RoIGBhbGlnbmAgYW5kIGBwYWNrZWRgIHJlcHJlc2VudGF0aW9uIGhpbnRzIG9uIGEKc2FtZSB0eXBlLCBhIGBwYWNrZWRgIHR5cGUgY2Fubm90IGNvbnRhaW4gYW5vdGhlciB0eXBlIHdpdGggdGhlIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4gSG93ZXZlciwgeW91IGNhbiBkbyB0aGUgb3Bwb3NpdGU6CgpgYGAKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBQYWNrZWQoaTMyKTsKCiNbcmVwcihhbGlnbigxNikpXSAvLyBvayEKc3RydWN0IEFsaWduZWQoUGFja2VkKTsKYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//z+UBAAAAJQE8wiOBQCCeiYBAACUCgACBgCVCgEABADEAw4AAAOTCgAEAMQDDgAAAJMKAgUBAtkBAQEA8wgAAZQKAAQAxAMOAAACkwoAAQQArwMkAAADkgoABACvAyQAAACSCgEBAPMIAAKNBQCwAxIAAAICBUUwNTg4AAEfBQAAAAXzCAQArwMkAAAAkgoBAQH3CAABkwoAkAUAsXomAQAAmQoAAAKQBQCxeiYBAAICiwJUaGUgdmFsdWUgb2YgYE5gIHRoYXQgd2FzIHNwZWNpZmllZCBmb3IgYHJlcHIoYWxpZ24oTikpYCB3YXMgbm90IGEgcG93ZXIKb2YgdHdvLCBvciB3YXMgZ3JlYXRlciB0aGFuIDJeMjkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg5CiNbcmVwcihhbGlnbigxNSkpXSAvLyBlcnJvcjogaW52YWxpZCBgcmVwcihhbGlnbilgIGF0dHJpYnV0ZTogbm90IGEgcG93ZXIgb2YgdHdvCmVudW0gRm9vIHsKICAgIEJhcih1NjQpLAp9CmBgYAoABf///////////wH///////////8B////////////Af///////////wH/D4sCAAAAiwLzCJAFALF6JgEAAJgKAAIGAJkKAQAEAMQDDgAAA5cKAAQAxAMOAAAAlwoCBQEC2QEBAQDzCAABmAoABADEAw4AAAKXCgABBACvAyQAAAOWCgAEAK8DJAAAAJYKAQEA8wgAAo8FALADEgAAAgIFRTA1ODkAAR8FAAAABfMIBACvAyQAAACWCgEBAfcIAAGXCgCSBQDgeiYBAACdCgAAApIFAOB6JgEAAgLgAmBicmVha2Agb3IgYGNvbnRpbnVlYCBrZXl3b3JkcyB3ZXJlIHVzZWQgaW4gYSBjb25kaXRpb24gb2YgYSBgd2hpbGVgIGxvb3AKd2l0aG91dCBhIGxhYmVsLgoKRXJyb25lb3VzIGNvZGUgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5MAp3aGlsZSBicmVhayB7fQpgYGAKCmBicmVha2Agb3IgYGNvbnRpbnVlYCBtdXN0IGluY2x1ZGUgYSBsYWJlbCB3aGVuIHVzZWQgaW4gdGhlIGNvbmRpdGlvbiBvZiBhCmB3aGlsZWAgbG9vcC4KClRvIGZpeCB0aGlzLCBhZGQgYSBsYWJlbCBzcGVjaWZ5aW5nIHdoaWNoIGxvb3AgaXMgYmVpbmcgYnJva2VuIG91dCBvZjoKCmBgYAonZm9vOiB3aGlsZSBicmVhayAnZm9vIHt9CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B/////w/gAgAAAOAC8wiSBQDgeiYBAACcCgACBgCdCgEABADEAw4AAAObCgAEAMQDDgAAAJsKAgUBAtkBAQEA8wgAAZwKAAQAxAMOAAACmwoAAQQArwMkAAADmgoABACvAyQAAACaCgEBAPMIAAKRBQCwAxIAAAICBUUwNTkwAAEfBQAAAAXzCAQArwMkAAAAmgoBAQH3CAABmwoAlAUAj3smAQAAoQoAAAKUBQCPeyYBAAICmxVQZXIgW1JGQyA0MDFdW3JmYzQwMV0sIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYGZvb2A6CgpgYGAKc3RydWN0IFM7CgovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZXhwbGFuYXRpb24sIGFsbCBvZiB0aGVzZQovLyBkaWZmZXJlbnQga2luZHMgb2YgYGZuYCBkZWNsYXJhdGlvbnMgYXJlIGVxdWl2YWxlbnQ6CgpmbiBmb28oeDogUykgeyAvKiAuLi4gKi8gfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gIkMiIHsKICAgIGZuIGZvbyh4OiBTKTsKfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQppbXBsIFMgewogICAgZm4gZm9vKHNlbGYpIHsgLyogLi4uICovIH0KfQpgYGAKCnRoZSB0eXBlIG9mIGBmb29gIGlzICoqbm90KiogYGZuKFMpYCwgYXMgb25lIG1pZ2h0IGV4cGVjdC4KUmF0aGVyLCBpdCBpcyBhIHVuaXF1ZSwgemVyby1zaXplZCBtYXJrZXIgdHlwZSB3cml0dGVuIGhlcmUgYXMgYHR5cGVvZihmb28pYC4KSG93ZXZlciwgYHR5cGVvZihmb28pYCBjYW4gYmUgX2NvZXJjZWRfIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBgZm4oUylgLApzbyB5b3UgcmFyZWx5IG5vdGljZSB0aGlzOgoKYGBgCiMgc3RydWN0IFM7CiMgZm4gZm9vKF86IFMpIHt9CmxldCB4OiBmbihTKSA9IGZvbzsgLy8gT0ssIGNvZXJjZXMKYGBgCgpUaGUgcmVhc29uIHRoYXQgdGhpcyBtYXR0ZXIgaXMgdGhhdCB0aGUgdHlwZSBgZm4oUylgIGlzIG5vdCBzcGVjaWZpYyB0bwphbnkgcGFydGljdWxhciBmdW5jdGlvbjogaXQncyBhIGZ1bmN0aW9uIF9wb2ludGVyXy4gU28gY2FsbGluZyBgeCgpYCByZXN1bHRzCmluIGEgdmlydHVhbCBjYWxsLCB3aGVyZWFzIGBmb28oKWAgaXMgc3RhdGljYWxseSBkaXNwYXRjaGVkLCBiZWNhdXNlIHRoZSB0eXBlCm9mIGBmb29gIHRlbGxzIHVzIHByZWNpc2VseSB3aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4KCkFzIG5vdGVkIGFib3ZlLCBjb2VyY2lvbnMgbWVhbiB0aGF0IG1vc3QgY29kZSBkb2Vzbid0IGhhdmUgdG8gYmUKY29uY2VybmVkIHdpdGggdGhpcyBkaXN0aW5jdGlvbi4gSG93ZXZlciwgeW91IGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlCndoZW4gdXNpbmcgKip0cmFuc211dGUqKiB0byBjb252ZXJ0IGEgZm4gaXRlbSBpbnRvIGEgZm4gcG9pbnRlci4KClRoaXMgaXMgc29tZXRpbWVzIGRvbmUgYXMgcGFydCBvZiBhbiBGRkk6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTEKZXh0ZXJuICJDIiBmbiBmb28odXNlcmRhdGE6IEJveDxpMzI+KSB7CiAgICAvKiAuLi4gKi8KfQoKIyBmbiBjYWxsYmFjayhfOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSkge30KIyB1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKdW5zYWZlIHsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28pOwogICAgY2FsbGJhY2soZik7Cn0KYGBgCgpIZXJlLCB0cmFuc211dGUgaXMgYmVpbmcgdXNlZCB0byBjb252ZXJ0IHRoZSB0eXBlcyBvZiB0aGUgZm4gYXJndW1lbnRzLgpUaGlzIHBhdHRlcm4gaXMgaW5jb3JyZWN0IGJlY2F1c2UgdGhlIHR5cGUgb2YgYGZvb2AgaXMgYSBmdW5jdGlvbiAqKml0ZW0qKgooYHR5cGVvZihmb28pYCksIHdoaWNoIGlzIHplcm8tc2l6ZWQsIGFuZCB0aGUgdGFyZ2V0IHR5cGUgKGBmbigpYCkKaXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpcyBub3QgemVyby1zaXplZC4KVGhpcyBwYXR0ZXJuIHNob3VsZCBiZSByZXdyaXR0ZW4uIFRoZXJlIGFyZSBhIGZldyBwb3NzaWJsZSB3YXlzIHRvIGRvIHRoaXM6CgotIGNoYW5nZSB0aGUgb3JpZ2luYWwgZm4gZGVjbGFyYXRpb24gdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHNpZ25hdHVyZSwKICBhbmQgZG8gdGhlIGNhc3QgaW4gdGhlIGZuIGJvZHkgKHRoZSBwcmVmZXJyZWQgb3B0aW9uKQotIGNhc3QgdGhlIGZuIGl0ZW0gb2YgYSBmbiBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIHRyYW5zbXV0ZSwgYXMgc2hvd24gaGVyZToKCiAgICBgYGAKICAgICMgZXh0ZXJuICJDIiBmbiBmb28oXzogQm94PGkzMj4pIHt9CiAgICAjIHVzZSBzdGQ6Om1lbTo6dHJhbnNtdXRlOwogICAgIyB1bnNhZmUgewogICAgbGV0IGY6IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpID0gdHJhbnNtdXRlKGZvbyBhcyBleHRlcm4gIkMiIGZuKF8pKTsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgdXNpemUpOyAvLyB3b3JrcyB0b28KICAgICMgfQogICAgYGBgCgpUaGUgc2FtZSBhcHBsaWVzIHRvIHRyYW5zbXV0ZXMgdG8gYCptdXQgZm4oKWAsIHdoaWNoIHdlcmUgb2JzZXJ2ZWQgaW4gcHJhY3RpY2UuCk5vdGUgdGhvdWdoIHRoYXQgdXNlIG9mIHRoaXMgdHlwZSBpcyBnZW5lcmFsbHkgaW5jb3JyZWN0LgpUaGUgaW50ZW50aW9uIGlzIHR5cGljYWxseSB0byBkZXNjcmliZSBhIGZ1bmN0aW9uIHBvaW50ZXIsIGJ1dCBqdXN0IGBmbigpYAphbG9uZSBzdWZmaWNlcyBmb3IgdGhhdC4gYCptdXQgZm4oKWAgaXMgYSBwb2ludGVyIHRvIGEgZm4gcG9pbnRlci4KKFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgdHlwaWNhbGx5IGp1c3QgcGFzc2VkIHRvIEMgY29kZSwgaG93ZXZlciwgdGhpcyByYXJlbHkKbWFrZXMgYSBkaWZmZXJlbmNlIGluIHByYWN0aWNlLikKCltyZmM0MDFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDAxLWNvZXJjaW9ucy5tZAoAK////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///z+bFQAAAJsV8wiUBQCPeyYBAACgCgACBgChCgEABADEAw4AAAOfCgAEAMQDDgAAAJ8KAgUBAtkBAQEA8wgAAaAKAAQAxAMOAAACnwoAAQQArwMkAAADngoABACvAyQAAACeCgEBAPMIAAKTBQCwAxIAAAICBUUwNTkxAAEfBQAAAAXzCAQArwMkAAAAngoBAQH3CAABnwoAlgUAvnsmAQAApQoAAAKWBQC+eyYBAAICjwRUaGlzIGVycm9yIG9jY3VycyB3aGVuIHlvdSBkZWZpbmVkIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBmdW5jdGlvbnMgd2l0aCBzYW1lCm5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkyCnN0cnVjdCBGb287CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBwcmV2aW91cyBkZWZpbml0aW9uIGhlcmUKfQoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30gLy8gZHVwbGljYXRlIGRlZmluaXRpb24gaGVyZQp9CmBgYAoKQSBzaW1pbGFyIGVycm9yIGlzIEUwMjAxLiBUaGUgZGlmZmVyZW5jZSBpcyB3aGV0aGVyIHRoZXJlIGlzIG9uZSBkZWNsYXJhdGlvbgpibG9jayBvciBub3QuIFRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBtdXN0IGdpdmUgZWFjaCBgZm5gIGEgdW5pcXVlIG5hbWUuCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGJheigpIHt9IC8vIGRlZmluZSB3aXRoIGRpZmZlcmVudCBuYW1lCn0KYGBgCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//wGPBAAAAI8E8wiWBQC+eyYBAACkCgACBgClCgEABADEAw4AAAOjCgAEAMQDDgAAAKMKAgUBAtkBAQEA8wgAAaQKAAQAxAMOAAACowoAAQQArwMkAAADogoABACvAyQAAACiCgEBAPMIAAKVBQCwAxIAAAICBUUwNTkyAAEfBQAAAAXzCAQArwMkAAAAogoBAQH3CAABowoAmAUA7XsmAQAAqQoAAAKYBQDteyYBAAIC/QNZb3UgdHJpZWQgdG8gc3VwcGx5IGFuIGBGbmAtYmFzZWQgdHlwZSB3aXRoIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCnRoYW4gd2hhdCB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkzCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICAvLyBbRTA1OTNdIGNsb3N1cmUgdGFrZXMgMSBhcmd1bWVudCBidXQgMCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkCiAgICBmb28ofHl8IHsgfSk7Cn0KYGBgCgpZb3UgaGF2ZSB0byBwcm92aWRlIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgYXMgZXhwZWN0ZWQgYnkgdGhlIGBGbmAtYmFzZWQKdHlwZS4gU28gdG8gZml4IHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYHlgIGFyZ3VtZW50OgoKYGBgCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICBmb28ofHwgeyB9KTsgLy8gb2shCn0KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////H/0DAAAA/QPzCJgFAO17JgEAAKgKAAIGAKkKAQAEAMQDDgAAA6cKAAQAxAMOAAAApwoCBQEC2QEBAQDzCAABqAoABADEAw4AAAKnCgABBACvAyQAAAOmCgAEAK8DJAAAAKYKAQEA8wgAApcFALADEgAAAgIFRTA1OTMAAR8FAAAABfMIBACvAyQAAACmCgEBAfcIAAGnCgCaBQCcfCYBAACtCgAAApoFAJx8JgEAAgKTA0Egbm9uLW11dGFibGUgdmFsdWUgd2FzIGFzc2lnbmVkIGEgdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0CnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07CnNzLmVhcnRoID0gMjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgYHNzYCBhcyBtdXRhYmxlIGJ5IHVzaW5nIHRoZSBgbXV0YCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBTb2xhclN5c3RlbSB7CiAgICBlYXJ0aDogaTMyLAp9CgpsZXQgbXV0IHNzID0gU29sYXJTeXN0ZW0geyBlYXJ0aDogMyB9OyAvLyBkZWNsYXJpbmcgYHNzYCBhcyBtdXRhYmxlCnNzLmVhcnRoID0gMjsgLy8gb2shCmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MDAAAAkwPzCJoFAJx8JgEAAKwKAAIGAK0KAQAEAMQDDgAAA6sKAAQAxAMOAAAAqwoCBQEC2QEBAQDzCAABrAoABADEAw4AAAKrCgABBACvAyQAAAOqCgAEAK8DJAAAAKoKAQEA8wgAApkFALADEgAAAgIFRTA1OTQAAR8FAAAABfMIBACvAyQAAACqCgEBAfcIAAGrCgCcBQDLfCYBAACxCgAAApwFAMt8JgEAAgLvAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNsb3N1cmVzIGNhbm5vdCBtdXRhdGUgaW1tdXRhYmxlIGNhcHR1cmVkIHZhcmlhYmxlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKbGV0IHggPSAzOyAvLyBlcnJvcjogY2xvc3VyZSBjYW5ub3QgYXNzaWduIHRvIGltbXV0YWJsZSBsb2NhbCB2YXJpYWJsZSBgeGAKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCgpNYWtlIHRoZSB2YXJpYWJsZSBiaW5kaW5nIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMzsgLy8gb2shCmxldCBtdXQgYyA9IHx8IHsgeCArPSAxIH07CmBgYAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////////H+8CAAAA7wLzCJwFAMt8JgEAALAKAAIGALEKAQAEAMQDDgAAA68KAAQAxAMOAAAArwoCBQEC2QEBAQDzCAABsAoABADEAw4AAAKvCgABBACvAyQAAAOuCgAEAK8DJAAAAK4KAQEA8wgAApsFALADEgAAAgIFRTA1OTUAAR8FAAAABfMIBACvAyQAAACuCgEBAfcIAAGvCgCeBQD6fCYBAAC1CgAAAp4FAPp8JgEAAgLwAlRoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgeW91IHRyaWVkIHRvIG11dGFibHkgYm9ycm93IGEgbm9uLW11dGFibGUgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk2CmxldCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIGVycm9yOiBjYW5ub3QgYm9ycm93IG11dGFibHkKYGBgCgpJbiBoZXJlLCBgeGAgaXNuJ3QgbXV0YWJsZSwgc28gd2hlbiB3ZSB0cnkgdG8gbXV0YWJseSBib3Jyb3cgaXQgaW4gYHlgLCBpdApmYWlscy4gVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgYHhgIG11dGFibGU6CgpgYGAKbGV0IG11dCB4ID0gMTsKbGV0IHkgPSAmbXV0IHg7IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////z/wAgAAAPAC8wieBQD6fCYBAAC0CgACBgC1CgEABADEAw4AAAOzCgAEAMQDDgAAALMKAgUBAtkBAQEA8wgAAbQKAAQAxAMOAAACswoAAQQArwMkAAADsgoABACvAyQAAACyCgEBAPMIAAKdBQCwAxIAAAICBUUwNTk2AAEfBQAAAAXzCAQArwMkAAAAsgoBAQH3CAABswoAoAUAqX0mAQAAuQoAAAKgBQCpfSYBAAIC/QRUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgdmFsdWUgd2FzIGRyb3BwZWQgd2hpbGUgaXQgd2FzIHN0aWxsIGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NwpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBPcHRpb248JidhIHUzMj4sCn0KCmxldCBtdXQgeCA9IEZvbyB7IHg6IE5vbmUgfTsKewogICAgbGV0IHkgPSAwOwogICAgeC54ID0gU29tZSgmeSk7IC8vIGVycm9yOiBgeWAgZG9lcyBub3QgbGl2ZSBsb25nIGVub3VnaAp9CnByaW50bG4hKCJ7Oj99IiwgeC54KTsKYGBgCgpIZXJlLCBgeWAgaXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBpbm5lciBzY29wZSwgYnV0IGl0IGlzIGJvcnJvd2VkIGJ5CmB4YCB1bnRpbCB0aGUgYHByaW50bG5gLiBUbyBmaXggdGhlIHByZXZpb3VzIGV4YW1wbGUsIGp1c3QgcmVtb3ZlIHRoZSBzY29wZQpzbyB0aGF0IGB5YCBpc24ndCBkcm9wcGVkIHVudGlsIGFmdGVyIHRoZSBwcmludGxuCgpgYGAKc3RydWN0IEZvbzwnYT4gewogICAgeDogT3B0aW9uPCYnYSB1MzI+LAp9CgpsZXQgbXV0IHggPSBGb28geyB4OiBOb25lIH07CgpsZXQgeSA9IDA7CngueCA9IFNvbWUoJnkpOwoKcHJpbnRsbiEoIns6P30iLCB4LngpOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9BAAAAP0E8wigBQCpfSYBAAC4CgACBgC5CgEABADEAw4AAAO3CgAEAMQDDgAAALcKAgUBAtkBAQEA8wgAAbgKAAQAxAMOAAACtwoAAQQArwMkAAADtgoABACvAyQAAAC2CgEBAPMIAAKfBQCwAxIAAAICBUUwNTk3AAEfBQAAAAXzCAQArwMkAAAAtgoBAQH3CAABtwoAogUA2H0mAQAAvQoAAAKiBQDYfSYBAAICrwRUaGlzIGVycm9yIG9jY3VycyB3aGVuIGEgbWV0aG9kIGlzIHVzZWQgb24gYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IGl0OgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5OQpzdHJ1Y3QgTW91dGg7CgpsZXQgeCA9IE1vdXRoOwp4LmNob2NvbGF0ZSgpOyAvLyBlcnJvcjogbm8gbWV0aG9kIG5hbWVkIGBjaG9jb2xhdGVgIGZvdW5kIGZvciB0eXBlIGBNb3V0aGAKICAgICAgICAgICAgICAgLy8gICAgICAgIGluIHRoZSBjdXJyZW50IHNjb3BlCmBgYAoKSW4gdGhpcyBjYXNlLCB5b3UgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGBjaG9jb2xhdGVgIG1ldGhvZCB0byBmaXggdGhlIGVycm9yOgoKYGBgCnN0cnVjdCBNb3V0aDsKCmltcGwgTW91dGggewogICAgZm4gY2hvY29sYXRlKCZzZWxmKSB7IC8vIFdlIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIGhlcmUuCiAgICAgICAgcHJpbnRsbiEoIkhtbW0hIEkgbG92ZSBjaG9jb2xhdGUhIik7CiAgICB9Cn0KCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIG9rIQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////x+vBAAAAK8E8wiiBQDYfSYBAAC8CgACBgC9CgEABADEAw4AAAO7CgAEAMQDDgAAALsKAgUBAtkBAQEA8wgAAbwKAAQAxAMOAAACuwoAAQQArwMkAAADugoABACvAyQAAAC6CgEBAPMIAAKhBQCwAxIAAAICBUUwNTk5AAEfBQAAAAXzCAQArwMkAAAAugoBAQH3CAABuwoApAUAh34mAQAAwQoAAAKkBQCHfiYBAAIC0wZBbiB1bmFyeSBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjAwCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCiFRdWVzdGlvbjo6WWVzOyAvLyBlcnJvcjogY2Fubm90IGFwcGx5IHVuYXJ5IG9wZXJhdG9yIGAhYCB0byB0eXBlIGBRdWVzdGlvbmAKYGBgCgpJbiB0aGlzIGNhc2UsIGBRdWVzdGlvbmAgd291bGQgbmVlZCB0byBpbXBsZW1lbnQgdGhlIGBzdGQ6Om9wczo6Tm90YCB0cmFpdCBpbgpvcmRlciB0byBiZSBhYmxlIHRvIHVzZSBgIWAgb24gaXQuIExldCdzIGltcGxlbWVudCBpdDoKCmBgYAp1c2Ugc3RkOjpvcHM6Ok5vdDsKCmVudW0gUXVlc3Rpb24gewogICAgWWVzLAogICAgTm8sCn0KCi8vIFdlIGltcGxlbWVudCB0aGUgYE5vdGAgdHJhaXQgb24gdGhlIGVudW0uCmltcGwgTm90IGZvciBRdWVzdGlvbiB7CiAgICB0eXBlIE91dHB1dCA9IGJvb2w7CgogICAgZm4gbm90KHNlbGYpIC0+IGJvb2wgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBRdWVzdGlvbjo6WWVzID0+IGZhbHNlLCAvLyBJZiB0aGUgYEFuc3dlcmAgaXMgYFllc2AsIHRoZW4gaXQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcmV0dXJucyBmYWxzZS4KICAgICAgICAgICAgUXVlc3Rpb246Ok5vID0+IHRydWUsIC8vIEFuZCBoZXJlIHdlIGRvIHRoZSBvcHBvc2l0ZS4KICAgICAgICB9CiAgICB9Cn0KCmFzc2VydF9lcSEoIVF1ZXN0aW9uOjpZZXMsIGZhbHNlKTsKYXNzZXJ0X2VxISghUXVlc3Rpb246Ok5vLCB0cnVlKTsKYGBgCgAO////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H9MGAAAA0wbzCKQFAId+JgEAAMAKAAIGAMEKAQAEAMQDDgAAA78KAAQAxAMOAAAAvwoCBQEC2QEBAQDzCAABwAoABADEAw4AAAK/CgABBACvAyQAAAO+CgAEAK8DJAAAAL4KAQEA8wgAAqMFALADEgAAAgIFRTA2MDAAAR8FAAAABfMIBACvAyQAAAC+CgEBAfcIAAG/CgCmBQC2fiYBAADFCgAAAqYFALZ+JgEAAgLFAk5vIGBtYWluYCBmdW5jdGlvbiB3YXMgZm91bmQgaW4gYSBiaW5hcnkgY3JhdGUuCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIGEgYG1haW5gIGZ1bmN0aW9uOgoKYGBgCmZuIG1haW4oKSB7CiAgICAvLyBZb3VyIHByb2dyYW0gd2lsbCBzdGFydCBoZXJlLgogICAgcHJpbnRsbiEoIkhlbGxvIHdvcmxkISIpOwp9CmBgYAoKSWYgeW91IGRvbid0IGtub3cgdGhlIGJhc2ljcyBvZiBSdXN0LCB5b3UgY2FuIGxvb2sgYXQgdGhlCltSdXN0IEJvb2tdW3J1c3QtYm9va10gdG8gZ2V0IHN0YXJ0ZWQuCgpbcnVzdC1ib29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rLwoABv///////////wH///////////8B////////////Af///////////wH///////////8BH8UCAAAAxQLzCKYFALZ+JgEAAMQKAAIGAMUKAQAEAMQDDgAAA8MKAAQAxAMOAAAAwwoCBQEC2QEBAQDzCAABxAoABADEAw4AAALDCgABBACvAyQAAAPCCgAEAK8DJAAAAMIKAQEA8wgAAqUFALADEgAAAgIFRTA2MDEAAR8FAAAABfMIBACvAyQAAADCCgEBAfcIAAHDCgCoBQDlfiYBAADJCgAAAqgFAOV+JgEAAgKEAkFuIHVua25vd24gb3IgaW52YWxpZCBsaW50IHdhcyB1c2VkIG9uIHRoZSBjb21tYW5kIGxpbmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgc2gKcnVzdGMgLUQgYm9ndXMgcnVzdF9maWxlLnJzCmBgYAoKTWF5YmUgeW91IGp1c3QgbWlzc3BlbGxlZCB0aGUgbGludCBuYW1lIG9yIHRoZSBsaW50IGRvZXNuJ3QgZXhpc3QgYW55bW9yZS4KRWl0aGVyIHdheSwgdHJ5IHRvIHVwZGF0ZS9yZW1vdmUgaXQgaW4gb3JkZXIgdG8gZml4IHRoZSBlcnJvci4KAAX///////////8B////////////Af///////////wH///////////8BD4QCAAAAhALzCKgFAOV+JgEAAMgKAAIGAMkKAQAEAMQDDgAAA8cKAAQAxAMOAAAAxwoCBQEC2QEBAQDzCAAByAoABADEAw4AAALHCgABBACvAyQAAAPGCgAEAK8DJAAAAMYKAQEA8wgAAqcFALADEgAAAgIFRTA2MDIAAR8FAAAABfMIBACvAyQAAADGCgEBAfcIAAHHCgCqBQCUfyYBAADNCgAAAqoFAJR/JgEAAgKNBkEgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwMwptb2QgZm9vIHsKICAgIGNvbnN0IFBSSVZBVEU6IHUzMiA9IDB4X2FfYmFkXzFkZWFfdTMyOyAvLyBUaGlzIGNvbnN0IGlzIHByaXZhdGUsIHNvIHdlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gY2FuJ3QgdXNlIGl0IG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gYGZvb2AgbW9kdWxlLgp9CgpwcmludGxuISgiY29uc3QgdmFsdWU6IHt9IiwgZm9vOjpQUklWQVRFKTsgLy8gZXJyb3I6IGNvbnN0YW50IGBQUklWQVRFYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpcyBwcml2YXRlCmBgYAoKSW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IsIHlvdSBuZWVkIHRvIG1ha2UgdGhlIGl0ZW0gcHVibGljIGJ5IHVzaW5nIHRoZSBgcHViYAprZXl3b3JkLiBFeGFtcGxlOgoKYGBgCm1vZCBmb28gewogICAgcHViIGNvbnN0IFBSSVZBVEU6IHUzMiA9IDB4X2FfYmFkXzFkZWFfdTMyOyAvLyBXZSBzZXQgaXQgcHVibGljIGJ5IHVzaW5nIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgcHViYCBrZXl3b3JkLgp9CgpwcmludGxuISgiY29uc3QgdmFsdWU6IHt9IiwgZm9vOjpQUklWQVRFKTsgLy8gb2shCmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/jQYAAACNBvMIqgUAlH8mAQAAzAoAAgYAzQoBAAQAxAMOAAADywoABADEAw4AAADLCgIFAQLZAQEBAPMIAAHMCgAEAMQDDgAAAssKAAEEAK8DJAAAA8oKAAQArwMkAAAAygoBAQDzCAACqQUAsAMSAAACAgVFMDYwMwABHwUAAAAF8wgEAK8DJAAAAMoKAQEB9wgAAcsKAKwFAMN/JgEAANEKAAACrAUAw38mAQACAqoGQSBjYXN0IHRvIGBjaGFyYCB3YXMgYXR0ZW1wdGVkIG9uIGEgdHlwZSBvdGhlciB0aGFuIGB1OGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA0CjB1MzIgYXMgY2hhcjsgLy8gZXJyb3I6IG9ubHkgYHU4YCBjYW4gYmUgY2FzdCBhcyBgY2hhcmAsIG5vdCBgdTMyYApgYGAKCmBjaGFyYCBpcyBhIFVuaWNvZGUgU2NhbGFyIFZhbHVlLCBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gMCB0byAweEQ3RkYgYW5kCjB4RTAwMCB0byAweDEwRkZGRi4gKFRoZSBnYXAgaXMgZm9yIHN1cnJvZ2F0ZSBwYWlycy4pIE9ubHkgYHU4YCBhbHdheXMgZml0cyBpbgp0aG9zZSByYW5nZXMgc28gb25seSBgdThgIG1heSBiZSBjYXN0IHRvIGBjaGFyYC4KClRvIGFsbG93IGxhcmdlciB2YWx1ZXMsIHVzZSBgY2hhcjo6ZnJvbV91MzJgLCB3aGljaCBjaGVja3MgdGhlIHZhbHVlIGlzIHZhbGlkLgoKYGBgCmFzc2VydF9lcSEoODZ1OCBhcyBjaGFyLCAnVicpOyAvLyBvayEKYXNzZXJ0X2VxIShjaGFyOjpmcm9tX3UzMigweDNCMSksIFNvbWUoJ86xJykpOyAvLyBvayEKYXNzZXJ0X2VxIShjaGFyOjpmcm9tX3UzMigweEQ4MDApLCBOb25lKTsgLy8gbm90IGEgVVNWLgpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3+qBgAAAKoG8wisBQDDfyYBAADQCgACBgDRCgEABADEAw4AAAPPCgAEAMQDDgAAAM8KAgUBAtkBAQEA8wgAAdAKAAQAxAMOAAACzwoAAQQArwMkAAADzgoABACvAyQAAADOCgEBAPMIAAKrBQCwAxIAAAICBUUwNjA0AAEfBQAAAAXzCAQArwMkAAAAzgoBAQH3CAABzwoArgUA8n8mAQAA1QoAAAKuBQDyfyYBAAICngVBbiBpbnZhbGlkIGNhc3Qgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA1CmxldCB4ID0gMHU4Owp4IGFzIFZlYzx1OD47IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGB1OGAgYXMgYHN0ZDo6dmVjOjpWZWM8dTg+YAoKLy8gQW5vdGhlciBleGFtcGxlCgpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOyAvLyBTbyBoZXJlLCBgdmAgaXMgYSBgKmNvbnN0IHU4YC4KdiBhcyAmdTg7IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGAqY29uc3QgdThgIGFzIGAmdThgCmBgYAoKT25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoIG90aGVyLiBFeGFtcGxlczoKCmBgYApsZXQgeCA9IDB1ODsKeCBhcyB1MzI7IC8vIG9rIQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgaTg7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wOeBQAAAJ4F8wiuBQDyfyYBAADUCgACBgDVCgEABADEAw4AAAPTCgAEAMQDDgAAANMKAgUBAtkBAQEA8wgAAdQKAAQAxAMOAAAC0woAAQQArwMkAAAD0goABACvAyQAAADSCgEBAPMIAAKtBQCwAxIAAAICBUUwNjA1AAEfBQAAAAXzCAQArwMkAAAA0goBAQH3CAAB0woAsAUAoYABJgEAANkKAAACsAUAoYABJgEAAgK9BEFuIGluY29tcGF0aWJsZSBjYXN0IHdhcyBhdHRlbXB0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA2CmxldCB4ID0gJjB1ODsgLy8gSGVyZSwgYHhgIGlzIGEgYCZ1OGAuCmxldCB5OiB1MzIgPSB4IGFzIHUzMjsgLy8gZXJyb3I6IGNhc3RpbmcgYCZ1OGAgYXMgYHUzMmAgaXMgaW52YWxpZApgYGAKCldoZW4gY2FzdGluZywga2VlcCBpbiBtaW5kIHRoYXQgb25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoCm90aGVyLiBFeGFtcGxlOgoKYGBgCmxldCB4ID0gJjB1ODsKbGV0IHk6IHUzMiA9ICp4IGFzIHUzMjsgLy8gV2UgZGVyZWZlcmVuY2UgaXQgZmlyc3QgYW5kIHRoZW4gY2FzdCBpdC4KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIFR5cGUgY2FzdCBzZWN0aW9uIGluCltUaGUgUmVmZXJlbmNlIEJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9leHByZXNzaW9ucy9vcGVyYXRvci1leHByLmh0bWwjdHlwZS1jYXN0LWV4cHJlc3Npb25zCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x+9BAAAAL0E8wiwBQChgAEmAQAA2AoAAgYA2QoBAAQAxAMOAAAD1woABADEAw4AAADXCgIFAQLZAQEBAPMIAAHYCgAEAMQDDgAAAtcKAAEEAK8DJAAAA9YKAAQArwMkAAAA1goBAQDzCAACrwUAsAMSAAACAgVFMDYwNgABHwUAAAAF8wgEAK8DJAAAANYKAQEB9wgAAdcKALIFANCAASYBAADdCgAAArIFANCAASYBAAICqQdBIGNhc3QgYmV0d2VlbiBhIHRoaW4gYW5kIGEgZmF0IHBvaW50ZXIgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDcKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgW3U4XTsKYGBgCgpGaXJzdDogd2hhdCBhcmUgdGhpbiBhbmQgZmF0IHBvaW50ZXJzPwoKVGhpbiBwb2ludGVycyBhcmUgInNpbXBsZSIgcG9pbnRlcnM6IHRoZXkgYXJlIHB1cmVseSBhIHJlZmVyZW5jZSB0byBhIG1lbW9yeQphZGRyZXNzLgoKRmF0IHBvaW50ZXJzIGFyZSBwb2ludGVycyByZWZlcmVuY2luZyBEeW5hbWljYWxseSBTaXplZCBUeXBlcyAoYWxzbyBjYWxsZWQKRFNUcykuIERTVHMgZG9uJ3QgaGF2ZSBhIHN0YXRpY2FsbHkga25vd24gc2l6ZSwgdGhlcmVmb3JlIHRoZXkgY2FuIG9ubHkgZXhpc3QKYmVoaW5kIHNvbWUga2luZCBvZiBwb2ludGVyIHRoYXQgY29udGFpbnMgYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4gRm9yIGV4YW1wbGUsCnNsaWNlcyBhbmQgdHJhaXQgb2JqZWN0cyBhcmUgRFNUcy4gSW4gdGhlIGNhc2Ugb2Ygc2xpY2VzLCB0aGUgYWRkaXRpb25hbAppbmZvcm1hdGlvbiB0aGUgZmF0IHBvaW50ZXIgaG9sZHMgaXMgdGhlaXIgc2l6ZS4KClRvIGZpeCB0aGlzIGVycm9yLCBkb24ndCB0cnkgdG8gY2FzdCBkaXJlY3RseSBiZXR3ZWVuIHRoaW4gYW5kIGZhdCBwb2ludGVycy4KCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHR5cGUgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBzZWN0aW9uIG9mIHRoZQpbVGhlIFJ1c3QgUmVmZXJlbmNlXVsxXSBvbiB0eXBlIGNhc3QgZXhwcmVzc2lvbnMuCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////P6kHAAAAqQfzCLIFANCAASYBAADcCgACBgDdCgEABADEAw4AAAPbCgAEAMQDDgAAANsKAgUBAtkBAQEA8wgAAdwKAAQAxAMOAAAC2woAAQQArwMkAAAD2goABACvAyQAAADaCgEBAPMIAAKxBQCwAxIAAAICBUUwNjA3AAEfBQAAAAXzCAQArwMkAAAA2goBAQH3CAAB2woAtAUA/4ABJgEAAOEKAAACtAUA/4ABJgEAAgKwA0FuIGF0dGVtcHQgdG8gdXNlIGluZGV4IG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQgd2FzIHBlcmZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDgKMHU4WzJdOyAvLyBlcnJvcjogY2Fubm90IGluZGV4IGludG8gYSB2YWx1ZSBvZiB0eXBlIGB1OGAKYGBgCgpUbyBiZSBhYmxlIHRvIGluZGV4IGludG8gYSB0eXBlIGl0IG5lZWRzIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQuIEV4YW1wbGU6CgpgYGAKbGV0IHY6IFZlYzx1OD4gPSB2ZWMhWzAsIDEsIDIsIDNdOwoKLy8gVGhlIGBWZWNgIHR5cGUgaW1wbGVtZW50cyB0aGUgYEluZGV4YCB0cmFpdCBzbyB5b3UgY2FuIGRvOgpwcmludGxuISgie30iLCB2WzJdKTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////P7ADAAAAsAPzCLQFAP+AASYBAADgCgACBgDhCgEABADEAw4AAAPfCgAEAMQDDgAAAN8KAgUBAtkBAQEA8wgAAeAKAAQAxAMOAAAC3woAAQQArwMkAAAD3goABACvAyQAAADeCgEBAPMIAAKzBQCwAxIAAAICBUUwNjA4AAEfBQAAAAXzCAQArwMkAAAA3goBAQH3CAAB3woAtgUAroEBJgEAAOUKAAACtgUAroEBJgEAAgLiA0F0dGVtcHRlZCB0byBhY2Nlc3MgYSBub24tZXhpc3RlbnQgZmllbGQgaW4gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA5CnN0cnVjdCBTdHJ1Y3RXaXRoRmllbGRzIHsKICAgIHg6IHUzMiwKfQoKbGV0IHMgPSBTdHJ1Y3RXaXRoRmllbGRzIHsgeDogMCB9OwpwcmludGxuISgie30iLCBzLmZvbyk7IC8vIGVycm9yOiBubyBmaWVsZCBgZm9vYCBvbiB0eXBlIGBTdHJ1Y3RXaXRoRmllbGRzYApgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBjaGVjayB0aGF0IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZQpmaWVsZCBhY3R1YWxseSBleGlzdHMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IFN0cnVjdFdpdGhGaWVsZHMgewogICAgeDogdTMyLAp9CgpsZXQgcyA9IFN0cnVjdFdpdGhGaWVsZHMgeyB4OiAwIH07CnByaW50bG4hKCJ7fSIsIHMueCk7IC8vIG9rIQpgYGAKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////z/iAwAAAOID8wi2BQCugQEmAQAA5AoAAgYA5QoBAAQAxAMOAAAD4woABADEAw4AAADjCgIFAQLZAQEBAPMIAAHkCgAEAMQDDgAAAuMKAAEEAK8DJAAAA+IKAAQArwMkAAAA4goBAQDzCAACtQUAsAMSAAACAgVFMDYwOQABHwUAAAAF8wgEAK8DJAAAAOIKAQEB9wgAAeMKALgFAN2BASYBAADpCgAAArgFAN2BASYBAAIC7wZBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgZmllbGQgb24gYSBwcmltaXRpdmUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTAKbGV0IHg6IHUzMiA9IDA7CnByaW50bG4hKCJ7fSIsIHguZm9vKTsgLy8gZXJyb3I6IGB7aW50ZWdlcn1gIGlzIGEgcHJpbWl0aXZlIHR5cGUsIHRoZXJlZm9yZQogICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBkb2Vzbid0IGhhdmUgZmllbGRzCmBgYAoKUHJpbWl0aXZlIHR5cGVzIGFyZSB0aGUgbW9zdCBiYXNpYyB0eXBlcyBhdmFpbGFibGUgaW4gUnVzdCBhbmQgZG9uJ3QgaGF2ZQpmaWVsZHMuIFRvIGFjY2VzcyBkYXRhIHZpYSBuYW1lZCBmaWVsZHMsIHN0cnVjdCB0eXBlcyBhcmUgdXNlZC4gRXhhbXBsZToKCmBgYAovLyBXZSBkZWNsYXJlIHN0cnVjdCBjYWxsZWQgYEZvb2AgY29udGFpbmluZyB0d28gZmllbGRzOgpzdHJ1Y3QgRm9vIHsKICAgIHg6IHUzMiwKICAgIHk6IGk2NCwKfQoKLy8gV2UgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHRoaXMgc3RydWN0OgpsZXQgdmFyaWFibGUgPSBGb28geyB4OiAwLCB5OiAtMTIgfTsKLy8gQW5kIHdlIGNhbiBub3cgYWNjZXNzIGl0cyBmaWVsZHM6CnByaW50bG4hKCJ4OiB7fSwgeToge30iLCB2YXJpYWJsZS54LCB2YXJpYWJsZS55KTsKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBbcHJpbWl0aXZlc10gYW5kIFtzdHJ1Y3RzXSwgdGFrZSBhIGxvb2sgYXQgdGhlIEJvb2suCgpbcHJpbWl0aXZlc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDAzLTAyLWRhdGEtdHlwZXMuaHRtbApbc3RydWN0c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA1LTAwLXN0cnVjdHMuaHRtbAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8f7wYAAADvBvMIuAUA3YEBJgEAAOgKAAIGAOkKAQAEAMQDDgAAA+cKAAQAxAMOAAAA5woCBQEC2QEBAQDzCAAB6AoABADEAw4AAALnCgABBACvAyQAAAPmCgAEAK8DJAAAAOYKAQEA8wgAArcFALADEgAAAgIFRTA2MTAAAR8FAAAABfMIBACvAyQAAADmCgEBAfcIAAHnCgC6BQCMggEmAQAA7QoAAAK6BQCMggEmAQACAvECQXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdmFyaWFibGUgd2hpY2ggY2Fubm90IGJlIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTQKbGV0IHkgPSAwdTMyOwoqeTsgLy8gZXJyb3I6IHR5cGUgYHUzMmAgY2Fubm90IGJlIGRlcmVmZXJlbmNlZApgYGAKCk9ubHkgdHlwZXMgaW1wbGVtZW50aW5nIGBzdGQ6Om9wczo6RGVyZWZgIGNhbiBiZSBkZXJlZmVyZW5jZWQgKHN1Y2ggYXMgYCZUYCkuCkV4YW1wbGU6CgpgYGAKbGV0IHkgPSAwdTMyOwpsZXQgeCA9ICZ5OwovLyBTbyBoZXJlLCBgeGAgaXMgYSBgJnUzMmAsIHNvIHdlIGNhbiBkZXJlZmVyZW5jZSBpdDoKKng7IC8vIG9rIQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af///////3/xAgAAAPEC8wi6BQCMggEmAQAA7AoAAgYA7QoBAAQAxAMOAAAD6woABADEAw4AAADrCgIFAQLZAQEBAPMIAAHsCgAEAMQDDgAAAusKAAEEAK8DJAAAA+oKAAQArwMkAAAA6goBAQDzCAACuQUAsAMSAAACAgVFMDYxNAABHwUAAAAF8wgEAK8DJAAAAOoKAQEB9wgAAesKALwFALuCASYBAADxCgAAArwFALuCASYBAAIC/QRBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWV0aG9kIGxpa2UgYSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTUKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCn0KCmltcGwgRm9vIHsKICAgIGZuIG1ldGhvZCgmc2VsZikge30KfQoKbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kOyAvLyBlcnJvcjogYXR0ZW1wdGVkIHRvIHRha2UgdmFsdWUgb2YgbWV0aG9kIGBtZXRob2RgIG9uIHR5cGUgYEZvb2AKYGBgCgpJZiB5b3Ugd2FudCB0byB1c2UgYSBtZXRob2QsIGFkZCBgKClgIGFmdGVyIGl0OgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKZi5tZXRob2QoKTsKYGBgCgpIb3dldmVyLCBpZiB5b3Ugd2FudGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9mIGEgc3RydWN0IGNoZWNrIHRoYXQgdGhlIGZpZWxkIG5hbWUKaXMgc3BlbGxlZCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKIyBzdHJ1Y3QgRm9vIHsgeDogdTMyIH0KIyBpbXBsIEZvbyB7IGZuIG1ldGhvZCgmc2VsZikge30gfQojIGxldCBmID0gRm9vIHsgeDogMCB9OwpwcmludGxuISgie30iLCBmLngpOwpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////x/9BAAAAP0E8wi8BQC7ggEmAQAA8AoAAgYA8QoBAAQAxAMOAAAD7woABADEAw4AAADvCgIFAQLZAQEBAPMIAAHwCgAEAMQDDgAAAu8KAAEEAK8DJAAAA+4KAAQArwMkAAAA7goBAQDzCAACuwUAsAMSAAACAgVFMDYxNQABHwUAAAAF8wgEAK8DJAAAAO4KAQEB9wgAAe8KAL4FAOqCASYBAAD1CgAAAr4FAOqCASYBAAICnAhBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgcHJpdmF0ZSBmaWVsZCBvbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTYKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBlcnJvcjogZmllbGQgYHhgIG9mIHN0cnVjdCBgc29tZV9tb2R1bGU6OkZvb2AgaXMgcHJpdmF0ZQpgYGAKCklmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGlzIGZpZWxkLCB5b3UgaGF2ZSB0d28gb3B0aW9uczoKCjEpIFNldCB0aGUgZmllbGQgcHVibGljOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIHg6IHUzMiwgLy8gYHhgIGlzIG5vdyBwdWJsaWMuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBvayEKYGBgCgoyKSBBZGQgYSBnZXR0ZXIgZnVuY3Rpb246CgpgYGAKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBzdGlsbCBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQoKICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGdldHRlciBmdW5jdGlvbiBoZXJlOgogICAgICAgIHB1YiBmbiBnZXRfeCgmc2VsZikgLT4gJnUzMiB7ICZzZWxmLnggfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLmdldF94KCkpOyAvLyBvayEKYGBgCgAR////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cCAAAAJwI8wi+BQDqggEmAQAA9AoAAgYA9QoBAAQAxAMOAAAD8woABADEAw4AAADzCgIFAQLZAQEBAPMIAAH0CgAEAMQDDgAAAvMKAAEEAK8DJAAAA/IKAAQArwMkAAAA8goBAQDzCAACvQUAsAMSAAACAgVFMDYxNgABHwUAAAAF8wgEAK8DJAAAAPIKAQEB9wgAAfMKAMAFAJmDASYBAAD5CgAAAsAFAJmDASYBAAIC9QZBdHRlbXB0ZWQgdG8gcGFzcyBhbiBpbnZhbGlkIHR5cGUgb2YgdmFyaWFibGUgaW50byBhIHZhcmlhZGljIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYxNwojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKZXh0ZXJuICJDIiB7CiAgICBmbiBwcmludGYoZm9ybWF0OiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50Owp9Cgp1bnNhZmUgewogICAgcHJpbnRmKCIlZlxuXDAiLmFzX3B0cigpIGFzIF8sIDBmMzIpOwogICAgLy8gZXJyb3I6IGNhbm5vdCBwYXNzIGFuIGBmMzJgIHRvIHZhcmlhZGljIGZ1bmN0aW9uLCBjYXN0IHRvIGBjX2RvdWJsZWAKfQpgYGAKCkNlcnRhaW4gUnVzdCB0eXBlcyBtdXN0IGJlIGNhc3QgYmVmb3JlIHBhc3NpbmcgdGhlbSB0byBhIHZhcmlhZGljIGZ1bmN0aW9uLApiZWNhdXNlIG9mIGFyY2FuZSBBQkkgcnVsZXMgZGljdGF0ZWQgYnkgdGhlIEMgc3RhbmRhcmQuIFRvIGZpeCB0aGUgZXJyb3IsCmNhc3QgdGhlIHZhbHVlIHRvIHRoZSB0eXBlIHNwZWNpZmllZCBieSB0aGUgZXJyb3IgbWVzc2FnZSAod2hpY2ggeW91IG1heSBuZWVkCnRvIGltcG9ydCBmcm9tIGBzdGQ6Om9zOjpyYXdgKS4KCkluIHRoaXMgY2FzZSwgYGNfZG91YmxlYCBoYXMgdGhlIHNhbWUgc2l6ZSBhcyBgZjY0YCBzbyB3ZSBjYW4gdXNlIGl0IGRpcmVjdGx5OgoKYGBgbm9fcnVuCiMgdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwojIGV4dGVybiAiQyIgewojICAgICBmbiBwcmludGYoZm9ybWF0OiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50OwojIH0KCnVuc2FmZSB7CiAgICBwcmludGYoIiVmXG5cMCIuYXNfcHRyKCkgYXMgXywgMGY2NCk7IC8vIG9rIQp9CmBgYAoADv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////D/UGAAAA9QbzCMAFAJmDASYBAAD4CgACBgD5CgEABADEAw4AAAP3CgAEAMQDDgAAAPcKAgUBAtkBAQEA8wgAAfgKAAQAxAMOAAAC9woAAQQArwMkAAAD9goABACvAyQAAAD2CgEBAPMIAAK/BQCwAxIAAAICBUUwNjE3AAEfBQAAAAXzCAQArwMkAAAA9goBAQH3CAAB9woAwgUAyIMBJgEAAP0KAAACwgUAyIMBJgEAAgKGBEF0dGVtcHRlZCB0byBjYWxsIHNvbWV0aGluZyB3aGljaCBpc24ndCBhIGZ1bmN0aW9uIG5vciBhIG1ldGhvZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjE4CmVudW0gWCB7CiAgICBFbnRyeSwKfQoKWDo6RW50cnkoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwKICAgICAgICAgICAgLy8gZm91bmQgYFg6OkVudHJ5YAoKLy8gT3IgZXZlbiBzaW1wbGVyOgpsZXQgeCA9IDBpMzI7CngoKTsgLy8gZXJyb3I6IGV4cGVjdGVkIGZ1bmN0aW9uLCB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCwgZm91bmQgYGkzMmAKYGBgCgpPbmx5IGZ1bmN0aW9ucyBhbmQgbWV0aG9kcyBjYW4gYmUgY2FsbGVkIHVzaW5nIGAoKWAuIEV4YW1wbGU6CgpgYGAKLy8gV2UgZGVjbGFyZSBhIGZ1bmN0aW9uOgpmbiBpX2FtX2FfZnVuY3Rpb24oKSB7fQoKLy8gQW5kIHdlIGNhbGwgaXQ6CmlfYW1fYV9mdW5jdGlvbigpOwpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT+GBAAAAIYE8wjCBQDIgwEmAQAA/AoAAgYA/QoBAAQAxAMOAAAD+woABADEAw4AAAD7CgIFAQLZAQEBAPMIAAH8CgAEAMQDDgAAAvsKAAEEAK8DJAAAA/oKAAQArwMkAAAA+goBAQDzCAACwQUAsAMSAAACAgVFMDYxOAABHwUAAAAF8wgEAK8DJAAAAPoKAQEB9wgAAfsKAMQFAPeDASYBAACBCwAAAsQFAPeDASYBAAICpgojIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgdHlwZS1jaGVja2VyIG5lZWRlZCB0byBrbm93IHRoZSB0eXBlIG9mIGFuIGV4cHJlc3Npb24sIGJ1dCB0aGF0IHR5cGUgaGFkIG5vdAp5ZXQgYmVlbiBpbmZlcnJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKbGV0IG11dCB4ID0gdmVjIVtdOwptYXRjaCB4LnBvcCgpIHsKICAgIFNvbWUodikgPT4gewogICAgICAgIC8vIEhlcmUsIHRoZSB0eXBlIG9mIGB2YCBpcyBub3QgKHlldCkga25vd24sIHNvIHdlCiAgICAgICAgLy8gY2Fubm90IHJlc29sdmUgdGhpcyBtZXRob2QgY2FsbDoKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBlcnJvcjogdGhlIHR5cGUgb2YgdGhpcyB2YWx1ZSBtdXN0IGJlIGtub3duIGluCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHRoaXMgY29udGV4dAogICAgfQogICAgTm9uZSA9PiB7fQp9CmBgYAoKVHlwZSBpbmZlcmVuY2UgdHlwaWNhbGx5IHByb2NlZWRzIGZyb20gdGhlIHRvcCBvZiB0aGUgZnVuY3Rpb24gdG8gdGhlIGJvdHRvbSwKZmlndXJpbmcgb3V0IHR5cGVzIGFzIGl0IGdvZXMuIEluIHNvbWUgY2FzZXMgLS0gbm90YWJseSBtZXRob2QgY2FsbHMgYW5kCm92ZXJsb2FkYWJsZSBvcGVyYXRvcnMgbGlrZSBgKmAgLS0gdGhlIHR5cGUgY2hlY2tlciBtYXkgbm90IGhhdmUgZW5vdWdoCmluZm9ybWF0aW9uICp5ZXQqIHRvIG1ha2UgcHJvZ3Jlc3MuIFRoaXMgY2FuIGJlIHRydWUgZXZlbiBpZiB0aGUgcmVzdCBvZiB0aGUKZnVuY3Rpb24gcHJvdmlkZXMgZW5vdWdoIGNvbnRleHQgKGJlY2F1c2UgdGhlIHR5cGUtY2hlY2tlciBoYXNuJ3QgbG9va2VkIHRoYXQKZmFyIGFoZWFkIHlldCkuIEluIHRoaXMgY2FzZSwgdHlwZSBhbm5vdGF0aW9ucyBjYW4gYmUgdXNlZCB0byBoZWxwIGl0IGFsb25nLgoKVG8gZml4IHRoaXMgZXJyb3IsIGp1c3Qgc3BlY2lmeSB0aGUgdHlwZSBvZiB0aGUgdmFyaWFibGUuIEV4YW1wbGU6CgpgYGAKbGV0IG11dCB4OiBWZWM8U3RyaW5nPiA9IHZlYyFbXTsgLy8gV2UgcHJlY2lzZSB0aGUgdHlwZSBvZiB0aGUgdmVjIGVsZW1lbnRzLgptYXRjaCB4LnBvcCgpIHsKICAgIFNvbWUodikgPT4gewogICAgICAgIHYudG9fdXBwZXJjYXNlKCk7IC8vIFNpbmNlIHJ1c3RjIG5vdyBrbm93cyB0aGUgdHlwZSBvZiB0aGUgdmVjIGVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbiB1c2UgYHZgJ3MgbWV0aG9kcy4KICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKABX///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B6YKAAAApgrzCMQFAPeDASYBAACACwACBgCBCwEABADEAw4AAAP/CgAEAMQDDgAAAP8KAgUBAtkBAQEA8wgAAYALAAQAxAMOAAAC/woAAQQArwMkAAAD/goABACvAyQAAAD+CgEBAPMIAALDBQCwAxIAAAICBUUwNjE5AAEfBQAAAAXzCAQArwMkAAAA/goBAQH3CAAB/woAxgUApoQBJgEAAIULAAACxgUApoQBJgEAAgKTBUEgY2FzdCB0byBhbiB1bnNpemVkIHR5cGUgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjAKbGV0IHggPSAmWzFfdXNpemUsIDJdIGFzIFt1c2l6ZV07IC8vIGVycm9yOiBjYXN0IHRvIHVuc2l6ZWQgdHlwZTogYCZbdXNpemU7IDJdYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGFzIGBbdXNpemVdYApgYGAKCkluIFJ1c3QsIHNvbWUgdHlwZXMgZG9uJ3QgaGF2ZSBhIGtub3duIHNpemUgYXQgY29tcGlsZS10aW1lLiBGb3IgZXhhbXBsZSwgaW4gYQpzbGljZSB0eXBlIGxpa2UgYFt1MzJdYCwgdGhlIG51bWJlciBvZiBlbGVtZW50cyBpcyBub3Qga25vd24gYXQgY29tcGlsZS10aW1lIGFuZApoZW5jZSB0aGUgb3ZlcmFsbCBzaXplIGNhbm5vdCBiZSBjb21wdXRlZC4gQXMgYSByZXN1bHQsIHN1Y2ggdHlwZXMgY2FuIG9ubHkgYmUKbWFuaXB1bGF0ZWQgdGhyb3VnaCBhIHJlZmVyZW5jZSAoZS5nLiwgYCZUYCBvciBgJm11dCBUYCkgb3Igb3RoZXIgcG9pbnRlci10eXBlCihlLmcuLCBgQm94YCBvciBgUmNgKS4gVHJ5IGNhc3RpbmcgdG8gYSByZWZlcmVuY2UgaW5zdGVhZDoKCmBgYApsZXQgeCA9ICZbMV91c2l6ZSwgMl0gYXMgJlt1c2l6ZV07IC8vIG9rIQpgYGAKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8fkwUAAACTBfMIxgUApoQBJgEAAIQLAAIGAIULAQAEAMQDDgAAA4MLAAQAxAMOAAAAgwsCBQEC2QEBAQDzCAABhAsABADEAw4AAAKDCwABBACvAyQAAAOCCwAEAK8DJAAAAIILAQEA8wgAAsUFALADEgAAAgIFRTA2MjAAAR8FAAAABfMIBACvAyQAAACCCwEBAfcIAAGDCwDIBQDVhAEmAQAAiQsAAALIBQDVhAEmAQACAvgIVGhpcyBlcnJvciBjb2RlIGluZGljYXRlcyBhIG1pc21hdGNoIGJldHdlZW4gdGhlIGxpZmV0aW1lcyBhcHBlYXJpbmcgaW4gdGhlCmZ1bmN0aW9uIHNpZ25hdHVyZSAoaS5lLiwgdGhlIHBhcmFtZXRlciB0eXBlcyBhbmQgdGhlIHJldHVybiB0eXBlKSBhbmQgdGhlCmRhdGEtZmxvdyBmb3VuZCBpbiB0aGUgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjEKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmaTMyKSAtPiAmJ2EgaTMyIHsgLy8gZXJyb3I6IGV4cGxpY2l0IGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByZXF1aXJlZCBpbiB0aGUgdHlwZSBvZgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYHlgCiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpJbiB0aGUgY29kZSBhYm92ZSwgdGhlIGZ1bmN0aW9uIGlzIHJldHVybmluZyBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAsIGJ1dCB0aGUgYCdhYCBhbm5vdGF0aW9uIGluZGljYXRlcyB0aGF0IGl0IGlzIHJldHVybmluZyBkYXRhIG9ubHkgZnJvbSBgeGAuClRvIGZpeCB0aGUgZXJyb3IsIHRoZSBzaWduYXR1cmUgYW5kIHRoZSBib2R5IG11c3QgYmUgbWFkZSB0byBtYXRjaC4gVHlwaWNhbGx5LAp0aGlzIGlzIGRvbmUgYnkgdXBkYXRpbmcgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4gU28sIGluIHRoaXMgY2FzZSwgd2UgY2hhbmdlCnRoZSB0eXBlIG9mIGB5YCB0byBgJidhIGkzMmAsIGxpa2Ugc286CgpgYGAKZm4gZm9vPCdhPih4OiAmJ2EgaTMyLCB5OiAmJ2EgaTMyKSAtPiAmJ2EgaTMyIHsKICAgIGlmIHggPiB5IHsgeCB9IGVsc2UgeyB5IH0KfQpgYGAKCk5vdyB0aGUgc2lnbmF0dXJlIGluZGljYXRlcyB0aGF0IHRoZSBmdW5jdGlvbiBkYXRhIGJvcnJvd2VkIGZyb20gZWl0aGVyIGB4YCBvcgpgeWAuIEFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBjaGFuZ2UgdGhlIGJvZHkgdG8gbm90IHJldHVybiBkYXRhIGZyb20gYHlgOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7CiAgICB4Cn0KYGBgCgAS////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gIAAAA+AjzCMgFANWEASYBAACICwACBgCJCwEABADEAw4AAAOHCwAEAMQDDgAAAIcLAgUBAtkBAQEA8wgAAYgLAAQAxAMOAAAChwsAAQQArwMkAAADhgsABACvAyQAAACGCwEBAPMIAALHBQCwAxIAAAICBUUwNjIxAAEfBQAAAAXzCAQArwMkAAAAhgsBAQH3CAABhwsAygUAhIUBJgEAAI0LAAACygUAhIUBJgEAAgLeBEFuIGludHJpbnNpYyB3YXMgZGVjbGFyZWQgd2l0aG91dCBiZWluZyBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgc3RhdGljIGJyZWFrcG9pbnQ6IGZuKCk7IC8vIGVycm9yOiBpbnRyaW5zaWMgbXVzdCBiZSBhIGZ1bmN0aW9uCn0KCmZuIG1haW4oKSB7IHVuc2FmZSB7IGJyZWFrcG9pbnQoKTsgfSB9CmBgYAoKQW4gaW50cmluc2ljIGlzIGEgZnVuY3Rpb24gYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBnaXZlbiBwcm9ncmFtbWluZyBsYW5ndWFnZQp3aG9zZSBpbXBsZW1lbnRhdGlvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBieSB0aGUgY29tcGlsZXIuIEluIG9yZGVyIHRvIGZpeCB0aGlzCmVycm9yLCBqdXN0IGRlY2xhcmUgYSBmdW5jdGlvbi4gRXhhbXBsZToKCmBgYG5vX3J1bgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgZm4gYnJlYWtwb2ludCgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsgdW5zYWZlIHsgYnJlYWtwb2ludCgpOyB9IH0KYGBgCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wPeBAAAAN4E8wjKBQCEhQEmAQAAjAsAAgYAjQsBAAQAxAMOAAADiwsABADEAw4AAACLCwIFAQLZAQEBAPMIAAGMCwAEAMQDDgAAAosLAAEEAK8DJAAAA4oLAAQArwMkAAAAigsBAQDzCAACyQUAsAMSAAACAgVFMDYyMgABHwUAAAAF8wgEAK8DJAAAAIoLAQEB9wgAAYsLAMwFALOFASYBAACRCwAAAswFALOFASYBAAICoAxBIGxpZmV0aW1lIGRpZG4ndCBtYXRjaCB3aGF0IHdhcyBleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjMKc3RydWN0IEZvbzwnYSwgJ2IsIFQ+KHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTwoJidhICgpLCAmJ2IgKCksIFQpPikKd2hlcmUKICAgIFQ6IENvbnZlcnQ8J2EsICdiPjsKCnRyYWl0IENvbnZlcnQ8J2EsICdiPjogU2l6ZWQgewogICAgZm4gY2FzdCgmJ2Egc2VsZikgLT4gJidiIFNlbGY7Cn0KaW1wbDwnbG9uZzogJ3Nob3J0LCAnc2hvcnQsIFQ+IENvbnZlcnQ8J2xvbmcsICdzaG9ydD4gZm9yIFQgewogICAgZm4gY2FzdCgmJ2xvbmcgc2VsZikgLT4gJidzaG9ydCBUIHsKICAgICAgICBzZWxmCiAgICB9Cn0KLy8gZXJyb3IKZm4gYmFkYm9pPCdpbl8sICdvdXQsIFQ+KAogICAgeDogRm9vPCdpbl8sICdvdXQsIFQ+LAogICAgc2FkbmVzczogJidpbl8gVAopIC0+ICYnb3V0IFQgewogICAgc2FkbmVzcy5jYXN0KCkKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgd2UgdHJpZWQgdG8gc2V0IGEgdmFsdWUgd2l0aCBhbiBpbmNvbXBhdGlibGUgbGlmZXRpbWUgdG8KYW5vdGhlciBvbmUgKGAnaW5fYCBpcyB1bnJlbGF0ZWQgdG8gYCdvdXRgKS4gV2UgY2FuIHNvbHZlIHRoaXMgaXNzdWUgaW4KdHdvIGRpZmZlcmVudCB3YXlzOgoKRWl0aGVyIHdlIG1ha2UgYCdpbl9gIGxpdmUgYXQgbGVhc3QgYXMgbG9uZyBhcyBgJ291dGA6CgpgYGAKc3RydWN0IEZvbzwnYSwgJ2IsIFQ+KHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTwoJidhICgpLCAmJ2IgKCksIFQpPikKd2hlcmUKICAgIFQ6IENvbnZlcnQ8J2EsICdiPjsKCnRyYWl0IENvbnZlcnQ8J2EsICdiPjogU2l6ZWQgewogICAgZm4gY2FzdCgmJ2Egc2VsZikgLT4gJidiIFNlbGY7Cn0KaW1wbDwnbG9uZzogJ3Nob3J0LCAnc2hvcnQsIFQ+IENvbnZlcnQ8J2xvbmcsICdzaG9ydD4gZm9yIFQgewogICAgZm4gY2FzdCgmJ2xvbmcgc2VsZikgLT4gJidzaG9ydCBUIHsKICAgICAgICBzZWxmCiAgICB9Cn0KZm4gYmFkYm9pPCdpbl86ICdvdXQsICdvdXQsIFQ+KAogICAgeDogRm9vPCdpbl8sICdvdXQsIFQ+LAogICAgc2FkbmVzczogJidpbl8gVAopIC0+ICYnb3V0IFQgewogICAgc2FkbmVzcy5jYXN0KCkKfQpgYGAKCk9yIHdlIHVzZSBvbmx5IG9uZSBsaWZldGltZToKCmBgYApzdHJ1Y3QgRm9vPCdhLCAnYiwgVD4oc3RkOjptYXJrZXI6OlBoYW50b21EYXRhPCgmJ2EgKCksICYnYiAoKSwgVCk+KQp3aGVyZQogICAgVDogQ29udmVydDwnYSwgJ2I+OwoKdHJhaXQgQ29udmVydDwnYSwgJ2I+OiBTaXplZCB7CiAgICBmbiBjYXN0KCYnYSBzZWxmKSAtPiAmJ2IgU2VsZjsKfQppbXBsPCdsb25nOiAnc2hvcnQsICdzaG9ydCwgVD4gQ29udmVydDwnbG9uZywgJ3Nob3J0PiBmb3IgVCB7CiAgICBmbiBjYXN0KCYnbG9uZyBzZWxmKSAtPiAmJ3Nob3J0IFQgewogICAgICAgIHNlbGYKICAgIH0KfQpmbiBiYWRib2k8J291dCwgVD4oeDogRm9vPCdvdXQsICdvdXQsIFQ+LCBzYWRuZXNzOiAmJ291dCBUKSAtPiAmJ291dCBUIHsKICAgIHNhZG5lc3MuY2FzdCgpCn0KYGBgCgAZ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////w+gDAAAAKAM8wjMBQCzhQEmAQAAkAsAAgYAkQsBAAQAxAMOAAADjwsABADEAw4AAACPCwIFAQLZAQEBAPMIAAGQCwAEAMQDDgAAAo8LAAEEAK8DJAAAA44LAAQArwMkAAAAjgsBAQDzCAACywUAsAMSAAACAgVFMDYyMwABHwUAAAAF8wgEAK8DJAAAAI4LAQEB9wgAAY8LAM4FAOKFASYBAACVCwAAAs4FAOKFASYBAAIClgdBIHByaXZhdGUgaXRlbSB3YXMgdXNlZCBvdXRzaWRlIG9mIGl0cyBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjQKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBmbiBtZXRob2QoJnNlbGYpIHt9CiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwpmb28ubWV0aG9kKCk7IC8vIGVycm9yOiBtZXRob2QgYG1ldGhvZGAgaXMgcHJpdmF0ZQpgYGAKClR3byBwb3NzaWJpbGl0aWVzIGFyZSBhdmFpbGFibGUgdG8gc29sdmUgdGhpcyBpc3N1ZToKCjEuIE9ubHkgdXNlIHRoZSBpdGVtIGluIHRoZSBzY29wZSBpdCBoYXMgYmVlbiBkZWZpbmVkOgoKYGBgCm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgZm4gbWV0aG9kKCZzZWxmKSB7fQogICAgfQoKICAgIHB1YiBmbiBjYWxsX21ldGhvZChmb286ICZGb28pIHsgLy8gV2UgY3JlYXRlIGEgcHVibGljIGZ1bmN0aW9uLgogICAgICAgIGZvby5tZXRob2QoKTsgLy8gV2hpY2ggY2FsbHMgdGhlIGl0ZW0uCiAgICB9Cn0KCmxldCBmb28gPSBpbm5lcjo6Rm9vOwppbm5lcjo6Y2FsbF9tZXRob2QoJmZvbyk7IC8vIEFuZCBzaW5jZSB0aGUgZnVuY3Rpb24gaXMgcHVibGljLCB3ZSBjYW4gY2FsbCB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBtZXRob2QgdGhyb3VnaCBpdC4KYGBgCgoyLiBNYWtlIHRoZSBpdGVtIHB1YmxpYzoKCmBgYAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBtZXRob2QoJnNlbGYpIHt9IC8vIEl0J3Mgbm93IHB1YmxpYy4KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmZvby5tZXRob2QoKTsgLy8gT2shCmBgYAoAD////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////AZYHAAAAlgfzCM4FAOKFASYBAACUCwACBgCVCwEABADEAw4AAAOTCwAEAMQDDgAAAJMLAgUBAtkBAQEA8wgAAZQLAAQAxAMOAAACkwsAAQQArwMkAAADkgsABACvAyQAAACSCwEBAPMIAALNBQCwAxIAAAICBUUwNjI0AAEfBQAAAAXzCAQArwMkAAAAkgsBAQH3CAABkwsA0AUAkYYBJgEAAJkLAAAC0AUAkYYBJgEAAgLEBEEgY29tcGlsZS10aW1lIGNvbnN0IHZhcmlhYmxlIGlzIHJlZmVycmluZyB0byBhIHRocmVhZC1sb2NhbCBzdGF0aWMgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI1CiMhW2ZlYXR1cmUodGhyZWFkX2xvY2FsKV0KCiNbdGhyZWFkX2xvY2FsXQpzdGF0aWMgWDogdXNpemUgPSAxMjsKCmNvbnN0IFk6IHVzaXplID0gMiAqIFg7CmBgYAoKU3RhdGljIGFuZCBjb25zdCB2YXJpYWJsZXMgY2FuIHJlZmVyIHRvIG90aGVyIGNvbnN0IHZhcmlhYmxlcyBidXQgYSBjb25zdAp2YXJpYWJsZSBjYW5ub3QgcmVmZXIgdG8gYSB0aHJlYWQtbG9jYWwgc3RhdGljIHZhcmlhYmxlLiBJbiB0aGlzIGV4YW1wbGUsCmBZYCBjYW5ub3QgcmVmZXIgdG8gYFhgLiBUbyBmaXggdGhpcywgdGhlIHZhbHVlIGNhbiBiZSBleHRyYWN0ZWQgYXMgYSBjb25zdAphbmQgdGhlbiB1c2VkOgoKYGBgCiMhW2ZlYXR1cmUodGhyZWFkX2xvY2FsKV0KCmNvbnN0IEM6IHVzaXplID0gMTI7CgojW3RocmVhZF9sb2NhbF0Kc3RhdGljIFg6IHVzaXplID0gQzsKCmNvbnN0IFk6IHVzaXplID0gMiAqIEM7CmBgYAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQ/EBAAAAMQE8wjQBQCRhgEmAQAAmAsAAgYAmQsBAAQAxAMOAAADlwsABADEAw4AAACXCwIFAQLZAQEBAPMIAAGYCwAEAMQDDgAAApcLAAEEAK8DJAAAA5YLAAQArwMkAAAAlgsBAQDzCAACzwUAsAMSAAACAgVFMDYyNQABHwUAAAAF8wgEAK8DJAAAAJYLAQEB9wgAAZcLANIFAMCGASYBAACdCwAAAtIFAMCGASYBAAIC7hJUaGlzIGVycm9yIG9jY3VycyBiZWNhdXNlIGEgYm9ycm93IGluIGEgZ2VuZXJhdG9yIHBlcnNpc3RzIGFjcm9zcyBhCnlpZWxkIHBvaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNgojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgICBsZXQgYSA9ICZTdHJpbmc6Om5ldygpOyAvLyA8LS0gVGhpcyBib3Jyb3cuLi4KICAgIHlpZWxkICgpOyAvLyAuLi5pcyBzdGlsbCBpbiBzY29wZSBoZXJlLCB3aGVuIHRoZSB5aWVsZCBvY2N1cnMuCiAgICBwcmludGxuISgie30iLCBhKTsKfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKCkF0IHByZXNlbnQsIGl0IGlzIG5vdCBwZXJtaXR0ZWQgdG8gaGF2ZSBhIHlpZWxkIHRoYXQgb2NjdXJzIHdoaWxlIGEKYm9ycm93IGlzIHN0aWxsIGluIHNjb3BlLiBUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHRoZSBib3Jyb3cgbXVzdAplaXRoZXIgYmUgImNvbnRhaW5lZCIgdG8gYSBzbWFsbGVyIHNjb3BlIHRoYXQgZG9lcyBub3Qgb3ZlcmxhcCB0aGUKeWllbGQgb3IgZWxzZSBlbGltaW5hdGVkIGluIGFub3RoZXIgd2F5LiBTbywgZm9yIGV4YW1wbGUsIHdlIG1pZ2h0CnJlc29sdmUgdGhlIHByZXZpb3VzIGV4YW1wbGUgYnkgcmVtb3ZpbmcgdGhlIGJvcnJvdyBhbmQganVzdCBzdG9yaW5nCnRoZSBpbnRlZ2VyIGJ5IHZhbHVlOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICAgIGxldCBhID0gMzsKICAgIHlpZWxkICgpOwogICAgcHJpbnRsbiEoInt9IiwgYSk7Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpUaGlzIGlzIGEgdmVyeSBzaW1wbGUgY2FzZSwgb2YgY291cnNlLiBJbiBtb3JlIGNvbXBsZXggY2FzZXMsIHdlIG1heQp3aXNoIHRvIGhhdmUgbW9yZSB0aGFuIG9uZSByZWZlcmVuY2UgdG8gdGhlIHZhbHVlIHRoYXQgd2FzIGJvcnJvd2VkIC0tCmluIHRob3NlIGNhc2VzLCBzb21ldGhpbmcgbGlrZSB0aGUgYFJjYCBvciBgQXJjYCB0eXBlcyBtYXkgYmUgdXNlZnVsLgoKVGhpcyBlcnJvciBhbHNvIGZyZXF1ZW50bHkgYXJpc2VzIHdpdGggaXRlcmF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI2CiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciAmeCBpbiAmdiB7IC8vIDwtLSBib3Jyb3cgb2YgYHZgIGlzIHN0aWxsIGluIHNjb3BlLi4uCiAgICB5aWVsZCB4OyAvLyAuLi53aGVuIHRoaXMgeWllbGQgb2NjdXJzLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwpgYGAKClN1Y2ggY2FzZXMgY2FuIHNvbWV0aW1lcyBiZSByZXNvbHZlZCBieSBpdGVyYXRpbmcgImJ5IHZhbHVlIiAob3IgdXNpbmcKYGludG9faXRlcigpYCkgdG8gYXZvaWQgYm9ycm93aW5nOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGZvciB4IGluIHYgeyAvLyA8LS0gVGFrZSBvd25lcnNoaXAgb2YgdGhlIHZhbHVlcyBpbnN0ZWFkIQogICAgeWllbGQgeDsgLy8gPC0tIE5vdyB5aWVsZCBpcyBPSy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpJZiB0YWtpbmcgb3duZXJzaGlwIGlzIG5vdCBhbiBvcHRpb24sIHVzaW5nIGluZGljZXMgY2FuIHdvcmsgdG9vOgoKYGBgCiMgIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQsIHBpbildCiMgdXNlIHN0ZDo6b3BzOjpHZW5lcmF0b3I7CiMgdXNlIHN0ZDo6cGluOjpQaW47CmxldCBtdXQgYiA9IHx8IHsKICBsZXQgdiA9IHZlYyFbMSwyLDNdOwogIGxldCBsZW4gPSB2LmxlbigpOyAvLyAoKikKICBmb3IgaSBpbiAwLi5sZW4gewogICAgbGV0IHggPSB2W2ldOyAvLyAoKikKICAgIHlpZWxkIHg7IC8vIDwtLSBOb3cgeWllbGQgaXMgT0suCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CgovLyAoKikgLS0gVW5mb3J0dW5hdGVseSwgdGhlc2UgdGVtcG9yYXJpZXMgYXJlIGN1cnJlbnRseSByZXF1aXJlZC4KLy8gU2VlIDxodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQzMTIyPi4KYGBgCgAm////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////w/uEgAAAO4S8wjSBQDAhgEmAQAAnAsAAgYAnQsBAAQAxAMOAAADmwsABADEAw4AAACbCwIFAQLZAQEBAPMIAAGcCwAEAMQDDgAAApsLAAEEAK8DJAAAA5oLAAQArwMkAAAAmgsBAQDzCAAC0QUAsAMSAAACAgVFMDYyNgABHwUAAAAF8wgEAK8DJAAAAJoLAQEB9wgAAZsLANQFAO+GASYBAAChCwAAAtQFAO+GASYBAAICuARBIHlpZWxkIGV4cHJlc3Npb24gd2FzIHVzZWQgb3V0c2lkZSBvZiB0aGUgZ2VuZXJhdG9yIGxpdGVyYWwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjI3CiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIGZha2VfZ2VuZXJhdG9yKCkgLT4gJidzdGF0aWMgc3RyIHsKICAgIHlpZWxkIDE7CiAgICByZXR1cm4gImZvbyIKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZ2VuZXJhdG9yID0gZmFrZV9nZW5lcmF0b3I7Cn0KYGBgCgpUaGUgZXJyb3Igb2NjdXJzIGJlY2F1c2Uga2V5d29yZCBgeWllbGRgIGNhbiBvbmx5IGJlIHVzZWQgaW5zaWRlIHRoZSBnZW5lcmF0b3IKbGl0ZXJhbC4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgY29uc3RydWN0aW5nIHRoZSBnZW5lcmF0b3IgY29ycmVjdGx5LgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGdlbmVyYXRvciA9IHx8IHsKICAgICAgICB5aWVsZCAxOwogICAgICAgIHJldHVybiAiZm9vIgogICAgfTsKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/uAQAAAC4BPMI1AUA74YBJgEAAKALAAIGAKELAQAEAMQDDgAAA58LAAQAxAMOAAAAnwsCBQEC2QEBAQDzCAABoAsABADEAw4AAAKfCwABBACvAyQAAAOeCwAEAK8DJAAAAJ4LAQEA8wgAAtMFALADEgAAAgIFRTA2MjcAAR8FAAAABfMIBACvAyQAAACeCwEBAfcIAAGfCwDWBQCehwEmAQAApQsAAALWBQCehwEmAQACAqIFTW9yZSB0aGFuIG9uZSBwYXJhbWV0ZXIgd2FzIHVzZWQgZm9yIGEgZ2VuZXJhdG9yLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzIsIGI6IGkzMnwgewogICAgICAgIC8vIGVycm9yOiB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBhIGdlbmVyYXRvcgogICAgICAgIC8vIEFsbG93ZWQgb25seSAwIG9yIDEgcGFyYW1ldGVyCiAgICAgICAgeWllbGQgYTsKICAgIH07Cn0KYGBgCgpBdCBwcmVzZW50LCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIHBhc3MgbW9yZSB0aGFuIG9uZSBleHBsaWNpdApwYXJhbWV0ZXIgZm9yIGEgZ2VuZXJhdG9yLlRoaXMgY2FuIGJlIGZpeGVkIGJ5IHVzaW5nCmF0IG1vc3QgMSBwYXJhbWV0ZXIgZm9yIHRoZSBnZW5lcmF0b3IuIEZvciBleGFtcGxlLCB3ZSBtaWdodCByZXNvbHZlCnRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IHBhc3Npbmcgb25seSBvbmUgcGFyYW1ldGVyLgoKYGBgCiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0KV0KCmZuIG1haW4oKSB7CiAgICBsZXQgZ2VuZXJhdG9yID0gfGE6IGkzMnwgewogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////P6IFAAAAogXzCNYFAJ6HASYBAACkCwACBgClCwEABADEAw4AAAOjCwAEAMQDDgAAAKMLAgUBAtkBAQEA8wgAAaQLAAQAxAMOAAACowsAAQQArwMkAAADogsABACvAyQAAACiCwEBAPMIAALVBQCwAxIAAAICBUUwNjI4AAEfBQAAAAXzCAQArwMkAAAAogsBAQH3CAABowsA2AUAzYcBJgEAAKkLAAAC2AUAzYcBJgEAAgLwA1RoaXMgZXJyb3IgaW5kaWNhdGVzIGEgdHlwZSBtaXNtYXRjaCBpbiBjbG9zdXJlIGFyZ3VtZW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzEKZm4gZm9vPEY6IEZuKGkzMik+KGY6IEYpIHsKfQoKZm4gbWFpbigpIHsKICAgIGZvbyh8eDogJnN0cnwge30pOwp9CmBgYAoKVGhlIGVycm9yIG9jY3VycyBiZWNhdXNlIGBmb29gIGFjY2VwdHMgYSBjbG9zdXJlIHRoYXQgdGFrZXMgYW4gYGkzMmAgYXJndW1lbnQsCmJ1dCBpbiBgbWFpbmAsIGl0IGlzIHBhc3NlZCBhIGNsb3N1cmUgd2l0aCBhIGAmc3RyYCBhcmd1bWVudC4KClRoaXMgY2FuIGJlIHJlc29sdmVkIGJ5IGNoYW5naW5nIHRoZSB0eXBlIGFubm90YXRpb24gb3IgcmVtb3ZpbmcgaXQgZW50aXJlbHkKaWYgaXQgY2FuIGJlIGluZmVycmVkLgoKYGBgCmZuIGZvbzxGOiBGbihpMzIpPihmOiBGKSB7Cn0KCmZuIG1haW4oKSB7CiAgICBmb28ofHg6IGkzMnwge30pOwp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8/8AMAAADwA/MI2AUAzYcBJgEAAKgLAAIGAKkLAQAEAMQDDgAAA6cLAAQAxAMOAAAApwsCBQEC2QEBAQDzCAABqAsABADEAw4AAAKnCwABBACvAyQAAAOmCwAEAK8DJAAAAKYLAQEA8wgAAtcFALADEgAAAgIFRTA2MzEAAR8FAAAABfMIBACvAyQAAACmCwEBAfcIAAGnCwDaBQD8hwEmAQAArQsAAALaBQD8hwEmAQACAtUFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gZXhwbGljaXQgZ2VuZXJpYyBhcmd1bWVudCB3YXMgcHJvdmlkZWQgd2hlbiBjYWxsaW5nIGEgZnVuY3Rpb24gdGhhdAp1c2VzIGBpbXBsIFRyYWl0YCBpbiBhcmd1bWVudCBwb3NpdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBhbiBlcnJvcikKZm4gZm9vPFQ6IENvcHk+KGE6IFQsIGI6IGltcGwgQ2xvbmUpIHt9Cgpmb286OjxpMzI+KDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYGBgCgpFaXRoZXIgYWxsIGdlbmVyaWMgYXJndW1lbnRzIHNob3VsZCBiZSBpbmZlcnJlZCBhdCB0aGUgY2FsbCBzaXRlLCBvcgp0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbiBzaG91bGQgdXNlIGFuIGV4cGxpY2l0IGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIKaW5zdGVhZCBvZiBgaW1wbCBUcmFpdGAuIEV4YW1wbGU6CgpgYGAKZm4gZm9vPFQ6IENvcHk+KGE6IFQsIGI6IGltcGwgQ2xvbmUpIHt9CmZuIGJhcjxUOiBDb3B5LCBVOiBDbG9uZT4oYTogVCwgYjogVSkge30KCmZvbygwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CgpiYXI6OjxpMzIsIFN0cmluZz4oMGkzMiwgImFiYyIudG9fc3RyaW5nKCkpOwpiYXI6OjxfLCBfPigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmJhcigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmBgYAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//9/1QUAAADVBfMI2gUA/IcBJgEAAKwLAAIGAK0LAQAEAMQDDgAAA6sLAAQAxAMOAAAAqwsCBQEC2QEBAQDzCAABrAsABADEAw4AAAKrCwABBACvAyQAAAOqCwAEAK8DJAAAAKoLAQEA8wgAAtkFALADEgAAAgIFRTA2MzIAAR8FAAAABfMIBACvAyQAAACqCwEBAfcIAAGrCwDcBQCriAEmAQAAsQsAAALcBQCriAEmAQACAvgFIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGB1bndpbmRgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKHVud2luZF9hdHRyaWJ1dGVzKV0KCiNbdW53aW5kKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGV4dGVybiAiQyIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgI1t1bndpbmRdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbdW53aW5kKGFib3J0cyldYCAtLSBzcGVjaWZpZXMgdGhhdCBpZiBhIG5vbi1SdXN0IEFCSSBmdW5jdGlvbgogIHNob3VsZCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpdCBhdHRlbXB0cyB0byB1bndpbmQuIFRoaXMgaXMgdGhlIHNhZmVyCiAgYW5kIHByZWZlcnJlZCBvcHRpb24uCgotIGAjW3Vud2luZChhbGxvd2VkKV1gIC0tIHNwZWNpZmllcyB0aGF0IGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdW53aW5kLiBUaGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIFVuZGVmaW5lZAogIEJlaGF2aW9yIChVQiksIHNvIGJlIGNhcmVmdWwuCgpOQi4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZSBpcyAiYWxsb3dlZCIsIGJ1dCB0aGlzIGlzIHVuc3BlY2lmaWVkCmFuZCBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////f/gFAAAA+AXzCNwFAKuIASYBAACwCwACBgCxCwEABADEAw4AAAOvCwAEAMQDDgAAAK8LAgUBAtkBAQEA8wgAAbALAAQAxAMOAAACrwsAAQQArwMkAAADrgsABACvAyQAAACuCwEBAPMIAALbBQCwAxIAAAICBUUwNjMzAAEfBQAAAAXzCAQArwMkAAAArgsBAQH3CAABrwsA3gUA2ogBJgEAALULAAAC3gUA2ogBJgEAAgKpA0EgdHlwZSBoYXMgY29uZmxpY3RpbmcgYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNAojW3JlcHIocGFja2VkLCBwYWNrZWQoMikpXSAvLyBlcnJvciEKc3RydWN0IENvbXBhbnkoaTMyKTsKCiNbcmVwcihwYWNrZWQoMikpXSAvLyBlcnJvciEKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBDb21wYW55KGkzMik7CmBgYAoKWW91IGNhbm5vdCB1c2UgY29uZmxpY3RpbmcgYHBhY2tlZGAgaGludHMgb24gYSBzYW1lIHR5cGUuIElmIHlvdSB3YW50IHRvIHBhY2sgYQp0eXBlIHRvIGEgZ2l2ZW4gc2l6ZSwgeW91IHNob3VsZCBwcm92aWRlIGEgc2l6ZSB0byBwYWNrZWQ6CgpgYGAKI1tyZXByKHBhY2tlZCldIC8vIG9rIQpzdHJ1Y3QgQ29tcGFueShpMzIpOwpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////z+pAwAAAKkD8wjeBQDaiAEmAQAAtAsAAgYAtQsBAAQAxAMOAAADswsABADEAw4AAACzCwIFAQLZAQEBAPMIAAG0CwAEAMQDDgAAArMLAAEEAK8DJAAAA7ILAAQArwMkAAAAsgsBAQDzCAAC3QUAsAMSAAACAgVFMDYzNAABHwUAAAAF8wgEAK8DJAAAALILAQEB9wgAAbMLAOAFAImJASYBAAC5CwAAAuAFAImJASYBAAICrgFUaGUgYCMhW2ZlYXR1cmVdYCBhdHRyaWJ1dGUgc3BlY2lmaWVkIGFuIHVua25vd24gZmVhdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MzUKIyFbZmVhdHVyZShub25leGlzdGVudF9ydXN0X2ZlYXR1cmUpXSAvLyBlcnJvcjogdW5rbm93biBmZWF0dXJlCmBgYAoAA////////////wH///////////8B////////D64BAAAArgHzCOAFAImJASYBAAC4CwACBgC5CwEABADEAw4AAAO3CwAEAMQDDgAAALcLAgUBAtkBAQEA8wgAAbgLAAQAxAMOAAACtwsAAQQArwMkAAADtgsABACvAyQAAAC2CwEBAPMIAALfBQCwAxIAAAICBUUwNjM1AAEfBQAAAAXzCAQArwMkAAAAtgsBAQH3CAABtwsA4gUAuIkBJgEAAL0LAAAC4gUAuIkBJgEAAgLkAUEgYCMhW2ZlYXR1cmVdYCBhdHRyaWJ1dGUgd2FzIGRlY2xhcmVkIG11bHRpcGxlIHRpbWVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNgojIVthbGxvdyhzdGFibGVfZmVhdHVyZXMpXQojIVtmZWF0dXJlKHJ1c3QxKV0KIyFbZmVhdHVyZShydXN0MSldIC8vIGVycm9yOiB0aGUgZmVhdHVyZSBgcnVzdDFgIGhhcyBhbHJlYWR5IGJlZW4gZGVjbGFyZWQKYGBgCgAE////////////Af///////////wH///////////8B//////8B5AEAAADkAfMI4gUAuIkBJgEAALwLAAIGAL0LAQAEAMQDDgAAA7sLAAQAxAMOAAAAuwsCBQEC2QEBAQDzCAABvAsABADEAw4AAAK7CwABBACvAyQAAAO6CwAEAK8DJAAAALoLAQEA8wgAAuEFALADEgAAAgIFRTA2MzYAAR8FAAAABfMIBACvAyQAAAC6CwEBAfcIAAG7CwDkBQDniQEmAQAAwQsAAALkBQDniQEmAQACAoYLYCdfYCBsaWZldGltZSBuYW1lIG9yIGAmVGAgd2l0aG91dCBhbiBleHBsaWNpdCBsaWZldGltZSBuYW1lIGhhcyBiZWVuIHVzZWQKb24gaWxsZWdhbCBwbGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDYsRTA2MzcKZm4gdW5kZXJzY29yZV9saWZldGltZTwnXz4oc3RyMTogJidfIHN0ciwgc3RyMjogJidfIHN0cikgLT4gJidfIHN0ciB7CiAgICAgICAgICAgICAgICAgICAgIC8vXl4gYCdfYCBpcyBhIHJlc2VydmVkIGxpZmV0aW1lIG5hbWUKICAgIGlmIHN0cjEubGVuKCkgPiBzdHIyLmxlbigpIHsKICAgICAgICBzdHIxCiAgICB9IGVsc2UgewogICAgICAgIHN0cjIKICAgIH0KfQoKZm4gYW5kX3dpdGhvdXRfZXhwbGljaXRfbGlmZXRpbWU8VD4oKQp3aGVyZQogICAgVDogSW50bzwmdTMyPiwKICAgICAgICAgIC8vXiBgJmAgd2l0aG91dCBhbiBleHBsaWNpdCBsaWZldGltZSBuYW1lCnsKfQpgYGAKCkZpcnN0LCBgJ19gIGNhbm5vdCBiZSB1c2VkIGFzIGEgbGlmZXRpbWUgaWRlbnRpZmllciBpbiBzb21lIHBsYWNlcwpiZWNhdXNlIGl0IGlzIGEgcmVzZXJ2ZWQgZm9yIHRoZSBhbm9ueW1vdXMgbGlmZXRpbWUuIFNlY29uZCwgYCZUYAp3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUgY2Fubm90IGFsc28gYmUgdXNlZCBpbiBzb21lIHBsYWNlcy4KVG8gZml4IHRoZW0sIHVzZSBhIGxvd2VyY2FzZSBsZXR0ZXIgc3VjaCBhcyBgJ2FgLCBvciBhIHNlcmllcwpvZiBsb3dlcmNhc2UgbGV0dGVycyBzdWNoIGFzIGAnZm9vYC4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgbGlmZXRpbWUKaWRlbnRpZmllciwgc2VlIFt0aGUgYm9va11bYmstbm9dLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB1c2luZwp0aGUgYW5vbnltb3VzIGxpZmV0aW1lIGluIFJ1c3QgMjAxOCwgc2VlIFt0aGUgUnVzdCAyMDE4IGJsb2cgcG9zdF1bYmxvZy1hbF0uCgpDb3JyZWN0ZWQgZXhhbXBsZToKCmBgYApmbiB1bmRlcnNjb3JlX2xpZmV0aW1lPCdhPihzdHIxOiAmJ2Egc3RyLCBzdHIyOiAmJ2Egc3RyKSAtPiAmJ2Egc3RyIHsKICAgIGlmIHN0cjEubGVuKCkgPiBzdHIyLmxlbigpIHsKICAgICAgICBzdHIxCiAgICB9IGVsc2UgewogICAgICAgIHN0cjIKICAgIH0KfQoKZm4gYW5kX3dpdGhvdXRfZXhwbGljaXRfbGlmZXRpbWU8J2ZvbywgVD4oKQp3aGVyZQogICAgVDogSW50bzwmJ2ZvbyB1MzI+LAp7Cn0KYGBgCgpbYmstbm9dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDItb3BlcmF0b3JzLmh0bWwjbm9uLW9wZXJhdG9yLXN5bWJvbHMKW2Jsb2ctYWxdOiBodHRwczovL2Jsb2cucnVzdC1sYW5nLm9yZy8yMDE4LzEyLzA2L1J1c3QtMS4zMS1hbmQtcnVzdC0yMDE4Lmh0bWwjbW9yZS1saWZldGltZS1lbGlzaW9uLXJ1bGVzCgAX////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AT+GCwAAAIYL8wjkBQDniQEmAQAAwAsAAgYAwQsBAAQAxAMOAAADvwsABADEAw4AAAC/CwIFAQLZAQEBAPMIAAHACwAEAMQDDgAAAr8LAAEEAK8DJAAAA74LAAQArwMkAAAAvgsBAQDzCAAC4wUAsAMSAAACAgVFMDYzNwABHwUAAAAF8wgEAK8DJAAAAL4LAQEB9wgAAb8LAOYFAJaKASYBAADFCwAAAuYFAJaKASYBAAIChQtUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IG11c3QgYmUgbWF0Y2hlZApub24tZXhoYXVzdGl2ZWx5IGFzIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBgbm9uX2V4aGF1c3RpdmVgLgoKV2hlbiBhcHBsaWVkIHdpdGhpbiBhIGNyYXRlLCBkb3duc3RyZWFtIHVzZXJzIG9mIHRoZSBjcmF0ZSB3aWxsIG5lZWQgdG8gdXNlIHRoZQpgX2AgcGF0dGVybiB3aGVuIG1hdGNoaW5nIGVudW1zIGFuZCB1c2UgdGhlIGAuLmAgcGF0dGVybiB3aGVuIG1hdGNoaW5nIHN0cnVjdHMuCkRvd25zdHJlYW0gY3JhdGVzIGNhbm5vdCBtYXRjaCBhZ2FpbnN0IG5vbi1leGhhdXN0aXZlIGVudW0gdmFyaWFudHMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGJlbG93IGV4YW1wbGUsIHNpbmNlIHRoZSBlbnVtIGlzIG1hcmtlZCBhcwpgbm9uX2V4aGF1c3RpdmVgLCBpdCBpcyByZXF1aXJlZCB0aGF0IGRvd25zdHJlYW0gY3JhdGVzIG1hdGNoIG5vbi1leGhhdXN0aXZlbHkKb24gaXQuCgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBlbnVtIEVycm9yIHsKICAgIE1lc3NhZ2UoU3RyaW5nKSwKICAgIE90aGVyLAp9CgppbXBsIERpc3BsYXkgZm9yIEVycm9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZm9ybWF0dGVyOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBlcnJvciwgZGVzcGl0ZSBiZWluZyBtYXJrZWQgYXMgbm9uX2V4aGF1c3RpdmUsIGFzIHRoaXMKICAgICAgICAvLyBlbnVtIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNyYXRlLCBpdCBjYW4gYmUgbWF0Y2hlZAogICAgICAgIC8vIGV4aGF1c3RpdmVseS4KICAgICAgICBsZXQgZGlzcGxheSA9IG1hdGNoIHNlbGYgewogICAgICAgICAgICBNZXNzYWdlKHMpID0+IHMsCiAgICAgICAgICAgIE90aGVyID0+ICJvdGhlciBvciB1bmtub3duIGVycm9yIiwKICAgICAgICB9OwogICAgICAgIGZvcm1hdHRlci53cml0ZV9zdHIoZGlzcGxheSkKICAgIH0KfQpgYGAKCkFuIGV4YW1wbGUgb2YgbWF0Y2hpbmcgbm9uLWV4aGF1c3RpdmVseSBvbiB0aGUgYWJvdmUgZW51bSBpcyBwcm92aWRlZCBiZWxvdzoKCmBgYHJ1c3QsaWdub3JlIChwc2V1ZG8tUnVzdCkKdXNlIG15Y3JhdGU6OkVycm9yOwoKLy8gVGhpcyB3aWxsIG5vdCBlcnJvciBhcyB0aGUgbm9uX2V4aGF1c3RpdmUgRXJyb3IgZW51bSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYQovLyB3aWxkY2FyZC4KbWF0Y2ggZXJyb3IgewogICAgTWVzc2FnZShzKSA9PiAuLi4sCiAgICBPdGhlciA9PiAuLi4sCiAgICBfID0+IC4uLiwKfQpgYGAKClNpbWlsYXJseSwgZm9yIHN0cnVjdHMsIG1hdGNoIHdpdGggYC4uYCB0byBhdm9pZCB0aGlzIGVycm9yLgoAF////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfhQsAAACFC/MI5gUAlooBJgEAAMQLAAIGAMULAQAEAMQDDgAAA8MLAAQAxAMOAAAAwwsCBQEC2QEBAQDzCAABxAsABADEAw4AAALDCwABBACvAyQAAAPCCwAEAK8DJAAAAMILAQEA8wgAAuUFALADEgAAAgIFRTA2MzgAAR8FAAAABfMIBACvAyQAAADCCwEBAfcIAAHDCwDoBQDFigEmAQAAyQsAAALoBQDFigEmAQACAt8EVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RydWN0LCBlbnVtIG9yIGVudW0gdmFyaWFudCBjYW5ub3QgYmUKaW5zdGFudGlhdGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgZGVmaW5pbmcgY3JhdGUgYXMgaXQgaGFzIGJlZW4gbWFya2VkCmFzIGBub25fZXhoYXVzdGl2ZWAgYW5kIGFzIHN1Y2ggbW9yZSBmaWVsZHMvdmFyaWFudHMgbWF5IGJlIGFkZGVkIGluCmZ1dHVyZSB0aGF0IGNvdWxkIGNhdXNlIGFkdmVyc2Ugc2lkZSBlZmZlY3RzIGZvciB0aGlzIGNvZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChpdCBvbmx5IHdvcmtzIGNyb3NzLWNyYXRlKQojW25vbl9leGhhdXN0aXZlXQpwdWIgc3RydWN0IE5vcm1hbFN0cnVjdCB7CiAgICBwdWIgZmlyc3RfZmllbGQ6IHUxNiwKICAgIHB1YiBzZWNvbmRfZmllbGQ6IHUxNiwKfQoKbGV0IG5zID0gTm9ybWFsU3RydWN0IHsgZmlyc3RfZmllbGQ6IDY0MCwgc2Vjb25kX2ZpZWxkOiA0ODAgfTsgLy8gZXJyb3IhCmBgYAoKSXQgaXMgcmVjb21tZW5kZWQgdGhhdCB5b3UgbG9vayBmb3IgYSBgbmV3YCBmdW5jdGlvbiBvciBlcXVpdmFsZW50IGluIHRoZQpjcmF0ZSdzIGRvY3VtZW50YXRpb24uCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wffBAAAAN8E8wjoBQDFigEmAQAAyAsAAgYAyQsBAAQAxAMOAAADxwsABADEAw4AAADHCwIFAQLZAQEBAPMIAAHICwAEAMQDDgAAAscLAAEEAK8DJAAAA8YLAAQArwMkAAAAxgsBAQDzCAAC5wUAsAMSAAACAgVFMDYzOQABHwUAAAAF8wgEAK8DJAAAAMYLAQEB9wgAAccLAOoFAPSKASYBAADNCwAAAuoFAPSKASYBAAICywNBdHRlbXB0ZWQgdG8gY2FzdCB0by9mcm9tIGEgcG9pbnRlciB3aXRoIGFuIHVua25vd24ga2luZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDEKbGV0IGIgPSAwIGFzICpjb25zdCBfOyAvLyBlcnJvcgpgYGAKClR5cGUgaW5mb3JtYXRpb24gbXVzdCBiZSBwcm92aWRlZCBpZiBhIHBvaW50ZXIgdHlwZSBiZWluZyBjYXN0IGZyb20vaW50byBhbm90aGVyCnR5cGUgd2hpY2ggY2Fubm90IGJlIGluZmVycmVkOgoKYGBgCi8vIENyZWF0aW5nIGEgcG9pbnRlciBmcm9tIHJlZmVyZW5jZTogdHlwZSBjYW4gYmUgaW5mZXJyZWQKbGV0IGEgPSAmKFN0cmluZzo6ZnJvbSgiSGVsbG8gd29ybGQhIikpIGFzICpjb25zdCBfOyAvLyBvayEKCmxldCBiID0gMCBhcyAqY29uc3QgaTMyOyAvLyBvayEKCmxldCBjOiAqY29uc3QgaTMyID0gMCBhcyAqY29uc3QgXzsgLy8gb2shCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/D8sDAAAAywPzCOoFAPSKASYBAADMCwACBgDNCwEABADEAw4AAAPLCwAEAMQDDgAAAMsLAgUBAtkBAQEA8wgAAcwLAAQAxAMOAAACywsAAQQArwMkAAADygsABACvAyQAAADKCwEBAPMIAALpBQCwAxIAAAICBUUwNjQxAAEfBQAAAAXzCAQArwMkAAAAygsBAQH3CAABywsA7AUAo4sBJgEAANELAAAC7AUAo4sBJgEAAgLuAlRyYWl0IG1ldGhvZHMgY3VycmVudGx5IGNhbm5vdCB0YWtlIHBhdHRlcm5zIGFzIGFyZ3VtZW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDIKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygoeCwgeSk6IChpMzIsIGkzMikpOyAvLyBlcnJvcjogcGF0dGVybnMgYXJlbid0IGFsbG93ZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdHJhaXQgbWV0aG9kcwp9CmBgYAoKWW91IGNhbiBpbnN0ZWFkIHVzZSBhIHNpbmdsZSBuYW1lIGZvciB0aGUgYXJndW1lbnQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4X2FuZF95OiAoaTMyLCBpMzIpKTsgLy8gb2shCn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7gIAAADuAvMI7AUAo4sBJgEAANALAAIGANELAQAEAMQDDgAAA88LAAQAxAMOAAAAzwsCBQEC2QEBAQDzCAAB0AsABADEAw4AAALPCwABBACvAyQAAAPOCwAEAK8DJAAAAM4LAQEA8wgAAusFALADEgAAAgIFRTA2NDIAAR8FAAAABfMIBACvAyQAAADOCwEBAfcIAAHPCwDuBQDSiwEmAQAA1QsAAALuBQDSiwEmAQACAoADVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBpcyBhIG1pc21hdGNoIGJldHdlZW4gZ2VuZXJpYyBwYXJhbWV0ZXJzIGFuZAppbXBsIFRyYWl0IHBhcmFtZXRlcnMgaW4gYSB0cmFpdCBkZWNsYXJhdGlvbiB2ZXJzdXMgaXRzIGltcGwuCgpgYGBjb21waWxlX2ZhaWwsRTA2NDMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygmc2VsZiwgXzogJmltcGwgSXRlcmF0b3IpOwp9CmltcGwgRm9vIGZvciAoKSB7CiAgICBmbiBmb288VTogSXRlcmF0b3I+KCZzZWxmLCBfOiAmVSkgeyB9IC8vIGVycm9yIG1ldGhvZCBgZm9vYCBoYXMgaW5jb21wYXRpYmxlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHNpZ25hdHVyZSBmb3IgdHJhaXQKfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAgAMAAACAA/MI7gUA0osBJgEAANQLAAIGANULAQAEAMQDDgAAA9MLAAQAxAMOAAAA0wsCBQEC2QEBAQDzCAAB1AsABADEAw4AAALTCwABBACvAyQAAAPSCwAEAK8DJAAAANILAQEA8wgAAu0FALADEgAAAgIFRTA2NDMAAR8FAAAABfMIBACvAyQAAADSCwEBAfcIAAHTCwDwBQCBjAEmAQAA2QsAAALwBQCBjAEmAQACAukGQSBjbG9zdXJlIG9yIGdlbmVyYXRvciB3YXMgY29uc3RydWN0ZWQgdGhhdCByZWZlcmVuY2VzIGl0cyBvd24gdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDQKZm4gZml4PEY+KGY6ICZGKQogIHdoZXJlIEY6IEZuKCZGKQp7CiAgICBmKCZmKTsKfQoKZm4gbWFpbigpIHsKICAgIGZpeCgmfHl8IHsKICAgICAgICAvLyBIZXJlLCB3aGVuIGB4YCBpcyBjYWxsZWQsIHRoZSBwYXJhbWV0ZXIgYHlgIGlzIGVxdWFsIHRvIGB4YC4KICAgIH0pOwp9CmBgYAoKUnVzdCBkb2VzIG5vdCBwZXJtaXQgYSBjbG9zdXJlIHRvIGRpcmVjdGx5IHJlZmVyZW5jZSBpdHMgb3duIHR5cGUsCmVpdGhlciB0aHJvdWdoIGFuIGFyZ3VtZW50IChhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZSkgb3IgYnkgY2FwdHVyaW5nCml0c2VsZiB0aHJvdWdoIGl0cyBlbnZpcm9ubWVudC4gVGhpcyByZXN0cmljdGlvbiBoZWxwcyBrZWVwIGNsb3N1cmUKaW5mZXJlbmNlIHRyYWN0YWJsZS4KClRoZSBlYXNpZXN0IGZpeCBpcyB0byByZXdyaXRlIHlvdXIgY2xvc3VyZSBpbnRvIGEgdG9wLWxldmVsIGZ1bmN0aW9uLApvciBpbnRvIGEgbWV0aG9kLiBJbiBzb21lIGNhc2VzLCB5b3UgbWF5IGFsc28gYmUgYWJsZSB0byBoYXZlIHlvdXIKY2xvc3VyZSBjYWxsIGl0c2VsZiBieSBjYXB0dXJpbmcgYSBgJkZuKClgIG9iamVjdCBvciBgZm4oKWAgcG9pbnRlcgp0aGF0IHJlZmVycyB0byBpdHNlbGYuIFRoYXQgaXMgcGVybWl0dGluZywgc2luY2UgdGhlIGNsb3N1cmUgd291bGQgYmUKaW52b2tpbmcgaXRzZWxmIHZpYSBhIHZpcnR1YWwgY2FsbCwgYW5kIGhlbmNlIGRvZXMgbm90IGRpcmVjdGx5CnJlZmVyZW5jZSBpdHMgb3duICp0eXBlKi4KAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8/6QYAAADpBvMI8AUAgYwBJgEAANgLAAIGANkLAQAEAMQDDgAAA9cLAAQAxAMOAAAA1wsCBQEC2QEBAQDzCAAB2AsABADEAw4AAALXCwABBACvAyQAAAPWCwAEAK8DJAAAANYLAQEA8wgAAu8FALADEgAAAgIFRTA2NDQAAR8FAAAABfMIBACvAyQAAADWCwEBAfcIAAHXCwDyBQCwjAEmAQAA3QsAAALyBQCwjAEmAQACAugBSXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBgbWFpbmAgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDYKZm4gbWFpbigpIHdoZXJlIGkzMjogQ29weSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgd2hlcmUgY2xhdXNlCn0KYGBgCgAE////////////Af///////////wH///////////8B//////8f6AEAAADoAfMI8gUAsIwBJgEAANwLAAIGAN0LAQAEAMQDDgAAA9sLAAQAxAMOAAAA2wsCBQEC2QEBAQDzCAAB3AsABADEAw4AAALbCwABBACvAyQAAAPaCwAEAK8DJAAAANoLAQEA8wgAAvEFALADEgAAAgIFRTA2NDYAAR8FAAAABfMIBACvAyQAAADaCwEBAfcIAAHbCwD0BQDfjAEmAQAA4QsAAAL0BQDfjAEmAQACApUCVGhlIGBzdGFydGAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDcKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBzdGFydChfOiBpc2l6ZSwgXzogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgd2hlcmUgKCk6IENvcHkgewogICAgLy9eIGVycm9yOiBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGEgd2hlcmUgY2xhdXNlCiAgICAwCn0KYGBgCgAF////////////Af///////////wH///////////8B////////////Af//f5UCAAAAlQLzCPQFAN+MASYBAADgCwACBgDhCwEABADEAw4AAAPfCwAEAMQDDgAAAN8LAgUBAtkBAQEA8wgAAeALAAQAxAMOAAAC3wsAAQQArwMkAAAD3gsABACvAyQAAADeCwEBAPMIAALzBQCwAxIAAAICBUUwNjQ3AAEfBQAAAAXzCAQArwMkAAAA3gsBAQH3CAAB3wsA9gUAjo0BJgEAAOULAAAC9gUAjo0BJgEAAgK0AkFuIGBleHBvcnRfbmFtZWAgYXR0cmlidXRlIGNvbnRhaW5zIG51bGwgY2hhcmFjdGVycyAoYFwwYCkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ4CiNbZXhwb3J0X25hbWU9IlwwZm9vIl0gLy8gZXJyb3I6IGBleHBvcnRfbmFtZWAgbWF5IG5vdCBjb250YWluIG51bGwgY2hhcmFjdGVycwpwdWIgZm4gYmFyKCkge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcmVtb3ZlIHRoZSBudWxsIGNoYXJhY3RlcnM6CgpgYGAKI1tleHBvcnRfbmFtZT0iZm9vIl0gLy8gb2shCnB1YiBmbiBiYXIoKSB7fQpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/////////we0AgAAALQC8wj2BQCOjQEmAQAA5AsAAgYA5QsBAAQAxAMOAAAD4wsABADEAw4AAADjCwIFAQLZAQEBAPMIAAHkCwAEAMQDDgAAAuMLAAEEAK8DJAAAA+ILAAQArwMkAAAA4gsBAQDzCAAC9QUAsAMSAAACAgVFMDY0OAABHwUAAAAF8wgEAK8DJAAAAOILAQEB9wgAAeMLAPgFAL2NASYBAADpCwAAAvgFAL2NASYBAAIC+AhBIGxpZmV0aW1lIGJvdW5kIG9uIGEgdHJhaXQgaW1wbGVtZW50YXRpb24gd2FzIGNhcHR1cmVkIGF0IGFuIGluY29ycmVjdCBwbGFjZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NTcKdHJhaXQgSWQ8VD4ge30KdHJhaXQgTHQ8J2E+IHt9CgppbXBsPCdhPiBMdDwnYT4gZm9yICgpIHt9CmltcGw8VD4gSWQ8VD4gZm9yIFQge30KCmZuIGZyZWVfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQoKQogICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYT4+PiAvLyBlcnJvciEKewogICAgQm94OjpuZXcoKCkpCn0KCnN0cnVjdCBGb287CmltcGwgRm9vIHsKICAgIGZuIGltcGxfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQoKQogICAgICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2E+Pj4gLy8gZXJyb3IhCiAgICB7CiAgICAgICAgQm94OjpuZXcoKCkpCiAgICB9Cn0KYGBgCgpIZXJlLCB5b3UgaGF2ZSB1c2VkIHRoZSBpbmFwcHJvcHJpYXRlIGxpZmV0aW1lIGluIHRoZSBgaW1wbCBUcmFpdGAsClRoZSBgaW1wbCBUcmFpdGAgY2FuIG9ubHkgY2FwdHVyZSBsaWZldGltZXMgYm91bmQgYXQgdGhlIGZuIG9yIGltcGwKbGV2ZWwuCgpUbyBmaXggdGhpcyB3ZSBoYXZlIHRvIGRlZmluZSB0aGUgbGlmZXRpbWUgYXQgdGhlIGZ1bmN0aW9uIG9yIGltcGwKbGV2ZWwgYW5kIHVzZSB0aGF0IGxpZmV0aW1lIGluIHRoZSBgaW1wbCBUcmFpdGAuIEZvciBleGFtcGxlIHlvdSBjYW4KZGVmaW5lIHRoZSBsaWZldGltZSBhdCB0aGUgZnVuY3Rpb246CgpgYGAKdHJhaXQgSWQ8VD4ge30KdHJhaXQgTHQ8J2E+IHt9CgppbXBsPCdhPiBMdDwnYT4gZm9yICgpIHt9CmltcGw8VD4gSWQ8VD4gZm9yIFQge30KCmZuIGZyZWVfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQ8J2I+KCkKICAgIC0+IEJveDxmb3I8J2E+IElkPGltcGwgTHQ8J2I+Pj4gLy8gb2shCnsKICAgIEJveDo6bmV3KCgpKQp9CgpzdHJ1Y3QgRm9vOwppbXBsIEZvbyB7CiAgICBmbiBpbXBsX2ZuX2NhcHR1cmVfaHJ0Yl9pbl9pbXBsX3RyYWl0PCdiPigpCiAgICAgICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYj4+PiAvLyBvayEKICAgIHsKICAgICAgICBCb3g6Om5ldygoKSkKICAgIH0KfQpgYGAKABL///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////////9/+AgAAAD4CPMI+AUAvY0BJgEAAOgLAAIGAOkLAQAEAMQDDgAAA+cLAAQAxAMOAAAA5wsCBQEC2QEBAQDzCAAB6AsABADEAw4AAALnCwABBACvAyQAAAPmCwAEAK8DJAAAAOYLAQEA8wgAAvcFALADEgAAAgIFRTA2NTcAAR8FAAAABfMIBACvAyQAAADmCwEBAfcIAAHnCwD6BQDsjQEmAQAA7QsAAAL6BQDsjQEmAQACAuMEQW4gdW5zdGFibGUgZmVhdHVyZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NTgKI1tyZXByKHUxMjgpXSAvLyBlcnJvcjogdXNlIG9mIHVuc3RhYmxlIGxpYnJhcnkgZmVhdHVyZSAncmVwcjEyOCcKZW51bSBGb28gewogICAgQmFyKHU2NCksCn0KYGBgCgpJZiB5b3UncmUgdXNpbmcgYSBzdGFibGUgb3IgYSBiZXRhIHZlcnNpb24gb2YgcnVzdGMsIHlvdSB3b24ndCBiZSBhYmxlIHRvIHVzZQphbnkgdW5zdGFibGUgZmVhdHVyZXMuIEluIG9yZGVyIHRvIGRvIHNvLCBwbGVhc2Ugc3dpdGNoIHRvIGEgbmlnaHRseSB2ZXJzaW9uIG9mCnJ1c3RjIChieSB1c2luZyBbcnVzdHVwXSkuCgpJZiB5b3UncmUgdXNpbmcgYSBuaWdodGx5IHZlcnNpb24gb2YgcnVzdGMsIGp1c3QgYWRkIHRoZSBjb3JyZXNwb25kaW5nIGZlYXR1cmUKdG8gYmUgYWJsZSB0byB1c2UgaXQ6CgpgYGAKIyFbZmVhdHVyZShyZXByMTI4KV0KCiNbcmVwcih1MTI4KV0gLy8gb2shCmVudW0gRm9vIHsKICAgIEJhcih1NjQpLAp9CmBgYAoKW3J1c3R1cF06IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9ydXN0dXAvY29uY2VwdHMvY2hhbm5lbHMuaHRtbAoACv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////9/4wQAAADjBPMI+gUA7I0BJgEAAOwLAAIGAO0LAQAEAMQDDgAAA+sLAAQAxAMOAAAA6wsCBQEC2QEBAQDzCAAB7AsABADEAw4AAALrCwABBACvAyQAAAPqCwAEAK8DJAAAAOoLAQEA8wgAAvkFALADEgAAAgIFRTA2NTgAAR8FAAAABfMIBACvAyQAAADqCwEBAfcIAAHrCwD8BQCbjgEmAQAA8QsAAAL8BQCbjgEmAQACAqgHQW4gaXRlbSB1c2FnZSBpcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNjU5CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb246Oio7CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDo6KjsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6Zm9vKCk7IC8vIEVSUk9SOiBgZm9vYCBpcyBhbWJpZ3VvdXMKfQpgYGAKClRoaXMgZXJyb3IgZ2VuZXJhbGx5IGFwcGVhcnMgd2hlbiB0d28gaXRlbXMgd2l0aCB0aGUgc2FtZSBuYW1lIGFyZSBpbXBvcnRlZCBpbnRvCmEgbW9kdWxlLiBIZXJlLCB0aGUgYGZvb2AgZnVuY3Rpb25zIGFyZSBpbXBvcnRlZCBhbmQgcmVleHBvcnRlZCBmcm9tIHRoZQpgY29sbGlkZXJgIG1vZHVsZSBhbmQgdGhlcmVmb3JlLCB3aGVuIHdlJ3JlIHVzaW5nIGBjb2xsaWRlcjo6Zm9vKClgLCBib3RoCmZ1bmN0aW9ucyBjb2xsaWRlLgoKVG8gc29sdmUgdGhpcyBlcnJvciwgdGhlIGJlc3Qgc29sdXRpb24gaXMgZ2VuZXJhbGx5IHRvIGtlZXAgdGhlIHBhdGggYmVmb3JlIHRoZQppdGVtIHdoZW4gdXNpbmcgaXQuIEV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIG1vb24gewogICAgcHViIGZuIGZvbygpIHt9Cn0KCnB1YiBtb2QgZWFydGggewogICAgcHViIGZuIGZvbygpIHt9Cn0KCm1vZCBjb2xsaWRlciB7CiAgICBwdWIgdXNlIGNyYXRlOjptb29uOwogICAgcHViIHVzZSBjcmF0ZTo6ZWFydGg7Cn0KCmZuIG1haW4oKSB7CiAgICBjcmF0ZTo6Y29sbGlkZXI6Om1vb246OmZvbygpOyAvLyBvayEKICAgIGNyYXRlOjpjb2xsaWRlcjo6ZWFydGg6OmZvbygpOyAvLyBvayEKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////H6gHAAAAqAfzCPwFAJuOASYBAADwCwACBgDxCwEABADEAw4AAAPvCwAEAMQDDgAAAO8LAgUBAtkBAQEA8wgAAfALAAQAxAMOAAAC7wsAAQQArwMkAAAD7gsABACvAyQAAADuCwEBAPMIAAL7BQCwAxIAAAICBUUwNjU5AAEfBQAAAAXzCAQArwMkAAAA7gsBAQH3CAAB7wsA/gUAyo4BJgEAAPULAAAC/gUAyo4BJgEAAgLPASMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBhcmd1bWVudCB0byB0aGUgYGxsdm1fYXNtYCBtYWNybyBpcyBub3Qgd2VsbC1mb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChubyBsb25nZXIgZW1pdHRlZCkKbGx2bV9hc20hKCJub3AiICJub3AiKTsKYGBgCgAE////////////Af///////////wH///////////8B//8BzwEAAADPAfMI/gUAyo4BJgEAAPQLAAIGAPULAQAEAMQDDgAAA/MLAAQAxAMOAAAA8wsCBQEC2QEBAQDzCAAB9AsABADEAw4AAALzCwABBACvAyQAAAPyCwAEAK8DJAAAAPILAQEA8wgAAv0FALADEgAAAgIFRTA2NjAAAR8FAAAABfMIBACvAyQAAADyCwEBAfcIAAHzCwCABgD5jgEmAQAA+QsAAAKABgD5jgEmAQACAvEBIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gaW52YWxpZCBzeW50YXggd2FzIHBhc3NlZCB0byB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIGFuIGBsbHZtX2FzbWAgbWFjcm8gbGluZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBlbWl0dGVkKQpsZXQgYTsKbGx2bV9hc20hKCJub3AiIDogInIiKGEpKTsKYGBgCgAE////////////Af///////////wH///////////8B////////f/EBAAAA8QHzCIAGAPmOASYBAAD4CwACBgD5CwEABADEAw4AAAP3CwAEAMQDDgAAAPcLAgUBAtkBAQEA8wgAAfgLAAQAxAMOAAAC9wsAAQQArwMkAAAD9gsABACvAyQAAAD2CwEBAPMIAAL/BQCwAxIAAAICBUUwNjYxAAEfBQAAAAXzCAQArwMkAAAA9gsBAQH3CAAB9wsAggYAqI8BJgEAAP0LAAACggYAqI8BJgEAAgKfAiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCmxsdm1fYXNtISgieG9yICVlYXgsICVlYXgiCiAgICAgICAgICA6CiAgICAgICAgICA6ICI9dGVzdCIoImEiKQogICAgICAgICApOwpgYGAKAAX///////////8B////////////Af///////////wH///////////8B/////wefAgAAAJ8C8wiCBgCojwEmAQAA/AsAAgYA/QsBAAQAxAMOAAAD+wsABADEAw4AAAD7CwIFAQLZAQEBAPMIAAH8CwAEAMQDDgAAAvsLAAEEAK8DJAAAA/oLAAQArwMkAAAA+gsBAQDzCAACgQYAsAMSAAACAgVFMDY2MgABHwUAAAAF8wgEAK8DJAAAAPoLAQEB9wgAAfsLAIQGANePASYBAACBDAAAAoQGANePASYBAAICnwIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBpbnZhbGlkIGlucHV0IG9wZXJhbmQgY29uc3RyYWludCB3YXMgcGFzc2VkIHRvIHRoZSBgbGx2bV9hc21gIG1hY3JvCih0aGlyZCBsaW5lKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBlbWl0dGVkKQpsbHZtX2FzbSEoInhvciAlZWF4LCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOiAiK3Rlc3QiKCJhIikKICAgICAgICAgKTsKYGBgCgAF////////////Af///////////wH///////////8B////////////Af////8HnwIAAACfAvMIhAYA148BJgEAAIAMAAIGAIEMAQAEAMQDDgAAA/8LAAQAxAMOAAAA/wsCBQEC2QEBAQDzCAABgAwABADEAw4AAAL/CwABBACvAyQAAAP+CwAEAK8DJAAAAP4LAQEA8wgAAoMGALADEgAAAgIFRTA2NjMAAR8FAAAABfMIBACvAyQAAAD+CwEBAfcIAAH/CwCGBgCGkAEmAQAAhQwAAAKGBgCGkAEmAQACApACIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBjbG9iYmVyIHdhcyBzdXJyb3VuZGVkIGJ5IGJyYWNlcyBpbiB0aGUgYGxsdm1fYXNtYCBtYWNyby4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBlbWl0dGVkKQpsbHZtX2FzbSEoIm1vdiAkJDB4MjAwLCAlZWF4IgogICAgICAgICAgOgogICAgICAgICAgOgogICAgICAgICAgOiAie2VheH0iCiAgICAgICAgICk7CmBgYAoABf///////////wH///////////8B////////////Af///////////wH//wOQAgAAAJAC8wiGBgCGkAEmAQAAhAwAAgYAhQwBAAQAxAMOAAADgwwABADEAw4AAACDDAIFAQLZAQEBAPMIAAGEDAAEAMQDDgAAAoMMAAEEAK8DJAAAA4IMAAQArwMkAAAAggwBAQDzCAAChQYAsAMSAAACAgVFMDY2NAABHwUAAAAF8wgEAK8DJAAAAIIMAQEB9wgAAYMMAIgGALWQASYBAACJDAAAAogGALWQASYBAAIChQUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYERlZmF1bHRgIHRyYWl0IHdhcyBkZXJpdmVkIG9uIGFuIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiNbZGVyaXZlKERlZmF1bHQpXQplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQpgYGAKClRoZSBgRGVmYXVsdGAgY2Fubm90IGJlIGRlcml2ZWQgb24gYW4gZW51bSBmb3IgdGhlIHNpbXBsZSByZWFzb24gdGhhdCB0aGUKY29tcGlsZXIgZG9lc24ndCBrbm93IHdoaWNoIHZhbHVlIHRvIHBpY2sgYnkgZGVmYXVsdCB3aGVyZWFzIGl0IGNhbiBmb3IgYQpzdHJ1Y3QgYXMgbG9uZyBhcyBhbGwgaXRzIGZpZWxkcyBpbXBsZW1lbnQgdGhlIGBEZWZhdWx0YCB0cmFpdCBhcyB3ZWxsLgoKSWYgeW91IHN0aWxsIHdhbnQgdG8gaW1wbGVtZW50IGBEZWZhdWx0YCBvbiB5b3VyIGVudW0sIHlvdSdsbCBoYXZlIHRvIGRvIGl0ICJieQpoYW5kIjoKCmBgYAplbnVtIEZvb2QgewogICAgU3dlZXQsCiAgICBTYWx0eSwKfQoKaW1wbCBEZWZhdWx0IGZvciBGb29kIHsKICAgIGZuIGRlZmF1bHQoKSAtPiBGb29kIHsKICAgICAgICBGb29kOjpTd2VldAogICAgfQp9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEfhQUAAACFBfMIiAYAtZABJgEAAIgMAAIGAIkMAQAEAMQDDgAAA4cMAAQAxAMOAAAAhwwCBQEC2QEBAQDzCAABiAwABADEAw4AAAKHDAABBACvAyQAAAOGDAAEAK8DJAAAAIYMAQEA8wgAAocGALADEgAAAgIFRTA2NjUAAR8FAAAABfMIBACvAyQAAACGDAEBAfcIAAGHDACKBgDkkAEmAQAAjQwAAAKKBgDkkAEmAQACAu0DYGltcGwgVHJhaXRgIHR5cGVzIGNhbm5vdCBhcHBlYXIgbmVzdGVkIGluIHRoZSBnZW5lcmljIGFyZ3VtZW50cyBvZiBvdGhlcgpgaW1wbCBUcmFpdGAgdHlwZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjY2CnRyYWl0IE15R2VuZXJpY1RyYWl0PFQ+IHt9CnRyYWl0IE15SW5uZXJUcmFpdCB7fQoKZm4gZm9vKAogICAgYmFyOiBpbXBsIE15R2VuZXJpY1RyYWl0PGltcGwgTXlJbm5lclRyYWl0PiwgLy8gZXJyb3IhCikge30KYGBgCgpUeXBlIHBhcmFtZXRlcnMgZm9yIGBpbXBsIFRyYWl0YCB0eXBlcyBtdXN0IGJlIGV4cGxpY2l0bHkgZGVmaW5lZCBhcyBuYW1lZApnZW5lcmljIHBhcmFtZXRlcnM6CgpgYGAKdHJhaXQgTXlHZW5lcmljVHJhaXQ8VD4ge30KdHJhaXQgTXlJbm5lclRyYWl0IHt9CgpmbiBmb288VDogTXlJbm5lclRyYWl0PigKICAgIGJhcjogaW1wbCBNeUdlbmVyaWNUcmFpdDxUPiwgLy8gb2shCikge30KYGBgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////wftAwAAAO0D8wiKBgDkkAEmAQAAjAwAAgYAjQwBAAQAxAMOAAADiwwABADEAw4AAACLDAIFAQLZAQEBAPMIAAGMDAAEAMQDDgAAAosMAAEEAK8DJAAAA4oMAAQArwMkAAAAigwBAQDzCAACiQYAsAMSAAACAgVFMDY2NgABHwUAAAAF8wgEAK8DJAAAAIoMAQEB9wgAAYsMAIwGAJORASYBAACRDAAAAowGAJORASYBAAIChQNgaW1wbCBUcmFpdGAgaXMgbm90IGFsbG93ZWQgaW4gcGF0aCBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2NwpmbiBzb21lX2ZuKG11dCB4OiBpbXBsIEl0ZXJhdG9yKSAtPiA8aW1wbCBJdGVyYXRvcj46Okl0ZW0geyAvLyBlcnJvciEKICAgIHgubmV4dCgpLnVud3JhcCgpCn0KYGBgCgpZb3UgY2Fubm90IHVzZSBgaW1wbCBUcmFpdGAgaW4gcGF0aCBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCBzb21ldGhpbmcKZXF1aXZhbGVudCwgeW91IGNhbiBkbyB0aGlzIGluc3RlYWQ6CgpgYGAKZm4gc29tZV9mbjxUOiBJdGVyYXRvcj4obXV0IHg6IFQpIC0+IFQ6Okl0ZW0geyAvLyBvayEKICAgIHgubmV4dCgpLnVud3JhcCgpCn0KYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BH4UDAAAAhQPzCIwGAJORASYBAACQDAACBgCRDAEABADEAw4AAAOPDAAEAMQDDgAAAI8MAgUBAtkBAQEA8wgAAZAMAAQAxAMOAAACjwwAAQQArwMkAAADjgwABACvAyQAAACODAEBAPMIAAKLBgCwAxIAAAICBUUwNjY3AAEfBQAAAAXzCAQArwMkAAAAjgwBAQH3CAABjwwAjgYAwpEBJgEAAJUMAAACjgYAwpEBJgEAAgL7BCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCk1hbGZvcm1lZCBpbmxpbmUgYXNzZW1ibHkgcmVqZWN0ZWQgYnkgTExWTS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBlbWl0dGVkKQojIVtmZWF0dXJlKGxsdm1fYXNtKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgcmF4OiB1NjQ7CiAgICB1bnNhZmUgewogICAgICAgIGxsdm1fYXNtISgiIiA6Ij17cmF4IihyYXgpKTsKICAgICAgICBwcmludGxuISgiQWNjdW11bGF0b3IgaXM6IHt9IiwgcmF4KTsKICAgIH0KfQpgYGAKCkxMVk0gY2hlY2tzIHRoZSB2YWxpZGl0eSBvZiB0aGUgY29uc3RyYWludHMgYW5kIHRoZSBhc3NlbWJseSBzdHJpbmcgcGFzc2VkIHRvCml0LiBUaGlzIGVycm9yIGltcGxpZXMgdGhhdCBMTFZNIHNlZW1zIHNvbWV0aGluZyB3cm9uZyB3aXRoIHRoZSBpbmxpbmUKYXNzZW1ibHkgY2FsbC4KCkluIHBhcnRpY3VsYXIsIGl0IGNhbiBoYXBwZW4gaWYgeW91IGZvcmdvdCB0aGUgY2xvc2luZyBicmFja2V0IG9mIGEgcmVnaXN0ZXIKY29uc3RyYWludCAoc2VlIGlzc3VlICM1MTQzMCksIGxpa2UgaW4gdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZS4KAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////////wf7BAAAAPsE8wiOBgDCkQEmAQAAlAwAAgYAlQwBAAQAxAMOAAADkwwABADEAw4AAACTDAIFAQLZAQEBAPMIAAGUDAAEAMQDDgAAApMMAAEEAK8DJAAAA5IMAAQArwMkAAAAkgwBAQDzCAACjQYAsAMSAAACAgVFMDY2OAABHwUAAAAF8wgEAK8DJAAAAJIMAQEB9wgAAZMMAJAGAPGRASYBAACZDAAAApAGAPGRASYBAAIC2AUjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDYW5ub3QgY29udmVydCBpbmxpbmUgYXNzZW1ibHkgb3BlcmFuZCB0byBhIHNpbmdsZSBMTFZNIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCiMhW2ZlYXR1cmUobGx2bV9hc20pXQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7CiAgICAgICAgbGx2bV9hc20hKCIiIDo6ICJyIigiIikpOyAvLyBlcnJvciEKICAgIH0KfQpgYGAKClRoaXMgZXJyb3IgdXN1YWxseSBoYXBwZW5zIHdoZW4gdHJ5aW5nIHRvIHBhc3MgaW4gYSB2YWx1ZSB0byBhbiBpbnB1dCBpbmxpbmUKYXNzZW1ibHkgb3BlcmFuZCB0aGF0IGlzIGFjdHVhbGx5IGEgcGFpciBvZiB2YWx1ZXMuIEluIHBhcnRpY3VsYXIsIHRoaXMgY2FuCmhhcHBlbiB3aGVuIHRyeWluZyB0byBwYXNzIGluIGEgc2xpY2UsIGZvciBpbnN0YW5jZSBhIGAmc3RyYC4gSW4gUnVzdCwgdGhlc2UKdmFsdWVzIGFyZSByZXByZXNlbnRlZCBpbnRlcm5hbGx5IGFzIGEgcGFpciBvZiB2YWx1ZXMsIHRoZSBwb2ludGVyIGFuZCBpdHMKbGVuZ3RoLiBXaGVuIHBhc3NlZCBhcyBhbiBpbnB1dCBvcGVyYW5kLCB0aGlzIHBhaXIgb2YgdmFsdWVzIGNhbiBub3QgYmUKY29lcmNlZCBpbnRvIGEgcmVnaXN0ZXIgYW5kIHRodXMgd2UgbXVzdCBmYWlsIHdpdGggYW4gZXJyb3IuCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8H2AUAAADYBfMIkAYA8ZEBJgEAAJgMAAIGAJkMAQAEAMQDDgAAA5cMAAQAxAMOAAAAlwwCBQEC2QEBAQDzCAABmAwABADEAw4AAAKXDAABBACvAyQAAAOWDAAEAK8DJAAAAJYMAQEA8wgAAo8GALADEgAAAgIFRTA2NjkAAR8FAAAABfMIBACvAyQAAACWDAEBAfcIAAGXDACSBgCgkgEmAQAAnQwAAAKSBgCgkgEmAQACAqsBUnVzdCAyMDE1IGRvZXMgbm90IHBlcm1pdCB0aGUgdXNlIG9mIGBhc3luYyBmbmAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjcwCmFzeW5jIGZuIGZvbygpIHt9CmBgYAoKU3dpdGNoIHRvIHRoZSBSdXN0IDIwMTggZWRpdGlvbiB0byB1c2UgYGFzeW5jIGZuYC4KAAP///////////8B////////////Af///////wGrAQAAAKsB8wiSBgCgkgEmAQAAnAwAAgYAnQwBAAQAxAMOAAADmwwABADEAw4AAACbDAIFAQLZAQEBAPMIAAGcDAAEAMQDDgAAApsMAAEEAK8DJAAAA5oMAAQArwMkAAAAmgwBAQDzCAACkQYAsAMSAAACAgVFMDY3MAABHwUAAAAF8wgEAK8DJAAAAJoMAQEB9wgAAZsMAJQGAM+SASYBAAChDAAAApQGAM+SASYBAAIC6QEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpDb25zdCBwYXJhbWV0ZXJzIGNhbm5vdCBkZXBlbmQgb24gdHlwZSBwYXJhbWV0ZXJzLgpUaGUgZm9sbG93aW5nIGlzIHRoZXJlZm9yZSBpbnZhbGlkOgoKYGBgY29tcGlsZV9mYWlsLEUwNzcwCmZuIGNvbnN0X2lkPFQsIGNvbnN0IE46IFQ+KCkgLT4gVCB7IC8vIGVycm9yCiAgICBOCn0KYGBgCgAE////////////Af///////////wH///////////8B//////8/6QEAAADpAfMIlAYAz5IBJgEAAKAMAAIGAKEMAQAEAMQDDgAAA58MAAQAxAMOAAAAnwwCBQEC2QEBAQDzCAABoAwABADEAw4AAAKfDAABBACvAyQAAAOeDAAEAK8DJAAAAJ4MAQEA8wgAApMGALADEgAAAgIFRTA2NzEAAR8FAAAABfMIBACvAyQAAACeDAEBAfcIAAGfDACWBgD+kgEmAQAApQwAAAKWBgD+kgEmAQACAoEGIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIHVzZWQgaW4gYGZuYC9gRm5gIHN5bnRheC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgaWdub3JlIChmZWF0dXJlIGdvdCByZW1vdmVkKQojIVtmZWF0dXJlKGluX2JhbmRfbGlmZXRpbWVzKV0KCmZuIGZvbyh4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCgpmbiBiYXIoeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJheih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gZXJyb3IhCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbCBGb288J2E+IHsKICAgIGZuIGJhcigmc2VsZiwgeDogZm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQp9CmBgYAoKTGlmZXRpbWVzIHVzZWQgaW4gYGZuYCBvciBgRm5gIHN5bnRheCBtdXN0IGJlIGV4cGxpY2l0bHkKZGVjbGFyZWQgdXNpbmcgYDwuLi4+YCBiaW5kZXJzLiBGb3IgZXhhbXBsZToKCmBgYApmbiBmb288J2E+KHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhcjwnYT4oeDogJkZuKCYnYSB1MzIpKSB7fSAvLyBvayEKCmZuIGJhejwnYT4oeDogZm4oJidhIHUzMiksIHk6ICYnYSB1MzIpIHt9IC8vIG9rIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gb2shCn0KYGBgCgAN////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BAYEGAAAAgQbzCJYGAP6SASYBAACkDAACBgClDAEABADEAw4AAAOjDAAEAMQDDgAAAKMMAgUBAtkBAQEA8wgAAaQMAAQAxAMOAAACowwAAQQArwMkAAADogwABACvAyQAAACiDAEBAPMIAAKVBgCwAxIAAAICBUUwNjg3AAEfBQAAAAXzCAQArwMkAAAAogwBAQH3CAABowwAmAYArZMBJgEAAKkMAAACmAYArZMBJgEAAgLlBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkluLWJhbmQgbGlmZXRpbWVzIHdlcmUgbWl4ZWQgd2l0aCBleHBsaWNpdCBsaWZldGltZSBiaW5kZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoZmVhdHVyZSBnb3QgcmVtb3ZlZCkKIyFbZmVhdHVyZShpbl9iYW5kX2xpZmV0aW1lcyldCgpmbiBmb288J2E+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIpIHt9ICAgLy8gZXJyb3IhCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbCBGb288J2E+IHsKICAgIGZuIGJhcjwnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAvLyBlcnJvciEKfQoKaW1wbDwnYj4gRm9vPCdhPiB7ICAvLyBlcnJvciEKICAgIGZuIGJheigpIHt9Cn0KYGBgCgpJbi1iYW5kIGxpZmV0aW1lcyBjYW5ub3QgYmUgbWl4ZWQgd2l0aCBleHBsaWNpdCBsaWZldGltZSBiaW5kZXJzLgpGb3IgZXhhbXBsZToKCmBgYApmbiBmb288J2EsICdiPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIG9rIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGw8J2E+IEZvbzwnYT4gewogICAgZm4gYmFyPCdiLCdjPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyLCB6OiAmJ2MgdTMyKSB7fSAgICAvLyBvayEKfQoKaW1wbDwnYT4gRm9vPCdhPiB7ICAvLyBvayEKICAgIGZuIGJheigpIHt9Cn0KYGBgCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////wPlBQAAAOUF8wiYBgCtkwEmAQAAqAwAAgYAqQwBAAQAxAMOAAADpwwABADEAw4AAACnDAIFAQLZAQEBAPMIAAGoDAAEAMQDDgAAAqcMAAEEAK8DJAAAA6YMAAQArwMkAAAApgwBAQDzCAAClwYAsAMSAAACAgVFMDY4OAABHwUAAAAF8wgEAK8DJAAAAKYMAQEB9wgAAacMAJoGANyTASYBAACtDAAAApoGANyTASYBAAICjQVBIG1ldGhvZCB3YXMgY2FsbGVkIG9uIGFuIGFtYmlndW91cyBudW1lcmljIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg5CjIuMC5uZWcoKTsgLy8gZXJyb3IhCmBgYAoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgbnVtZXJpYyB2YWx1ZSBmb3IgdGhlIG1ldGhvZCBiZWluZyBwYXNzZWQgZXhpc3RzCmJ1dCB0aGUgdHlwZSBvZiB0aGUgbnVtZXJpYyB2YWx1ZSBvciBiaW5kaW5nIGNvdWxkIG5vdCBiZSBpZGVudGlmaWVkLgoKVGhlIGVycm9yIGhhcHBlbnMgb24gbnVtZXJpYyBsaXRlcmFscyBhbmQgb24gbnVtZXJpYyBiaW5kaW5ncyB3aXRob3V0IGFuCmlkZW50aWZpZWQgY29uY3JldGUgdHlwZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY4OQpsZXQgeCA9IDIuMDsKeC5uZWcoKTsgIC8vIHNhbWUgZXJyb3IgYXMgYWJvdmUKYGBgCgpCZWNhdXNlIG9mIHRoaXMsIHlvdSBtdXN0IGdpdmUgdGhlIG51bWVyaWMgbGl0ZXJhbCBvciBiaW5kaW5nIGEgdHlwZToKCmBgYAp1c2Ugc3RkOjpvcHM6Ok5lZzsKCmxldCBfID0gMi4wX2YzMi5uZWcoKTsgLy8gb2shCmxldCB4OiBmMzIgPSAyLjA7CmxldCBfID0geC5uZWcoKTsgLy8gb2shCmxldCBfID0gKDIuMCBhcyBmMzIpLm5lZygpOyAvLyBvayEKYGBgCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8/jQUAAACNBfMImgYA3JMBJgEAAKwMAAIGAK0MAQAEAMQDDgAAA6sMAAQAxAMOAAAAqwwCBQEC2QEBAQDzCAABrAwABADEAw4AAAKrDAABBACvAyQAAAOqDAAEAK8DJAAAAKoMAQEA8wgAApkGALADEgAAAgIFRTA2ODkAAR8FAAAABfMIBACvAyQAAACqDAEBAfcIAAGrDACcBgCLlAEmAQAAsQwAAAKcBgCLlAEmAQACArQIQSBzdHJ1Y3Qgd2l0aCB0aGUgcmVwcmVzZW50YXRpb24gaGludCBgcmVwcih0cmFuc3BhcmVudClgIGhhZCB0d28gb3IgbW9yZSBmaWVsZHMKdGhhdCB3ZXJlIG5vdCBndWFyYW50ZWVkIHRvIGJlIHplcm8tc2l6ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkwCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBMZW5ndGhXaXRoVW5pdDxVPiB7IC8vIGVycm9yOiB0cmFuc3BhcmVudCBzdHJ1Y3QgbmVlZHMgYXQgbW9zdCBvbmUKICAgIHZhbHVlOiBmMzIsICAgICAgICAgICAgLy8gICAgICAgIG5vbi16ZXJvLXNpemVkIGZpZWxkLCBidXQgaGFzIDIKICAgIHVuaXQ6IFUsCn0KYGBgCgpCZWNhdXNlIHRyYW5zcGFyZW50IHN0cnVjdHMgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZSBvbmUgb2YgdGhlaXIgZmllbGRzIGF0CnJ1biB0aW1lLCBzYWlkIGZpZWxkIG11c3QgYmUgdW5pcXVlbHkgZGV0ZXJtaW5lZC4gSWYgdGhlcmUgYXJlIG11bHRpcGxlIGZpZWxkcywKaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgc3RydWN0IHNob3VsZCBiZSByZXByZXNlbnRlZC4KTm90ZSB0aGF0IGZpZWxkcyBvZiB6ZXJvLXNpemVkIHR5cGVzIChlLmcuLCBgUGhhbnRvbURhdGFgKSBjYW4gYWxzbyBleGlzdAphbG9uZ3NpZGUgdGhlIGZpZWxkIHRoYXQgY29udGFpbnMgdGhlIGFjdHVhbCBkYXRhLCB0aGV5IGRvIG5vdCBjb3VudCBmb3IgdGhpcwplcnJvci4gV2hlbiBnZW5lcmljIHR5cGVzIGFyZSBpbnZvbHZlZCAoYXMgaW4gdGhlIGFib3ZlIGV4YW1wbGUpLCBhbiBlcnJvciBpcwpyZXBvcnRlZCBiZWNhdXNlIHRoZSB0eXBlIHBhcmFtZXRlciBjb3VsZCBiZSBub24temVyby1zaXplZC4KClRvIGNvbWJpbmUgYHJlcHIodHJhbnNwYXJlbnQpYCB3aXRoIHR5cGUgcGFyYW1ldGVycywgYFBoYW50b21EYXRhYCBtYXkgYmUKdXNlZnVsOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgTGVuZ3RoV2l0aFVuaXQ8VT4gewogICAgdmFsdWU6IGYzMiwKICAgIHVuaXQ6IFBoYW50b21EYXRhPFU+LAp9CmBgYAoAEf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////B7QIAAAAtAjzCJwGAIuUASYBAACwDAACBgCxDAEABADEAw4AAAOvDAAEAMQDDgAAAK8MAgUBAtkBAQEA8wgAAbAMAAQAxAMOAAACrwwAAQQArwMkAAADrgwABACvAyQAAACuDAEBAPMIAAKbBgCwAxIAAAICBUUwNjkwAAEfBQAAAAXzCAQArwMkAAAArgwBAQH3CAABrwwAngYAupQBJgEAALUMAAACngYAupQBJgEAAgKNC0Egc3RydWN0LCBlbnVtLCBvciB1bmlvbiB3aXRoIHRoZSBgcmVwcih0cmFuc3BhcmVudClgIHJlcHJlc2VudGF0aW9uIGhpbnQKY29udGFpbnMgYSB6ZXJvLXNpemVkIGZpZWxkIHRoYXQgcmVxdWlyZXMgbm9uLXRyaXZpYWwgYWxpZ25tZW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MQojIVtmZWF0dXJlKHJlcHJfYWxpZ24pXQoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIEZvcmNlQWxpZ24zMik7IC8vIGVycm9yOiB6ZXJvLXNpemVkIGZpZWxkIGluIHRyYW5zcGFyZW50CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0cnVjdCBoYXMgYWxpZ25tZW50IGxhcmdlciB0aGFuIDEKYGBgCgpBIHRyYW5zcGFyZW50IHN0cnVjdCwgZW51bSwgb3IgdW5pb24gaXMgc3VwcG9zZWQgdG8gYmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlCnRoZSBwaWVjZSBvZiBkYXRhIGl0IGNvbnRhaW5zLiBaZXJvLXNpemVkIGZpZWxkcyB3aXRoIGRpZmZlcmVudCBhbGlnbm1lbnQKcmVxdWlyZW1lbnRzIHBvdGVudGlhbGx5IGNvbmZsaWN0IHdpdGggdGhpcyBwcm9wZXJ0eS4gSW4gdGhlIGV4YW1wbGUgYWJvdmUsCmBXcmFwcGVyYCB3b3VsZCBoYXZlIHRvIGJlIGFsaWduZWQgdG8gMzIgYnl0ZXMgZXZlbiB0aG91Z2ggYGYzMmAgaGFzIGEgc21hbGxlcgphbGlnbm1lbnQgcmVxdWlyZW1lbnQuCgpDb25zaWRlciByZW1vdmluZyB0aGUgb3Zlci1hbGlnbmVkIHplcm8tc2l6ZWQgZmllbGQ6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IFdyYXBwZXIoZjMyKTsKYGBgCgpBbHRlcm5hdGl2ZWx5LCBgUGhhbnRvbURhdGE8VD5gIGhhcyBhbGlnbm1lbnQgMSBmb3IgYWxsIGBUYCwgc28geW91IGNhbiB1c2UgaXQKaWYgeW91IG5lZWQgdG8ga2VlcCB0aGUgZmllbGQgZm9yIHNvbWUgcmVhc29uOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9hbGlnbildCgp1c2Ugc3RkOjptYXJrZXI6OlBoYW50b21EYXRhOwoKI1tyZXByKGFsaWduKDMyKSldCnN0cnVjdCBGb3JjZUFsaWduMzI7CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIsIFBoYW50b21EYXRhPEZvcmNlQWxpZ24zMj4pOwpgYGAKCk5vdGUgdGhhdCBlbXB0eSBhcnJheXMgYFtUOyAwXWAgaGF2ZSB0aGUgc2FtZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnQgYXMgdGhlCmVsZW1lbnQgdHlwZSBgVGAuIEFsc28gbm90ZSB0aGF0IHRoZSBlcnJvciBpcyBjb25zZXJ2YXRpdmVseSByZXBvcnRlZCBldmVuIHdoZW4KdGhlIGFsaWdubWVudCBvZiB0aGUgemVyby1zaXplZCB0eXBlIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgZGF0YSBmaWVsZCdzCmFsaWdubWVudC4KABf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/z+NCwAAAI0L8wieBgC6lAEmAQAAtAwAAgYAtQwBAAQAxAMOAAADswwABADEAw4AAACzDAIFAQLZAQEBAPMIAAG0DAAEAMQDDgAAArMMAAEEAK8DJAAAA7IMAAQArwMkAAAAsgwBAQDzCAACnQYAsAMSAAACAgVFMDY5MQABHwUAAAAF8wgEAK8DJAAAALIMAQEB9wgAAbMMAKAGAOmUASYBAAC5DAAAAqAGAOmUASYBAAICtwlBIGByZXByKHRyYW5zcGFyZW50KWAgdHlwZSB3YXMgYWxzbyBhbm5vdGF0ZWQgd2l0aCBvdGhlciwgaW5jb21wYXRpYmxlCnJlcHJlc2VudGF0aW9uIGhpbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MgojW3JlcHIodHJhbnNwYXJlbnQsIEMpXSAvLyBlcnJvcjogaW5jb21wYXRpYmxlIHJlcHJlc2VudGF0aW9uIGhpbnRzCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkEgdHlwZSBhbm5vdGF0ZWQgYXMgYHJlcHIodHJhbnNwYXJlbnQpYCBkZWxlZ2F0ZXMgYWxsIHJlcHJlc2VudGF0aW9uIGNvbmNlcm5zIHRvCmFub3RoZXIgdHlwZSwgc28gYWRkaW5nIG1vcmUgcmVwcmVzZW50YXRpb24gaGludHMgaXMgY29udHJhZGljdG9yeS4gUmVtb3ZlCmVpdGhlciB0aGUgYHRyYW5zcGFyZW50YCBoaW50IG9yIHRoZSBvdGhlciBoaW50cywgbGlrZSB0aGlzOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwpgYGAKCkFsdGVybmF0aXZlbHksIG1vdmUgdGhlIG90aGVyIGF0dHJpYnV0ZXMgdG8gdGhlIGNvbnRhaW5lZCB0eXBlOgoKYGBgCiNbcmVwcihDKV0Kc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICAvLyAuLi4KfQoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEZvb1dyYXBwZXIoRm9vKTsKYGBgCgpOb3RlIHRoYXQgaW50cm9kdWNpbmcgYW5vdGhlciBgc3RydWN0YCBqdXN0IHRvIGhhdmUgYSBwbGFjZSBmb3IgdGhlIG90aGVyCmF0dHJpYnV0ZXMgbWF5IGhhdmUgdW5pbnRlbmRlZCBzaWRlIGVmZmVjdHMgb24gdGhlIHJlcHJlc2VudGF0aW9uOgoKYGBgCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtcyhmMzIpOwoKI1tyZXByKEMpXQpzdHJ1Y3QgRmxvYXQoZjMyKTsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBHcmFtczIoRmxvYXQpOyAvLyB0aGlzIGlzIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgYWJvdmUKYGBgCgpIZXJlLCBgR3JhbXMyYCBpcyBhIG5vdCBlcXVpdmFsZW50IHRvIGBHcmFtc2AgLS0gdGhlIGZvcm1lciB0cmFuc3BhcmVudGx5IHdyYXBzCmEgKG5vbi10cmFuc3BhcmVudCkgc3RydWN0IGNvbnRhaW5pbmcgYSBzaW5nbGUgZmxvYXQsIHdoaWxlIGBHcmFtc2AgaXMgYQp0cmFuc3BhcmVudCB3cmFwcGVyIGFyb3VuZCBhIGZsb2F0LiBUaGlzIGNhbiBtYWtlIGEgZGlmZmVyZW5jZSBmb3IgdGhlIEFCSS4KABP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////////P7cJAAAAtwnzCKAGAOmUASYBAAC4DAACBgC5DAEABADEAw4AAAO3DAAEAMQDDgAAALcMAgUBAtkBAQEA8wgAAbgMAAQAxAMOAAACtwwAAQQArwMkAAADtgwABACvAyQAAAC2DAEBAPMIAAKfBgCwAxIAAAICBUUwNjkyAAEfBQAAAAXzCAQArwMkAAAAtgwBAQH3CAABtwwAogYAmJUBJgEAAL0MAAACogYAmJUBJgEAAgKDA2BhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MwojW3JlcHIoYWxpZ249OCldIC8vIGVycm9yIQpzdHJ1Y3QgQWxpZ244KGk4KTsKCiNbcmVwcihhbGlnbj0iOCIpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCBpcyB0aGUgZm9sbG93aW5nOgoKYGBgCiNbcmVwcihhbGlnbig4KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ244KGk4KTsKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB4MDAAAAgwPzCKIGAJiVASYBAAC8DAACBgC9DAEABADEAw4AAAO7DAAEAMQDDgAAALsMAgUBAtkBAQEA8wgAAbwMAAQAxAMOAAACuwwAAQQArwMkAAADugwABACvAyQAAAC6DAEBAPMIAAKhBgCwAxIAAAICBUUwNjkzAAEfBQAAAAXzCAQArwMkAAAAugwBAQH3CAABuwwApAYAx5UBJgEAAMEMAAACpAYAx5UBJgEAAgLuAkEgYGJyZWFrYCBzdGF0ZW1lbnQgd2l0aG91dCBhIGxhYmVsIGFwcGVhcmVkIGluc2lkZSBhIGxhYmVsZWQgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk1Cmxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhazsKICAgIH0KfQpgYGAKCk1ha2Ugc3VyZSB0byBhbHdheXMgbGFiZWwgdGhlIGBicmVha2A6CgpgYGAKJ2w6IGxvb3AgewogICAgJ2E6IHsKICAgICAgICBicmVhayAnbDsKICAgIH0KfQpgYGAKCk9yIGlmIHlvdSB3YW50IHRvIGBicmVha2AgdGhlIGxhYmVsZWQgYmxvY2s6CgpgYGAKbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrICdhOwogICAgfQogICAgYnJlYWs7Cn0KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///////8P7gIAAADuAvMIpAYAx5UBJgEAAMAMAAIGAMEMAQAEAMQDDgAAA78MAAQAxAMOAAAAvwwCBQEC2QEBAQDzCAABwAwABADEAw4AAAK/DAABBACvAyQAAAO+DAAEAK8DJAAAAL4MAQEA8wgAAqMGALADEgAAAgIFRTA2OTUAAR8FAAAABfMIBACvAyQAAAC+DAEBAfcIAAG/DACmBgD2lQEmAQAAxQwAAAKmBgD2lQEmAQACApsGQSBmdW5jdGlvbiBpcyB1c2luZyBgY29udGludWVgIGtleXdvcmQgaW5jb3JyZWN0bHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk2CmZuIGNvbnRpbnVlX3NpbXBsZSgpIHsKICAgICdiOiB7CiAgICAgICAgY29udGludWU7IC8vIGVycm9yIQogICAgfQp9CmZuIGNvbnRpbnVlX2xhYmVsZWQoKSB7CiAgICAnYjogewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBlcnJvciEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiB7CiAgICAgICAgICAgIGNvbnRpbnVlOyAvLyBlcnJvciEKICAgICAgICB9CiAgICB9Cn0KYGBgCgpIZXJlIHdlIGhhdmUgdXNlZCB0aGUgYGNvbnRpbnVlYCBrZXl3b3JkIGluY29ycmVjdGx5LiBBcyB3ZQpoYXZlIHNlZW4gYWJvdmUgdGhhdCBgY29udGludWVgIHBvaW50aW5nIHRvIGEgbGFiZWxlZCBibG9jay4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gdXNlIHRoZSBsYWJlbGVkIGJsb2NrIHByb3Blcmx5LgpGb3IgZXhhbXBsZToKCmBgYApmbiBjb250aW51ZV9zaW1wbGUoKSB7CiAgICAnYjogbG9vcCB7CiAgICAgICAgY29udGludWUgOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9sYWJlbGVkKCkgewogICAgJ2I6IGxvb3AgewogICAgICAgIGNvbnRpbnVlICdiOyAvLyBvayEKICAgIH0KfQpmbiBjb250aW51ZV9jcm9zc2luZygpIHsKICAgIGxvb3AgewogICAgICAgICdiOiBsb29wIHsKICAgICAgICAgICAgY29udGludWU7IC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKAA3///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwYAAACbBvMIpgYA9pUBJgEAAMQMAAIGAMUMAQAEAMQDDgAAA8MMAAQAxAMOAAAAwwwCBQEC2QEBAQDzCAABxAwABADEAw4AAALDDAABBACvAyQAAAPCDAAEAK8DJAAAAMIMAQEA8wgAAqUGALADEgAAAgIFRTA2OTYAAR8FAAAABfMIBACvAyQAAADCDAEBAfcIAAHDDACoBgCllgEmAQAAyQwAAAKoBgCllgEmAQACArsDQSBjbG9zdXJlIGhhcyBiZWVuIHVzZWQgYXMgYHN0YXRpY2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjk3CmZuIG1haW4oKSB7CiAgICBzdGF0aWMgfHwge307IC8vIHVzZWQgYXMgYHN0YXRpY2AKfQpgYGAKCkNsb3N1cmVzIGNhbm5vdCBiZSB1c2VkIGFzIGBzdGF0aWNgLiBUaGV5ICJzYXZlIiB0aGUgZW52aXJvbm1lbnQsCmFuZCBhcyBzdWNoIGEgc3RhdGljIGNsb3N1cmUgd291bGQgc2F2ZSBvbmx5IGEgc3RhdGljIGVudmlyb25tZW50CndoaWNoIHdvdWxkIGNvbnNpc3Qgb25seSBvZiB2YXJpYWJsZXMgd2l0aCBhIHN0YXRpYyBsaWZldGltZS4gR2l2ZW4KdGhpcyBpdCB3b3VsZCBiZSBiZXR0ZXIgdG8gdXNlIGEgcHJvcGVyIGZ1bmN0aW9uLiBUaGUgZWFzaWVzdCBmaXgKaXMgdG8gcmVtb3ZlIHRoZSBgc3RhdGljYCBrZXl3b3JkLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////B7sDAAAAuwPzCKgGAKWWASYBAADIDAACBgDJDAEABADEAw4AAAPHDAAEAMQDDgAAAMcMAgUBAtkBAQEA8wgAAcgMAAQAxAMOAAACxwwAAQQArwMkAAADxgwABACvAyQAAADGDAEBAPMIAAKnBgCwAxIAAAICBUUwNjk3AAEfBQAAAAXzCAQArwMkAAAAxgwBAQH3CAABxwwAqgYA1JYBJgEAAM0MAAACqgYA1JYBJgEAAgK5BFdoZW4gdXNpbmcgZ2VuZXJhdG9ycyAob3IgYXN5bmMpIGFsbCB0eXBlIHZhcmlhYmxlcyBtdXN0IGJlIGJvdW5kIHNvIGEKZ2VuZXJhdG9yIGNhbiBiZSBjb25zdHJ1Y3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAxOCxjb21waWxlX2ZhaWwsRTA2OTgKYXN5bmMgZm4gYmFyPFQ+KCkgLT4gKCkge30KCmFzeW5jIGZuIGZvbygpIHsKICAgIGJhcigpLmF3YWl0OyAvLyBlcnJvcjogY2Fubm90IGluZmVyIHR5cGUgZm9yIGBUYAp9CmBgYAoKSW4gdGhlIGFib3ZlIGV4YW1wbGUgYFRgIGlzIHVua25vd2FibGUgYnkgdGhlIGNvbXBpbGVyLgpUbyBmaXggdGhpcyB5b3UgbXVzdCBiaW5kIGBUYCB0byBhIGNvbmNyZXRlIHR5cGUgc3VjaCBhcyBgU3RyaW5nYApzbyB0aGF0IGEgZ2VuZXJhdG9yIGNhbiB0aGVuIGJlIGNvbnN0cnVjdGVkOgoKYGBgZWRpdGlvbjIwMTgKYXN5bmMgZm4gYmFyPFQ+KCkgLT4gKCkge30KCmFzeW5jIGZuIGZvbygpIHsKICAgIGJhcjo6PFN0cmluZz4oKS5hd2FpdDsKICAgIC8vICAgXl5eXl5eXl4gc3BlY2lmeSB0eXBlIGV4cGxpY2l0bHkKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////AbkEAAAAuQTzCKoGANSWASYBAADMDAACBgDNDAEABADEAw4AAAPLDAAEAMQDDgAAAMsMAgUBAtkBAQEA8wgAAcwMAAQAxAMOAAACywwAAQQArwMkAAADygwABACvAyQAAADKDAEBAPMIAAKpBgCwAxIAAAICBUUwNjk4AAEfBQAAAAXzCAQArwMkAAAAygwBAQH3CAABywwArAYAg5cBJgEAANEMAAACrAYAg5cBJgEAAgKTCUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYSByYXcgcG9pbnRlciB3aG9zZSBpbm5lciB0eXBlIHdhc24ndCBjb21wbGV0ZWx5IGtub3duLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDY5OQojICMhW2Rlbnkod2FybmluZ3MpXQojIGZuIG1haW4oKSB7CmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgXzsKaWYgYmFyLmlzX251bGwoKSB7CiAgICAvLyAuLi4KfQojIH0KYGBgCgpIZXJlLCB0aGUgdHlwZSBvZiBgYmFyYCBpc24ndCBrbm93bjsgaXQgY291bGQgYmUgYSBwb2ludGVyIHRvIGFueXRoaW5nLiBJbnN0ZWFkLApzcGVjaWZ5IGEgdHlwZSBmb3IgdGhlIHBvaW50ZXIgKHByZWZlcmFibHkgc29tZXRoaW5nIHRoYXQgbWFrZXMgc2Vuc2UgZm9yIHRoZQp0aGluZyB5b3UncmUgcG9pbnRpbmcgdG8pOgoKYGBgCmxldCBmb28gPSAmMTsKbGV0IGJhciA9IGZvbyBhcyAqY29uc3QgaTMyOwppZiBiYXIuaXNfbnVsbCgpIHsKICAgIC8vIC4uLgp9CmBgYAoKRXZlbiB0aG91Z2ggYGlzX251bGwoKWAgZXhpc3RzIGFzIGEgbWV0aG9kIG9uIGFueSByYXcgcG9pbnRlciwgUnVzdCBzaG93cyB0aGlzCmVycm9yIGJlY2F1c2UgIFJ1c3QgYWxsb3dzIGZvciBgc2VsZmAgdG8gaGF2ZSBhcmJpdHJhcnkgdHlwZXMgKGJlaGluZCB0aGUKYXJiaXRyYXJ5X3NlbGZfdHlwZXMgZmVhdHVyZSBmbGFnKS4KClRoaXMgbWVhbnMgdGhhdCBzb21lb25lIGNhbiBzcGVjaWZ5IHN1Y2ggYSBmdW5jdGlvbjoKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtZmVhdHVyZS1kb2VzbnQtZXhpc3QteWV0KQppbXBsIEZvbyB7CiAgICBmbiBpc19udWxsKHNlbGY6ICpjb25zdCBTZWxmKSAtPiBib29sIHsKICAgICAgICAvLyBkbyBzb21ldGhpbmcgZWxzZQogICAgfQp9CmBgYAoKYW5kIG5vdyB3aGVuIHlvdSBjYWxsIGAuaXNfbnVsbCgpYCBvbiBhIHJhdyBwb2ludGVyIHRvIGBGb29gLCB0aGVyZSdzIGFtYmlndWl0eS4KCkdpdmVuIHRoYXQgd2UgZG9uJ3Qga25vdyB3aGF0IHR5cGUgdGhlIHBvaW50ZXIgaXMsIGFuZCB0aGVyZSdzIHBvdGVudGlhbAphbWJpZ3VpdHkgZm9yIHNvbWUgdHlwZXMsIHdlIGRpc2FsbG93IGNhbGxpbmcgbWV0aG9kcyBvbiByYXcgcG9pbnRlcnMgd2hlbgp0aGUgdHlwZSBpcyB1bmtub3duLgoAE////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MJAAAAkwnzCKwGAIOXASYBAADQDAACBgDRDAEABADEAw4AAAPPDAAEAMQDDgAAAM8MAgUBAtkBAQEA8wgAAdAMAAQAxAMOAAACzwwAAQQArwMkAAADzgwABACvAyQAAADODAEBAPMIAAKrBgCwAxIAAAICBUUwNjk5AAEfBQAAAAXzCAQArwMkAAAAzgwBAQH3CAABzwwArgYAspcBJgEAANUMAAACrgYAspcBJgEAAgK3CFRoZSBgaW1wbCBUcmFpdGAgcmV0dXJuIHR5cGUgY2FwdHVyZXMgbGlmZXRpbWUgcGFyYW1ldGVycyB0aGF0IGRvIG5vdAphcHBlYXIgd2l0aGluIHRoZSBgaW1wbCBUcmFpdGAgaXRzZWxmLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKdHJhaXQgVHJhaXQ8J2E+IHsgfQoKaW1wbDwnYSwgJ2I+IFRyYWl0PCdiPiBmb3IgQ2VsbDwmJ2EgdTMyPiB7IH0KCmZuIGZvbzwneCwgJ3k+KHg6IENlbGw8Jid4IHUzMj4pIC0+IGltcGwgVHJhaXQ8J3k+CndoZXJlICd4OiAneQp7CiAgICB4Cn0KYGBgCgpIZXJlLCB0aGUgZnVuY3Rpb24gYGZvb2AgcmV0dXJucyBhIHZhbHVlIG9mIHR5cGUgYENlbGw8Jid4IHUzMj5gLAp3aGljaCByZWZlcmVuY2VzIHRoZSBsaWZldGltZSBgJ3hgLiBIb3dldmVyLCB0aGUgcmV0dXJuIHR5cGUgaXMKZGVjbGFyZWQgYXMgYGltcGwgVHJhaXQ8J3k+YCAtLSB0aGlzIGluZGljYXRlcyB0aGF0IGBmb29gIHJldHVybnMKInNvbWUgdHlwZSB0aGF0IGltcGxlbWVudHMgYFRyYWl0PCd5PmAiLCBidXQgaXQgYWxzbyBpbmRpY2F0ZXMgdGhhdAp0aGUgcmV0dXJuIHR5cGUgKipvbmx5IGNhcHR1cmVzIGRhdGEgcmVmZXJlbmNpbmcgdGhlIGxpZmV0aW1lIGAneWAqKi4KSW4gdGhpcyBjYXNlLCB0aG91Z2gsIHdlIGFyZSByZWZlcmVuY2luZyBkYXRhIHdpdGggbGlmZXRpbWUgYCd4YCwgc28KdGhpcyBmdW5jdGlvbiBpcyBpbiBlcnJvci4KClRvIGZpeCB0aGlzLCB5b3UgbXVzdCByZWZlcmVuY2UgdGhlIGxpZmV0aW1lIGAneGAgZnJvbSB0aGUgcmV0dXJuCnR5cGUuIEZvciBleGFtcGxlLCBjaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGUgdG8gYGltcGwgVHJhaXQ8J3k+ICsgJ3hgCndvdWxkIHdvcms6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKCnRyYWl0IFRyYWl0PCdhPiB7IH0KCmltcGw8J2EsJ2I+IFRyYWl0PCdiPiBmb3IgQ2VsbDwmJ2EgdTMyPiB7IH0KCmZuIGZvbzwneCwgJ3k+KHg6IENlbGw8Jid4IHUzMj4pIC0+IGltcGwgVHJhaXQ8J3k+ICsgJ3gKd2hlcmUgJ3g6ICd5CnsKICAgIHgKfQpgYGAKABH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////z+3CAAAALcI8wiuBgCylwEmAQAA1AwAAgYA1QwBAAQAxAMOAAAD0wwABADEAw4AAADTDAIFAQLZAQEBAPMIAAHUDAAEAMQDDgAAAtMMAAEEAK8DJAAAA9IMAAQArwMkAAAA0gwBAQDzCAACrQYAsAMSAAACAgVFMDcwMAABHwUAAAAF8wgEAK8DJAAAANIMAQEB9wgAAdMMALAGAOGXASYBAADZDAAAArAGAOGXASYBAAICzwFUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgYCNbbm9uX2V4aGF1c3RpdmVdYCBhdHRyaWJ1dGUgd2FzIGluY29ycmVjdGx5IHBsYWNlZApvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdCBvciBlbnVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMQojW25vbl9leGhhdXN0aXZlXQp0cmFpdCBGb28geyB9CmBgYAoABP///////////wH///////////8B////////////Af//Ac8BAAAAzwHzCLAGAOGXASYBAADYDAACBgDZDAEABADEAw4AAAPXDAAEAMQDDgAAANcMAgUBAtkBAQEA8wgAAdgMAAQAxAMOAAAC1wwAAQQArwMkAAAD1gwABACvAyQAAADWDAEBAPMIAAKvBgCwAxIAAAICBUUwNzAxAAEfBQAAAAXzCAQArwMkAAAA1gwBAQH3CAAB1wwAsgYAkJgBJgEAAN0MAAACsgYAkJgBJgEAAgKOA0ludmFsaWQgQUJJIChBcHBsaWNhdGlvbiBCaW5hcnkgSW50ZXJmYWNlKSB1c2VkIGluIHRoZSBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcwMwpleHRlcm4gImludmFsaWQiIGZuIGZvbygpIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCkF0IHByZXNlbnQgZmV3IHByZWRlZmluZWQgQUJJJ3MgKGxpa2UgUnVzdCwgQywgc3lzdGVtLCBldGMuKSBjYW4gYmUKdXNlZCBpbiBSdXN0LiBWZXJpZnkgdGhhdCB0aGUgQUJJIGlzIHByZWRlZmluZWQuIEZvciBleGFtcGxlIHlvdSBjYW4KcmVwbGFjZSB0aGUgZ2l2ZW4gQUJJIGZyb20gJ1J1c3QnLgoKYGBgCmV4dGVybiAiUnVzdCIgZm4gZm9vKCkge30gLy8gb2shCiMgZm4gbWFpbigpIHsgfQpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44DAAAAjgPzCLIGAJCYASYBAADcDAACBgDdDAEABADEAw4AAAPbDAAEAMQDDgAAANsMAgUBAtkBAQEA8wgAAdwMAAQAxAMOAAAC2wwAAQQArwMkAAAD2gwABACvAyQAAADaDAEBAPMIAAKxBgCwAxIAAAICBUUwNzAzAAEfBQAAAAXzCAQArwMkAAAA2gwBAQH3CAAB2wwAtAYAv5gBJgEAAOEMAAACtAYAv5gBJgEAAgLgA0FuIGluY29ycmVjdCB2aXNpYmlsaXR5IHJlc3RyaWN0aW9uIHdhcyBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzA0Cm1vZCBmb28gewogICAgcHViKGZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KYGBgCgpUbyBtYWtlIHN0cnVjdCBgQmFyYCBvbmx5IHZpc2libGUgaW4gbW9kdWxlIGBmb29gIHRoZSBgaW5gIGtleXdvcmQgc2hvdWxkIGJlCnVzZWQ6CgpgYGAKbW9kIGZvbyB7CiAgICBwdWIoaW4gY3JhdGU6OmZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KIyBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFJ1c3QgUmVmZXJlbmNlIG9uIFtWaXNpYmlsaXR5XS4KCltWaXNpYmlsaXR5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdmlzaWJpbGl0eS1hbmQtcHJpdmFjeS5odG1sCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8P4AMAAADgA/MItAYAv5gBJgEAAOAMAAIGAOEMAQAEAMQDDgAAA98MAAQAxAMOAAAA3wwCBQEC2QEBAQDzCAAB4AwABADEAw4AAALfDAABBACvAyQAAAPeDAAEAK8DJAAAAN4MAQEA8wgAArMGALADEgAAAgIFRTA3MDQAAR8FAAAABfMIBACvAyQAAADeDAEBAfcIAAHfDAC2BgDumAEmAQAA5QwAAAK2BgDumAEmAQACAoMDQSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgZm9yIGEgZmVhdHVyZSB0aGF0IGlzIHN0YWJsZSBpbiB0aGUKY3VycmVudCBlZGl0aW9uLCBidXQgbm90IGluIGFsbCBlZGl0aW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBydXN0MjAxOCxjb21waWxlX2ZhaWwsRTA3MDUKIyFbZmVhdHVyZShydXN0XzIwMThfcHJldmlldyldCiMhW2ZlYXR1cmUodGVzdF8yMDE4X2ZlYXR1cmUpXSAvLyBlcnJvcjogdGhlIGZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGB0ZXN0XzIwMThfZmVhdHVyZWAgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBSdXN0IDIwMTggZWRpdGlvbgpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEHgwMAAACDA/MItgYA7pgBJgEAAOQMAAIGAOUMAQAEAMQDDgAAA+MMAAQAxAMOAAAA4wwCBQEC2QEBAQDzCAAB5AwABADEAw4AAALjDAABBACvAyQAAAPiDAAEAK8DJAAAAOIMAQEA8wgAArUGALADEgAAAgIFRTA3MDUAAR8FAAAABfMIBACvAyQAAADiDAEBAfcIAAHjDAC4BgCdmQEmAQAA6QwAAAK4BgCdmQEmAQACAq0PYGFzeW5jIGZuYHMgYXJlIG5vdCB5ZXQgc3VwcG9ydGVkIGluIHRyYWl0cyBpbiBSdXN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOAp0cmFpdCBUIHsKICAgIC8vIE5laXRoZXIgY2FzZSBpcyBjdXJyZW50bHkgc3VwcG9ydGVkLgogICAgYXN5bmMgZm4gZm9vKCkge30KICAgIGFzeW5jIGZuIGJhcigmc2VsZikge30KfQpgYGAKCmBhc3luYyBmbmBzIHJldHVybiBhbiBgaW1wbCBGdXR1cmVgLCBtYWtpbmcgdGhlIGZvbGxvd2luZyB0d28gZXhhbXBsZXMKZXF1aXZhbGVudDoKCmBgYGVkaXRpb24yMDE4LGlnbm9yZSAoZXhhbXBsZS1vZi1kZXN1Z2FyaW5nLWVxdWl2YWxlbmNlKQphc3luYyBmbiBmb28oKSAtPiBVc2VyIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQovLyBUaGUgYXN5bmMgZm4gYWJvdmUgZ2V0cyBkZXN1Z2FyZWQgYXMgZm9sbG93czoKZm4gZm9vKCZzZWxmKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSBVc2VyPiArICdfIHsKICAgIHVuaW1wbGVtZW50ZWQhKCkKfQpgYGAKCkJ1dCB3aGVuIGl0IGNvbWVzIHRvIHN1cHBvcnRpbmcgdGhpcyBpbiB0cmFpdHMsIHRoZXJlIGFyZSBbYSBmZXcgaW1wbGVtZW50YXRpb24KaXNzdWVzXVthc3luYy1pcy1oYXJkXS4gT25lIG9mIHRoZW0gaXMgcmV0dXJuaW5nIGBpbXBsIFRyYWl0YCBpbiB0cmFpdHMgaXMgbm90CnN1cHBvcnRlZCwgYXMgaXQgd291bGQgcmVxdWlyZSBbR2VuZXJpYyBBc3NvY2lhdGVkIFR5cGVzXSB0byBiZSBzdXBwb3J0ZWQ6CgpgYGBlZGl0aW9uMjAxOCxpZ25vcmUgKGV4YW1wbGUtb2YtZGVzdWdhcmluZy1lcXVpdmFsZW5jZSkKaW1wbCBNeURhdGFiYXNlIHsKICAgIGFzeW5jIGZuIGdldF91c2VyKCZzZWxmKSAtPiBVc2VyIHsKICAgICAgICB1bmltcGxlbWVudGVkISgpCiAgICB9Cn0KCmltcGwgTXlEYXRhYmFzZSB7CiAgICBmbiBnZXRfdXNlcigmc2VsZikgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gVXNlcj4gKyAnXyB7CiAgICAgICAgdW5pbXBsZW1lbnRlZCEoKQogICAgfQp9CmBgYAoKVW50aWwgdGhlc2UgaXNzdWVzIGFyZSByZXNvbHZlZCwgeW91IGNhbiB1c2UgdGhlIFtgYXN5bmMtdHJhaXRgIGNyYXRlXSwgYWxsb3dpbmcKeW91IHRvIHVzZSBgYXN5bmMgZm5gIGluIHRyYWl0cyBieSBkZXN1Z2FyaW5nIHRvICJib3hlZCBmdXR1cmVzIgooYFBpbjxCb3g8ZHluIEZ1dHVyZSArIFNlbmQgKyAnYXN5bmM+PmApLgoKTm90ZSB0aGF0IHVzaW5nIHRoZXNlIHRyYWl0IG1ldGhvZHMgd2lsbCByZXN1bHQgaW4gYSBoZWFwIGFsbG9jYXRpb24KcGVyLWZ1bmN0aW9uLWNhbGwuIFRoaXMgaXMgbm90IGEgc2lnbmlmaWNhbnQgY29zdCBmb3IgdGhlIHZhc3QgbWFqb3JpdHkgb2YKYXBwbGljYXRpb25zLCBidXQgc2hvdWxkIGJlIGNvbnNpZGVyZWQgd2hlbiBkZWNpZGluZyB3aGV0aGVyIHRvIHVzZSB0aGlzCmZ1bmN0aW9uYWxpdHkgaW4gdGhlIHB1YmxpYyBBUEkgb2YgYSBsb3ctbGV2ZWwgZnVuY3Rpb24gdGhhdCBpcyBleHBlY3RlZCB0byBiZQpjYWxsZWQgbWlsbGlvbnMgb2YgdGltZXMgYSBzZWNvbmQuCgpZb3UgbWlnaHQgYmUgaW50ZXJlc3RlZCBpbiB2aXNpdGluZyB0aGUgW2FzeW5jIGJvb2tdIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uLgoKW2Bhc3luYy10cmFpdGAgY3JhdGVdOiBodHRwczovL2NyYXRlcy5pby9jcmF0ZXMvYXN5bmMtdHJhaXQKW2FzeW5jLWlzLWhhcmRdOiBodHRwczovL3NtYWxsY3VsdGZvbGxvd2luZy5jb20vYmFieXN0ZXBzL2Jsb2cvMjAxOS8xMC8yNi9hc3luYy1mbi1pbi10cmFpdHMtYXJlLWhhcmQvCltHZW5lcmljIEFzc29jaWF0ZWQgVHlwZXNdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0MjY1Clthc3luYyBib29rXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL2FzeW5jLWJvb2svMDdfd29ya2Fyb3VuZHMvMDVfYXN5bmNfaW5fdHJhaXRzLmh0bWwKAB////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8HrQ8AAACtD/MIuAYAnZkBJgEAAOgMAAIGAOkMAQAEAMQDDgAAA+cMAAQAxAMOAAAA5wwCBQEC2QEBAQDzCAAB6AwABADEAw4AAALnDAABBACvAyQAAAPmDAAEAK8DJAAAAOYMAQEA8wgAArcGALADEgAAAgIFRTA3MDYAAR8FAAAABfMIBACvAyQAAADmDAEBAfcIAAHnDAC6BgDMmQEmAQAA7QwAAAK6BgDMmQEmAQACAvEDYGFzeW5jYCBub24tYG1vdmVgIGNsb3N1cmVzIHdpdGggcGFyYW1ldGVycyBhcmUgY3VycmVudGx5IG5vdCBzdXBwb3J0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNzA4CiMhW2ZlYXR1cmUoYXN5bmNfY2xvc3VyZSldCgpmbiBtYWluKCkgewogICAgbGV0IGFkZF9vbmUgPSBhc3luYyB8bnVtOiB1OHwgeyAvLyBlcnJvciEKICAgICAgICBudW0gKyAxCiAgICB9Owp9CmBgYAoKYGFzeW5jYCB3aXRoIG5vbi1tb3ZlIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkIHdpdGggdGhlIGN1cnJlbnQKdmVyc2lvbiwgeW91IGNhbiB1c2Ugc3VjY2Vzc2Z1bGx5IGJ5IHVzaW5nIG1vdmU6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGFzeW5jX2Nsb3N1cmUpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhZGRfb25lID0gYXN5bmMgbW92ZSB8bnVtOiB1OHwgeyAvLyBvayEKICAgICAgICBudW0gKyAxCiAgICB9Owp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////9/8QMAAADxA/MIugYAzJkBJgEAAOwMAAIGAO0MAQAEAMQDDgAAA+sMAAQAxAMOAAAA6wwCBQEC2QEBAQDzCAAB7AwABADEAw4AAALrDAABBACvAyQAAAPqDAAEAK8DJAAAAOoMAQEA8wgAArkGALADEgAAAgIFRTA3MDgAAR8FAAAABfMIBACvAyQAAADqDAEBAfcIAAHrDAC8BgD7mQEmAQAA8QwAAAK8BgD7mQEmAQACAqEEQW4gdW5rbm93biB0b29sIG5hbWUgd2FzIGZvdW5kIGluIGEgc2NvcGVkIGxpbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMAojW2FsbG93KGNsaXBwOjpmaWx0ZXJfbWFwKV0gLy8gZXJyb3IhYApmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMAojW3dhcm4oY2xpcHA6OmZpbHRlcl9tYXApXSAvLyBlcnJvciFgCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0b29sJ3MgbmFtZSBvciB0aGF0IHlvdSBkaWRuJ3QKZm9yZ2V0IHRvIGltcG9ydCBpdCBpbiB5b3UgcHJvamVjdDoKCmBgYAojW2FsbG93KGNsaXBweTo6ZmlsdGVyX21hcCldIC8vIG9rIQpmbiBtYWluKCkgewogICAgLy8gYnVzaW5lc3MgbG9naWMKfQpgYGAKCmBgYAojW3dhcm4oY2xpcHB5OjpmaWx0ZXJfbWFwKV0gLy8gb2shCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoACf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////x+hBAAAAKEE8wi8BgD7mQEmAQAA8AwAAgYA8QwBAAQAxAMOAAAD7wwABADEAw4AAADvDAIFAQLZAQEBAPMIAAHwDAAEAMQDDgAAAu8MAAEEAK8DJAAAA+4MAAQArwMkAAAA7gwBAQDzCAACuwYAsAMSAAACAgVFMDcxMAABHwUAAAAF8wgEAK8DJAAAAO4MAQEB9wgAAe8MAL4GAKqaASYBAAD1DAAAAr4GAKqaASYBAAICgwNBIGJvcnJvdyBvZiBhIHRocmVhZC1sb2NhbCB2YXJpYWJsZSB3YXMgbWFkZSBpbnNpZGUgYSBmdW5jdGlvbiB3aGljaCBvdXRsaXZlZAp0aGUgbGlmZXRpbWUgb2YgdGhlIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxMgojIVtmZWF0dXJlKHRocmVhZF9sb2NhbCldCgojW3RocmVhZF9sb2NhbF0Kc3RhdGljIEZPTzogdTggPSAzOwoKZm4gbWFpbigpIHsKICAgIGxldCBhID0gJkZPTzsgLy8gZXJyb3I6IHRocmVhZC1sb2NhbCB2YXJpYWJsZSBib3Jyb3dlZCBwYXN0IGVuZCBvZiBmdW5jdGlvbgoKICAgIHN0ZDo6dGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICBwcmludGxuISgie30iLCBhKTsKICAgIH0pOwp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////AQeDAwAAAIMD8wi+BgCqmgEmAQAA9AwAAgYA9QwBAAQAxAMOAAAD8wwABADEAw4AAADzDAIFAQLZAQEBAPMIAAH0DAAEAMQDDgAAAvMMAAEEAK8DJAAAA/IMAAQArwMkAAAA8gwBAQDzCAACvQYAsAMSAAACAgVFMDcxMgABHwUAAAAF8wgEAK8DJAAAAPIMAQEB9wgAAfMMAMAGANmaASYBAAD5DAAAAsAGANmaASYBAAIC9Q1UaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBib3Jyb3cgc3RhdGUgcGFzdCB0aGUgZW5kIG9mIHRoZQpsaWZldGltZSBvZiBhIHR5cGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzEzCnB1YiBzdHJ1Y3QgUzwnYT4geyBkYXRhOiAmJ2EgbXV0IFN0cmluZyB9CgppbXBsPCdhPiBEcm9wIGZvciBTPCdhPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyBzZWxmLmRhdGEucHVzaF9zdHIoImJlaW5nIGRyb3BwZWQiKTsgfQp9CgpmbiBkZW1vPCdhPihzOiBTPCdhPikgLT4gJidhIG11dCBTdHJpbmcgeyBsZXQgcCA9ICZtdXQgKnMuZGF0YTsgcCB9CmBgYAoKSGVyZSwgYGRlbW9gIHRyaWVzIHRvIGJvcnJvdyB0aGUgc3RyaW5nIGRhdGEgaGVsZCB3aXRoaW4gaXRzCmFyZ3VtZW50IGBzYCBhbmQgdGhlbiByZXR1cm4gdGhhdCBib3Jyb3cuIEhvd2V2ZXIsIGBTYCBpcwpkZWNsYXJlZCBhcyBpbXBsZW1lbnRpbmcgYERyb3BgLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdApnZXRzIGNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgZ2V0cyBleGNsdXNpdmUKYWNjZXNzIHRvIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCB3aGVuIGl0IHJ1bnMuCgpUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2AgcmVhY2hlcyB0aGUgZW5kIG9mIGBkZW1vYCwgaXRzIGRlc3RydWN0b3IKZ2V0cyBleGNsdXNpdmUgYWNjZXNzIHRvIGl0cyBgJm11dGAtYm9ycm93ZWQgc3RyaW5nIGRhdGEuICBhbGxvd2luZwphbm90aGVyIGJvcnJvdyBvZiB0aGF0IHN0cmluZyBkYXRhIChgcGApLCB0byBleGlzdCBhY3Jvc3MgdGhlIGRyb3Agb2YKYHNgIHdvdWxkIGJlIGEgdmlvbGF0aW9uIG9mIHRoZSBwcmluY2lwbGUgdGhhdCBgJm11dGAtYm9ycm93cyBoYXZlCmV4Y2x1c2l2ZSwgdW5hbGlhc2VkIGFjY2VzcyB0byB0aGVpciByZWZlcmVuY2VkIGRhdGEuCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBjaGFuZ2luZyBgZGVtb2Agc28gdGhhdCB0aGUgZGVzdHJ1Y3RvciBkb2VzCm5vdCBydW4gd2hpbGUgdGhlIHN0cmluZy1kYXRhIGlzIGJvcnJvd2VkOyBmb3IgZXhhbXBsZSBieSB0YWtpbmcgYFNgCmJ5IHJlZmVyZW5jZToKCmBgYApwdWIgc3RydWN0IFM8J2E+IHsgZGF0YTogJidhIG11dCBTdHJpbmcgfQoKaW1wbDwnYT4gRHJvcCBmb3IgUzwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgc2VsZi5kYXRhLnB1c2hfc3RyKCJiZWluZyBkcm9wcGVkIik7IH0KfQoKZm4gZGVtbzwnYT4oczogJidhIG11dCBTPCdhPikgLT4gJidhIG11dCBTdHJpbmcgeyBsZXQgcCA9ICZtdXQgKigqcykuZGF0YTsgcCB9CmBgYAoKTm90ZSB0aGF0IHRoaXMgYXBwcm9hY2ggbmVlZHMgYSByZWZlcmVuY2UgdG8gUyB3aXRoIGxpZmV0aW1lIGAnYWAuCk5vdGhpbmcgc2hvcnRlciB0aGFuIGAnYWAgd2lsbCBzdWZmaWNlOiBhIHNob3J0ZXIgbGlmZXRpbWUgd291bGQgaW1wbHkKdGhhdCBhZnRlciBgZGVtb2AgZmluaXNoZXMgZXhlY3V0aW5nLCBzb21ldGhpbmcgZWxzZSAoc3VjaCBhcyB0aGUKZGVzdHJ1Y3RvciEpIGNvdWxkIGFjY2VzcyBgcy5kYXRhYCBhZnRlciB0aGUgZW5kIG9mIHRoYXQgc2hvcnRlcgpsaWZldGltZSwgd2hpY2ggd291bGQgYWdhaW4gdmlvbGF0ZSB0aGUgYCZtdXRgLWJvcnJvdydzIGV4Y2x1c2l2ZQphY2Nlc3MuCgAc////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////w/1DQAAAPUN8wjABgDZmgEmAQAA+AwAAgYA+QwBAAQAxAMOAAAD9wwABADEAw4AAAD3DAIFAQLZAQEBAPMIAAH4DAAEAMQDDgAAAvcMAAEEAK8DJAAAA/YMAAQArwMkAAAA9gwBAQDzCAACvwYAsAMSAAACAgVFMDcxMwABHwUAAAAF8wgEAK8DJAAAAPYMAQEB9wgAAfcMAMIGAIibASYBAAD9DAAAAsIGAIibASYBAAICzgNBIGAjW21hcmtlcl1gIHRyYWl0IGNvbnRhaW5lZCBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE0CiMhW2ZlYXR1cmUobWFya2VyX3RyYWl0X2F0dHIpXQojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgojW21hcmtlcl0KdHJhaXQgTWFya2VyQ29uc3QgewogICAgY29uc3QgTjogdXNpemU7IC8vIGVycm9yIQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgaXRlbXMgb2YgbWFya2VyIHRyYWl0cyBjYW5ub3QgYmUgb3ZlcnJpZGRlbiwgc28gdGhlcmUncyBubyBuZWVkIHRvIGhhdmUgdGhlbQp3aGVuIHRoZXkgY2Fubm90IGJlIGNoYW5nZWQgcGVyLXR5cGUgYW55d2F5LiAgSWYgeW91IHdhbnRlZCB0aGVtIGZvciBlcmdvbm9taWMKcmVhc29ucywgY29uc2lkZXIgbWFraW5nIGFuIGV4dGVuc2lvbiB0cmFpdCBpbnN0ZWFkLgoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f84DAAAAzgPzCMIGAIibASYBAAD8DAACBgD9DAEABADEAw4AAAP7DAAEAMQDDgAAAPsMAgUBAtkBAQEA8wgAAfwMAAQAxAMOAAAC+wwAAQQArwMkAAAD+gwABACvAyQAAAD6DAEBAPMIAALBBgCwAxIAAAICBUUwNzE0AAEfBQAAAAXzCAQArwMkAAAA+gwBAQH3CAAB+wwAxAYAt5sBJgEAAIENAAACxAYAt5sBJgEAAgKqBEFuIGBpbXBsYCBmb3IgYSBgI1ttYXJrZXJdYCB0cmFpdCB0cmllZCB0byBvdmVycmlkZSBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE1CiMhW2ZlYXR1cmUobWFya2VyX3RyYWl0X2F0dHIpXQoKI1ttYXJrZXJdCnRyYWl0IE1hcmtlciB7CiAgICBjb25zdCBOOiB1c2l6ZSA9IDA7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7fQp9CgpzdHJ1Y3QgT3ZlcnJpZGVDb25zdDsKaW1wbCBNYXJrZXIgZm9yIE92ZXJyaWRlQ29uc3QgeyAvLyBlcnJvciEKICAgIGNvbnN0IE46IHVzaXplID0gMTsKfQojIGZuIG1haW4oKSB7fQpgYGAKCkJlY2F1c2UgbWFya2VyIHRyYWl0cyBhcmUgYWxsb3dlZCB0byBoYXZlIG11bHRpcGxlIGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUKdHlwZSwgaXQncyBub3QgYWxsb3dlZCB0byBvdmVycmlkZSBhbnl0aGluZyBpbiB0aG9zZSBpbXBsZW1lbnRhdGlvbnMsIGFzIGl0CndvdWxkIGJlIGFtYmlndW91cyB3aGljaCBvdmVycmlkZSBzaG91bGQgYWN0dWFsbHkgYmUgdXNlZC4KAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////f6oEAAAAqgTzCMQGALebASYBAACADQACBgCBDQEABADEAw4AAAP/DAAEAMQDDgAAAP8MAgUBAtkBAQEA8wgAAYANAAQAxAMOAAAC/wwAAQQArwMkAAAD/gwABACvAyQAAAD+DAEBAPMIAALDBgCwAxIAAAICBUUwNzE1AAEfBQAAAAXzCAQArwMkAAAA/gwBAQH3CAAB/wwAxgYA5psBJgEAAIUNAAACxgYA5psBJgEAAgLQFUEgdGVtcG9yYXJ5IHZhbHVlIGlzIGJlaW5nIGRyb3BwZWQgd2hpbGUgYSBib3Jyb3cgaXMgc3RpbGwgaW4gYWN0aXZlIHVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTYKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgcCA9IGJhcigmZm9vKCkpOwogICAgICAgICAvLyAtLS0tLS0gY3JlYXRlcyBhIHRlbXBvcmFyeQpsZXQgcSA9ICpwOwpgYGAKCkhlcmUsIHRoZSBleHByZXNzaW9uIGAmZm9vKClgIGlzIGJvcnJvd2luZyB0aGUgZXhwcmVzc2lvbiBgZm9vKClgLiBBcyBgZm9vKClgIGlzCmEgY2FsbCB0byBhIGZ1bmN0aW9uLCBhbmQgbm90IHRoZSBuYW1lIG9mIGEgdmFyaWFibGUsIHRoaXMgY3JlYXRlcyBhCioqdGVtcG9yYXJ5KiogLS0gdGhhdCB0ZW1wb3Jhcnkgc3RvcmVzIHRoZSByZXR1cm4gdmFsdWUgZnJvbSBgZm9vKClgIHNvIHRoYXQgaXQKY2FuIGJlIGJvcnJvd2VkLiBZb3UgY291bGQgaW1hZ2luZSB0aGF0IGBsZXQgcCA9IGJhcigmZm9vKCkpO2AgaXMgZXF1aXZhbGVudCB0bwp0aGUgZm9sbG93aW5nLCB3aGljaCB1c2VzIGFuIGV4cGxpY2l0IHRlbXBvcmFyeSB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTcKIyBmbiBmb28oKSAtPiBpMzIgeyAyMiB9CiMgZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHAgPSB7CiAgbGV0IHRtcCA9IGZvbygpOyAvLyB0aGUgdGVtcG9yYXJ5CiAgYmFyKCZ0bXApIC8vIGVycm9yOiBgdG1wYCBkb2VzIG5vdCBsaXZlIGxvbmcgZW5vdWdoCn07IC8vIDwtLSB0bXAgaXMgZnJlZWQgYXMgd2UgZXhpdCB0aGlzIGJsb2NrCmxldCBxID0gcDsKYGBgCgpXaGVuZXZlciBhIHRlbXBvcmFyeSBpcyBjcmVhdGVkLCBpdCBpcyBhdXRvbWF0aWNhbGx5IGRyb3BwZWQgKGZyZWVkKSBhY2NvcmRpbmcKdG8gZml4ZWQgcnVsZXMuIE9yZGluYXJpbHksIHRoZSB0ZW1wb3JhcnkgaXMgZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcKc3RhdGVtZW50IC0tIGluIHRoaXMgY2FzZSwgYWZ0ZXIgdGhlIGBsZXRgLiBUaGlzIGlzIGlsbHVzdHJhdGVkIGluIHRoZSBleGFtcGxlCmFib3ZlIGJ5IHNob3dpbmcgdGhhdCBgdG1wYCB3b3VsZCBiZSBmcmVlZCBhcyB3ZSBleGl0IHRoZSBibG9jay4KClRvIGZpeCB0aGlzIHByb2JsZW0sIHlvdSBuZWVkIHRvIGNyZWF0ZSBhIGxvY2FsIHZhcmlhYmxlIHRvIHN0b3JlIHRoZSB2YWx1ZSBpbgpyYXRoZXIgdGhhbiByZWx5aW5nIG9uIGEgdGVtcG9yYXJ5LiBGb3IgZXhhbXBsZSwgeW91IG1pZ2h0IGNoYW5nZSB0aGUgb3JpZ2luYWwKcHJvZ3JhbSB0byB0aGUgZm9sbG93aW5nOgoKYGBgCmZuIGZvbygpIC0+IGkzMiB7IDIyIH0KZm4gYmFyKHg6ICZpMzIpIC0+ICZpMzIgeyB4IH0KbGV0IHZhbHVlID0gZm9vKCk7IC8vIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrCmxldCBwID0gYmFyKCZ2YWx1ZSk7CmxldCBxID0gKnA7CmBgYAoKQnkgaW50cm9kdWNpbmcgdGhlIGV4cGxpY2l0IGBsZXQgdmFsdWVgLCB3ZSBhbGxvY2F0ZSBzdG9yYWdlIHRoYXQgd2lsbCBsYXN0CnVudGlsIHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZyBibG9jayAod2hlbiBgdmFsdWVgIGdvZXMgb3V0IG9mIHNjb3BlKS4gV2hlbiB3ZQpib3Jyb3cgYCZ2YWx1ZWAsIHdlIGFyZSBib3Jyb3dpbmcgYSBsb2NhbCB2YXJpYWJsZSB0aGF0IGFscmVhZHkgZXhpc3RzLCBhbmQKaGVuY2Ugbm8gdGVtcG9yYXJ5IGlzIGNyZWF0ZWQuCgpUZW1wb3JhcmllcyBhcmUgbm90IGFsd2F5cyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZyBzdGF0ZW1lbnQuIEluCnNpbXBsZSBjYXNlcyB3aGVyZSB0aGUgYCZgIGV4cHJlc3Npb24gaXMgaW1tZWRpYXRlbHkgc3RvcmVkIGludG8gYSB2YXJpYWJsZSwgdGhlCmNvbXBpbGVyIHdpbGwgYXV0b21hdGljYWxseSBleHRlbmQgdGhlIGxpZmV0aW1lIG9mIHRoZSB0ZW1wb3JhcnkgdW50aWwgdGhlIGVuZApvZiB0aGUgZW5jbG9zaW5nIGJsb2NrLiBUaGVyZWZvcmUsIGFuIGFsdGVybmF0aXZlIHdheSB0byBmaXggdGhlIG9yaWdpbmFsCnByb2dyYW0gaXMgdG8gd3JpdGUgYGxldCB0bXAgPSAmZm9vKClgIGFuZCBub3QgYGxldCB0bXAgPSBmb28oKWA6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgdmFsdWUgPSAmZm9vKCk7CmxldCBwID0gYmFyKHZhbHVlKTsKbGV0IHEgPSAqcDsKYGBgCgpIZXJlLCB3ZSBhcmUgc3RpbGwgYm9ycm93aW5nIGBmb28oKWAsIGJ1dCBhcyB0aGUgYm9ycm93IGlzIGFzc2lnbmVkIGRpcmVjdGx5CmludG8gYSB2YXJpYWJsZSwgdGhlIHRlbXBvcmFyeSB3aWxsIG5vdCBiZSBkcm9wcGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlCmVuY2xvc2luZyBibG9jay4gU2ltaWxhciBydWxlcyBhcHBseSB3aGVuIHRlbXBvcmFyaWVzIGFyZSBzdG9yZWQgaW50byBhZ2dyZWdhdGUKc3RydWN0dXJlcyBsaWtlIGEgdHVwbGUgb3Igc3RydWN0OgoKYGBgCi8vIEhlcmUsIHR3byB0ZW1wb3JhcmllcyBhcmUgY3JlYXRlZCwgYnV0Ci8vIGFzIHRoZXkgYXJlIHN0b3JlZCBkaXJlY3RseSBpbnRvIGB2YWx1ZWAsCi8vIHRoZXkgYXJlIG5vdCBkcm9wcGVkIHVudGlsIHRoZSBlbmQgb2YgdGhlCi8vIGVuY2xvc2luZyBibG9jay4KZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpsZXQgdmFsdWUgPSAoJmZvbygpLCAmZm9vKCkpOwpgYGAKACz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8D0BUAAADQFfMIxgYA5psBJgEAAIQNAAIGAIUNAQAEAMQDDgAAA4MNAAQAxAMOAAAAgw0CBQEC2QEBAQDzCAABhA0ABADEAw4AAAKDDQABBACvAyQAAAOCDQAEAK8DJAAAAIINAQEA8wgAAsUGALADEgAAAgIFRTA3MTYAAR8FAAAABfMIBACvAyQAAACCDQEBAfcIAAGDDQDIBgCVnAEmAQAAiQ0AAALIBgCVnAEmAQACArcBQSBgI1tsYW5nID0gIi4uIl1gIGF0dHJpYnV0ZSB3YXMgcGxhY2VkIG9uIHRoZSB3cm9uZyBpdGVtIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE4CiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgojW2xhbmcgPSAib3duZWRfYm94Il0Kc3RhdGljIFg6IHUzMiA9IDQyOwpgYGAKAAP///////////8B////////////Af////////8/twEAAAC3AfMIyAYAlZwBJgEAAIgNAAIGAIkNAQAEAMQDDgAAA4cNAAQAxAMOAAAAhw0CBQEC2QEBAQDzCAABiA0ABADEAw4AAAKHDQABBACvAyQAAAOGDQAEAK8DJAAAAIYNAQEA8wgAAscGALADEgAAAgIFRTA3MTgAAR8FAAAABfMIBACvAyQAAACGDQEBAfcIAAGHDQDKBgDEnAEmAQAAjQ0AAALKBgDEnAEmAQACAsYIQW4gYXNzb2NpYXRlZCB0eXBlIHZhbHVlIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE5CiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQoKLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBpcyBzcGVjaWZpZWQgdHdpY2UKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29UcmFpdCwgSXRlbTogQmFyVHJhaXQ+PiB7IGY6IFQgfQpgYGAKCmBJdGVtYCBpbiB0cmFpdCBgSXRlcmF0b3JgIGNhbm5vdCBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgZm9yIHN0cnVjdCBgRm9vYC4KVG8gZml4IHRoaXMsIGNyZWF0ZSBhIG5ldyB0cmFpdCB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGRlc2lyZWQgdHJhaXRzIGFuZApzcGVjaWZ5IHRoZSBhc3NvY2lhdGVkIHR5cGUgd2l0aCB0aGUgbmV3IHRyYWl0LgoKQ29ycmVjdGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfYm91bmRzKV0KCnRyYWl0IEZvb1RyYWl0IHt9CnRyYWl0IEJhclRyYWl0IHt9CnRyYWl0IEZvb0JhclRyYWl0OiBGb29UcmFpdCArIEJhclRyYWl0IHt9CgpzdHJ1Y3QgRm9vPFQ6IEl0ZXJhdG9yPEl0ZW06IEZvb0JhclRyYWl0Pj4geyBmOiBUIH0gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXNzb2NpYXRlZCB0eXBlcywgc2VlIFt0aGUgYm9va11bYmstYXRdLiBGb3IgbW9yZQppbmZvcm1hdGlvbiBvbiBhc3NvY2lhdGVkIHR5cGUgYm91bmRzLCBzZWUgW1JGQyAyMjg5XVtyZmMtMjI4OV0uCgpbYmstYXRdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMy1hZHZhbmNlZC10cmFpdHMuaHRtbCNzcGVjaWZ5aW5nLXBsYWNlaG9sZGVyLXR5cGVzLWluLXRyYWl0LWRlZmluaXRpb25zLXdpdGgtYXNzb2NpYXRlZC10eXBlcwpbcmZjLTIyODldOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yMjg5LWFzc29jaWF0ZWQtdHlwZS1ib3VuZHMuaHRtbAoAEv///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BP8YIAAAAxgjzCMoGAMScASYBAACMDQACBgCNDQEABADEAw4AAAOLDQAEAMQDDgAAAIsNAgUBAtkBAQEA8wgAAYwNAAQAxAMOAAACiw0AAQQArwMkAAADig0ABACvAyQAAACKDQEBAPMIAALJBgCwAxIAAAICBUUwNzE5AAEfBQAAAAXzCAQArwMkAAAAig0BAQH3CAABiw0AzAYA85wBJgEAAJENAAACzAYA85wBJgEAAgKKA0FuIGBpbXBsIFRyYWl0YCB0eXBlIGV4cGFuZHMgdG8gYSByZWN1cnNpdmUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjAKZm4gbWFrZV9yZWN1cnNpdmVfdHlwZSgpIC0+IGltcGwgU2l6ZWQgewogICAgW21ha2VfcmVjdXJzaXZlX3R5cGUoKSwgbWFrZV9yZWN1cnNpdmVfdHlwZSgpXQp9CmBgYAoKQW4gYGltcGwgVHJhaXRgIHR5cGUgbXVzdCBiZSBleHBhbmRhYmxlIHRvIGEgY29uY3JldGUgdHlwZSB0aGF0IGNvbnRhaW5zIG5vCmBpbXBsIFRyYWl0YCB0eXBlcy4gRm9yIGV4YW1wbGUgdGhlIHByZXZpb3VzIGV4YW1wbGUgdHJpZXMgdG8gY3JlYXRlIGFuCmBpbXBsIFRyYWl0YCB0eXBlIGBUYCB0aGF0IGlzIGVxdWFsIHRvIGBbVCwgVF1gLgoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8HigMAAACKA/MIzAYA85wBJgEAAJANAAIGAJENAQAEAMQDDgAAA48NAAQAxAMOAAAAjw0CBQEC2QEBAQDzCAABkA0ABADEAw4AAAKPDQABBACvAyQAAAOODQAEAK8DJAAAAI4NAQEA8wgAAssGALADEgAAAgIFRTA3MjAAAR8FAAAABfMIBACvAyQAAACODQEBAfcIAAGPDQDOBgCinQEmAQAAlQ0AAALOBgCinQEmAQACAqwFVGhlIGBvcHRpbWl6ZWAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzIyCiMhW2ZlYXR1cmUob3B0aW1pemVfYXR0cmlidXRlKV0KCiNbb3B0aW1pemUoc29tZXRoaW5nKV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmBgYAoKVGhlIGAjW29wdGltaXplXWAgYXR0cmlidXRlIHNob3VsZCBiZSB1c2VkIGFzIGZvbGxvd3M6CgotIGAjW29wdGltaXplKHNpemUpXWAgLS0gaW5zdHJ1Y3RzIHRoZSBvcHRpbWl6YXRpb24gcGlwZWxpbmUgdG8gZ2VuZXJhdGUgY29kZQogIHRoYXQncyBzbWFsbGVyIHJhdGhlciB0aGFuIGZhc3RlcgoKLSBgI1tvcHRpbWl6ZShzcGVlZCldYCAtLSBpbnN0cnVjdHMgdGhlIG9wdGltaXphdGlvbiBwaXBlbGluZSB0byBnZW5lcmF0ZSBjb2RlCiAgdGhhdCdzIGZhc3RlciByYXRoZXIgdGhhbiBzbWFsbGVyCgpGb3IgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKG9wdGltaXplX2F0dHJpYnV0ZSldCgojW29wdGltaXplKHNpemUpXQpwdWIgZm4gc29tZXRoaW5nKCkge30KYGBgCgpTZWUgW1JGQyAyNDEyXSBmb3IgbW9yZSBkZXRhaWxzLgoKW1JGQyAyNDEyXTogaHR0cHM6Ly9ydXN0LWxhbmcuZ2l0aHViLmlvL3JmY3MvMjQxMi1vcHRpbWl6ZS1hdHRyLmh0bWwKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////A6wFAAAArAXzCM4GAKKdASYBAACUDQACBgCVDQEABADEAw4AAAOTDQAEAMQDDgAAAJMNAgUBAtkBAQEA8wgAAZQNAAQAxAMOAAACkw0AAQQArwMkAAADkg0ABACvAyQAAACSDQEBAPMIAALNBgCwAxIAAAICBUUwNzIyAAEfBQAAAAXzCAQArwMkAAAAkg0BAQH3CAABkw0A0AYA0Z0BJgEAAJkNAAAC0AYA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LCB0aGUgZm9sbG93aW5nIGVycm9yIG9jY3Vycy4KCmBgYGNvbXBpbGVfZmFpbCxFMDcyNgp1c2UgZnV0dXJlczo6ZXhlY3V0b3I6OmJsb2NrX29uOwpzdHJ1Y3QgQ29udGVudDwnYT4gewogICAgdGl0bGU6ICYnYSBzdHIsCiAgICBib2R5OiAmJ2Egc3RyLAp9CmFzeW5jIGZuIGNyZWF0ZShjb250ZW50OiBDb250ZW50KSB7IC8vIGVycm9yOiBpbXBsaWNpdCBlbGlkZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlmZXRpbWUgbm90IGFsbG93ZWQgaGVyZQogICAgcHJpbnRsbiEoInRpdGxlOiB7fSIsIGNvbnRlbnQudGl0bGUpOwogICAgcHJpbnRsbiEoImJvZHk6IHt9IiwgY29udGVudC5ib2R5KTsKfQpsZXQgY29udGVudCA9IENvbnRlbnQgeyB0aXRsZTogIlJ1c3QiLCBib2R5OiAiaXMgZ3JlYXQhIiB9OwpsZXQgZnV0dXJlID0gY3JlYXRlKGNvbnRlbnQpOwpibG9ja19vbihmdXR1cmUpOwpgYGAKClNwZWNpZnkgZGVzaXJlZCBsaWZldGltZSBvZiBwYXJhbWV0ZXIgYGNvbnRlbnRgIG9yIGluZGljYXRlIHRoZSBhbm9ueW1vdXMKbGlmZXRpbWUgbGlrZSBgY29udGVudDogQ29udGVudDwnXz5gLiBUaGUgYW5vbnltb3VzIGxpZmV0aW1lIHRlbGxzIHRoZSBSdXN0CmNvbXBpbGVyIHRoYXQgYGNvbnRlbnRgIGlzIG9ubHkgbmVlZGVkIHVudGlsIGNyZWF0ZSBmdW5jdGlvbiBpcyBkb25lIHdpdGgKaXQncyBleGVjdXRpb24uCgpUaGUgYGltcGxpY2l0IGVsaXNpb25gIG1lYW5pbmcgdGhlIG9taXNzaW9uIG9mIHN1Z2dlc3RlZCBsaWZldGltZSB0aGF0IGlzCmBwdWIgYXN5bmMgZm4gY3JlYXRlPCdhPihjb250ZW50OiBDb250ZW50PCdhPikge31gIGlzIG5vdCBhbGxvd2VkIGhlcmUgYXMKbGlmZXRpbWUgb2YgdGhlIGBjb250ZW50YCBjYW4gZGlmZmVyIGZyb20gY3VycmVudCBjb250ZXh0OgoKYGBgaWdub3JlIChuZWVkcyBmdXR1cmVzIGRlcGVuZGVuY3kpCmFzeW5jIGZuIGNyZWF0ZShjb250ZW50OiBDb250ZW50PCdfPikgeyAvLyBvayEKICAgIHByaW50bG4hKCJ0aXRsZToge30iLCBjb250ZW50LnRpdGxlKTsKICAgIHByaW50bG4hKCJib2R5OiB7fSIsIGNvbnRlbnQuYm9keSk7Cn0KYGBgCgpLbm93IG1vcmUgYWJvdXQgbGlmZXRpbWUgZWxpc2lvbiBpbiB0aGlzIFtjaGFwdGVyXVtsaWZldGltZS1lbGlzaW9uXSBhbmQgYQpjaGFwdGVyIG9uIGxpZmV0aW1lcyBjYW4gYmUgZm91bmQgW2hlcmVdW2xpZmV0aW1lc10uCgpbbGlmZXRpbWUtZWxpc2lvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDEwLTAzLWxpZmV0aW1lLXN5bnRheC5odG1sI2xpZmV0aW1lLWVsaXNpb24KW2xpZmV0aW1lc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcnVzdC1ieS1leGFtcGxlL3Njb3BlL2xpZmV0aW1lLmh0bWwKABv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P74NAAAAvg3zCNQGAK+eASYBAACgDQACBgChDQEABADEAw4AAAOfDQAEAMQDDgAAAJ8NAgUBAtkBAQEA8wgAAaANAAQAxAMOAAACnw0AAQQArwMkAAADng0ABACvAyQAAACeDQEBAPMIAALTBgCwAxIAAAICBUUwNzI2AAEfBQAAAAXzCAQArwMkAAAAng0BAQH3CAABnw0A1gYA3p4BJgEAAKUNAAAC1gYA3p4BJgEAAgLqA0EgYHlpZWxkYCBjbGF1c2Ugd2FzIHVzZWQgaW4gYW4gYGFzeW5jYCBjb250ZXh0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyNyxlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgYXN5bmMgewogICAgICAgICAgICB5aWVsZDsKICAgICAgICB9CiAgICB9Owp9CmBgYAoKSGVyZSwgdGhlIGB5aWVsZGAga2V5d29yZCBpcyB1c2VkIGluIGFuIGBhc3luY2AgYmxvY2ssCndoaWNoIGlzIG5vdCB5ZXQgc3VwcG9ydGVkLgoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIG1vdmUgYHlpZWxkYCBvdXQgb2YgdGhlIGBhc3luY2AgYmxvY2s6CgpgYGBlZGl0aW9uMjAxOAojIVtmZWF0dXJlKGdlbmVyYXRvcnMpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8fCB7CiAgICAgICAgeWllbGQ7CiAgICB9Owp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qAwAAAOoD8wjWBgDengEmAQAApA0AAgYApQ0BAAQAxAMOAAADow0ABADEAw4AAACjDQIFAQLZAQEBAPMIAAGkDQAEAMQDDgAAAqMNAAEEAK8DJAAAA6INAAQArwMkAAAAog0BAQDzCAAC1QYAsAMSAAACAgVFMDcyNwABHwUAAAAF8wgEAK8DJAAAAKINAQEB9wgAAaMNANgGAI2fASYBAACpDQAAAtgGAI2fASYBAAIC/g5bYGF3YWl0YF0gaGFzIGJlZW4gdXNlZCBvdXRzaWRlIFtgYXN5bmNgXSBmdW5jdGlvbiBvciBbYGFzeW5jYF0gYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzI4CiMgdXNlIHN0ZDo6cGluOjpQaW47CiMgdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CiMgdXNlIHN0ZDo6dGFzazo6e0NvbnRleHQsIFBvbGx9OwojCiMgc3RydWN0IFdha2VPbmNlVGhlbkNvbXBsZXRlKGJvb2wpOwojCiMgZm4gd2FrZV9hbmRfeWllbGRfb25jZSgpIC0+IFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgV2FrZU9uY2VUaGVuQ29tcGxldGUoZmFsc2UpCiMgfQojCiMgaW1wbCBGdXR1cmUgZm9yIFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgdHlwZSBPdXRwdXQgPSAoKTsKIyAgICAgZm4gcG9sbChtdXQgc2VsZjogUGluPCZtdXQgU2VsZj4sIGN4OiAmbXV0IENvbnRleHQ8J18+KSAtPiBQb2xsPCgpPiB7CiMgICAgICAgICBpZiBzZWxmLjAgewojICAgICAgICAgICAgIFBvbGw6OlJlYWR5KCgpKQojICAgICAgICAgfSBlbHNlIHsKIyAgICAgICAgICAgICBjeC53YWtlcigpLndha2VfYnlfcmVmKCk7CiMgICAgICAgICAgICAgc2VsZi4wID0gdHJ1ZTsKIyAgICAgICAgICAgICBQb2xsOjpQZW5kaW5nCiMgICAgICAgICB9CiMgICAgIH0KIyB9CiMKZm4gZm9vKCkgewogICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0IC8vIGBhd2FpdGAgaXMgdXNlZCBvdXRzaWRlIGBhc3luY2AgY29udGV4dAp9CmBgYAoKW2Bhd2FpdGBdIGlzIHVzZWQgdG8gc3VzcGVuZCB0aGUgY3VycmVudCBjb21wdXRhdGlvbiB1bnRpbCB0aGUgZ2l2ZW4KZnV0dXJlIGlzIHJlYWR5IHRvIHByb2R1Y2UgYSB2YWx1ZS4gU28gaXQgaXMgbGVnYWwgb25seSB3aXRoaW4KYW4gW2Bhc3luY2BdIGNvbnRleHQsIGxpa2UgYW4gYGFzeW5jYCBmdW5jdGlvbiBvciBhbiBgYXN5bmNgIGJsb2NrLgoKYGBgZWRpdGlvbjIwMTgKIyB1c2Ugc3RkOjpwaW46OlBpbjsKIyB1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKIyB1c2Ugc3RkOjp0YXNrOjp7Q29udGV4dCwgUG9sbH07CiMKIyBzdHJ1Y3QgV2FrZU9uY2VUaGVuQ29tcGxldGUoYm9vbCk7CiMKIyBmbiB3YWtlX2FuZF95aWVsZF9vbmNlKCkgLT4gV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICBXYWtlT25jZVRoZW5Db21wbGV0ZShmYWxzZSkKIyB9CiMKIyBpbXBsIEZ1dHVyZSBmb3IgV2FrZU9uY2VUaGVuQ29tcGxldGUgewojICAgICB0eXBlIE91dHB1dCA9ICgpOwojICAgICBmbiBwb2xsKG11dCBzZWxmOiBQaW48Jm11dCBTZWxmPiwgY3g6ICZtdXQgQ29udGV4dDwnXz4pIC0+IFBvbGw8KCk+IHsKIyAgICAgICAgIGlmIHNlbGYuMCB7CiMgICAgICAgICAgICAgUG9sbDo6UmVhZHkoKCkpCiMgICAgICAgICB9IGVsc2UgewojICAgICAgICAgICAgIGN4Lndha2VyKCkud2FrZV9ieV9yZWYoKTsKIyAgICAgICAgICAgICBzZWxmLjAgPSB0cnVlOwojICAgICAgICAgICAgIFBvbGw6OlBlbmRpbmcKIyAgICAgICAgIH0KIyAgICAgfQojIH0KIwphc3luYyBmbiBmb28oKSB7CiAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQgLy8gYGF3YWl0YCBpcyB1c2VkIHdpdGhpbiBgYXN5bmNgIGZ1bmN0aW9uCn0KCmZuIGJhcih4OiB1OCkgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gdTg+IHsKICAgIGFzeW5jIG1vdmUgewogICAgICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdDsgLy8gYGF3YWl0YCBpcyB1c2VkIHdpdGhpbiBgYXN5bmNgIGJsb2NrCiAgICAgICAgeAogICAgfQp9CmBgYAoKW2Bhc3luY2BdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmFzeW5jLmh0bWwKW2Bhd2FpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmF3YWl0Lmh0bWwKAB7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////P/4OAAAA/g7zCNgGAI2fASYBAACoDQACBgCpDQEABADEAw4AAAOnDQAEAMQDDgAAAKcNAgUBAtkBAQEA8wgAAagNAAQAxAMOAAACpw0AAQQArwMkAAADpg0ABACvAyQAAACmDQEBAPMIAALXBgCwAxIAAAICBUUwNzI4AAEfBQAAAAXzCAQArwMkAAAApg0BAQH3CAABpw0A2gYAvJ8BJgEAAK0NAAAC2gYAvJ8BJgEAAgKkCVN1cHBvcnQgZm9yIE5vbi1MZXhpY2FsIExpZmV0aW1lcyAoTkxMKSBoYXMgYmVlbiBpbmNsdWRlZCBpbiB0aGUgUnVzdCBjb21waWxlcgpzaW5jZSAxLjMxLCBhbmQgaGFzIGJlZW4gZW5hYmxlZCBvbiB0aGUgMjAxNSBlZGl0aW9uIHNpbmNlIDEuMzYuIFRoZSBuZXcgYm9ycm93CmNoZWNrZXIgZm9yIE5MTCB1bmNvdmVyZWQgc29tZSBidWdzIGluIHRoZSBvbGQgYm9ycm93IGNoZWNrZXIsIHdoaWNoIGluIHNvbWUKY2FzZXMgYWxsb3dlZCB1bnNvdW5kIGNvZGUgdG8gY29tcGlsZSwgcmVzdWx0aW5nIGluIG1lbW9yeSBzYWZldHkgaXNzdWVzLgoKIyMjIFdoYXQgZG8gSSBkbz8KCkNoYW5nZSB5b3VyIGNvZGUgc28gdGhlIHdhcm5pbmcgZG9lcyBubyBsb25nZXIgdHJpZ2dlci4gRm9yIGJhY2t3YXJkcwpjb21wYXRpYmlsaXR5LCB0aGlzIHVuc291bmQgY29kZSBtYXkgc3RpbGwgY29tcGlsZSAod2l0aCBhIHdhcm5pbmcpIHJpZ2h0IG5vdy4KSG93ZXZlciwgYXQgc29tZSBwb2ludCBpbiB0aGUgZnV0dXJlLCB0aGUgY29tcGlsZXIgd2lsbCBubyBsb25nZXIgYWNjZXB0IHRoaXMKY29kZSBhbmQgd2lsbCB0aHJvdyBhIGhhcmQgZXJyb3IuCgojIyMgU2hvdWxkbid0IHlvdSBmaXggdGhlIG9sZCBib3Jyb3cgY2hlY2tlcj8KClRoZSBvbGQgYm9ycm93IGNoZWNrZXIgaGFzIGtub3duIHNvdW5kbmVzcyBpc3N1ZXMgdGhhdCBhcmUgYmFzaWNhbGx5IGltcG9zc2libGUKdG8gZml4LiBUaGUgbmV3IE5MTC1iYXNlZCBib3Jyb3cgY2hlY2tlciBpcyB0aGUgZml4LgoKIyMjIENhbiBJIHR1cm4gdGhlc2Ugd2FybmluZ3MgaW50byBlcnJvcnMgYnkgZGVueWluZyBhIGxpbnQ/CgpOby4KCiMjIyBXaGVuIGFyZSB0aGVzZSB3YXJuaW5ncyBnb2luZyB0byB0dXJuIGludG8gZXJyb3JzPwoKTm8gZm9ybWFsIHRpbWVsaW5lIGZvciB0dXJuaW5nIHRoZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBoYXMgYmVlbiBzZXQuIFNlZQpbR2l0SHViIGlzc3VlIDU4NzgxXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzU4NzgxKSBmb3IgbW9yZQppbmZvcm1hdGlvbi4KCiMjIyBXaHkgZG8gSSBnZXQgdGhpcyBtZXNzYWdlIHdpdGggY29kZSB0aGF0IGRvZXNuJ3QgaW52b2x2ZSBib3Jyb3dpbmc/CgpUaGVyZSBhcmUgc29tZSBrbm93biBidWdzIHRoYXQgdHJpZ2dlciB0aGlzIG1lc3NhZ2UuCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////8BpAkAAACkCfMI2gYAvJ8BJgEAAKwNAAIGAK0NAQAEAMQDDgAAA6sNAAQAxAMOAAAAqw0CBQEC2QEBAQDzCAABrA0ABADEAw4AAAKrDQABBACvAyQAAAOqDQAEAK8DJAAAAKoNAQEA8wgAAtkGALADEgAAAgIFRTA3MjkAAR8FAAAABfMIBACvAyQAAACqDQEBAfcIAAGrDQDcBgDrnwEmAQAAsQ0AAALcBgDrnwEmAQACAo4GQW4gYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aCB3YXMgcGF0dGVybi1tYXRjaGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMApmbiBpc18xMjM8Y29uc3QgTjogdXNpemU+KHg6IFt1MzI7IE5dKSAtPiBib29sIHsKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gZXJyb3I6IGNhbm5vdCBwYXR0ZXJuLW1hdGNoIG9uIGFuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXJyYXkgd2l0aG91dCBhIGZpeGVkIGxlbmd0aAogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgaGF2ZSB0d28gc29sdXRpb25zOgogMS4gVXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGguCiAyLiBVc2UgYSBzbGljZS4KCkV4YW1wbGUgd2l0aCBhbiBhcnJheSB3aXRoIGEgZml4ZWQgbGVuZ3RoOgoKYGBgCmZuIGlzXzEyMyh4OiBbdTMyOyAzXSkgLT4gYm9vbCB7IC8vIFdlIHVzZSBhbiBhcnJheSB3aXRoIGEgZml4ZWQgc2l6ZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCgpFeGFtcGxlIHdpdGggYSBzbGljZToKCmBgYApmbiBpc18xMjMoeDogJlt1MzJdKSAtPiBib29sIHsgLy8gV2UgdXNlIGEgc2xpY2UKICAgIG1hdGNoIHggewogICAgICAgIFsxLCAyLCAuLl0gPT4gdHJ1ZSwgLy8gb2shCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af9/jgYAAACOBvMI3AYA658BJgEAALANAAIGALENAQAEAMQDDgAAA68NAAQAxAMOAAAArw0CBQEC2QEBAQDzCAABsA0ABADEAw4AAAKvDQABBACvAyQAAAOuDQAEAK8DJAAAAK4NAQEA8wgAAtsGALADEgAAAgIFRTA3MzAAAR8FAAAABfMIBACvAyQAAACuDQEBAfcIAAGvDQDeBgCaoAEmAQAAtQ0AAALeBgCaoAEmAQACAoIEQW4gZW51bSB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiBoaW50IGByZXByKHRyYW5zcGFyZW50KWAgaGFkIHplcm8gb3IgbW9yZSB0aGFuCm9uZSB2YXJpYW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzEKI1tyZXByKHRyYW5zcGFyZW50KV0KZW51bSBTdGF0dXMgeyAvLyBlcnJvcjogdHJhbnNwYXJlbnQgZW51bSBuZWVkcyBleGFjdGx5IG9uZSB2YXJpYW50LCBidXQgaGFzIDIKICAgIEVycm5vKHUzMiksCiAgICBPaywKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgZW51bXMgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZSBvbmUgb2YgdGhlaXIgdmFyaWFudHMgYXQKcnVuIHRpbWUsIHNhaWQgdmFyaWFudCBtdXN0IGJlIHVuaXF1ZWx5IGRldGVybWluZWQuIElmIHRoZXJlIGlzIG5vIHZhcmlhbnQsIG9yCmlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYW50cywgaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgZW51bSBzaG91bGQgYmUKcmVwcmVzZW50ZWQuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEDggQAAACCBPMI3gYAmqABJgEAALQNAAIGALUNAQAEAMQDDgAAA7MNAAQAxAMOAAAAsw0CBQEC2QEBAQDzCAABtA0ABADEAw4AAAKzDQABBACvAyQAAAOyDQAEAK8DJAAAALINAQEA8wgAAt0GALADEgAAAgIFRTA3MzEAAR8FAAAABfMIBACvAyQAAACyDQEBAfcIAAGzDQDgBgDJoAEmAQAAuQ0AAALgBgDJoAEmAQACAvsGQW4gYGVudW1gIHdpdGggYSBkaXNjcmltaW5hbnQgbXVzdCBzcGVjaWZ5IGEgYCNbcmVwcihpbnR0eXBlKV1gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMgplbnVtIEVudW0geyAvLyBlcnJvciEKICAgIFVuaXQgPSAxLAogICAgVHVwbGUoKSA9IDIsCiAgICBTdHJ1Y3R7fSA9IDMsCn0KIyBmbiBtYWluKCkge30KYGBgCgpBIGAjW3JlcHIoaW50dHlwZSldYCBtdXN0IGJlIHByb3ZpZGVkIG9uIGFuIGBlbnVtYCBpZiBpdCBoYXMgYSBub24tdW5pdAp2YXJpYW50IHdpdGggYSBkaXNjcmltaW5hbnQsIG9yIHdoZXJlIHRoZXJlIGFyZSBib3RoIHVuaXQgdmFyaWFudHMgd2l0aApkaXNjcmltaW5hbnRzIGFuZCBub24tdW5pdCB2YXJpYW50cy4gVGhpcyByZXN0cmljdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUKaXMgYSB3ZWxsLWRlZmluZWQgd2F5IHRvIGV4dHJhY3QgYSB2YXJpYW50J3MgZGlzY3JpbWluYW50IGZyb20gYSB2YWx1ZTsKZm9yIGluc3RhbmNlOgoKYGBgCiNbcmVwcih1OCldCmVudW0gRW51bSB7CiAgICBVbml0ID0gMywKICAgIFR1cGxlKHUxNikgPSAyLAogICAgU3RydWN0IHsKICAgICAgICBhOiB1OCwKICAgICAgICBiOiB1MTYsCiAgICB9ID0gMSwKfQoKZm4gZGlzY3JpbWluYW50KHYgOiAmRW51bSkgLT4gdTggewogICAgdW5zYWZlIHsgKih2IGFzICpjb25zdCBFbnVtIGFzICpjb25zdCB1OCkgfQp9CgpmbiBtYWluKCkgewogICAgYXNzZXJ0X2VxISgzLCBkaXNjcmltaW5hbnQoJkVudW06OlVuaXQpKTsKICAgIGFzc2VydF9lcSEoMiwgZGlzY3JpbWluYW50KCZFbnVtOjpUdXBsZSg1KSkpOwogICAgYXNzZXJ0X2VxISgxLCBkaXNjcmltaW5hbnQoJkVudW06OlN0cnVjdHthOiA3LCBiOiAxMX0pKTsKfQpgYGAKAA7///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8H+wYAAAD7BvMI4AYAyaABJgEAALgNAAIGALkNAQAEAMQDDgAAA7cNAAQAxAMOAAAAtw0CBQEC2QEBAQDzCAABuA0ABADEAw4AAAK3DQABBACvAyQAAAO2DQAEAK8DJAAAALYNAQEA8wgAAt8GALADEgAAAgIFRTA3MzIAAR8FAAAABfMIBACvAyQAAAC2DQEBAfcIAAG3DQDiBgD4oAEmAQAAvQ0AAALiBgD4oAEmAQACAuEHQW4gW2Bhc3luY2BdIGZ1bmN0aW9uIHVzZWQgcmVjdXJzaW9uIHdpdGhvdXQgYm94aW5nLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDczMwphc3luYyBmbiBmb28objogdXNpemUpIHsKICAgIGlmIG4gPiAwIHsKICAgICAgICBmb28obiAtIDEpLmF3YWl0OwogICAgfQp9CmBgYAoKVG8gcGVyZm9ybSBhc3luYyByZWN1cnNpb24sIHRoZSBgYXN5bmMgZm5gIG5lZWRzIHRvIGJlIGRlc3VnYXJlZCBzdWNoIHRoYXQgdGhlCmBGdXR1cmVgIGlzIGV4cGxpY2l0IGluIHRoZSByZXR1cm4gdHlwZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDcyMAp1c2Ugc3RkOjpmdXR1cmU6OkZ1dHVyZTsKZm4gZm9vX2Rlc3VnYXJlZChuOiB1c2l6ZSkgLT4gaW1wbCBGdXR1cmU8T3V0cHV0ID0gKCk+IHsKICAgIGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX2Rlc3VnYXJlZChuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfQp9CmBgYAoKRmluYWxseSwgdGhlIGZ1dHVyZSBpcyB3cmFwcGVkIGluIGEgcGlubmVkIGJveDoKCmBgYGVkaXRpb24yMDE4CnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwp1c2Ugc3RkOjpwaW46OlBpbjsKZm4gZm9vX3JlY3Vyc2l2ZShuOiB1c2l6ZSkgLT4gUGluPEJveDxkeW4gRnV0dXJlPE91dHB1dCA9ICgpPj4+IHsKICAgIEJveDo6cGluKGFzeW5jIG1vdmUgewogICAgICAgIGlmIG4gPiAwIHsKICAgICAgICAgICAgZm9vX3JlY3Vyc2l2ZShuIC0gMSkuYXdhaXQ7CiAgICAgICAgfQogICAgfSkKfQpgYGAKClRoZSBgQm94PC4uLj5gIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0IGlzIG9mIGtub3duIHNpemUsIGFuZCB0aGUgcGluIGlzCnJlcXVpcmVkIHRvIGtlZXAgaXQgaW4gdGhlIHNhbWUgcGxhY2UgaW4gbWVtb3J5LgoKW2Bhc3luY2BdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9rZXl3b3JkLmFzeW5jLmh0bWwKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EHAAAA4QfzCOIGAPigASYBAAC8DQACBgC9DQEABADEAw4AAAO7DQAEAMQDDgAAALsNAgUBAtkBAQEA8wgAAbwNAAQAxAMOAAACuw0AAQQArwMkAAADug0ABACvAyQAAAC6DQEBAPMIAALhBgCwAxIAAAICBUUwNzMzAAEfBQAAAAXzCAQArwMkAAAAug0BAQH3CAABuw0A5AYAp6EBJgEAAMENAAAC5AYAp6EBJgEAAgLUAkEgc3RhYmlsaXR5IGF0dHJpYnV0ZSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM0CiNbc3RhYmxlKGZlYXR1cmUgPSAiYSIsIHNpbmNlID0gImIiKV0gLy8gaW52YWxpZAojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiYiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gaW52YWxpZApmbiBmb28oKXt9CmBgYAoKVGhlc2UgYXR0cmlidXRlcyBhcmUgbWVhbnQgdG8gb25seSBiZSB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBhcmUKcmVqZWN0ZWQgaW4geW91ciBvd24gY3JhdGVzLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B//8/1AIAAADUAvMI5AYAp6EBJgEAAMANAAIGAMENAQAEAMQDDgAAA78NAAQAxAMOAAAAvw0CBQEC2QEBAQDzCAABwA0ABADEAw4AAAK/DQABBACvAyQAAAO+DQAEAK8DJAAAAL4NAQEA8wgAAuMGALADEgAAAgIFRTA3MzQAAR8FAAAABfMIBACvAyQAAAC+DQEBAfcIAAG/DQDmBgDWoQEmAQAAxQ0AAALmBgDWoQEmAQACAocCVHlwZSBwYXJhbWV0ZXIgZGVmYXVsdHMgY2Fubm90IHVzZSBgU2VsZmAgb24gc3RydWN0cywgZW51bXMsIG9yIHVuaW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzUKc3RydWN0IEZvbzxYID0gQm94PFNlbGY+PiB7CiAgICBmaWVsZDE6IE9wdGlvbjxYPiwKICAgIGZpZWxkMjogT3B0aW9uPFg+LAp9Ci8vIGVycm9yOiB0eXBlIHBhcmFtZXRlcnMgY2Fubm90IHVzZSBgU2VsZmAgaW4gdGhlaXIgZGVmYXVsdHMuCmBgYAoABf///////////wH///////////8B////////////Af///////////wF/hwIAAACHAvMI5gYA1qEBJgEAAMQNAAIGAMUNAQAEAMQDDgAAA8MNAAQAxAMOAAAAww0CBQEC2QEBAQDzCAABxA0ABADEAw4AAALDDQABBACvAyQAAAPCDQAEAK8DJAAAAMINAQEA8wgAAuUGALADEgAAAgIFRTA3MzUAAR8FAAAABfMIBACvAyQAAADCDQEBAfcIAAHDDQDoBgCFogEmAQAAyQ0AAALoBgCFogEmAQACAoUDYCNbdHJhY2tfY2FsbGVyXWAgYW5kIGAjW25ha2VkXWAgY2Fubm90IGJvdGggYmUgYXBwbGllZCB0byB0aGUgc2FtZSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzYKI1tuYWtlZF0KI1t0cmFja19jYWxsZXJdCmZuIGZvbygpIHt9CmBgYAoKVGhpcyBpcyBwcmltYXJpbHkgZHVlIHRvIEFCSSBpbmNvbXBhdGliaWxpdGllcyBiZXR3ZWVuIHRoZSB0d28gYXR0cmlidXRlcy4KU2VlIFtSRkMgMjA5MV0gZm9yIGRldGFpbHMgb24gdGhpcyBhbmQgb3RoZXIgbGltaXRhdGlvbnMuCgpbUkZDIDIwOTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8yMDkxLWlubGluZS1zZW1hbnRpYy5tZAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////AR+FAwAAAIUD8wjoBgCFogEmAQAAyA0AAgYAyQ0BAAQAxAMOAAADxw0ABADEAw4AAADHDQIFAQLZAQEBAPMIAAHIDQAEAMQDDgAAAscNAAEEAK8DJAAAA8YNAAQArwMkAAAAxg0BAQDzCAAC5wYAsAMSAAACAgVFMDczNgABHwUAAAAF8wgEAK8DJAAAAMYNAQEB9wgAAccNAOoGALSiASYBAADNDQAAAuoGALSiASYBAAIC1gJgI1t0cmFja19jYWxsZXJdYCByZXF1aXJlcyBmdW5jdGlvbnMgdG8gaGF2ZSB0aGUgYCJSdXN0ImAgQUJJIGZvciBpbXBsaWNpdGx5CnJlY2VpdmluZyBjYWxsZXIgbG9jYXRpb24uIFNlZSBbUkZDIDIwOTFdIGZvciBkZXRhaWxzIG9uIHRoaXMgYW5kIG90aGVyCnJlc3RyaWN0aW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzcKI1t0cmFja19jYWxsZXJdCmV4dGVybiAiQyIgZm4gZm9vKCkge30KYGBgCgpbUkZDIDIwOTFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8yMDkxLWlubGluZS1zZW1hbnRpYy5tZAoABv///////////wH///////////8B////////////Af///////////wH///////////8B////AdYCAAAA1gLzCOoGALSiASYBAADMDQACBgDNDQEABADEAw4AAAPLDQAEAMQDDgAAAMsNAgUBAtkBAQEA8wgAAcwNAAQAxAMOAAACyw0AAQQArwMkAAADyg0ABACvAyQAAADKDQEBAPMIAALpBgCwAxIAAAICBUUwNzM3AAEfBQAAAAXzCAQArwMkAAAAyg0BAQH3CAAByw0A7AYA46IBJgEAANENAAAC7AYA46IBJgEAAgLmAWAjW3RyYWNrX2NhbGxlcl1gIGNhbiBub3QgYmUgYXBwbGllZCBvbiBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM5CiNbdHJhY2tfY2FsbGVyXQpzdHJ1Y3QgQmFyIHsKICAgIGE6IHU4LAp9CmBgYAoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKAAT///////////8B////////////Af///////////wH//////wfmAQAAAOYB8wjsBgDjogEmAQAA0A0AAgYA0Q0BAAQAxAMOAAADzw0ABADEAw4AAADPDQIFAQLZAQEBAPMIAAHQDQAEAMQDDgAAAs8NAAEEAK8DJAAAA84NAAQArwMkAAAAzg0BAQDzCAAC6wYAsAMSAAACAgVFMDczOQABHwUAAAAF8wgEAK8DJAAAAM4NAQEB9wgAAc8NAO4GAJKjASYBAADVDQAAAu4GAJKjASYBAAICnAJBIGB1bmlvbmAgd2FzIGRlY2xhcmVkIHdpdGggZmllbGRzIHdpdGggZGVzdHJ1Y3RvcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQwCnVuaW9uIFRlc3QgewogICAgYTogQSwgLy8gZXJyb3IhCn0KCiNbZGVyaXZlKERlYnVnKV0Kc3RydWN0IEEoaTMyKTsKCmltcGwgRHJvcCBmb3IgQSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyBwcmludGxuISgiQSIpOyB9Cn0KYGBgCgpBIGB1bmlvbmAgY2Fubm90IGhhdmUgZmllbGRzIHdpdGggZGVzdHJ1Y3RvcnMuCgAF////////////Af///////////wH///////////8B////////////Af///3+cAgAAAJwC8wjuBgCSowEmAQAA1A0AAgYA1Q0BAAQAxAMOAAAD0w0ABADEAw4AAADTDQIFAQLZAQEBAPMIAAHUDQAEAMQDDgAAAtMNAAEEAK8DJAAAA9INAAQArwMkAAAA0g0BAQDzCAAC7QYAsAMSAAACAgVFMDc0MAABHwUAAAAF8wgEAK8DJAAAANINAQEB9wgAAdMNAPAGAMGjASYBAADZDQAAAvAGAMGjASYBAAICnQRBIG5vbi1zdHJ1Y3R1cmFsLW1hdGNoIHR5cGUgd2FzIHVzZWQgYXMgdGhlIHR5cGUgb2YgYSBjb25zdCBnZW5lcmljIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDEKIyFbZmVhdHVyZShhZHRfY29uc3RfcGFyYW1zKV0KCnN0cnVjdCBBOwoKc3RydWN0IEI8Y29uc3QgWDogQT47IC8vIGVycm9yIQpgYGAKCk9ubHkgc3RydWN0dXJhbC1tYXRjaCB0eXBlcyAodGhhdCBpcywgdHlwZXMgdGhhdCBkZXJpdmUgYFBhcnRpYWxFcWAgYW5kIGBFcWApCm1heSBiZSB1c2VkIGFzIHRoZSB0eXBlcyBvZiBjb25zdCBnZW5lcmljIHBhcmFtZXRlcnMuCgpUbyBmaXggdGhlIHByZXZpb3VzIGNvZGUgZXhhbXBsZSwgd2UgZGVyaXZlIGBQYXJ0aWFsRXFgIGFuZCBgRXFgOgoKYGBgCiMhW2ZlYXR1cmUoYWR0X2NvbnN0X3BhcmFtcyldCgojW2Rlcml2ZShQYXJ0aWFsRXEsIEVxKV0gLy8gV2UgZGVyaXZlIGJvdGggdHJhaXRzIGhlcmUuCnN0cnVjdCBBOwoKc3RydWN0IEI8Y29uc3QgWDogQT47IC8vIG9rIQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af////8BnQQAAACdBPMI8AYAwaMBJgEAANgNAAIGANkNAQAEAMQDDgAAA9cNAAQAxAMOAAAA1w0CBQEC2QEBAQDzCAAB2A0ABADEAw4AAALXDQABBACvAyQAAAPWDQAEAK8DJAAAANYNAQEA8wgAAu8GALADEgAAAgIFRTA3NDEAAR8FAAAABfMIBACvAyQAAADWDQEBAfcIAAHXDQDyBgDwowEmAQAA3Q0AAALyBgDwowEmAQACAt4EVmlzaWJpbGl0eSBpcyByZXN0cmljdGVkIHRvIGEgbW9kdWxlIHdoaWNoIGlzbid0IGFuIGFuY2VzdG9yIG9mIHRoZSBjdXJyZW50Cml0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQyLGVkaXRpb24yMDE4CnB1YiBtb2Qgc2VhIHt9CgpwdWIgKGluIGNyYXRlOjpzZWEpIHN0cnVjdCBTaGFyazsgLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgd2UgbmVlZCB0byBtb3ZlIHRoZSBgU2hhcmtgIHN0cnVjdCBpbnNpZGUgdGhlIGBzZWFgIG1vZHVsZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2Qgc2VhIHsKICAgIHB1YiAoaW4gY3JhdGU6OnNlYSkgc3RydWN0IFNoYXJrOyAvLyBvayEKfQoKZm4gbWFpbigpIHt9CmBgYAoKT2YgY291cnNlLCB5b3UgY2FuIGRvIGl0IGFzIGxvbmcgYXMgdGhlIG1vZHVsZSB5b3UncmUgcmVmZXJyaW5nIHRvIGlzIGFuCmFuY2VzdG9yOgoKYGBgZWRpdGlvbjIwMTgKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgbW9kIHNlYSB7CiAgICAgICAgcHViIChpbiBjcmF0ZTo6ZWFydGgpIHN0cnVjdCBTaGFyazsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////A94EAAAA3gTzCPIGAPCjASYBAADcDQACBgDdDQEABADEAw4AAAPbDQAEAMQDDgAAANsNAgUBAtkBAQEA8wgAAdwNAAQAxAMOAAAC2w0AAQQArwMkAAAD2g0ABACvAyQAAADaDQEBAPMIAALxBgCwAxIAAAICBUUwNzQyAAEfBQAAAAXzCAQArwMkAAAA2g0BAQH3CAAB2w0A9AYAn6QBJgEAAOENAAAC9AYAn6QBJgEAAgL0A1RoZSBDLXZhcmlhZGljIHR5cGUgYC4uLmAgaGFzIGJlZW4gbmVzdGVkIGluc2lkZSBhbm90aGVyIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQzCmZuIGZvbzIoeDogdTgsIHk6ICYuLi4pIHt9IC8vIGVycm9yIQpgYGAKCk9ubHkgZm9yZWlnbiBmdW5jdGlvbnMgY2FuIHVzZSB0aGUgQy12YXJpYWRpYyB0eXBlIChgLi4uYCkuIEluIHN1Y2ggZnVuY3Rpb25zLApgLi4uYCBtYXkgb25seSBvY2N1ciBub24tbmVzdGVkLiBUaGF0IGlzLCBgeTogJidhIC4uLmAgaXMgbm90IGFsbG93ZWQuCgpBIEMtdmFyaWFkaWMgdHlwZSBpcyB1c2VkIHRvIGdpdmUgYW4gdW5kZWZpbmVkIG51bWJlciBvZiBwYXJhbWV0ZXJzIHRvIGEgZ2l2ZW4KZnVuY3Rpb24gKGxpa2UgYHByaW50ZmAgaW4gQykuIFRoZSBlcXVpdmFsZW50IGluIFJ1c3Qgd291bGQgYmUgdG8gdXNlIG1hY3JvcwpkaXJlY3RseSAobGlrZSBgcHJpbnRsbiFgIGZvciBleGFtcGxlKS4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////wf0AwAAAPQD8wj0BgCfpAEmAQAA4A0AAgYA4Q0BAAQAxAMOAAAD3w0ABADEAw4AAADfDQIFAQLZAQEBAPMIAAHgDQAEAMQDDgAAAt8NAAEEAK8DJAAAA94NAAQArwMkAAAA3g0BAQDzCAAC8wYAsAMSAAACAgVFMDc0MwABHwUAAAAF8wgEAK8DJAAAAN4NAQEB9wgAAd8NAPYGAM6kASYBAADlDQAAAvYGAM6kASYBAAICwwNBbiB1bnN1cHBvcnRlZCBleHByZXNzaW9uIHdhcyB1c2VkIGluc2lkZSBhIGNvbnN0IGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNzQ0CmNvbnN0IF86IGkzMiA9IHsKICAgIGFzeW5jIHsgMCB9LmF3YWl0Cn07CmBgYAoKQXQgdGhlIG1vbWVudCwgYC5hd2FpdGAgaXMgZm9yYmlkZGVuIGluc2lkZSBhIGBjb25zdGAsIGBzdGF0aWNgLCBvciBgY29uc3QgZm5gLgoKVGhpcyBtYXkgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIGJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90CnlldCBjb21wbGV0ZS4gU2VlIHRoZSB0cmFja2luZyBpc3N1ZSBmb3IgW2Bhc3luY2BdIGluIGBjb25zdCBmbmAuCgpbYGFzeW5jYF06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNjk0MzEKAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB8MDAAAAwwPzCPYGAM6kASYBAADkDQACBgDlDQEABADEAw4AAAPjDQAEAMQDDgAAAOMNAgUBAtkBAQEA8wgAAeQNAAQAxAMOAAAC4w0AAQQArwMkAAAD4g0ABACvAyQAAADiDQEBAPMIAAL1BgCwAxIAAAICBUUwNzQ0AAEfBQAAAAXzCAQArwMkAAAA4g0BAQH3CAAB4w0A+AYA/aQBJgEAAOkNAAAC+AYA/aQBJgEAAgLqA1RoZSBhZGRyZXNzIG9mIHRlbXBvcmFyeSB2YWx1ZSB3YXMgdGFrZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ1CiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHB0ciA9ICZyYXcgY29uc3QgMjsgLy8gZXJyb3IhCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGAyYCBpcyBkZXN0cm95ZWQgcmlnaHQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIG1lYW5zIHRoYXQKYHB0cmAgbm93IHBvaW50cyB0byBhbiB1bmF2YWlsYWJsZSBsb2NhdGlvbi4KClRvIGF2b2lkIHRoaXMgZXJyb3IsIGZpcnN0IGJpbmQgdGhlIHRlbXBvcmFyeSB0byBhIG5hbWVkIGxvY2FsIHZhcmlhYmxlOgoKYGBgCiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHZhbCA9IDI7CiAgICBsZXQgcHRyID0gJnJhdyBjb25zdCB2YWw7IC8vIG9rIQp9CmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//////3/qAwAAAOoD8wj4BgD9pAEmAQAA6A0AAgYA6Q0BAAQAxAMOAAAD5w0ABADEAw4AAADnDQIFAQLZAQEBAPMIAAHoDQAEAMQDDgAAAucNAAEEAK8DJAAAA+YNAAQArwMkAAAA5g0BAQDzCAAC9wYAsAMSAAACAgVFMDc0NQABHwUAAAAF8wgEAK8DJAAAAOYNAQEB9wgAAecNAPoGAKylASYBAADtDQAAAvoGAKylASYBAAICiBlBbiB1bmJveGVkIHRyYWl0IG9iamVjdCB3YXMgdXNlZCBhcyBhIHJldHVybiB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDYKdHJhaXQgVCB7CiAgICBmbiBiYXIoJnNlbGYpOwp9CnN0cnVjdCBTKHVzaXplKTsKaW1wbCBUIGZvciBTIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKLy8gSGF2aW5nIHRoZSB0cmFpdCBgVGAgYXMgcmV0dXJuIHR5cGUgaXMgaW52YWxpZCBiZWNhdXNlCi8vIHVuYm94ZWQgdHJhaXQgb2JqZWN0cyBkbyBub3QgaGF2ZSBhIHN0YXRpY2FsbHkga25vd24gc2l6ZToKZm4gZm9vKCkgLT4gZHluIFQgeyAvLyBlcnJvciEKICAgIFMoNDIpCn0KYGBgCgpSZXR1cm4gdHlwZXMgY2Fubm90IGJlIGBkeW4gVHJhaXRgcyBhcyB0aGV5IG11c3QgYmUgYFNpemVkYC4KClRvIGF2b2lkIHRoZSBlcnJvciB0aGVyZSBhcmUgYSBjb3VwbGUgb2Ygb3B0aW9ucy4KCklmIHRoZXJlIGlzIGEgc2luZ2xlIHR5cGUgaW52b2x2ZWQsIHlvdSBjYW4gdXNlIFtgaW1wbCBUcmFpdGBdOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQovLyBUaGUgY29tcGlsZXIgd2lsbCBzZWxlY3QgYFModXNpemUpYCBhcyB0aGUgbWF0ZXJpYWxpemVkIHJldHVybiB0eXBlIG9mIHRoaXMKLy8gZnVuY3Rpb24sIGJ1dCBjYWxsZXJzIHdpbGwgb25seSBrbm93IHRoYXQgdGhlIHJldHVybiB0eXBlIGltcGxlbWVudHMgYFRgLgpmbiBmb28oKSAtPiBpbXBsIFQgeyAvLyBvayEKICAgIFMoNDIpCn0KYGBgCgpJZiB0aGVyZSBhcmUgbXVsdGlwbGUgdHlwZXMgaW52b2x2ZWQsIHRoZSBvbmx5IHdheSB5b3UgY2FyZSB0byBpbnRlcmFjdCB3aXRoCnRoZW0gaXMgdGhyb3VnaCB0aGUgdHJhaXQncyBpbnRlcmZhY2UsIGFuZCBoYXZpbmcgdG8gcmVseSBvbiBkeW5hbWljIGRpc3BhdGNoCmlzIGFjY2VwdGFibGUsIHRoZW4geW91IGNhbiB1c2UgW3RyYWl0IG9iamVjdHNdIHdpdGggYEJveGAsIG9yIG90aGVyIGNvbnRhaW5lcgp0eXBlcyBsaWtlIGBSY2Agb3IgYEFyY2A6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CnN0cnVjdCBPKCYnc3RhdGljIHN0cik7CmltcGwgVCBmb3IgTyB7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCi8vIFRoaXMgbm93IHJldHVybnMgYSAidHJhaXQgb2JqZWN0IiBhbmQgY2FsbGVycyBhcmUgb25seSBiZSBhYmxlIHRvIGFjY2VzcwovLyBhc3NvY2lhdGVkIGl0ZW1zIGZyb20gYFRgLgpmbiBmb28oeDogYm9vbCkgLT4gQm94PGR5biBUPiB7IC8vIG9rIQogICAgaWYgeCB7CiAgICAgICAgQm94OjpuZXcoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEJveDo6bmV3KE8oInZhbCIpKQogICAgfQp9CmBgYAoKRmluYWxseSwgaWYgeW91IHdpc2ggdG8gc3RpbGwgYmUgYWJsZSB0byBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGUsIHlvdSBjYW4KY3JlYXRlIGEgbmV3IGBlbnVtYCB3aXRoIGEgdmFyaWFudCBmb3IgZWFjaCB0eXBlOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KZW51bSBFIHsKICAgIFMoUyksCiAgICBPKE8pLAp9CgovLyBUaGUgY2FsbGVyIGNhbiBhY2Nlc3MgdGhlIG9yaWdpbmFsIHR5cGVzIGRpcmVjdGx5LCBidXQgaXQgbmVlZHMgdG8gbWF0Y2ggb24KLy8gdGhlIHJldHVybmVkIGBlbnVtIEVgLgpmbiBmb28oeDogYm9vbCkgLT4gRSB7CiAgICBpZiB4IHsKICAgICAgICBFOjpTKFMoNDIpKQogICAgfSBlbHNlIHsKICAgICAgICBFOjpPKE8oInZhbCIpKQogICAgfQp9CmBgYAoKWW91IGNhbiBldmVuIGltcGxlbWVudCB0aGUgYHRyYWl0YCBvbiB0aGUgcmV0dXJuZWQgYGVudW1gIHNvIHRoZSBjYWxsZXJzCipkb24ndCogaGF2ZSB0byBtYXRjaCBvbiB0aGUgcmV0dXJuZWQgdmFsdWUgdG8gaW52b2tlIHRoZSBhc3NvY2lhdGVkIGl0ZW1zOgoKYGBgCiMgdHJhaXQgVCB7CiMgICAgIGZuIGJhcigmc2VsZik7CiMgfQojIHN0cnVjdCBTKHVzaXplKTsKIyBpbXBsIFQgZm9yIFMgewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIHN0cnVjdCBPKCYnc3RhdGljIHN0cik7CiMgaW1wbCBUIGZvciBPIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0KIyBlbnVtIEUgewojICAgICBTKFMpLAojICAgICBPKE8pLAojIH0KaW1wbCBUIGZvciBFIHsKICAgIGZuIGJhcigmc2VsZikgewogICAgICAgIG1hdGNoIHNlbGYgewogICAgICAgICAgICBFOjpTKHMpID0+IHMuYmFyKCksCiAgICAgICAgICAgIEU6Ok8obykgPT4gby5iYXIoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpJZiB5b3UgZGVjaWRlIHRvIHVzZSB0cmFpdCBvYmplY3RzLCBiZSBhd2FyZSB0aGF0IHRoZXNlIHJlbHkgb24KW2R5bmFtaWMgZGlzcGF0Y2hdLCB3aGljaCBoYXMgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLCBhcyB0aGUgY29tcGlsZXIgbmVlZHMKdG8gZW1pdCBjb2RlIHRoYXQgd2lsbCBmaWd1cmUgb3V0IHdoaWNoIG1ldGhvZCB0byBjYWxsICphdCBydW50aW1lKiBpbnN0ZWFkIG9mCmR1cmluZyBjb21waWxhdGlvbi4gVXNpbmcgdHJhaXQgb2JqZWN0cyB3ZSBhcmUgdHJhZGluZyBmbGV4aWJpbGl0eSBmb3IKcGVyZm9ybWFuY2UuCgpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpbdHJhaXQgb2JqZWN0c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN1c2luZy10cmFpdC1vYmplY3RzLXRoYXQtYWxsb3ctZm9yLXZhbHVlcy1vZi1kaWZmZXJlbnQtdHlwZXMKW2R5bmFtaWMgZGlzcGF0Y2hdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxNy0wMi10cmFpdC1vYmplY3RzLmh0bWwjdHJhaXQtb2JqZWN0cy1wZXJmb3JtLWR5bmFtaWMtZGlzcGF0Y2gKADP///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af8BiBkAAACIGfMI+gYArKUBJgEAAOwNAAIGAO0NAQAEAMQDDgAAA+sNAAQAxAMOAAAA6w0CBQEC2QEBAQDzCAAB7A0ABADEAw4AAALrDQABBACvAyQAAAPqDQAEAK8DJAAAAOoNAQEA8wgAAvkGALADEgAAAgIFRTA3NDYAAR8FAAAABfMIBACvAyQAAADqDQEBAfcIAAHrDQD8BgDbpQEmAQAA8Q0AAAL8BgDbpQEmAQACAtkDR2VuZXJpYyBhcmd1bWVudHMgd2VyZSBub3QgcHJvdmlkZWQgaW4gdGhlIHNhbWUgb3JkZXIgYXMgdGhlIGNvcnJlc3BvbmRpbmcKZ2VuZXJpYyBwYXJhbWV0ZXJzIGFyZSBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDcKc3RydWN0IFM8J2EsIFQ+KCYnYSBUKTsKCnR5cGUgWCA9IFM8KCksICdzdGF0aWM+OyAvLyBlcnJvcjogdGhlIHR5cGUgYXJndW1lbnQgaXMgcHJvdmlkZWQgYmVmb3JlIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGlmZXRpbWUgYXJndW1lbnQKYGBgCgpUaGUgYXJndW1lbnQgb3JkZXIgc2hvdWxkIGJlIGNoYW5nZWQgdG8gbWF0Y2ggdGhlIHBhcmFtZXRlciBkZWNsYXJhdGlvbgpvcmRlciwgYXMgaW4gdGhlIGZvbGxvd2luZzoKCmBgYApzdHJ1Y3QgUzwnYSwgVD4oJidhIFQpOwoKdHlwZSBYID0gUzwnc3RhdGljLCAoKT47IC8vIG9rCmBgYAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QMAAADZA/MI/AYA26UBJgEAAPANAAIGAPENAQAEAMQDDgAAA+8NAAQAxAMOAAAA7w0CBQEC2QEBAQDzCAAB8A0ABADEAw4AAALvDQABBACvAyQAAAPuDQAEAK8DJAAAAO4NAQEA8wgAAvsGALADEgAAAgIFRTA3NDcAAR8FAAAABfMIBACvAyQAAADuDQEBAfcIAAHvDQD+BgCKpgEmAQAA9Q0AAAL+BgCKpgEmAQACAroDQSByYXcgc3RyaW5nIGlzbid0IGNvcnJlY3RseSB0ZXJtaW5hdGVkIGJlY2F1c2UgdGhlIHRyYWlsaW5nIGAjYCBjb3VudCBkb2Vzbid0Cm1hdGNoIGl0cyBsZWFkaW5nIGAjYCBjb3VudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDgKbGV0IGRvbHBoaW5zID0gciMjIkRvbHBoaW5zISIjOyAvLyBlcnJvciEKYGBgCgpUbyB0ZXJtaW5hdGUgYSByYXcgc3RyaW5nLCB5b3UgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIG51bWJlciBvZiBgI2AgYXQgdGhlIGVuZAphcyBhdCB0aGUgYmVnaW5uaW5nLiBFeGFtcGxlOgoKYGBgCmxldCBkb2xwaGlucyA9IHIjIkRvbHBoaW5zISIjOyAvLyBPbmUgYCNgIGF0IHRoZSBiZWdpbm5pbmcsIG9uZSBhdCB0aGUgZW5kIHNvCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbGwgZ29vZCEKYGBgCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8DugMAAAC6A/MI/gYAiqYBJgEAAPQNAAIGAPUNAQAEAMQDDgAAA/MNAAQAxAMOAAAA8w0CBQEC2QEBAQDzCAAB9A0ABADEAw4AAALzDQABBACvAyQAAAPyDQAEAK8DJAAAAPINAQEA8wgAAv0GALADEgAAAgIFRTA3NDgAAR8FAAAABfMIBACvAyQAAADyDQEBAfcIAAHzDQCABwC5pgEmAQAA+Q0AAAKABwC5pgEmAQACAsYEQW4gaXRlbSB3YXMgYWRkZWQgb24gYSBuZWdhdGl2ZSBpbXBsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0OQojICMhW2ZlYXR1cmUobmVnYXRpdmVfaW1wbHMpXQp0cmFpdCBNeVRyYWl0IHsKICAgIHR5cGUgRm9vOwp9CgppbXBsICFNeVRyYWl0IGZvciB1MzIgewogICAgdHlwZSBGb28gPSBpMzI7IC8vIGVycm9yIQp9CmBgYAoKTmVnYXRpdmUgaW1wbHMgYXJlIG5vdCBhbGxvd2VkIHRvIGhhdmUgYW55IGl0ZW1zLiBOZWdhdGl2ZSBpbXBscyBkZWNsYXJlIHRoYXQgYQp0cmFpdCBpcyAqKm5vdCoqIGltcGxlbWVudGVkIChhbmQgbmV2ZXIgd2lsbCBiZSkgYW5kIGhlbmNlIHRoZXJlIGlzIG5vIG5lZWQgdG8Kc3BlY2lmeSB0aGUgdmFsdWVzIGZvciB0cmFpdCBtZXRob2RzIG9yIG90aGVyIGl0ZW1zLgoKT25lIHdheSB0byBmaXggdGhpcyBpcyB0byByZW1vdmUgdGhlIGl0ZW1zIGluIG5lZ2F0aXZlIGltcGxzOgoKYGBgCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmltcGwgIU15VHJhaXQgZm9yIHUzMiB7fQpgYGAKAAr///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wE/xgQAAADGBPMIgAcAuaYBJgEAAPgNAAIGAPkNAQAEAMQDDgAAA/cNAAQAxAMOAAAA9w0CBQEC2QEBAQDzCAAB+A0ABADEAw4AAAL3DQABBACvAyQAAAP2DQAEAK8DJAAAAPYNAQEA8wgAAv8GALADEgAAAgIFRTA3NDkAAR8FAAAABfMIBACvAyQAAAD2DQEBAfcIAAH3DQCCBwDopgEmAQAA/Q0AAAKCBwDopgEmAQACAtQDQSBuZWdhdGl2ZSBpbXBsIHdhcyBtYWRlIGRlZmF1bHQgaW1wbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTAKIyAjIVtmZWF0dXJlKG5lZ2F0aXZlX2ltcGxzKV0KIyAjIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KdHJhaXQgTXlUcmFpdCB7CiAgICB0eXBlIEZvbzsKfQoKZGVmYXVsdCBpbXBsICFNeVRyYWl0IGZvciB1MzIge30gLy8gZXJyb3IhCiMgZm4gbWFpbigpIHt9CmBgYAoKTmVnYXRpdmUgaW1wbHMgY2Fubm90IGJlIGRlZmF1bHQgaW1wbHMuIEEgZGVmYXVsdCBpbXBsIHN1cHBsaWVzIGRlZmF1bHQgdmFsdWVzCmZvciB0aGUgaXRlbXMgd2l0aGluIHRvIGJlIHVzZWQgYnkgb3RoZXIgaW1wbHMsIHdoZXJlYXMgYSBuZWdhdGl2ZSBpbXBsIGRlY2xhcmVzCnRoYXQgdGhlcmUgYXJlIG5vIG90aGVyIGltcGxzLiBDb21iaW5pbmcgaXQgZG9lcyBub3QgbWFrZSBzZW5zZS4KAAj///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8/1AMAAADUA/MIggcA6KYBJgEAAPwNAAIGAP0NAQAEAMQDDgAAA/sNAAQAxAMOAAAA+w0CBQEC2QEBAQDzCAAB/A0ABADEAw4AAAL7DQABBACvAyQAAAP6DQAEAK8DJAAAAPoNAQEA8wgAAoEHALADEgAAAgIFRTA3NTAAAR8FAAAABfMIBACvAyQAAAD6DQEBAfcIAAH7DQCEBwCXpwEmAQAAgQ4AAAKEBwCXpwEmAQACAucCVGhlcmUgYXJlIGJvdGggYSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdHJhaXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzYW1lIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUxCnRyYWl0IE15VHJhaXQge30KaW1wbCBNeVRyYWl0IGZvciBpMzIgeyB9CmltcGwgIU15VHJhaXQgZm9yIGkzMiB7IH0gLy8gZXJyb3IhCmBgYAoKTmVnYXRpdmUgaW1wbGVtZW50YXRpb25zIGFyZSBhIHByb21pc2UgdGhhdCB0aGUgdHJhaXQgd2lsbCBuZXZlciBiZSBpbXBsZW1lbnRlZApmb3IgdGhlIGdpdmVuIHR5cGVzLiBUaGVyZWZvcmUsIGJvdGggY2Fubm90IGV4aXN0cyBhdCB0aGUgc2FtZSB0aW1lLgoABv///////////wH///////////8B////////////Af///////////wH///////////8B//////8P5wIAAADnAvMIhAcAl6cBJgEAAIAOAAIGAIEOAQAEAMQDDgAAA/8NAAQAxAMOAAAA/w0CBQEC2QEBAQDzCAABgA4ABADEAw4AAAL/DQABBACvAyQAAAP+DQAEAK8DJAAAAP4NAQEA8wgAAoMHALADEgAAAgIFRTA3NTEAAR8FAAAABfMIBACvAyQAAAD+DQEBAfcIAAH/DQCGBwDGpwEmAQAAhQ4AAAKGBwDGpwEmAQACAqYDVGhlIGVudHJ5IHBvaW50IG9mIHRoZSBwcm9ncmFtIHdhcyBtYXJrZWQgYXMgYGFzeW5jYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTIKYXN5bmMgZm4gbWFpbigpIC0+IFJlc3VsdDwoKSwgKCk+IHsgLy8gZXJyb3IhCiAgICBPaygoKSkKfQpgYGAKCmBmbiBtYWluKClgIG9yIHRoZSBzcGVjaWZpZWQgc3RhcnQgZnVuY3Rpb24gaXMgbm90IGFsbG93ZWQgdG8gYmUgYGFzeW5jYC4gTm90CmhhdmluZyBhIGNvcnJlY3QgYXN5bmMgcnVudGltZSBsaWJyYXJ5IHNldHVwIG1heSBjYXVzZSB0aGlzIGVycm9yLiBUbyBmaXggaXQsCmRlY2xhcmUgdGhlIGVudHJ5IHBvaW50IHdpdGhvdXQgYGFzeW5jYDoKCmBgYApmbiBtYWluKCkgLT4gUmVzdWx0PCgpLCAoKT4geyAvLyBvayEKICAgIE9rKCgpKQp9CmBgYAoAB////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B6YDAAAApgPzCIYHAManASYBAACEDgACBgCFDgEABADEAw4AAAODDgAEAMQDDgAAAIMOAgUBAtkBAQEA8wgAAYQOAAQAxAMOAAACgw4AAQQArwMkAAADgg4ABACvAyQAAACCDgEBAPMIAAKFBwCwAxIAAAICBUUwNzUyAAEfBQAAAAXzCAQArwMkAAAAgg4BAQH3CAABgw4AiAcA9acBJgEAAIkOAAACiAcA9acBJgEAAgKYBEFuIGlubmVyIGRvYyBjb21tZW50IHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTMKZm4gZm9vKCkge30KLy8hIGZvbwovLyBeIGVycm9yIQpmbiBtYWluKCkge30KYGBgCgpJbm5lciBkb2N1bWVudCBjYW4gb25seSBiZSB1c2VkIGJlZm9yZSBpdGVtcy4gRm9yIGV4YW1wbGU6CgpgYGAKLy8hIEEgd29ya2luZyBjb21tZW50IGFwcGxpZWQgdG8gdGhlIG1vZHVsZSEKZm4gZm9vKCkgewogICAgLy8hIEFub3RoZXIgd29ya2luZyBjb21tZW50IQp9CmZuIG1haW4oKSB7fQpgYGAKCkluIGNhc2UgeW91IHdhbnQgdG8gZG9jdW1lbnQgdGhlIGl0ZW0gZm9sbG93aW5nIHRoZSBkb2MgY29tbWVudCwgeW91IG1pZ2h0IHdhbnQKdG8gdXNlIG91dGVyIGRvYyBjb21tZW50OgoKYGBgCi8vLyBJIGFtIGFuIG91dGVyIGRvYyBjb21tZW50CiNbZG9jID0gIkkgYW0gYWxzbyBhbiBvdXRlciBkb2MgY29tbWVudCEiXQpmbiBmb28oKSB7CiAgICAvLyAuLi4KfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///weYBAAAAJgE8wiIBwD1pwEmAQAAiA4AAgYAiQ4BAAQAxAMOAAADhw4ABADEAw4AAACHDgIFAQLZAQEBAPMIAAGIDgAEAMQDDgAAAocOAAEEAK8DJAAAA4YOAAQArwMkAAAAhg4BAQDzCAAChwcAsAMSAAACAgVFMDc1MwABHwUAAAAF8wgEAK8DJAAAAIYOAQEB9wgAAYcOAIoHAKSoASYBAACNDgAAAooHAKSoASYBAAIC+wJBIG5vbi1BU0NJSSBpZGVudGlmaWVyIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU0Cgptb2QgxZnFs8WbxaU7IC8vIGVycm9yIQoKI1tub19tYW5nbGVdCmZuIMWZxbPFm8WlKCkge30gLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpOb24tQVNDSUkgY2FuIGJlIHVzZWQgYXMgbW9kdWxlIG5hbWVzIGlmIGl0IGlzIGlubGluZWQgb3IgaWYgYSBgI1twYXRoXWAKYXR0cmlidXRlIGlzIHNwZWNpZmllZC4gRm9yIGV4YW1wbGU6CgpgYGAKbW9kIMWZxbPFm8WlIHsgLy8gb2shCiAgICBjb25zdCBJU19HUkVBVDogYm9vbCA9IHRydWU7Cn0KCmZuIG1haW4oKSB7fQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af//////////B/sCAAAA+wLzCIoHAKSoASYBAACMDgACBgCNDgEABADEAw4AAAOLDgAEAMQDDgAAAIsOAgUBAtkBAQEA8wgAAYwOAAQAxAMOAAACiw4AAQQArwMkAAADig4ABACvAyQAAACKDgEBAPMIAAKJBwCwAxIAAAICBUUwNzU0AAEfBQAAAAXzCAQArwMkAAAAig4BAQH3CAABiw4AjAcA06gBJgEAAJEOAAACjAcA06gBJgEAAgLSBFRoZSBgZmZpX3B1cmVgIGF0dHJpYnV0ZSB3YXMgdXNlZCBvbiBhIG5vbi1mb3JlaWduIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NQojIVtmZWF0dXJlKGZmaV9wdXJlKV0KCiNbZmZpX3B1cmVdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KIyBmbiBtYWluKCkge30KYGBgCgpUaGUgYGZmaV9wdXJlYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgdXNlZCBvbiBmb3JlaWduIGZ1bmN0aW9ucyB3aGljaCBkbyBub3QgaGF2ZQpzaWRlIGVmZmVjdHMgb3IgaW5maW5pdGUgbG9vcHM6CgpgYGAKIyFbZmVhdHVyZShmZmlfcHVyZSldCgpleHRlcm4gIkMiIHsKICAgICNbZmZpX3B1cmVdIC8vIG9rIQogICAgcHViIGZuIHN0cmxlbihzOiAqY29uc3QgaTgpIC0+IGlzaXplOwp9CiMgZm4gbWFpbigpIHt9CmBgYAoKWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaXQgaW4gdGhlIFt1bnN0YWJsZSBSdXN0IEJvb2tdLgoKW3Vuc3RhYmxlIFJ1c3QgQm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktcHVyZS5odG1sCgAK////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//8P0gQAAADSBPMIjAcA06gBJgEAAJAOAAIGAJEOAQAEAMQDDgAAA48OAAQAxAMOAAAAjw4CBQEC2QEBAQDzCAABkA4ABADEAw4AAAKPDgABBACvAyQAAAOODgAEAK8DJAAAAI4OAQEA8wgAAosHALADEgAAAgIFRTA3NTUAAR8FAAAABfMIBACvAyQAAACODgEBAfcIAAGPDgCOBwCCqQEmAQAAlQ4AAAKOBwCCqQEmAQACAo8FVGhlIGBmZmlfY29uc3RgIGF0dHJpYnV0ZSB3YXMgdXNlZCBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGZvcmVpZ24gZnVuY3Rpb24KZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU2CiMhW2ZlYXR1cmUoZmZpX2NvbnN0KV0KCiNbZmZpX2NvbnN0XSAvLyBlcnJvciEKcHViIGZuIGZvbygpIHt9CiMgZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBmZmlfY29uc3RgIGF0dHJpYnV0ZSBjYW4gb25seSBiZSB1c2VkIG9uIGZvcmVpZ24gZnVuY3Rpb24gZGVjbGFyYXRpb25zCndoaWNoIGhhdmUgbm8gc2lkZSBlZmZlY3RzIGV4Y2VwdCBmb3IgdGhlaXIgcmV0dXJuIHZhbHVlOgoKYGBgCiMhW2ZlYXR1cmUoZmZpX2NvbnN0KV0KCmV4dGVybiAiQyIgewogICAgI1tmZmlfY29uc3RdIC8vIG9rIQogICAgcHViIGZuIHN0cmxlbihzOiAqY29uc3QgaTgpIC0+IGkzMjsKfQojIGZuIG1haW4oKSB7fQpgYGAKCllvdSBjYW4gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaXQgaW4gdGhlIFt1bnN0YWJsZSBSdXN0IEJvb2tdLgoKW3Vuc3RhYmxlIFJ1c3QgQm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1jb25zdC5odG1sCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//AY8FAAAAjwXzCI4HAIKpASYBAACUDgACBgCVDgEABADEAw4AAAOTDgAEAMQDDgAAAJMOAgUBAtkBAQEA8wgAAZQOAAQAxAMOAAACkw4AAQQArwMkAAADkg4ABACvAyQAAACSDgEBAPMIAAKNBwCwAxIAAAICBUUwNzU2AAEfBQAAAAXzCAQArwMkAAAAkg4BAQH3CAABkw4AkAcAsakBJgEAAJkOAAACkAcAsakBJgEAAgLlB0EgZnVuY3Rpb24gd2FzIGdpdmVuIGJvdGggdGhlIGBmZmlfY29uc3RgIGFuZCBgZmZpX3B1cmVgIGF0dHJpYnV0ZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU3CiMhW2ZlYXR1cmUoZmZpX2NvbnN0LCBmZmlfcHVyZSldCgpleHRlcm4gIkMiIHsKICAgICNbZmZpX2NvbnN0XQogICAgI1tmZmlfcHVyZV0gLy8gZXJyb3I6IGAjW2ZmaV9jb25zdF1gIGZ1bmN0aW9uIGNhbm5vdCBiZSBgI1tmZmlfcHVyZV1gCiAgICBwdWIgZm4gc3F1YXJlKG51bTogaTMyKSAtPiBpMzI7Cn0KYGBgCgpBcyBgZmZpX2NvbnN0YCBwcm92aWRlcyBzdHJvbmdlciBndWFyYW50ZWVzIHRoYW4gYGZmaV9wdXJlYCwgcmVtb3ZlIHRoZQpgZmZpX3B1cmVgIGF0dHJpYnV0ZToKCmBgYAojIVtmZWF0dXJlKGZmaV9jb25zdCldCgpleHRlcm4gIkMiIHsKICAgICNbZmZpX2NvbnN0XQogICAgcHViIGZuIHNxdWFyZShudW06IGkzMikgLT4gaTMyOwp9CmBgYAoKWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBgY29uc3RgIGFuZCBgcHVyZWAgaW4gdGhlIFtHQ0MgZG9jdW1lbnRhdGlvbgpvbiBDb21tb24gRnVuY3Rpb24gQXR0cmlidXRlc10uIFRoZSB1bnN0YWJsZSBSdXN0IEJvb2sgaGFzIG1vcmUgaW5mb3JtYXRpb24KYWJvdXQgW2BmZmlfY29uc3RgXSBhbmQgW2BmZmlfcHVyZWBdLgoKW0dDQyBkb2N1bWVudGF0aW9uIG9uIENvbW1vbiBGdW5jdGlvbiBBdHRyaWJ1dGVzXTogaHR0cHM6Ly9nY2MuZ251Lm9yZy9vbmxpbmVkb2NzL2djYy9Db21tb24tRnVuY3Rpb24tQXR0cmlidXRlcy5odG1sCltgZmZpX2NvbnN0YF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1jb25zdC5odG1sCltgZmZpX3B1cmVgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvZmZpLXB1cmUuaHRtbAoAEP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////A+UHAAAA5QfzCJAHALGpASYBAACYDgACBgCZDgEABADEAw4AAAOXDgAEAMQDDgAAAJcOAgUBAtkBAQEA8wgAAZgOAAQAxAMOAAAClw4AAQQArwMkAAADlg4ABACvAyQAAACWDgEBAPMIAAKPBwCwAxIAAAICBUUwNzU3AAEfBQAAAAXzCAQArwMkAAAAlg4BAQH3CAABlw4AkgcA4KkBJgEAAJ0OAAACkgcA4KkBJgEAAgLZAkEgbXVsdGktbGluZSAoZG9jLSljb21tZW50IGlzIHVudGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyogSSBhbSBub3QgdGVybWluYXRlZCEKYGBgCgpUaGUgc2FtZSBnb2VzIGZvciBkb2MgY29tbWVudHM6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTgKLyohIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKWW91IG5lZWQgdG8gZW5kIHlvdXIgbXVsdGktbGluZSBjb21tZW50IHdpdGggYCovYCBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvcjoKCmBgYAovKiBJIGFtIHRlcm1pbmF0ZWQhICovCi8qISBJIGFtIGFsc28gdGVybWluYXRlZCEgKi8KYGBgCgAG////////////Af///////////wH///////////8B////////////Af///////////wH///8P2QIAAADZAvMIkgcA4KkBJgEAAJwOAAIGAJ0OAQAEAMQDDgAAA5sOAAQAxAMOAAAAmw4CBQEC2QEBAQDzCAABnA4ABADEAw4AAAKbDgABBACvAyQAAAOaDgAEAK8DJAAAAJoOAQEA8wgAApEHALADEgAAAgIFRTA3NTgAAR8FAAAABfMIBACvAyQAAACaDgEBAfcIAAGbDgCUBwCPqgEmAQAAoQ4AAAKUBwCPqgEmAQACAocMIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKUmV0dXJuIHR5cGUgaW52b2x2aW5nIGEgdHJhaXQgZGlkIG5vdCByZXF1aXJlIGAnc3RhdGljYCBsaWZldGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBzdGQ6OmZtdDo6RGVidWc7CgpmbiBmb28oeDogJmkzMikgLT4gaW1wbCBEZWJ1ZyB7IC8vIGVycm9yIQogICAgeAp9CgpmbiBiYXIoeDogJmkzMikgLT4gQm94PGR5biBEZWJ1Zz4geyAvLyBlcnJvciEKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpBZGQgYCdzdGF0aWNgIHJlcXVpcmVtZW50IHRvIGZpeCB0aGVtOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vKHg6ICYnc3RhdGljIGkzMikgLT4gaW1wbCBEZWJ1ZyArICdzdGF0aWMgeyAvLyBvayEKICAgIHgKfQoKZm4gYmFyKHg6ICYnc3RhdGljIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdzdGF0aWM+IHsgLy8gb2shCiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKQm90aCBbYGR5biBUcmFpdGBdIGFuZCBbYGltcGwgVHJhaXRgXSBpbiByZXR1cm4gdHlwZXMgaGF2ZSBhbiBpbXBsaWNpdApgJ3N0YXRpY2AgcmVxdWlyZW1lbnQsIG1lYW5pbmcgdGhhdCB0aGUgdmFsdWUgaW1wbGVtZW50aW5nIHRoZW0gdGhhdCBpcyBiZWluZwpyZXR1cm5lZCBoYXMgdG8gYmUgZWl0aGVyIGEgYCdzdGF0aWNgIGJvcnJvdyBvciBhbiBvd25lZCB2YWx1ZS4KCkluIG9yZGVyIHRvIGNoYW5nZSB0aGUgcmVxdWlyZW1lbnQgZnJvbSBgJ3N0YXRpY2AgdG8gYmUgYSBsaWZldGltZSBkZXJpdmVkIGZyb20KaXRzIGFyZ3VtZW50cywgeW91IGNhbiBhZGQgYW4gZXhwbGljaXQgYm91bmQsIGVpdGhlciB0byBhbiBhbm9ueW1vdXMgbGlmZXRpbWUKYCdfYCBvciBzb21lIGFwcHJvcHJpYXRlIG5hbWVkIGxpZmV0aW1lLgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgKyAnXyB7CiAgICB4Cn0KZm4gYmFyKHg6ICZpMzIpIC0+IEJveDxkeW4gRGVidWcgKyAnXz4gewogICAgQm94OjpuZXcoeCkKfQpgYGAKClRoZXNlIGFyZSBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmcgZXhwbGljaXQgbGlmZXRpbWUgYW5ub3RhdGlvbnM6CgpgYGAKIyB1c2Ugc3RkOjpmbXQ6OkRlYnVnOwpmbiBmb288J2E+KHg6ICYnYSBpMzIpIC0+IGltcGwgRGVidWcgKyAnYSB7CiAgICB4Cn0KZm4gYmFyPCdhPih4OiAmJ2EgaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ2E+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpbYGR5biBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxNy0wMi10cmFpdC1vYmplY3RzLmh0bWwjdXNpbmctdHJhaXQtb2JqZWN0cy10aGF0LWFsbG93LWZvci12YWx1ZXMtb2YtZGlmZmVyZW50LXR5cGVzCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMi10cmFpdHMuaHRtbCNyZXR1cm5pbmctdHlwZXMtdGhhdC1pbXBsZW1lbnQtdHJhaXRzCgAZ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8Bf4cMAAAAhwzzCJQHAI+qASYBAACgDgACBgChDgEABADEAw4AAAOfDgAEAMQDDgAAAJ8OAgUBAtkBAQEA8wgAAaAOAAQAxAMOAAACnw4AAQQArwMkAAADng4ABACvAyQAAACeDgEBAPMIAAKTBwCwAxIAAAICBUUwNzU5AAEfBQAAAAXzCAQArwMkAAAAng4BAQH3CAABnw4AlgcAvqoBJgEAAKUOAAAClgcAvqoBJgEAAgLcBSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCmBhc3luYyBmbmAvYGltcGwgdHJhaXRgIHJldHVybiB0eXBlIGNhbm5vdCBjb250YWluIGEgcHJvamVjdGlvbgpvciBgU2VsZmAgdGhhdCByZWZlcmVuY2VzIGxpZmV0aW1lcyBmcm9tIGEgcGFyZW50IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOApzdHJ1Y3QgUzwnYT4oJidhIGkzMik7CgppbXBsPCdhPiBTPCdhPiB7CiAgICBhc3luYyBmbiBuZXcoaTogJidhIGkzMikgLT4gU2VsZiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIHNwZWxsIG91dCBgU2VsZmAgdG8gYFM8J2E+YDoKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTPCdhPiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldCBjb21wbGV0ZS4KU2VlIHRoZSBbaXNzdWUtNjE5NDldIGZvciB0aGlzIGxpbWl0YXRpb24uCgpbaXNzdWUtNjE5NDldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzYxOTQ5CgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///9/3AUAAADcBfMIlgcAvqoBJgEAAKQOAAIGAKUOAQAEAMQDDgAAA6MOAAQAxAMOAAAAow4CBQEC2QEBAQDzCAABpA4ABADEAw4AAAKjDgABBACvAyQAAAOiDgAEAK8DJAAAAKIOAQEA8wgAApUHALADEgAAAgIFRTA3NjAAAR8FAAAABfMIBACvAyQAAACiDgEBAfcIAAGjDgCYBwDtqgEmAQAAqQ4AAAKYBwDtqgEmAQACAo4ETXVsdGlwbGUgY2FuZGlkYXRlIGZpbGVzIHdlcmUgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKE11bHRpcGxlIHNvdXJjZSBmaWxlcyBhcmUgcmVxdWlyZWQgZm9yIGNvbXBpbGVfZmFpbC4pCi8vIGZpbGU6IGFtYmlndW91c19tb2R1bGUvbW9kLnJzCgpmbiBmb28oKSB7fQoKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS5ycwoKZm4gZm9vKCkge30KCi8vIGZpbGU6IGxpYi5ycwoKbW9kIGFtYmlndW91c19tb2R1bGU7IC8vIGVycm9yOiBmaWxlIGZvciBtb2R1bGUgYGFtYmlndW91c19tb2R1bGVgCiAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhdCBib3RoIGFtYmlndW91c19tb2R1bGUucnMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAvLyBhbWJpZ3VvdXNfbW9kdWxlLnJzL21vZC5ycwpgYGAKClBsZWFzZSByZW1vdmUgdGhpcyBhbWJpZ3VpdHkgYnkgZGVsZXRpbmcvcmVuYW1pbmcgb25lIG9mIHRoZSBjYW5kaWRhdGUgZmlsZXMuCgAJ////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/f44EAAAAjgTzCJgHAO2qASYBAACoDgACBgCpDgEABADEAw4AAAOnDgAEAMQDDgAAAKcOAgUBAtkBAQEA8wgAAagOAAQAxAMOAAACpw4AAQQArwMkAAADpg4ABACvAyQAAACmDgEBAPMIAAKXBwCwAxIAAAICBUUwNzYxAAEfBQAAAAXzCAQArwMkAAAApg4BAQH3CAABpw4AmgcAnKsBJgEAAK0OAAACmgcAnKsBJgEAAgLXAUEgY2hhcmFjdGVyIGxpdGVyYWwgd2Fzbid0IGVuZGVkIHdpdGggYSBxdW90ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjIKc3RhdGljIEM6IGNoYXIgPSAn4pePOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIHF1b3RlOgoKYGBgCnN0YXRpYyBDOiBjaGFyID0gJ+KXjyc7IC8vIG9rIQpgYGAKAAT///////////8B////////////Af///////////wH///8D1wEAAADXAfMImgcAnKsBJgEAAKwOAAIGAK0OAQAEAMQDDgAAA6sOAAQAxAMOAAAAqw4CBQEC2QEBAQDzCAABrA4ABADEAw4AAAKrDgABBACvAyQAAAOqDgAEAK8DJAAAAKoOAQEA8wgAApkHALADEgAAAgIFRTA3NjIAAR8FAAAABfMIBACvAyQAAACqDgEBAfcIAAGrDgCcBwDLqwEmAQAAsQ4AAAKcBwDLqwEmAQACArwBQSBieXRlIGNvbnN0YW50IHdhc24ndCBjb3JyZWN0bHkgZW5kZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzYzCmxldCBjID0gYidhOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIHF1b3RlOgoKYGBgCmxldCBjID0gYidhJzsgLy8gb2shCmBgYAoAA////////////wH///////////8B//////////8PvAEAAAC8AfMInAcAy6sBJgEAALAOAAIGALEOAQAEAMQDDgAAA68OAAQAxAMOAAAArw4CBQEC2QEBAQDzCAABsA4ABADEAw4AAAKvDgABBACvAyQAAAOuDgAEAK8DJAAAAK4OAQEA8wgAApsHALADEgAAAgIFRTA3NjMAAR8FAAAABfMIBACvAyQAAACuDgEBAfcIAAGvDgCeBwD6qwEmAQAAtQ4AAAKeBwD6qwEmAQACAooJQSBtdXRhYmxlIHJlZmVyZW5jZSB3YXMgdXNlZCBpbiBhIGNvbnN0YW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NAojIVtmZWF0dXJlKGNvbnN0X211dF9yZWZzKV0KCmZuIG1haW4oKSB7CiAgICBjb25zdCBPSF9OTzogJidzdGF0aWMgbXV0IHVzaXplID0gJm11dCAxOyAvLyBlcnJvciEKfQpgYGAKCk11dGFibGUgcmVmZXJlbmNlcyAoYCZtdXRgKSBjYW4gb25seSBiZSB1c2VkIGluIGNvbnN0YW50IGZ1bmN0aW9ucywgbm90IHN0YXRpY3MKb3IgY29uc3RhbnRzLiBUaGlzIGxpbWl0YXRpb24gZXhpc3RzIHRvIHByZXZlbnQgdGhlIGNyZWF0aW9uIG9mIGNvbnN0YW50cyB0aGF0CmhhdmUgYSBtdXRhYmxlIHJlZmVyZW5jZSBpbiB0aGVpciBmaW5hbCB2YWx1ZS4gSWYgeW91IGhhZCBhIGNvbnN0YW50IG9mCmAmbXV0IGkzMmAgdHlwZSwgeW91IGNvdWxkIG1vZGlmeSB0aGUgdmFsdWUgdGhyb3VnaCB0aGF0IHJlZmVyZW5jZSwgbWFraW5nIHRoZQpjb25zdGFudCBlc3NlbnRpYWxseSBtdXRhYmxlLgoKV2hpbGUgdGhlcmUgY291bGQgYmUgYSBtb3JlIGZpbmUtZ3JhaW5lZCBzY2hlbWUgaW4gdGhlIGZ1dHVyZSB0aGF0IGFsbG93cwptdXRhYmxlIHJlZmVyZW5jZXMgaWYgdGhleSBhcmUgbm90ICJsZWFrZWQiIHRvIHRoZSBmaW5hbCB2YWx1ZSwgYSBtb3JlCmNvbnNlcnZhdGl2ZSBhcHByb2FjaCB3YXMgY2hvc2VuIGZvciBub3cuIGBjb25zdCBmbmAgZG8gbm90IGhhdmUgdGhpcyBwcm9ibGVtLAphcyB0aGUgYm9ycm93IGNoZWNrZXIgd2lsbCBwcmV2ZW50IHRoZSBgY29uc3QgZm5gIGZyb20gcmV0dXJuaW5nIG5ldyBtdXRhYmxlCnJlZmVyZW5jZXMuCgpSZW1lbWJlcjogeW91IGNhbm5vdCB1c2UgYSBmdW5jdGlvbiBjYWxsIGluc2lkZSBhIGNvbnN0YW50IG9yIHN0YXRpYy4gSG93ZXZlciwKeW91IGNhbiB0b3RhbGx5IHVzZSBpdCBpbiBjb25zdGFudCBmdW5jdGlvbnM6CgpgYGAKIyFbZmVhdHVyZShjb25zdF9tdXRfcmVmcyldCgpjb25zdCBmbiBmb28oeDogdXNpemUpIC0+IHVzaXplIHsKICAgIGxldCBtdXQgeSA9IDE7CiAgICBsZXQgeiA9ICZtdXQgeTsKICAgICp6ICs9IHg7CiAgICB5Cn0KCmZuIG1haW4oKSB7CiAgICBjb25zdCBGT086IHVzaXplID0gZm9vKDEwKTsgLy8gb2shCn0KYGBgCgAT////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/weKCQAAAIoJ8wieBwD6qwEmAQAAtA4AAgYAtQ4BAAQAxAMOAAADsw4ABADEAw4AAACzDgIFAQLZAQEBAPMIAAG0DgAEAMQDDgAAArMOAAEEAK8DJAAAA7IOAAQArwMkAAAAsg4BAQDzCAACnQcAsAMSAAACAgVFMDc2NAABHwUAAAAF8wgEAK8DJAAAALIOAQEB9wgAAbMOAKAHAKmsASYBAAC5DgAAAqAHAKmsASYBAAIC4AFBIGRvdWJsZSBxdW90ZSBzdHJpbmcgKGAiYCkgd2FzIG5vdCB0ZXJtaW5hdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NQpsZXQgcyA9ICI7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgZG91YmxlIHF1b3RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZzoKCmBgYApsZXQgcyA9ICIiOyAvLyBvayEKYGBgCgAE////////////Af///////////wH///////////8B/////w/gAQAAAOAB8wigBwCprAEmAQAAuA4AAgYAuQ4BAAQAxAMOAAADtw4ABADEAw4AAAC3DgIFAQLZAQEBAPMIAAG4DgAEAMQDDgAAArcOAAEEAK8DJAAAA7YOAAQArwMkAAAAtg4BAQDzCAACnwcAsAMSAAACAgVFMDc2NQABHwUAAAAF8wgEAK8DJAAAALYOAQEB9wgAAbcOAKIHANisASYBAAC9DgAAAqIHANisASYBAAIC6AFBIGRvdWJsZSBxdW90ZSBieXRlIHN0cmluZyAoYGIiYCkgd2FzIG5vdCB0ZXJtaW5hdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NgpsZXQgcyA9IGIiOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgYWRkIHRoZSBtaXNzaW5nIGRvdWJsZSBxdW90ZSBhdCB0aGUgZW5kIG9mIHRoZSBzdHJpbmc6CgpgYGAKbGV0IHMgPSBiIiI7IC8vIG9rIQpgYGAKAAT///////////8B////////////Af///////////wH//////x/oAQAAAOgB8wiiBwDYrAEmAQAAvA4AAgYAvQ4BAAQAxAMOAAADuw4ABADEAw4AAAC7DgIFAQLZAQEBAPMIAAG8DgAEAMQDDgAAArsOAAEEAK8DJAAAA7oOAAQArwMkAAAAug4BAQDzCAACoQcAsAMSAAACAgVFMDc2NgABHwUAAAAF8wgEAK8DJAAAALoOAQEB9wgAAbsOAKQHAIetASYBAADBDgAAAqQHAIetASYBAAIC3QJBbiB1bnJlYWNoYWJsZSBsYWJlbCB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjcKJ2E6IGxvb3AgewogICAgfHwgewogICAgICAgIGxvb3AgeyBicmVhayAnYSB9IC8vIGVycm9yOiB1c2Ugb2YgdW5yZWFjaGFibGUgbGFiZWwgYCdhYAogICAgfTsKfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBsYWJlbCBpcyB3aXRoaW4gc2NvcGUuIExhYmVscyBhcmUgbm90IHJlYWNoYWJsZSB0aHJvdWdoCmZ1bmN0aW9ucywgY2xvc3VyZXMsIGFzeW5jIGJsb2NrcyBvciBtb2R1bGVzLiBFeGFtcGxlOgoKYGBgCidhOiBsb29wIHsKICAgIGJyZWFrICdhOyAvLyBvayEKfQpgYGAKAAb///////////8B////////////Af///////////wH///////////8B////////////Af////8B3QIAAADdAvMIpAcAh60BJgEAAMAOAAIGAMEOAQAEAMQDDgAAA78OAAQAxAMOAAAAvw4CBQEC2QEBAQDzCAABwA4ABADEAw4AAAK/DgABBACvAyQAAAO+DgAEAK8DJAAAAL4OAQEA8wgAAqMHALADEgAAAgIFRTA3NjcAAR8FAAAABfMIBACvAyQAAAC+DgEBAfcIAAG/DgCmBwC2rQEmAQAAxQ4AAAKmBwC2rQEmAQACAssBQSBudW1iZXIgaW4gYSBub24tZGVjaW1hbCBiYXNlIGhhcyBubyBkaWdpdHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY4CmxldCBzOiBpMzIgPSAwYjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkaWdpdHM6CgpgYGAKbGV0IHM6IGkzMiA9IDBiMTsgLy8gb2shCmBgYAoABP///////////wH///////////8B////////////Af8PywEAAADLAfMIpgcAtq0BJgEAAMQOAAIGAMUOAQAEAMQDDgAAA8MOAAQAxAMOAAAAww4CBQEC2QEBAQDzCAABxA4ABADEAw4AAALDDgABBACvAyQAAAPCDgAEAK8DJAAAAMIOAQEA8wgAAqUHALADEgAAAgIFRTA3NjgAAR8FAAAABfMIBACvAyQAAADCDgEBAfcIAAHDDgCoBwDlrQEmAQAAyQ4AAAKoBwDlrQEmAQACAtkFQSB0dXBsZSBzdHJ1Y3Qgb3IgdHVwbGUgdmFyaWFudCB3YXMgdXNlZCBpbiBhIHBhdHRlcm4gYXMgaWYgaXQgd2VyZSBhIHN0cnVjdCBvcgpzdHJ1Y3QgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjkKZW51bSBFIHsKICAgIEEoaTMyKSwKfQoKbGV0IGUgPSBFOjpBKDQyKTsKCm1hdGNoIGUgewogICAgRTo6QSB7IG51bWJlciB9ID0+IHsgLy8gZXJyb3IhCiAgICAgICAgcHJpbnRsbiEoInt9IiwgbnVtYmVyKTsKICAgIH0KfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIHVzZSB0aGUgdHVwbGUgcGF0dGVybjoKCmBgYAojIGVudW0gRSB7CiMgICAgIEEoaTMyKSwKIyB9CiMgbGV0IGUgPSBFOjpBKDQyKTsKbWF0Y2ggZSB7CiAgICBFOjpBKG51bWJlcikgPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgie30iLCBudW1iZXIpOwogICAgfQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgeW91IGNhbiBhbHNvIHVzZSB0aGUgc3RydWN0IHBhdHRlcm4gYnkgdXNpbmcgdGhlIGNvcnJlY3QgZmllbGQKbmFtZXMgYW5kIGJpbmRpbmcgdGhlbSB0byBuZXcgaWRlbnRpZmllcnM6CgpgYGAKIyBlbnVtIEUgewojICAgICBBKGkzMiksCiMgfQojIGxldCBlID0gRTo6QSg0Mik7Cm1hdGNoIGUgewogICAgRTo6QSB7IDA6IG51bWJlciB9ID0+IHsgLy8gb2shCiAgICAgICAgcHJpbnRsbiEoInt9IiwgbnVtYmVyKTsKICAgIH0KfQpgYGAKAAz///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///w/ZBQAAANkF8wioBwDlrQEmAQAAyA4AAgYAyQ4BAAQAxAMOAAADxw4ABADEAw4AAADHDgIFAQLZAQEBAPMIAAHIDgAEAMQDDgAAAscOAAEEAK8DJAAAA8YOAAQArwMkAAAAxg4BAQDzCAACpwcAsAMSAAACAgVFMDc2OQABHwUAAAAF8wgEAK8DJAAAAMYOAQEB9wgAAccOAKoHAJSuASYBAADNDgAAAqoHAJSuASYBAAIChQJUaGUgdHlwZSBvZiBhIGNvbnN0IHBhcmFtZXRlciByZWZlcmVuY2VzIG90aGVyIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzAKZm4gZm9vPFQsIGNvbnN0IE46IFQ+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBjb25zdCBwYXJhbWV0ZXI6CgpgYGAKZm4gZm9vPFQsIGNvbnN0IE46IHVzaXplPigpIHt9CmBgYAoABf///////////wH///////////8B////////////Af///////////wEfhQIAAACFAvMIqgcAlK4BJgEAAMwOAAIGAM0OAQAEAMQDDgAAA8sOAAQAxAMOAAAAyw4CBQEC2QEBAQDzCAABzA4ABADEAw4AAALLDgABBACvAyQAAAPKDgAEAK8DJAAAAMoOAQEA8wgAAqkHALADEgAAAgIFRTA3NzAAAR8FAAAABfMIBACvAyQAAADKDgEBAfcIAAHLDgCsBwDDrgEmAQAA0Q4AAAKsBwDDrgEmAQACApwEQSBub24tYCdzdGF0aWNgIGxpZmV0aW1lIHdhcyB1c2VkIGluIGEgY29uc3QgZ2VuZXJpYy4gVGhpcyBpcyBjdXJyZW50bHkgbm90CmFsbG93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzcxCiMhW2ZlYXR1cmUoYWR0X2NvbnN0X3BhcmFtcyldCgpmbiBmdW5jdGlvbl93aXRoX3N0cjwnYSwgY29uc3QgU1RSSU5HOiAmJ2Egc3RyPigpIHt9IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB0aGUgbGlmZXRpbWUgaW4gdGhlIGNvbnN0IGdlbmVyaWMgbmVlZCB0byBiZSBjaGFuZ2VkIHRvCmAnc3RhdGljYDoKCmBgYAojIVtmZWF0dXJlKGFkdF9jb25zdF9wYXJhbXMpXQoKZm4gZnVuY3Rpb25fd2l0aF9zdHI8Y29uc3QgU1RSSU5HOiAmJ3N0YXRpYyBzdHI+KCkge30gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZSBbR2l0SHViIGlzc3VlICM3NDA1Ml0uCgpbR2l0SHViIGlzc3VlICM3NDA1Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNzQwNTIKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///3+cBAAAAJwE8wisBwDDrgEmAQAA0A4AAgYA0Q4BAAQAxAMOAAADzw4ABADEAw4AAADPDgIFAQLZAQEBAPMIAAHQDgAEAMQDDgAAAs8OAAEEAK8DJAAAA84OAAQArwMkAAAAzg4BAQDzCAACqwcAsAMSAAACAgVFMDc3MQABHwUAAAAF8wgEAK8DJAAAAM4OAQEB9wgAAc8OAK4HAPKuASYBAADVDgAAAq4HAPKuASYBAAICgxQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIHRyYWl0IG9iamVjdCBoYXMgc29tZSBzcGVjaWZpYyBsaWZldGltZSBgJzFgLCBidXQgaXQgd2FzIHVzZWQgaW4gYSB3YXkgdGhhdApyZXF1aXJlcyBpdCB0byBoYXZlIGEgYCdzdGF0aWNgIGxpZmV0aW1lLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbAp0cmFpdCBCb29sZWFuTGlrZSB7fQp0cmFpdCBQZXJzb24ge30KCmltcGwgQm9vbGVhbkxpa2UgZm9yIGJvb2wge30KCmltcGwgZHluIFBlcnNvbiB7CiAgICBmbiBpc19jb29sKCZzZWxmKSAtPiBib29sIHsKICAgICAgICAvLyBoZXkgeW91LCB5b3UncmUgcHJldHR5IGNvb2wKICAgICAgICB0cnVlCiAgICB9Cn0KCmZuIGdldF9pc19jb29sPCdwPihwZXJzb246ICYncCBkeW4gUGVyc29uKSAtPiBpbXBsIEJvb2xlYW5MaWtlIHsKICAgIC8vIGVycm9yOiBgcGVyc29uYCBoYXMgYW4gYW5vbnltb3VzIGxpZmV0aW1lIGAncGAgYnV0IGNhbGxpbmcKICAgIC8vICAgICAgICBgcHJpbnRfY29vbF9mbmAgaW50cm9kdWNlcyBhbiBpbXBsaWNpdCBgJ3N0YXRpY2AgbGlmZXRpbWUKICAgIC8vICAgICAgICByZXF1aXJlbWVudAogICAgcGVyc29uLmlzX2Nvb2woKQp9CmBgYAoKVGhlIHRyYWl0IG9iamVjdCBgcGVyc29uYCBpbiB0aGUgZnVuY3Rpb24gYGdldF9pc19jb29sYCwgd2hpbGUgYWxyZWFkeSBiZWluZwpiZWhpbmQgYSByZWZlcmVuY2Ugd2l0aCBsaWZldGltZSBgJ3BgLCBhbHNvIGhhcyBpdCdzIG93biBpbXBsaWNpdCBsaWZldGltZSwKYCcyYC4KCkxpZmV0aW1lIGAnMmAgcmVwcmVzZW50cyB0aGUgZGF0YSB0aGUgdHJhaXQgb2JqZWN0IG1pZ2h0IGhvbGQgaW5zaWRlLCBmb3IKZXhhbXBsZToKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CgpzdHJ1Y3QgTXlTdHJ1Y3Q8J2E+KCYnYSBpMzIpOwoKaW1wbDwnYT4gTXlUcmFpdCBmb3IgTXlTdHJ1Y3Q8J2E+IHt9CmBgYAoKV2l0aCB0aGlzIHNjZW5hcmlvLCBpZiBhIHRyYWl0IG9iamVjdCBvZiBgZHluIE15VHJhaXQgKyAnMmAgd2FzIG1hZGUgZnJvbQpgTXlTdHJ1Y3Q8J2E+YCwgYCdhYCBtdXN0IGxpdmUgYXMgbG9uZywgaWYgbm90IGxvbmdlciB0aGFuIGAnMmAuIFRoaXMgYWxsb3dzIHRoZQp0cmFpdCBvYmplY3QncyBpbnRlcm5hbCBkYXRhIHRvIGJlIGFjY2Vzc2VkIHNhZmVseSBmcm9tIGFueSB0cmFpdCBtZXRob2RzLiBUaGlzCnJ1bGUgYWxzbyBnb2VzIGZvciBhbnkgbGlmZXRpbWUgYW55IHN0cnVjdCBtYWRlIGludG8gYSB0cmFpdCBvYmplY3QgbWF5IGhhdmUuCgpJbiB0aGUgaW1wbGVtZW50YXRpb24gZm9yIGBkeW4gUGVyc29uYCwgdGhlIGAnMmAgbGlmZXRpbWUgcmVwcmVzZW50aW5nIHRoZQppbnRlcm5hbCBkYXRhIHdhcyBvbWl0dGVkLCBtZWFuaW5nIHRoYXQgdGhlIGNvbXBpbGVyIGluZmVycmVkIHRoZSBsaWZldGltZQpgJ3N0YXRpY2AuIEFzIGEgcmVzdWx0LCB0aGUgaW1wbGVtZW50YXRpb24ncyBgaXNfY29vbGAgaXMgaW5mZXJyZWQgYnkgdGhlCmNvbXBpbGVyIHRvIGxvb2sgbGlrZSB0aGlzOgoKYGBgCiMgdHJhaXQgUGVyc29uIHt9CiMKIyBpbXBsIGR5biBQZXJzb24gewpmbiBpc19jb29sPCdhPihzZWxmOiAmJ2EgKGR5biBQZXJzb24gKyAnc3RhdGljKSkgLT4gYm9vbCB7dW5pbXBsZW1lbnRlZCEoKX0KIyB9CmBgYAoKV2hpbGUgdGhlIGBnZXRfaXNfY29vbGAgZnVuY3Rpb24gaXMgaW5mZXJyZWQgdG8gbG9vayBsaWtlIHRoaXM6CgpgYGAKIyB0cmFpdCBQZXJzb24ge30KIyB0cmFpdCBCb29sZWFuTGlrZSB7fQojCmZuIGdldF9pc19jb29sPCdwLCBSOiBCb29sZWFuTGlrZT4ocGVyc29uOiAmJ3AgKGR5biBQZXJzb24gKyAncCkpIC0+IFIgewogICAgdW5pbXBsZW1lbnRlZCEoKQp9CmBgYAoKV2hpY2ggYnJpbmdzIHVzIHRvIHRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtOyB0aGUgYXNzaWdubWVudCBvZiB0eXBlCmAmJ18gKGR5biBQZXJzb24gKyAnXylgIHRvIHR5cGUgYCYnXyAoZHluIFBlcnNvbiArICdzdGF0aWMpYCBpcyBpbXBvc3NpYmxlLgoKRml4aW5nIGl0IGlzIGFzIHNpbXBsZSBhcyBiZWluZyBnZW5lcmljIG92ZXIgbGlmZXRpbWUgYCcyYCwgYXMgdG8gcHJldmVudCB0aGUKY29tcGlsZXIgZnJvbSBpbmZlcnJpbmcgaXQgYXMgYCdzdGF0aWNgOgoKYGBgCiMgdHJhaXQgUGVyc29uIHt9CiMKaW1wbDwnZD4gZHluIFBlcnNvbiArICdkIHsvKiAuLi4gKi99CgovLyBUaGlzIHdvcmtzIHRvbywgYW5kIGlzIG1vcmUgZWxlZ2FudDoKLy9pbXBsIGR5biBQZXJzb24gKyAnXyB7LyogLi4uICovfQpgYGAKClNlZSB0aGUgW1J1c3QgUmVmZXJlbmNlIG9uIFRyYWl0IE9iamVjdCBMaWZldGltZSBCb3VuZHNdW3RyYWl0LW9iamVjdHNdIGZvcgptb3JlIGluZm9ybWF0aW9uIG9uIHRyYWl0IG9iamVjdCBsaWZldGltZXMuCgpbdHJhaXQtb2JqZWN0LWxpZmV0aW1lLWJvdW5kc106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGVzL3RyYWl0LW9iamVjdC5odG1sI3RyYWl0LW9iamVjdC1saWZldGltZS1ib3VuZHMKACn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8BB4MUAAAAgxTzCK4HAPKuASYBAADUDgACBgDVDgEABADEAw4AAAPTDgAEAMQDDgAAANMOAgUBAtkBAQEA8wgAAdQOAAQAxAMOAAAC0w4AAQQArwMkAAAD0g4ABACvAyQAAADSDgEBAPMIAAKtBwCwAxIAAAICBUUwNzcyAAEfBQAAAAXzCAQArwMkAAAA0g4BAQH3CAAB0w4AsAcAoa8BJgEAANkOAAACsAcAoa8BJgEAAgKTBkEgYnVpbHRpbi1tYWNybyB3YXMgZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzMKIyFbZmVhdHVyZShkZWNsX21hY3JvKV0KIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX2J1aWx0aW5fbWFjcm9dCnB1YiBtYWNybyB0ZXN0KCRpdGVtOml0ZW0pIHsKICAgIC8qIGNvbXBpbGVyIGJ1aWx0LWluICovCn0KCm1vZCBpbm5lciB7CiAgICAjW3J1c3RjX2J1aWx0aW5fbWFjcm9dCiAgICBwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAgICAgLyogY29tcGlsZXIgYnVpbHQtaW4gKi8KICAgIH0KfQpgYGAKClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9uOgoKYGBgCiMhW2ZlYXR1cmUoZGVjbF9tYWNybyldCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19idWlsdGluX21hY3JvXQpwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAvKiBjb21waWxlciBidWlsdC1pbiAqLwp9CmBgYAoKSW4gdmVyeSByYXJlIGVkZ2UgY2FzZXMsIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGxvYWRpbmcgYGNvcmVgIG9yIGBzdGRgIHR3aWNlLApvbmNlIHdpdGggYGNoZWNrYCBtZXRhZGF0YSBhbmQgb25jZSB3aXRoIGBidWlsZGAgbWV0YWRhdGEuCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgWyM3NTE3Nl0uCgpbIzc1MTc2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L3B1bGwvNzUxNzYjaXNzdWVjb21tZW50LTY4MzIzNDQ2OAoADf///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//H5MGAAAAkwbzCLAHAKGvASYBAADYDgACBgDZDgEABADEAw4AAAPXDgAEAMQDDgAAANcOAgUBAtkBAQEA8wgAAdgOAAQAxAMOAAAC1w4AAQQArwMkAAAD1g4ABACvAyQAAADWDgEBAPMIAAKvBwCwAxIAAAICBUUwNzczAAEfBQAAAAXzCAQArwMkAAAA1g4BAQH3CAAB1w4AsgcA0K8BJgEAAN0OAAACsgcA0K8BJgEAAgLhA2BkZXJpdmVgIHdhcyBhcHBsaWVkIG9uIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBzdHJ1Y3QsIGEgdW5pb24gb3IgYW4gZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzQKdHJhaXQgRm9vIHsKICAgICNbZGVyaXZlKENsb25lKV0gLy8gZXJyb3IhCiAgICB0eXBlIEJhcjsKfQpgYGAKCkFzIHNhaWQgYWJvdmUsIHRoZSBgZGVyaXZlYCBhdHRyaWJ1dGUgaXMgb25seSBhbGxvd2VkIG9uIHN0cnVjdHMsIHVuaW9ucyBvcgplbnVtczoKCmBgYAojW2Rlcml2ZShDbG9uZSldIC8vIG9rIQpzdHJ1Y3QgQmFyIHsKICAgIGZpZWxkOiB1MzIsCn0KYGBgCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBgZGVyaXZlYCBpbiB0aGUgW1J1c3QgQm9va10uCgpbUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAzLWRlcml2YWJsZS10cmFpdHMuaHRtbAoACP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/////H+EDAAAA4QPzCLIHANCvASYBAADcDgACBgDdDgEABADEAw4AAAPbDgAEAMQDDgAAANsOAgUBAtkBAQEA8wgAAdwOAAQAxAMOAAAC2w4AAQQArwMkAAAD2g4ABACvAyQAAADaDgEBAPMIAAKxBwCwAxIAAAICBUUwNzc0AAEfBQAAAAXzCAQArwMkAAAA2g4BAQH3CAAB2w4AtAcA/68BJgEAAOEOAAACtAcA/68BJgEAAgLCA2AjW2Ntc2Vfbm9uc2VjdXJlX2VudHJ5XWAgaXMgb25seSB2YWxpZCBmb3IgdGFyZ2V0cyB3aXRoIHRoZSBUcnVzdFpvbmUtTQpleHRlbnNpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc1CiMhW2ZlYXR1cmUoY21zZV9ub25zZWN1cmVfZW50cnkpXQoKI1tjbXNlX25vbnNlY3VyZV9lbnRyeV0KcHViIGV4dGVybiAiQyIgZm4gZW50cnlfZnVuY3Rpb24oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBjb21waWxlIHlvdXIgY29kZSBmb3IgYSBSdXN0IHRhcmdldCB0aGF0IHN1cHBvcnRzIHRoZQpUcnVzdFpvbmUtTSBleHRlbnNpb24uIFRoZSBjdXJyZW50IHBvc3NpYmxlIHRhcmdldHMgYXJlOgoqIGB0aHVtYnY4bS5tYWluLW5vbmUtZWFiaWAKKiBgdGh1bWJ2OG0ubWFpbi1ub25lLWVhYmloZmAKKiBgdGh1bWJ2OG0uYmFzZS1ub25lLWVhYmlgCgAI////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////AQPCAwAAAMID8wi0BwD/rwEmAQAA4A4AAgYA4Q4BAAQAxAMOAAAD3w4ABADEAw4AAADfDgIFAQLZAQEBAPMIAAHgDgAEAMQDDgAAAt8OAAEEAK8DJAAAA94OAAQArwMkAAAA3g4BAQDzCAACswcAsAMSAAACAgVFMDc3NQABHwUAAAAF8wgEAK8DJAAAAN4OAQEB9wgAAd8OALYHAK6wASYBAADlDgAAArYHAK6wASYBAAICrAJgI1tjbXNlX25vbnNlY3VyZV9lbnRyeV1gIGZ1bmN0aW9ucyByZXF1aXJlIGEgQyBBQkkKCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzYKIyFbZmVhdHVyZShjbXNlX25vbnNlY3VyZV9lbnRyeSldCgojW25vX21hbmdsZV0KI1tjbXNlX25vbnNlY3VyZV9lbnRyeV0KcHViIGZuIGVudHJ5X2Z1bmN0aW9uKGlucHV0OiBWZWM8dTMyPikge30KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZGVjbGFyZSB5b3VyIGVudHJ5IGZ1bmN0aW9uIHdpdGggYSBDIEFCSSwgdXNpbmcgYGV4dGVybiAiQyJgLgoABf///////////wH///////////8B////////////Af///////////wH///////8DrAIAAACsAvMItgcArrABJgEAAOQOAAIGAOUOAQAEAMQDDgAAA+MOAAQAxAMOAAAA4w4CBQEC2QEBAQDzCAAB5A4ABADEAw4AAALjDgABBACvAyQAAAPiDgAEAK8DJAAAAOIOAQEA8wgAArUHALADEgAAAgIFRTA3NzYAAR8FAAAABfMIBACvAyQAAADiDgEBAfcIAAHjDgC4BwDdsAEmAQAA6Q4AAAK4BwDdsAEmAQACApsDQSBsaXRlcmFsIHZhbHVlIHdhcyB1c2VkIGluc2lkZSBgI1tkZXJpdmVdYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzcKI1tkZXJpdmUoIkNsb25lIildIC8vIGVycm9yIQpzdHJ1Y3QgRm9vOwpgYGAKCk9ubHkgcGF0aHMgdG8gdHJhaXRzIGFyZSBhbGxvd2VkIGFzIGFyZ3VtZW50IGluc2lkZSBgI1tkZXJpdmVdYC4gWW91IGNhbiBmaW5kCm1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGAjW2Rlcml2ZV1gIGF0dHJpYnV0ZSBpbiB0aGUgW1J1c3QgQm9va10uCgoKYGBgCiNbZGVyaXZlKENsb25lKV0gLy8gb2shCnN0cnVjdCBGb287CmBgYAoKW1J1c3QgQm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wMy1kZXJpdmFibGUtdHJhaXRzLmh0bWwKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///8/mwMAAACbA/MIuAcA3bABJgEAAOgOAAIGAOkOAQAEAMQDDgAAA+cOAAQAxAMOAAAA5w4CBQEC2QEBAQDzCAAB6A4ABADEAw4AAALnDgABBACvAyQAAAPmDgAEAK8DJAAAAOYOAQEA8wgAArcHALADEgAAAgIFRTA3NzcAAR8FAAAABfMIBACvAyQAAADmDgEBAfcIAAHnDgC6BwCMsQEmAQAA7Q4AAAK6BwCMsQEmAQACAsgFVGhlIGBpbnN0cnVjdGlvbl9zZXRgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3OAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tpbnN0cnVjdGlvbl9zZXQoKV0gLy8gZXJyb3I6IGV4cGVjdGVkIG9uZSBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KZm4gbWFpbigpIHt9CmBgYAoKVGhlIHBhcmVudGhlc2l6ZWQgYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlIHJlcXVpcmVzIHRoZSBwYXJhbWV0ZXIgdG8gYmUKc3BlY2lmaWVkOgoKYGBgCiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2NmZ19hdHRyKHRhcmdldF9hcmNoPSJhcm0iLCBpbnN0cnVjdGlvbl9zZXQoYXJtOjphMzIpKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpvcjoKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6dDMyKSldCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlXVtpc2EtYXR0cmlidXRlXQpzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbaXNhLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AcgFAAAAyAXzCLoHAIyxASYBAADsDgACBgDtDgEABADEAw4AAAPrDgAEAMQDDgAAAOsOAgUBAtkBAQEA8wgAAewOAAQAxAMOAAAC6w4AAQQArwMkAAAD6g4ABACvAyQAAADqDgEBAPMIAAK5BwCwAxIAAAICBUUwNzc4AAEfBQAAAAXzCAQArwMkAAAA6g4BAQH3CAAB6w4AvAcAu7EBJgEAAPEOAAACvAcAu7EBJgEAAgLrBUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc5CiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2luc3RydWN0aW9uX3NldChpbnRlbDo6eDY0KV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzIGN1cnJlbnRseToKCiAqIGFybTo6YTMyCiAqIGFybTo6dDMyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcwplcnJvci4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlXVtpc2EtYXR0cmlidXRlXQpzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbaXNhLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sCgAM////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wUAAADrBfMIvAcAu7EBJgEAAPAOAAIGAPEOAQAEAMQDDgAAA+8OAAQAxAMOAAAA7w4CBQEC2QEBAQDzCAAB8A4ABADEAw4AAALvDgABBACvAyQAAAPuDgAEAK8DJAAAAO4OAQEA8wgAArsHALADEgAAAgIFRTA3NzkAAR8FAAAABfMIBACvAyQAAADuDgEBAfcIAAHvDgC+BwDqsQEmAQAA9Q4AAAK+BwDqsQEmAQACApIDQ2Fubm90IHVzZSBgZG9jKGlubGluZSlgIHdpdGggYW5vbnltb3VzIGltcG9ydHMKCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKCiNbZG9jKGlubGluZSldIC8vIGVycm9yOiBpbnZhbGlkIGRvYyBhcmd1bWVudApwdWIgdXNlIGZvbzo6Rm9vIGFzIF87CmBgYAoKQW5vbnltb3VzIGltcG9ydHMgYXJlIGFsd2F5cyByZW5kZXJlZCB3aXRoIGAjW2RvYyhub19pbmxpbmUpXWAuIFRvIGZpeCB0aGlzCmVycm9yLCByZW1vdmUgdGhlIGAjW2RvYyhpbmxpbmUpXWAgYXR0cmlidXRlLgoKRXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQoKcHViIHVzZSBmb286OkZvbyBhcyBfOwpgYGAKAAf///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH//w+SAwAAAJID8wi+BwDqsQEmAQAA9A4AAgYA9Q4BAAQAxAMOAAAD8w4ABADEAw4AAADzDgIFAQLZAQEBAPMIAAH0DgAEAMQDDgAAAvMOAAEEAK8DJAAAA/IOAAQArwMkAAAA8g4BAQDzCAACvQcAsAMSAAACAgVFMDc4MAABHwUAAAAF8wgEAK8DJAAAAPIOAQEB9wgAAfMOAMAHAJmyASYBAAD5DgAAAsAHAJmyASYBAAICuQJUaGUgYEMtY21zZS1ub25zZWN1cmUtY2FsbGAgQUJJIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbiBwb2ludGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODEKIyFbZmVhdHVyZShhYmlfY19jbXNlX25vbnNlY3VyZV9jYWxsKV0KCnB1YiBleHRlcm4gIkMtY21zZS1ub25zZWN1cmUtY2FsbCIgZm4gdGVzdCgpIHt9CmBgYAoKVGhlIGBDLWNtc2Utbm9uc2VjdXJlLWNhbGxgIEFCSSBzaG91bGQgYmUgdXNlZCBieSBjYXN0aW5nIGZ1bmN0aW9uIHBvaW50ZXJzIHRvCnNwZWNpZmljIGFkZHJlc3Nlcy4KAAX///////////8B////////////Af///////////wH///////////8B//////////8BuQIAAAC5AvMIwAcAmbIBJgEAAPgOAAIGAPkOAQAEAMQDDgAAA/cOAAQAxAMOAAAA9w4CBQEC2QEBAQDzCAAB+A4ABADEAw4AAAL3DgABBACvAyQAAAP2DgAEAK8DJAAAAPYOAQEA8wgAAr8HALADEgAAAgIFRTA3ODEAAR8FAAAABfMIBACvAyQAAAD2DgEBAfcIAAH3DgDCBwDIsgEmAQAA/Q4AAALCBwDIsgEmAQACApgFVHJhaXQgb2JqZWN0cyBtdXN0IGluY2x1ZGUgdGhlIGBkeW5gIGtleXdvcmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMjEsY29tcGlsZV9mYWlsLEUwNzgyCnRyYWl0IEZvbyB7fQpmbiB0ZXN0KGFyZzogQm94PEZvbz4pIHt9IC8vIGVycm9yIQpgYGAKClRyYWl0IG9iamVjdHMgYXJlIGEgd2F5IHRvIGNhbGwgbWV0aG9kcyBvbiB0eXBlcyB0aGF0IGFyZSBub3Qga25vd24gdW50aWwKcnVudGltZSBidXQgY29uZm9ybSB0byBzb21lIHRyYWl0LgoKVHJhaXQgb2JqZWN0cyBzaG91bGQgYmUgZm9ybWVkIHdpdGggYEJveDxkeW4gRm9vPmAsIGJ1dCBpbiB0aGUgY29kZSBhYm92ZQpgZHluYCBpcyBsZWZ0IG9mZi4KClRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIHNlZSB0aGF0IGBhcmdgIGlzIGEgdHJhaXQgb2JqZWN0IGFuZCBub3QgYQpzaW1wbHkgYSBoZWFwIGFsbG9jYXRlZCB0eXBlIGNhbGxlZCBgRm9vYC4KClRvIGZpeCB0aGlzIGlzc3VlLCBhZGQgYGR5bmAgYmVmb3JlIHRoZSB0cmFpdCBuYW1lLgoKYGBgZWRpdGlvbjIwMjEKdHJhaXQgRm9vIHt9CmZuIHRlc3QoYXJnOiBCb3g8ZHluIEZvbz4pIHt9IC8vIG9rIQpgYGAKClRoaXMgdXNlZCB0byBiZSBhbGxvd2VkIGJlZm9yZSBlZGl0aW9uIDIwMjEsIGJ1dCBpcyBub3cgYW4gZXJyb3IuCgAL////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///weYBQAAAJgF8wjCBwDIsgEmAQAA/A4AAgYA/Q4BAAQAxAMOAAAD+w4ABADEAw4AAAD7DgIFAQLZAQEBAPMIAAH8DgAEAMQDDgAAAvsOAAEEAK8DJAAAA/oOAAQArwMkAAAA+g4BAQDzCAACwQcAsAMSAAACAgVFMDc4MgABHwUAAAAF8wgEAK8DJAAAAPoOAQEB9wgAAfsOAMQHAPeyASYBAACBDwAAAsQHAPeyASYBAAICpgRUaGUgcmFuZ2UgcGF0dGVybiBgLi4uYCBpcyBubyBsb25nZXIgYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAyMSxjb21waWxlX2ZhaWwsRTA3ODMKbWF0Y2ggMnU4IHsKICAgIDAuLi45ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIGVycm9yIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKCk9sZGVyIFJ1c3QgY29kZSB1c2luZyBwcmV2aW91cyBlZGl0aW9ucyBhbGxvd2VkIGAuLi5gIHRvIHN0YW5kIGZvciBleGNsdXNpdmUKcmFuZ2VzIHdoaWNoIGFyZSBub3cgc2lnbmlmaWVkIHVzaW5nIGAuLj1gLgoKVG8gbWFrZSB0aGlzIGNvZGUgY29tcGlsZSByZXBsYWNlIHRoZSBgLi4uYCB3aXRoIGAuLj1gLgoKYGBgZWRpdGlvbjIwMjEKbWF0Y2ggMnU4IHsKICAgIDAuLj05ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIG9rIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKAAn///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////B6YEAAAApgTzCMQHAPeyASYBAACADwACBgCBDwEABADEAw4AAAP/DgAEAMQDDgAAAP8OAgUBAtkBAQEA8wgAAYAPAAQAxAMOAAAC/w4AAQQArwMkAAAD/g4ABACvAyQAAAD+DgEBAPMIAALDBwCwAxIAAAICBUUwNzgzAAEfBQAAAAXzCAQArwMkAAAA/g4BAQH3CAAB/w4AxgcAprMBJgEAAIUPAAACxgcAprMBJgEAAgLdBUEgdW5pb24gZXhwcmVzc2lvbiBkb2VzIG5vdCBoYXZlIGV4YWN0bHkgb25lIGZpZWxkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc4NAp1bmlvbiBCaXJkIHsKICAgIHBpZ2VvbjogdTgsCiAgICB0dXJ0bGVkb3ZlOiB1MTYsCn0KCmxldCBiaXJkID0gQmlyZCB7fTsgLy8gZXJyb3IKbGV0IGJpcmQgPSBCaXJkIHsgcGlnZW9uOiAwLCB0dXJ0bGVkb3ZlOiAxIH07IC8vIGVycm9yCmBgYAoKVGhlIGtleSBwcm9wZXJ0eSBvZiB1bmlvbnMgaXMgdGhhdCBhbGwgZmllbGRzIG9mIGEgdW5pb24gc2hhcmUgY29tbW9uIHN0b3JhZ2UuCkFzIGEgcmVzdWx0LCB3cml0ZXMgdG8gb25lIGZpZWxkIG9mIGEgdW5pb24gY2FuIG92ZXJ3cml0ZSBpdHMgb3RoZXIgZmllbGRzLCBhbmQKc2l6ZSBvZiBhIHVuaW9uIGlzIGRldGVybWluZWQgYnkgdGhlIHNpemUgb2YgaXRzIGxhcmdlc3QgZmllbGQuCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdW5pb24gdHlwZXMgaW4gdGhlIFtSdXN0IHJlZmVyZW5jZV0uCgpXb3JraW5nIGV4YW1wbGU6CgpgYGAKdW5pb24gQmlyZCB7CiAgICBwaWdlb246IHU4LAogICAgdHVydGxlZG92ZTogdTE2LAp9CgpsZXQgYmlyZCA9IEJpcmQgeyBwaWdlb246IDAgfTsgLy8gT0sKYGBgCgpbUnVzdCByZWZlcmVuY2VdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy91bmlvbnMuaHRtbAoADP///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////wHdBQAAAN0F8wjGBwCmswEmAQAAhA8AAgYAhQ8BAAQAxAMOAAADgw8ABADEAw4AAACDDwIFAQLZAQEBAPMIAAGEDwAEAMQDDgAAAoMPAAEEAK8DJAAAA4IPAAQArwMkAAAAgg8BAQDzCAACxQcAsAMSAAACAgVFMDc4NAABHwUAAAAF8wgEAK8DJAAAAIIPAQEB9wgAAYMPAMgHANWzASYBAACJDwAAAsgHANWzASYBAAICiAVBbiBpbmhlcmVudCBgaW1wbGAgd2FzIHdyaXR0ZW4gb24gYSBkeW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODUKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gQXV0b1RyYWl0IHt9CmBgYAoKRHluIG9iamVjdHMgYWxsb3cgYW55IG51bWJlciBvZiBhdXRvIHRyYWl0cywgcGx1cyBhdCBtb3N0IG9uZSBub24tYXV0byB0cmFpdC4KVGhlIG5vbi1hdXRvIHRyYWl0IGJlY29tZXMgdGhlICJwcmluY2lwYWwgdHJhaXQiLgoKV2hlbiBjaGVja2luZyBpZiBhbiBpbXBsIG9uIGEgZHluIHRyYWl0IGlzIGNvaGVyZW50LCB0aGUgcHJpbmNpcGFsIHRyYWl0IGlzCm5vcm1hbGx5IHRoZSBvbmx5IG9uZSBjb25zaWRlcmVkLiBTaW5jZSB0aGUgZXJyb25lb3VzIGNvZGUgaGFzIG5vIHByaW5jaXBhbAp0cmFpdCwgaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KCldvcmtpbmcgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnRyYWl0IFByaW5jaXBhbFRyYWl0IHt9CgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gUHJpbmNpcGFsVHJhaXQgKyBBdXRvVHJhaXQgKyBTZW5kIHt9CmBgYAoAC////////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH/AYgFAAAAiAXzCMgHANWzASYBAACIDwACBgCJDwEABADEAw4AAAOHDwAEAMQDDgAAAIcPAgUBAtkBAQEA8wgAAYgPAAQAxAMOAAAChw8AAQQArwMkAAADhg8ABACvAyQAAACGDwEBAPMIAALHBwCwAxIAAAICBUUwNzg1AAEfBQAAAAXzCAQArwMkAAAAhg8BAQH3CAABhw8AygcAhLQBJgEAAI0PAAACygcAhLQBJgEAAgK8A0EgbWV0YWRhdGEgZmlsZSB3YXMgaW52YWxpZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5lZWRzIGV4dGVybiBmaWxlcykKdXNlIDo6Zm9vOyAvLyBlcnJvcjogZm91bmQgaW52YWxpZCBtZXRhZGF0YSBmaWxlcyBmb3IgY3JhdGUgYGZvb2AKYGBgCgpXaGVuIGxvYWRpbmcgY3JhdGVzLCBlYWNoIGNyYXRlIG11c3QgaGF2ZSBhIHZhbGlkIG1ldGFkYXRhIGZpbGUuCkludmFsaWQgZmlsZXMgY291bGQgYmUgY2F1c2VkIGJ5IGZpbGVzeXN0ZW0gY29ycnVwdGlvbiwKYW4gSU8gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgZmlsZSwgb3IgKHJhcmVseSkgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi4KCkNvbnNpZGVyIGRlbGV0aW5nIHRoZSBmaWxlIGFuZCByZWNyZWF0aW5nIGl0LApvciByZXBvcnRpbmcgYSBidWcgYWdhaW5zdCB0aGUgY29tcGlsZXIuCgAH////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B//////////8PvAMAAAC8A/MIygcAhLQBJgEAAIwPAAIGAI0PAQAEAMQDDgAAA4sPAAQAxAMOAAAAiw8CBQEC2QEBAQDzCAABjA8ABADEAw4AAAKLDwABBACvAyQAAAOKDwAEAK8DJAAAAIoPAQEA8wgAAskHALADEgAAAgIFRTA3ODYAAR8FAAAABfMIBACvAyQAAACKDwEBAfcIAAGLDwDMBwCztAEmAQAAkQ8AAALMBwCztAEmAQACArgFQW4gdW5zdXBwb3J0ZWQgbmFrZWQgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODcKIyFbZmVhdHVyZShuYWtlZF9mdW5jdGlvbnMpXQoKI1tuYWtlZF0KcHViIGV4dGVybiAiQyIgZm4gZigpIC0+IHUzMiB7CiAgICA0Mgp9CmBgYAoKVGhlIG5ha2VkIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgYSBzaW5nbGUgaW5saW5lIGFzc2VtYmx5CmJsb2NrLgoKVGhlIGV4ZWN1dGlvbiBtdXN0IG5ldmVyIGZhbGwgdGhyb3VnaCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFzc2VtYmx5CmNvZGUgc28gdGhlIGJsb2NrIG11c3QgdXNlIGBub3JldHVybmAgb3B0aW9uLiBUaGUgYXNtIGJsb2NrIGNhbiBhbHNvCnVzZSBgYXR0X3N5bnRheGAgYW5kIGByYXdgIG9wdGlvbnMsIGJ1dCBvdGhlcnMgb3B0aW9ucyBhcmUgbm90IGFsbG93ZWQuCgpUaGUgYXNtIGJsb2NrIG11c3Qgbm90IGNvbnRhaW4gYW55IG9wZXJhbmRzIG90aGVyIHRoYW4gYGNvbnN0YCBhbmQKYHN5bWAuCgojIyMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgW1JGQyAyOTcyXS4KCltSRkMgMjk3Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzI5NzItY29uc3RyYWluZWQtbmFrZWQubWQKAAv///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B/////////3+4BQAAALgF8wjMBwCztAEmAQAAkA8AAgYAkQ8BAAQAxAMOAAADjw8ABADEAw4AAACPDwIFAQLZAQEBAPMIAAGQDwAEAMQDDgAAAo8PAAEEAK8DJAAAA44PAAQArwMkAAAAjg8BAQDzCAACywcAsAMSAAACAgVFMDc4NwABHwUAAAAF8wgEAK8DJAAAAI4PAQEB9wgAAY8PAM4HAOK0ASYBAACVDwAAAs4HAOK0ASYBAAIC6wdBIGAjW25vX2NvdmVyYWdlXWAgYXR0cmlidXRlIHdhcyBhcHBsaWVkIHRvIHNvbWV0aGluZyB3aGljaCBkb2VzIG5vdCBzaG93IHVwCmluIGNvZGUgY292ZXJhZ2UsIG9yIGlzIHRvbyBncmFudWxhciB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBjb3ZlcmFnZSByZXBvcnQuCgpGb3Igbm93LCB0aGlzIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGZ1bmN0aW9uLCBtZXRob2QsIGFuZCBjbG9zdXJlCmRlZmluaXRpb25zLiBJbiB0aGUgZnV0dXJlLCBpdCBtYXkgYmUgYWRkZWQgdG8gc3RhdGVtZW50cywgYmxvY2tzLCBhbmQKZXhwcmVzc2lvbnMsIGFuZCBmb3IgdGhlIHRpbWUgYmVpbmcsIHVzaW5nIHRoaXMgYXR0cmlidXRlIGluIHRob3NlIHBsYWNlcwp3aWxsIGp1c3QgZW1pdCBhbiBgdW51c2VkX2F0dHJpYnV0ZXNgIGxpbnQgaW5zdGVhZCBvZiB0aGlzIGVycm9yLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc4OAojW25vX2NvdmVyYWdlXQpzdHJ1Y3QgRm9vOwoKI1tub19jb3ZlcmFnZV0KY29uc3QgRk9POiBGb28gPSBGb287CmBgYAoKYCNbbm9fY292ZXJhZ2VdYCB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IGdlbmVyYXRlIGNvdmVyYWdlIGluc3RydW1lbnRhdGlvbiBmb3IKYSBwaWVjZSBvZiBjb2RlIHdoZW4gdGhlIGAtQyBpbnN0cnVtZW50LWNvdmVyYWdlYCBmbGFnIGlzIHBhc3NlZC4gVGhpbmdzIGxpa2UKc3RydWN0cyBhbmQgY29uc3RzIGFyZSBub3QgY292ZXJhYmxlIGNvZGUsIGFuZCB0aHVzIGNhbm5vdCBkbyBhbnl0aGluZyB3aXRoIHRoaXMKYXR0cmlidXRlLgoKSWYgeW91IHdpc2ggdG8gYXBwbHkgdGhpcyBhdHRyaWJ1dGUgdG8gYWxsIG1ldGhvZHMgaW4gYW4gaW1wbCBvciBtb2R1bGUsCm1hbnVhbGx5IGFubm90YXRlIGVhY2ggbWV0aG9kOyBpdCBpcyBub3QgcG9zc2libGUgdG8gYW5ub3RhdGUgdGhlIGVudGlyZSBpbXBsCndpdGggYSBgI1tub19jb3ZlcmFnZV1gIGF0dHJpYnV0ZS4KABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////8B6wcAAADrB/MIzgcA4rQBJgEAAJQPAAIGAJUPAQAEAMQDDgAAA5MPAAQAxAMOAAAAkw8CBQEC2QEBAQDzCAABlA8ABADEAw4AAAKTDwABBACvAyQAAAOSDwAEAK8DJAAAAJIPAQEA8wgAAs0HALADEgAAAgIFRTA3ODgAAR8FAAAABfMIBACvAyQAAACSDwEBAfcIAAGTDwDQBwCRtQEmAQAAmQ8AAALQBwCRtQEmAQACAsAHWW91IG5lZWQgdG8gc3BlY2lmeSBhIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFpdCBpbiBvcmRlciB0byBjYWxsIHRoZQptZXRob2QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzkwCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBJbXBsOwoKaW1wbCBHZW5lcmF0b3IgZm9yIEltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMSB9Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKbGV0IGNvbnQ6IHUzMiA9IEdlbmVyYXRvcjo6Y3JlYXRlKCk7Ci8vIGVycm9yLCBpbXBvc3NpYmxlIHRvIGNob29zZSBvbmUgb2YgR2VuZXJhdG9yIHRyYWl0IGltcGxlbWVudGF0aW9uCi8vIFNob3VsZCBpdCBiZSBJbXBsIG9yIEFub3RoZXJJbXBsLCBtYXliZSBzb21ldGhpbmcgZWxzZT8KYGBgCgpUaGlzIGVycm9yIGNhbiBiZSBzb2x2ZWQgYnkgYWRkaW5nIHR5cGUgYW5ub3RhdGlvbnMgdGhhdCBwcm92aWRlIHRoZSBtaXNzaW5nCmluZm9ybWF0aW9uIHRvIHRoZSBjb21waWxlci4gSW4gdGhpcyBjYXNlLCB0aGUgc29sdXRpb24gaXMgdG8gdXNlIGEgY29uY3JldGUKdHlwZToKCmBgYAp0cmFpdCBHZW5lcmF0b3IgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyOwp9CgpzdHJ1Y3QgQW5vdGhlckltcGw7CgppbXBsIEdlbmVyYXRvciBmb3IgQW5vdGhlckltcGwgewogICAgZm4gY3JlYXRlKCkgLT4gdTMyIHsgMiB9Cn0KCmxldCBnZW4xID0gQW5vdGhlckltcGw6OmNyZWF0ZSgpOwoKLy8gaWYgdGhlcmUgYXJlIG11bHRpcGxlIG1ldGhvZHMgd2l0aCBzYW1lIG5hbWUgKGRpZmZlcmVudCB0cmFpdHMpCmxldCBnZW4yID0gPEFub3RoZXJJbXBsIGFzIEdlbmVyYXRvcj46OmNyZWF0ZSgpOwpgYGAKABD///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wEAwAcAAADAB/MI0AcAkbUBJgEAAJgPAAIGAJkPAQAEAMQDDgAAA5cPAAQAxAMOAAAAlw8CBQEC2QEBAQDzCAABmA8ABADEAw4AAAKXDwABBACvAyQAAAOWDwAEAK8DJAAAAJYPAQEA8wgAAs8HALADEgAAAgIFRTA3OTAAAR8FAAAABfMIBACvAyQAAACWDwEBAfcIAAGXDwDSBwDAtQEmAQAAnQ8AAALSBwDAtQEmAQACAroHU3RhdGljIHZhcmlhYmxlcyB3aXRoIHRoZSBgI1tsaW5rYWdlXWAgYXR0cmlidXRlIHdpdGhpbiBleHRlcm5hbCBibG9ja3MKbXVzdCBoYXZlIG9uZSBvZiB0aGUgZm9sbG93aW5nIHR5cGVzLCB3aGljaCBhcmUgZXF1aXZhbGVudCB0byBhIG51bGxhYmxlCnBvaW50ZXIgaW4gQzoKCiogYCptdXQgVGAgb3IgYCpjb25zdCBUYCwgd2hlcmUgYFRgIG1heSBiZSBhbnkgdHlwZS4KCiogQW4gZW51bWVyYXRvciB0eXBlIHdpdGggbm8gYCNbcmVwcl1gIGF0dHJpYnV0ZSBhbmQgd2l0aCB0d28gdmFyaWFudHMsIHdoZXJlCiAgb25lIG9mIHRoZSB2YXJpYW50cyBoYXMgbm8gZmllbGRzLCBhbmQgdGhlIG90aGVyIGhhcyBhIHNpbmdsZSBmaWVsZCBvZiBvbmUgb2YKICB0aGUgZm9sbG93aW5nIG5vbi1udWxsYWJsZSB0eXBlczoKICAqIFJlZmVyZW5jZSB0eXBlCiAgKiBGdW5jdGlvbiBwb2ludGVyIHR5cGUKCiAgVGhlIHZhcmlhbnRzIGNhbiBhcHBlYXIgaW4gZWl0aGVyIG9yZGVyLgoKRm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gaXMgaW52YWxpZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDc5MQojIVtmZWF0dXJlKGxpbmthZ2UpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2xpbmthZ2UgPSAiZXh0ZXJuX3dlYWsiXQogICAgc3RhdGljIGZvbzogaTg7Cn0KYGBgCgpUaGUgZm9sbG93aW5nIGRlY2xhcmF0aW9ucyBhcmUgdmFsaWQ6CgpgYGAKIyFbZmVhdHVyZShsaW5rYWdlKV0KCmV4dGVybiAiQyIgewogICAgI1tsaW5rYWdlID0gImV4dGVybl93ZWFrIl0KICAgIHN0YXRpYyBmb286IE9wdGlvbjx1bnNhZmUgZXh0ZXJuICJDIiBmbigpPjsKCiAgICAjW2xpbmthZ2UgPSAiZXh0ZXJuX3dlYWsiXQogICAgc3RhdGljIGJhcjogT3B0aW9uPCYnc3RhdGljIGk4PjsKCiAgICAjW2xpbmthZ2UgPSAiZXh0ZXJuX3dlYWsiXQogICAgc3RhdGljIGJhejogKm11dCBpODsKfQpgYGAKAA////////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af///////////wH///////////8B////////////Af//////////A7oHAAAAugfzCNIHAMC1ASYBAACcDwACBgCdDwEABADEAw4AAAObDwAEAMQDDgAAAJsPAgUBAtkBAQEA8wgAAZwPAAQAxAMOAAACmw8AAQQArwMkAAADmg8ABACvAyQAAACaDwEBAPMIAALRBwCwAxIAAAICBUUwNzkxAAEfBQAAAAXzCAQArwMkAAAAmg8BAQH3CAABmw8ABAD7AwQAAAOfDwAEAPsDBAAAAp8PAAAEAOcDGQAAA54PAAQA5wMZAAAAng8BAQDz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AboGAAG+BgABwgYAAcYGAAHKBgABzgYAAdIGAAHWBgAB2gYAAd4GAAHiBgAB5gYAAeoGAAHuBgAB8gYAAfYGAAH6BgAB/gYAAYIHAAGGBwABigcAAY4HAAGSBwABlgcAAZoHAAGeBwABogcAAaYHAAGqBwABrgcAAbIHAAG2BwABugcAAb4HAAHCBwABxgcAAcoHAAHOBwAB0gcAAdYHAAHaBwAB3gcAAeIHAAHmBwAB6gcAAe4HAAHyBwAB9gcAAfoHAAH+BwABgggAAYYIAAGKCAABjggAAZIIAAGWCAABmggAAZ4IAAGiCAABpggAAaoIAAGuCAABsggAAbYIAAG6CAABvggAAcIIAAHGCAAByggAAc4IAAHSCAAB1ggAAdoIAAHeCAAB4ggAAeYIAAHqCAAB7ggAAfIIAAH2CAAB+ggAAf4IAAGCCQABhgkAAYoJAAGOCQABkgkAAZYJAAGaCQABngkAAaIJAAGmCQABqgkAAa4JAAGyCQABtgkAAboJAAG+CQABwgkAAcYJAAHKCQABzgkAAdIJAAHWCQAB2gkAAd4JAAHiCQAB5gkAAeoJAAHuCQAB8gkAAfYJAAH6CQAB/gkAAYIKAAGGCgABigoAAY4KAAGSCgABlgoAAZoKAAGeCgABogoAAaYKAAGqCgABrgoAAbIKAAG2CgABugoAAb4KAAHCCgABxgoAAcoKAAHOCgAB0goAAdYKAAHaCgAB3goAAeIKAAHmCgAB6goAAe4KAAHyCgAB9goAAfoKAAH+CgABggsAAYYLAAGKCwABjgsAAZILAAGWCwABmgsAAZ4LAAGiCwABpgsAAaoLAAGuCwABsgsAAbYLAAG6CwABvgsAAcILAAHGCwABygsAAc4LAAHSCwAB1gsAAdoLAAHeCwAB4gsAAeYLAAHqCwAB7gsAAfILAAH2CwAB+gsAAf4LAAGCDAABhgwAAYoMAAGODAABkgwAAZYMAAGaDAABngwAAaIMAAGmDAABqgwAAa4MAAGyDAABtgwAAboMAAG+DAABwgwAAcYMAAHKDAABzgwAAdIMAAHWDAAB2gwAAd4MAAHiDAAB5gwAAeoMAAHuDAAB8gwAAfYMAAH6DAAB/gwAAYINAAGGDQABig0AAY4NAAGSDQABlg0AAZoNAAGeDQABog0AAaYNAAGqDQABrg0AAbINAAG2DQABug0A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8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAL4GAKqaASYBAAEAAADzCAC+BgCqmgEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMAGANmaASYBAAEAAADzCADABgDZmgEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMIGAIibASYBAAEAAADzCADCBgCImwEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMQGALebASYBAAEAAADzCADEBgC3mwEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMYGAOabASYBAAEAAADzCADGBgDmmwEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMgGAJWcASYBAAEAAADzCADIBgCVnAEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMoGAMScASYBAAEAAADzCADKBgDEnAEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAMwGAPOcASYBAAEAAADzCADMBgDznAEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIAM4GAKKdASYBAAEAAADzCADOBgCinQEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANAGANGdASYBAAEAAADzCADQBgDRnQEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANIGAICeASYBAAEAAADzCADSBgCAngEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANQGAK+eASYBAAEAAADzCADUBgCvngEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANYGAN6eASYBAAEAAADzCADWBgDengEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANgGAI2fASYBAAEAAADzCADYBgCNnwEmAQABAAAA8QgABACvAyQAAAEAAAD3CAAEAMQDDgAAAQAAAPMIANoGALyfASYBAAEAAADzCADaBgC8nwEmAQABAAAA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NCAgICAgNTYzODAwICAgIGAKf0VMRgIBAQAAAAAAAAAAAAEAPgABAAAAAAAAAAAAAAAAAAAAAAAAAJifBwAAAAAAAAAAAEAAAAAAAEAA6wMBAEUwMDAxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBzdWdnZXN0cyB0aGF0IHRoZSBleHByZXNzaW9uIGFybSBjb3JyZXNwb25kaW5nIHRvIHRoZSBub3RlZCBwYXR0ZXJuCndpbGwgbmV2ZXIgYmUgcmVhY2hlZCBhcyBmb3IgYWxsIHBvc3NpYmxlIHZhbHVlcyBvZiB0aGUgZXhwcmVzc2lvbiBiZWluZwptYXRjaGVkLCBvbmUgb2YgdGhlIHByZWNlZGluZyBwYXR0ZXJucyB3aWxsIG1hdGNoLgoKVGhpcyBtZWFucyB0aGF0IHBlcmhhcHMgc29tZSBvZiB0aGUgcHJlY2VkaW5nIHBhdHRlcm5zIGFyZSB0b28gZ2VuZXJhbCwgdGhpcwpvbmUgaXMgdG9vIHNwZWNpZmljIG9yIHRoZSBvcmRlcmluZyBpcyBpbmNvcnJlY3QuCgpGb3IgZXhhbXBsZSwgdGhlIGZvbGxvd2luZyBgbWF0Y2hgIGJsb2NrIGhhcyB0b28gbWFueSBhcm1zOgoKYGBgCm1hdGNoIFNvbWUoMCkgewogICAgU29tZShiYXIpID0+IHsvKiAuLi4gKi99CiAgICB4ID0+IHsvKiAuLi4gKi99IC8vIFRoaXMgaGFuZGxlcyB0aGUgYE5vbmVgIGNhc2UKICAgIF8gPT4gey8qIC4uLiAqL30gLy8gQWxsIHBvc3NpYmxlIGNhc2VzIGhhdmUgYWxyZWFkeSBiZWVuIGhhbmRsZWQKfQpgYGAKCmBtYXRjaGAgYmxvY2tzIGhhdmUgdGhlaXIgcGF0dGVybnMgbWF0Y2hlZCBpbiBvcmRlciwgc28sIGZvciBleGFtcGxlLCBwdXR0aW5nCmEgd2lsZGNhcmQgYXJtIGFib3ZlIGEgbW9yZSBzcGVjaWZpYyBhcm0gd2lsbCBtYWtlIHRoZSBsYXR0ZXIgYXJtIGlycmVsZXZhbnQuCgpFbnN1cmUgdGhlIG9yZGVyaW5nIG9mIHRoZSBtYXRjaCBhcm0gaXMgY29ycmVjdCBhbmQgcmVtb3ZlIGFueSBzdXBlcmZsdW91cwphcm1zLgpFMDAwMiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYW4gZW1wdHkgbWF0Y2ggZXhwcmVzc2lvbiBpcyBpbnZhbGlkIGJlY2F1c2UgdGhlIHR5cGUKaXQgaXMgbWF0Y2hpbmcgb24gaXMgbm9uLWVtcHR5ICh0aGVyZSBleGlzdCB2YWx1ZXMgb2YgdGhpcyB0eXBlKS4gSW4gc2FmZSBjb2RlCml0IGlzIGltcG9zc2libGUgdG8gY3JlYXRlIGFuIGluc3RhbmNlIG9mIGFuIGVtcHR5IHR5cGUsIHNvIGVtcHR5IG1hdGNoCmV4cHJlc3Npb25zIGFyZSBhbG1vc3QgbmV2ZXIgZGVzaXJlZC4gVGhpcyBlcnJvciBpcyB0eXBpY2FsbHkgZml4ZWQgYnkgYWRkaW5nCm9uZSBvciBtb3JlIGNhc2VzIHRvIHRoZSBtYXRjaCBleHByZXNzaW9uLgoKQW4gZXhhbXBsZSBvZiBhbiBlbXB0eSB0eXBlIGlzIGBlbnVtIEVtcHR5IHsgfWAuIFNvLCB0aGUgZm9sbG93aW5nIHdpbGwgd29yazoKCmBgYAplbnVtIEVtcHR5IHt9CgpmbiBmb28oeDogRW1wdHkpIHsKICAgIG1hdGNoIHggewogICAgICAgIC8vIGVtcHR5CiAgICB9Cn0KYGBgCgpIb3dldmVyLCB0aGlzIHdvbid0OgoKYGBgY29tcGlsZV9mYWlsCmZuIGZvbyh4OiBPcHRpb248U3RyaW5nPikgewogICAgbWF0Y2ggeCB7CiAgICAgICAgLy8gZW1wdHkKICAgIH0KfQpgYGAKRTAwMDRUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBjYW5ub3QgZ3VhcmFudGVlIGEgbWF0Y2hpbmcgcGF0dGVybiBmb3IKb25lIG9yIG1vcmUgcG9zc2libGUgaW5wdXRzIHRvIGEgbWF0Y2ggZXhwcmVzc2lvbi4gR3VhcmFudGVlZCBtYXRjaGVzIGFyZQpyZXF1aXJlZCBpbiBvcmRlciB0byBhc3NpZ24gdmFsdWVzIHRvIG1hdGNoIGV4cHJlc3Npb25zLCBvciBhbHRlcm5hdGl2ZWx5LApkZXRlcm1pbmUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNAplbnVtIFRlcm1pbmF0b3IgewogICAgSGFzdGFMYVZpc3RhQmFieSwKICAgIFRhbGtUb015SGFuZCwKfQoKbGV0IHggPSBUZXJtaW5hdG9yOjpIYXN0YUxhVmlzdGFCYWJ5OwoKbWF0Y2ggeCB7IC8vIGVycm9yOiBub24tZXhoYXVzdGl2ZSBwYXR0ZXJuczogYEhhc3RhTGFWaXN0YUJhYnlgIG5vdCBjb3ZlcmVkCiAgICBUZXJtaW5hdG9yOjpUYWxrVG9NeUhhbmQgPT4ge30KfQpgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgbXVzdCBhbHRlciB5b3VyIHBhdHRlcm5zIHNvIHRoYXQgZXZlcnkgcG9zc2libGUKdmFsdWUgb2YgdGhlIGlucHV0IHR5cGUgaXMgbWF0Y2hlZC4gRm9yIHR5cGVzIHdpdGggYSBzbWFsbCBudW1iZXIgb2YgdmFyaWFudHMKKGxpa2UgZW51bXMpIHlvdSBzaG91bGQgcHJvYmFibHkgY292ZXIgYWxsIGNhc2VzIGV4cGxpY2l0bHkuIEFsdGVybmF0aXZlbHksIHRoZQp1bmRlcnNjb3JlIGBfYCB3aWxkY2FyZCBwYXR0ZXJuIGNhbiBiZSBhZGRlZCBhZnRlciBhbGwgb3RoZXIgcGF0dGVybnMgdG8gbWF0Y2gKImFueXRoaW5nIGVsc2UiLiBFeGFtcGxlOgoKYGBgCmVudW0gVGVybWluYXRvciB7CiAgICBIYXN0YUxhVmlzdGFCYWJ5LAogICAgVGFsa1RvTXlIYW5kLAp9CgpsZXQgeCA9IFRlcm1pbmF0b3I6Okhhc3RhTGFWaXN0YUJhYnk7CgptYXRjaCB4IHsKICAgIFRlcm1pbmF0b3I6OlRhbGtUb015SGFuZCA9PiB7fQogICAgVGVybWluYXRvcjo6SGFzdGFMYVZpc3RhQmFieSA9PiB7fQp9CgovLyBvcjoKCm1hdGNoIHggewogICAgVGVybWluYXRvcjo6VGFsa1RvTXlIYW5kID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCkUwMDA1UGF0dGVybnMgdXNlZCB0byBiaW5kIG5hbWVzIG11c3QgYmUgaXJyZWZ1dGFibGUsIHRoYXQgaXMsIHRoZXkgbXVzdCBndWFyYW50ZWUKdGhhdCBhIG5hbWUgd2lsbCBiZSBleHRyYWN0ZWQgaW4gYWxsIGNhc2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAwNQpsZXQgeCA9IFNvbWUoMSk7CmxldCBTb21lKHkpID0geDsKLy8gZXJyb3I6IHJlZnV0YWJsZSBwYXR0ZXJuIGluIGxvY2FsIGJpbmRpbmc6IGBOb25lYCBub3QgY292ZXJlZApgYGAKCklmIHlvdSBlbmNvdW50ZXIgdGhpcyBlcnJvciB5b3UgcHJvYmFibHkgbmVlZCB0byB1c2UgYSBgbWF0Y2hgIG9yIGBpZiBsZXRgIHRvCmRlYWwgd2l0aCB0aGUgcG9zc2liaWxpdHkgb2YgZmFpbHVyZS4gRXhhbXBsZToKCmBgYApsZXQgeCA9IFNvbWUoMSk7CgptYXRjaCB4IHsKICAgIFNvbWUoeSkgPT4gewogICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgfSwKICAgIE5vbmUgPT4ge30KfQoKLy8gb3I6CgppZiBsZXQgU29tZSh5KSA9IHggewogICAgLy8gZG8gc29tZXRoaW5nCn0KYGBgCkUwMDA3IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgYmluZGluZ3MgaW4gYSBtYXRjaCBhcm0gd291bGQgcmVxdWlyZSBhIHZhbHVlIHRvCmJlIG1vdmVkIGludG8gbW9yZSB0aGFuIG9uZSBsb2NhdGlvbiwgdGh1cyB2aW9sYXRpbmcgdW5pcXVlIG93bmVyc2hpcC4gQ29kZQpsaWtlIHRoZSBmb2xsb3dpbmcgaXMgaW52YWxpZCBhcyBpdCByZXF1aXJlcyB0aGUgZW50aXJlIGBPcHRpb248U3RyaW5nPmAgdG8gYmUKbW92ZWQgaW50byBhIHZhcmlhYmxlIGNhbGxlZCBgb3Bfc3RyaW5nYCB3aGlsZSBzaW11bHRhbmVvdXNseSByZXF1aXJpbmcgdGhlCmlubmVyIGBTdHJpbmdgIHRvIGJlIG1vdmVkIGludG8gYSB2YXJpYWJsZSBjYWxsZWQgYHNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM4MgojIVtmZWF0dXJlKGJpbmRpbmdzX2FmdGVyX2F0KV0KCmxldCB4ID0gU29tZSgicyIudG9fc3RyaW5nKCkpOwoKbWF0Y2ggeCB7CiAgICBvcF9zdHJpbmcgQCBTb21lKHMpID0+IHt9LCAvLyBlcnJvcjogdXNlIG9mIG1vdmVkIHZhbHVlCiAgICBOb25lID0+IHt9LAp9CmBgYAoKU2VlIGFsc28gdGhlIGVycm9yIEUwMzAzLgpFMDAwOSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkluIGEgcGF0dGVybiwgYWxsIHZhbHVlcyB0aGF0IGRvbid0IGltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGhhdmUgdG8gYmUgYm91bmQKdGhlIHNhbWUgd2F5LiBUaGUgZ29hbCBoZXJlIGlzIHRvIGF2b2lkIGJpbmRpbmcgc2ltdWx0YW5lb3VzbHkgYnktbW92ZSBhbmQKYnktcmVmLgoKVGhpcyBsaW1pdGF0aW9uIG1heSBiZSByZW1vdmVkIGluIGEgZnV0dXJlIHZlcnNpb24gb2YgUnVzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShtb3ZlX3JlZl9wYXR0ZXJuKV0KCnN0cnVjdCBYIHsgeDogKCksIH0KCmxldCB4ID0gU29tZSgoWCB7IHg6ICgpIH0sIFggeyB4OiAoKSB9KSk7Cm1hdGNoIHggewogICAgU29tZSgoeSwgcmVmIHopKSA9PiB7fSwgLy8gZXJyb3I6IGNhbm5vdCBiaW5kIGJ5LW1vdmUgYW5kIGJ5LXJlZiBpbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBzYW1lIHBhdHRlcm4KICAgIE5vbmUgPT4gcGFuaWMhKCkKfQpgYGAKCllvdSBoYXZlIHR3byBzb2x1dGlvbnM6CgpTb2x1dGlvbiAjMTogQmluZCB0aGUgcGF0dGVybidzIHZhbHVlcyB0aGUgc2FtZSB3YXkuCgpgYGAKc3RydWN0IFggeyB4OiAoKSwgfQoKbGV0IHggPSBTb21lKChYIHsgeDogKCkgfSwgWCB7IHg6ICgpIH0pKTsKbWF0Y2ggeCB7CiAgICBTb21lKChyZWYgeSwgcmVmIHopKSA9PiB7fSwKICAgIC8vIG9yIFNvbWUoKHksIHopKSA9PiB7fQogICAgTm9uZSA9PiBwYW5pYyEoKQp9CmBgYAoKU29sdXRpb24gIzI6IEltcGxlbWVudCB0aGUgYENvcHlgIHRyYWl0IGZvciB0aGUgYFhgIHN0cnVjdHVyZS4KCkhvd2V2ZXIsIHBsZWFzZSBrZWVwIGluIG1pbmQgdGhhdCB0aGUgZmlyc3Qgc29sdXRpb24gc2hvdWxkIGJlIHByZWZlcnJlZC4KCmBgYAojW2Rlcml2ZShDbG9uZSwgQ29weSldCnN0cnVjdCBYIHsgeDogKCksIH0KCmxldCB4ID0gU29tZSgoWCB7IHg6ICgpIH0sIFggeyB4OiAoKSB9KSk7Cm1hdGNoIHggewogICAgU29tZSgoeSwgcmVmIHopKSA9PiB7fSwKICAgIE5vbmUgPT4gcGFuaWMhKCkKfQpgYGAKRTAwMTBUaGUgdmFsdWUgb2Ygc3RhdGljcyBhbmQgY29uc3RhbnRzIG11c3QgYmUga25vd24gYXQgY29tcGlsZSB0aW1lLCBhbmQgdGhleSBsaXZlCmZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIGEgcHJvZ3JhbS4gQ3JlYXRpbmcgYSBib3hlZCB2YWx1ZSBhbGxvY2F0ZXMgbWVtb3J5IG9uCnRoZSBoZWFwIGF0IHJ1bnRpbWUsIGFuZCB0aGVyZWZvcmUgY2Fubm90IGJlIGRvbmUgYXQgY29tcGlsZSB0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAxMAojIVtmZWF0dXJlKGJveF9zeW50YXgpXQoKY29uc3QgQ09OIDogQm94PGkzMj4gPSBib3ggMDsKYGBgCkUwMDEzU3RhdGljIGFuZCBjb25zdCB2YXJpYWJsZXMgY2FuIHJlZmVyIHRvIG90aGVyIGNvbnN0IHZhcmlhYmxlcy4gQnV0IGEgY29uc3QKdmFyaWFibGUgY2Fubm90IHJlZmVyIHRvIGEgc3RhdGljIHZhcmlhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAxMwpzdGF0aWMgWDogaTMyID0gNDI7CmNvbnN0IFk6IGkzMiA9IFg7CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBgWWAgY2Fubm90IHJlZmVyIHRvIGBYYC4gVG8gZml4IHRoaXMsIHRoZSB2YWx1ZSBjYW4gYmUKZXh0cmFjdGVkIGFzIGEgY29uc3QgYW5kIHRoZW4gdXNlZDoKCmBgYApjb25zdCBBOiBpMzIgPSA0MjsKc3RhdGljIFg6IGkzMiA9IEE7CmNvbnN0IFk6IGkzMiA9IEE7CmBgYApFMDAxNCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNvbnN0YW50cyBjYW4gb25seSBiZSBpbml0aWFsaXplZCBieSBhIGNvbnN0YW50IHZhbHVlIG9yLCBpbiBhIGZ1dHVyZQp2ZXJzaW9uIG9mIFJ1c3QsIGEgY2FsbCB0byBhIGNvbnN0IGZ1bmN0aW9uLiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGUgdXNlCm9mIGEgcGF0aCAobGlrZSBhOjpiLCBvciB4KSBkZW5vdGluZyBzb21ldGhpbmcgb3RoZXIgdGhhbiBvbmUgb2YgdGhlc2UKYWxsb3dlZCBpdGVtcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGAKY29uc3QgRk9POiBpMzIgPSB7IGxldCB4ID0gMDsgeCB9OyAvLyAneCcgaXNuJ3QgYSBjb25zdGFudCBub3IgYSBmdW5jdGlvbiEKYGBgCgpUbyBhdm9pZCBpdCwgeW91IGhhdmUgdG8gcmVwbGFjZSB0aGUgbm9uLWNvbnN0YW50IHZhbHVlOgoKYGBgCmNvbnN0IEZPTzogaTMyID0geyBjb25zdCBYIDogaTMyID0gMDsgWCB9OwovLyBvciBldmVuOgpjb25zdCBGT08yOiBpMzIgPSB7IDAgfTsgLy8gYnV0IGJyYWNrZXRzIGFyZSB1c2VsZXNzIGhlcmUKYGBgCkUwMDE1QSBjb25zdGFudCBpdGVtIHdhcyBpbml0aWFsaXplZCB3aXRoIHNvbWV0aGluZyB0aGF0IGlzIG5vdCBhIGNvbnN0YW50CmV4cHJlc3Npb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDE1CmZuIGNyZWF0ZV9zb21lKCkgLT4gT3B0aW9uPHU4PiB7CiAgICBTb21lKDEpCn0KCmNvbnN0IEZPTzogT3B0aW9uPHU4PiA9IGNyZWF0ZV9zb21lKCk7IC8vIGVycm9yIQpgYGAKClRoZSBvbmx5IGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBjYWxsZWQgaW4gc3RhdGljIG9yIGNvbnN0YW50IGV4cHJlc3Npb25zIGFyZQpgY29uc3RgIGZ1bmN0aW9ucywgYW5kIHN0cnVjdC9lbnVtIGNvbnN0cnVjdG9ycy4KClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGRlY2xhcmUgYGNyZWF0ZV9zb21lYCBhcyBhIGNvbnN0YW50IGZ1bmN0aW9uOgoKYGBgCmNvbnN0IGZuIGNyZWF0ZV9zb21lKCkgLT4gT3B0aW9uPHU4PiB7IC8vIGRlY2xhcmVkIGFzIGEgY29uc3QgZnVuY3Rpb24KICAgIFNvbWUoMSkKfQoKY29uc3QgRk9POiBPcHRpb248dTg+ID0gY3JlYXRlX3NvbWUoKTsgLy8gb2shCgovLyBUaGVzZSBhcmUgYWxzbyB3b3JraW5nOgpzdHJ1Y3QgQmFyIHsKICAgIHg6IHU4LAp9Cgpjb25zdCBPVEhFUl9GT086IE9wdGlvbjx1OD4gPSBTb21lKDEpOwpjb25zdCBCQVI6IEJhciA9IEJhciB7eDogMX07CmBgYApFMDAyM0EgcGF0dGVybiBhdHRlbXB0ZWQgdG8gZXh0cmFjdCBhbiBpbmNvcnJlY3QgbnVtYmVyIG9mIGZpZWxkcyBmcm9tIGEgdmFyaWFudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjMKZW51bSBGcnVpdCB7CiAgICBBcHBsZShTdHJpbmcsIFN0cmluZyksCiAgICBQZWFyKHUzMiksCn0KCmxldCB4ID0gRnJ1aXQ6OkFwcGxlKFN0cmluZzo6bmV3KCksIFN0cmluZzo6bmV3KCkpOwoKbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sIC8vIGVycm9yIQogICAgXyA9PiB7fQp9CmBgYAoKQSBwYXR0ZXJuIHVzZWQgdG8gbWF0Y2ggYWdhaW5zdCBhbiBlbnVtIHZhcmlhbnQgbXVzdCBwcm92aWRlIGEgc3ViLXBhdHRlcm4gZm9yCmVhY2ggZmllbGQgb2YgdGhlIGVudW0gdmFyaWFudC4KCkhlcmUgdGhlIGBBcHBsZWAgdmFyaWFudCBoYXMgdHdvIGZpZWxkcywgYW5kIHNob3VsZCBiZSBtYXRjaGVkIGFnYWluc3QgbGlrZSBzbzoKCmBgYAplbnVtIEZydWl0IHsKICAgIEFwcGxlKFN0cmluZywgU3RyaW5nKSwKICAgIFBlYXIodTMyKSwKfQoKbGV0IHggPSBGcnVpdDo6QXBwbGUoU3RyaW5nOjpuZXcoKSwgU3RyaW5nOjpuZXcoKSk7CgovLyBDb3JyZWN0LgptYXRjaCB4IHsKICAgIEZydWl0OjpBcHBsZShhLCBiKSA9PiB7fSwKICAgIF8gPT4ge30KfQpgYGAKCk1hdGNoaW5nIHdpdGggdGhlIHdyb25nIG51bWJlciBvZiBmaWVsZHMgaGFzIG5vIHNlbnNpYmxlIGludGVycHJldGF0aW9uOgoKYGBgY29tcGlsZV9mYWlsLEUwMDIzCmVudW0gRnJ1aXQgewogICAgQXBwbGUoU3RyaW5nLCBTdHJpbmcpLAogICAgUGVhcih1MzIpLAp9CgpsZXQgeCA9IEZydWl0OjpBcHBsZShTdHJpbmc6Om5ldygpLCBTdHJpbmc6Om5ldygpKTsKCi8vIEluY29ycmVjdC4KbWF0Y2ggeCB7CiAgICBGcnVpdDo6QXBwbGUoYSkgPT4ge30sCiAgICBGcnVpdDo6QXBwbGUoYSwgYiwgYykgPT4ge30sCn0KYGBgCgpDaGVjayBob3cgbWFueSBmaWVsZHMgdGhlIGVudW0gd2FzIGRlY2xhcmVkIHdpdGggYW5kIGVuc3VyZSB0aGF0IHlvdXIgcGF0dGVybgp1c2VzIHRoZSBzYW1lIG51bWJlci4KRTAwMjVFYWNoIGZpZWxkIG9mIGEgc3RydWN0IGNhbiBvbmx5IGJlIGJvdW5kIG9uY2UgaW4gYSBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAyNQpzdHJ1Y3QgRm9vIHsKICAgIGE6IHU4LAogICAgYjogdTgsCn0KCmZuIG1haW4oKXsKICAgIGxldCB4ID0gRm9vIHsgYToxLCBiOjIgfTsKCiAgICBsZXQgRm9vIHsgYTogeCwgYTogeSB9ID0geDsKICAgIC8vIGVycm9yOiBmaWVsZCBgYWAgYm91bmQgbXVsdGlwbGUgdGltZXMgaW4gdGhlIHBhdHRlcm4KfQpgYGAKCkVhY2ggb2NjdXJyZW5jZSBvZiBhIGZpZWxkIG5hbWUgYmluZHMgdGhlIHZhbHVlIG9mIHRoYXQgZmllbGQsIHNvIHRvIGZpeCB0aGlzCmVycm9yIHlvdSB3aWxsIGhhdmUgdG8gcmVtb3ZlIG9yIGFsdGVyIHRoZSBkdXBsaWNhdGUgdXNlcyBvZiB0aGUgZmllbGQgbmFtZS4KUGVyaGFwcyB5b3UgbWlzc3BlbGxlZCBhbm90aGVyIGZpZWxkIG5hbWU/IEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICBhOiB1OCwKICAgIGI6IHU4LAp9CgpmbiBtYWluKCl7CiAgICBsZXQgeCA9IEZvbyB7IGE6MSwgYjoyIH07CgogICAgbGV0IEZvbyB7IGE6IHgsIGI6IHkgfSA9IHg7IC8vIG9rIQp9CmBgYApFMDAyNkEgc3RydWN0IHBhdHRlcm4gYXR0ZW1wdGVkIHRvIGV4dHJhY3QgYSBub24tZXhpc3RlbnQgZmllbGQgZnJvbSBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjYKc3RydWN0IFRoaW5nIHsKICAgIHg6IHUzMiwKICAgIHk6IHUzMiwKfQoKbGV0IHRoaW5nID0gVGhpbmcgeyB4OiAwLCB5OiAwIH07CgptYXRjaCB0aGluZyB7CiAgICBUaGluZyB7IHgsIHogfSA9PiB7fSAvLyBlcnJvcjogYFRoaW5nOjp6YCBmaWVsZCBkb2Vzbid0IGV4aXN0Cn0KYGBgCgpJZiB5b3UgYXJlIHVzaW5nIHNob3J0aGFuZCBmaWVsZCBwYXR0ZXJucyBidXQgd2FudCB0byByZWZlciB0byB0aGUgc3RydWN0IGZpZWxkCmJ5IGEgZGlmZmVyZW50IG5hbWUsIHlvdSBzaG91bGQgcmVuYW1lIGl0IGV4cGxpY2l0bHkuIFN0cnVjdCBmaWVsZHMgYXJlCmlkZW50aWZpZWQgYnkgdGhlIG5hbWUgdXNlZCBiZWZvcmUgdGhlIGNvbG9uIGA6YCBzbyBzdHJ1Y3QgcGF0dGVybnMgc2hvdWxkCnJlc2VtYmxlIHRoZSBkZWNsYXJhdGlvbiBvZiB0aGUgc3RydWN0IHR5cGUgYmVpbmcgbWF0Y2hlZC4KCmBgYApzdHJ1Y3QgVGhpbmcgewogICAgeDogdTMyLAogICAgeTogdTMyLAp9CgpsZXQgdGhpbmcgPSBUaGluZyB7IHg6IDAsIHk6IDAgfTsKCm1hdGNoIHRoaW5nIHsKICAgIFRoaW5nIHsgeCwgeTogeiB9ID0+IHt9IC8vIHdlIHJlbmFtZWQgYHlgIHRvIGB6YAp9CmBgYApFMDAyN0EgcGF0dGVybiBmb3IgYSBzdHJ1Y3QgZmFpbHMgdG8gc3BlY2lmeSBhIHN1Yi1wYXR0ZXJuIGZvciBldmVyeSBvbmUgb2YgdGhlCnN0cnVjdCdzIGZpZWxkcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwMjcKc3RydWN0IERvZyB7CiAgICBuYW1lOiBTdHJpbmcsCiAgICBhZ2U6IHUzMiwKfQoKbGV0IGQgPSBEb2cgeyBuYW1lOiAiUnVzdHkiLnRvX3N0cmluZygpLCBhZ2U6IDggfTsKCi8vIFRoaXMgaXMgaW5jb3JyZWN0LgptYXRjaCBkIHsKICAgIERvZyB7IGFnZTogeCB9ID0+IHt9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoYXQgZWFjaCBmaWVsZCBmcm9tIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uIGlzCm1lbnRpb25lZCBpbiB0aGUgcGF0dGVybiwgb3IgdXNlIGAuLmAgdG8gaWdub3JlIHVud2FudGVkIGZpZWxkcy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRG9nIHsKICAgIG5hbWU6IFN0cmluZywKICAgIGFnZTogdTMyLAp9CgpsZXQgZCA9IERvZyB7IG5hbWU6ICJSdXN0eSIudG9fc3RyaW5nKCksIGFnZTogOCB9OwoKbWF0Y2ggZCB7CiAgICBEb2cgeyBuYW1lOiByZWYgbiwgYWdlOiB4IH0gPT4ge30KfQoKLy8gVGhpcyBpcyBhbHNvIGNvcnJlY3QgKGlnbm9yZSB1bnVzZWQgZmllbGRzKS4KbWF0Y2ggZCB7CiAgICBEb2cgeyBhZ2U6IHgsIC4uIH0gPT4ge30KfQpgYGAKRTAwMjlTb21ldGhpbmcgb3RoZXIgdGhhbiBudW1iZXJzIGFuZCBjaGFyYWN0ZXJzIGhhcyBiZWVuIHVzZWQgZm9yIGEgcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDI5CmxldCBzdHJpbmcgPSAic2FsdXRhdGlvbnMgISI7CgovLyBUaGUgb3JkZXJpbmcgcmVsYXRpb24gZm9yIHN0cmluZ3MgY2Fubm90IGJlIGV2YWx1YXRlZCBhdCBjb21waWxlIHRpbWUsCi8vIHNvIHRoaXMgZG9lc24ndCB3b3JrOgptYXRjaCBzdHJpbmcgewogICAgImhlbGxvIiAuLj0gIndvcmxkIiA9PiB7fQogICAgXyA9PiB7fQp9CgovLyBUaGlzIGlzIGEgbW9yZSBnZW5lcmFsIHZlcnNpb24sIHVzaW5nIGEgZ3VhcmQ6Cm1hdGNoIHN0cmluZyB7CiAgICBzIGlmIHMgPj0gImhlbGxvIiAmJiBzIDw9ICJ3b3JsZCIgPT4ge30KICAgIF8gPT4ge30KfQpgYGAKCkluIGEgbWF0Y2ggZXhwcmVzc2lvbiwgb25seSBudW1iZXJzIGFuZCBjaGFyYWN0ZXJzIGNhbiBiZSBtYXRjaGVkIGFnYWluc3QgYQpyYW5nZS4gVGhpcyBpcyBiZWNhdXNlIHRoZSBjb21waWxlciBjaGVja3MgdGhhdCB0aGUgcmFuZ2UgaXMgbm9uLWVtcHR5IGF0CmNvbXBpbGUtdGltZSwgYW5kIGlzIHVuYWJsZSB0byBldmFsdWF0ZSBhcmJpdHJhcnkgY29tcGFyaXNvbiBmdW5jdGlvbnMuIElmIHlvdQp3YW50IHRvIGNhcHR1cmUgdmFsdWVzIG9mIGFuIG9yZGVyYWJsZSB0eXBlIGJldHdlZW4gdHdvIGVuZC1wb2ludHMsIHlvdSBjYW4gdXNlCmEgZ3VhcmQuCkUwMDMwV2hlbiBtYXRjaGluZyBhZ2FpbnN0IGEgcmFuZ2UsIHRoZSBjb21waWxlciB2ZXJpZmllcyB0aGF0IHRoZSByYW5nZSBpcwpub24tZW1wdHkuIFJhbmdlIHBhdHRlcm5zIGluY2x1ZGUgYm90aCBlbmQtcG9pbnRzLCBzbyB0aGlzIGlzIGVxdWl2YWxlbnQgdG8KcmVxdWlyaW5nIHRoZSBzdGFydCBvZiB0aGUgcmFuZ2UgdG8gYmUgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBlbmQgb2YgdGhlCnJhbmdlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzMAptYXRjaCA1dTMyIHsKICAgIC8vIFRoaXMgcmFuZ2UgaXMgb2ssIGFsYmVpdCBwb2ludGxlc3MuCiAgICAxIC4uPSAxID0+IHt9CiAgICAvLyBUaGlzIHJhbmdlIGlzIGVtcHR5LCBhbmQgdGhlIGNvbXBpbGVyIGNhbiB0ZWxsLgogICAgMTAwMCAuLj0gNSA9PiB7fQp9CmBgYApFMDAzM0EgdHJhaXQgdHlwZSBoYXMgYmVlbiBkZXJlZmVyZW5jZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDMzCiMgdHJhaXQgU29tZVRyYWl0IHsgZm4gbWV0aG9kX29uZSgmc2VsZil7fSBmbiBtZXRob2RfdHdvKCZzZWxmKXt9IH0KIyBpbXBsPFQ+IFNvbWVUcmFpdCBmb3IgVCB7fQpsZXQgdHJhaXRfb2JqOiAmU29tZVRyYWl0ID0gJiJzb21lX3ZhbHVlIjsKCi8vIFRoaXMgdHJpZXMgdG8gaW1wbGljaXRseSBkZXJlZmVyZW5jZSB0byBjcmVhdGUgYW4gdW5zaXplZCBsb2NhbCB2YXJpYWJsZS4KbGV0ICZpbnZhbGlkID0gdHJhaXRfb2JqOwoKLy8gWW91IGNhbiBjYWxsIG1ldGhvZHMgd2l0aG91dCBiaW5kaW5nIHRvIHRoZSB2YWx1ZSBiZWluZyBwb2ludGVkIGF0Lgp0cmFpdF9vYmoubWV0aG9kX29uZSgpOwp0cmFpdF9vYmoubWV0aG9kX3R3bygpOwpgYGAKCkEgcG9pbnRlciB0byBhIHRyYWl0IHR5cGUgY2Fubm90IGJlIGltcGxpY2l0bHkgZGVyZWZlcmVuY2VkIGJ5IGEgcGF0dGVybi4gRXZlcnkKdHJhaXQgZGVmaW5lcyBhIHR5cGUsIGJ1dCBiZWNhdXNlIHRoZSBzaXplIG9mIHRyYWl0IGltcGxlbWVudGVycyBpc24ndCBmaXhlZCwKdGhpcyB0eXBlIGhhcyBubyBjb21waWxlLXRpbWUgc2l6ZS4gVGhlcmVmb3JlLCBhbGwgYWNjZXNzZXMgdG8gdHJhaXQgdHlwZXMgbXVzdApiZSB0aHJvdWdoIHBvaW50ZXJzLiBJZiB5b3UgZW5jb3VudGVyIHRoaXMgZXJyb3IgeW91IHNob3VsZCB0cnkgdG8gYXZvaWQKZGVyZWZlcmVuY2luZyB0aGUgcG9pbnRlci4KCllvdSBjYW4gcmVhZCBtb3JlIGFib3V0IHRyYWl0IG9iamVjdHMgaW4gdGhlIFtUcmFpdCBPYmplY3RzXSBzZWN0aW9uIG9mIHRoZQpSZWZlcmVuY2UuCgpbVHJhaXQgT2JqZWN0c106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGVzLmh0bWwjdHJhaXQtb2JqZWN0cwpFMDAzNFRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgd2hhdCBtZXRob2QgdG8gY2FsbCBiZWNhdXNlIG1vcmUgdGhhbiBvbmUgbWV0aG9kCmhhcyB0aGUgc2FtZSBwcm90b3R5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDM0CnN0cnVjdCBUZXN0OwoKdHJhaXQgVHJhaXQxIHsKICAgIGZuIGZvbygpOwp9Cgp0cmFpdCBUcmFpdDIgewogICAgZm4gZm9vKCk7Cn0KCmltcGwgVHJhaXQxIGZvciBUZXN0IHsgZm4gZm9vKCkge30gfQppbXBsIFRyYWl0MiBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KCmZuIG1haW4oKSB7CiAgICBUZXN0Ojpmb28oKSAvLyBlcnJvciwgd2hpY2ggZm9vKCkgdG8gY2FsbD8KfQpgYGAKClRvIGF2b2lkIHRoaXMgZXJyb3IsIHlvdSBoYXZlIHRvIGtlZXAgb25seSBvbmUgb2YgdGhlbSBhbmQgcmVtb3ZlIHRoZSBvdGhlcnMuClNvIGxldCdzIHRha2Ugb3VyIGV4YW1wbGUgYW5kIGZpeCBpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKaW1wbCBUcmFpdDEgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgVGVzdDo6Zm9vKCkgLy8gYW5kIG5vdyB0aGF0J3MgZ29vZCEKfQpgYGAKCkhvd2V2ZXIsIGEgYmV0dGVyIHNvbHV0aW9uIHdvdWxkIGJlIHVzaW5nIGZ1bGx5IGV4cGxpY2l0IG5hbWluZyBvZiB0eXBlIGFuZAp0cmFpdDoKCmBgYApzdHJ1Y3QgVGVzdDsKCnRyYWl0IFRyYWl0MSB7CiAgICBmbiBmb28oKTsKfQoKdHJhaXQgVHJhaXQyIHsKICAgIGZuIGZvbygpOwp9CgppbXBsIFRyYWl0MSBmb3IgVGVzdCB7IGZuIGZvbygpIHt9IH0KaW1wbCBUcmFpdDIgZm9yIFRlc3QgeyBmbiBmb28oKSB7fSB9CgpmbiBtYWluKCkgewogICAgPFRlc3QgYXMgVHJhaXQxPjo6Zm9vKCkKfQpgYGAKCk9uZSBsYXN0IGV4YW1wbGU6CgpgYGAKdHJhaXQgRiB7CiAgICBmbiBtKCZzZWxmKTsKfQoKdHJhaXQgRyB7CiAgICBmbiBtKCZzZWxmKTsKfQoKc3RydWN0IFg7CgppbXBsIEYgZm9yIFggeyBmbiBtKCZzZWxmKSB7IHByaW50bG4hKCJJIGFtIEYiKTsgfSB9CmltcGwgRyBmb3IgWCB7IGZuIG0oJnNlbGYpIHsgcHJpbnRsbiEoIkkgYW0gRyIpOyB9IH0KCmZuIG1haW4oKSB7CiAgICBsZXQgZiA9IFg7CgogICAgRjo6bSgmZik7IC8vIGl0IGRpc3BsYXlzICJJIGFtIEYiCiAgICBHOjptKCZmKTsgLy8gaXQgZGlzcGxheXMgIkkgYW0gRyIKfQpgYGAKRTAwMzhGb3IgYW55IGdpdmVuIHRyYWl0IGBUcmFpdGAgdGhlcmUgbWF5IGJlIGEgcmVsYXRlZCBfdHlwZV8gY2FsbGVkIHRoZSBfdHJhaXQKb2JqZWN0IHR5cGVfIHdoaWNoIGlzIHR5cGljYWxseSB3cml0dGVuIGFzIGBkeW4gVHJhaXRgLiBJbiBlYXJsaWVyIGVkaXRpb25zIG9mClJ1c3QsIHRyYWl0IG9iamVjdCB0eXBlcyB3ZXJlIHdyaXR0ZW4gYXMgcGxhaW4gYFRyYWl0YCAoanVzdCB0aGUgbmFtZSBvZiB0aGUKdHJhaXQsIHdyaXR0ZW4gaW4gdHlwZSBwb3NpdGlvbnMpIGJ1dCB0aGlzIHdhcyBhIGJpdCB0b28gY29uZnVzaW5nLCBzbyB3ZSBub3cKd3JpdGUgYGR5biBUcmFpdGAuCgpTb21lIHRyYWl0cyBhcmUgbm90IGFsbG93ZWQgdG8gYmUgdXNlZCBhcyB0cmFpdCBvYmplY3QgdHlwZXMuIFRoZSB0cmFpdHMgdGhhdAphcmUgYWxsb3dlZCB0byBiZSB1c2VkIGFzIHRyYWl0IG9iamVjdCB0eXBlcyBhcmUgY2FsbGVkICJvYmplY3Qtc2FmZSIgdHJhaXRzLgpBdHRlbXB0aW5nIHRvIHVzZSBhIHRyYWl0IG9iamVjdCB0eXBlIGZvciBhIHRyYWl0IHRoYXQgaXMgbm90IG9iamVjdC1zYWZlIHdpbGwKdHJpZ2dlciBlcnJvciBFMDAzOC4KClR3byBnZW5lcmFsIGFzcGVjdHMgb2YgdHJhaXQgb2JqZWN0IHR5cGVzIGdpdmUgcmlzZSB0byB0aGUgcmVzdHJpY3Rpb25zOgoKICAxLiBUcmFpdCBvYmplY3QgdHlwZXMgYXJlIGR5bmFtaWNhbGx5IHNpemVkIHR5cGVzIChEU1RzKSwgYW5kIHRyYWl0IG9iamVjdHMgb2YKICAgICB0aGVzZSB0eXBlcyBjYW4gb25seSBiZSBhY2Nlc3NlZCB0aHJvdWdoIHBvaW50ZXJzLCBzdWNoIGFzIGAmZHluIFRyYWl0YCBvcgogICAgIGBCb3g8ZHluIFRyYWl0PmAuIFRoZSBzaXplIG9mIHN1Y2ggYSBwb2ludGVyIGlzIGtub3duLCBidXQgdGhlIHNpemUgb2YgdGhlCiAgICAgYGR5biBUcmFpdGAgb2JqZWN0IHBvaW50ZWQtdG8gYnkgdGhlIHBvaW50ZXIgaXMgX29wYXF1ZV8gdG8gY29kZSB3b3JraW5nCiAgICAgd2l0aCBpdCwgYW5kIGRpZmZlcmVudCB0cmFpdCBvYmplY3RzIHdpdGggdGhlIHNhbWUgdHJhaXQgb2JqZWN0IHR5cGUgbWF5CiAgICAgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMuCgogIDIuIFRoZSBwb2ludGVyIHVzZWQgdG8gYWNjZXNzIGEgdHJhaXQgb2JqZWN0IGlzIHBhaXJlZCB3aXRoIGFuIGV4dHJhIHBvaW50ZXIKICAgICB0byBhICJ2aXJ0dWFsIG1ldGhvZCB0YWJsZSIgb3IgInZ0YWJsZSIsIHdoaWNoIGlzIHVzZWQgdG8gaW1wbGVtZW50IGR5bmFtaWMKICAgICBkaXNwYXRjaCB0byB0aGUgb2JqZWN0J3MgaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdCdzIG1ldGhvZHMuIFRoZXJlIGlzIGEKICAgICBzaW5nbGUgc3VjaCB2dGFibGUgZm9yIGVhY2ggdHJhaXQgaW1wbGVtZW50YXRpb24sIGJ1dCBkaWZmZXJlbnQgdHJhaXQKICAgICBvYmplY3RzIHdpdGggdGhlIHNhbWUgdHJhaXQgb2JqZWN0IHR5cGUgbWF5IHBvaW50IHRvIHZ0YWJsZXMgZnJvbSBkaWZmZXJlbnQKICAgICBpbXBsZW1lbnRhdGlvbnMuCgpUaGUgc3BlY2lmaWMgY29uZGl0aW9ucyB0aGF0IHZpb2xhdGUgb2JqZWN0LXNhZmV0eSBmb2xsb3csIG1vc3Qgb2Ygd2hpY2ggcmVsYXRlCnRvIG1pc3Npbmcgc2l6ZSBpbmZvcm1hdGlvbiBhbmQgdnRhYmxlIHBvbHltb3JwaGlzbSBhcmlzaW5nIGZyb20gdGhlc2UgYXNwZWN0cy4KCiMjIyBUaGUgdHJhaXQgcmVxdWlyZXMgYFNlbGY6IFNpemVkYAoKVHJhaXRzIHRoYXQgYXJlIGRlY2xhcmVkIGFzIGBUcmFpdDogU2l6ZWRgIG9yIHdoaWNoIG90aGVyd2lzZSBpbmhlcml0IGEKY29uc3RyYWludCBvZiBgU2VsZjpTaXplZGAgYXJlIG5vdCBvYmplY3Qtc2FmZS4KClRoZSByZWFzb25pbmcgYmVoaW5kIHRoaXMgaXMgc29tZXdoYXQgc3VidGxlLiBJdCBkZXJpdmVzIGZyb20gdGhlIGZhY3QgdGhhdCBSdXN0CnJlcXVpcmVzIChhbmQgZGVmaW5lcykgdGhhdCBldmVyeSB0cmFpdCBvYmplY3QgdHlwZSBgZHluIFRyYWl0YCBhdXRvbWF0aWNhbGx5CmltcGxlbWVudHMgYFRyYWl0YC4gUnVzdCBkb2VzIHRoaXMgdG8gc2ltcGxpZnkgZXJyb3IgcmVwb3J0aW5nIGFuZCBlYXNlCmludGVyb3BlcmF0aW9uIGJldHdlZW4gc3RhdGljIGFuZCBkeW5hbWljIHBvbHltb3JwaGlzbS4gRm9yIGV4YW1wbGUsIHRoaXMgY29kZQp3b3JrczoKCmBgYAp0cmFpdCBUcmFpdCB7Cn0KCmZuIHN0YXRpY19mb288VDpUcmFpdCArID9TaXplZD4oYjogJlQpIHsKfQoKZm4gZHluYW1pY19iYXIoYTogJmR5biBUcmFpdCkgewogICAgc3RhdGljX2ZvbyhhKQp9CmBgYAoKVGhpcyBjb2RlIHdvcmtzIGJlY2F1c2UgYGR5biBUcmFpdGAsIGlmIGl0IGV4aXN0cywgYWx3YXlzIGltcGxlbWVudHMgYFRyYWl0YC4KCkhvd2V2ZXIgYXMgd2Uga25vdywgYW55IGBkeW4gVHJhaXRgIGlzIGFsc28gdW5zaXplZCwgYW5kIHNvIGl0IGNhbiBuZXZlcgppbXBsZW1lbnQgYSBzaXplZCB0cmFpdCBsaWtlIGBUcmFpdDpTaXplZGAuIFNvLCByYXRoZXIgdGhhbiBhbGxvdyBhbiBleGNlcHRpb24KdG8gdGhlIHJ1bGUgdGhhdCBgZHluIFRyYWl0YCBhbHdheXMgaW1wbGVtZW50cyBgVHJhaXRgLCBSdXN0IGNob29zZXMgdG8gcHJvaGliaXQKc3VjaCBhIGBkeW4gVHJhaXRgIGZyb20gZXhpc3RpbmcgYXQgYWxsLgoKT25seSB1bnNpemVkIHRyYWl0cyBhcmUgY29uc2lkZXJlZCBvYmplY3Qtc2FmZS4KCkdlbmVyYWxseSwgYFNlbGY6IFNpemVkYCBpcyB1c2VkIHRvIGluZGljYXRlIHRoYXQgdGhlIHRyYWl0IHNob3VsZCBub3QgYmUgdXNlZAphcyBhIHRyYWl0IG9iamVjdC4gSWYgdGhlIHRyYWl0IGNvbWVzIGZyb20geW91ciBvd24gY3JhdGUsIGNvbnNpZGVyIHJlbW92aW5nCnRoaXMgcmVzdHJpY3Rpb24uCgojIyMgTWV0aG9kIHJlZmVyZW5jZXMgdGhlIGBTZWxmYCB0eXBlIGluIGl0cyBwYXJhbWV0ZXJzIG9yIHJldHVybiB0eXBlCgpUaGlzIGhhcHBlbnMgd2hlbiBhIHRyYWl0IGhhcyBhIG1ldGhvZCBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAiaGkiLnRvX293bmVkKCkKICAgIH0KfQoKaW1wbCBUcmFpdCBmb3IgdTggewogICAgZm4gZm9vKCZzZWxmKSAtPiBTZWxmIHsKICAgICAgICAxCiAgICB9Cn0KYGBgCgooTm90ZSB0aGF0IGAmc2VsZmAgYW5kIGAmbXV0IHNlbGZgIGFyZSBva2F5LCBpdCdzIGFkZGl0aW9uYWwgYFNlbGZgIHR5cGVzIHdoaWNoCmNhdXNlIHRoaXMgcHJvYmxlbS4pCgpJbiBzdWNoIGEgY2FzZSwgdGhlIGNvbXBpbGVyIGNhbm5vdCBwcmVkaWN0IHRoZSByZXR1cm4gdHlwZSBvZiBgZm9vKClgIGluIGEKc2l0dWF0aW9uIGxpa2UgdGhlIGZvbGxvd2luZzoKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpIC0+IFNlbGY7Cn0KCmZuIGNhbGxfZm9vKHg6IEJveDxkeW4gVHJhaXQ+KSB7CiAgICBsZXQgeSA9IHguZm9vKCk7IC8vIFdoYXQgdHlwZSBpcyB5PwogICAgLy8gLi4uCn0KYGBgCgpJZiBvbmx5IHNvbWUgbWV0aG9kcyBhcmVuJ3Qgb2JqZWN0LXNhZmUsIHlvdSBjYW4gYWRkIGEgYHdoZXJlIFNlbGY6IFNpemVkYCBib3VuZApvbiB0aGVtIHRvIG1hcmsgdGhlbSBhcyBleHBsaWNpdGx5IHVuYXZhaWxhYmxlIHRvIHRyYWl0IG9iamVjdHMuIFRoZQpmdW5jdGlvbmFsaXR5IHdpbGwgc3RpbGwgYmUgYXZhaWxhYmxlIHRvIGFsbCBvdGhlciBpbXBsZW1lbnRlcnMsIGluY2x1ZGluZwpgQm94PGR5biBUcmFpdD5gIHdoaWNoIGlzIGl0c2VsZiBzaXplZCAoYXNzdW1pbmcgeW91IGBpbXBsIFRyYWl0IGZvciBCb3g8ZHluClRyYWl0PmApLgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbygmc2VsZikgLT4gU2VsZiB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgZnVuY3Rpb25zCn0KYGBgCgpOb3csIGBmb28oKWAgY2FuIG5vIGxvbmdlciBiZSBjYWxsZWQgb24gYSB0cmFpdCBvYmplY3QsIGJ1dCB5b3Ugd2lsbCBub3cgYmUKYWxsb3dlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0LCBhbmQgdGhhdCB3aWxsIGJlIGFibGUgdG8gY2FsbCBhbnkgb2JqZWN0LXNhZmUKbWV0aG9kcy4gV2l0aCBzdWNoIGEgYm91bmQsIG9uZSBjYW4gc3RpbGwgY2FsbCBgZm9vKClgIG9uIHR5cGVzIGltcGxlbWVudGluZwp0aGF0IHRyYWl0IHRoYXQgYXJlbid0IGJlaGluZCB0cmFpdCBvYmplY3RzLgoKIyMjIE1ldGhvZCBoYXMgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcnMKCkFzIG1lbnRpb25lZCBiZWZvcmUsIHRyYWl0IG9iamVjdHMgY29udGFpbiBwb2ludGVycyB0byBtZXRob2QgdGFibGVzLiBTbywgaWYgd2UKaGF2ZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBTdHJpbmcgewogICAgZm4gZm9vKCZzZWxmKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb28oJnNlbGYpIHsKICAgICAgICAvLyBpbXBsZW1lbnRhdGlvbiAyCiAgICB9Cn0KLy8gLi4uCmBgYAoKQXQgY29tcGlsZSB0aW1lIGVhY2ggaW1wbGVtZW50YXRpb24gb2YgYFRyYWl0YCB3aWxsIHByb2R1Y2UgYSB0YWJsZSBjb250YWluaW5nCnRoZSB2YXJpb3VzIG1ldGhvZHMgKGFuZCBvdGhlciBpdGVtcykgcmVsYXRlZCB0byB0aGUgaW1wbGVtZW50YXRpb24sIHdoaWNoIHdpbGwKYmUgdXNlZCBhcyB0aGUgdmlydHVhbCBtZXRob2QgdGFibGUgZm9yIGEgYGR5biBUcmFpdGAgb2JqZWN0IGRlcml2ZWQgZnJvbSB0aGF0CmltcGxlbWVudGF0aW9uLgoKVGhpcyB3b3JrcyBmaW5lLCBidXQgd2hlbiB0aGUgbWV0aG9kIGdhaW5zIGdlbmVyaWMgcGFyYW1ldGVycywgd2UgY2FuIGhhdmUgYQpwcm9ibGVtLgoKVXN1YWxseSwgZ2VuZXJpYyBwYXJhbWV0ZXJzIGdldCBfbW9ub21vcnBoaXplZF8uIEZvciBleGFtcGxlLCBpZiBJIGhhdmUKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgLy8gLi4uCn0KYGBgCgpUaGUgbWFjaGluZSBjb2RlIGZvciBgZm9vOjo8dTg+KClgLCBgZm9vOjo8Ym9vbD4oKWAsIGBmb286OjxTdHJpbmc+KClgLCBvciBhbnkKb3RoZXIgdHlwZSBzdWJzdGl0dXRpb24gaXMgZGlmZmVyZW50LiBIZW5jZSB0aGUgY29tcGlsZXIgZ2VuZXJhdGVzIHRoZQppbXBsZW1lbnRhdGlvbiBvbi1kZW1hbmQuIElmIHlvdSBjYWxsIGBmb28oKWAgd2l0aCBhIGBib29sYCBwYXJhbWV0ZXIsIHRoZQpjb21waWxlciB3aWxsIG9ubHkgZ2VuZXJhdGUgY29kZSBmb3IgYGZvbzo6PGJvb2w+KClgLiBXaGVuIHdlIGhhdmUgYWRkaXRpb25hbAp0eXBlIHBhcmFtZXRlcnMsIHRoZSBudW1iZXIgb2YgbW9ub21vcnBoaXplZCBpbXBsZW1lbnRhdGlvbnMgdGhlIGNvbXBpbGVyCmdlbmVyYXRlcyBkb2VzIG5vdCBncm93IGRyYXN0aWNhbGx5LCBzaW5jZSB0aGUgY29tcGlsZXIgd2lsbCBvbmx5IGdlbmVyYXRlIGFuCmltcGxlbWVudGF0aW9uIGlmIHRoZSBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB1bnBhcmFtZXRlcml6ZWQgc3Vic3RpdHV0aW9ucwooaS5lLiwgc3Vic3RpdHV0aW9ucyB3aGVyZSBub25lIG9mIHRoZSBzdWJzdGl0dXRlZCB0eXBlcyBhcmUgdGhlbXNlbHZlcwpwYXJhbWV0ZXJpemVkKS4KCkhvd2V2ZXIsIHdpdGggdHJhaXQgb2JqZWN0cyB3ZSBoYXZlIHRvIG1ha2UgYSB0YWJsZSBjb250YWluaW5nIF9ldmVyeV8gb2JqZWN0CnRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQuIE5vdywgaWYgaXQgaGFzIHR5cGUgcGFyYW1ldGVycywgd2UgbmVlZCB0byBhZGQKaW1wbGVtZW50YXRpb25zIGZvciBldmVyeSB0eXBlIHRoYXQgaW1wbGVtZW50cyB0aGUgdHJhaXQsIGFuZCB0aGVyZSBjb3VsZAp0aGVvcmV0aWNhbGx5IGJlIGFuIGluZmluaXRlIG51bWJlciBvZiB0eXBlcy4KCkZvciBleGFtcGxlLCB3aXRoOgoKYGBgCnRyYWl0IFRyYWl0IHsKICAgIGZuIGZvbzxUPigmc2VsZiwgb246IFQpOwogICAgLy8gbW9yZSBtZXRob2RzCn0KCmltcGwgVHJhaXQgZm9yIFN0cmluZyB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMQogICAgfQp9CgppbXBsIFRyYWl0IGZvciB1OCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7CiAgICAgICAgLy8gaW1wbGVtZW50YXRpb24gMgogICAgfQp9CgovLyA4IG1vcmUgaW1wbGVtZW50YXRpb25zCmBgYAoKTm93LCBpZiB3ZSBoYXZlIHRoZSBmb2xsb3dpbmcgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDAzOAojIHRyYWl0IFRyYWl0IHsgZm4gZm9vPFQ+KCZzZWxmLCBvbjogVCk7IH0KIyBpbXBsIFRyYWl0IGZvciBTdHJpbmcgeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgdTggeyBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB7fSB9CiMgaW1wbCBUcmFpdCBmb3IgYm9vbCB7IGZuIGZvbzxUPigmc2VsZiwgb246IFQpIHt9IH0KIyAvLyBldGMuCmZuIGNhbGxfZm9vKHRoaW5nOiBCb3g8ZHluIFRyYWl0PikgewogICAgdGhpbmcuZm9vKHRydWUpOyAvLyB0aGlzIGNvdWxkIGJlIGFueSBvbmUgb2YgdGhlIDggdHlwZXMgYWJvdmUKICAgIHRoaW5nLmZvbygxKTsKICAgIHRoaW5nLmZvbygiaGVsbG8iKTsKfQpgYGAKCldlIGRvbid0IGp1c3QgbmVlZCB0byBjcmVhdGUgYSB0YWJsZSBvZiBhbGwgaW1wbGVtZW50YXRpb25zIG9mIGFsbCBtZXRob2RzIG9mCmBUcmFpdGAsIHdlIG5lZWQgdG8gY3JlYXRlIHN1Y2ggYSB0YWJsZSwgZm9yIGVhY2ggZGlmZmVyZW50IHR5cGUgZmVkIHRvCmBmb28oKWAuIEluIHRoaXMgY2FzZSB0aGlzIHR1cm5zIG91dCB0byBiZSAoMTAgdHlwZXMgaW1wbGVtZW50aW5nIGBUcmFpdGApXCooMwp0eXBlcyBiZWluZyBmZWQgdG8gYGZvbygpYCkgPSAzMCBpbXBsZW1lbnRhdGlvbnMhCgpXaXRoIHJlYWwgd29ybGQgdHJhaXRzIHRoZXNlIG51bWJlcnMgY2FuIGdyb3cgZHJhc3RpY2FsbHkuCgpUbyBmaXggdGhpcywgaXQgaXMgc3VnZ2VzdGVkIHRvIHVzZSBhIGB3aGVyZSBTZWxmOiBTaXplZGAgYm91bmQgc2ltaWxhciB0byB0aGUKZml4IGZvciB0aGUgc3ViLWVycm9yIGFib3ZlIGlmIHlvdSBkbyBub3QgaW50ZW5kIHRvIGNhbGwgdGhlIG1ldGhvZCB3aXRoIHR5cGUKcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb288VD4oJnNlbGYsIG9uOiBUKSB3aGVyZSBTZWxmOiBTaXplZDsKICAgIC8vIG1vcmUgbWV0aG9kcwp9CmBgYAoKSWYgdGhpcyBpcyBub3QgYW4gb3B0aW9uLCBjb25zaWRlciByZXBsYWNpbmcgdGhlIHR5cGUgcGFyYW1ldGVyIHdpdGggYW5vdGhlcgp0cmFpdCBvYmplY3QgKGUuZy4sIGlmIGBUOiBPdGhlclRyYWl0YCwgdXNlIGBvbjogQm94PGR5biBPdGhlclRyYWl0PmApLiBJZiB0aGUKbnVtYmVyIG9mIHR5cGVzIHlvdSBpbnRlbmQgdG8gZmVlZCB0byB0aGlzIG1ldGhvZCBpcyBsaW1pdGVkLCBjb25zaWRlciBtYW51YWxseQpsaXN0aW5nIG91dCB0aGUgbWV0aG9kcyBvZiBkaWZmZXJlbnQgdHlwZXMuCgojIyMgTWV0aG9kIGhhcyBubyByZWNlaXZlcgoKTWV0aG9kcyB0aGF0IGRvIG5vdCB0YWtlIGEgYHNlbGZgIHBhcmFtZXRlciBjYW4ndCBiZSBjYWxsZWQgc2luY2UgdGhlcmUgd29uJ3QgYmUKYSB3YXkgdG8gZ2V0IGEgcG9pbnRlciB0byB0aGUgbWV0aG9kIHRhYmxlIGZvciB0aGVtLgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKSAtPiB1ODsKfQpgYGAKClRoaXMgY291bGQgYmUgY2FsbGVkIGFzIGA8Rm9vIGFzIEZvbz46OmZvbygpYCwgd2hpY2ggd291bGQgbm90IGJlIGFibGUgdG8gcGljawphbiBpbXBsZW1lbnRhdGlvbi4KCkFkZGluZyBhIGBTZWxmOiBTaXplZGAgYm91bmQgdG8gdGhlc2UgbWV0aG9kcyB3aWxsIGdlbmVyYWxseSBtYWtlIHRoaXMgY29tcGlsZS4KCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCkgLT4gdTggd2hlcmUgU2VsZjogU2l6ZWQ7Cn0KYGBgCgojIyMgVHJhaXQgY29udGFpbnMgYXNzb2NpYXRlZCBjb25zdGFudHMKCkp1c3QgbGlrZSBzdGF0aWMgZnVuY3Rpb25zLCBhc3NvY2lhdGVkIGNvbnN0YW50cyBhcmVuJ3Qgc3RvcmVkIG9uIHRoZSBtZXRob2QKdGFibGUuIElmIHRoZSB0cmFpdCBvciBhbnkgc3VidHJhaXQgY29udGFpbiBhbiBhc3NvY2lhdGVkIGNvbnN0YW50LCB0aGV5IGNhbm5vdApiZSBtYWRlIGludG8gYW4gb2JqZWN0LgoKYGBgY29tcGlsZV9mYWlsLEUwMDM4CnRyYWl0IEZvbyB7CiAgICBjb25zdCBYOiBpMzI7Cn0KCmltcGwgRm9vIHt9CmBgYAoKQSBzaW1wbGUgd29ya2Fyb3VuZCBpcyB0byB1c2UgYSBoZWxwZXIgbWV0aG9kIGluc3RlYWQ6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIHgoJnNlbGYpIC0+IGkzMjsKfQpgYGAKCiMjIyBUcmFpdCB1c2VzIGBTZWxmYCBhcyBhIHR5cGUgcGFyYW1ldGVyIGluIHRoZSBzdXBlcnRyYWl0IGxpc3RpbmcKClRoaXMgaXMgc2ltaWxhciB0byB0aGUgc2Vjb25kIHN1Yi1lcnJvciwgYnV0IHN1YnRsZXIuIEl0IGhhcHBlbnMgaW4gc2l0dWF0aW9ucwpsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGBjb21waWxlX2ZhaWwsRTAwMzgKdHJhaXQgU3VwZXI8QTogP1NpemVkPiB7fQoKdHJhaXQgVHJhaXQ6IFN1cGVyPFNlbGY+IHsKfQoKc3RydWN0IEZvbzsKCmltcGwgU3VwZXI8Rm9vPiBmb3IgRm9ve30KCmltcGwgVHJhaXQgZm9yIEZvbyB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBCb3g8ZHluIFRyYWl0PjsKfQpgYGAKCkhlcmUsIHRoZSBzdXBlcnRyYWl0IG1pZ2h0IGhhdmUgbWV0aG9kcyBhcyBmb2xsb3dzOgoKYGBgCnRyYWl0IFN1cGVyPEE6ID9TaXplZD4gewogICAgZm4gZ2V0X2EoJnNlbGYpIC0+ICZBOyAvLyBub3RlIHRoYXQgdGhpcyBpcyBvYmplY3Qgc2FmZSEKfQpgYGAKCklmIHRoZSB0cmFpdCBgVHJhaXRgIHdhcyBkZXJpdmluZyBmcm9tIHNvbWV0aGluZyBsaWtlIGBTdXBlcjxTdHJpbmc+YCBvcgpgU3VwZXI8VD5gICh3aGVyZSBgRm9vYCBpdHNlbGYgaXMgYEZvbzxUPmApLCB0aGlzIGlzIG9rYXksIGJlY2F1c2UgZ2l2ZW4gYSB0eXBlCmBnZXRfYSgpYCB3aWxsIGRlZmluaXRlbHkgcmV0dXJuIGFuIG9iamVjdCBvZiB0aGF0IHR5cGUuCgpIb3dldmVyLCBpZiBpdCBkZXJpdmVzIGZyb20gYFN1cGVyPFNlbGY+YCwgZXZlbiB0aG91Z2ggYFN1cGVyYCBpcyBvYmplY3Qgc2FmZSwKdGhlIG1ldGhvZCBgZ2V0X2EoKWAgd291bGQgcmV0dXJuIGFuIG9iamVjdCBvZiB1bmtub3duIHR5cGUgd2hlbiBjYWxsZWQgb24gdGhlCmZ1bmN0aW9uLiBgU2VsZmAgdHlwZSBwYXJhbWV0ZXJzIGxldCB1cyBtYWtlIG9iamVjdCBzYWZlIHRyYWl0cyBubyBsb25nZXIgc2FmZSwKc28gdGhleSBhcmUgZm9yYmlkZGVuIHdoZW4gc3BlY2lmeWluZyBzdXBlcnRyYWl0cy4KClRoZXJlJ3Mgbm8gZWFzeSBmaXggZm9yIHRoaXMuIEdlbmVyYWxseSwgY29kZSB3aWxsIG5lZWQgdG8gYmUgcmVmYWN0b3JlZCBzbyB0aGF0CnlvdSBubyBsb25nZXIgbmVlZCB0byBkZXJpdmUgZnJvbSBgU3VwZXI8U2VsZj5gLgpFMDA0MEl0IGlzIG5vdCBhbGxvd2VkIHRvIG1hbnVhbGx5IGNhbGwgZGVzdHJ1Y3RvcnMgaW4gUnVzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNDAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gRm9vIHsgeDogLTcgfTsKICAgIHguZHJvcCgpOyAvLyBlcnJvcjogZXhwbGljaXQgdXNlIG9mIGRlc3RydWN0b3IgbWV0aG9kCn0KYGBgCgpJdCBpcyB1bm5lY2Vzc2FyeSB0byBkbyB0aGlzIHNpbmNlIGBkcm9wYCBpcyBjYWxsZWQgYXV0b21hdGljYWxseSB3aGVuZXZlciBhCnZhbHVlIGdvZXMgb3V0IG9mIHNjb3BlLiBIb3dldmVyLCBpZiB5b3UgcmVhbGx5IG5lZWQgdG8gZHJvcCBhIHZhbHVlIGJ5IGhhbmQsCnlvdSBjYW4gdXNlIHRoZSBgc3RkOjptZW06OmRyb3BgIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7CiAgICAgICAgcHJpbnRsbiEoImthYm9vbSIpOwogICAgfQp9CmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSBGb28geyB4OiAtNyB9OwogICAgZHJvcCh4KTsgLy8gb2shCn0KYGBgCkUwMDQ0WW91IGNhbm5vdCB1c2UgdHlwZSBvciBjb25zdCBwYXJhbWV0ZXJzIG9uIGZvcmVpZ24gaXRlbXMuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ0CmV4dGVybiAiQyIgeyBmbiBzb21lX2Z1bmM8VD4oeDogVCk7IH0KYGBgCgpUbyBmaXggdGhpcywgcmVwbGFjZSB0aGUgZ2VuZXJpYyBwYXJhbWV0ZXIgd2l0aCB0aGUgc3BlY2lhbGl6YXRpb25zIHRoYXQgeW91Cm5lZWQ6CgpgYGAKZXh0ZXJuICJDIiB7IGZuIHNvbWVfZnVuY19pMzIoeDogaTMyKTsgfQpleHRlcm4gIkMiIHsgZm4gc29tZV9mdW5jX2k2NCh4OiBpNjQpOyB9CmBgYApFMDA0NVZhcmlhZGljIHBhcmFtZXRlcnMgaGF2ZSBiZWVuIHVzZWQgb24gYSBub24tQyBBQkkgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDQ1CmV4dGVybiAiUnVzdCIgewogICAgZm4gZm9vKHg6IHU4LCAuLi4pOyAvLyBlcnJvciEKfQpgYGAKClJ1c3Qgb25seSBzdXBwb3J0cyB2YXJpYWRpYyBwYXJhbWV0ZXJzIGZvciBpbnRlcm9wZXJhYmlsaXR5IHdpdGggQyBjb2RlIGluIGl0cwpGRkkuIEFzIHN1Y2gsIHZhcmlhZGljIHBhcmFtZXRlcnMgY2FuIG9ubHkgYmUgdXNlZCB3aXRoIGZ1bmN0aW9ucyB3aGljaCBhcmUKdXNpbmcgdGhlIEMgQUJJLiBUbyBmaXggc3VjaCBjb2RlLCBwdXQgdGhlbSBpbiBhbiBleHRlcm4gIkMiIGJsb2NrOgoKYGBgCmV4dGVybiAiQyIgewogICAgZm4gZm9vICh4OiB1OCwgLi4uKTsKfQpgYGAKRTAwNDZJdGVtcyBhcmUgbWlzc2luZyBpbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0Ngp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHt9Ci8vIGVycm9yOiBub3QgYWxsIHRyYWl0IGl0ZW1zIGltcGxlbWVudGVkLCBtaXNzaW5nOiBgZm9vYApgYGAKCldoZW4gdHJ5aW5nIHRvIG1ha2Ugc29tZSB0eXBlIGltcGxlbWVudCBhIHRyYWl0IGBGb29gLCB5b3UgbXVzdCwgYXQgbWluaW11bSwKcHJvdmlkZSBpbXBsZW1lbnRhdGlvbnMgZm9yIGFsbCBvZiBgRm9vYCdzIHJlcXVpcmVkIG1ldGhvZHMgKG1lYW5pbmcgdGhlCm1ldGhvZHMgdGhhdCBkbyBub3QgaGF2ZSBkZWZhdWx0IGltcGxlbWVudGF0aW9ucyksIGFzIHdlbGwgYXMgYW55IHJlcXVpcmVkCnRyYWl0IGl0ZW1zIGxpa2UgYXNzb2NpYXRlZCB0eXBlcyBvciBjb25zdGFudHMuIEV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fSAvLyBvayEKfQpgYGAKRTAwNDlBbiBhdHRlbXB0ZWQgaW1wbGVtZW50YXRpb24gb2YgYSB0cmFpdCBtZXRob2QgaGFzIHRoZSB3cm9uZyBudW1iZXIgb2YgdHlwZSBvcgpjb25zdCBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA0OQp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgovLyBlcnJvcjogbWV0aG9kIGBmb29gIGhhcyAwIHR5cGUgcGFyYW1ldGVycyBidXQgaXRzIHRyYWl0IGRlY2xhcmF0aW9uIGhhcyAxCi8vIHR5cGUgcGFyYW1ldGVyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKHg6IGJvb2wpIC0+IFNlbGYgeyBCYXIgfQp9CmBgYAoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCB0cmFpdCBoYXMgYSBtZXRob2QgYGZvb2Agd2l0aCBhIHR5cGUgcGFyYW1ldGVyIGBUYCwKYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgaXMgbWlzc2luZyB0aGlzIHBhcmFtZXRlci4KVG8gZml4IHRoaXMgZXJyb3IsIHRoZXkgbXVzdCBoYXZlIHRoZSBzYW1lIHR5cGUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vPFQ6IERlZmF1bHQ+KHg6IFQpIC0+IFNlbGY7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbzxUOiBEZWZhdWx0Pih4OiBUKSAtPiBTZWxmIHsgLy8gb2shCiAgICAgICAgQmFyCiAgICB9Cn0KYGBgCkUwMDUwQW4gYXR0ZW1wdGVkIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgbWV0aG9kIGhhcyB0aGUgd3JvbmcgbnVtYmVyIG9mIGZ1bmN0aW9uCnBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDUwCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYsIHg6IHU4KSAtPiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKLy8gZXJyb3I6IG1ldGhvZCBgZm9vYCBoYXMgMSBwYXJhbWV0ZXIgYnV0IHRoZSBkZWNsYXJhdGlvbiBpbiB0cmFpdCBgRm9vOjpmb29gCi8vIGhhcyAyCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9Cn0KYGBgCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHRyYWl0IGhhcyBhIG1ldGhvZCBgZm9vYCB3aXRoIHR3byBmdW5jdGlvbiBwYXJhbWV0ZXJzCihgJnNlbGZgIGFuZCBgdThgKSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgZm9vYCBmb3IgdGhlIHR5cGUgYEJhcmAgb21pdHMKdGhlIGB1OGAgcGFyYW1ldGVyLiBUbyBmaXggdGhpcyBlcnJvciwgdGhleSBtdXN0IGhhdmUgdGhlIHNhbWUgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbDsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gZm9vKCZzZWxmLCB4OiB1OCkgLT4gYm9vbCB7IC8vIG9rIQogICAgICAgIHRydWUKICAgIH0KfQpgYGAKRTAwNTNUaGUgcGFyYW1ldGVycyBvZiBhbnkgdHJhaXQgbWV0aG9kIG11c3QgbWF0Y2ggYmV0d2VlbiBhIHRyYWl0IGltcGxlbWVudGF0aW9uCmFuZCB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTMKdHJhaXQgRm9vIHsKICAgIGZuIGZvbyh4OiB1MTYpOwogICAgZm4gYmFyKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIGV4cGVjdGVkIHUxNiwgZm91bmQgaTE2CiAgICBmbiBmb28oeDogaTE2KSB7IH0KCiAgICAvLyBlcnJvciwgdHlwZXMgZGlmZmVyIGluIG11dGFiaWxpdHkKICAgIGZuIGJhcigmbXV0IHNlbGYpIHsgfQp9CmBgYApFMDA1NEl0IGlzIG5vdCBhbGxvd2VkIHRvIGNhc3QgdG8gYSBib29sLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA1NApsZXQgeCA9IDU7CgovLyBOb3QgYWxsb3dlZCwgd29uJ3QgY29tcGlsZQpsZXQgeF9pc19ub256ZXJvID0geCBhcyBib29sOwpgYGAKCklmIHlvdSBhcmUgdHJ5aW5nIHRvIGNhc3QgYSBudW1lcmljIHR5cGUgdG8gYSBib29sLCB5b3UgY2FuIGNvbXBhcmUgaXQgd2l0aAp6ZXJvIGluc3RlYWQ6CgpgYGAKbGV0IHggPSA1OwoKLy8gT2sKbGV0IHhfaXNfbm9uemVybyA9IHggIT0gMDsKYGBgCkUwMDU1RHVyaW5nIGEgbWV0aG9kIGNhbGwsIGEgdmFsdWUgaXMgYXV0b21hdGljYWxseSBkZXJlZmVyZW5jZWQgYXMgbWFueSB0aW1lcyBhcwpuZWVkZWQgdG8gbWFrZSB0aGUgdmFsdWUncyB0eXBlIG1hdGNoIHRoZSBtZXRob2QncyByZWNlaXZlci4gVGhlIGNhdGNoIGlzIHRoYXQKdGhlIGNvbXBpbGVyIHdpbGwgb25seSBhdHRlbXB0IHRvIGRlcmVmZXJlbmNlIGEgbnVtYmVyIG9mIHRpbWVzIHVwIHRvIHRoZQpyZWN1cnNpb24gbGltaXQgKHdoaWNoIGNhbiBiZSBzZXQgdmlhIHRoZSBgcmVjdXJzaW9uX2xpbWl0YCBhdHRyaWJ1dGUpLgoKRm9yIGEgc29tZXdoYXQgYXJ0aWZpY2lhbCBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU1CiMhW3JlY3Vyc2lvbl9saW1pdD0iNCJdCgpzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4gZm9vKCZzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbyA9IEZvbzsKICAgIGxldCByZWZfZm9vID0gJiYmJiZGb287CgogICAgLy8gZXJyb3IsIHJlYWNoZWQgdGhlIHJlY3Vyc2lvbiBsaW1pdCB3aGlsZSBhdXRvLWRlcmVmZXJlbmNpbmcgYCYmJiYmRm9vYAogICAgcmVmX2Zvby5mb28oKTsKfQpgYGAKCk9uZSBmaXggbWF5IGJlIHRvIGluY3JlYXNlIHRoZSByZWN1cnNpb24gbGltaXQuIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSB0bwpjcmVhdGUgYW4gaW5maW5pdGUgcmVjdXJzaW9uIG9mIGRlcmVmZXJlbmNpbmcsIGluIHdoaWNoIGNhc2UgdGhlIG9ubHkgZml4IGlzIHRvCnNvbWVob3cgYnJlYWsgdGhlIHJlY3Vyc2lvbi4KRTAwNTdBbiBpbnZhbGlkIG51bWJlciBvZiBhcmd1bWVudHMgd2FzIGdpdmVuIHdoZW4gY2FsbGluZyBhIGNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDU3CmxldCBmID0gfHh8IHggKiAzOwpsZXQgYSA9IGYoKTsgICAgICAgIC8vIGludmFsaWQsIHRvbyBmZXcgcGFyYW1ldGVycwpsZXQgYiA9IGYoNCk7ICAgICAgIC8vIHRoaXMgd29ya3MhCmxldCBjID0gZigyLCAzKTsgICAgLy8gaW52YWxpZCwgdG9vIG1hbnkgcGFyYW1ldGVycwpgYGAKCldoZW4gaW52b2tpbmcgY2xvc3VyZXMgb3Igb3RoZXIgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBmdW5jdGlvbiB0cmFpdHMgYEZuYCwKYEZuTXV0YCBvciBgRm5PbmNlYCB1c2luZyBjYWxsIG5vdGF0aW9uLCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgcGFzc2VkIHRvIHRoZQpmdW5jdGlvbiBtdXN0IG1hdGNoIGl0cyBkZWZpbml0aW9uLgoKQSBnZW5lcmljIGZ1bmN0aW9uIG11c3QgYmUgdHJlYXRlZCBzaW1pbGFybHk6CgpgYGAKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsKICAgIGYoKTsgLy8gdGhpcyBpcyB2YWxpZCwgYnV0IGYoMykgd291bGQgbm90IHdvcmsKfQpgYGAKRTAwNTlUaGUgYnVpbHQtaW4gZnVuY3Rpb24gdHJhaXRzIGFyZSBnZW5lcmljIG92ZXIgYSB0dXBsZSBvZiB0aGUgZnVuY3Rpb24gYXJndW1lbnRzLgpJZiBvbmUgdXNlcyBhbmdsZS1icmFja2V0IG5vdGF0aW9uIChgRm48KFQsKSwgT3V0cHV0PVU+YCkgaW5zdGVhZCBvZiBwYXJlbnRoZXNlcwooYEZuKFQpIC0+IFVgKSB0byBkZW5vdGUgdGhlIGZ1bmN0aW9uIHRyYWl0LCB0aGUgdHlwZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIGEKdHVwbGUuIE90aGVyd2lzZSBmdW5jdGlvbiBjYWxsIG5vdGF0aW9uIGNhbm5vdCBiZSB1c2VkIGFuZCB0aGUgdHJhaXQgd2lsbCBub3QgYmUKaW1wbGVtZW50ZWQgYnkgY2xvc3VyZXMuCgpUaGUgbW9zdCBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IgaXMgdXNpbmcgYW5nbGUtYnJhY2tldCBub3RhdGlvbiB3aXRob3V0CndyYXBwaW5nIHRoZSBmdW5jdGlvbiBhcmd1bWVudCB0eXBlIGludG8gYSB0dXBsZSwgZm9yIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNTkKIyFbZmVhdHVyZSh1bmJveGVkX2Nsb3N1cmVzKV0KCmZuIGZvbzxGOiBGbjxpMzI+PihmOiBGKSAtPiBGOjpPdXRwdXQgeyBmKDMpIH0KYGBgCgpJdCBjYW4gYmUgZml4ZWQgYnkgYWRqdXN0aW5nIHRoZSB0cmFpdCBib3VuZCBsaWtlIHRoaXM6CgpgYGAKIyFbZmVhdHVyZSh1bmJveGVkX2Nsb3N1cmVzKV0KCmZuIGZvbzxGOiBGbjwoaTMyLCk+PihmOiBGKSAtPiBGOjpPdXRwdXQgeyBmKDMpIH0KYGBgCgpOb3RlIHRoYXQgYChULClgIGFsd2F5cyBkZW5vdGVzIHRoZSB0eXBlIG9mIGEgMS10dXBsZSBjb250YWluaW5nIGFuIGVsZW1lbnQgb2YKdHlwZSBgVGAuIFRoZSBjb21tYSBpcyBuZWNlc3NhcnkgZm9yIHN5bnRhY3RpYyBkaXNhbWJpZ3VhdGlvbi4KRTAwNjBFeHRlcm5hbCBDIGZ1bmN0aW9ucyBhcmUgYWxsb3dlZCB0byBiZSB2YXJpYWRpYy4gSG93ZXZlciwgYSB2YXJpYWRpYyBmdW5jdGlvbgp0YWtlcyBhIG1pbmltdW0gbnVtYmVyIG9mIGFyZ3VtZW50cy4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIEMncyB2YXJpYWRpYyBgcHJpbnRmYApmdW5jdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MAp1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CgpleHRlcm4gIkMiIHsKICAgIGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50Owp9Cgp1bnNhZmUgeyBwcmludGYoKTsgfSAvLyBlcnJvciEKYGBgCgpVc2luZyB0aGlzIGRlY2xhcmF0aW9uLCBpdCBtdXN0IGJlIGNhbGxlZCB3aXRoIGF0IGxlYXN0IG9uZSBhcmd1bWVudCwgc28Kc2ltcGx5IGNhbGxpbmcgYHByaW50ZigpYCBpcyBpbnZhbGlkLiBCdXQgdGhlIGZvbGxvd2luZyB1c2VzIGFyZSBhbGxvd2VkOgoKYGBgCiMgdXNlIHN0ZDo6b3M6OnJhdzo6e2NfY2hhciwgY19pbnR9OwojICNbY2ZnX2F0dHIoYWxsKHdpbmRvd3MsIHRhcmdldF9lbnYgPSAibXN2YyIpLAojICAgICAgICAgICAgbGluayhuYW1lID0gImxlZ2FjeV9zdGRpb19kZWZpbml0aW9ucyIsCiMgICAgICAgICAgICAgICAgIGtpbmQgPSAic3RhdGljIiwgbW9kaWZpZXJzID0gIi1idW5kbGUiKSldCiMgZXh0ZXJuICJDIiB7IGZuIHByaW50ZihfOiAqY29uc3QgY19jaGFyLCAuLi4pIC0+IGNfaW50OyB9CiMgZm4gbWFpbigpIHsKdW5zYWZlIHsKICAgIHVzZSBzdGQ6OmZmaTo6Q1N0cmluZzsKCiAgICBsZXQgZm10ID0gQ1N0cmluZzo6bmV3KCJ0ZXN0XG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCkpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIm51bWJlciA9ICVkXG4iKS51bndyYXAoKTsKICAgIHByaW50ZihmbXQuYXNfcHRyKCksIDMpOwoKICAgIGxldCBmbXQgPSBDU3RyaW5nOjpuZXcoIiVkLCAlZFxuIikudW53cmFwKCk7CiAgICBwcmludGYoZm10LmFzX3B0cigpLCAxMCwgNSk7Cn0KIyB9CmBgYApFMDA2MUFuIGludmFsaWQgbnVtYmVyIG9mIGFyZ3VtZW50cyB3YXMgcGFzc2VkIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2MQpmbiBmKHU6IGkzMikge30KCmYoKTsgLy8gZXJyb3IhCmBgYAoKVGhlIG51bWJlciBvZiBhcmd1bWVudHMgcGFzc2VkIHRvIGEgZnVuY3Rpb24gbXVzdCBtYXRjaCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cwpzcGVjaWZpZWQgaW4gdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZS4KCkZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGxpa2U6CgpgYGAKZm4gZihhOiB1MTYsIGI6ICZzdHIpIHt9CmBgYAoKTXVzdCBhbHdheXMgYmUgY2FsbGVkIHdpdGggZXhhY3RseSB0d28gYXJndW1lbnRzLCBlLmcuLCBgZigyLCAidGVzdCIpYC4KCk5vdGUgdGhhdCBSdXN0IGRvZXMgbm90IGhhdmUgYSBub3Rpb24gb2Ygb3B0aW9uYWwgZnVuY3Rpb24gYXJndW1lbnRzIG9yCnZhcmlhZGljIGZ1bmN0aW9ucyAoZXhjZXB0IGZvciBpdHMgQy1GRkkpLgpFMDA2MkEgc3RydWN0J3Mgb3Igc3RydWN0LWxpa2UgZW51bSB2YXJpYW50J3MgZmllbGQgd2FzIHNwZWNpZmllZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNjIKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7CiAgICAgICAgICAgICAgICB4OiAwLAogICAgICAgICAgICAgICAgeDogMCwgLy8gZXJyb3I6IGZpZWxkIGB4YCBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UKICAgICAgICAgICAgfTsKfQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgZHVyaW5nIGFuIGF0dGVtcHQgdG8gYnVpbGQgYSBzdHJ1Y3Qgb3Igc3RydWN0LWxpa2UKZW51bSB2YXJpYW50LCBvbmUgb2YgdGhlIGZpZWxkcyB3YXMgc3BlY2lmaWVkIG1vcmUgdGhhbiBvbmNlLiBFYWNoIGZpZWxkIHNob3VsZApiZSBzcGVjaWZpZWQgZXhhY3RseSBvbmUgdGltZS4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gRm9vIHsgeDogMCB9OyAvLyBvayEKfQpgYGAKRTAwNjNBIHN0cnVjdCdzIG9yIHN0cnVjdC1saWtlIGVudW0gdmFyaWFudCdzIGZpZWxkIHdhcyBub3QgcHJvdmlkZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDYzCnN0cnVjdCBGb28gewogICAgeDogaTMyLAogICAgeTogaTMyLAp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBGb28geyB4OiAwIH07IC8vIGVycm9yOiBtaXNzaW5nIGZpZWxkOiBgeWAKfQpgYGAKCkVhY2ggZmllbGQgc2hvdWxkIGJlIHNwZWNpZmllZCBleGFjdGx5IG9uY2UuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICB4OiBpMzIsCiAgICB5OiBpMzIsCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IEZvbyB7IHg6IDAsIHk6IDAgfTsgLy8gb2shCn0KYGBgCkUwMDY3QW4gaW52YWxpZCBsZWZ0LWhhbmQgc2lkZSBleHByZXNzaW9uIHdhcyB1c2VkIG9uIGFuIGFzc2lnbm1lbnQgb3BlcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2NwoxMiArPSAxOyAvLyBlcnJvciEKYGBgCgpZb3UgbmVlZCB0byBoYXZlIGEgcGxhY2UgZXhwcmVzc2lvbiB0byBiZSBhYmxlIHRvIGFzc2lnbiBpdCBzb21ldGhpbmcuIEZvcgpleGFtcGxlOgoKYGBgCmxldCBtdXQgeDogaTggPSAxMjsKeCArPSAxOyAvLyBvayEKYGBgCkUwMDY5VGhlIGNvbXBpbGVyIGZvdW5kIGEgZnVuY3Rpb24gd2hvc2UgYm9keSBjb250YWlucyBhIGByZXR1cm47YCBzdGF0ZW1lbnQgYnV0Cndob3NlIHJldHVybiB0eXBlIGlzIG5vdCBgKClgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA2OQovLyBlcnJvcgpmbiBmb28oKSAtPiB1OCB7CiAgICByZXR1cm47Cn0KYGBgCgpTaW5jZSBgcmV0dXJuO2AgaXMganVzdCBsaWtlIGByZXR1cm4gKCk7YCwgdGhlcmUgaXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZQpmdW5jdGlvbidzIHJldHVybiB0eXBlIGFuZCB0aGUgdmFsdWUgYmVpbmcgcmV0dXJuZWQuCkUwMDcwQW4gYXNzaWdubWVudCBvcGVyYXRvciB3YXMgdXNlZCBvbiBhIG5vbi1wbGFjZSBleHByZXNzaW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzAKc3RydWN0IFNvbWVTdHJ1Y3QgewogICAgeDogaTMyLAogICAgeTogaTMyLAp9Cgpjb25zdCBTT01FX0NPTlNUOiBpMzIgPSAxMjsKCmZuIHNvbWVfb3RoZXJfZnVuYygpIHt9CgpmbiBzb21lX2Z1bmN0aW9uKCkgewogICAgU09NRV9DT05TVCA9IDE0OyAvLyBlcnJvcjogYSBjb25zdGFudCB2YWx1ZSBjYW5ub3QgYmUgY2hhbmdlZCEKICAgIDEgPSAzOyAvLyBlcnJvcjogMSBpc24ndCBhIHZhbGlkIHBsYWNlIQogICAgc29tZV9vdGhlcl9mdW5jKCkgPSA0OyAvLyBlcnJvcjogd2UgY2Fubm90IGFzc2lnbiB2YWx1ZSB0byBhIGZ1bmN0aW9uIQogICAgU29tZVN0cnVjdDo6eCA9IDEyOyAvLyBlcnJvcjogU29tZVN0cnVjdCBhIHN0cnVjdHVyZSBuYW1lIGJ1dCBpdCBpcyB1c2VkCiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBsaWtlIGEgdmFyaWFibGUhCn0KYGBgCgpUaGUgbGVmdC1oYW5kIHNpZGUgb2YgYW4gYXNzaWdubWVudCBvcGVyYXRvciBtdXN0IGJlIGEgcGxhY2UgZXhwcmVzc2lvbi4gQQpwbGFjZSBleHByZXNzaW9uIHJlcHJlc2VudHMgYSBtZW1vcnkgbG9jYXRpb24gYW5kIGNhbiBiZSBhIHZhcmlhYmxlICh3aXRoCm9wdGlvbmFsIG5hbWVzcGFjaW5nKSwgYSBkZXJlZmVyZW5jZSwgYW4gaW5kZXhpbmcgZXhwcmVzc2lvbiBvciBhIGZpZWxkCnJlZmVyZW5jZS4KCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gdGhlIFtFeHByZXNzaW9uc10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW0V4cHJlc3Npb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMuaHRtbCNwbGFjZXMtcnZhbHVlcy1hbmQtdGVtcG9yYXJpZXMKCkFuZCBub3cgbGV0J3MgZ2l2ZSB3b3JraW5nIGV4YW1wbGVzOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIHg6IGkzMiwKICAgIHk6IGkzMiwKfQpsZXQgbXV0IHMgPSBTb21lU3RydWN0IHsgeDogMCwgeTogMCB9OwoKcy54ID0gMzsgLy8gdGhhdCdzIGdvb2QgIQoKLy8gLi4uCgpmbiBzb21lX2Z1bmMoeDogJm11dCBpMzIpIHsKICAgICp4ID0gMTI7IC8vIHRoYXQncyBnb29kICEKfQpgYGAKRTAwNzFBIHN0cnVjdHVyZS1saXRlcmFsIHN5bnRheCB3YXMgdXNlZCB0byBjcmVhdGUgYW4gaXRlbSB0aGF0IGlzIG5vdCBhIHN0cnVjdHVyZQpvciBlbnVtIHZhcmlhbnQuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcxCnR5cGUgVTMyID0gdTMyOwpsZXQgdCA9IFUzMiB7IHZhbHVlOiA0IH07IC8vIGVycm9yOiBleHBlY3RlZCBzdHJ1Y3QsIHZhcmlhbnQgb3IgdW5pb24gdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBidWlsdGluIHR5cGUgYHUzMmAKYGBgCgpUbyBmaXggdGhpcywgZW5zdXJlIHRoYXQgdGhlIG5hbWUgd2FzIGNvcnJlY3RseSBzcGVsbGVkLCBhbmQgdGhhdCB0aGUgY29ycmVjdApmb3JtIG9mIGluaXRpYWxpemVyIHdhcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHRoZSBjb2RlIGFib3ZlIGNhbiBiZSBmaXhlZCB0bzoKCmBgYAp0eXBlIFUzMiA9IHUzMjsKbGV0IHQ6IFUzMiA9IDQ7CmBgYAoKb3I6CgpgYGAKc3RydWN0IFUzMiB7IHZhbHVlOiB1MzIgfQpsZXQgdCA9IFUzMiB7IHZhbHVlOiA0IH07CmBgYApFMDA3MkEgcmVjdXJzaXZlIHR5cGUgaGFzIGluZmluaXRlIHNpemUgYmVjYXVzZSBpdCBkb2Vzbid0IGhhdmUgYW4gaW5kaXJlY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDcyCnN0cnVjdCBMaXN0Tm9kZSB7CiAgICBoZWFkOiB1OCwKICAgIHRhaWw6IE9wdGlvbjxMaXN0Tm9kZT4sIC8vIGVycm9yOiBubyBpbmRpcmVjdGlvbiBoZXJlIHNvIGltcG9zc2libGUgdG8KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBjb21wdXRlIHRoZSB0eXBlJ3Mgc2l6ZQp9CmBgYAoKV2hlbiBkZWZpbmluZyBhIHJlY3Vyc2l2ZSBzdHJ1Y3Qgb3IgZW51bSwgYW55IHVzZSBvZiB0aGUgdHlwZSBiZWluZyBkZWZpbmVkCmZyb20gaW5zaWRlIHRoZSBkZWZpbml0aW9uIG11c3Qgb2NjdXIgYmVoaW5kIGEgcG9pbnRlciAobGlrZSBgQm94YCwgYCZgIG9yCmBSY2ApLiBUaGlzIGlzIGJlY2F1c2Ugc3RydWN0cyBhbmQgZW51bXMgbXVzdCBoYXZlIGEgd2VsbC1kZWZpbmVkIHNpemUsIGFuZAp3aXRob3V0IHRoZSBwb2ludGVyLCB0aGUgc2l6ZSBvZiB0aGUgdHlwZSB3b3VsZCBuZWVkIHRvIGJlIHVuYm91bmRlZC4KCkluIHRoZSBleGFtcGxlLCB0aGUgdHlwZSBjYW5ub3QgaGF2ZSBhIHdlbGwtZGVmaW5lZCBzaXplLCBiZWNhdXNlIGl0IG5lZWRzIHRvIGJlCmFyYml0cmFyaWx5IGxhcmdlIChzaW5jZSB3ZSB3b3VsZCBiZSBhYmxlIHRvIG5lc3QgYExpc3ROb2RlYHMgdG8gYW55IGRlcHRoKS4KU3BlY2lmaWNhbGx5LAoKYGBgcGxhaW4Kc2l6ZSBvZiBgTGlzdE5vZGVgID0gMSBieXRlIGZvciBgaGVhZGAKICAgICAgICAgICAgICAgICAgICsgMSBieXRlIGZvciB0aGUgZGlzY3JpbWluYW50IG9mIHRoZSBgT3B0aW9uYAogICAgICAgICAgICAgICAgICAgKyBzaXplIG9mIGBMaXN0Tm9kZWAKYGBgCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIGJ5IHdyYXBwaW5nIGBMaXN0Tm9kZWAgaW4gYSBgQm94YCwgbGlrZSBzbzoKCmBgYApzdHJ1Y3QgTGlzdE5vZGUgewogICAgaGVhZDogdTgsCiAgICB0YWlsOiBPcHRpb248Qm94PExpc3ROb2RlPj4sCn0KYGBgCgpUaGlzIHdvcmtzIGJlY2F1c2UgYEJveGAgaXMgYSBwb2ludGVyLCBzbyBpdHMgc2l6ZSBpcyB3ZWxsLWtub3duLgpFMDA3MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBjYW5ub3QgZGVmaW5lIGEgc3RydWN0IChvciBlbnVtKSBgRm9vYCB0aGF0IHJlcXVpcmVzIGFuIGluc3RhbmNlIG9mIGBGb29gCmluIG9yZGVyIHRvIG1ha2UgYSBuZXcgYEZvb2AgdmFsdWUuIFRoaXMgaXMgYmVjYXVzZSB0aGVyZSB3b3VsZCBiZSBubyB3YXkgYQpmaXJzdCBpbnN0YW5jZSBvZiBgRm9vYCBjb3VsZCBiZSBtYWRlIHRvIGluaXRpYWxpemUgYW5vdGhlciBpbnN0YW5jZSEKCkhlcmUncyBhbiBleGFtcGxlIG9mIGEgc3RydWN0IHRoYXQgaGFzIHRoaXMgcHJvYmxlbToKCmBgYApzdHJ1Y3QgRm9vIHsgeDogQm94PEZvbz4gfSAvLyBlcnJvcgpgYGAKCk9uZSBmaXggaXMgdG8gdXNlIGBPcHRpb25gLCBsaWtlIHNvOgoKYGBgCnN0cnVjdCBGb28geyB4OiBPcHRpb248Qm94PEZvbz4+IH0KYGBgCgpOb3cgaXQncyBwb3NzaWJsZSB0byBjcmVhdGUgYXQgbGVhc3Qgb25lIGluc3RhbmNlIG9mIGBGb29gOiBgRm9vIHsgeDogTm9uZSB9YC4KRTAwNzQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgY29tcG9uZW50cyBvZiB0aGUKdHVwbGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIGEgY29uY3JldGUsIG5vbmdlbmVyaWMgdHlwZSBzbyB0aGUgY29tcGlsZXIgY2FuCnJlYXNvbiBhYm91dCBob3cgdG8gdXNlIFNJTUQgd2l0aCB0aGVtLiBUaGlzIGVycm9yIHdpbGwgb2NjdXIgaWYgdGhlIHR5cGVzCmFyZSBnZW5lcmljLgoKVGhpcyB3aWxsIGNhdXNlIGFuIGVycm9yOgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZDxUPihULCBULCBULCBUKTsKYGBgCgpUaGlzIHdpbGwgbm90OgoKYGBgCiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEdvb2QodTMyLCB1MzIsIHUzMiwgdTMyKTsKYGBgCkUwMDc1QSBgI1tzaW1kXWAgYXR0cmlidXRlIHdhcyBhcHBsaWVkIHRvIGFuIGVtcHR5IHR1cGxlIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwNzUKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgQmFkOyAvLyBlcnJvciEKYGBgCgpUaGUgYCNbc2ltZF1gIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIG5vbiBlbXB0eSB0dXBsZSBzdHJ1Y3RzLCBiZWNhdXNlCml0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB0cnkgdG8gdXNlIFNJTUQgb3BlcmF0aW9ucyB3aGVuIHRoZXJlIGFyZSBubyB2YWx1ZXMgdG8Kb3BlcmF0ZSBvbi4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIpOyAvLyBvayEKYGBgCkUwMDc2QWxsIHR5cGVzIGluIGEgdHVwbGUgc3RydWN0IGFyZW4ndCB0aGUgc2FtZSB3aGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAKYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA3NgojIVtmZWF0dXJlKHJlcHJfc2ltZCldCgojW3JlcHIoc2ltZCldCnN0cnVjdCBCYWQodTE2LCB1MzIsIHUzMiB1MzIpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIHRvIGF1dG9tYXRpY2FsbHkgdXNlIFNJTUQgb3BlcmF0aW9ucyBpbiB0dXBsZQpzdHJ1Y3QsIHRoZSB0eXBlcyBpbiB0aGUgc3RydWN0IG11c3QgYWxsIGJlIG9mIHRoZSBzYW1lIHR5cGUsIG9yIHRoZSBjb21waWxlcgp3aWxsIHRyaWdnZXIgdGhpcyBlcnJvci4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCkUwMDc3QSB0dXBsZSBzdHJ1Y3QncyBlbGVtZW50IGlzbid0IGEgbWFjaGluZSB0eXBlIHdoZW4gdXNpbmcgdGhlIGAjW3NpbWRdYAphdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDc3CiMhW2ZlYXR1cmUocmVwcl9zaW1kKV0KCiNbcmVwcihzaW1kKV0Kc3RydWN0IEJhZChTdHJpbmcpOyAvLyBlcnJvciEKYGBgCgpXaGVuIHVzaW5nIHRoZSBgI1tzaW1kXWAgYXR0cmlidXRlIG9uIGEgdHVwbGUgc3RydWN0LCB0aGUgZWxlbWVudHMgaW4gdGhlIHR1cGxlCm11c3QgYmUgbWFjaGluZSB0eXBlcyBzbyBTSU1EIG9wZXJhdGlvbnMgY2FuIGJlIGFwcGxpZWQgdG8gdGhlbS4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShyZXByX3NpbWQpXQoKI1tyZXByKHNpbWQpXQpzdHJ1Y3QgR29vZCh1MzIsIHUzMiwgdTMyLCB1MzIpOyAvLyBvayEKYGBgCkUwMDgwQSBjb25zdGFudCB2YWx1ZSBmYWlsZWQgdG8gZ2V0IGV2YWx1YXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwODAKZW51bSBFbnVtIHsKICAgIFggPSAoMSA8PCA1MDApLAogICAgWSA9ICgxIC8gMCksCn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciB3YXMgdW5hYmxlIHRvIHNlbnNpYmx5IGV2YWx1YXRlIGEKY29uc3RhbnQgZXhwcmVzc2lvbiB0aGF0IGhhZCB0byBiZSBldmFsdWF0ZWQuIEF0dGVtcHRpbmcgdG8gZGl2aWRlIGJ5IDAKb3IgY2F1c2luZyBhbiBpbnRlZ2VyIG92ZXJmbG93IGFyZSB0d28gd2F5cyB0byBpbmR1Y2UgdGhpcyBlcnJvci4KCkVuc3VyZSB0aGF0IHRoZSBleHByZXNzaW9ucyBnaXZlbiBjYW4gYmUgZXZhbHVhdGVkIGFzIHRoZSBkZXNpcmVkIGludGVnZXIgdHlwZS4KClNlZSB0aGUgW0N1c3RvbSBEaXNjcmltaW5hbnRzXVtjdXN0b20tZGlzY3JpbWluYW50c10gc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlCmZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHNldHRpbmcgY3VzdG9tIGludGVnZXIgdHlwZXMgb24gZmllbGRsZXNzIGVudW1zCnVzaW5nIHRoZSBbYHJlcHJgIGF0dHJpYnV0ZV1bcmVwci1hdHRyaWJ1dGVdLgoKW2N1c3RvbS1kaXNjcmltaW5hbnRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvZW51bWVyYXRpb25zLmh0bWwjY3VzdG9tLWRpc2NyaW1pbmFudC12YWx1ZXMtZm9yLWZpZWxkLWxlc3MtZW51bWVyYXRpb25zCltyZXByLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGUtbGF5b3V0Lmh0bWwjcmVwcmMtZW51bXMKRTAwODFBIGRpc2NyaW1pbmFudCB2YWx1ZSBpcyBwcmVzZW50IG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA4MQplbnVtIEVudW0gewogICAgUCA9IDMsCiAgICBYID0gMywgLy8gZXJyb3IhCiAgICBZID0gNSwKfQpgYGAKCkVudW0gZGlzY3JpbWluYW50cyBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIGVudW0gdmFyaWFudHMgc3RvcmVkIGluIG1lbW9yeS4KVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB0aGUgc2FtZSB2YWx1ZSB3YXMgdXNlZCBmb3IgdHdvIG9yIG1vcmUgdmFyaWFudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRpc3Rpbmd1aXNoIHRoZW0uCgpgYGAKZW51bSBFbnVtIHsKICAgIFAsCiAgICBYID0gMywgLy8gb2shCiAgICBZID0gNSwKfQpgYGAKCk5vdGUgdGhhdCB2YXJpYW50cyB3aXRob3V0IGEgbWFudWFsbHkgc3BlY2lmaWVkIGRpc2NyaW1pbmFudCBhcmUgbnVtYmVyZWQgZnJvbQp0b3AgdG8gYm90dG9tIHN0YXJ0aW5nIGZyb20gMCwgc28gY2xhc2hlcyBjYW4gb2NjdXIgd2l0aCBzZWVtaW5nbHkgdW5yZWxhdGVkCnZhcmlhbnRzLgoKYGBgY29tcGlsZV9mYWlsLEUwMDgxCmVudW0gQmFkIHsKICAgIFgsCiAgICBZID0gMCwgLy8gZXJyb3IhCn0KYGBgCgpIZXJlIGBYYCB3aWxsIGhhdmUgYWxyZWFkeSBiZWVuIHNwZWNpZmllZCB0aGUgZGlzY3JpbWluYW50IDAgYnkgdGhlIHRpbWUgYFlgIGlzCmVuY291bnRlcmVkLCBzbyBhIGNvbmZsaWN0IG9jY3Vycy4KRTAwODRBbiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiB3YXMgYXR0ZW1wdGVkIG9uIGEgemVyby12YXJpYW50IGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDg0CiNbcmVwcihpMzIpXQplbnVtIE5pZ2h0c1dhdGNoIHt9IC8vIGVycm9yOiB1bnN1cHBvcnRlZCByZXByZXNlbnRhdGlvbiBmb3IgemVyby12YXJpYW50IGVudW0KYGBgCgpJdCBpcyBpbXBvc3NpYmxlIHRvIGRlZmluZSBhbiBpbnRlZ2VyIHR5cGUgdG8gYmUgdXNlZCB0byByZXByZXNlbnQgemVyby12YXJpYW50CmVudW0gdmFsdWVzIGJlY2F1c2UgdGhlcmUgYXJlIG5vIHplcm8tdmFyaWFudCBlbnVtIHZhbHVlcy4gVGhlcmUgaXMgbm8gd2F5IHRvCmNvbnN0cnVjdCBhbiBpbnN0YW5jZSBvZiB0aGUgZm9sbG93aW5nIHR5cGUgdXNpbmcgb25seSBzYWZlIGNvZGUuIFNvIHlvdSBoYXZlCnR3byBzb2x1dGlvbnMuIEVpdGhlciB5b3UgYWRkIHZhcmlhbnRzIGluIHlvdXIgZW51bToKCmBgYAojW3JlcHIoaTMyKV0KZW51bSBOaWdodHNXYXRjaCB7CiAgICBKb25Tbm93LAogICAgQ29tbWFuZGVyLAp9CmBgYAoKb3IgeW91IHJlbW92ZSB0aGUgaW50ZWdlciByZXByZXNlbnRhdGlvbiBvZiB5b3VyIGVudW06CgpgYGAKZW51bSBOaWdodHNXYXRjaCB7fQpgYGAKRTAwODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUb28gbWFueSB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VD4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2NCwgYm9vbD4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDIKfQpgYGAKClRoZSBudW1iZXIgb2Ygc3VwcGxpZWQgYXJndW1lbnRzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgbnVtYmVyIG9mIGRlZmluZWQgdHlwZQpwYXJhbWV0ZXJzLgpFMDA4OCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSBnYXZlIHRvbyBtYW55IGxpZmV0aW1lIGFyZ3VtZW50cy4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmKCkge30KCmZuIG1haW4oKSB7CiAgICBmOjo8J3N0YXRpYz4oKSAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAwLCBmb3VuZCAxCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGdpdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGAKZm4gZigpIHt9CgpmbiBtYWluKCkgewogICAgZigpIC8vIG9rIQp9CmBgYAoKSXQncyBhbHNvIGltcG9ydGFudCB0byBub3RlIHRoYXQgdGhlIFJ1c3QgY29tcGlsZXIgY2FuIGdlbmVyYWxseQpkZXRlcm1pbmUgdGhlIGxpZmV0aW1lIGJ5IGl0c2VsZi4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiBTdHJpbmcKfQoKaW1wbCBGb28gewogICAgLy8gaXQgY2FuIGJlIHdyaXR0ZW4gbGlrZSB0aGlzCiAgICBmbiBnZXRfdmFsdWU8J2E+KCYnYSBzZWxmKSAtPiAmJ2Egc3RyIHsgJnNlbGYudmFsdWUgfQogICAgLy8gYnV0IHRoZSBjb21waWxlciB3b3JrcyBmaW5lIHdpdGggdGhpcyB0b286CiAgICBmbiB3aXRob3V0X2xpZmV0aW1lKCZzZWxmKSAtPiAmc3RyIHsgJnNlbGYudmFsdWUgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb28geyB2YWx1ZTogImhlbGxvIi50b19vd25lZCgpIH07CgogICAgcHJpbnRsbiEoInt9IiwgZi5nZXRfdmFsdWUoKSk7CiAgICBwcmludGxuISgie30iLCBmLndpdGhvdXRfbGlmZXRpbWUoKSk7Cn0KYGBgCkUwMDg5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVG9vIGZldyB0eXBlIGFyZ3VtZW50cyB3ZXJlIHN1cHBsaWVkIGZvciBhIGZ1bmN0aW9uLiBGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288VCwgVT4oKSB7fQoKZm4gbWFpbigpIHsKICAgIGZvbzo6PGY2ND4oKTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czogZXhwZWN0ZWQgMiwgZm91bmQgMQp9CmBgYAoKTm90ZSB0aGF0IGlmIGEgZnVuY3Rpb24gdGFrZXMgbXVsdGlwbGUgdHlwZSBhcmd1bWVudHMgYnV0IHlvdSB3YW50IHRoZSBjb21waWxlcgp0byBpbmZlciBzb21lIG9mIHRoZW0sIHlvdSBjYW4gdXNlIHR5cGUgcGxhY2Vob2xkZXJzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CmZuIGZvbzxULCBVPih4OiBUKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGY2ND4oeCk7ICAgIC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMiwgZm91bmQgMQogICAgZm9vOjo8XywgZjY0Pih4KTsgLy8gc2FtZSBhcyBgZm9vOjo8Ym9vbCwgZjY0Pih4KWAKfQpgYGAKRTAwOTAjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgZ2F2ZSB0b28gZmV3IGxpZmV0aW1lIGFyZ3VtZW50cy4gRXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNwpmbiBmb288J2E6ICdiLCAnYjogJ2E+KCkge30KCmZuIG1haW4oKSB7CiAgICBmb286Ojwnc3RhdGljPigpOyAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIGxpZmV0aW1lIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBleHBlY3RlZCAyLCBmb3VuZCAxCn0KYGBgCgpQbGVhc2UgY2hlY2sgeW91IGdpdmUgdGhlIHJpZ2h0IG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMuIEV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhOiAnYiwgJ2I6ICdhPigpIHt9CgpmbiBtYWluKCkgewogICAgZm9vOjo8J3N0YXRpYywgJ3N0YXRpYz4oKTsKfQpgYGAKRTAwOTFBbiB1bm5lY2Vzc2FyeSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlciB3YXMgZ2l2ZW4gaW4gYSB0eXBlIGFsaWFzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MQp0eXBlIEZvbzxUPiA9IHUzMjsgLy8gZXJyb3I6IHR5cGUgcGFyYW1ldGVyIGBUYCBpcyB1bnVzZWQKLy8gb3I6CnR5cGUgRm9vPEEsQj4gPSBCb3g8QT47IC8vIGVycm9yOiB0eXBlIHBhcmFtZXRlciBgQmAgaXMgdW51c2VkCmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3Qgd3JpdGUgdG9vIG1hbnkgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYAp0eXBlIEZvbyA9IHUzMjsgLy8gb2shCnR5cGUgRm9vMjxBPiA9IEJveDxBPjsgLy8gb2shCmBgYApFMDA5MkFuIHVuZGVmaW5lZCBhdG9taWMgb3BlcmF0aW9uIGZ1bmN0aW9uIHdhcyBkZWNsYXJlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAwOTIKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mb28oKTsgLy8gZXJyb3I6IHVucmVjb2duaXplZCBhdG9taWMgb3BlcmF0aW9uCiAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBmdW5jdGlvbgp9CmBgYAoKUGxlYXNlIGNoZWNrIHlvdSBkaWRuJ3QgbWFrZSBhIG1pc3Rha2UgaW4gdGhlIGZ1bmN0aW9uJ3MgbmFtZS4gQWxsIGludHJpbnNpYwpmdW5jdGlvbnMgYXJlIGRlZmluZWQgaW4gYGNvbXBpbGVyL3J1c3RjX2NvZGVnZW5fbGx2bS9zcmMvaW50cmluc2ljLnJzYCBhbmQgaW4KYGxpYnJhcnkvY29yZS9zcmMvaW50cmluc2ljcy5yc2AgaW4gdGhlIFJ1c3Qgc291cmNlIGNvZGUuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShpbnRyaW5zaWNzKV0KCmV4dGVybiAicnVzdC1pbnRyaW5zaWMiIHsKICAgIGZuIGF0b21pY19mZW5jZV9zZXFjc3QoKTsgLy8gb2shCn0KYGBgCkUwMDkzQW4gdW5rbm93biBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIGRlY2xhcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5MwojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgZm4gZm9vKCk7IC8vIGVycm9yOiB1bnJlY29nbml6ZWQgaW50cmluc2ljIGZ1bmN0aW9uOiBgZm9vYAp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBmb28oKTsKICAgIH0KfQpgYGAKClBsZWFzZSBjaGVjayB5b3UgZGlkbid0IG1ha2UgYSBtaXN0YWtlIGluIHRoZSBmdW5jdGlvbidzIG5hbWUuIEFsbCBpbnRyaW5zaWMKZnVuY3Rpb25zIGFyZSBkZWZpbmVkIGluIGBjb21waWxlci9ydXN0Y19jb2RlZ2VuX2xsdm0vc3JjL2ludHJpbnNpYy5yc2AgYW5kIGluCmBsaWJyYXJ5L2NvcmUvc3JjL2ludHJpbnNpY3MucnNgIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBmbiBhdG9taWNfZmVuY2Vfc2VxY3N0KCk7IC8vIG9rIQp9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBhdG9taWNfZmVuY2Vfc2VxY3N0KCk7CiAgICB9Cn0KYGBgCkUwMDk0QW4gaW52YWxpZCBudW1iZXIgb2YgZ2VuZXJpYyBwYXJhbWV0ZXJzIHdhcyBwYXNzZWQgdG8gYW4gaW50cmluc2ljIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDA5NAojIVtmZWF0dXJlKGludHJpbnNpY3MpXQoKZXh0ZXJuICJydXN0LWludHJpbnNpYyIgewogICAgI1tydXN0Y19zYWZlX2ludHJpbnNpY10KICAgIGZuIHNpemVfb2Y8VCwgVT4oKSAtPiB1c2l6ZTsgLy8gZXJyb3I6IGludHJpbnNpYyBoYXMgd3JvbmcgbnVtYmVyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBvZiB0eXBlIHBhcmFtZXRlcnMKfQpgYGAKClBsZWFzZSBjaGVjayB0aGF0IHlvdSBwcm92aWRlZCB0aGUgcmlnaHQgbnVtYmVyIG9mIHR5cGUgcGFyYW1ldGVycwphbmQgdmVyaWZ5IHdpdGggdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIGluIHRoZSBSdXN0IHNvdXJjZSBjb2RlLgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKRTAxMDZUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbGlmZXRpbWUgaXMgbWlzc2luZyBmcm9tIGEgdHlwZS4gSWYgaXQgaXMgYW4gZXJyb3IKaW5zaWRlIGEgZnVuY3Rpb24gc2lnbmF0dXJlLCB0aGUgcHJvYmxlbSBtYXkgYmUgd2l0aCBmYWlsaW5nIHRvIGFkaGVyZSB0byB0aGUKbGlmZXRpbWUgZWxpc2lvbiBydWxlcyAoc2VlIGJlbG93KS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA2CnN0cnVjdCBGb28xIHsgeDogJmJvb2wgfQogICAgICAgICAgICAgIC8vIF4gZXhwZWN0ZWQgbGlmZXRpbWUgcGFyYW1ldGVyCnN0cnVjdCBGb28yPCdhPiB7IHg6ICYnYSBib29sIH0gLy8gY29ycmVjdAoKc3RydWN0IEJhcjEgeyB4OiBGb28yIH0KICAgICAgICAgICAgICAvLyBeXl5eIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgpzdHJ1Y3QgQmFyMjwnYT4geyB4OiBGb28yPCdhPiB9IC8vIGNvcnJlY3QKCmVudW0gQmF6MSB7IEEodTgpLCBCKCZib29sKSwgfQogICAgICAgICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgplbnVtIEJhejI8J2E+IHsgQSh1OCksIEIoJidhIGJvb2wpLCB9IC8vIGNvcnJlY3QKCnR5cGUgTXlTdHIxID0gJnN0cjsKICAgICAgICAgICAvLyBeIGV4cGVjdGVkIGxpZmV0aW1lIHBhcmFtZXRlcgp0eXBlIE15U3RyMjwnYT4gPSAmJ2Egc3RyOyAvLyBjb3JyZWN0CmBgYAoKTGlmZXRpbWUgZWxpc2lvbiBpcyBhIHNwZWNpYWwsIGxpbWl0ZWQga2luZCBvZiBpbmZlcmVuY2UgZm9yIGxpZmV0aW1lcyBpbgpmdW5jdGlvbiBzaWduYXR1cmVzIHdoaWNoIGFsbG93cyB5b3UgdG8gbGVhdmUgb3V0IGxpZmV0aW1lcyBpbiBjZXJ0YWluIGNhc2VzLgpGb3IgbW9yZSBiYWNrZ3JvdW5kIG9uIGxpZmV0aW1lIGVsaXNpb24gc2VlIFt0aGUgYm9va11bYm9vay1sZV0uCgpUaGUgbGlmZXRpbWUgZWxpc2lvbiBydWxlcyByZXF1aXJlIHRoYXQgYW55IGZ1bmN0aW9uIHNpZ25hdHVyZSB3aXRoIGFuIGVsaWRlZApvdXRwdXQgbGlmZXRpbWUgbXVzdCBlaXRoZXIgaGF2ZToKCiAtIGV4YWN0bHkgb25lIGlucHV0IGxpZmV0aW1lCiAtIG9yLCBtdWx0aXBsZSBpbnB1dCBsaWZldGltZXMsIGJ1dCB0aGUgZnVuY3Rpb24gbXVzdCBhbHNvIGJlIGEgbWV0aG9kIHdpdGggYQogICBgJnNlbGZgIG9yIGAmbXV0IHNlbGZgIHJlY2VpdmVyCgpJbiB0aGUgZmlyc3QgY2FzZSwgdGhlIG91dHB1dCBsaWZldGltZSBpcyBpbmZlcnJlZCB0byBiZSB0aGUgc2FtZSBhcyB0aGUgdW5pcXVlCmlucHV0IGxpZmV0aW1lLiBJbiB0aGUgc2Vjb25kIGNhc2UsIHRoZSBsaWZldGltZSBpcyBpbnN0ZWFkIGluZmVycmVkIHRvIGJlIHRoZQpzYW1lIGFzIHRoZSBsaWZldGltZSBvbiBgJnNlbGZgIG9yIGAmbXV0IHNlbGZgLgoKSGVyZSBhcmUgc29tZSBleGFtcGxlcyBvZiBlbGlzaW9uIGVycm9yczoKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNgovLyBlcnJvciwgbm8gaW5wdXQgbGlmZXRpbWVzCmZuIGZvbygpIC0+ICZzdHIgeyB9CgovLyBlcnJvciwgYHhgIGFuZCBgeWAgaGF2ZSBkaXN0aW5jdCBsaWZldGltZXMgaW5mZXJyZWQKZm4gYmFyKHg6ICZzdHIsIHk6ICZzdHIpIC0+ICZzdHIgeyB9CgovLyBlcnJvciwgYHlgJ3MgbGlmZXRpbWUgaXMgaW5mZXJyZWQgdG8gYmUgZGlzdGluY3QgZnJvbSBgeGAncwpmbiBiYXo8J2E+KHg6ICYnYSBzdHIsIHk6ICZzdHIpIC0+ICZzdHIgeyB9CmBgYAoKW2Jvb2stbGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMy1saWZldGltZS1zeW50YXguaHRtbCNsaWZldGltZS1lbGlzaW9uCkUwMTA3QW4gaW5jb3JyZWN0IG51bWJlciBvZiBnZW5lcmljIGFyZ3VtZW50cyB3YXMgcHJvdmlkZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb288VD4geyB4OiBUIH0KCnN0cnVjdCBCYXIgeyB4OiBGb28gfSAgICAgICAgICAgICAvLyBlcnJvcjogd3JvbmcgbnVtYmVyIG9mIHR5cGUgYXJndW1lbnRzOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDEsIGZvdW5kIDAKc3RydWN0IEJhejxTLCBUPiB7IHg6IEZvbzxTLCBUPiB9IC8vIGVycm9yOiB3cm9uZyBudW1iZXIgb2YgdHlwZSBhcmd1bWVudHM6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZXhwZWN0ZWQgMSwgZm91bmQgMgoKZm4gZm9vPFQsIFU+KHg6IFQsIHk6IFUpIHt9CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGJvb2w+KHgpOyAgICAgICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDEKICAgIGZvbzo6PGJvb2wsIGkzMiwgaTMyPih4LCAyLCA0KTsgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiB0eXBlIGFyZ3VtZW50czoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDIsIGZvdW5kIDMKICAgIGY6Ojwnc3RhdGljPigpOyAgICAgICAgICAgICAgICAgLy8gZXJyb3I6IHdyb25nIG51bWJlciBvZiBsaWZldGltZSBhcmd1bWVudHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGV4cGVjdGVkIDAsIGZvdW5kIDEKfQpgYGAKCldoZW4gdXNpbmcvZGVjbGFyaW5nIGFuIGl0ZW0gd2l0aCBnZW5lcmljIGFyZ3VtZW50cywgeW91IG11c3QgcHJvdmlkZSB0aGUgZXhhY3QKc2FtZSBudW1iZXI6CgpgYGAKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhcjxUPiB7IHg6IEZvbzxUPiB9ICAgICAgICAgICAgICAgLy8gb2shCnN0cnVjdCBCYXo8UywgVD4geyB4OiBGb288Uz4sIHk6IEZvbzxUPiB9IC8vIG9rIQoKZm4gZm9vPFQsIFU+KHg6IFQsIHk6IFUpIHt9CmZuIGYoKSB7fQoKZm4gbWFpbigpIHsKICAgIGxldCB4OiBib29sID0gdHJ1ZTsKICAgIGZvbzo6PGJvb2wsIHUzMj4oeCwgMTIpOyAgICAgICAgICAgICAgLy8gb2shCiAgICBmKCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9rIQp9CmBgYApFMDEwOVlvdSB0cmllZCB0byBwcm92aWRlIGEgZ2VuZXJpYyBhcmd1bWVudCB0byBhIHR5cGUgd2hpY2ggZG9lc24ndCBuZWVkIGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwOQp0eXBlIFggPSB1MzI8aTMyPjsgLy8gZXJyb3I6IHR5cGUgYXJndW1lbnRzIGFyZSBub3QgYWxsb3dlZCBmb3IgdGhpcyB0eXBlCnR5cGUgWSA9IGJvb2w8J3N0YXRpYz47IC8vIGVycm9yOiBsaWZldGltZSBwYXJhbWV0ZXJzIGFyZSBub3QgYWxsb3dlZCBvbgogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhpcyB0eXBlCmBgYAoKQ2hlY2sgdGhhdCB5b3UgdXNlZCB0aGUgY29ycmVjdCBhcmd1bWVudCBhbmQgdGhhdCB0aGUgZGVmaW5pdGlvbiBpcyBjb3JyZWN0LgoKRXhhbXBsZToKCmBgYAp0eXBlIFggPSB1MzI7IC8vIG9rIQp0eXBlIFkgPSBib29sOyAvLyBvayEKYGBgCgpOb3RlIHRoYXQgZ2VuZXJpYyBhcmd1bWVudHMgZm9yIGVudW0gdmFyaWFudCBjb25zdHJ1Y3RvcnMgZ28gYWZ0ZXIgdGhlIHZhcmlhbnQsCm5vdCBhZnRlciB0aGUgZW51bS4gRm9yIGV4YW1wbGUsIHlvdSB3b3VsZCB3cml0ZSBgT3B0aW9uOjpOb25lOjo8dTMyPmAsCnJhdGhlciB0aGFuIGBPcHRpb246Ojx1MzI+OjpOb25lYC4KRTAxMTAjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdHJpZWQgdG8gcHJvdmlkZSBhIGxpZmV0aW1lIHRvIGEgdHlwZSB3aGljaCBkb2Vzbid0IG5lZWQgaXQuClNlZSBgRTAxMDlgIGZvciBtb3JlIGRldGFpbHMuCkUwMTE2QW4gaW5oZXJlbnQgaW1wbGVtZW50YXRpb24gd2FzIGRlZmluZWQgZm9yIGEgdHlwZSBvdXRzaWRlIHRoZSBjdXJyZW50IGNyYXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExNgppbXBsIFZlYzx1OD4geyB9IC8vIGVycm9yCmBgYAoKWW91IGNhbiBvbmx5IGRlZmluZSBhbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiBmb3IgYSB0eXBlIGluIHRoZSBzYW1lIGNyYXRlCndoZXJlIHRoZSB0eXBlIHdhcyBkZWZpbmVkLiBGb3IgZXhhbXBsZSwgYW4gYGltcGxgIGJsb2NrIGFzIGFib3ZlIGlzIG5vdCBhbGxvd2VkCnNpbmNlIGBWZWNgIGlzIGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpUbyBmaXggdGhpcyBwcm9ibGVtLCB5b3UgY2FuIGVpdGhlcjoKCiAtIGRlZmluZSBhIHRyYWl0IHRoYXQgaGFzIHRoZSBkZXNpcmVkIGFzc29jaWF0ZWQgZnVuY3Rpb25zL3R5cGVzL2NvbnN0YW50cyBhbmQKICAgaW1wbGVtZW50IHRoZSB0cmFpdCBmb3IgdGhlIHR5cGUgaW4gcXVlc3Rpb24KIC0gZGVmaW5lIGEgbmV3IHR5cGUgd3JhcHBpbmcgdGhlIHR5cGUgYW5kIGRlZmluZSBhbiBpbXBsZW1lbnRhdGlvbiBvbiB0aGUgbmV3CiAgIHR5cGUKCk5vdGUgdGhhdCB1c2luZyB0aGUgYHR5cGVgIGtleXdvcmQgZG9lcyBub3Qgd29yayBoZXJlIGJlY2F1c2UgYHR5cGVgIG9ubHkKaW50cm9kdWNlcyBhIHR5cGUgYWxpYXM6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTYKdHlwZSBCeXRlcyA9IFZlYzx1OD47CgppbXBsIEJ5dGVzIHsgfSAvLyBlcnJvciwgc2FtZSBhcyBhYm92ZQpgYGAKRTAxMTdPbmx5IHRyYWl0cyBkZWZpbmVkIGluIHRoZSBjdXJyZW50IGNyYXRlIGNhbiBiZSBpbXBsZW1lbnRlZCBmb3IgYXJiaXRyYXJ5IHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExNwppbXBsIERyb3AgZm9yIHUzMiB7fQpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIGEgdmlvbGF0aW9uIG9mIG9uZSBvZiBSdXN0J3Mgb3JwaGFuIHJ1bGVzIGZvciB0cmFpdAppbXBsZW1lbnRhdGlvbnMuIFRoZSBydWxlIHByb2hpYml0cyBhbnkgaW1wbGVtZW50YXRpb24gb2YgYSBmb3JlaWduIHRyYWl0IChhCnRyYWl0IGRlZmluZWQgaW4gYW5vdGhlciBjcmF0ZSkgd2hlcmUKCiAtIHRoZSB0eXBlIHRoYXQgaXMgaW1wbGVtZW50aW5nIHRoZSB0cmFpdCBpcyBmb3JlaWduCiAtIGFsbCBvZiB0aGUgcGFyYW1ldGVycyBiZWluZyBwYXNzZWQgdG8gdGhlIHRyYWl0IChpZiB0aGVyZSBhcmUgYW55KSBhcmUgYWxzbwogICBmb3JlaWduLgoKVG8gYXZvaWQgdGhpcyBraW5kIG9mIGVycm9yLCBlbnN1cmUgdGhhdCBhdCBsZWFzdCBvbmUgbG9jYWwgdHlwZSBpcyByZWZlcmVuY2VkCmJ5IHRoZSBgaW1wbGA6CgpgYGAKcHViIHN0cnVjdCBGb287IC8vIHlvdSBkZWZpbmUgeW91ciB0eXBlIGluIHlvdXIgY3JhdGUKCmltcGwgRHJvcCBmb3IgRm9vIHsgLy8gYW5kIHlvdSBjYW4gaW1wbGVtZW50IHRoZSB0cmFpdCBvbiBpdCEKICAgIC8vIGNvZGUgb2YgdHJhaXQgaW1wbGVtZW50YXRpb24gaGVyZQojICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgfQp9CgppbXBsIEZyb208Rm9vPiBmb3IgaTMyIHsgLy8gb3IgeW91IHVzZSBhIHR5cGUgZnJvbSB5b3VyIGNyYXRlIGFzCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHR5cGUgcGFyYW1ldGVyCiAgICBmbiBmcm9tKGk6IEZvbykgLT4gaTMyIHsKICAgICAgICAwCiAgICB9Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBkZWZpbmUgYSB0cmFpdCBsb2NhbGx5IGFuZCBpbXBsZW1lbnQgdGhhdCBpbnN0ZWFkOgoKYGBgCnRyYWl0IEJhciB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsIEJhciBmb3IgdTMyIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKCkZvciBpbmZvcm1hdGlvbiBvbiB0aGUgZGVzaWduIG9mIHRoZSBvcnBoYW4gcnVsZXMsIHNlZSBbUkZDIDEwMjNdLgoKW1JGQyAxMDIzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTAyMy1yZWJhbGFuY2luZy1jb2hlcmVuY2UubWQKRTAxMThBbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiB3YXMgZGVmaW5lZCBmb3Igc29tZXRoaW5nIHdoaWNoIGlzbid0IGEgc3RydWN0LAplbnVtLCB1bmlvbiwgb3IgdHJhaXQgb2JqZWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDExOAppbXBsPFQ+IFQgeyAvLyBlcnJvcjogbm8gbm9taW5hbCB0eXBlIGZvdW5kIGZvciBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbgogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgIC8vIC4uLgogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBpbXBsZW1lbnQgYSB0cmFpdCBvbiB0aGUgdHlwZSBvciB3cmFwIGl0IGluIGEgc3RydWN0LgpFeGFtcGxlOgoKYGBgCi8vIHdlIGNyZWF0ZSBhIHRyYWl0IGhlcmUKdHJhaXQgTGl2ZUxvbmdBbmRQcm9zcGVyIHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nOwp9CgovLyBhbmQgbm93IHlvdSBjYW4gaW1wbGVtZW50IGl0IG9uIFQKaW1wbDxUPiBMaXZlTG9uZ0FuZFByb3NwZXIgZm9yIFQgewogICAgZm4gZ2V0X3N0YXRlKCZzZWxmKSAtPiBTdHJpbmcgewogICAgICAgICJIZSdzIGRlYWQsIEppbSEiLnRvX293bmVkKCkKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gY3JlYXRlIGEgbmV3dHlwZS4gQSBuZXd0eXBlIGlzIGEgd3JhcHBpbmcgdHVwbGUtc3RydWN0LgpGb3IgZXhhbXBsZSwgYE5ld1R5cGVgIGlzIGEgbmV3dHlwZSBvdmVyIGBGb29gIGluIGBzdHJ1Y3QgTmV3VHlwZShGb28pYC4KRXhhbXBsZToKCmBgYApzdHJ1Y3QgVHlwZVdyYXBwZXI8VD4oVCk7CgppbXBsPFQ+IFR5cGVXcmFwcGVyPFQ+IHsKICAgIGZuIGdldF9zdGF0ZSgmc2VsZikgLT4gU3RyaW5nIHsKICAgICAgICAiRmFzY2luYXRpbmchIi50b19vd25lZCgpCiAgICB9Cn0KYGBgCkUwMTE5VGhlcmUgYXJlIGNvbmZsaWN0aW5nIHRyYWl0IGltcGxlbWVudGF0aW9ucyBmb3IgdGhlIHNhbWUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMTkKdHJhaXQgTXlUcmFpdCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplOwp9CgppbXBsPFQ+IE15VHJhaXQgZm9yIFQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZSB7IDAgfQp9CgpzdHJ1Y3QgRm9vIHsKICAgIHZhbHVlOiB1c2l6ZQp9CgppbXBsIE15VHJhaXQgZm9yIEZvbyB7IC8vIGVycm9yOiBjb25mbGljdGluZyBpbXBsZW1lbnRhdGlvbnMgb2YgdHJhaXQKICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYE15VHJhaXRgIGZvciB0eXBlIGBGb29gCiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgc2VsZi52YWx1ZSB9Cn0KYGBgCgpXaGVuIGxvb2tpbmcgZm9yIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHRyYWl0LCB0aGUgY29tcGlsZXIgZmluZHMKYm90aCB0aGUgYGltcGw8VD4gTXlUcmFpdCBmb3IgVGAgd2hlcmUgVCBpcyBhbGwgdHlwZXMgYW5kIHRoZSBgaW1wbApNeVRyYWl0IGZvciBGb29gLiBTaW5jZSBhIHRyYWl0IGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBtdWx0aXBsZSB0aW1lcywKdGhpcyBpcyBhbiBlcnJvci4gU28sIHdoZW4geW91IHdyaXRlOgoKYGBgCnRyYWl0IE15VHJhaXQgewogICAgZm4gZ2V0KCZzZWxmKSAtPiB1c2l6ZTsKfQoKaW1wbDxUPiBNeVRyYWl0IGZvciBUIHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemUgeyAwIH0KfQpgYGAKClRoaXMgbWFrZXMgdGhlIHRyYWl0IGltcGxlbWVudGVkIG9uIGFsbCB0eXBlcyBpbiB0aGUgc2NvcGUuIFNvIGlmIHlvdQp0cnkgdG8gaW1wbGVtZW50IGl0IG9uIGFub3RoZXIgb25lIGFmdGVyIHRoYXQsIHRoZSBpbXBsZW1lbnRhdGlvbnMgd2lsbApjb25mbGljdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBNeVRyYWl0IHsKICAgIGZuIGdldCgmc2VsZikgLT4gdXNpemU7Cn0KCmltcGw8VD4gTXlUcmFpdCBmb3IgVCB7CiAgICBmbiBnZXQoJnNlbGYpIC0+IHVzaXplIHsgMCB9Cn0KCnN0cnVjdCBGb287CgpmbiBtYWluKCkgewogICAgbGV0IGYgPSBGb287CgogICAgZi5nZXQoKTsgLy8gdGhlIHRyYWl0IGlzIGltcGxlbWVudGVkIHNvIHdlIGNhbiB1c2UgaXQKfQpgYGAKRTAxMjBEcm9wIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHRyYWl0LCB3aGljaCBpcyBub3QgYWxsb3dlZDogb25seSBzdHJ1Y3RzIGFuZAplbnVtcyBjYW4gaW1wbGVtZW50IERyb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTIwCnRyYWl0IE15VHJhaXQge30KCmltcGwgRHJvcCBmb3IgTXlUcmFpdCB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKCkEgd29ya2Fyb3VuZCBmb3IgdGhpcyBwcm9ibGVtIGlzIHRvIHdyYXAgdGhlIHRyYWl0IHVwIGluIGEgc3RydWN0LCBhbmQgaW1wbGVtZW50CkRyb3Agb24gdGhhdDoKCmBgYAp0cmFpdCBNeVRyYWl0IHt9CnN0cnVjdCBNeVdyYXBwZXI8VDogTXlUcmFpdD4geyBmb286IFQgfQoKaW1wbCA8VDogTXlUcmFpdD4gRHJvcCBmb3IgTXlXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CgpgYGAKCkFsdGVybmF0aXZlbHksIHdyYXBwaW5nIHRyYWl0IG9iamVjdHMgcmVxdWlyZXMgc29tZXRoaW5nOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCi8vb3IgQm94PE15VHJhaXQ+LCBpZiB5b3Ugd2FudGVkIGFuIG93bmVkIHRyYWl0IG9iamVjdApzdHJ1Y3QgTXlXcmFwcGVyPCdhPiB7IGZvbzogJidhIE15VHJhaXQgfQoKaW1wbCA8J2E+IERyb3AgZm9yIE15V3JhcHBlcjwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCkUwMTIxVGhlIHR5cGUgcGxhY2Vob2xkZXIgYF9gIHdhcyB1c2VkIHdpdGhpbiBhIHR5cGUgb24gYW4gaXRlbSdzIHNpZ25hdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjEKZm4gZm9vKCkgLT4gXyB7IDUgfSAvLyBlcnJvcgoKc3RhdGljIEJBUjogXyA9ICJ0ZXN0IjsgLy8gZXJyb3IKYGBgCgpJbiB0aG9zZSBjYXNlcywgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgdHlwZSBleHBsaWNpdGx5OgoKYGBgCmZuIGZvbygpIC0+IGkzMiB7IDUgfSAvLyBvayEKCnN0YXRpYyBCQVI6ICZzdHIgPSAidGVzdCI7IC8vIG9rIQpgYGAKClRoZSB0eXBlIHBsYWNlaG9sZGVyIGBfYCBjYW4gYmUgdXNlZCBvdXRzaWRlIGl0ZW0ncyBzaWduYXR1cmUgYXMgZm9sbG93czoKCmBgYApsZXQgeCA9ICJhNGEiLnNwbGl0KCc0JykKICAgIC5jb2xsZWN0Ojo8VmVjPF8+PigpOyAvLyBObyBuZWVkIHRvIHByZWNpc2UgdGhlIFZlYydzIGdlbmVyaWMgdHlwZS4KYGBgCkUwMTI0QSBzdHJ1Y3Qgd2FzIGRlY2xhcmVkIHdpdGggdHdvIGZpZWxkcyBoYXZpbmcgdGhlIHNhbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMjQKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IGkzMiwKICAgIGZpZWxkMTogaTMyLCAvLyBlcnJvcjogZmllbGQgaXMgYWxyZWFkeSBkZWNsYXJlZAp9CmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IHRoZSBmaWVsZCBuYW1lcyBoYXZlIGJlZW4gY29ycmVjdGx5IHNwZWxsZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IGkzMiwKICAgIGZpZWxkMjogaTMyLCAvLyBvayEKfQpgYGAKRTAxMjhBIHR5cGUgcGFyYW1ldGVyIHdpdGggZGVmYXVsdCB2YWx1ZSBpcyB1c2luZyBmb3J3YXJkIGRlY2xhcmVkIGlkZW50aWZpZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTI4CnN0cnVjdCBGb288VCA9IFUsIFUgPSAoKT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9Ci8vIGVycm9yOiBnZW5lcmljIHBhcmFtZXRlcnMgd2l0aCBhIGRlZmF1bHQgY2Fubm90IHVzZSBmb3J3YXJkIGRlY2xhcmVkCi8vICAgICAgICBpZGVudGlmaWVycwpgYGAKClR5cGUgcGFyYW1ldGVyIGRlZmF1bHRzIGNhbiBvbmx5IHVzZSBwYXJhbWV0ZXJzIHRoYXQgb2NjdXIgYmVmb3JlIHRoZW0uIFNpbmNlCnR5cGUgcGFyYW1ldGVycyBhcmUgZXZhbHVhdGVkIGluLW9yZGVyLCB0aGlzIGlzc3VlIGNvdWxkIGJlIGZpeGVkIGJ5IGRvaW5nOgoKYGBgCnN0cnVjdCBGb288VSA9ICgpLCBUID0gVT4gewogICAgZmllbGQxOiBULAogICAgZmllbGQyOiBVLAp9CmBgYAoKUGxlYXNlIGFsc28gdmVyaWZ5IHRoYXQgdGhpcyB3YXNuJ3QgYmVjYXVzZSBvZiBhIG5hbWUtY2xhc2ggYW5kIHJlbmFtZSB0aGUgdHlwZQpwYXJhbWV0ZXIgaWYgc28uCkUwMTMwQSBwYXR0ZXJuIHdhcyBkZWNsYXJlZCBhcyBhbiBhcmd1bWVudCBpbiBhIGZvcmVpZ24gZnVuY3Rpb24gZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMwCmV4dGVybiAiQyIgewogICAgZm4gZm9vKChhLCBiKTogKHUzMiwgdTMyKSk7IC8vIGVycm9yOiBwYXR0ZXJucyBhcmVuJ3QgYWxsb3dlZCBpbiBmb3JlaWduCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9ucwp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHJlcGxhY2UgdGhlIHBhdHRlcm4gYXJndW1lbnQgd2l0aCBhIHJlZ3VsYXIgb25lLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBTb21lU3RydWN0IHsKICAgIGE6IHUzMiwKICAgIGI6IHUzMiwKfQoKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28oczogU29tZVN0cnVjdCk7IC8vIG9rIQp9CmBgYAoKT3I6CgpgYGAKZXh0ZXJuICJDIiB7CiAgICBmbiBmb28oYTogKHUzMiwgdTMyKSk7IC8vIG9rIQp9CmBgYApFMDEzMVRoZSBgbWFpbmAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTMxCmZuIG1haW48VD4oKSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUgZ2VuZXJpYyBwYXJhbWV0ZXJzCn0KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVmaW5lIHRoZSBgbWFpbmAgZnVuY3Rpb24gd2l0aCBnZW5lcmljIHBhcmFtZXRlcnMuCkl0IG11c3Qgbm90IHRha2UgYW55IGFyZ3VtZW50cy4KRTAxMzJBIGZ1bmN0aW9uIHdpdGggdGhlIGBzdGFydGAgYXR0cmlidXRlIHdhcyBkZWNsYXJlZCB3aXRoIHR5cGUgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxMzIKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBmPFQ+KCkge30KYGBgCgpJdCBpcyBub3QgcG9zc2libGUgdG8gZGVjbGFyZSB0eXBlIHBhcmFtZXRlcnMgb24gYSBmdW5jdGlvbiB0aGF0IGhhcyB0aGUgYHN0YXJ0YAphdHRyaWJ1dGUuIFN1Y2ggYSBmdW5jdGlvbiBtdXN0IGhhdmUgdGhlIGZvbGxvd2luZyB0eXBlIHNpZ25hdHVyZSAoZm9yIG1vcmUKaW5mb3JtYXRpb24sIHZpZXcgW3RoZSB1bnN0YWJsZSBib29rXVsxXSk6CgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9sYW5nLWl0ZW1zLmh0bWwjd3JpdGluZy1hbi1leGVjdXRhYmxlLXdpdGhvdXQtc3RkbGliCgpgYGAKIyBsZXQgXzoKZm4oaXNpemUsICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplOwpgYGAKCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBteV9zdGFydChhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgewogICAgMAp9CmBgYApFMDEzM1Vuc2FmZSBjb2RlIHdhcyB1c2VkIG91dHNpZGUgb2YgYW4gdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzMwp1bnNhZmUgZm4gZigpIHsgcmV0dXJuOyB9IC8vIFRoaXMgaXMgdGhlIHVuc2FmZSBjb2RlCgpmbiBtYWluKCkgewogICAgZigpOyAvLyBlcnJvcjogY2FsbCB0byB1bnNhZmUgZnVuY3Rpb24gcmVxdWlyZXMgdW5zYWZlIGZ1bmN0aW9uIG9yIGJsb2NrCn0KYGBgCgpVc2luZyB1bnNhZmUgZnVuY3Rpb25hbGl0eSBpcyBwb3RlbnRpYWxseSBkYW5nZXJvdXMgYW5kIGRpc2FsbG93ZWQgYnkgc2FmZXR5CmNoZWNrcy4gRXhhbXBsZXM6CgoqIERlcmVmZXJlbmNpbmcgcmF3IHBvaW50ZXJzCiogQ2FsbGluZyBmdW5jdGlvbnMgdmlhIEZGSQoqIENhbGxpbmcgZnVuY3Rpb25zIG1hcmtlZCB1bnNhZmUKClRoZXNlIHNhZmV0eSBjaGVja3MgY2FuIGJlIHJlbGF4ZWQgZm9yIGEgc2VjdGlvbiBvZiB0aGUgY29kZSBieSB3cmFwcGluZyB0aGUKdW5zYWZlIGluc3RydWN0aW9ucyB3aXRoIGFuIGB1bnNhZmVgIGJsb2NrLiBGb3IgaW5zdGFuY2U6CgpgYGAKdW5zYWZlIGZuIGYoKSB7IHJldHVybjsgfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IGYoKTsgfSAvLyBvayEKfQpgYGAKClNlZSB0aGUgW3Vuc2FmZSBzZWN0aW9uXVt1bnNhZmUtc2VjdGlvbl0gb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KClt1bnNhZmUtc2VjdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTAxLXVuc2FmZS1ydXN0Lmh0bWwKRTAxMzYjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpNb3JlIHRoYW4gb25lIGBtYWluYCBmdW5jdGlvbiB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKSB7CiAgICAvLyAuLi4KfQoKLy8gLi4uCgpmbiBtYWluKCkgeyAvLyBlcnJvciEKICAgIC8vIC4uLgp9CmBgYAoKQSBiaW5hcnkgY2FuIG9ubHkgaGF2ZSBvbmUgZW50cnkgcG9pbnQsIGFuZCBieSBkZWZhdWx0IHRoYXQgZW50cnkgcG9pbnQgaXMgdGhlCmBtYWluKClgIGZ1bmN0aW9uLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgaW5zdGFuY2VzIG9mIHRoaXMgZnVuY3Rpb24sIHBsZWFzZQpyZW5hbWUgb25lIG9mIHRoZW0uCkUwMTM3IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKTW9yZSB0aGFuIG9uZSBmdW5jdGlvbiB3YXMgZGVjbGFyZWQgd2l0aCB0aGUgYCNbbWFpbl1gIGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKIyFbZmVhdHVyZShtYWluKV0KCiNbbWFpbl0KZm4gZm9vKCkge30KCiNbbWFpbl0KZm4gZigpIHt9IC8vIGVycm9yOiBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCBhIGAjW21haW5dYCBhdHRyaWJ1dGUKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBmdW5jdGlvbnMgd2l0aCB0aGUKYCNbbWFpbl1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKG1haW4pXQoKI1ttYWluXQpmbiBmKCkge30gLy8gb2shCmBgYApFMDEzOE1vcmUgdGhhbiBvbmUgZnVuY3Rpb24gd2FzIGRlY2xhcmVkIHdpdGggdGhlIGAjW3N0YXJ0XWAgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEzOAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUge30KCiNbc3RhcnRdCmZuIGYoYXJnYzogaXNpemUsIGFyZ3Y6ICpjb25zdCAqY29uc3QgdTgpIC0+IGlzaXplIHt9Ci8vIGVycm9yOiBtdWx0aXBsZSAnc3RhcnQnIGZ1bmN0aW9ucwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGZvdW5kIG11bHRpcGxlIGZ1bmN0aW9ucyB3aXRoIHRoZQpgI1tzdGFydF1gIGF0dHJpYnV0ZS4gVGhpcyBpcyBhbiBlcnJvciBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSB1bmlxdWUgZW50cnkKcG9pbnQgaW50byBhIFJ1c3QgcHJvZ3JhbS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YXJ0KV0KCiNbc3RhcnRdCmZuIGZvbyhhcmdjOiBpc2l6ZSwgYXJndjogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgeyAwIH0gLy8gb2shCmBgYApFMDEzOSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZXJlIGFyZSB2YXJpb3VzIHJlc3RyaWN0aW9ucyBvbiB0cmFuc211dGluZyBiZXR3ZWVuIHR5cGVzIGluIFJ1c3Q7IGZvciBleGFtcGxlCnR5cGVzIGJlaW5nIHRyYW5zbXV0ZWQgbXVzdCBoYXZlIHRoZSBzYW1lIHNpemUuIFRvIGFwcGx5IGFsbCB0aGVzZSByZXN0cmljdGlvbnMsCnRoZSBjb21waWxlciBtdXN0IGtub3cgdGhlIGV4YWN0IHR5cGVzIHRoYXQgbWF5IGJlIHRyYW5zbXV0ZWQuIFdoZW4gdHlwZQpwYXJhbWV0ZXJzIGFyZSBpbnZvbHZlZCwgdGhpcyBjYW5ub3QgYWx3YXlzIGJlIGRvbmUuCgpTbywgZm9yIGV4YW1wbGUsIHRoZSBmb2xsb3dpbmcgaXMgbm90IGFsbG93ZWQ6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7CgpmbiBmb288VD4oeDogVmVjPFQ+KSB7CiAgICAvLyB3ZSBhcmUgdHJhbnNtdXRpbmcgYmV0d2VlbiBWZWM8VD4gYW5kIEZvbzxGPiBoZXJlCiAgICBsZXQgeTogRm9vPFQ+ID0gdW5zYWZlIHsgdHJhbnNtdXRlKHgpIH07CiAgICAvLyBkbyBzb21ldGhpbmcgd2l0aCB5Cn0KYGBgCgpJbiB0aGlzIHNwZWNpZmljIGNhc2UgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHRoYXQgdGhlIHRyYW5zbXV0ZSBpcyBoYXJtbGVzcyAoYnV0CnRoaXMgaXMgbm90IGd1YXJhbnRlZWQgYnkgUnVzdCkuIEhvd2V2ZXIsIHdoZW4gYWxpZ25tZW50IGFuZCBlbnVtIG9wdGltaXphdGlvbnMKY29tZSBpbnRvIHRoZSBwaWN0dXJlLCBpdCdzIHF1aXRlIGxpa2VseSB0aGF0IHRoZSBzaXplcyBtYXkgb3IgbWF5IG5vdCBtYXRjaAp3aXRoIGRpZmZlcmVudCB0eXBlIHBhcmFtZXRlciBzdWJzdGl0dXRpb25zLiBJdCdzIG5vdCBwb3NzaWJsZSB0byBjaGVjayB0aGlzIGZvcgpfYWxsXyBwb3NzaWJsZSB0eXBlcywgc28gYHRyYW5zbXV0ZSgpYCBzaW1wbHkgb25seSBhY2NlcHRzIHR5cGVzIHdpdGhvdXQgYW55CnVuc3Vic3RpdHV0ZWQgdHlwZSBwYXJhbWV0ZXJzLgoKSWYgeW91IG5lZWQgdGhpcywgdGhlcmUncyBhIGdvb2QgY2hhbmNlIHlvdSdyZSBkb2luZyBzb21ldGhpbmcgd3JvbmcuIEtlZXAgaW4KbWluZCB0aGF0IFJ1c3QgZG9lc24ndCBndWFyYW50ZWUgbXVjaCBhYm91dCB0aGUgbGF5b3V0IG9mIGRpZmZlcmVudCBzdHJ1Y3RzCihldmVuIHR3byBzdHJ1Y3RzIHdpdGggaWRlbnRpY2FsIGRlY2xhcmF0aW9ucyBtYXkgaGF2ZSBkaWZmZXJlbnQgbGF5b3V0cykuIElmCnRoZXJlIGlzIGEgc29sdXRpb24gdGhhdCBhdm9pZHMgdGhlIHRyYW5zbXV0ZSBlbnRpcmVseSwgdHJ5IGl0IGluc3RlYWQuCgpJZiBpdCdzIHBvc3NpYmxlLCBoYW5kLW1vbm9tb3JwaGl6ZSB0aGUgY29kZSBieSB3cml0aW5nIHRoZSBmdW5jdGlvbiBmb3IgZWFjaApwb3NzaWJsZSB0eXBlIHN1YnN0aXR1dGlvbi4gSXQncyBwb3NzaWJsZSB0byB1c2UgdHJhaXRzIHRvIGRvIHRoaXMgY2xlYW5seSwKZm9yIGV4YW1wbGU6CgpgYGAKdXNlIHN0ZDo6bWVtOjp0cmFuc211dGU7CgpzdHJ1Y3QgRm9vPFQ+KFZlYzxUPik7Cgp0cmFpdCBNeVRyYW5zbXV0YWJsZVR5cGU6IFNpemVkIHsKICAgIGZuIHRyYW5zbXV0ZShfOiBWZWM8U2VsZj4pIC0+IEZvbzxTZWxmPjsKfQoKaW1wbCBNeVRyYW5zbXV0YWJsZVR5cGUgZm9yIHU4IHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8dTg+KSAtPiBGb288dTg+IHsKICAgICAgICB1bnNhZmUgeyB0cmFuc211dGUoeCkgfQogICAgfQp9CgppbXBsIE15VHJhbnNtdXRhYmxlVHlwZSBmb3IgU3RyaW5nIHsKICAgIGZuIHRyYW5zbXV0ZSh4OiBWZWM8U3RyaW5nPikgLT4gRm9vPFN0cmluZz4gewogICAgICAgIHVuc2FmZSB7IHRyYW5zbXV0ZSh4KSB9CiAgICB9Cn0KCi8vIC4uLiBtb3JlIGltcGxzIGZvciB0aGUgdHlwZXMgeW91IGludGVuZCB0byB0cmFuc211dGUKCmZuIGZvbzxUOiBNeVRyYW5zbXV0YWJsZVR5cGU+KHg6IFZlYzxUPikgewogICAgbGV0IHk6IEZvbzxUPiA9IDxUIGFzIE15VHJhbnNtdXRhYmxlVHlwZT46OnRyYW5zbXV0ZSh4KTsKICAgIC8vIGRvIHNvbWV0aGluZyB3aXRoIHkKfQpgYGAKCkVhY2ggaW1wbCB3aWxsIGJlIGNoZWNrZWQgZm9yIGEgc2l6ZSBtYXRjaCBpbiB0aGUgdHJhbnNtdXRlIGFzIHVzdWFsLCBhbmQgc2luY2UKdGhlcmUgYXJlIG5vIHVuYm91bmQgdHlwZSBwYXJhbWV0ZXJzIGludm9sdmVkLCB0aGlzIHNob3VsZCBjb21waWxlIHVubGVzcyB0aGVyZQppcyBhIHNpemUgbWlzbWF0Y2ggaW4gb25lIG9mIHRoZSBpbXBscy4KCkl0IGlzIGFsc28gcG9zc2libGUgdG8gbWFudWFsbHkgdHJhbnNtdXRlOgoKYGBgCiMgdXNlIHN0ZDo6cHRyOwojIGxldCB2ID0gU29tZSgidmFsdWUiKTsKIyB0eXBlIFNvbWVUeXBlID0gJidzdGF0aWMgW3U4XTsKdW5zYWZlIHsKICAgIHB0cjo6cmVhZCgmdiBhcyAqY29uc3QgXyBhcyAqY29uc3QgU29tZVR5cGUpIC8vIGB2YCB0cmFuc211dGVkIHRvIGBTb21lVHlwZWAKfQojIDsKYGBgCgpOb3RlIHRoYXQgdGhpcyBkb2VzIG5vdCBtb3ZlIGB2YCAodW5saWtlIGB0cmFuc211dGVgKSwgYW5kIG1heSBuZWVkIGEKY2FsbCB0byBgbWVtOjpmb3JnZXQodilgIGluIGNhc2UgeW91IHdhbnQgdG8gYXZvaWQgZGVzdHJ1Y3RvcnMgYmVpbmcgY2FsbGVkLgpFMDE1MkEgbGFuZyBpdGVtIHdhcyByZWRlZmluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTUyCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgojW2xhbmcgPSAib3duZWRfYm94Il0Kc3RydWN0IEZvbzxUPihUKTsgLy8gZXJyb3I6IGR1cGxpY2F0ZSBsYW5nIGl0ZW0gZm91bmQ6IGBvd25lZF9ib3hgCmBgYAoKTGFuZyBpdGVtcyBhcmUgYWxyZWFkeSBpbXBsZW1lbnRlZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeS4gVW5sZXNzIHlvdSBhcmUKd3JpdGluZyBhIGZyZWUtc3RhbmRpbmcgYXBwbGljYXRpb24gKGUuZy4sIGEga2VybmVsKSwgeW91IGRvIG5vdCBuZWVkIHRvIHByb3ZpZGUKdGhlbSB5b3Vyc2VsZi4KCllvdSBjYW4gYnVpbGQgYSBmcmVlLXN0YW5kaW5nIGNyYXRlIGJ5IGFkZGluZyBgIyFbbm9fc3RkXWAgdG8gdGhlIGNyYXRlCmF0dHJpYnV0ZXM6CgpgYGBpZ25vcmUgKG9ubHktZm9yLXN5bnRheC1oaWdobGlnaHQpCiMhW25vX3N0ZF0KYGBgCgpTZWUgYWxzbyB0aGUgW3Vuc3RhYmxlIGJvb2tdWzFdLgoKWzFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvbGFuZy1pdGVtcy5odG1sI3dyaXRpbmctYW4tZXhlY3V0YWJsZS13aXRob3V0LXN0ZGxpYgpFMDE1NCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkltcG9ydHMgKGB1c2VgIHN0YXRlbWVudHMpIGFyZSBub3QgYWxsb3dlZCBhZnRlciBub24taXRlbSBzdGF0ZW1lbnRzLCBzdWNoIGFzCnZhcmlhYmxlIGRlY2xhcmF0aW9ucyBhbmQgZXhwcmVzc2lvbiBzdGF0ZW1lbnRzLgoKSGVyZSBpcyBhbiBleGFtcGxlIHRoYXQgZGVtb25zdHJhdGVzIHRoZSBlcnJvcjoKCmBgYApmbiBmKCkgewogICAgLy8gVmFyaWFibGUgZGVjbGFyYXRpb24gYmVmb3JlIGltcG9ydAogICAgbGV0IHggPSAwOwogICAgdXNlIHN0ZDo6aW86OlJlYWQ7CiAgICAvLyAuLi4KfQpgYGAKClRoZSBzb2x1dGlvbiBpcyB0byBkZWNsYXJlIHRoZSBpbXBvcnRzIGF0IHRoZSB0b3Agb2YgdGhlIGJsb2NrLCBmdW5jdGlvbiwgb3IKZmlsZS4KCkhlcmUgaXMgdGhlIHByZXZpb3VzIGV4YW1wbGUgYWdhaW4sIHdpdGggdGhlIGNvcnJlY3Qgb3JkZXI6CgpgYGAKZm4gZigpIHsKICAgIHVzZSBzdGQ6OmlvOjpSZWFkOwogICAgbGV0IHggPSAwOwogICAgLy8gLi4uCn0KYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwpFMDE1OEFuIGFzc29jaWF0ZWQgY29uc3QgaGFzIGJlZW4gcmVmZXJlbmNlZCBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTU4CmVudW0gRUZvbyB7IEEsIEIsIEMsIEQgfQoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IFg6IEVGb287Cn0KCmZuIHRlc3Q8QTogRm9vPihhcmc6IEVGb28pIHsKICAgIG1hdGNoIGFyZyB7CiAgICAgICAgQTo6WCA9PiB7IC8vIGVycm9yIQogICAgICAgICAgICBwcmludGxuISgiQTo6WCIpOwogICAgICAgIH0KICAgIH0KfQpgYGAKCmBjb25zdGAgYW5kIGBzdGF0aWNgIG1lYW4gZGlmZmVyZW50IHRoaW5ncy4gQSBgY29uc3RgIGlzIGEgY29tcGlsZS10aW1lCmNvbnN0YW50LCBhbiBhbGlhcyBmb3IgYSBsaXRlcmFsIHZhbHVlLiBUaGlzIHByb3BlcnR5IG1lYW5zIHlvdSBjYW4gbWF0Y2ggaXQKZGlyZWN0bHkgd2l0aGluIGEgcGF0dGVybi4KClRoZSBgc3RhdGljYCBrZXl3b3JkLCBvbiB0aGUgb3RoZXIgaGFuZCwgZ3VhcmFudGVlcyBhIGZpeGVkIGxvY2F0aW9uIGluIG1lbW9yeS4KVGhpcyBkb2VzIG5vdCBhbHdheXMgbWVhbiB0aGF0IHRoZSB2YWx1ZSBpcyBjb25zdGFudC4gRm9yIGV4YW1wbGUsIGEgZ2xvYmFsCm11dGV4IGNhbiBiZSBkZWNsYXJlZCBgc3RhdGljYCBhcyB3ZWxsLgoKSWYgeW91IHdhbnQgdG8gbWF0Y2ggYWdhaW5zdCBhIGBzdGF0aWNgLCBjb25zaWRlciB1c2luZyBhIGd1YXJkIGluc3RlYWQ6CgpgYGAKc3RhdGljIEZPUlRZX1RXTzogaTMyID0gNDI7CgptYXRjaCBTb21lKDQyKSB7CiAgICBTb21lKHgpIGlmIHggPT0gRk9SVFlfVFdPID0+IHt9CiAgICBfID0+IHt9Cn0KYGBgCkUwMTYxQSB2YWx1ZSB3YXMgbW92ZWQgd2hvc2Ugc2l6ZSB3YXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNjEKdHJhaXQgQmFyIHsKICAgIGZuIGYoc2VsZik7Cn0KCmltcGwgQmFyIGZvciBpMzIgewogICAgZm4gZihzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IGI6IEJveDxkeW4gQmFyPiA9IEJveDo6bmV3KDBpMzIpOwogICAgYi5mKCk7CiAgICAvLyBlcnJvcjogY2Fubm90IG1vdmUgYSB2YWx1ZSBvZiB0eXBlIGR5biBCYXI6IHRoZSBzaXplIG9mIGR5biBCYXIgY2Fubm90CiAgICAvLyAgICAgICAgYmUgc3RhdGljYWxseSBkZXRlcm1pbmVkCn0KYGBgCgpJbiBSdXN0LCB5b3UgY2FuIG9ubHkgbW92ZSBhIHZhbHVlIHdoZW4gaXRzIHNpemUgaXMga25vd24gYXQgY29tcGlsZSB0aW1lLgoKVG8gd29yayBhcm91bmQgdGhpcyByZXN0cmljdGlvbiwgY29uc2lkZXIgImhpZGluZyIgdGhlIHZhbHVlIGJlaGluZCBhIHJlZmVyZW5jZToKZWl0aGVyIGAmeGAgb3IgYCZtdXQgeGAuIFNpbmNlIGEgcmVmZXJlbmNlIGhhcyBhIGZpeGVkIHNpemUsIHRoaXMgbGV0cyB5b3UgbW92ZQppdCBhcm91bmQgYXMgdXN1YWwuIEV4YW1wbGU6CgpgYGAKdHJhaXQgQmFyIHsKICAgIGZuIGYoJnNlbGYpOwp9CgppbXBsIEJhciBmb3IgaTMyIHsKICAgIGZuIGYoJnNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgYjogQm94PGR5biBCYXI+ID0gQm94OjpuZXcoMGkzMik7CiAgICBiLmYoKTsKICAgIC8vIG9rIQp9CmBgYApFMDE2MiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGBpZiBsZXRgIHBhdHRlcm4gYXR0ZW1wdHMgdG8gbWF0Y2ggdGhlIHBhdHRlcm4sIGFuZCBlbnRlcnMgdGhlIGJvZHkgaWYgdGhlCm1hdGNoIHdhcyBzdWNjZXNzZnVsLiBJZiB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUgKHdoZW4gaXQgY2Fubm90IGZhaWwgdG8KbWF0Y2gpLCB1c2UgYSByZWd1bGFyIGBsZXRgLWJpbmRpbmcgaW5zdGVhZC4gRm9yIGluc3RhbmNlOgoKYGBgCnN0cnVjdCBJcnJlZnV0YWJsZShpMzIpOwpsZXQgaXJyID0gSXJyZWZ1dGFibGUoMCk7CgovLyBUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSB0aGUgbWF0Y2ggaXMgaXJyZWZ1dGFibGUuCmlmIGxldCBJcnJlZnV0YWJsZSh4KSA9IGlyciB7CiAgICAvLyBUaGlzIGJvZHkgd2lsbCBhbHdheXMgYmUgZXhlY3V0ZWQuCiAgICAvLyAuLi4KfQpgYGAKClRyeSB0aGlzIGluc3RlYWQ6CgpgYGAKc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCmxldCBJcnJlZnV0YWJsZSh4KSA9IGlycjsKcHJpbnRsbiEoInt9IiwgeCk7CmBgYApFMDE2NFNvbWV0aGluZyB3aGljaCBpcyBuZWl0aGVyIGEgdHVwbGUgc3RydWN0IG5vciBhIHR1cGxlIHZhcmlhbnQgd2FzIHVzZWQgYXMgYQpwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE2NAplbnVtIEEgewogICAgQiwKICAgIEMsCn0KCmltcGwgQSB7CiAgICBmbiBuZXcoKSB7fQp9CgpmbiBiYXIoZm9vOiBBKSB7CiAgICBtYXRjaCBmb28gewogICAgICAgIEE6Om5ldygpID0+ICgpLCAvLyBlcnJvciEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCgpUaGlzIGVycm9yIG1lYW5zIHRoYXQgYW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBtYXRjaCBzb21ldGhpbmcgd2hpY2ggaXMgbmVpdGhlciBhCnR1cGxlIHN0cnVjdCBub3IgYSB0dXBsZSB2YXJpYW50LiBPbmx5IHRoZXNlIHR3byBlbGVtZW50cyBhcmUgYWxsb3dlZCBhcyBhCnBhdHRlcm46CgpgYGAKZW51bSBBIHsKICAgIEIsCiAgICBDLAp9CgppbXBsIEEgewogICAgZm4gbmV3KCkge30KfQoKZm4gYmFyKGZvbzogQSkgewogICAgbWF0Y2ggZm9vIHsKICAgICAgICBBOjpCID0+ICgpLCAvLyBvayEKICAgICAgICBfID0+IHt9CiAgICB9Cn0KYGBgCkUwMTY1IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBgd2hpbGUgbGV0YCBwYXR0ZXJuIGF0dGVtcHRzIHRvIG1hdGNoIHRoZSBwYXR0ZXJuLCBhbmQgZW50ZXJzIHRoZSBib2R5IGlmIHRoZQptYXRjaCB3YXMgc3VjY2Vzc2Z1bC4gSWYgdGhlIG1hdGNoIGlzIGlycmVmdXRhYmxlICh3aGVuIGl0IGNhbm5vdCBmYWlsIHRvCm1hdGNoKSwgdXNlIGEgcmVndWxhciBgbGV0YC1iaW5kaW5nIGluc2lkZSBhIGBsb29wYCBpbnN0ZWFkLiBGb3IgaW5zdGFuY2U6CgpgYGBub19ydW4Kc3RydWN0IElycmVmdXRhYmxlKGkzMik7CmxldCBpcnIgPSBJcnJlZnV0YWJsZSgwKTsKCi8vIFRoaXMgZmFpbHMgdG8gY29tcGlsZSBiZWNhdXNlIHRoZSBtYXRjaCBpcyBpcnJlZnV0YWJsZS4Kd2hpbGUgbGV0IElycmVmdXRhYmxlKHgpID0gaXJyIHsKICAgIC8vIC4uLgp9CmBgYAoKVHJ5IHRoaXMgaW5zdGVhZDoKCmBgYG5vX3J1bgpzdHJ1Y3QgSXJyZWZ1dGFibGUoaTMyKTsKbGV0IGlyciA9IElycmVmdXRhYmxlKDApOwoKbG9vcCB7CiAgICBsZXQgSXJyZWZ1dGFibGUoeCkgPSBpcnI7CiAgICAvLyAuLi4KfQpgYGAKRTAxNzBBIHBhdHRlcm4gYmluZGluZyBpcyB1c2luZyB0aGUgc2FtZSBuYW1lIGFzIG9uZSBvZiB0aGUgdmFyaWFudHMgb2YgYSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE3MAojICMhW2Rlbnkod2FybmluZ3MpXQplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CgpmbiBpc19lbXB0eShzOiBNZXRob2QpIC0+IGJvb2wgewogICAgbWF0Y2ggcyB7CiAgICAgICAgR0VUID0+IHRydWUsCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpFbnVtIHZhcmlhbnRzIGFyZSBxdWFsaWZpZWQgYnkgZGVmYXVsdC4gRm9yIGV4YW1wbGUsIGdpdmVuIHRoaXMgdHlwZToKCmBgYAplbnVtIE1ldGhvZCB7CiAgICBHRVQsCiAgICBQT1NULAp9CmBgYAoKWW91IHdvdWxkIG1hdGNoIGl0IHVzaW5nOgoKYGBgCmVudW0gTWV0aG9kIHsKICAgIEdFVCwKICAgIFBPU1QsCn0KCmxldCBtID0gTWV0aG9kOjpHRVQ7CgptYXRjaCBtIHsKICAgIE1ldGhvZDo6R0VUID0+IHt9LAogICAgTWV0aG9kOjpQT1NUID0+IHt9LAp9CmBgYAoKSWYgeW91IGRvbid0IHF1YWxpZnkgdGhlIG5hbWVzLCB0aGUgY29kZSB3aWxsIGJpbmQgbmV3IHZhcmlhYmxlcyBuYW1lZCAiR0VUIiBhbmQKIlBPU1QiIGluc3RlYWQuIFRoaXMgYmVoYXZpb3IgaXMgbGlrZWx5IG5vdCB3aGF0IHlvdSB3YW50LCBzbyBgcnVzdGNgIHdhcm5zIHdoZW4KdGhhdCBoYXBwZW5zLgoKUXVhbGlmaWVkIG5hbWVzIGFyZSBnb29kIHByYWN0aWNlLCBhbmQgbW9zdCBjb2RlIHdvcmtzIHdlbGwgd2l0aCB0aGVtLiBCdXQgaWYKeW91IHByZWZlciB0aGVtIHVucXVhbGlmaWVkLCB5b3UgY2FuIGltcG9ydCB0aGUgdmFyaWFudHMgaW50byBzY29wZToKCmBgYAp1c2UgTWV0aG9kOjoqOwplbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYAoKSWYgeW91IHdhbnQgb3RoZXJzIHRvIGJlIGFibGUgdG8gaW1wb3J0IHZhcmlhbnRzIGZyb20geW91ciBtb2R1bGUgZGlyZWN0bHksIHVzZQpgcHViIHVzZWA6CgpgYGAKcHViIHVzZSBNZXRob2Q6Oio7CnB1YiBlbnVtIE1ldGhvZCB7IEdFVCwgUE9TVCB9CiMgZm4gbWFpbigpIHt9CmBgYApFMDE3OFRoZSBgK2AgdHlwZSBvcGVyYXRvciB3YXMgdXNlZCBpbiBhbiBhbWJpZ3VvdXMgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxNzgKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPCdhPiB7CiAgICB4OiAmJ2EgRm9vICsgJ2EsICAgICAvLyBlcnJvciEKICAgIHk6ICYnYSBtdXQgRm9vICsgJ2EsIC8vIGVycm9yIQogICAgejogZm4oKSAtPiBGb28gKyAnYSwgLy8gZXJyb3IhCn0KYGBgCgpJbiB0eXBlcywgdGhlIGArYCB0eXBlIG9wZXJhdG9yIGhhcyBsb3cgcHJlY2VkZW5jZSwgc28gaXQgaXMgb2Z0ZW4gbmVjZXNzYXJ5CnRvIHVzZSBwYXJlbnRoZXNlczoKCmBgYAp0cmFpdCBGb28ge30KCnN0cnVjdCBCYXI8J2E+IHsKICAgIHg6ICYnYSAoRm9vICsgJ2EpLCAgICAgLy8gb2shCiAgICB5OiAmJ2EgbXV0IChGb28gKyAnYSksIC8vIG9rIQogICAgejogZm4oKSAtPiAoRm9vICsgJ2EpLCAvLyBvayEKfQpgYGAKCk1vcmUgZGV0YWlscyBjYW4gYmUgZm91bmQgaW4gW1JGQyA0MzhdLgoKW1JGQyA0MzhdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvcHVsbC80MzgKRTAxODNNYW51YWwgaW1wbGVtZW50YXRpb24gb2YgYSBgRm4qYCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxODMKc3RydWN0IE15Q2xvc3VyZSB7CiAgICBmb286IGkzMgp9CgppbXBsIEZuT25jZTwoKT4gZm9yIE15Q2xvc3VyZSB7ICAvLyBlcnJvcgogICAgdHlwZSBPdXRwdXQgPSAoKTsKICAgIGV4dGVybiAicnVzdC1jYWxsIiBmbiBjYWxsX29uY2Uoc2VsZiwgYXJnczogKCkpIC0+IFNlbGY6Ok91dHB1dCB7CiAgICAgICAgcHJpbnRsbiEoInt9Iiwgc2VsZi5mb28pOwogICAgfQp9CmBgYAoKTWFudWFsbHkgaW1wbGVtZW50aW5nIGBGbmAsIGBGbk11dGAgb3IgYEZuT25jZWAgaXMgdW5zdGFibGUKYW5kIHJlcXVpcmVzIGAjIVtmZWF0dXJlKGZuX3RyYWl0cywgdW5ib3hlZF9jbG9zdXJlcyldYC4KCmBgYAojIVtmZWF0dXJlKGZuX3RyYWl0cywgdW5ib3hlZF9jbG9zdXJlcyldCgpzdHJ1Y3QgTXlDbG9zdXJlIHsKICAgIGZvbzogaTMyCn0KCmltcGwgRm5PbmNlPCgpPiBmb3IgTXlDbG9zdXJlIHsgIC8vIG9rIQogICAgdHlwZSBPdXRwdXQgPSAoKTsKICAgIGV4dGVybiAicnVzdC1jYWxsIiBmbiBjYWxsX29uY2Uoc2VsZiwgYXJnczogKCkpIC0+IFNlbGY6Ok91dHB1dCB7CiAgICAgICAgcHJpbnRsbiEoInt9Iiwgc2VsZi5mb28pOwogICAgfQp9CmBgYAoKVGhlIGFyZ3VtZW50cyBtdXN0IGJlIGEgdHVwbGUgcmVwcmVzZW50aW5nIHRoZSBhcmd1bWVudCBsaXN0LgpGb3IgbW9yZSBpbmZvLCBzZWUgdGhlIFt0cmFja2luZyBpc3N1ZV1baXNzMjk2MjVdOgoKW2lzczI5NjI1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8yOTYyNQpFMDE4NFRoZSBgQ29weWAgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGEgdHlwZSB3aXRoIGEgYERyb3BgIGltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4NAojW2Rlcml2ZShDb3B5KV0Kc3RydWN0IEZvbzsgLy8gZXJyb3IhCgppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgfQp9CmBgYAoKRXhwbGljaXRseSBpbXBsZW1lbnRpbmcgYm90aCBgRHJvcGAgYW5kIGBDb3B5YCB0cmFpdCBvbiBhIHR5cGUgaXMgY3VycmVudGx5CmRpc2FsbG93ZWQuIFRoaXMgZmVhdHVyZSBjYW4gbWFrZSBzb21lIHNlbnNlIGluIHRoZW9yeSwgYnV0IHRoZSBjdXJyZW50CmltcGxlbWVudGF0aW9uIGlzIGluY29ycmVjdCBhbmQgY2FuIGxlYWQgdG8gbWVtb3J5IHVuc2FmZXR5IChzZWUKW2lzc3VlICMyMDEyNl1baXNzMjAxMjZdKSwgc28gaXQgaGFzIGJlZW4gZGlzYWJsZWQgZm9yIG5vdy4KCltpc3MyMDEyNl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMjAxMjYKRTAxODVBbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIGZvciBhIHRyYWl0IHdhcyBkZWZpbmVkIHRvIGJlIHN0YXRpYywgYnV0IGFuCmltcGxlbWVudGF0aW9uIG9mIHRoZSB0cmFpdCBkZWNsYXJlZCB0aGUgc2FtZSBmdW5jdGlvbiB0byBiZSBhIG1ldGhvZCAoaS5lLiwgdG8KdGFrZSBhIGBzZWxmYCBwYXJhbWV0ZXIpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4NQp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIC8vIGVycm9yLCBtZXRob2QgYGZvb2AgaGFzIGEgYCZzZWxmYCBkZWNsYXJhdGlvbiBpbiB0aGUgaW1wbCwgYnV0IG5vdCBpbgogICAgLy8gdGhlIHRyYWl0CiAgICBmbiBmb28oJnNlbGYpIHt9Cn0KYGBgCgpXaGVuIGEgdHlwZSBpbXBsZW1lbnRzIGEgdHJhaXQncyBhc3NvY2lhdGVkIGZ1bmN0aW9uLCBpdCBoYXMgdG8gdXNlIHRoZSBzYW1lCnNpZ25hdHVyZS4gU28gaW4gdGhpcyBjYXNlLCBzaW5jZSBgRm9vOjpmb29gIGRvZXMgbm90IHRha2UgYW55IGFyZ3VtZW50IGFuZApkb2VzIG5vdCByZXR1cm4gYW55dGhpbmcsIGl0cyBpbXBsZW1lbnRhdGlvbiBvbiBgQmFyYCBzaG91bGQgYmUgdGhlIHNhbWU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGZvbygpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oKSB7fSAvLyBvayEKfQpgYGAKRTAxODZBbiBhc3NvY2lhdGVkIGZ1bmN0aW9uIGZvciBhIHRyYWl0IHdhcyBkZWZpbmVkIHRvIGJlIGEgbWV0aG9kIChpLmUuLCB0byB0YWtlIGEKYHNlbGZgIHBhcmFtZXRlciksIGJ1dCBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgdHJhaXQgZGVjbGFyZWQgdGhlIHNhbWUgZnVuY3Rpb24KdG8gYmUgc3RhdGljLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE4Ngp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgLy8gZXJyb3IsIG1ldGhvZCBgZm9vYCBoYXMgYSBgJnNlbGZgIGRlY2xhcmF0aW9uIGluIHRoZSB0cmFpdCwgYnV0IG5vdCBpbgogICAgLy8gdGhlIGltcGwKICAgIGZuIGZvbygpIHt9Cn0KYGBgCgpXaGVuIGEgdHlwZSBpbXBsZW1lbnRzIGEgdHJhaXQncyBhc3NvY2lhdGVkIGZ1bmN0aW9uLCBpdCBoYXMgdG8gdXNlIHRoZSBzYW1lCnNpZ25hdHVyZS4gU28gaW4gdGhpcyBjYXNlLCBzaW5jZSBgRm9vOjpmb29gIHRha2VzIGBzZWxmYCBhcyBhcmd1bWVudCBhbmQKZG9lcyBub3QgcmV0dXJuIGFueXRoaW5nLCBpdHMgaW1wbGVtZW50YXRpb24gb24gYEJhcmAgc2hvdWxkIGJlIHRoZSBzYW1lOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBmb28oJnNlbGYpIHt9IC8vIG9rIQp9CmBgYApFMDE5MUFuIGFzc29jaWF0ZWQgdHlwZSB3YXNuJ3Qgc3BlY2lmaWVkIGZvciBhIHRyYWl0IG9iamVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAxOTEKdHJhaXQgVHJhaXQgewogICAgdHlwZSBCYXI7Cn0KCnR5cGUgRm9vID0gVHJhaXQ7IC8vIGVycm9yOiB0aGUgdmFsdWUgb2YgdGhlIGFzc29jaWF0ZWQgdHlwZSBgQmFyYCAoZnJvbQogICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhlIHRyYWl0IGBUcmFpdGApIG11c3QgYmUgc3BlY2lmaWVkCmBgYAoKVHJhaXQgb2JqZWN0cyBuZWVkIHRvIGhhdmUgYWxsIGFzc29jaWF0ZWQgdHlwZXMgc3BlY2lmaWVkLiBQbGVhc2UgdmVyaWZ5IHRoYXQKYWxsIGFzc29jaWF0ZWQgdHlwZXMgb2YgdGhlIHRyYWl0IHdlcmUgc3BlY2lmaWVkIGFuZCB0aGUgY29ycmVjdCB0cmFpdCB3YXMgdXNlZC4KRXhhbXBsZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICB0eXBlIEJhcjsKfQoKdHlwZSBGb28gPSBUcmFpdDxCYXI9aTMyPjsgLy8gb2shCmBgYApFMDE5MiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgbmVnYXRpdmUgaW1wbCB3YXMgYWRkZWQgb24gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKdHJhaXQgVHJhaXQgewogICAgdHlwZSBCYXI7Cn0KCnN0cnVjdCBGb287CgppbXBsICFUcmFpdCBmb3IgRm9vIHsgfSAvL34gRVJST1IKCmZuIG1haW4oKSB7fQpgYGAKCk5lZ2F0aXZlIGltcGxzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIGF1dG8gdHJhaXRzLiBGb3IgbW9yZQppbmZvcm1hdGlvbiBzZWUgdGhlIFtvcHQtaW4gYnVpbHRpbiB0cmFpdHMgUkZDXVtSRkMgMTldLgoKW1JGQyAxOV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzAwMTktb3B0LWluLWJ1aWx0aW4tdHJhaXRzLm1kCkUwMTkzIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKYHdoZXJlYCBjbGF1c2VzIG11c3QgdXNlIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXJzOiBpdCBkb2VzIG5vdCBtYWtlIHNlbnNlIHRvIHVzZQp0aGVtIG90aGVyd2lzZS4gQW4gZXhhbXBsZSBjYXVzaW5nIHRoaXMgZXJyb3I6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCiNbZGVyaXZlKENvcHksQ2xvbmUpXQpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBXcmFwcGVkOiBUCn0KCmltcGwgRm9vIGZvciBXcmFwcGVyPHUzMj4gd2hlcmUgV3JhcHBlcjx1MzI+OiBDbG9uZSB7CiAgICBmbiBiYXIoJnNlbGYpIHsgfQp9CmBgYAoKVGhpcyB1c2Ugb2YgYSBgd2hlcmVgIGNsYXVzZSBpcyBzdHJhbmdlIC0gYSBtb3JlIGNvbW1vbiB1c2FnZSB3b3VsZCBsb29rCnNvbWV0aGluZyBsaWtlIHRoZSBmb2xsb3dpbmc6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCiNbZGVyaXZlKENvcHksQ2xvbmUpXQpzdHJ1Y3QgV3JhcHBlcjxUPiB7CiAgICBXcmFwcGVkOiBUCn0KaW1wbCA8VD4gRm9vIGZvciBXcmFwcGVyPFQ+IHdoZXJlIFdyYXBwZXI8VD46IENsb25lIHsKICAgIGZuIGJhcigmc2VsZikgeyB9Cn0KYGBgCgpIZXJlLCB3ZSdyZSBzYXlpbmcgdGhhdCB0aGUgaW1wbGVtZW50YXRpb24gZXhpc3RzIG9uIFdyYXBwZXIgb25seSB3aGVuIHRoZQp3cmFwcGVkIHR5cGUgYFRgIGltcGxlbWVudHMgYENsb25lYC4gVGhlIGB3aGVyZWAgY2xhdXNlIGlzIGltcG9ydGFudCBiZWNhdXNlCnNvbWUgdHlwZXMgd2lsbCBub3QgaW1wbGVtZW50IGBDbG9uZWAsIGFuZCB0aHVzIHdpbGwgbm90IGdldCB0aGlzIG1ldGhvZC4KCkluIG91ciBlcnJvbmVvdXMgZXhhbXBsZSwgaG93ZXZlciwgd2UncmUgcmVmZXJlbmNpbmcgYSBzaW5nbGUgY29uY3JldGUgdHlwZS4KU2luY2Ugd2Uga25vdyBmb3IgY2VydGFpbiB0aGF0IGBXcmFwcGVyPHUzMj5gIGltcGxlbWVudHMgYENsb25lYCwgdGhlcmUncyBubwpyZWFzb24gdG8gYWxzbyBzcGVjaWZ5IGl0IGluIGEgYHdoZXJlYCBjbGF1c2UuCkUwMTk1VGhlIGxpZmV0aW1lIHBhcmFtZXRlcnMgb2YgdGhlIG1ldGhvZCBkbyBub3QgbWF0Y2ggdGhlIHRyYWl0IGRlY2xhcmF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5NQp0cmFpdCBUcmFpdCB7CiAgICBmbiBiYXI8J2EsJ2I6J2E+KHg6ICYnYSBzdHIsIHk6ICYnYiBzdHIpOwp9CgpzdHJ1Y3QgRm9vOwoKaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGJhcjwnYSwnYj4oeDogJidhIHN0ciwgeTogJidiIHN0cikgewogICAgLy8gZXJyb3I6IGxpZmV0aW1lIHBhcmFtZXRlcnMgb3IgYm91bmRzIG9uIG1ldGhvZCBgYmFyYAogICAgLy8gZG8gbm90IG1hdGNoIHRoZSB0cmFpdCBkZWNsYXJhdGlvbgogICAgfQp9CmBgYAoKVGhlIGxpZmV0aW1lIGNvbnN0cmFpbnQgYCdiYCBmb3IgYGJhcigpYCBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBtYXRjaCB0aGUKdHJhaXQgZGVjbGFyYXRpb24uIEVuc3VyZSBsaWZldGltZSBkZWNsYXJhdGlvbnMgbWF0Y2ggZXhhY3RseSBpbiBib3RoIHRyYWl0CmRlY2xhcmF0aW9uIGFuZCBpbXBsZW1lbnRhdGlvbi4gRXhhbXBsZToKCmBgYAp0cmFpdCBUcmFpdCB7CiAgICBmbiB0PCdhLCdiOidhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKTsKfQoKc3RydWN0IEZvbzsKCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiB0PCdhLCdiOidhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyKSB7IC8vIG9rIQogICAgfQp9CmBgYApFMDE5N0FuIGluaGVyZW50IGltcGxlbWVudGF0aW9uIHdhcyBtYXJrZWQgdW5zYWZlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5NwpzdHJ1Y3QgRm9vOwoKdW5zYWZlIGltcGwgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpJbmhlcmVudCBpbXBsZW1lbnRhdGlvbnMgKG9uZSB0aGF0IGRvIG5vdCBpbXBsZW1lbnQgYSB0cmFpdCBidXQgcHJvdmlkZQptZXRob2RzIGFzc29jaWF0ZWQgd2l0aCBhIHR5cGUpIGFyZSBhbHdheXMgc2FmZSBiZWNhdXNlIHRoZXkgYXJlIG5vdAppbXBsZW1lbnRpbmcgYW4gdW5zYWZlIHRyYWl0LiBSZW1vdmluZyB0aGUgYHVuc2FmZWAga2V5d29yZCBmcm9tIHRoZSBpbmhlcmVudAppbXBsZW1lbnRhdGlvbiB3aWxsIHJlc29sdmUgdGhpcyBlcnJvci4KCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28geyB9IC8vIG9rIQpgYGAKRTAxOThBIG5lZ2F0aXZlIGltcGxlbWVudGF0aW9uIHdhcyBtYXJrZWQgYXMgdW5zYWZlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDE5OApzdHJ1Y3QgRm9vOwoKdW5zYWZlIGltcGwgIUNsb25lIGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKCkEgbmVnYXRpdmUgaW1wbGVtZW50YXRpb24gaXMgb25lIHRoYXQgZXhjbHVkZXMgYSB0eXBlIGZyb20gaW1wbGVtZW50aW5nIGEKcGFydGljdWxhciB0cmFpdC4gTm90IGJlaW5nIGFibGUgdG8gdXNlIGEgdHJhaXQgaXMgYWx3YXlzIGEgc2FmZSBvcGVyYXRpb24sCnNvIG5lZ2F0aXZlIGltcGxlbWVudGF0aW9ucyBhcmUgYWx3YXlzIHNhZmUgYW5kIG5ldmVyIG5lZWQgdG8gYmUgbWFya2VkIGFzCnVuc2FmZS4KClRoaXMgd2lsbCBjb21waWxlOgoKYGBgaWdub3JlIChpZ25vcmUgYXV0b190cmFpdCBmdXR1cmUgY29tcGF0aWJpbGl0eSB3YXJuaW5nKQojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnN0cnVjdCBGb287CgphdXRvIHRyYWl0IEVudGVycHJpc2Uge30KCmltcGwgIUVudGVycHJpc2UgZm9yIEZvbyB7IH0KYGBgCgpQbGVhc2Ugbm90ZSB0aGF0IG5lZ2F0aXZlIGltcGxzIGFyZSBvbmx5IGFsbG93ZWQgZm9yIGF1dG8gdHJhaXRzLgpFMDE5OUEgdHJhaXQgaW1wbGVtZW50YXRpb24gd2FzIG1hcmtlZCBhcyB1bnNhZmUgd2hpbGUgdGhlIHRyYWl0IGlzIHNhZmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMTk5CnN0cnVjdCBGb287Cgp0cmFpdCBCYXIgeyB9Cgp1bnNhZmUgaW1wbCBCYXIgZm9yIEZvbyB7IH0gLy8gZXJyb3IhCmBgYAoKU2FmZSB0cmFpdHMgc2hvdWxkIG5vdCBoYXZlIHVuc2FmZSBpbXBsZW1lbnRhdGlvbnMsIHRoZXJlZm9yZSBtYXJraW5nIGFuCmltcGxlbWVudGF0aW9uIGZvciBhIHNhZmUgdHJhaXQgdW5zYWZlIHdpbGwgY2F1c2UgYSBjb21waWxlciBlcnJvci4gUmVtb3ZpbmcKdGhlIHVuc2FmZSBtYXJrZXIgb24gdGhlIHRyYWl0IG5vdGVkIGluIHRoZSBlcnJvciB3aWxsIHJlc29sdmUgdGhpcyBwcm9ibGVtOgoKYGBgCnN0cnVjdCBGb287Cgp0cmFpdCBCYXIgeyB9CgppbXBsIEJhciBmb3IgRm9vIHsgfSAvLyBvayEKYGBgCkUwMjAwQW4gdW5zYWZlIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCB3aXRob3V0IGFuIHVuc2FmZSBpbXBsZW1lbnRhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDAKc3RydWN0IEZvbzsKCnVuc2FmZSB0cmFpdCBCYXIgeyB9CgppbXBsIEJhciBmb3IgRm9vIHsgfSAvLyBlcnJvciEKYGBgCgpVbnNhZmUgdHJhaXRzIG11c3QgaGF2ZSB1bnNhZmUgaW1wbGVtZW50YXRpb25zLiBUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuCmltcGxlbWVudGF0aW9uIGZvciBhbiB1bnNhZmUgdHJhaXQgaXNuJ3QgbWFya2VkIGFzIHVuc2FmZS4gVGhpcyBtYXkgYmUgcmVzb2x2ZWQKYnkgbWFya2luZyB0aGUgdW5zYWZlIGltcGxlbWVudGF0aW9uIGFzIHVuc2FmZS4KCmBgYApzdHJ1Y3QgRm9vOwoKdW5zYWZlIHRyYWl0IEJhciB7IH0KCnVuc2FmZSBpbXBsIEJhciBmb3IgRm9vIHsgfSAvLyBvayEKYGBgCkUwMjAxVHdvIGFzc29jaWF0ZWQgaXRlbXMgKGxpa2UgbWV0aG9kcywgYXNzb2NpYXRlZCB0eXBlcywgYXNzb2NpYXRlZCBmdW5jdGlvbnMsCmV0Yy4pIHdlcmUgZGVmaW5lZCB3aXRoIHRoZSBzYW1lIGlkZW50aWZpZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjAxCnN0cnVjdCBGb28odTgpOwoKaW1wbCBGb28gewogICAgZm4gYmFyKCZzZWxmKSAtPiBib29sIHsgc2VsZi4wID4gNSB9CiAgICBmbiBiYXIoKSB7fSAvLyBlcnJvcjogZHVwbGljYXRlIGFzc29jaWF0ZWQgZnVuY3Rpb24KfQoKdHJhaXQgQmF6IHsKICAgIHR5cGUgUXV1eDsKICAgIGZuIGJheigmc2VsZikgLT4gYm9vbDsKfQoKaW1wbCBCYXogZm9yIEZvbyB7CiAgICB0eXBlIFF1dXggPSB1MzI7CgogICAgZm4gYmF6KCZzZWxmKSAtPiBib29sIHsgdHJ1ZSB9CgogICAgLy8gZXJyb3I6IGR1cGxpY2F0ZSBtZXRob2QKICAgIGZuIGJheigmc2VsZikgLT4gYm9vbCB7IHNlbGYuMCA+IDUgfQoKICAgIC8vIGVycm9yOiBkdXBsaWNhdGUgYXNzb2NpYXRlZCB0eXBlCiAgICB0eXBlIFF1dXggPSB1MzI7Cn0KYGBgCgpOb3RlLCBob3dldmVyLCB0aGF0IGl0ZW1zIHdpdGggdGhlIHNhbWUgbmFtZSBhcmUgYWxsb3dlZCBmb3IgaW5oZXJlbnQgYGltcGxgCmJsb2NrcyB0aGF0IGRvbid0IG92ZXJsYXA6CgpgYGAKc3RydWN0IEZvbzxUPihUKTsKCmltcGwgRm9vPHU4PiB7CiAgICBmbiBiYXIoJnNlbGYpIC0+IGJvb2wgeyBzZWxmLjAgPiA1IH0KfQoKaW1wbCBGb288Ym9vbD4gewogICAgZm4gYmFyKCZzZWxmKSAtPiBib29sIHsgc2VsZi4wIH0KfQpgYGAKRTAyMDNIYXZpbmcgbXVsdGlwbGUgcmVsYXhlZCBkZWZhdWx0IGJvdW5kcyBpcyB1bnN1cHBvcnRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDMKc3RydWN0IEJhZDxUOiA/U2l6ZWQgKyA/U2VuZD57CiAgICBpbm5lcjogVAp9CmBgYAoKSGVyZSB0aGUgdHlwZSBgVGAgY2Fubm90IGhhdmUgYSByZWxheGVkIGJvdW5kIGZvciBtdWx0aXBsZSBkZWZhdWx0IHRyYWl0cwooYFNpemVkYCBhbmQgYFNlbmRgKS4gVGhpcyBjYW4gYmUgZml4ZWQgYnkgb25seSB1c2luZyBvbmUgcmVsYXhlZCBib3VuZC4KCmBgYApzdHJ1Y3QgR29vZDxUOiA/U2l6ZWQ+ewogICAgaW5uZXI6IFQKfQpgYGAKRTAyMDRUaGUgYENvcHlgIHRyYWl0IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHR5cGUgd2hpY2ggY29udGFpbnMgYSBmaWVsZCB0aGF0IGRvZXNuJ3QKaW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CnN0cnVjdCBGb28gewogICAgZm9vOiBWZWM8dTMyPiwKfQoKaW1wbCBDb3B5IGZvciBGb28geyB9IC8vIGVycm9yIQpgYGAKClRoZSBgQ29weWAgdHJhaXQgaXMgaW1wbGVtZW50ZWQgYnkgZGVmYXVsdCBvbmx5IG9uIHByaW1pdGl2ZSB0eXBlcy4gSWYgeW91cgp0eXBlIG9ubHkgY29udGFpbnMgcHJpbWl0aXZlIHR5cGVzLCB5b3UnbGwgYmUgYWJsZSB0byBpbXBsZW1lbnQgYENvcHlgIG9uIGl0LgpPdGhlcndpc2UsIGl0IHdvbid0IGJlIHBvc3NpYmxlLgoKSGVyZSdzIGFub3RoZXIgZXhhbXBsZSB0aGF0IHdpbGwgZmFpbDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNAojW2Rlcml2ZShDb3B5KV0gLy8gZXJyb3IhCnN0cnVjdCBGb288J2E+IHsKICAgIHR5OiAmJ2EgbXV0IGJvb2wsCn0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYCZtdXQgVGAgaXMgbm90IGBDb3B5YCwgZXZlbiB3aGVuIGBUYCBpcyBgQ29weWAgKHRoaXMKZGlmZmVycyBmcm9tIHRoZSBiZWhhdmlvciBmb3IgYCZUYCwgd2hpY2ggaXMgYWx3YXlzIGBDb3B5YCkuCkUwMjA1IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gYXR0ZW1wdCB0byBpbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdCBmb3IgYW4gZW51bSBmYWlsZWQgYmVjYXVzZSBvbmUgb2YgdGhlCnZhcmlhbnRzIGRvZXMgbm90IGltcGxlbWVudCBgQ29weWAuIFRvIGZpeCB0aGlzLCB5b3UgbXVzdCBpbXBsZW1lbnQgYENvcHlgIGZvcgp0aGUgbWVudGlvbmVkIHZhcmlhbnQuIE5vdGUgdGhhdCB0aGlzIG1heSBub3QgYmUgcG9zc2libGUsIGFzIGluIHRoZSBleGFtcGxlIG9mCgpgYGBjb21waWxlX2ZhaWwsRTAyMDQKZW51bSBGb28gewogICAgQmFyKFZlYzx1MzI+KSwKICAgIEJheiwKfQoKaW1wbCBDb3B5IGZvciBGb28geyB9CmBgYAoKVGhpcyBmYWlscyBiZWNhdXNlIGBWZWM8VD5gIGRvZXMgbm90IGltcGxlbWVudCBgQ29weWAgZm9yIGFueSBgVGAuCgpIZXJlJ3MgYW5vdGhlciBleGFtcGxlIHRoYXQgd2lsbCBmYWlsOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA0CiNbZGVyaXZlKENvcHkpXQplbnVtIEZvbzwnYT4gewogICAgQmFyKCYnYSBtdXQgYm9vbCksCiAgICBCYXosCn0KYGBgCgpUaGlzIGZhaWxzIGJlY2F1c2UgYCZtdXQgVGAgaXMgbm90IGBDb3B5YCwgZXZlbiB3aGVuIGBUYCBpcyBgQ29weWAgKHRoaXMKZGlmZmVycyBmcm9tIHRoZSBiZWhhdmlvciBmb3IgYCZUYCwgd2hpY2ggaXMgYWx3YXlzIGBDb3B5YCkuCkUwMjA2VGhlIGBDb3B5YCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHdoaWNoIGlzIG5laXRoZXIgYSBzdHJ1Y3Qgbm9yIGFuCmVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjA2CiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IEJhcjsKCmltcGwgQ29weSBmb3IgJidzdGF0aWMgbXV0IEJhciB7IH0gLy8gZXJyb3IhCmBgYAoKWW91IGNhbiBvbmx5IGltcGxlbWVudCBgQ29weWAgZm9yIGEgc3RydWN0IG9yIGFuIGVudW0uClRoZSBwcmV2aW91cyBleGFtcGxlIHdpbGwgZmFpbCBiZWNhdXNlIGAmJ3N0YXRpYyBtdXQgQmFyYAppcyBub3QgYSBzdHJ1Y3Qgb3IgZW51bS4KRTAyMDdBIHR5cGUsIGNvbnN0IG9yIGxpZmV0aW1lIHBhcmFtZXRlciB0aGF0IGlzIHNwZWNpZmllZCBmb3IgYGltcGxgIGlzIG5vdApjb25zdHJhaW5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKc3RydWN0IEZvbzsKCmltcGw8VDogRGVmYXVsdD4gRm9vIHsKICAgIC8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwgc2VsZgogICAgLy8gdHlwZSwgb3IgcHJlZGljYXRlcyBbRTAyMDddCiAgICBmbiBnZXQoJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCkFueSB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlciBvZiBhbiBgaW1wbGAgbXVzdCBtZWV0IGF0IGxlYXN0IG9uZSBvZiB0aGUKZm9sbG93aW5nIGNyaXRlcmlhOgoKIC0gaXQgYXBwZWFycyBpbiB0aGUgX2ltcGxlbWVudGluZyB0eXBlXyBvZiB0aGUgaW1wbCwgZS5nLiBgaW1wbDxUPiBGb288VD5gCiAtIGZvciBhIHRyYWl0IGltcGwsIGl0IGFwcGVhcnMgaW4gdGhlIF9pbXBsZW1lbnRlZCB0cmFpdF8sIGUuZy4KICAgYGltcGw8VD4gU29tZVRyYWl0PFQ+IGZvciBGb29gCiAtIGl0IGlzIGJvdW5kIGFzIGFuIGFzc29jaWF0ZWQgdHlwZSwgZS5nLiBgaW1wbDxULCBVPiBTb21lVHJhaXQgZm9yIFQKICAgd2hlcmUgVDogQW5vdGhlclRyYWl0PEFzc29jVHlwZT1VPmAKCkFueSB1bmNvbnN0cmFpbmVkIGxpZmV0aW1lIHBhcmFtZXRlciBvZiBhbiBgaW1wbGAgaXMgbm90IHN1cHBvcnRlZCBpZiB0aGUKbGlmZXRpbWUgcGFyYW1ldGVyIGlzIHVzZWQgYnkgYW4gYXNzb2NpYXRlZCB0eXBlLgoKIyMjIEVycm9yIGV4YW1wbGUgMQoKU3VwcG9zZSB3ZSBoYXZlIGEgc3RydWN0IGBGb29gIGFuZCB3ZSB3b3VsZCBsaWtlIHRvIGRlZmluZSBzb21lIG1ldGhvZHMgZm9yIGl0LgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGhhcyBhIGRlZmluaXRpb24gd2hpY2ggbGVhZHMgdG8gYSBjb21waWxlciBlcnJvcjoKClRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlIHBhcmFtZXRlciBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSBpbXBsZW1lbnRpbmcgdHlwZQooYEZvb2ApIG9mIHRoZSBpbXBsLiBJbiB0aGlzIGNhc2UsIHdlIGNhbiBmaXggdGhlIGVycm9yIGJ5IG1vdmluZyB0aGUgdHlwZQpwYXJhbWV0ZXIgZnJvbSB0aGUgYGltcGxgIHRvIHRoZSBtZXRob2QgYGdldGA6CgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIHR5cGUgcGFyYW1ldGVyIGZyb20gdGhlIGltcGwgdG8gdGhlIG1ldGhvZAppbXBsIEZvbyB7CiAgICBmbiBnZXQ8VDogRGVmYXVsdD4oJnNlbGYpIC0+IFQgewogICAgICAgIDxUIGFzIERlZmF1bHQ+OjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDIKCkFzIGFub3RoZXIgZXhhbXBsZSwgc3VwcG9zZSB3ZSBoYXZlIGEgYE1ha2VyYCB0cmFpdCBhbmQgd2FudCB0byBlc3RhYmxpc2ggYQp0eXBlIGBGb29NYWtlcmAgdGhhdCBtYWtlcyBgRm9vYHM6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKdHJhaXQgTWFrZXIgewogICAgdHlwZSBJdGVtOwogICAgZm4gbWFrZSgmbXV0IHNlbGYpIC0+IFNlbGY6Okl0ZW07Cn0KCnN0cnVjdCBGb288VD4gewogICAgZm9vOiBUCn0KCnN0cnVjdCBGb29NYWtlcjsKCmltcGw8VDogRGVmYXVsdD4gTWFrZXIgZm9yIEZvb01ha2VyIHsKLy8gZXJyb3I6IHRoZSB0eXBlIHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCi8vIHR5cGUsIG9yIHByZWRpY2F0ZXMgW0UwMjA3XQogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgpUaGlzIGZhaWxzIHRvIGNvbXBpbGUgYmVjYXVzZSBgVGAgZG9lcyBub3QgYXBwZWFyIGluIHRoZSB0cmFpdCBvciBpbiB0aGUKaW1wbGVtZW50aW5nIHR5cGUuCgpPbmUgd2F5IHRvIHdvcmsgYXJvdW5kIHRoaXMgaXMgdG8gaW50cm9kdWNlIGEgcGhhbnRvbSB0eXBlIHBhcmFtZXRlciBpbnRvCmBGb29NYWtlcmAsIGxpa2Ugc286CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCnRyYWl0IE1ha2VyIHsKICAgIHR5cGUgSXRlbTsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBTZWxmOjpJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgovLyBBZGQgYSB0eXBlIHBhcmFtZXRlciB0byBgRm9vTWFrZXJgCnN0cnVjdCBGb29NYWtlcjxUPiB7CiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTxUPiwKfQoKaW1wbDxUOiBEZWZhdWx0PiBNYWtlciBmb3IgRm9vTWFrZXI8VD4gewogICAgdHlwZSBJdGVtID0gRm9vPFQ+OwoKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7CiAgICAgICAgICAgIGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSwKICAgICAgICB9CiAgICB9Cn0KYGBgCgpBbm90aGVyIHdheSBpcyB0byBkbyBhd2F5IHdpdGggdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiBgTWFrZXJgIGFuZCB1c2UgYW4gaW5wdXQKdHlwZSBwYXJhbWV0ZXIgaW5zdGVhZDoKCmBgYAovLyBVc2UgYSB0eXBlIHBhcmFtZXRlciBpbnN0ZWFkIG9mIGFuIGFzc29jaWF0ZWQgdHlwZSBoZXJlCnRyYWl0IE1ha2VyPEl0ZW0+IHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBJdGVtOwp9CgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogVAp9CgpzdHJ1Y3QgRm9vTWFrZXI7CgppbXBsPFQ6IERlZmF1bHQ+IE1ha2VyPEZvbzxUPj4gZm9yIEZvb01ha2VyIHsKICAgIGZuIG1ha2UoJm11dCBzZWxmKSAtPiBGb288VD4gewogICAgICAgIEZvbyB7IGZvbzogPFQgYXMgRGVmYXVsdD46OmRlZmF1bHQoKSB9CiAgICB9Cn0KYGBgCgojIyMgRXJyb3IgZXhhbXBsZSAzCgpTdXBwb3NlIHdlIGhhdmUgYSBzdHJ1Y3QgYEZvb2AgYW5kIHdlIHdvdWxkIGxpa2UgdG8gZGVmaW5lIHNvbWUgbWV0aG9kcyBmb3IgaXQuClRoZSBmb2xsb3dpbmcgY29kZSBleGFtcGxlIGhhcyBhIGRlZmluaXRpb24gd2hpY2ggbGVhZHMgdG8gYSBjb21waWxlciBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDIwNwpzdHJ1Y3QgRm9vOwoKaW1wbDxjb25zdCBUOiBpMzI+IEZvbyB7CiAgICAvLyBlcnJvcjogdGhlIGNvbnN0IHBhcmFtZXRlciBgVGAgaXMgbm90IGNvbnN0cmFpbmVkIGJ5IHRoZSBpbXBsIHRyYWl0LCBzZWxmCiAgICAvLyB0eXBlLCBvciBwcmVkaWNhdGVzIFtFMDIwN10KICAgIGZuIGdldCgmc2VsZikgLT4gaTMyIHsKICAgICAgICBpMzI6OmRlZmF1bHQoKQogICAgfQp9CmBgYAoKVGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29uc3QgcGFyYW1ldGVyIGBUYCBkb2VzIG5vdCBhcHBlYXIgaW4gdGhlIGltcGxlbWVudGluZwp0eXBlIChgRm9vYCkgb2YgdGhlIGltcGwuIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgZXJyb3IgYnkgbW92aW5nIHRoZSB0eXBlCnBhcmFtZXRlciBmcm9tIHRoZSBgaW1wbGAgdG8gdGhlIG1ldGhvZCBgZ2V0YDoKCgpgYGAKc3RydWN0IEZvbzsKCi8vIE1vdmUgdGhlIGNvbnN0IHBhcmFtZXRlciBmcm9tIHRoZSBpbXBsIHRvIHRoZSBtZXRob2QKaW1wbCBGb28gewogICAgZm4gZ2V0PGNvbnN0IFQ6IGkzMj4oJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgaTMyOjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKCiMjIyBFcnJvciBleGFtcGxlIDQKClN1cHBvc2Ugd2UgaGF2ZSBhIHN0cnVjdCBgRm9vYCBhbmQgYSBzdHJ1Y3QgYEJhcmAgdGhhdCB1c2VzIGxpZmV0aW1lIGAnYWAuIFdlCndvdWxkIGxpa2UgdG8gaW1wbGVtZW50IHRyYWl0IGBDb250YWluc2AgZm9yIGBGb29gLiBUaGUgdHJhaXQgYENvbnRhaW5zYCBoYXZlCnRoZSBhc3NvY2lhdGVkIHR5cGUgYEJgLiBUaGUgZm9sbG93aW5nIGNvZGUgZXhhbXBsZSBoYXMgYSBkZWZpbml0aW9uIHdoaWNoCmxlYWRzIHRvIGEgY29tcGlsZXIgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwsRTAyMDcKc3RydWN0IEZvbzsKc3RydWN0IEJhcjwnYT47Cgp0cmFpdCBDb250YWlucyB7CiAgICB0eXBlIEI7CgogICAgZm4gZ2V0KCZzZWxmKSAtPiBpMzI7Cn0KCmltcGw8J2E+IENvbnRhaW5zIGZvciBGb28gewogICAgdHlwZSBCID0gQmFyPCdhPjsKCiAgICAvLyBlcnJvcjogdGhlIGxpZmV0aW1lIHBhcmFtZXRlciBgJ2FgIGlzIG5vdCBjb25zdHJhaW5lZCBieSB0aGUgaW1wbCB0cmFpdCwKICAgIC8vIHNlbGYgdHlwZSwgb3IgcHJlZGljYXRlcyBbRTAyMDddCiAgICBmbiBnZXQoJnNlbGYpIC0+IGkzMiB7CiAgICAgICAgaTMyOjpkZWZhdWx0KCkKICAgIH0KfQpgYGAKClBsZWFzZSBub3RlIHRoYXQgdW5jb25zdHJhaW5lZCBsaWZldGltZSBwYXJhbWV0ZXJzIGFyZSBub3Qgc3VwcG9ydGVkIGlmIHRoZXkgYXJlCmJlaW5nIHVzZWQgYnkgYW4gYXNzb2NpYXRlZCB0eXBlLgoKIyMjIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24KCkZvciBtb3JlIGluZm9ybWF0aW9uLCBwbGVhc2Ugc2VlIFtSRkMgNDQ3XS4KCltSRkMgNDQ3XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMDQ0Ny1uby11bnVzZWQtaW1wbC1wYXJhbWV0ZXJzLm1kCkUwMjEwVGhpcyBlcnJvciBpbmRpY2F0ZXMgYSB2aW9sYXRpb24gb2Ygb25lIG9mIFJ1c3QncyBvcnBoYW4gcnVsZXMgZm9yIHRyYWl0CmltcGxlbWVudGF0aW9ucy4gVGhlIHJ1bGUgY29uY2VybnMgdGhlIHVzZSBvZiB0eXBlIHBhcmFtZXRlcnMgaW4gYW4KaW1wbGVtZW50YXRpb24gb2YgYSBmb3JlaWduIHRyYWl0IChhIHRyYWl0IGRlZmluZWQgaW4gYW5vdGhlciBjcmF0ZSksIGFuZApzdGF0ZXMgdGhhdCB0eXBlIHBhcmFtZXRlcnMgbXVzdCBiZSAiY292ZXJlZCIgYnkgYSBsb2NhbCB0eXBlLgoKV2hlbiBpbXBsZW1lbnRpbmcgYSBmb3JlaWduIHRyYWl0IGZvciBhIGZvcmVpZ24gdHlwZSwKdGhlIHRyYWl0IG11c3QgaGF2ZSBvbmUgb3IgbW9yZSB0eXBlIHBhcmFtZXRlcnMuCkEgdHlwZSBsb2NhbCB0byB5b3VyIGNyYXRlIG11c3QgYXBwZWFyIGJlZm9yZSBhbnkgdXNlIG9mIGFueSB0eXBlIHBhcmFtZXRlcnMuCgpUbyB1bmRlcnN0YW5kIHdoYXQgdGhpcyBtZWFucywgaXQgaXMgcGVyaGFwcyBlYXNpZXIgdG8gY29uc2lkZXIgYSBmZXcgZXhhbXBsZXMuCgpJZiBgRm9yZWlnblRyYWl0YCBpcyBhIHRyYWl0IGRlZmluZWQgaW4gc29tZSBleHRlcm5hbCBjcmF0ZSBgZm9vYCwgdGhlbiB0aGUKZm9sbG93aW5nIHRyYWl0IGBpbXBsYCBpcyBhbiBlcnJvcjoKCmBgYGNvbXBpbGVfZmFpbCxFMDIxMAojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gY3JhdGUgZm9vOwojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQp1c2UgZm9vOjpGb3JlaWduVHJhaXQ7CiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwoKaW1wbDxUPiBGb3JlaWduVHJhaXQgZm9yIFQgeyB9IC8vIGVycm9yCiMgZm4gbWFpbigpIHt9CmBgYAoKVG8gd29yayBhcm91bmQgdGhpcywgaXQgY2FuIGJlIGNvdmVyZWQgd2l0aCBhIGxvY2FsIHR5cGUsIGBNeVR5cGVgOgoKYGBgCiMgdXNlIHN0ZDo6cGFuaWM6OlVud2luZFNhZmUgYXMgRm9yZWlnblRyYWl0OwpzdHJ1Y3QgTXlUeXBlPFQ+KFQpOwppbXBsPFQ+IEZvcmVpZ25UcmFpdCBmb3IgTXlUeXBlPFQ+IHsgfSAvLyBPawpgYGAKClBsZWFzZSBub3RlIHRoYXQgYSB0eXBlIGFsaWFzIGlzIG5vdCBzdWZmaWNpZW50LgoKRm9yIGFub3RoZXIgZXhhbXBsZSBvZiBhbiBlcnJvciwgc3VwcG9zZSB0aGVyZSdzIGFub3RoZXIgdHJhaXQgZGVmaW5lZCBpbiBgZm9vYApuYW1lZCBgRm9yZWlnblRyYWl0MmAgdGhhdCB0YWtlcyB0d28gdHlwZSBwYXJhbWV0ZXJzLiBUaGVuIHRoaXMgYGltcGxgIHJlc3VsdHMKaW4gdGhlIHNhbWUgcnVsZSB2aW9sYXRpb246CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKc3RydWN0IE15VHlwZTI7CmltcGw8VD4gRm9yZWlnblRyYWl0MjxULCBNeVR5cGU8VD4+IGZvciBNeVR5cGUyIHsgfSAvLyBlcnJvcgpgYGAKClRoZSByZWFzb24gZm9yIHRoaXMgaXMgdGhhdCB0aGVyZSBhcmUgdHdvIGFwcGVhcmFuY2VzIG9mIHR5cGUgcGFyYW1ldGVyIGBUYCBpbgp0aGUgYGltcGxgIGhlYWRlciwgYm90aCBhcyBwYXJhbWV0ZXJzIGZvciBgRm9yZWlnblRyYWl0MmAuIFRoZSBmaXJzdCBhcHBlYXJhbmNlCmlzIHVuY292ZXJlZCwgYW5kIHNvIHJ1bnMgYWZvdWwgb2YgdGhlIG9ycGhhbiBydWxlLgoKQ29uc2lkZXIgb25lIG1vcmUgZXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQppbXBsPFQ+IEZvcmVpZ25UcmFpdDI8TXlUeXBlPFQ+LCBUPiBmb3IgTXlUeXBlMiB7IH0gLy8gT2sKYGBgCgpUaGlzIG9ubHkgZGlmZmVycyBmcm9tIHRoZSBwcmV2aW91cyBgaW1wbGAgaW4gdGhhdCB0aGUgcGFyYW1ldGVycyBgVGAgYW5kCmBNeVR5cGU8VD5gIGZvciBgRm9yZWlnblRyYWl0MmAgaGF2ZSBiZWVuIHN3YXBwZWQuIFRoaXMgZXhhbXBsZSBkb2VzICpub3QqCnZpb2xhdGUgdGhlIG9ycGhhbiBydWxlOyBpdCBpcyBwZXJtaXR0ZWQuCgpUbyBzZWUgd2h5IHRoYXQgbGFzdCBleGFtcGxlIHdhcyBhbGxvd2VkLCB5b3UgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnZW5lcmFsCnJ1bGUuIFVuZm9ydHVuYXRlbHkgdGhpcyBydWxlIGlzIGEgYml0IHRyaWNreSB0byBzdGF0ZS4gQ29uc2lkZXIgYW4gYGltcGxgOgoKYGBgaWdub3JlIChvbmx5LWZvci1zeW50YXgtaGlnaGxpZ2h0KQppbXBsPFAxLCAuLi4sIFBtPiBGb3JlaWduVHJhaXQ8VDEsIC4uLiwgVG4+IGZvciBUMCB7IC4uLiB9CmBgYAoKd2hlcmUgYFAxLCAuLi4sIFBtYCBhcmUgdGhlIHR5cGUgcGFyYW1ldGVycyBvZiB0aGUgYGltcGxgIGFuZCBgVDAsIC4uLiwgVG5gCmFyZSB0eXBlcy4gT25lIG9mIHRoZSB0eXBlcyBgVDAsIC4uLiwgVG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlICh0aGlzIGlzIGFub3RoZXIKb3JwaGFuIHJ1bGUsIHNlZSB0aGUgZXhwbGFuYXRpb24gZm9yIEUwMTE3KS4KCkJvdGggb2YgdGhlIGZvbGxvd2luZyBtdXN0IGJlIHRydWU6CjEuIEF0IGxlYXN0IG9uZSBvZiB0aGUgdHlwZXMgYFQwLi49VG5gIG11c3QgYmUgYSBsb2NhbCB0eXBlLgpMZXQgYFRpYCBiZSB0aGUgZmlyc3Qgc3VjaCB0eXBlLgoyLiBObyB1bmNvdmVyZWQgdHlwZSBwYXJhbWV0ZXJzIGBQMS4uPVBtYCBtYXkgYXBwZWFyIGluIGBUMC4uVGlgCihleGNsdWRpbmcgYFRpYCkuCgpGb3IgaW5mb3JtYXRpb24gb24gdGhlIGRlc2lnbiBvZiB0aGUgb3JwaGFuIHJ1bGVzLApzZWUgW1JGQyAyNDUxXSBhbmQgW1JGQyAxMDIzXS4KCltSRkMgMjQ1MV06IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9yZmNzLzI0NTEtcmUtcmViYWxhbmNpbmctY29oZXJlbmNlLmh0bWwKW1JGQyAxMDIzXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTAyMy1yZWJhbGFuY2luZy1jb2hlcmVuY2UubWQKRTAyMTEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpZb3UgdXNlZCBhIGZ1bmN0aW9uIG9yIHR5cGUgd2hpY2ggZG9lc24ndCBmaXQgdGhlIHJlcXVpcmVtZW50cyBmb3Igd2hlcmUgaXQgd2FzCnVzZWQuIEVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxUPigpOyAvLyBlcnJvcjogaW50cmluc2ljIGhhcyB3cm9uZyB0eXBlCn0KCi8vIG9yOgoKZm4gbWFpbigpIC0+IGkzMiB7IDAgfQovLyBlcnJvcjogbWFpbiBmdW5jdGlvbiBleHBlY3RzIHR5cGU6IGBmbigpIHttYWlufWA6IGV4cGVjdGVkICgpLCBmb3VuZCBpMzIKCi8vIG9yOgoKbGV0IHggPSAxdTg7Cm1hdGNoIHggewogICAgMHU4Li49M2k4ID0+ICgpLAogICAgLy8gZXJyb3I6IG1pc21hdGNoZWQgdHlwZXMgaW4gcmFuZ2U6IGV4cGVjdGVkIHU4LCBmb3VuZCBpOAogICAgXyA9PiAoKQp9CgovLyBvcjoKCnVzZSBzdGQ6OnJjOjpSYzsKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIHgoc2VsZjogUmM8Rm9vPikge30KICAgIC8vIGVycm9yOiBtaXNtYXRjaGVkIHNlbGYgdHlwZTogZXhwZWN0ZWQgYEZvb2A6IGV4cGVjdGVkIHN0cnVjdAogICAgLy8gICAgICAgIGBGb29gLCBmb3VuZCBzdHJ1Y3QgYGFsbG9jOjpyYzo6UmNgCn0KYGBgCgpGb3IgdGhlIGZpcnN0IGNvZGUgZXhhbXBsZSwgcGxlYXNlIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoaW50cmluc2ljcyldCgpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICAjW3J1c3RjX3NhZmVfaW50cmluc2ljXQogICAgZm4gc2l6ZV9vZjxUPigpIC0+IHVzaXplOyAvLyBvayEKfQpgYGAKClRoZSBzZWNvbmQgY2FzZSBleGFtcGxlIGlzIGEgYml0IHBhcnRpY3VsYXI6IHRoZSBtYWluIGZ1bmN0aW9uIG11c3QgYWx3YXlzCmhhdmUgdGhpcyBkZWZpbml0aW9uOgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4oKTsKYGBgCgpUaGV5IG5ldmVyIHRha2UgcGFyYW1ldGVycyBhbmQgbmV2ZXIgcmV0dXJuIHR5cGVzLgoKRm9yIHRoZSB0aGlyZCBleGFtcGxlLCB3aGVuIHlvdSBtYXRjaCwgYWxsIHBhdHRlcm5zIG11c3QgaGF2ZSB0aGUgc2FtZSB0eXBlCmFzIHRoZSB0eXBlIHlvdSdyZSBtYXRjaGluZyBvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDF1ODsKCm1hdGNoIHggewogICAgMHU4Li49M3U4ID0+ICgpLCAvLyBvayEKICAgIF8gPT4gKCkKfQpgYGAKCkFuZCBmaW5hbGx5LCBmb3IgdGhlIGxhc3QgZXhhbXBsZSwgb25seSBgQm94PFNlbGY+YCwgYCZTZWxmYCwgYFNlbGZgLApvciBgJm11dCBTZWxmYCB3b3JrIGFzIGV4cGxpY2l0IHNlbGYgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4geChzZWxmOiBCb3g8Rm9vPikge30gLy8gb2shCn0KYGBgCkUwMjEyQ2Fubm90IHVzZSB0aGUgYXNzb2NpYXRlZCB0eXBlIG9mCmEgdHJhaXQgd2l0aCB1bmluZmVycmVkIGdlbmVyaWMgcGFyYW1ldGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMTIKcHViIHRyYWl0IEZvbzxUPiB7CiAgICB0eXBlIEE7CgogICAgZm4gZ2V0KCZzZWxmLCB0OiBUKSAtPiBTZWxmOjpBOwp9CgpmbiBmb28yPEkgOiBmb3I8J3g+IEZvbzwmJ3ggaXNpemU+PigKICAgIGZpZWxkOiBJOjpBKSB7fSAvLyBlcnJvciEKYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHdlIGhhdmUgdG8gaW5zdGFudGlhdGUgYCd4YCwgYW5kCndlIGRvbid0IGtub3cgd2hhdCBsaWZldGltZSB0byBpbnN0YW50aWF0ZSBpdCB3aXRoLgpUbyBmaXggdGhpcywgc3BlbGwgb3V0IHRoZSBwcmVjaXNlIGxpZmV0aW1lcyBpbnZvbHZlZC4KRXhhbXBsZToKCmBgYApwdWIgdHJhaXQgRm9vPFQ+IHsKICAgIHR5cGUgQTsKCiAgICBmbiBnZXQoJnNlbGYsIHQ6IFQpIC0+IFNlbGY6OkE7Cn0KCmZuIGZvbzM8SSA6IGZvcjwneD4gRm9vPCYneCBpc2l6ZT4+KAogICAgeDogPEkgYXMgRm9vPCZpc2l6ZT4+OjpBKSB7fSAvLyBvayEKCgpmbiBmb280PCdhLCBJIDogZm9yPCd4PiBGb288Jid4IGlzaXplPj4oCiAgICB4OiA8SSBhcyBGb288JidhIGlzaXplPj46OkEpIHt9IC8vIG9rIQpgYGAKRTAyMTRBIGdlbmVyaWMgdHlwZSB3YXMgZGVzY3JpYmVkIHVzaW5nIHBhcmVudGhlc2VzIHJhdGhlciB0aGFuIGFuZ2xlIGJyYWNrZXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIxNApsZXQgdjogVmVjKCZzdHIpID0gdmVjIVsiZm9vIl07CmBgYAoKVGhpcyBpcyBub3QgY3VycmVudGx5IHN1cHBvcnRlZDogYHZgIHNob3VsZCBiZSBkZWZpbmVkIGFzIGBWZWM8JnN0cj5gLgpQYXJlbnRoZXNlcyBhcmUgY3VycmVudGx5IG9ubHkgdXNlZCB3aXRoIGdlbmVyaWMgdHlwZXMgd2hlbiBkZWZpbmluZyBwYXJhbWV0ZXJzCmZvciBgRm5gLWZhbWlseSB0cmFpdHMuCgpUaGUgcHJldmlvdXMgY29kZSBleGFtcGxlIGZpeGVkOgoKYGBgCmxldCB2OiBWZWM8JnN0cj4gPSB2ZWMhWyJmb28iXTsKYGBgCkUwMjIwVGhlIGFzc29jaWF0ZWQgdHlwZSB1c2VkIHdhcyBub3QgZGVmaW5lZCBpbiB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIwCnRyYWl0IFQxIHsKICAgIHR5cGUgQmFyOwp9Cgp0eXBlIEZvbyA9IFQxPEY9aTMyPjsgLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBgRmAgbm90IGZvdW5kIGZvciBgVDFgCgovLyBvcjoKCnRyYWl0IFQyIHsKICAgIHR5cGUgQmFyOwoKICAgIC8vIGVycm9yOiBCYXogaXMgdXNlZCBidXQgbm90IGRlY2xhcmVkCiAgICBmbiByZXR1cm5fYm9vbCgmc2VsZiwgXzogJlNlbGY6OkJhciwgXzogJlNlbGY6OkJheikgLT4gYm9vbDsKfQpgYGAKCk1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIGRlZmluZWQgdGhlIGFzc29jaWF0ZWQgdHlwZSBpbiB0aGUgdHJhaXQgYm9keS4KQWxzbywgdmVyaWZ5IHRoYXQgeW91IHVzZWQgdGhlIHJpZ2h0IHRyYWl0IG9yIHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlCmFzc29jaWF0ZWQgdHlwZSBuYW1lLiBFeGFtcGxlOgoKYGBgCnRyYWl0IFQxIHsKICAgIHR5cGUgQmFyOwp9Cgp0eXBlIEZvbyA9IFQxPEJhcj1pMzI+OyAvLyBvayEKCi8vIG9yOgoKdHJhaXQgVDIgewogICAgdHlwZSBCYXI7CiAgICB0eXBlIEJhejsgLy8gd2UgZGVjbGFyZSBgQmF6YCBpbiBvdXIgdHJhaXQuCgogICAgLy8gYW5kIG5vdyB3ZSBjYW4gdXNlIGl0IGhlcmU6CiAgICBmbiByZXR1cm5fYm9vbCgmc2VsZiwgXzogJlNlbGY6OkJhciwgXzogJlNlbGY6OkJheikgLT4gYm9vbDsKfQpgYGAKRTAyMjFBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIHJldHJpZXZlIGFuIGFzc29jaWF0ZWQgdHlwZSwgYnV0IHRoZSB0eXBlIHdhcyBhbWJpZ3VvdXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjIxCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IFNlbGY6OkE7CiAgICB9Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGBGb29gIGRlZmluZXMgYW4gYXNzb2NpYXRlZCB0eXBlIGBBYC4gYEJhcmAgaW5oZXJpdHMgdGhhdCB0eXBlCmZyb20gYEZvb2AsIGFuZCBkZWZpbmVzIGFub3RoZXIgYXNzb2NpYXRlZCB0eXBlIG9mIHRoZSBzYW1lIG5hbWUuIEFzIGEgcmVzdWx0LAp3aGVuIHdlIGF0dGVtcHQgdG8gdXNlIGBTZWxmOjpBYCwgaXQncyBhbWJpZ3VvdXMgd2hldGhlciB3ZSBtZWFuIHRoZSBgQWAgZGVmaW5lZApieSBgRm9vYCBvciB0aGUgb25lIGRlZmluZWQgYnkgYEJhcmAuCgpUaGVyZSBhcmUgdHdvIG9wdGlvbnMgdG8gd29yayBhcm91bmQgdGhpcyBpc3N1ZS4gVGhlIGZpcnN0IGlzIHNpbXBseSB0byByZW5hbWUKb25lIG9mIHRoZSB0eXBlcy4gQWx0ZXJuYXRpdmVseSwgb25lIGNhbiBzcGVjaWZ5IHRoZSBpbnRlbmRlZCB0eXBlIHVzaW5nIHRoZQpmb2xsb3dpbmcgc3ludGF4OgoKYGBgCnRyYWl0IFQxIHt9CnRyYWl0IFQyIHt9Cgp0cmFpdCBGb28gewogICAgdHlwZSBBOiBUMTsKfQoKdHJhaXQgQmFyIDogRm9vIHsKICAgIHR5cGUgQTogVDI7CiAgICBmbiBkb19zb21ldGhpbmcoKSB7CiAgICAgICAgbGV0IF86IDxTZWxmIGFzIEJhcj46OkE7CiAgICB9Cn0KYGBgCkUwMjIyQW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBjb25zdHJhaW4gYW4gYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyMgpwdWIgdHJhaXQgVmVoaWNsZSB7CiAgICB0eXBlIENvbG9yOwp9CgpwdWIgdHJhaXQgQm94IHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3hDYXIgOiBCb3ggKyBWZWhpY2xlIHt9CgpmbiBkZW50X29iamVjdDxDT0xPUj4oYzogZHluIEJveENhcjxDb2xvcj1DT0xPUj4pIHt9IC8vIEludmFsaWQgY29uc3RyYWludApgYGAKCkluIHRoaXMgZXhhbXBsZSwgYEJveENhcmAgaGFzIHR3byBzdXBlcnRyYWl0czogYFZlaGljbGVgIGFuZCBgQm94YC4gQm90aCBvZgp0aGVzZSB0cmFpdHMgZGVmaW5lIGFuIGFzc29jaWF0ZWQgdHlwZSBgQ29sb3JgLiBgQm94Q2FyYCBpbmhlcml0cyB0d28gdHlwZXMKd2l0aCB0aGF0IG5hbWUgZnJvbSBib3RoIHN1cGVydHJhaXRzLiBCZWNhdXNlIG9mIHRoaXMsIHdlIG5lZWQgdG8gdXNlIHRoZQpmdWxseSBxdWFsaWZpZWQgcGF0aCBzeW50YXggdG8gcmVmZXIgdG8gdGhlIGFwcHJvcHJpYXRlIGBDb2xvcmAgYXNzb2NpYXRlZAp0eXBlLCBlaXRoZXIgYDxCb3hDYXIgYXMgVmVoaWNsZT46OkNvbG9yYCBvciBgPEJveENhciBhcyBCb3g+OjpDb2xvcmAsIGJ1dCB0aGlzCnN5bnRheCBpcyBub3QgYWxsb3dlZCB0byBiZSB1c2VkIGluIGEgZnVuY3Rpb24gc2lnbmF0dXJlLgoKSW4gb3JkZXIgdG8gZW5jb2RlIHRoaXMga2luZCBvZiBjb25zdHJhaW50LCBhIGB3aGVyZWAgY2xhdXNlIGFuZCBhIG5ldyB0eXBlCnBhcmFtZXRlciBhcmUgbmVlZGVkOgoKYGBgCnB1YiB0cmFpdCBWZWhpY2xlIHsKICAgIHR5cGUgQ29sb3I7Cn0KCnB1YiB0cmFpdCBCb3ggewogICAgdHlwZSBDb2xvcjsKfQoKcHViIHRyYWl0IEJveENhciA6IEJveCArIFZlaGljbGUge30KCi8vIEludHJvZHVjZSBhIG5ldyBgQ0FSYCB0eXBlIHBhcmFtZXRlcgpmbiBmb288Q0FSLCBDT0xPUj4oCiAgICBjOiBDQVIsCikgd2hlcmUKICAgIC8vIEJpbmQgdGhlIHR5cGUgcGFyYW1ldGVyIGBDQVJgIHRvIHRoZSB0cmFpdCBgQm94Q2FyYAogICAgQ0FSOiBCb3hDYXIsCiAgICAvLyBGdXJ0aGVyIHJlc3RyaWN0IGA8Qm94Q2FyIGFzIFZlaGljbGU+OjpDb2xvcmAgdG8gYmUgdGhlIHNhbWUgYXMgdGhlCiAgICAvLyB0eXBlIHBhcmFtZXRlciBgQ09MT1JgCiAgICBDQVI6IFZlaGljbGU8Q29sb3IgPSBDT0xPUj4sCiAgICAvLyBXZSBjYW4gYWxzbyBzaW11bHRhbmVvdXNseSByZXN0cmljdCB0aGUgb3RoZXIgdHJhaXQncyBhc3NvY2lhdGVkIHR5cGUKICAgIENBUjogQm94PENvbG9yID0gQ09MT1I+Cnt9CmBgYApFMDIyM0FuIGF0dGVtcHQgd2FzIG1hZGUgdG8gcmV0cmlldmUgYW4gYXNzb2NpYXRlZCB0eXBlLCBidXQgdGhlIHR5cGUgd2FzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjMKdHJhaXQgTXlUcmFpdCB7dHlwZSBYOyB9CgpmbiBtYWluKCkgewogICAgbGV0IGZvbzogTXlUcmFpdDo6WDsKfQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB3ZSdyZSBhdHRlbXB0aW5nIHRvIHRha2UgdGhlIHR5cGUgb2YgWCBmcm9tIE15VHJhaXQuClVuZm9ydHVuYXRlbHksIHRoZSB0eXBlIG9mIFggaXMgbm90IGRlZmluZWQsIGJlY2F1c2UgaXQncyBvbmx5IG1hZGUgY29uY3JldGUgaW4KaW1wbGVtZW50YXRpb25zIG9mIHRoZSB0cmFpdC4gQSB3b3JraW5nIHZlcnNpb24gb2YgdGhpcyBjb2RlIG1pZ2h0IGxvb2sgbGlrZToKCmBgYAp0cmFpdCBNeVRyYWl0IHt0eXBlIFg7IH0Kc3RydWN0IE15U3RydWN0OwoKaW1wbCBNeVRyYWl0IGZvciBNeVN0cnVjdCB7CiAgICB0eXBlIFggPSB1MzI7Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgZm9vOiA8TXlTdHJ1Y3QgYXMgTXlUcmFpdD46Olg7Cn0KYGBgCgpUaGlzIHN5bnRheCBzcGVjaWZpZXMgdGhhdCB3ZSB3YW50IHRoZSBYIHR5cGUgZnJvbSBNeVRyYWl0LCBhcyBtYWRlIGNvbmNyZXRlIGluCk15U3RydWN0LiBUaGUgcmVhc29uIHRoYXQgd2UgY2Fubm90IHNpbXBseSB1c2UgYE15U3RydWN0OjpYYCBpcyB0aGF0IE15U3RydWN0Cm1pZ2h0IGltcGxlbWVudCB0d28gZGlmZmVyZW50IHRyYWl0cyB3aXRoIGlkZW50aWNhbGx5LW5hbWVkIGFzc29jaWF0ZWQgdHlwZXMuClRoaXMgc3ludGF4IGFsbG93cyBkaXNhbWJpZ3VhdGlvbiBiZXR3ZWVuIHRoZSB0d28uCkUwMjI0QSB0cmFpdCBvYmplY3Qgd2FzIGRlY2xhcmVkIHdpdGggbm8gdHJhaXRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNAp0eXBlIEZvbyA9IGR5biAnc3RhdGljICs7CmBgYAoKUnVzdCBkb2VzIG5vdCBjdXJyZW50bHkgc3VwcG9ydCB0aGlzLgoKVG8gc29sdmUsIGVuc3VyZSB0aGF0IHRoZSB0cmFpdCBvYmplY3QgaGFzIGF0IGxlYXN0IG9uZSB0cmFpdDoKCmBgYAp0eXBlIEZvbyA9IGR5biAnc3RhdGljICsgQ29weTsKYGBgCkUwMjI1TXVsdGlwbGUgdHlwZXMgd2VyZSB1c2VkIGFzIGJvdW5kcyBmb3IgYSBjbG9zdXJlIG9yIHRyYWl0IG9iamVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjUKZm4gbWFpbigpIHsKICAgIGxldCBfOiBCb3g8ZHluIHN0ZDo6aW86OlJlYWQgKyBzdGQ6OmlvOjpXcml0ZT47Cn0KYGBgCgpSdXN0IGRvZXMgbm90IGN1cnJlbnRseSBzdXBwb3J0IHRoaXMuCgpBdXRvIHRyYWl0cyBzdWNoIGFzIFNlbmQgYW5kIFN5bmMgYXJlIGFuIGV4Y2VwdGlvbiB0byB0aGlzIHJ1bGU6Ckl0J3MgcG9zc2libGUgdG8gaGF2ZSBib3VuZHMgb2Ygb25lIG5vbi1idWlsdGluIHRyYWl0LCBwbHVzIGFueSBudW1iZXIgb2YKYXV0byB0cmFpdHMuIEZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGNvbXBpbGVzIGNvcnJlY3RseToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IF86IEJveDxkeW4gc3RkOjppbzo6UmVhZCArIFNlbmQgKyBTeW5jPjsKfQpgYGAKRTAyMjZNb3JlIHRoYW4gb25lIGV4cGxpY2l0IGxpZmV0aW1lIGJvdW5kIHdhcyB1c2VkIG9uIGEgdHJhaXQgb2JqZWN0LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNgp0cmFpdCBGb28ge30KCnR5cGUgVDwnYSwgJ2I+ID0gZHluIEZvbyArICdhICsgJ2I7IC8vIGVycm9yOiBUcmFpdCBvYmplY3QgYGFyZ2AgaGFzIHR3bwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgbGlmZXRpbWUgYm91bmQsICdhIGFuZCAnYi4KYGBgCgpIZXJlIGBUYCBpcyBhIHRyYWl0IG9iamVjdCB3aXRoIHR3byBleHBsaWNpdCBsaWZldGltZSBib3VuZHMsICdhIGFuZCAnYi4KCk9ubHkgYSBzaW5nbGUgZXhwbGljaXQgbGlmZXRpbWUgYm91bmQgaXMgcGVybWl0dGVkIG9uIHRyYWl0IG9iamVjdHMuClRvIGZpeCB0aGlzIGVycm9yLCBjb25zaWRlciByZW1vdmluZyBvbmUgb2YgdGhlIGxpZmV0aW1lIGJvdW5kczoKCmBgYAp0cmFpdCBGb28ge30KCnR5cGUgVDwnYT4gPSBkeW4gRm9vICsgJ2E7CmBgYApFMDIyN1RoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byBkZXRlcm1pbmUgd2hldGhlciB0aGVyZSBpcwpleGFjdGx5IG9uZSB1bmlxdWUgcmVnaW9uIGluIHRoZSBzZXQgb2YgZGVyaXZlZCByZWdpb24gYm91bmRzLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyNwp0cmFpdCBGb288J2Zvbz46ICdmb28ge30KdHJhaXQgQmFyPCdiYXI+OiAnYmFyIHt9Cgp0cmFpdCBGb29CYXI8J2ZvbywgJ2Jhcj46IEZvbzwnZm9vPiArIEJhcjwnYmFyPiB7fQoKc3RydWN0IEJhejwnZm9vLCAnYmFyPiB7CiAgICBiYXo6IGR5biBGb29CYXI8J2ZvbywgJ2Jhcj4sCn0KYGBgCgpIZXJlLCBgYmF6YCBjYW4gaGF2ZSBlaXRoZXIgYCdmb29gIG9yIGAnYmFyYCBsaWZldGltZXMuCgpUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHByb3ZpZGUgYW4gZXhwbGljaXQgbGlmZXRpbWU6CgpgYGBydXN0CnRyYWl0IEZvbzwnZm9vPjogJ2ZvbyB7fQp0cmFpdCBCYXI8J2Jhcj46ICdiYXIge30KCnRyYWl0IEZvb0JhcjwnZm9vLCAnYmFyPjogRm9vPCdmb28+ICsgQmFyPCdiYXI+IHt9CgpzdHJ1Y3QgQmF6PCdmb28sICdiYXIsICdiYXo+CndoZXJlCiAgICAnYmF6OiAnZm9vICsgJ2JhciwKewogICAgb2JqOiBkeW4gRm9vQmFyPCdmb28sICdiYXI+ICsgJ2JheiwKfQpgYGAKRTAyMjhUaGUgbGlmZXRpbWUgYm91bmQgZm9yIHRoaXMgb2JqZWN0IHR5cGUgY2Fubm90IGJlIGRlZHVjZWQgZnJvbSBjb250ZXh0IGFuZCBtdXN0CmJlIHNwZWNpZmllZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyMjgKdHJhaXQgVHJhaXQgeyB9CgpzdHJ1Y3QgVHdvQm91bmRzPCdhLCAnYiwgVDogU2l6ZWQgKyAnYSArICdiPiB7CiAgICB4OiAmJ2EgaTMyLAogICAgeTogJidiIGkzMiwKICAgIHo6IFQsCn0KCnR5cGUgRm9vPCdhLCAnYj4gPSBUd29Cb3VuZHM8J2EsICdiLCBkeW4gVHJhaXQ+OwpgYGAKCldoZW4gYSB0cmFpdCBvYmplY3QgaXMgdXNlZCBhcyBhIHR5cGUgYXJndW1lbnQgb2YgYSBnZW5lcmljIHR5cGUsIFJ1c3Qgd2lsbCB0cnkKdG8gaW5mZXIgaXRzIGxpZmV0aW1lIGlmIHVuc3BlY2lmaWVkLiBIb3dldmVyLCB0aGlzIGlzbid0IHBvc3NpYmxlIHdoZW4gdGhlCmNvbnRhaW5pbmcgdHlwZSBoYXMgbW9yZSB0aGFuIG9uZSBsaWZldGltZSBib3VuZC4KClRoZSBhYm92ZSBleGFtcGxlIGNhbiBiZSByZXNvbHZlZCBieSBlaXRoZXIgcmVkdWNpbmcgdGhlIG51bWJlciBvZiBsaWZldGltZQpib3VuZHMgdG8gb25lIG9yIGJ5IG1ha2luZyB0aGUgdHJhaXQgb2JqZWN0IGxpZmV0aW1lIGV4cGxpY2l0LCBsaWtlIHNvOgoKYGBgCnRyYWl0IFRyYWl0IHsgfQoKc3RydWN0IFR3b0JvdW5kczwnYSwgJ2IsIFQ6IFNpemVkICsgJ2EgKyAnYj4gewogICAgeDogJidhIGkzMiwKICAgIHk6ICYnYiBpMzIsCiAgICB6OiBULAp9Cgp0eXBlIEZvbzwnYSwgJ2I+ID0gVHdvQm91bmRzPCdhLCAnYiwgZHluIFRyYWl0ICsgJ2I+OwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgW1JGQyA1OTldIGFuZCBpdHMgYW1lbmRtZW50IFtSRkMgMTE1Nl0uCgpbUkZDIDU5OV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzA1OTktZGVmYXVsdC1vYmplY3QtYm91bmQubWQKW1JGQyAxMTU2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTE1Ni1hZGp1c3QtZGVmYXVsdC1vYmplY3QtYm91bmRzLm1kCkUwMjI5QW4gYXNzb2NpYXRlZCB0eXBlIGJpbmRpbmcgd2FzIGRvbmUgb3V0c2lkZSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24KYW5kIGB3aGVyZWAgY2xhdXNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDIyOQpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQTsKICAgIGZuIGJvbygmc2VsZikgLT4gPFNlbGYgYXMgRm9vPjo6QTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBpc2l6ZSB7CiAgICB0eXBlIEEgPSB1c2l6ZTsKICAgIGZuIGJvbygmc2VsZikgLT4gdXNpemUgeyA0MiB9Cn0KCmZuIGJhejxJPih4OiAmPEkgYXMgRm9vPEE9QmFyPj46OkEpIHt9Ci8vIGVycm9yOiBhc3NvY2lhdGVkIHR5cGUgYmluZGluZ3MgYXJlIG5vdCBhbGxvd2VkIGhlcmUKYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCBwbGVhc2UgbW92ZSB0aGUgdHlwZSBiaW5kaW5ncyBpbiB0aGUgdHlwZSBwYXJhbWV0ZXIKZGVjbGFyYXRpb246CgpgYGAKIyBzdHJ1Y3QgQmFyOwojIHRyYWl0IEZvbyB7IHR5cGUgQTsgfQpmbiBiYXo8STogRm9vPEE9QmFyPj4oeDogJjxJIGFzIEZvbz46OkEpIHt9IC8vIG9rIQpgYGAKCk9yIGluIHRoZSBgd2hlcmVgIGNsYXVzZToKCmBgYAojIHN0cnVjdCBCYXI7CiMgdHJhaXQgRm9vIHsgdHlwZSBBOyB9CmZuIGJhejxJPih4OiAmPEkgYXMgRm9vPjo6QSkgd2hlcmUgSTogRm9vPEE9QmFyPiB7fQpgYGAKRTAyMzBUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMAojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZCA9ICJlcnJvciBvbiBge1NlbGZ9YCB3aXRoIHBhcmFtcyBgPHtBfSx7Qn0+YCJdIC8vIGVycm9yCnRyYWl0IEJhZEFubm90YXRpb248QT4ge30KYGBgCgpUaGVyZSB3aWxsIGJlIGFuIGVycm9yIGFib3V0IGBib29sYCBub3QgaW1wbGVtZW50aW5nIGBJbmRleDx1OD5gLCBmb2xsb3dlZCBieSBhCm5vdGUgc2F5aW5nICJ0aGUgdHlwZSBgYm9vbGAgY2Fubm90IGJlIGluZGV4ZWQgYnkgYHU4YCIuCgpBcyB5b3UgY2FuIHNlZSwgeW91IGNhbiBzcGVjaWZ5IHR5cGUgcGFyYW1ldGVycyBpbiBjdXJseSBicmFjZXMgZm9yCnN1YnN0aXR1dGlvbiB3aXRoIHRoZSBhY3R1YWwgdHlwZXMgKHVzaW5nIHRoZSByZWd1bGFyIGZvcm1hdCBzdHJpbmcgc3ludGF4KSBpbgphIGdpdmVuIHNpdHVhdGlvbi4gRnVydGhlcm1vcmUsIGB7U2VsZn1gIHdpbGwgc3Vic3RpdHV0ZSB0byB0aGUgdHlwZSAoaW4gdGhpcwpjYXNlLCBgYm9vbGApIHRoYXQgd2UgdHJpZWQgdG8gdXNlLgoKVGhpcyBlcnJvciBhcHBlYXJzIHdoZW4gdGhlIGN1cmx5IGJyYWNlcyBjb250YWluIGFuIGlkZW50aWZpZXIgd2hpY2ggZG9lc24ndAptYXRjaCB3aXRoIGFueSBvZiB0aGUgdHlwZSBwYXJhbWV0ZXJzIG9yIHRoZSBzdHJpbmcgYFNlbGZgLiBUaGlzIG1pZ2h0IGhhcHBlbgppZiB5b3UgbWlzc3BlbGxlZCBhIHR5cGUgcGFyYW1ldGVyLCBvciBpZiB5b3UgaW50ZW5kZWQgdG8gdXNlIGxpdGVyYWwgY3VybHkKYnJhY2VzLiBJZiBpdCBpcyB0aGUgbGF0dGVyLCBlc2NhcGUgdGhlIGN1cmx5IGJyYWNlcyB3aXRoIGEgc2Vjb25kIGN1cmx5IGJyYWNlCm9mIHRoZSBzYW1lIHR5cGU7IGUuZy4sIGEgbGl0ZXJhbCBge2AgaXMgYHt7YC4KRTAyMzFUaGUgYCNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZF1gIGF0dHJpYnV0ZSBsZXRzIHlvdSBzcGVjaWZ5IGEgY3VzdG9tIGVycm9yCm1lc3NhZ2UgZm9yIHdoZW4gYSBwYXJ0aWN1bGFyIHRyYWl0IGlzbid0IGltcGxlbWVudGVkIG9uIGEgdHlwZSBwbGFjZWQgaW4gYQpwb3NpdGlvbiB0aGF0IG5lZWRzIHRoYXQgdHJhaXQuIEZvciBleGFtcGxlLCB3aGVuIHRoZSBmb2xsb3dpbmcgY29kZSBpcwpjb21waWxlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDIzMQojIVtmZWF0dXJlKHJ1c3RjX2F0dHJzKV0KCiNbcnVzdGNfb25fdW5pbXBsZW1lbnRlZCA9ICJlcnJvciBvbiBge1NlbGZ9YCB3aXRoIHBhcmFtcyBgPHtBfSx7fT5gIl0gLy8gZXJyb3IhCnRyYWl0IEJhZEFubm90YXRpb248QT4ge30KYGBgCgp0aGVyZSB3aWxsIGJlIGFuIGVycm9yIGFib3V0IGBib29sYCBub3QgaW1wbGVtZW50aW5nIGBJbmRleDx1OD5gLCBmb2xsb3dlZCBieSBhCm5vdGUgc2F5aW5nICJ0aGUgdHlwZSBgYm9vbGAgY2Fubm90IGJlIGluZGV4ZWQgYnkgYHU4YCIuCgpBcyB5b3UgY2FuIHNlZSwgeW91IGNhbiBzcGVjaWZ5IHR5cGUgcGFyYW1ldGVycyBpbiBjdXJseSBicmFjZXMgZm9yCnN1YnN0aXR1dGlvbiB3aXRoIHRoZSBhY3R1YWwgdHlwZXMgKHVzaW5nIHRoZSByZWd1bGFyIGZvcm1hdCBzdHJpbmcgc3ludGF4KSBpbgphIGdpdmVuIHNpdHVhdGlvbi4gRnVydGhlcm1vcmUsIGB7U2VsZn1gIHdpbGwgc3Vic3RpdHV0ZSB0byB0aGUgdHlwZSAoaW4gdGhpcwpjYXNlLCBgYm9vbGApIHRoYXQgd2UgdHJpZWQgdG8gdXNlLgoKVGhpcyBlcnJvciBhcHBlYXJzIHdoZW4gdGhlIGN1cmx5IGJyYWNlcyBkbyBub3QgY29udGFpbiBhbiBpZGVudGlmaWVyLiBQbGVhc2UKYWRkIG9uZSBvZiB0aGUgc2FtZSBuYW1lIGFzIGEgdHlwZSBwYXJhbWV0ZXIuIElmIHlvdSBpbnRlbmRlZCB0byB1c2UgbGl0ZXJhbApicmFjZXMsIHVzZSBge3tgIGFuZCBgfX1gIHRvIGVzY2FwZSB0aGVtLgpFMDIzMlRoZSBgI1tydXN0Y19vbl91bmltcGxlbWVudGVkXWAgYXR0cmlidXRlIGxldHMgeW91IHNwZWNpZnkgYSBjdXN0b20gZXJyb3IKbWVzc2FnZSBmb3Igd2hlbiBhIHBhcnRpY3VsYXIgdHJhaXQgaXNuJ3QgaW1wbGVtZW50ZWQgb24gYSB0eXBlIHBsYWNlZCBpbiBhCnBvc2l0aW9uIHRoYXQgbmVlZHMgdGhhdCB0cmFpdC4gRm9yIGV4YW1wbGUsIHdoZW4gdGhlIGZvbGxvd2luZyBjb2RlIGlzCmNvbXBpbGVkOgoKYGBgY29tcGlsZV9mYWlsLEUwMjMyCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19vbl91bmltcGxlbWVudGVkKGxvcmVtPSIiKV0gLy8gZXJyb3IhCnRyYWl0IEJhZEFubm90YXRpb24ge30KYGBgCgp0aGVyZSB3aWxsIGJlIGFuIGVycm9yIGFib3V0IGBib29sYCBub3QgaW1wbGVtZW50aW5nIGBJbmRleDx1OD5gLCBmb2xsb3dlZCBieSBhCm5vdGUgc2F5aW5nICJ0aGUgdHlwZSBgYm9vbGAgY2Fubm90IGJlIGluZGV4ZWQgYnkgYHU4YCIuCgpGb3IgdGhpcyB0byB3b3JrLCBzb21lIG5vdGUgbXVzdCBiZSBzcGVjaWZpZWQuIEFuIGVtcHR5IGF0dHJpYnV0ZSB3aWxsIG5vdCBkbwphbnl0aGluZywgcGxlYXNlIHJlbW92ZSB0aGUgYXR0cmlidXRlIG9yIGFkZCBzb21lIGhlbHBmdWwgbm90ZSBmb3IgdXNlcnMgb2YgdGhlCnRyYWl0LgpFMDI0MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgbm90IGVub3VnaCB0eXBlIHBhcmFtZXRlcnMgd2VyZSBmb3VuZCBpbiBhIHR5cGUgb3IKdHJhaXQuCgpGb3IgZXhhbXBsZSwgdGhlIGBGb29gIHN0cnVjdCBiZWxvdyBpcyBkZWZpbmVkIHRvIGJlIGdlbmVyaWMgaW4gYFRgLCBidXQgdGhlCnR5cGUgcGFyYW1ldGVyIGlzIG1pc3NpbmcgaW4gdGhlIGRlZmluaXRpb24gb2YgYEJhcmA6CgpgYGBjb21waWxlX2ZhaWwsRTAxMDcKc3RydWN0IEZvbzxUPiB7IHg6IFQgfQoKc3RydWN0IEJhciB7IHg6IEZvbyB9CmBgYApFMDI0NCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdG9vIG1hbnkgdHlwZSBwYXJhbWV0ZXJzIHdlcmUgZm91bmQgaW4gYSB0eXBlIG9yCnRyYWl0LgoKRm9yIGV4YW1wbGUsIHRoZSBgRm9vYCBzdHJ1Y3QgYmVsb3cgaGFzIG5vIHR5cGUgcGFyYW1ldGVycywgYnV0IGlzIHN1cHBsaWVkCndpdGggdHdvIGluIHRoZSBkZWZpbml0aW9uIG9mIGBCYXJgOgoKYGBgY29tcGlsZV9mYWlsLEUwMTA3CnN0cnVjdCBGb28geyB4OiBib29sIH0KCnN0cnVjdCBCYXI8UywgVD4geyB4OiBGb288UywgVD4gfQpgYGAKRTAyNTEjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUd28gaXRlbXMgb2YgdGhlIHNhbWUgbmFtZSBjYW5ub3QgYmUgaW1wb3J0ZWQgd2l0aG91dCByZWJpbmRpbmcgb25lIG9mIHRoZQppdGVtcyB1bmRlciBhIG5ldyBsb2NhbCBuYW1lLgoKQW4gZXhhbXBsZSBvZiB0aGlzIGVycm9yOgoKYGBgCnVzZSBmb286OmJhejsKdXNlIGJhcjo6KjsgLy8gZXJyb3IsIGRvIGB1c2UgZm9vOjpiYXogYXMgcXV1eGAgaW5zdGVhZCBvbiB0aGUgcHJldmlvdXMgbGluZQoKZm4gbWFpbigpIHt9Cgptb2QgZm9vIHsKICAgIHB1YiBzdHJ1Y3QgYmF6Owp9Cgptb2QgYmFyIHsKICAgIHB1YiBtb2QgYmF6IHt9Cn0KYGBgCkUwMjUyVHdvIGl0ZW1zIG9mIHRoZSBzYW1lIG5hbWUgY2Fubm90IGJlIGltcG9ydGVkIHdpdGhvdXQgcmViaW5kaW5nIG9uZSBvZiB0aGUKaXRlbXMgdW5kZXIgYSBuZXcgbG9jYWwgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTIKdXNlIGZvbzo6YmF6Owp1c2UgYmFyOjpiYXo7IC8vIGVycm9yLCBkbyBgdXNlIGJhcjo6YmF6IGFzIHF1dXhgIGluc3RlYWQKCmZuIG1haW4oKSB7fQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYAoKWW91IGNhbiB1c2UgYWxpYXNlcyBpbiBvcmRlciB0byBmaXggdGhpcyBlcnJvci4gRXhhbXBsZToKCmBgYAp1c2UgZm9vOjpiYXogYXMgZm9vX2JhejsKdXNlIGJhcjo6YmF6OyAvLyBvayEKCmZuIG1haW4oKSB7fQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYAoKT3IgeW91IGNhbiByZWZlcmVuY2UgdGhlIGl0ZW0gd2l0aCBpdHMgcGFyZW50OgoKYGBgCnVzZSBiYXI6OmJhejsKCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IGZvbzo6YmF6OyAvLyBvayEKfQoKbW9kIGZvbyB7CiAgICBwdWIgc3RydWN0IGJhejsKfQoKbW9kIGJhciB7CiAgICBwdWIgbW9kIGJheiB7fQp9CmBgYApFMDI1M0F0dGVtcHQgd2FzIG1hZGUgdG8gaW1wb3J0IGFuIHVuaW1wb3J0YWJsZSB2YWx1ZS4gVGhpcyBjYW4gaGFwcGVuIHdoZW4gdHJ5aW5nCnRvIGltcG9ydCBhIG1ldGhvZCBmcm9tIGEgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjUzCm1vZCBmb28gewogICAgcHViIHRyYWl0IE15VHJhaXQgewogICAgICAgIGZuIGRvX3NvbWV0aGluZygpOwogICAgfQp9Cgp1c2UgZm9vOjpNeVRyYWl0Ojpkb19zb21ldGhpbmc7Ci8vIGVycm9yOiBgZG9fc29tZXRoaW5nYCBpcyBub3QgZGlyZWN0bHkgaW1wb3J0YWJsZQoKZm4gbWFpbigpIHt9CmBgYAoKSXQncyBpbnZhbGlkIHRvIGRpcmVjdGx5IGltcG9ydCBtZXRob2RzIGJlbG9uZ2luZyB0byBhIHRyYWl0IG9yIGNvbmNyZXRlIHR5cGUuCkUwMjU0QXR0ZW1wdCB3YXMgbWFkZSB0byBpbXBvcnQgYW4gaXRlbSB3aGVyZWFzIGFuIGV4dGVybiBjcmF0ZSB3aXRoIHRoaXMgbmFtZSBoYXMKYWxyZWFkeSBiZWVuIGltcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI1NApleHRlcm4gY3JhdGUgY29yZTsKCm1vZCBmb28gewogICAgcHViIHRyYWl0IGNvcmUgewogICAgICAgIGZuIGRvX3NvbWV0aGluZygpOwogICAgfQp9Cgp1c2UgZm9vOjpjb3JlOyAgLy8gZXJyb3I6IGFuIGV4dGVybiBjcmF0ZSBuYW1lZCBgY29yZWAgaGFzIGFscmVhZHkKICAgICAgICAgICAgICAgIC8vICAgICAgICBiZWVuIGltcG9ydGVkIGluIHRoaXMgbW9kdWxlCgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IGhhdmUgdG8gcmVuYW1lIGF0IGxlYXN0IG9uZSBvZiB0aGUgdHdvIGltcG9ydHMuCkV4YW1wbGU6CgpgYGAKZXh0ZXJuIGNyYXRlIGNvcmUgYXMgbGliY29yZTsgLy8gb2shCgptb2QgZm9vIHsKICAgIHB1YiB0cmFpdCBjb3JlIHsKICAgICAgICBmbiBkb19zb21ldGhpbmcoKTsKICAgIH0KfQoKdXNlIGZvbzo6Y29yZTsKCmZuIG1haW4oKSB7fQpgYGAKRTAyNTVZb3UgY2FuJ3QgaW1wb3J0IGEgdmFsdWUgd2hvc2UgbmFtZSBpcyB0aGUgc2FtZSBhcyBhbm90aGVyIHZhbHVlIGRlZmluZWQgaW4gdGhlCm1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNTUKdXNlIGJhcjo6Zm9vOyAvLyBlcnJvcjogYW4gaXRlbSBuYW1lZCBgZm9vYCBpcyBhbHJlYWR5IGluIHNjb3BlCgpmbiBmb28oKSB7fQoKbW9kIGJhciB7CiAgICAgcHViIGZuIGZvbygpIHt9Cn0KCmZuIG1haW4oKSB7fQpgYGAKCllvdSBjYW4gdXNlIGFsaWFzZXMgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3IuIEV4YW1wbGU6CgpgYGAKdXNlIGJhcjo6Zm9vIGFzIGJhcl9mb287IC8vIG9rIQoKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkge30KYGBgCgpPciB5b3UgY2FuIHJlZmVyZW5jZSB0aGUgaXRlbSB3aXRoIGl0cyBwYXJlbnQ6CgpgYGAKZm4gZm9vKCkge30KCm1vZCBiYXIgewogICAgIHB1YiBmbiBmb28oKSB7fQp9CgpmbiBtYWluKCkgewogICAgYmFyOjpmb28oKTsgLy8gd2UgZ2V0IHRoZSBpdGVtIGJ5IHJlZmVycmluZyB0byBpdHMgcGFyZW50Cn0KYGBgCkUwMjU2IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKWW91IGNhbid0IGltcG9ydCBhIHR5cGUgb3IgbW9kdWxlIHdoZW4gdGhlIG5hbWUgb2YgdGhlIGl0ZW0gYmVpbmcgaW1wb3J0ZWQgaXMKdGhlIHNhbWUgYXMgYW5vdGhlciB0eXBlIG9yIHN1Ym1vZHVsZSBkZWZpbmVkIGluIHRoZSBtb2R1bGUuCgpBbiBleGFtcGxlIG9mIHRoaXMgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwKdXNlIGZvbzo6QmFyOyAvLyBlcnJvcgoKdHlwZSBCYXIgPSB1MzI7Cgptb2QgZm9vIHsKICAgIHB1YiBtb2QgQmFyIHsgfQp9CgpmbiBtYWluKCkge30KYGBgCkUwMjU5VGhlIG5hbWUgY2hvc2VuIGZvciBhbiBleHRlcm5hbCBjcmF0ZSBjb25mbGljdHMgd2l0aCBhbm90aGVyIGV4dGVybmFsIGNyYXRlCnRoYXQgaGFzIGJlZW4gaW1wb3J0ZWQgaW50byB0aGUgY3VycmVudCBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjU5CmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIGNvcmU7CgpmbiBtYWluKCkge30KYGBgCgpUaGUgc29sdXRpb24gaXMgdG8gY2hvb3NlIGEgZGlmZmVyZW50IG5hbWUgdGhhdCBkb2Vzbid0IGNvbmZsaWN0IHdpdGggYW55CmV4dGVybmFsIGNyYXRlIGltcG9ydGVkIGludG8gdGhlIGN1cnJlbnQgbW9kdWxlLgoKQ29ycmVjdCBleGFtcGxlOgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwpleHRlcm4gY3JhdGUgc3RkIGFzIG90aGVyX25hbWU7CgpmbiBtYWluKCkge30KYGBgCkUwMjYwVGhlIG5hbWUgZm9yIGFuIGl0ZW0gZGVjbGFyYXRpb24gY29uZmxpY3RzIHdpdGggYW4gZXh0ZXJuYWwgY3JhdGUncyBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MApleHRlcm4gY3JhdGUgY29yZTsKCnN0cnVjdCBjb3JlOwoKZm4gbWFpbigpIHt9CmBgYAoKVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBzb2x1dGlvbnM6CgpTb2x1dGlvbiAjMTogUmVuYW1lIHRoZSBpdGVtLgoKYGBgCmV4dGVybiBjcmF0ZSBjb3JlOwoKc3RydWN0IHh5ejsKYGBgCgpTb2x1dGlvbiAjMjogSW1wb3J0IHRoZSBjcmF0ZSB3aXRoIGEgZGlmZmVyZW50IG5hbWUuCgpgYGAKZXh0ZXJuIGNyYXRlIGNvcmUgYXMgeHl6OwoKc3RydWN0IGFiYzsKYGBgCgpTZWUgdGhlIFtEZWNsYXJhdGlvbiBTdGF0ZW1lbnRzXVtkZWNsYXJhdGlvbi1zdGF0ZW1lbnRzXSBzZWN0aW9uIG9mIHRoZQpyZWZlcmVuY2UgZm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgd2hhdCBjb25zdGl0dXRlcyBhbiBpdGVtIGRlY2xhcmF0aW9uCmFuZCB3aGF0IGRvZXMgbm90LgoKW2RlY2xhcmF0aW9uLXN0YXRlbWVudHNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9zdGF0ZW1lbnRzLmh0bWwjZGVjbGFyYXRpb24tc3RhdGVtZW50cwpFMDI2MUFuIHVuZGVjbGFyZWQgbGlmZXRpbWUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjYxCi8vIGVycm9yLCB1c2Ugb2YgdW5kZWNsYXJlZCBsaWZldGltZSBuYW1lIGAnYWAKZm4gZm9vKHg6ICYnYSBzdHIpIHsgfQoKc3RydWN0IEZvbyB7CiAgICAvLyBlcnJvciwgdXNlIG9mIHVuZGVjbGFyZWQgbGlmZXRpbWUgbmFtZSBgJ2FgCiAgICB4OiAmJ2Egc3RyLAp9CmBgYAoKVGhlc2UgY2FuIGJlIGZpeGVkIGJ5IGRlY2xhcmluZyBsaWZldGltZSBwYXJhbWV0ZXJzOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBzdHIsCn0KCmZuIGZvbzwnYT4oeDogJidhIHN0cikge30KYGBgCgpJbXBsIGJsb2NrcyBkZWNsYXJlIGxpZmV0aW1lIHBhcmFtZXRlcnMgc2VwYXJhdGVseS4gWW91IG5lZWQgdG8gYWRkIGxpZmV0aW1lCnBhcmFtZXRlcnMgdG8gYW4gaW1wbCBibG9jayBpZiB5b3UncmUgaW1wbGVtZW50aW5nIGEgdHlwZSB0aGF0IGhhcyBhIGxpZmV0aW1lCnBhcmFtZXRlciBvZiBpdHMgb3duLgpGb3IgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MQpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiAmJ2Egc3RyLAp9CgovLyBlcnJvciwgIHVzZSBvZiB1bmRlY2xhcmVkIGxpZmV0aW1lIG5hbWUgYCdhYAppbXBsIEZvbzwnYT4gewogICAgZm4gZm9vPCdhPih4OiAmJ2Egc3RyKSB7fQp9CmBgYAoKVGhpcyBpcyBmaXhlZCBieSBkZWNsYXJpbmcgdGhlIGltcGwgYmxvY2sgbGlrZSB0aGlzOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6ICYnYSBzdHIsCn0KCi8vIGNvcnJlY3QKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmb28oeDogJidhIHN0cikge30KfQpgYGAKRTAyNjJBbiBpbnZhbGlkIG5hbWUgd2FzIHVzZWQgZm9yIGEgbGlmZXRpbWUgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2MgovLyBlcnJvciwgaW52YWxpZCBsaWZldGltZSBwYXJhbWV0ZXIgbmFtZSBgJ3N0YXRpY2AKZm4gZm9vPCdzdGF0aWM+KHg6ICYnc3RhdGljIHN0cikgeyB9CmBgYAoKRGVjbGFyaW5nIGNlcnRhaW4gbGlmZXRpbWUgbmFtZXMgaW4gcGFyYW1ldGVycyBpcyBkaXNhbGxvd2VkLiBGb3IgZXhhbXBsZSwKYmVjYXVzZSB0aGUgYCdzdGF0aWNgIGxpZmV0aW1lIGlzIGEgc3BlY2lhbCBidWlsdC1pbiBsaWZldGltZSBuYW1lIGRlbm90aW5nCnRoZSBsaWZldGltZSBvZiB0aGUgZW50aXJlIHByb2dyYW0sIHRoaXMgaXMgYW4gZXJyb3I6CkUwMjYzIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBsaWZldGltZSB3YXMgZGVjbGFyZWQgbW9yZSB0aGFuIG9uY2UgaW4gdGhlIHNhbWUgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAzCmZuIGZvbzwnYSwgJ2IsICdhPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Egc3RyKSB7IC8vIGVycm9yIQp9CmBgYAoKVHdvIGxpZmV0aW1lcyBjYW5ub3QgaGF2ZSB0aGUgc2FtZSBuYW1lLiBUbyBmaXggdGhpcyBleGFtcGxlLCBjaGFuZ2UKdGhlIHNlY29uZCBgJ2FgIGxpZmV0aW1lIGludG8gc29tZXRoaW5nIGVsc2UgKGAnY2AgZm9yIGV4YW1wbGUpOgoKYGBgCmZuIGZvbzwnYSwgJ2IsICdjPih4OiAmJ2Egc3RyLCB5OiAmJ2Igc3RyLCB6OiAmJ2Mgc3RyKSB7IC8vIG9rIQp9CmBgYApFMDI2NEFuIHVua25vd24gZXh0ZXJuYWwgbGFuZyBpdGVtIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDI2NAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2xhbmcgPSAiY2FrZSJdIC8vIGVycm9yOiB1bmtub3duIGV4dGVybmFsIGxhbmcgaXRlbTogYGNha2VgCiAgICBmbiBjYWtlKCk7Cn0KYGBgCgpBIGxpc3Qgb2YgYXZhaWxhYmxlIGV4dGVybmFsIGxhbmcgaXRlbXMgaXMgYXZhaWxhYmxlIGluCmBzcmMvbGlicnVzdGNfbWlkZGxlL21pZGRsZS93ZWFrX2xhbmdfaXRlbXMucnNgLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldCgpleHRlcm4gIkMiIHsKICAgICNbbGFuZyA9ICJwYW5pY19pbXBsIl0gLy8gb2shCiAgICBmbiBjYWtlKCk7Cn0KYGBgCkUwMjY3QSBsb29wIGtleXdvcmQgKGBicmVha2Agb3IgYGNvbnRpbnVlYCkgd2FzIHVzZWQgaW5zaWRlIGEgY2xvc3VyZSBidXQgb3V0c2lkZSBvZgphbnkgbG9vcC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNjcKbGV0IHcgPSB8fCB7IGJyZWFrOyB9OyAvLyBlcnJvcjogYGJyZWFrYCBpbnNpZGUgb2YgYSBjbG9zdXJlCmBgYAoKYGJyZWFrYCBhbmQgYGNvbnRpbnVlYCBrZXl3b3JkcyBjYW4gYmUgdXNlZCBhcyBub3JtYWwgaW5zaWRlIGNsb3N1cmVzIGFzIGxvbmcgYXMKdGhleSBhcmUgYWxzbyBjb250YWluZWQgd2l0aGluIGEgbG9vcC4gVG8gaGFsdCB0aGUgZXhlY3V0aW9uIG9mIGEgY2xvc3VyZSB5b3UKc2hvdWxkIGluc3RlYWQgdXNlIGEgcmV0dXJuIHN0YXRlbWVudC4gRXhhbXBsZToKCmBgYApsZXQgdyA9IHx8IHsKICAgIGZvciBfIGluIDAuLjEwIHsKICAgICAgICBicmVhazsKICAgIH0KfTsKCncoKTsKYGBgCkUwMjY4QSBsb29wIGtleXdvcmQgKGBicmVha2Agb3IgYGNvbnRpbnVlYCkgd2FzIHVzZWQgb3V0c2lkZSBvZiBhIGxvb3AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjY4CmZuIHNvbWVfZnVuYygpIHsKICAgIGJyZWFrOyAvLyBlcnJvcjogYGJyZWFrYCBvdXRzaWRlIG9mIGEgbG9vcAp9CmBgYAoKV2l0aG91dCBhIGxvb3AgdG8gYnJlYWsgb3V0IG9mIG9yIGNvbnRpbnVlIGluLCBubyBzZW5zaWJsZSBhY3Rpb24gY2FuIGJlIHRha2VuLgpQbGVhc2UgdmVyaWZ5IHRoYXQgeW91IGFyZSB1c2luZyBgYnJlYWtgIGFuZCBgY29udGludWVgIG9ubHkgaW4gbG9vcHMuIEV4YW1wbGU6CgpgYGAKZm4gc29tZV9mdW5jKCkgewogICAgZm9yIF8gaW4gMC4uMTAgewogICAgICAgIGJyZWFrOyAvLyBvayEKICAgIH0KfQpgYGAKRTAyNzFBIHR5cGUgbWlzbWF0Y2hlZCBhbiBhc3NvY2lhdGVkIHR5cGUgb2YgYSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzEKdHJhaXQgVHJhaXQgeyB0eXBlIEFzc29jaWF0ZWRUeXBlOyB9CgpmbiBmb288VD4odDogVCkgd2hlcmUgVDogVHJhaXQ8QXNzb2NpYXRlZFR5cGU9dTMyPiB7Ci8vICAgICAgICAgICAgICAgICAgICB+fn5+fn5+fiB+fn5+fn5+fn5+fn5+fn5+fn4KLy8gICAgICAgICAgICAgICAgICAgICAgICB8ICAgICAgICAgICAgfAovLyAgICAgICAgIFRoaXMgc2F5cyBgZm9vYCBjYW4gICAgICAgICB8Ci8vICAgICAgICAgICBvbmx5IGJlIHVzZWQgd2l0aCAgICAgICAgIHwKLy8gICAgICAgICAgICAgIHNvbWUgdHlwZSB0aGF0ICAgICAgICAgfAovLyAgICAgICAgIGltcGxlbWVudHMgYFRyYWl0YC4gICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLy8gICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoaXMgc2F5cyBub3Qgb25seSBtdXN0Ci8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgVGAgYmUgYW4gaW1wbCBvZiBgVHJhaXRgCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidXQgYWxzbyB0aGF0IHRoZSBpbXBsCi8vICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXN0IGFzc2lnbiB0aGUgdHlwZSBgdTMyYAovLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG8gdGhlIGFzc29jaWF0ZWQgdHlwZS4KICAgIHByaW50bG4hKCJpbiBmb28iKTsKfQoKaW1wbCBUcmFpdCBmb3IgaTggeyB0eXBlIEFzc29jaWF0ZWRUeXBlID0gJidzdGF0aWMgc3RyOyB9Ci8vfn5+fn5+fn5+fn5+fn5+ICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn4KLy8gICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci8vIGBpOGAgZG9lcyBoYXZlICAgICAgICAgICAgICAgICAgICAgfAovLyBpbXBsZW1lbnRhdGlvbiAgICAgICAgICAgICAgICAgICAgIHwKLy8gb2YgYFRyYWl0YC4uLiAgICAgICAgICAgICAgICAgICAgICB8Ci8vICAgICAgICAgICAgICAgICAgICAgLi4uIGJ1dCBpdCBpcyBhbiBpbXBsZW1lbnRhdGlvbgovLyAgICAgICAgICAgICAgICAgICAgIHRoYXQgYXNzaWducyBgJidzdGF0aWMgc3RyYCB0bwovLyAgICAgICAgICAgICAgICAgICAgIHRoZSBhc3NvY2lhdGVkIHR5cGUuCgpmb28oM19pOCk7Ci8vIEhlcmUsIHdlIGludm9rZSBgZm9vYCB3aXRoIGFuIGBpOGAsIHdoaWNoIGRvZXMgbm90IHNhdGlzZnkKLy8gdGhlIGNvbnN0cmFpbnQgYDxpOCBhcyBUcmFpdD46OkFzc29jaWF0ZWRUeXBlPXUzMmAsIGFuZAovLyB0aGVyZWZvcmUgdGhlIHR5cGUtY2hlY2tlciBjb21wbGFpbnMgd2l0aCB0aGlzIGVycm9yIGNvZGUuCmBgYAoKVGhlIGlzc3VlIGNhbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZyB0aGUgYXNzb2NpYXRlZCB0eXBlOgoxKSBpbiB0aGUgYGZvb2AgaW1wbGVtZW50YXRpb246CmBgYAp0cmFpdCBUcmFpdCB7IHR5cGUgQXNzb2NpYXRlZFR5cGU7IH0KCmZuIGZvbzxUPih0OiBUKSB3aGVyZSBUOiBUcmFpdDxBc3NvY2lhdGVkVHlwZSA9ICYnc3RhdGljIHN0cj4gewogICAgcHJpbnRsbiEoImluIGZvbyIpOwp9CgppbXBsIFRyYWl0IGZvciBpOCB7IHR5cGUgQXNzb2NpYXRlZFR5cGUgPSAmJ3N0YXRpYyBzdHI7IH0KCmZvbygzX2k4KTsKYGBgCgoyKSBpbiB0aGUgYFRyYWl0YCBpbXBsZW1lbnRhdGlvbiBmb3IgYGk4YDoKYGBgCnRyYWl0IFRyYWl0IHsgdHlwZSBBc3NvY2lhdGVkVHlwZTsgfQoKZm4gZm9vPFQ+KHQ6IFQpIHdoZXJlIFQ6IFRyYWl0PEFzc29jaWF0ZWRUeXBlID0gdTMyPiB7CiAgICBwcmludGxuISgiaW4gZm9vIik7Cn0KCmltcGwgVHJhaXQgZm9yIGk4IHsgdHlwZSBBc3NvY2lhdGVkVHlwZSA9IHUzMjsgfQoKZm9vKDNfaTgpOwpgYGAKRTAyNzVBbiBldmFsdWF0aW9uIG9mIGEgdHJhaXQgcmVxdWlyZW1lbnQgb3ZlcmZsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzUKdHJhaXQgRm9vIHt9CgpzdHJ1Y3QgQmFyPFQ+KFQpOwoKaW1wbDxUPiBGb28gZm9yIFQgd2hlcmUgQmFyPFQ+OiBGb28ge30KYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZXJlIHdhcyBhIHJlY3Vyc2l2ZSB0cmFpdCByZXF1aXJlbWVudCB0aGF0IG92ZXJmbG93ZWQKYmVmb3JlIGl0IGNvdWxkIGJlIGV2YWx1YXRlZC4gVGhpcyBvZnRlbiBtZWFucyB0aGF0IHRoZXJlIGlzIGFuIHVuYm91bmRlZApyZWN1cnNpb24gaW4gcmVzb2x2aW5nIHNvbWUgdHlwZSBib3VuZHMuCgpUbyBkZXRlcm1pbmUgaWYgYSBgVGAgaXMgYEZvb2AsIHdlIG5lZWQgdG8gY2hlY2sgaWYgYEJhcjxUPmAgaXMgYEZvb2AuIEhvd2V2ZXIsCnRvIGRvIHRoaXMgY2hlY2ssIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHRoYXQgYEJhcjxCYXI8VD4+YCBpcyBgRm9vYC4gVG8KZGV0ZXJtaW5lIHRoaXMsIHdlIGNoZWNrIGlmIGBCYXI8QmFyPEJhcjxUPj4+YCBpcyBgRm9vYCwgYW5kIHNvIG9uLiBUaGlzIGlzCmNsZWFybHkgYSByZWN1cnNpdmUgcmVxdWlyZW1lbnQgdGhhdCBjYW4ndCBiZSByZXNvbHZlZCBkaXJlY3RseS4KCkNvbnNpZGVyIGNoYW5naW5nIHlvdXIgdHJhaXQgYm91bmRzIHNvIHRoYXQgdGhleSdyZSBsZXNzIHNlbGYtcmVmZXJlbnRpYWwuCkUwMjc2QSB0cmFpdCBpbXBsZW1lbnRhdGlvbiBoYXMgc3RyaWN0ZXIgcmVxdWlyZW1lbnRzIHRoYW4gdGhlIHRyYWl0IGRlZmluaXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc2CnRyYWl0IEZvbyB7CiAgICBmbiBmb288VD4oeDogVCk7Cn0KCmltcGwgRm9vIGZvciBib29sIHsKICAgIGZuIGZvbzxUPih4OiBUKSB3aGVyZSBUOiBDb3B5IHt9Cn0KYGBgCgpIZXJlLCBhbGwgdHlwZXMgaW1wbGVtZW50aW5nIGBGb29gIG11c3QgaGF2ZSBhIG1ldGhvZCBgZm9vPFQ+KHg6IFQpYCB3aGljaCBjYW4KdGFrZSBhbnkgdHlwZSBgVGAuIEhvd2V2ZXIsIGluIHRoZSBgaW1wbGAgZm9yIGBib29sYCwgd2UgaGF2ZSBhZGRlZCBhbiBleHRyYQpib3VuZCB0aGF0IGBUYCBpcyBgQ29weWAsIHdoaWNoIGlzbid0IGNvbXBhdGlibGUgd2l0aCB0aGUgb3JpZ2luYWwgdHJhaXQuCgpDb25zaWRlciByZW1vdmluZyB0aGUgYm91bmQgZnJvbSB0aGUgbWV0aG9kIG9yIGFkZGluZyB0aGUgYm91bmQgdG8gdGhlIG9yaWdpbmFsCm1ldGhvZCBkZWZpbml0aW9uIGluIHRoZSB0cmFpdC4KRTAyNzdZb3UgdHJpZWQgdG8gdXNlIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBzb21lIHRyYWl0IGluIGEgcGxhY2Ugd2hpY2gKZXhwZWN0ZWQgdGhhdCB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyNzcKLy8gaGVyZSB3ZSBkZWNsYXJlIHRoZSBGb28gdHJhaXQgd2l0aCBhIGJhciBtZXRob2QKdHJhaXQgRm9vIHsKICAgIGZuIGJhcigmc2VsZik7Cn0KCi8vIHdlIG5vdyBkZWNsYXJlIGEgZnVuY3Rpb24gd2hpY2ggdGFrZXMgYW4gb2JqZWN0IGltcGxlbWVudGluZyB0aGUgRm9vIHRyYWl0CmZuIHNvbWVfZnVuYzxUOiBGb28+KGZvbzogVCkgewogICAgZm9vLmJhcigpOwp9CgpmbiBtYWluKCkgewogICAgLy8gd2Ugbm93IGNhbGwgdGhlIG1ldGhvZCB3aXRoIHRoZSBpMzIgdHlwZSwgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQKICAgIC8vIHRoZSBGb28gdHJhaXQKICAgIHNvbWVfZnVuYyg1aTMyKTsgLy8gZXJyb3I6IHRoZSB0cmFpdCBib3VuZCBgaTMyIDogRm9vYCBpcyBub3Qgc2F0aXNmaWVkCn0KYGBgCgpJbiBvcmRlciB0byBmaXggdGhpcyBlcnJvciwgdmVyaWZ5IHRoYXQgdGhlIHR5cGUgeW91J3JlIHVzaW5nIGRvZXMgaW1wbGVtZW50CnRoZSB0cmFpdC4gRXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgZm4gYmFyKCZzZWxmKTsKfQoKLy8gd2UgaW1wbGVtZW50IHRoZSB0cmFpdCBvbiB0aGUgaTMyIHR5cGUKaW1wbCBGb28gZm9yIGkzMiB7CiAgICBmbiBiYXIoJnNlbGYpIHt9Cn0KCmZuIHNvbWVfZnVuYzxUOiBGb28+KGZvbzogVCkgewogICAgZm9vLmJhcigpOyAvLyB3ZSBjYW4gbm93IHVzZSB0aGlzIG1ldGhvZCBzaW5jZSBpMzIgaW1wbGVtZW50cyB0aGUKICAgICAgICAgICAgICAgLy8gRm9vIHRyYWl0Cn0KCmZuIG1haW4oKSB7CiAgICBzb21lX2Z1bmMoNWkzMik7IC8vIG9rIQp9CmBgYAoKT3IgaW4gYSBnZW5lcmljIGNvbnRleHQsIGFuIGVycm9uZW91cyBjb2RlIGV4YW1wbGUgd291bGQgbG9vayBsaWtlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjc3CmZuIHNvbWVfZnVuYzxUPihmb286IFQpIHsKICAgIHByaW50bG4hKCJ7Oj99IiwgZm9vKTsgLy8gZXJyb3I6IHRoZSB0cmFpdCBgY29yZTo6Zm10OjpEZWJ1Z2AgaXMgbm90CiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbXBsZW1lbnRlZCBmb3IgdGhlIHR5cGUgYFRgCn0KCmZuIG1haW4oKSB7CiAgICAvLyBXZSBub3cgY2FsbCB0aGUgbWV0aG9kIHdpdGggdGhlIGkzMiB0eXBlLAogICAgLy8gd2hpY2ggKmRvZXMqIGltcGxlbWVudCB0aGUgRGVidWcgdHJhaXQuCiAgICBzb21lX2Z1bmMoNWkzMik7Cn0KYGBgCgpOb3RlIHRoYXQgdGhlIGVycm9yIGhlcmUgaXMgaW4gdGhlIGRlZmluaXRpb24gb2YgdGhlIGdlbmVyaWMgZnVuY3Rpb24uIEFsdGhvdWdoCndlIG9ubHkgY2FsbCBpdCB3aXRoIGEgcGFyYW1ldGVyIHRoYXQgZG9lcyBpbXBsZW1lbnQgYERlYnVnYCwgdGhlIGNvbXBpbGVyCnN0aWxsIHJlamVjdHMgdGhlIGZ1bmN0aW9uLiBJdCBtdXN0IHdvcmsgd2l0aCBhbGwgcG9zc2libGUgaW5wdXQgdHlwZXMuIEluCm9yZGVyIHRvIG1ha2UgdGhpcyBleGFtcGxlIGNvbXBpbGUsIHdlIG5lZWQgdG8gcmVzdHJpY3QgdGhlIGdlbmVyaWMgdHlwZSB3ZSdyZQphY2NlcHRpbmc6CgpgYGAKdXNlIHN0ZDo6Zm10OwoKLy8gUmVzdHJpY3QgdGhlIGlucHV0IHR5cGUgdG8gdHlwZXMgdGhhdCBpbXBsZW1lbnQgRGVidWcuCmZuIHNvbWVfZnVuYzxUOiBmbXQ6OkRlYnVnPihmb286IFQpIHsKICAgIHByaW50bG4hKCJ7Oj99IiwgZm9vKTsKfQoKZm4gbWFpbigpIHsKICAgIC8vIENhbGxpbmcgdGhlIG1ldGhvZCBpcyBzdGlsbCBmaW5lLCBhcyBpMzIgaW1wbGVtZW50cyBEZWJ1Zy4KICAgIHNvbWVfZnVuYyg1aTMyKTsKCiAgICAvLyBUaGlzIHdvdWxkIGZhaWwgdG8gY29tcGlsZSBub3c6CiAgICAvLyBzdHJ1Y3QgV2l0aG91dERlYnVnOwogICAgLy8gc29tZV9mdW5jKFdpdGhvdXREZWJ1Zyk7Cn0KYGBgCgpSdXN0IG9ubHkgbG9va3MgYXQgdGhlIHNpZ25hdHVyZSBvZiB0aGUgY2FsbGVkIGZ1bmN0aW9uLCBhcyBzdWNoIGl0IG11c3QKYWxyZWFkeSBzcGVjaWZ5IGFsbCByZXF1aXJlbWVudHMgdGhhdCB3aWxsIGJlIHVzZWQgZm9yIGV2ZXJ5IHR5cGUgcGFyYW1ldGVyLgpFMDI4MSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCllvdSB0cmllZCB0byBzdXBwbHkgYSB0eXBlIHdoaWNoIGRvZXNuJ3QgaW1wbGVtZW50IHNvbWUgdHJhaXQgaW4gYSBsb2NhdGlvbgp3aGljaCBleHBlY3RlZCB0aGF0IHRyYWl0LiBUaGlzIGVycm9yIHR5cGljYWxseSBvY2N1cnMgd2hlbiB3b3JraW5nIHdpdGgKYEZuYC1iYXNlZCB0eXBlcy4gRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApmbiBmb288RjogRm4odXNpemUpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICAvLyB0eXBlIG1pc21hdGNoOiAuLi4gaW1wbGVtZW50cyB0aGUgdHJhaXQgYGNvcmU6Om9wczo6Rm48KFN0cmluZywpPmAsCiAgICAvLyBidXQgdGhlIHRyYWl0IGBjb3JlOjpvcHM6OkZuPCh1c2l6ZSwpPmAgaXMgcmVxdWlyZWQKICAgIC8vIFtFMDI4MV0KICAgIGZvbyh8eTogU3RyaW5nfCB7IH0pOwp9CmBgYAoKVGhlIGlzc3VlIGluIHRoaXMgY2FzZSBpcyB0aGF0IGBmb29gIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgYEZuYCB3aXRoIG9uZQphcmd1bWVudCBvZiB0eXBlIGBTdHJpbmdgLCBidXQgdGhlIGNsb3N1cmUgd2UgYXR0ZW1wdGVkIHRvIHBhc3MgdG8gaXQgcmVxdWlyZXMKb25lIGFyZ3VtZW50cyBvZiB0eXBlIGB1c2l6ZWAuCkUwMjgyVGhlIGNvbXBpbGVyIGNvdWxkIG5vdCBpbmZlciBhIHR5cGUgYW5kIGFza2VkIGZvciBhIHR5cGUgYW5ub3RhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODIKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdCgpOwpgYGAKClRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdHlwZSBpbmZlcmVuY2UgZGlkIG5vdCByZXN1bHQgaW4gb25lIHVuaXF1ZSBwb3NzaWJsZQp0eXBlLCBhbmQgZXh0cmEgaW5mb3JtYXRpb24gaXMgcmVxdWlyZWQuIEluIG1vc3QgY2FzZXMgdGhpcyBjYW4gYmUgcHJvdmlkZWQKYnkgYWRkaW5nIGEgdHlwZSBhbm5vdGF0aW9uLiBTb21ldGltZXMgeW91IG5lZWQgdG8gc3BlY2lmeSBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgbWFudWFsbHkuCgpBIGNvbW1vbiBleGFtcGxlIGlzIHRoZSBgY29sbGVjdGAgbWV0aG9kIG9uIGBJdGVyYXRvcmAuIEl0IGhhcyBhIGdlbmVyaWMgdHlwZQpwYXJhbWV0ZXIgd2l0aCBhIGBGcm9tSXRlcmF0b3JgIGJvdW5kLCB3aGljaCBmb3IgYSBgY2hhcmAgaXRlcmF0b3IgaXMKaW1wbGVtZW50ZWQgYnkgYFZlY2AgYW5kIGBTdHJpbmdgIGFtb25nIG90aGVycy4gQ29uc2lkZXIgdGhlIGZvbGxvd2luZyBzbmlwcGV0CnRoYXQgcmV2ZXJzZXMgdGhlIGNoYXJhY3RlcnMgb2YgYSBzdHJpbmc6CgpJbiB0aGUgZmlyc3QgY29kZSBleGFtcGxlLCB0aGUgY29tcGlsZXIgY2Fubm90IGluZmVyIHdoYXQgdGhlIHR5cGUgb2YgYHhgIHNob3VsZApiZTogYFZlYzxjaGFyPmAgYW5kIGBTdHJpbmdgIGFyZSBib3RoIHN1aXRhYmxlIGNhbmRpZGF0ZXMuIFRvIHNwZWNpZnkgd2hpY2ggdHlwZQp0byB1c2UsIHlvdSBjYW4gdXNlIGEgdHlwZSBhbm5vdGF0aW9uIG9uIGB4YDoKCmBgYApsZXQgeDogVmVjPGNoYXI+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpJdCBpcyBub3QgbmVjZXNzYXJ5IHRvIGFubm90YXRlIHRoZSBmdWxsIHR5cGUuIE9uY2UgdGhlIGFtYmlndWl0eSBpcyByZXNvbHZlZCwKdGhlIGNvbXBpbGVyIGNhbiBpbmZlciB0aGUgcmVzdDoKCmBgYApsZXQgeDogVmVjPF8+ID0gImhlbGxvIi5jaGFycygpLnJldigpLmNvbGxlY3QoKTsKYGBgCgpBbm90aGVyIHdheSB0byBwcm92aWRlIHRoZSBjb21waWxlciB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiwgaXMgdG8gc3BlY2lmeSB0aGUKZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcjoKCmBgYApsZXQgeCA9ICJoZWxsbyIuY2hhcnMoKS5yZXYoKS5jb2xsZWN0Ojo8VmVjPGNoYXI+PigpOwpgYGAKCkFnYWluLCB5b3UgbmVlZCBub3Qgc3BlY2lmeSB0aGUgZnVsbCB0eXBlIGlmIHRoZSBjb21waWxlciBjYW4gaW5mZXIgaXQ6CgpgYGAKbGV0IHggPSAiaGVsbG8iLmNoYXJzKCkucmV2KCkuY29sbGVjdDo6PFZlYzxfPj4oKTsKYGBgCgpBcGFydCBmcm9tIGEgbWV0aG9kIG9yIGZ1bmN0aW9uIHdpdGggYSBnZW5lcmljIHR5cGUgcGFyYW1ldGVyLCB0aGlzIGVycm9yIGNhbgpvY2N1ciB3aGVuIGEgdHlwZSBwYXJhbWV0ZXIgb2YgYSBzdHJ1Y3Qgb3IgdHJhaXQgY2Fubm90IGJlIGluZmVycmVkLiBJbiB0aGF0CmNhc2UgaXQgaXMgbm90IGFsd2F5cyBwb3NzaWJsZSB0byB1c2UgYSB0eXBlIGFubm90YXRpb24sIGJlY2F1c2UgYWxsIGNhbmRpZGF0ZXMKaGF2ZSB0aGUgc2FtZSByZXR1cm4gdHlwZS4gRm9yIGluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjgyCnN0cnVjdCBGb288VD4gewogICAgbnVtOiBULAp9CgppbXBsPFQ+IEZvbzxUPiB7CiAgICBmbiBiYXIoKSAtPiBpMzIgewogICAgICAgIDAKICAgIH0KCiAgICBmbiBiYXooKSB7CiAgICAgICAgbGV0IG51bWJlciA9IEZvbzo6YmFyKCk7CiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgZmFpbCBiZWNhdXNlIHRoZSBjb21waWxlciBkb2VzIG5vdCBrbm93IHdoaWNoIGluc3RhbmNlIG9mIGBGb29gIHRvCmNhbGwgYGJhcmAgb24uIENoYW5nZSBgRm9vOjpiYXIoKWAgdG8gYEZvbzo6PFQ+OjpiYXIoKWAgdG8gcmVzb2x2ZSB0aGUgZXJyb3IuCkUwMjgzQW4gaW1wbGVtZW50YXRpb24gY2Fubm90IGJlIGNob3NlbiB1bmFtYmlndW91c2x5IGJlY2F1c2Ugb2YgbGFjayBvZiBpbmZvcm1hdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAyODMKc3RydWN0IEZvbzsKCmltcGwgSW50bzx1MzI+IGZvciBGb28gewogICAgZm4gaW50byhzZWxmKSAtPiB1MzIgeyAxIH0KfQoKbGV0IGZvbyA9IEZvbzsKbGV0IGJhcjogdTMyID0gZm9vLmludG8oKSAqIDF1MzI7CmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgc29sdmVkIGJ5IGFkZGluZyB0eXBlIGFubm90YXRpb25zIHRoYXQgcHJvdmlkZSB0aGUgbWlzc2luZwppbmZvcm1hdGlvbiB0byB0aGUgY29tcGlsZXIuIEluIHRoaXMgY2FzZSwgdGhlIHNvbHV0aW9uIGlzIHRvIHNwZWNpZnkgdGhlCnRyYWl0J3MgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKc3RydWN0IEZvbzsKCmltcGwgSW50bzx1MzI+IGZvciBGb28gewogICAgZm4gaW50byhzZWxmKSAtPiB1MzIgeyAxIH0KfQoKbGV0IGZvbyA9IEZvbzsKbGV0IGJhcjogdTMyID0gSW50bzo6PHUzMj46OmludG8oZm9vKSAqIDF1MzI7CmBgYApFMDI4NFRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gdGhlIGNvbXBpbGVyIGlzIHVuYWJsZSB0byB1bmFtYmlndW91c2x5IGluZmVyIHRoZQpyZXR1cm4gdHlwZSBvZiBhIGZ1bmN0aW9uIG9yIG1ldGhvZCB3aGljaCBpcyBnZW5lcmljIG9uIHJldHVybiB0eXBlLCBzdWNoCmFzIHRoZSBgY29sbGVjdGAgbWV0aG9kIGZvciBgSXRlcmF0b3Jgcy4KCkZvciBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMjg0CmZuIG1haW4oKSB7CiAgICBsZXQgbjogdTMyID0gMTsKICAgIGxldCBtdXQgZDogdTY0ID0gMjsKICAgIGQgPSBkICsgbi5pbnRvKCk7Cn0KYGBgCgpIZXJlIHdlIGhhdmUgYW4gYWRkaXRpb24gb2YgYGRgIGFuZCBgbi5pbnRvKClgLiBIZW5jZSwgYG4uaW50bygpYCBjYW4gcmV0dXJuCmFueSB0eXBlIGBUYCB3aGVyZSBgdTY0OiBBZGQ8VD5gLiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGBpbnRvYCBtZXRob2QgY2FuCnJldHVybiBhbnkgdHlwZSB3aGVyZSBgdTMyOiBJbnRvPFQ+YC4KClRoZSBhdXRob3Igb2YgdGhpcyBjb2RlIHByb2JhYmx5IHdhbnRzIGBpbnRvKClgIHRvIHJldHVybiBhIGB1NjRgLCBidXQgdGhlCmNvbXBpbGVyIGNhbid0IGJlIHN1cmUgdGhhdCB0aGVyZSBpc24ndCBhbm90aGVyIHR5cGUgYFRgIHdoZXJlIGJvdGgKYHUzMjogSW50bzxUPmAgYW5kIGB1NjQ6IEFkZDxUPmAuCgpUbyByZXNvbHZlIHRoaXMgZXJyb3IsIHVzZSBhIGNvbmNyZXRlIHR5cGUgZm9yIHRoZSBpbnRlcm1lZGlhdGUgZXhwcmVzc2lvbjoKCmBgYApmbiBtYWluKCkgewogICAgbGV0IG46IHUzMiA9IDE7CiAgICBsZXQgbXV0IGQ6IHU2NCA9IDI7CiAgICBsZXQgbTogdTY0ID0gbi5pbnRvKCk7CiAgICBkID0gZCArIG07Cn0KYGBgCkUwMjk3IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKUGF0dGVybnMgdXNlZCB0byBiaW5kIG5hbWVzIG11c3QgYmUgaXJyZWZ1dGFibGUuIFRoYXQgaXMsIHRoZXkgbXVzdCBndWFyYW50ZWUKdGhhdCBhIG5hbWUgd2lsbCBiZSBleHRyYWN0ZWQgaW4gYWxsIGNhc2VzLiBJbnN0ZWFkIG9mIHBhdHRlcm4gbWF0Y2hpbmcgdGhlCmxvb3AgdmFyaWFibGUsIGNvbnNpZGVyIHVzaW5nIGEgYG1hdGNoYCBvciBgaWYgbGV0YCBpbnNpZGUgdGhlIGxvb3AgYm9keS4gRm9yCmluc3RhbmNlOgoKYGBgY29tcGlsZV9mYWlsLEUwMDA1CmxldCB4cyA6IFZlYzxPcHRpb248aTMyPj4gPSB2ZWMhW1NvbWUoMSksIE5vbmVdOwoKLy8gVGhpcyBmYWlscyBiZWNhdXNlIGBOb25lYCBpcyBub3QgY292ZXJlZC4KZm9yIFNvbWUoeCkgaW4geHMgewogICAgLy8gLi4uCn0KYGBgCgpNYXRjaCBpbnNpZGUgdGhlIGxvb3AgaW5zdGVhZDoKCmBgYApsZXQgeHMgOiBWZWM8T3B0aW9uPGkzMj4+ID0gdmVjIVtTb21lKDEpLCBOb25lXTsKCmZvciBpdGVtIGluIHhzIHsKICAgIG1hdGNoIGl0ZW0gewogICAgICAgIFNvbWUoeCkgPT4ge30sCiAgICAgICAgTm9uZSA9PiB7fSwKICAgIH0KfQpgYGAKCk9yIHVzZSBgaWYgbGV0YDoKCmBgYApsZXQgeHMgOiBWZWM8T3B0aW9uPGkzMj4+ID0gdmVjIVtTb21lKDEpLCBOb25lXTsKCmZvciBpdGVtIGluIHhzIHsKICAgIGlmIGxldCBTb21lKHgpID0gaXRlbSB7CiAgICAgICAgLy8gLi4uCiAgICB9Cn0KYGBgCkUwMzAxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKTXV0YWJsZSBib3Jyb3dzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgbXV0YWJsZQpib3Jyb3dzIHdlcmUgYWxsb3dlZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NgptYXRjaCBTb21lKCgpKSB7CiAgICBOb25lID0+IHsgfSwKICAgIG9wdGlvbiBpZiBvcHRpb24udGFrZSgpLmlzX25vbmUoKSA9PiB7CiAgICAgICAgLyogaW1wb3NzaWJsZSwgb3B0aW9uIGlzIGBTb21lYCAqLwogICAgfSwKICAgIFNvbWUoXykgPT4geyB9IC8vIFdoZW4gdGhlIHByZXZpb3VzIG1hdGNoIGZhaWxlZCwgdGhlIG9wdGlvbiBiZWNhbWUgYE5vbmVgLgp9CmBgYApFMDMwMiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFzc2lnbm1lbnRzIGFyZSBub3QgYWxsb3dlZCBpbiBwYXR0ZXJuIGd1YXJkcywgYmVjYXVzZSBtYXRjaGluZyBjYW5ub3QgaGF2ZQpzaWRlIGVmZmVjdHMuIFNpZGUgZWZmZWN0cyBjb3VsZCBhbHRlciB0aGUgbWF0Y2hlZCBvYmplY3Qgb3IgdGhlIGVudmlyb25tZW50Cm9uIHdoaWNoIHRoZSBtYXRjaCBkZXBlbmRzIGluIHN1Y2ggYSB3YXksIHRoYXQgdGhlIG1hdGNoIHdvdWxkIG5vdCBiZQpleGhhdXN0aXZlLiBGb3IgaW5zdGFuY2UsIHRoZSBmb2xsb3dpbmcgd291bGQgbm90IG1hdGNoIGFueSBhcm0gaWYgYXNzaWdubWVudHMKd2VyZSBhbGxvd2VkOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk0Cm1hdGNoIFNvbWUoKCkpIHsKICAgIE5vbmUgPT4geyB9LAogICAgb3B0aW9uIGlmIHsgb3B0aW9uID0gTm9uZTsgZmFsc2UgfSA9PiB7IH0sCiAgICBTb21lKF8pID0+IHsgfSAvLyBXaGVuIHRoZSBwcmV2aW91cyBtYXRjaCBmYWlsZWQsIHRoZSBvcHRpb24gYmVjYW1lIGBOb25lYC4KfQpgYGAKRTAzMDMjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpTdWItYmluZGluZ3MsIGUuZy4gYHJlZiB4IEAgU29tZShyZWYgeSlgIGFyZSBub3cgYWxsb3dlZCB1bmRlcgpgIyFbZmVhdHVyZShiaW5kaW5nc19hZnRlcl9hdCldYCBhbmQgY2hlY2tlZCB0byBtYWtlIHN1cmUgdGhhdAptZW1vcnkgc2FmZXR5IGlzIHVwaGVsZC4KCi0tLS0tLS0tLS0tLS0tCgpJbiBjZXJ0YWluIGNhc2VzIGl0IGlzIHBvc3NpYmxlIGZvciBzdWItYmluZGluZ3MgdG8gdmlvbGF0ZSBtZW1vcnkgc2FmZXR5LgpVcGRhdGVzIHRvIHRoZSBib3Jyb3cgY2hlY2tlciBpbiBhIGZ1dHVyZSB2ZXJzaW9uIG9mIFJ1c3QgbWF5IHJlbW92ZSB0aGlzCnJlc3RyaWN0aW9uLCBidXQgZm9yIG5vdyBwYXR0ZXJucyBtdXN0IGJlIHJld3JpdHRlbiB3aXRob3V0IHN1Yi1iaW5kaW5ncy4KCkJlZm9yZToKCmBgYGNvbXBpbGVfZmFpbAptYXRjaCBTb21lKCJoaSIudG9fc3RyaW5nKCkpIHsKICAgIHJlZiBvcF9zdHJpbmdfcmVmIEAgU29tZShzKSA9PiB7fSwKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpBZnRlcjoKCmBgYAptYXRjaCBTb21lKCJoaSIudG9fc3RyaW5nKCkpIHsKICAgIFNvbWUocmVmIHMpID0+IHsKICAgICAgICBsZXQgb3Bfc3RyaW5nX3JlZiA9ICZTb21lKHMpOwogICAgICAgIC8vIC4uLgogICAgfSwKICAgIE5vbmUgPT4ge30sCn0KYGBgCgpUaGUgYG9wX3N0cmluZ19yZWZgIGJpbmRpbmcgaGFzIHR5cGUgYCZPcHRpb248JlN0cmluZz5gIGluIGJvdGggY2FzZXMuCgpTZWUgYWxzbyBbSXNzdWUgMTQ1ODddW2lzc3VlLTE0NTg3XS4KCltpc3N1ZS0xNDU4N106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMTQ1ODcKRTAzMDdUaGUgYHNlbGZgIHBhcmFtZXRlciBpbiBhIG1ldGhvZCBoYXMgYW4gaW52YWxpZCAicmVjZWl2ZXIgdHlwZSIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzA3CnN0cnVjdCBGb287CnN0cnVjdCBCYXI7Cgp0cmFpdCBUcmFpdCB7CiAgICBmbiBmb28oJnNlbGYpOwp9CgppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZCYXIpIHt9Cn0KYGBgCgpNZXRob2RzIHRha2UgYSBzcGVjaWFsIGZpcnN0IHBhcmFtZXRlciwgb2Ygd2hpY2ggdGhlcmUgYXJlIHRocmVlIHZhcmlhbnRzOgpgc2VsZmAsIGAmc2VsZmAsIGFuZCBgJm11dCBzZWxmYC4gVGhlc2UgYXJlIHN5bnRhY3RpYyBzdWdhciBmb3IKYHNlbGY6IFNlbGZgLCBgc2VsZjogJlNlbGZgLCBhbmQgYHNlbGY6ICZtdXQgU2VsZmAgcmVzcGVjdGl2ZWx5LgoKYGBgCiMgc3RydWN0IEZvbzsKdHJhaXQgVHJhaXQgewogICAgZm4gZm9vKCZzZWxmKTsKLy8gICAgICAgICBeXl5eXiBgc2VsZmAgaGVyZSBpcyBhIHJlZmVyZW5jZSB0byB0aGUgcmVjZWl2ZXIgb2JqZWN0Cn0KCmltcGwgVHJhaXQgZm9yIEZvbyB7CiAgICBmbiBmb28oJnNlbGYpIHt9Ci8vICAgICAgICAgXl5eXl4gdGhlIHJlY2VpdmVyIHR5cGUgaXMgYCZGb29gCn0KYGBgCgpUaGUgdHlwZSBgU2VsZmAgYWN0cyBhcyBhbiBhbGlhcyB0byB0aGUgdHlwZSBvZiB0aGUgY3VycmVudCB0cmFpdAppbXBsZW1lbnRlciwgb3IgInJlY2VpdmVyIHR5cGUiLiBCZXNpZGVzIHRoZSBhbHJlYWR5IG1lbnRpb25lZCBgU2VsZmAsCmAmU2VsZmAgYW5kIGAmbXV0IFNlbGZgIHZhbGlkIHJlY2VpdmVyIHR5cGVzLCB0aGUgZm9sbG93aW5nIGFyZSBhbHNvIHZhbGlkOgpgc2VsZjogQm94PFNlbGY+YCwgYHNlbGY6IFJjPFNlbGY+YCwgYHNlbGY6IEFyYzxTZWxmPmAsIGFuZCBgc2VsZjogUGluPFA+YAood2hlcmUgUCBpcyBvbmUgb2YgdGhlIHByZXZpb3VzIHR5cGVzIGV4Y2VwdCBgU2VsZmApLiBOb3RlIHRoYXQgYFNlbGZgIGNhbgphbHNvIGJlIHRoZSB1bmRlcmx5aW5nIGltcGxlbWVudGluZyB0eXBlLCBsaWtlIGBGb29gIGluIHRoZSBmb2xsb3dpbmcKZXhhbXBsZToKCmBgYAojIHN0cnVjdCBGb287CiMgdHJhaXQgVHJhaXQgewojICAgICBmbiBmb28oJnNlbGYpOwojIH0KaW1wbCBUcmFpdCBmb3IgRm9vIHsKICAgIGZuIGZvbyhzZWxmOiAmRm9vKSB7fQp9CmBgYAoKVGhpcyBlcnJvciB3aWxsIGJlIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyIHdoZW4gdXNpbmcgYW4gaW52YWxpZCByZWNlaXZlciB0eXBlLApsaWtlIGluIHRoZSBmb2xsb3dpbmcgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMwNwojIHN0cnVjdCBGb287CiMgc3RydWN0IEJhcjsKIyB0cmFpdCBUcmFpdCB7CiMgICAgIGZuIGZvbygmc2VsZik7CiMgfQppbXBsIFRyYWl0IGZvciBGb28gewogICAgZm4gZm9vKHNlbGY6ICZCYXIpIHt9Cn0KYGBgCgpUaGUgbmlnaHRseSBmZWF0dXJlIFtBcmJpdHJhcnkgc2VsZiB0eXBlc11bQVNUXSBleHRlbmRzIHRoZSBhY2NlcHRlZApzZXQgb2YgcmVjZWl2ZXIgdHlwZXMgdG8gYWxzbyBpbmNsdWRlIGFueSB0eXBlIHRoYXQgY2FuIGRlcmVmZXJlbmNlIHRvCmBTZWxmYDoKCmBgYAojIVtmZWF0dXJlKGFyYml0cmFyeV9zZWxmX3R5cGVzKV0KCnN0cnVjdCBGb287CnN0cnVjdCBCYXI7CgovLyBCZWNhdXNlIHlvdSBjYW4gZGVyZWZlcmVuY2UgYEJhcmAgaW50byBgRm9vYC4uLgppbXBsIHN0ZDo6b3BzOjpEZXJlZiBmb3IgQmFyIHsKICAgIHR5cGUgVGFyZ2V0ID0gRm9vOwoKICAgIGZuIGRlcmVmKCZzZWxmKSAtPiAmRm9vIHsKICAgICAgICAmRm9vCiAgICB9Cn0KCmltcGwgRm9vIHsKICAgIGZuIGZvbyhzZWxmOiBCYXIpIHt9Ci8vICAgICAgICAgXl5eXl5eXl5eIC4uLml0IGNhbiBiZSB1c2VkIGFzIHRoZSByZWNlaXZlciB0eXBlCn0KYGBgCgpbQVNUXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2FyYml0cmFyeS1zZWxmLXR5cGVzLmh0bWwKRTAzMDhFeHBlY3RlZCB0eXBlIGRpZCBub3QgbWF0Y2ggdGhlIHJlY2VpdmVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDMwOApmbiBwbHVzX29uZSh4OiBpMzIpIC0+IGkzMiB7CiAgICB4ICsgMQp9CgpwbHVzX29uZSgiTm90IGEgbnVtYmVyIik7Ci8vICAgICAgIF5eXl5eXl5eXl5eXl5eIGV4cGVjdGVkIGBpMzJgLCBmb3VuZCBgJnN0cmAKCmlmICJOb3QgYSBib29sIiB7Ci8vIF5eXl5eXl5eXl5eXiBleHBlY3RlZCBgYm9vbGAsIGZvdW5kIGAmc3RyYAp9CgpsZXQgeDogZjMyID0gIk5vdCBhIGZsb2F0IjsKLy8gICAgIC0tLSAgIF5eXl5eXl5eXl5eXl4gZXhwZWN0ZWQgYGYzMmAsIGZvdW5kIGAmc3RyYAovLyAgICAgfAovLyAgICAgZXhwZWN0ZWQgZHVlIHRvIHRoaXMKYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGV4cHJlc3Npb24gd2FzIHVzZWQgaW4gYSBwbGFjZSB3aGVyZSB0aGUgY29tcGlsZXIKZXhwZWN0ZWQgYW4gZXhwcmVzc2lvbiBvZiBhIGRpZmZlcmVudCB0eXBlLiBJdCBjYW4gb2NjdXIgaW4gc2V2ZXJhbCBjYXNlcywgdGhlCm1vc3QgY29tbW9uIGJlaW5nIHdoZW4gY2FsbGluZyBhIGZ1bmN0aW9uIGFuZCBwYXNzaW5nIGFuIGFyZ3VtZW50IHdoaWNoIGhhcyBhCmRpZmZlcmVudCB0eXBlIHRoYW4gdGhlIG1hdGNoaW5nIHR5cGUgaW4gdGhlIGZ1bmN0aW9uIGRlY2xhcmF0aW9uLgpFMDMwOUEgcGFyYW1ldGVyIHR5cGUgaXMgbWlzc2luZyBhbiBleHBsaWNpdCBsaWZldGltZSBib3VuZCBhbmQgbWF5IG5vdCBsaXZlIGxvbmcKZW5vdWdoLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMwOQovLyBUaGlzIHdvbid0IGNvbXBpbGUgYmVjYXVzZSB0aGUgYXBwbGljYWJsZSBpbXBsIG9mCi8vIGBTb21lVHJhaXRgIChiZWxvdykgcmVxdWlyZXMgdGhhdCBgVDogJ2FgLCBidXQgdGhlIHN0cnVjdCBkb2VzCi8vIG5vdCBoYXZlIGEgbWF0Y2hpbmcgd2hlcmUtY2xhdXNlLgpzdHJ1Y3QgRm9vPCdhLCBUPiB7CiAgICBmb286IDxUIGFzIFNvbWVUcmFpdDwnYT4+OjpPdXRwdXQsCn0KCnRyYWl0IFNvbWVUcmFpdDwnYT4gewogICAgdHlwZSBPdXRwdXQ7Cn0KCmltcGw8J2EsIFQ+IFNvbWVUcmFpdDwnYT4gZm9yIFQKd2hlcmUKICAgIFQ6ICdhLAp7CiAgICB0eXBlIE91dHB1dCA9IHUzMjsKfQpgYGAKClRoZSB0eXBlIGRlZmluaXRpb24gY29udGFpbnMgc29tZSBmaWVsZCB3aG9zZSB0eXBlIHJlcXVpcmVzIGFuIG91dGxpdmVzCmFubm90YXRpb24uIE91dGxpdmVzIGFubm90YXRpb25zIChlLmcuLCBgVDogJ2FgKSBhcmUgdXNlZCB0byBndWFyYW50ZWUgdGhhdCBhbGwKdGhlIGRhdGEgaW4gYFRgIGlzIHZhbGlkIGZvciBhdCBsZWFzdCB0aGUgbGlmZXRpbWUgYCdhYC4gVGhpcyBzY2VuYXJpbyBtb3N0CmNvbW1vbmx5IGFyaXNlcyB3aGVuIHRoZSB0eXBlIGNvbnRhaW5zIGFuIGFzc29jaWF0ZWQgdHlwZSByZWZlcmVuY2UgbGlrZQpgPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dGAsIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBjb2RlLgoKVGhlcmUsIHRoZSB3aGVyZSBjbGF1c2UgYFQ6ICdhYCB0aGF0IGFwcGVhcnMgb24gdGhlIGltcGwgaXMgbm90IGtub3duIHRvIGJlCnNhdGlzZmllZCBvbiB0aGUgc3RydWN0LiBUbyBtYWtlIHRoaXMgZXhhbXBsZSBjb21waWxlLCB5b3UgaGF2ZSB0byBhZGQgYQp3aGVyZS1jbGF1c2UgbGlrZSBgVDogJ2FgIHRvIHRoZSBzdHJ1Y3QgZGVmaW5pdGlvbjoKCmBgYApzdHJ1Y3QgRm9vPCdhLCBUPgp3aGVyZQogICAgVDogJ2EsCnsKICAgIGZvbzogPFQgYXMgU29tZVRyYWl0PCdhPj46Ok91dHB1dAp9Cgp0cmFpdCBTb21lVHJhaXQ8J2E+IHsKICAgIHR5cGUgT3V0cHV0Owp9CgppbXBsPCdhLCBUPiBTb21lVHJhaXQ8J2E+IGZvciBUCndoZXJlCiAgICBUOiAnYSwKewogICAgdHlwZSBPdXRwdXQgPSB1MzI7Cn0KYGBgCkUwMzEwQSBwYXJhbWV0ZXIgdHlwZSBpcyBtaXNzaW5nIGEgbGlmZXRpbWUgY29uc3RyYWludCBvciBoYXMgYSBsaWZldGltZSB0aGF0CmRvZXMgbm90IGxpdmUgbG9uZyBlbm91Z2guCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzEwCi8vIFRoaXMgd29uJ3QgY29tcGlsZSBiZWNhdXNlIFQgaXMgbm90IGNvbnN0cmFpbmVkIHRvIHRoZSBzdGF0aWMgbGlmZXRpbWUKLy8gdGhlIHJlZmVyZW5jZSBuZWVkcwpzdHJ1Y3QgRm9vPFQ+IHsKICAgIGZvbzogJidzdGF0aWMgVAp9CmBgYAoKVHlwZSBwYXJhbWV0ZXJzIGluIHR5cGUgZGVmaW5pdGlvbnMgaGF2ZSBsaWZldGltZXMgYXNzb2NpYXRlZCB3aXRoIHRoZW0gdGhhdApyZXByZXNlbnQgaG93IGxvbmcgdGhlIGRhdGEgc3RvcmVkIHdpdGhpbiB0aGVtIGlzIGd1YXJhbnRlZWQgdG8gbGl2ZS4gVGhpcwpsaWZldGltZSBtdXN0IGJlIGFzIGxvbmcgYXMgdGhlIGRhdGEgbmVlZHMgdG8gYmUgYWxpdmUsIGFuZCBtaXNzaW5nIHRoZQpjb25zdHJhaW50IHRoYXQgZGVub3RlcyB0aGlzIHdpbGwgY2F1c2UgdGhpcyBlcnJvci4KClRoaXMgd2lsbCBjb21waWxlLCBiZWNhdXNlIGl0IGhhcyB0aGUgY29uc3RyYWludCBvbiB0aGUgdHlwZSBwYXJhbWV0ZXI6CgpgYGAKc3RydWN0IEZvbzxUOiAnc3RhdGljPiB7CiAgICBmb286ICYnc3RhdGljIFQKfQpgYGAKRTAzMTFUaGlzIGVycm9yIG9jY3VycyB3aGVuIHRoZXJlIGlzIGFuIHVuc2F0aXNmaWVkIG91dGxpdmVzIGJvdW5kIGludm9sdmluZyBhbgplbGlkZWQgcmVnaW9uIGFuZCBhIGdlbmVyaWMgdHlwZSBwYXJhbWV0ZXIgb3IgYXNzb2NpYXRlZCB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMxMQpmbiBub19yZXN0cmljdGlvbjxUPih4OiAmKCkpIC0+ICYoKSB7CiAgICB3aXRoX3Jlc3RyaWN0aW9uOjo8VD4oeCkKfQoKZm4gd2l0aF9yZXN0cmljdGlvbjwnYSwgVDogJ2E+KHg6ICYnYSAoKSkgLT4gJidhICgpIHsKICAgIHgKfQpgYGAKCldoeSBkb2Vzbid0IHRoaXMgY29kZSBjb21waWxlPyBJdCBoZWxwcyB0byBsb29rIGF0IHRoZSBsaWZldGltZSBib3VuZHMgdGhhdCBhcmUKYXV0b21hdGljYWxseSBhZGRlZCBieSB0aGUgY29tcGlsZXIuIEZvciBtb3JlIGRldGFpbHMgc2VlIHRoZSBkb2N1bWVudGF0aW9uIGZvcgpbbGlmZXRpbWUgZWxpc2lvbl0oIGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2xpZmV0aW1lLWVsaXNpb24uaHRtbCkuCgpUaGUgY29tcGlsZXIgZWxpZGVzIHRoZSBsaWZldGltZSBvZiBgeGAgYW5kIHRoZSByZXR1cm4gdHlwZSB0byBzb21lIGFyYml0cmFyeQpsaWZldGltZSBgJ2Fub25gIGluIGBub19yZXN0cmljdGlvbigpYC4gVGhlIG9ubHkgaW5mb3JtYXRpb24gYXZhaWxhYmxlIHRvIHRoZQpjb21waWxlciBpcyB0aGF0IGAnYW5vbmAgaXMgdmFsaWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZnVuY3Rpb24uIFdoZW4KY2FsbGluZyBgd2l0aF9yZXN0cmljdGlvbigpYCwgdGhlIGNvbXBpbGVyIHJlcXVpcmVzIHRoZSBjb21wbGV0ZWx5IHVucmVsYXRlZAp0eXBlIHBhcmFtZXRlciBgVGAgdG8gb3V0bGl2ZSBgJ2Fub25gIGJlY2F1c2Ugb2YgdGhlIGBUOiAnYWAgYm91bmQgaW4KYHdpdGhfcmVzdHJpY3Rpb24oKWAuIFRoaXMgY2F1c2VzIGFuIGVycm9yIGJlY2F1c2UgYFRgIGlzIG5vdCByZXF1aXJlZCB0bwpvdXRsaXZlIGAnYW5vbmAgaW4gYG5vX3Jlc3RyaWN0aW9uKClgLgoKSWYgYG5vX3Jlc3RyaWN0aW9uKClgIHdlcmUgdG8gdXNlIGAmVGAgaW5zdGVhZCBvZiBgJigpYCBhcyBhbiBhcmd1bWVudCwgdGhlCmNvbXBpbGVyIHdvdWxkIGhhdmUgYWRkZWQgYW4gaW1wbGllZCBib3VuZCwgY2F1c2luZyB0aGlzIHRvIGNvbXBpbGUuCgpUaGlzIGVycm9yIGNhbiBiZSByZXNvbHZlZCBieSBleHBsaWNpdGx5IG5hbWluZyB0aGUgZWxpZGVkIGxpZmV0aW1lIGZvciBgeGAgYW5kCnRoZW4gZXhwbGljaWx5IHJlcXVpcmluZyB0aGF0IHRoZSBnZW5lcmljIHBhcmFtZXRlciBgVGAgb3V0bGl2ZXMgdGhhdCBsaWZldGltZToKCmBgYApmbiBub19yZXN0cmljdGlvbjwnYSwgVDogJ2E+KHg6ICYnYSAoKSkgLT4gJidhICgpIHsKICAgIHdpdGhfcmVzdHJpY3Rpb246OjxUPih4KQp9CgpmbiB3aXRoX3Jlc3RyaWN0aW9uPCdhLCBUOiAnYT4oeDogJidhICgpKSAtPiAmJ2EgKCkgewogICAgeAp9CmBgYApFMDMxMiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClJlZmVyZW5jZSdzIGxpZmV0aW1lIG9mIGJvcnJvd2VkIGNvbnRlbnQgZG9lc24ndCBtYXRjaCB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnB1YiBmbiBvcHRfc3RyPCdhPihtYXliZXN0cjogJidhIE9wdGlvbjxTdHJpbmc+KSAtPiAmJ3N0YXRpYyBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIEludmFsaWQgbGlmZXRpbWUhCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZWl0aGVyIGxlc3NlbiB0aGUgZXhwZWN0ZWQgbGlmZXRpbWUgb3IgZmluZCBhIHdheSB0byBub3QgaGF2ZQp0byB1c2UgdGhpcyByZWZlcmVuY2Ugb3V0c2lkZSBvZiBpdHMgY3VycmVudCBzY29wZSAoYnkgcnVubmluZyB0aGUgY29kZSBkaXJlY3RseQppbiB0aGUgc2FtZSBibG9jayBmb3IgZXhhbXBsZT8pOgoKYGBgCi8vIEluIHRoaXMgY2FzZSwgd2UgY2FuIGZpeCB0aGUgaXNzdWUgYnkgc3dpdGNoaW5nIGZyb20gInN0YXRpYyIgbGlmZXRpbWUgdG8gJ2EKcHViIGZuIG9wdF9zdHI8J2E+KG1heWJlc3RyOiAmJ2EgT3B0aW9uPFN0cmluZz4pIC0+ICYnYSBzdHIgewogICAgaWYgbWF5YmVzdHIuaXNfbm9uZSgpIHsKICAgICAgICAiKG5vbmUpIgogICAgfSBlbHNlIHsKICAgICAgICBsZXQgczogJidhIHN0ciA9IG1heWJlc3RyLmFzX3JlZigpLnVud3JhcCgpOwogICAgICAgIHMgIC8vIE9rIQogICAgfQp9CmBgYApFMDMxNkEgYHdoZXJlYCBjbGF1c2UgY29udGFpbnMgYSBuZXN0ZWQgcXVhbnRpZmljYXRpb24gb3ZlciBsaWZldGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzE2CnRyYWl0IFRyPCdhLCAnYj4ge30KCmZuIGZvbzxUPih0OiBUKQp3aGVyZQogICAgZm9yPCdhPiAmJ2EgVDogZm9yPCdiPiBUcjwnYSwgJ2I+LCAvLyBlcnJvcjogbmVzdGVkIHF1YW50aWZpY2F0aW9uCnsKfQpgYGAKClJ1c3Qgc3ludGF4IGFsbG93cyBsaWZldGltZSBxdWFudGlmaWNhdGlvbnMgaW4gdHdvIHBsYWNlcyB3aXRoaW4KYHdoZXJlYCBjbGF1c2VzOiBRdWFudGlmeWluZyBvdmVyIHRoZSB0cmFpdCBib3VuZCBvbmx5IChhcyBpbgpgVHk6IGZvcjwnbD4gVHJhaXQ8J2w+YCkgYW5kIHF1YW50aWZ5aW5nIG92ZXIgdGhlIHdob2xlIGNsYXVzZQooYXMgaW4gYGZvcjwnbD4gJidsIFR5OiBUcmFpdDwnbD5gKS4gVXNpbmcgYm90aCBpbiB0aGUgc2FtZSBjbGF1c2UKbGVhZHMgdG8gYSBuZXN0ZWQgbGlmZXRpbWUgcXVhbnRpZmljYXRpb24sIHdoaWNoIGlzIG5vdCBzdXBwb3J0ZWQuCgpUaGUgZm9sbG93aW5nIGV4YW1wbGUgY29tcGlsZXMsIGJlY2F1c2UgdGhlIGNsYXVzZSB3aXRoIHRoZSBuZXN0ZWQKcXVhbnRpZmljYXRpb24gaGFzIGJlZW4gcmV3cml0dGVuIHRvIHVzZSBvbmx5IG9uZSBgZm9yPD5gOgoKYGBgCnRyYWl0IFRyPCdhLCAnYj4ge30KCmZuIGZvbzxUPih0OiBUKQp3aGVyZQogICAgZm9yPCdhLCAnYj4gJidhIFQ6IFRyPCdhLCAnYj4sIC8vIG9rCnsKfQpgYGAKRTAzMTdBbiBgaWZgIGV4cHJlc3Npb24gaXMgbWlzc2luZyBhbiBgZWxzZWAgYmxvY2suCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzE3CmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9OwpgYGAKClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGlzIHVzZWQgaW4gYQpjb250ZXh0IHdoZXJlIGEgdHlwZSBvdGhlciB0aGFuIGAoKWAgaXMgZXhwZWN0ZWQuIEluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUsCnRoZSBgbGV0YCBleHByZXNzaW9uIHdhcyBleHBlY3RpbmcgYSB2YWx1ZSBidXQgc2luY2UgdGhlcmUgd2FzIG5vIGBlbHNlYCwgbm8KdmFsdWUgd2FzIHJldHVybmVkLgoKQW4gYGlmYCBleHByZXNzaW9uIHdpdGhvdXQgYW4gYGVsc2VgIGJsb2NrIGhhcyB0aGUgdHlwZSBgKClgLCBzbyB0aGlzIGlzIGEgdHlwZQplcnJvci4gVG8gcmVzb2x2ZSBpdCwgYWRkIGFuIGBlbHNlYCBibG9jayBoYXZpbmcgdGhlIHNhbWUgdHlwZSBhcyB0aGUgYGlmYApibG9jay4KClNvIHRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlOgoKYGBgCmxldCB4ID0gNTsKbGV0IGEgPSBpZiB4ID09IDUgewogICAgMQp9IGVsc2UgewogICAgMgp9OwpgYGAKRTAzMjFBIGNyb3NzLWNyYXRlIG9wdC1vdXQgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIHNvbWV0aGluZyB3aGljaCB3YXNuJ3QgYSBzdHJ1Y3QKb3IgZW51bSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyMQojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnN0cnVjdCBGb287CgppbXBsICFTeW5jIGZvciBGb28ge30KCnVuc2FmZSBpbXBsIFNlbmQgZm9yICYnc3RhdGljIEZvbyB7fQovLyBlcnJvcjogY3Jvc3MtY3JhdGUgdHJhaXRzIHdpdGggYSBkZWZhdWx0IGltcGwsIGxpa2UgYGNvcmU6Om1hcmtlcjo6U2VuZGAsCi8vICAgICAgICBjYW4gb25seSBiZSBpbXBsZW1lbnRlZCBmb3IgYSBzdHJ1Y3QvZW51bSB0eXBlLCBub3QKLy8gICAgICAgIGAmJ3N0YXRpYyBGb29gCmBgYAoKT25seSBzdHJ1Y3RzIGFuZCBlbnVtcyBhcmUgcGVybWl0dGVkIHRvIGltcGwgU2VuZCwgU3luYywgYW5kIG90aGVyIG9wdC1vdXQKdHJhaXQsIGFuZCB0aGUgc3RydWN0IG9yIGVudW0gbXVzdCBiZSBsb2NhbCB0byB0aGUgY3VycmVudCBjcmF0ZS4gU28sIGZvcgpleGFtcGxlLCBgdW5zYWZlIGltcGwgU2VuZCBmb3IgUmM8Rm9vPmAgaXMgbm90IGFsbG93ZWQuCkUwMzIyQSBidWlsdC1pbiB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgZXhwbGljaXRseS4gQWxsIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgdHJhaXQKYXJlIHByb3ZpZGVkIGF1dG9tYXRpY2FsbHkgYnkgdGhlIGNvbXBpbGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyMgpzdHJ1Y3QgRm9vOwoKaW1wbCBTaXplZCBmb3IgRm9vIHt9IC8vIGVycm9yIQpgYGAKClRoZSBgU2l6ZWRgIHRyYWl0IGlzIGEgc3BlY2lhbCB0cmFpdCBidWlsdC1pbiB0byB0aGUgY29tcGlsZXIgZm9yIHR5cGVzIHdpdGggYQpjb25zdGFudCBzaXplIGtub3duIGF0IGNvbXBpbGUtdGltZS4gVGhpcyB0cmFpdCBpcyBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkCmZvciB0eXBlcyBhcyBuZWVkZWQgYnkgdGhlIGNvbXBpbGVyLCBhbmQgaXQgaXMgY3VycmVudGx5IGRpc2FsbG93ZWQgdG8KZXhwbGljaXRseSBpbXBsZW1lbnQgaXQgZm9yIGEgdHlwZS4KRTAzMjNBbiBhc3NvY2lhdGVkIGNvbnN0IHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzIzCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGNvbnN0IE4gOiB1MzIgPSAwOwogICAgLy8gZXJyb3I6IGl0ZW0gYE5gIGlzIGFuIGFzc29jaWF0ZWQgY29uc3QsIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggaXRzCiAgICAvLyAgICAgICAgdHJhaXQgYDxCYXIgYXMgRm9vPmAKfQpgYGAKClBsZWFzZSB2ZXJpZnkgdGhhdCB0aGUgYXNzb2NpYXRlZCBjb25zdCB3YXNuJ3QgbWlzc3BlbGxlZCBhbmQgdGhlIGNvcnJlY3QgdHJhaXQKd2FzIGltcGxlbWVudGVkLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7IC8vIG9rIQp9CmBgYApFMDMyNEEgbWV0aG9kIHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI0CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKCiAgICBmbiBNKCk7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gTigpIHt9CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCBtZXRob2QsIHdoaWNoIGRvZXNuJ3QgbWF0Y2ggaXRzCiAgICAvLyAgICAgICAgdHJhaXQgYDxCYXIgYXMgRm9vPmAKfQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG1ldGhvZCBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZAp2ZXJpZnkgdGhhdCB5b3UgYXJlIGluZGVlZCBpbXBsZW1lbnRpbmcgdGhlIGNvcnJlY3QgdHJhaXQgaXRlbXMuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBjb25zdCBOIDogdTMyOwoKICAgIGZuIE0oKTsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBOIDogdTMyID0gMDsKCiAgICBmbiBNKCkge30gLy8gb2shCn0KYGBgCkUwMzI1QW4gYXNzb2NpYXRlZCB0eXBlIHdhcyBpbXBsZW1lbnRlZCB3aGVuIGFub3RoZXIgdHJhaXQgaXRlbSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzI1CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgY29uc3QgTiA6IHUzMjsKfQoKaW1wbCBGb28gZm9yIEJhciB7CiAgICB0eXBlIE4gPSB1MzI7CiAgICAvLyBlcnJvcjogaXRlbSBgTmAgaXMgYW4gYXNzb2NpYXRlZCB0eXBlLCB3aGljaCBkb2Vzbid0IG1hdGNoIGl0cwogICAgLy8gICAgICAgIHRyYWl0IGA8QmFyIGFzIEZvbz5gCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIGFzc29jaWF0ZWQgdHlwZSBuYW1lIHdhc24ndCBtaXNzcGVsbGVkIGFuZCB5b3VyCmltcGxlbWVudGF0aW9uIGNvcnJlc3BvbmRzIHRvIHRoZSB0cmFpdCBkZWZpbml0aW9uLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgdHlwZSBOOwp9CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIHR5cGUgTiA9IHUzMjsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYApzdHJ1Y3QgQmFyOwoKdHJhaXQgRm9vIHsKICAgIGNvbnN0IE4gOiB1MzI7Cn0KCmltcGwgRm9vIGZvciBCYXIgewogICAgY29uc3QgTiA6IHUzMiA9IDA7IC8vIG9rIQp9CmBgYApFMDMyNkFuIGltcGxlbWVudGF0aW9uIG9mIGEgdHJhaXQgZG9lc24ndCBtYXRjaCB0aGUgdHlwZSBjb25zdHJhaW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDMyNgp0cmFpdCBGb28gewogICAgY29uc3QgQkFSOiBib29sOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBjb25zdCBCQVI6IHUzMiA9IDU7IC8vIGVycm9yLCBleHBlY3RlZCBib29sLCBmb3VuZCB1MzIKfQpgYGAKClRoZSB0eXBlcyBvZiBhbnkgYXNzb2NpYXRlZCBjb25zdGFudHMgaW4gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbiBtdXN0IG1hdGNoIHRoZQp0eXBlcyBpbiB0aGUgdHJhaXQgZGVmaW5pdGlvbi4KRTAzMjhUaGUgVW5zaXplIHRyYWl0IHNob3VsZCBub3QgYmUgaW1wbGVtZW50ZWQgZGlyZWN0bHkuIEFsbCBpbXBsZW1lbnRhdGlvbnMgb2YKVW5zaXplIGFyZSBwcm92aWRlZCBhdXRvbWF0aWNhbGx5IGJ5IHRoZSBjb21waWxlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzMjgKIyFbZmVhdHVyZSh1bnNpemUpXQoKdXNlIHN0ZDo6bWFya2VyOjpVbnNpemU7CgpwdWIgc3RydWN0IE15VHlwZTsKCmltcGw8VD4gVW5zaXplPFQ+IGZvciBNeVR5cGUge30KYGBgCgpJZiB5b3UgYXJlIGRlZmluaW5nIHlvdXIgb3duIHNtYXJ0IHBvaW50ZXIgdHlwZSBhbmQgd291bGQgbGlrZSB0byBlbmFibGUKY29udmVyc2lvbiBmcm9tIGEgc2l6ZWQgdG8gYW4gdW5zaXplZCB0eXBlIHdpdGggdGhlCltEU1QgY29lcmNpb24gc3lzdGVtXVtSRkMgOTgyXSwgdXNlIFtgQ29lcmNlVW5zaXplZGBdIGluc3RlYWQuCgpgYGAKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCgp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpwdWIgc3RydWN0IE15VHlwZTxUOiA/U2l6ZWQ+IHsKICAgIGZpZWxkX3dpdGhfdW5zaXplZF90eXBlOiBULAp9CgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8TXlUeXBlPFU+PiBmb3IgTXlUeXBlPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKW1JGQyA5ODJdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wOTgyLWRzdC1jb2VyY2lvbi5tZApbYENvZXJjZVVuc2l6ZWRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQvb3BzL3RyYWl0LkNvZXJjZVVuc2l6ZWQuaHRtbApFMDMyOSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gYWNjZXNzIGFuIGFzc29jaWF0ZWQgY29uc3RhbnQgdGhyb3VnaCBlaXRoZXIgYSBnZW5lcmljCnR5cGUgcGFyYW1ldGVyIG9yIGBTZWxmYC4gVGhpcyBpcyBub3Qgc3VwcG9ydGVkIHlldC4gQW4gZXhhbXBsZSBjYXVzaW5nIHRoaXMKZXJyb3IgaXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2JhZDxGOiBGb28+KHQ6IEYpIC0+IGY2NCB7CiAgICBGOjpCQVIKfQpgYGAKCkN1cnJlbnRseSwgdGhlIHZhbHVlIG9mIGBCQVJgIGZvciBhIHBhcnRpY3VsYXIgdHlwZSBjYW4gb25seSBiZSBhY2Nlc3NlZAp0aHJvdWdoIGEgY29uY3JldGUgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGNvbnN0IEJBUjogZjY0Owp9CgpzdHJ1Y3QgTXlTdHJ1Y3Q7CgppbXBsIEZvbyBmb3IgTXlTdHJ1Y3QgewogICAgY29uc3QgQkFSOiBmNjQgPSAwZjY0Owp9CgpmbiBnZXRfYmFyX2dvb2QoKSAtPiBmNjQgewogICAgPE15U3RydWN0IGFzIEZvbz46OkJBUgp9CmBgYApFMDM2NFByaXZhdGUgaXRlbXMgY2Fubm90IGJlIHB1YmxpY2x5IHJlLWV4cG9ydGVkLiBUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHlvdQphdHRlbXB0ZWQgdG8gYHB1YiB1c2VgIGEgdHlwZSBvciB2YWx1ZSB0aGF0IHdhcyBub3QgaXRzZWxmIHB1YmxpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjQKbW9kIGEgewogICAgZm4gZm9vKCkge30KCiAgICBtb2QgYSB7CiAgICAgICAgcHViIHVzZSBzdXBlcjo6Zm9vOyAvLyBlcnJvciEKICAgIH0KfQpgYGAKClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gZW5zdXJlIHRoYXQgdGhlIGl0ZW1zIHRoYXQgeW91IGFyZQpyZS1leHBvcnRpbmcgYXJlIHRoZW1zZWx2ZXMgbWFya2VkIHdpdGggYHB1YmA6CgpgYGAKbW9kIGEgewogICAgcHViIGZuIGZvbygpIHt9IC8vIG9rIQoKICAgIG1vZCBhIHsKICAgICAgICBwdWIgdXNlIHN1cGVyOjpmb287CiAgICB9Cn0KYGBgCgpTZWUgdGhlIFtVc2UgRGVjbGFyYXRpb25zXVt1c2UtZGVjbGFyYXRpb25zXSBzZWN0aW9uIG9mIHRoZSByZWZlcmVuY2UgZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdGhpcyB0b3BpYy4KClt1c2UtZGVjbGFyYXRpb25zXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdXNlLWRlY2xhcmF0aW9ucy5odG1sCkUwMzY1UHJpdmF0ZSBtb2R1bGVzIGNhbm5vdCBiZSBwdWJsaWNseSByZS1leHBvcnRlZC4gVGhpcyBlcnJvciBpbmRpY2F0ZXMgdGhhdCB5b3UKYXR0ZW1wdGVkIHRvIGBwdWIgdXNlYCBhIG1vZHVsZSB0aGF0IHdhcyBub3QgaXRzZWxmIHB1YmxpYy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNjUKbW9kIGZvbyB7CiAgICBwdWIgY29uc3QgWDogdTMyID0gMTsKfQoKcHViIHVzZSBmb28gYXMgZm9vMjsKCmZuIG1haW4oKSB7fQpgYGAKClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gZW5zdXJlIHRoYXQgdGhlIG1vZHVsZSB0aGF0IHlvdSBhcmUKcmUtZXhwb3J0aW5nIGlzIGl0c2VsZiBtYXJrZWQgd2l0aCBgcHViYDoKCmBgYApwdWIgbW9kIGZvbyB7CiAgICBwdWIgY29uc3QgWDogdTMyID0gMTsKfQoKcHViIHVzZSBmb28gYXMgZm9vMjsKCmZuIG1haW4oKSB7fQpgYGAKClNlZSB0aGUgW1VzZSBEZWNsYXJhdGlvbnNdW3VzZS1kZWNsYXJhdGlvbnNdIHNlY3Rpb24gb2YgdGhlIHJlZmVyZW5jZSBmb3IKbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGlzIHRvcGljLgoKW3VzZS1kZWNsYXJhdGlvbnNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9pdGVtcy91c2UtZGVjbGFyYXRpb25zLmh0bWwKRTAzNjZBbiBhdHRlbXB0IHdhcyBtYWRlIHRvIGltcGxlbWVudCBgRHJvcGAgb24gYSBjb25jcmV0ZSBzcGVjaWFsaXphdGlvbiBvZiBhCmdlbmVyaWMgdHlwZS4gQW4gZXhhbXBsZSBpcyBzaG93biBiZWxvdzoKCmBgYGNvbXBpbGVfZmFpbCxFMDM2NgpzdHJ1Y3QgRm9vPFQ+IHsKICAgIHQ6IFQKfQoKaW1wbCBEcm9wIGZvciBGb288dTMyPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQpgYGAKClRoaXMgY29kZSBpcyBub3QgbGVnYWw6IGl0IGlzIG5vdCBwb3NzaWJsZSB0byBzcGVjaWFsaXplIGBEcm9wYCB0byBhIHN1YnNldCBvZgppbXBsZW1lbnRhdGlvbnMgb2YgYSBnZW5lcmljIHR5cGUuIE9uZSB3b3JrYXJvdW5kIGZvciB0aGlzIGlzIHRvIHdyYXAgdGhlCmdlbmVyaWMgdHlwZSwgYXMgc2hvd24gYmVsb3c6CgpgYGAKc3RydWN0IEZvbzxUPiB7CiAgICB0OiBUCn0KCnN0cnVjdCBCYXIgewogICAgdDogRm9vPHUzMj4KfQoKaW1wbCBEcm9wIGZvciBCYXIgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KYGBgCkUwMzY3QW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBpbXBsZW1lbnQgYERyb3BgIG9uIGEgc3BlY2lhbGl6YXRpb24gb2YgYSBnZW5lcmljIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY3CnRyYWl0IEZvbyB7fQoKc3RydWN0IE15U3RydWN0PFQ+IHsKICAgIHQ6IFQKfQoKaW1wbDxUOiBGb28+IERyb3AgZm9yIE15U3RydWN0PFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYAoKVGhpcyBjb2RlIGlzIG5vdCBsZWdhbDogaXQgaXMgbm90IHBvc3NpYmxlIHRvIHNwZWNpYWxpemUgYERyb3BgIHRvIGEgc3Vic2V0IG9mCmltcGxlbWVudGF0aW9ucyBvZiBhIGdlbmVyaWMgdHlwZS4gSW4gb3JkZXIgZm9yIHRoaXMgY29kZSB0byB3b3JrLCBgTXlTdHJ1Y3RgCm11c3QgYWxzbyByZXF1aXJlIHRoYXQgYFRgIGltcGxlbWVudHMgYEZvb2AuIEFsdGVybmF0aXZlbHksIGFub3RoZXIgb3B0aW9uIGlzCnRvIHdyYXAgdGhlIGdlbmVyaWMgdHlwZSBpbiBhbm90aGVyIHRoYXQgc3BlY2lhbGl6ZXMgYXBwcm9wcmlhdGVseToKCmBgYAp0cmFpdCBGb297fQoKc3RydWN0IE15U3RydWN0PFQ+IHsKICAgIHQ6IFQKfQoKc3RydWN0IE15U3RydWN0V3JhcHBlcjxUOiBGb28+IHsKICAgIHQ6IE15U3RydWN0PFQ+Cn0KCmltcGwgPFQ6IEZvbz4gRHJvcCBmb3IgTXlTdHJ1Y3RXcmFwcGVyPFQ+IHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7fQp9CmBgYApFMDM2OEEgYmluYXJ5IGFzc2lnbm1lbnQgb3BlcmF0b3IgbGlrZSBgKz1gIG9yIGBePWAgd2FzIGFwcGxpZWQgdG8gYSB0eXBlIHRoYXQKZG9lc24ndCBzdXBwb3J0IGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OApsZXQgbXV0IHggPSAxMmYzMjsgLy8gZXJyb3I6IGJpbmFyeSBvcGVyYXRpb24gYDw8YCBjYW5ub3QgYmUgYXBwbGllZCB0bwogICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHR5cGUgYGYzMmAKCnggPDw9IDI7CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBjaGVjayB0aGF0IHRoaXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgYmluYXJ5Cm9wZXJhdGlvbi4gRXhhbXBsZToKCmBgYApsZXQgbXV0IHggPSAxMnUzMjsgLy8gdGhlIGB1MzJgIHR5cGUgZG9lcyBpbXBsZW1lbnQgdGhlIGBTaGxBc3NpZ25gIHRyYWl0Cgp4IDw8PSAyOyAvLyBvayEKYGBgCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJsb2FkIG1vc3Qgb3BlcmF0b3JzIGZvciB5b3VyIG93biB0eXBlIGJ5CmltcGxlbWVudGluZyB0aGUgYFtPUF1Bc3NpZ25gIHRyYWl0cyBmcm9tIGBzdGQ6Om9wc2AuCgpBbm90aGVyIHByb2JsZW0geW91IG1pZ2h0IGJlIGZhY2luZyBpcyB0aGlzOiBzdXBwb3NlIHlvdSd2ZSBvdmVybG9hZGVkIHRoZSBgK2AKb3BlcmF0b3IgZm9yIHNvbWUgdHlwZSBgRm9vYCBieSBpbXBsZW1lbnRpbmcgdGhlIGBzdGQ6Om9wczo6QWRkYCB0cmFpdCBmb3IKYEZvb2AsIGJ1dCB5b3UgZmluZCB0aGF0IHVzaW5nIGArPWAgZG9lcyBub3Qgd29yaywgYXMgaW4gdGhpcyBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzY4CnVzZSBzdGQ6Om9wczo6QWRkOwoKc3RydWN0IEZvbyh1MzIpOwoKaW1wbCBBZGQgZm9yIEZvbyB7CiAgICB0eXBlIE91dHB1dCA9IEZvbzsKCiAgICBmbiBhZGQoc2VsZiwgcmhzOiBGb28pIC0+IEZvbyB7CiAgICAgICAgRm9vKHNlbGYuMCArIHJocy4wKQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4OiBGb28gPSBGb28oNSk7CiAgICB4ICs9IEZvbyg3KTsgLy8gZXJyb3IsIGArPSBjYW5ub3QgYmUgYXBwbGllZCB0byB0aGUgdHlwZSBgRm9vYAp9CmBgYAoKVGhpcyBpcyBiZWNhdXNlIGBBZGRBc3NpZ25gIGlzIG5vdCBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkLCBzbyB5b3UgbmVlZCB0bwptYW51YWxseSBpbXBsZW1lbnQgaXQgZm9yIHlvdXIgdHlwZS4KRTAzNjlBIGJpbmFyeSBvcGVyYXRpb24gd2FzIGF0dGVtcHRlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBzdXBwb3J0IGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM2OQpsZXQgeCA9IDEyZjMyOyAvLyBlcnJvcjogYmluYXJ5IG9wZXJhdGlvbiBgPDxgIGNhbm5vdCBiZSBhcHBsaWVkIHRvCiAgICAgICAgICAgICAgIC8vICAgICAgICB0eXBlIGBmMzJgCgp4IDw8IDI7CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHBsZWFzZSBjaGVjayB0aGF0IHRoaXMgdHlwZSBpbXBsZW1lbnRzIHRoaXMgYmluYXJ5Cm9wZXJhdGlvbi4gRXhhbXBsZToKCmBgYApsZXQgeCA9IDEydTMyOyAvLyB0aGUgYHUzMmAgdHlwZSBkb2VzIGltcGxlbWVudCBpdDoKICAgICAgICAgICAgICAgLy8gaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGFibGUvc3RkL29wcy90cmFpdC5TaGwuaHRtbAoKeCA8PCAyOyAvLyBvayEKYGBgCgpJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIG92ZXJsb2FkIG1vc3Qgb3BlcmF0b3JzIGZvciB5b3VyIG93biB0eXBlIGJ5CmltcGxlbWVudGluZyB0cmFpdHMgZnJvbSBgc3RkOjpvcHNgLgoKU3RyaW5nIGNvbmNhdGVuYXRpb24gYXBwZW5kcyB0aGUgc3RyaW5nIG9uIHRoZSByaWdodCB0byB0aGUgc3RyaW5nIG9uIHRoZQpsZWZ0IGFuZCBtYXkgcmVxdWlyZSByZWFsbG9jYXRpb24uIFRoaXMgcmVxdWlyZXMgb3duZXJzaGlwIG9mIHRoZSBzdHJpbmcKb24gdGhlIGxlZnQuIElmIHNvbWV0aGluZyBzaG91bGQgYmUgYWRkZWQgdG8gYSBzdHJpbmcgbGl0ZXJhbCwgbW92ZSB0aGUKbGl0ZXJhbCB0byB0aGUgaGVhcCBieSBhbGxvY2F0aW5nIGl0IHdpdGggYHRvX293bmVkKClgIGxpa2UgaW4KYCJZb3VyIHRleHQiLnRvX293bmVkKClgLgpFMDM3MFRoZSBtYXhpbXVtIHZhbHVlIG9mIGFuIGVudW0gd2FzIHJlYWNoZWQsIHNvIGl0IGNhbm5vdCBiZSBhdXRvbWF0aWNhbGx5CnNldCBpbiB0aGUgbmV4dCBlbnVtIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKICAgIFksIC8vIGVycm9yOiBlbnVtIGRpc2NyaW1pbmFudCBvdmVyZmxvd2VkIG9uIHZhbHVlIGFmdGVyCiAgICAgICAvLyAgICAgICAgOTIyMzM3MjAzNjg1NDc3NTgwNzogaTY0OyBzZXQgZXhwbGljaXRseSB2aWEKICAgICAgIC8vICAgICAgICBZID0gLTkyMjMzNzIwMzY4NTQ3NzU4MDggaWYgdGhhdCBpcyBkZXNpcmVkIG91dGNvbWUKfQpgYGAKClRvIGZpeCB0aGlzLCBwbGVhc2Ugc2V0IG1hbnVhbGx5IHRoZSBuZXh0IGVudW0gdmFsdWUgb3IgcHV0IHRoZSBlbnVtIHZhcmlhbnQKd2l0aCB0aGUgbWF4aW11bSB2YWx1ZSBhdCB0aGUgZW5kIG9mIHRoZSBlbnVtLiBFeGFtcGxlczoKCmBgYAojW3JlcHIoaTY0KV0KZW51bSBGb28gewogICAgWCA9IDB4N2ZmZmZmZmZmZmZmZmZmZiwKICAgIFkgPSAwLCAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCiNbcmVwcihpNjQpXQplbnVtIEZvbyB7CiAgICBZID0gMCwgLy8gb2shCiAgICBYID0gMHg3ZmZmZmZmZmZmZmZmZmZmLAp9CmBgYApFMDM3MUEgdHJhaXQgd2FzIGltcGxlbWVudGVkIG9uIGFub3RoZXIgd2hpY2ggYWxyZWFkeSBhdXRvbWF0aWNhbGx5IGltcGxlbWVudGVkIGl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzEKdHJhaXQgRm9vIHsgZm4gZm9vKCZzZWxmKSB7IH0gfQp0cmFpdCBCYXI6IEZvbyB7IH0KdHJhaXQgQmF6OiBCYXIgeyB9CgppbXBsIEJhciBmb3IgQmF6IHsgfSAvLyBlcnJvciwgYEJhemAgaW1wbGVtZW50cyBgQmFyYCBieSBkZWZpbml0aW9uCmltcGwgRm9vIGZvciBCYXogeyB9IC8vIGVycm9yLCBgQmF6YCBpbXBsZW1lbnRzIGBCYXJgIHdoaWNoIGltcGxlbWVudHMgYEZvb2AKaW1wbCBCYXogZm9yIEJheiB7IH0gLy8gZXJyb3IsIGBCYXpgICh0cml2aWFsbHkpIGltcGxlbWVudHMgYEJhemAKaW1wbCBCYXogZm9yIEJhciB7IH0gLy8gTm90ZTogVGhpcyBpcyBPSwpgYGAKCldoZW4gYFRyYWl0MmAgaXMgYSBzdWJ0cmFpdCBvZiBgVHJhaXQxYCAoZm9yIGV4YW1wbGUsIHdoZW4gYFRyYWl0MmAgaGFzIGEKZGVmaW5pdGlvbiBsaWtlIGB0cmFpdCBUcmFpdDI6IFRyYWl0MSB7IC4uLiB9YCksIGl0IGlzIG5vdCBhbGxvd2VkIHRvIGltcGxlbWVudApgVHJhaXQxYCBmb3IgYFRyYWl0MmAuIFRoaXMgaXMgYmVjYXVzZSBgVHJhaXQyYCBhbHJlYWR5IGltcGxlbWVudHMgYFRyYWl0MWAgYnkKZGVmaW5pdGlvbiwgc28gaXQgaXMgbm90IHVzZWZ1bCB0byBkbyB0aGlzLgpFMDM3M0EgY2FwdHVyZWQgdmFyaWFibGUgaW4gYSBjbG9zdXJlIG1heSBub3QgbGl2ZSBsb25nIGVub3VnaC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMKZm4gZm9vKCkgLT4gQm94PEZuKHUzMikgLT4gdTMyPiB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBCb3g6Om5ldyh8eXwgeCArIHkpCn0KYGBgCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byB1c2UgZGF0YSBjYXB0dXJlZCBieSBhIGNsb3N1cmUsCndoZW4gdGhhdCBkYXRhIG1heSBubyBsb25nZXIgZXhpc3QuIEl0J3MgbW9zdCBjb21tb25seSBzZWVuIHdoZW4gYXR0ZW1wdGluZyB0bwpyZXR1cm4gYSBjbG9zdXJlIGFzIHNob3duIGluIHRoZSBwcmV2aW91cyBjb2RlIGV4YW1wbGUuCgpOb3RpY2UgdGhhdCBgeGAgaXMgc3RhY2stYWxsb2NhdGVkIGJ5IGBmb28oKWAuIEJ5IGRlZmF1bHQsIFJ1c3QgY2FwdHVyZXMKY2xvc2VkLW92ZXIgZGF0YSBieSByZWZlcmVuY2UuIFRoaXMgbWVhbnMgdGhhdCBvbmNlIGBmb28oKWAgcmV0dXJucywgYHhgIG5vCmxvbmdlciBleGlzdHMuIEFuIGF0dGVtcHQgdG8gYWNjZXNzIGB4YCB3aXRoaW4gdGhlIGNsb3N1cmUgd291bGQgdGh1cyBiZQp1bnNhZmUuCgpBbm90aGVyIHNpdHVhdGlvbiB3aGVyZSB0aGlzIG1pZ2h0IGJlIGVuY291bnRlcmVkIGlzIHdoZW4gc3Bhd25pbmcgdGhyZWFkczoKCmBgYGNvbXBpbGVfZmFpbCxFMDM3MwpmbiBmb28oKSB7CiAgICBsZXQgeCA9IDB1MzI7CiAgICBsZXQgeSA9IDF1MzI7CgogICAgbGV0IHRociA9IHN0ZDo6dGhyZWFkOjpzcGF3bih8fCB7CiAgICAgICAgeCArIHkKICAgIH0pOwp9CmBgYAoKU2luY2Ugb3VyIG5ldyB0aHJlYWQgcnVucyBpbiBwYXJhbGxlbCwgdGhlIHN0YWNrIGZyYW1lIGNvbnRhaW5pbmcgYHhgIGFuZCBgeWAKbWF5IHdlbGwgaGF2ZSBkaXNhcHBlYXJlZCBieSB0aGUgdGltZSB3ZSB0cnkgdG8gdXNlIHRoZW0uIEV2ZW4gaWYgd2UgY2FsbApgdGhyLmpvaW4oKWAgd2l0aGluIGZvbyAod2hpY2ggYmxvY2tzIHVudGlsIGB0aHJgIGhhcyBjb21wbGV0ZWQsIGVuc3VyaW5nIHRoZQpzdGFjayBmcmFtZSB3b24ndCBkaXNhcHBlYXIpLCB3ZSB3aWxsIG5vdCBzdWNjZWVkOiB0aGUgY29tcGlsZXIgY2Fubm90IHByb3ZlCnRoYXQgdGhpcyBiZWhhdmlvciBpcyBzYWZlLCBhbmQgc28gd29uJ3QgbGV0IHVzIGRvIGl0LgoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB1c3VhbGx5IHRvIHN3aXRjaCB0byB1c2luZyBhIGBtb3ZlYCBjbG9zdXJlLgpUaGlzIGFwcHJvYWNoIG1vdmVzIChvciBjb3BpZXMsIHdoZXJlIHBvc3NpYmxlKSBkYXRhIGludG8gdGhlIGNsb3N1cmUsIHJhdGhlcgp0aGFuIHRha2luZyByZWZlcmVuY2VzIHRvIGl0LiBGb3IgZXhhbXBsZToKCmBgYApmbiBmb28oKSAtPiBCb3g8Rm4odTMyKSAtPiB1MzI+IHsKICAgIGxldCB4ID0gMHUzMjsKICAgIEJveDo6bmV3KG1vdmUgfHl8IHggKyB5KQp9CmBgYAoKTm93IHRoYXQgdGhlIGNsb3N1cmUgaGFzIGl0cyBvd24gY29weSBvZiB0aGUgZGF0YSwgdGhlcmUncyBubyBuZWVkIHRvIHdvcnJ5CmFib3V0IHNhZmV0eS4KClRoaXMgZXJyb3IgbWF5IGFsc28gYmUgZW5jb3VudGVyZWQgd2hpbGUgdXNpbmcgYGFzeW5jYCBibG9ja3M6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzMsZWRpdGlvbjIwMTgKdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7Cgphc3luYyBmbiBmKCkgewogICAgbGV0IHYgPSB2ZWMhWzEsIDIsIDNpMzJdOwogICAgc3Bhd24oYXN5bmMgeyAvL34gRVJST1IgRTAzNzMKICAgICAgICBwcmludGxuISgiezo/fSIsIHYpCiAgICB9KTsKfQoKZm4gc3Bhd248RjogRnV0dXJlICsgU2VuZCArICdzdGF0aWM+KGZ1dHVyZTogRikgewogICAgdW5pbXBsZW1lbnRlZCEoKQp9CmBgYAoKU2ltaWxhcmx5IHRvIGNsb3N1cmVzLCBgYXN5bmNgIGJsb2NrcyBhcmUgbm90IGV4ZWN1dGVkIGltbWVkaWF0ZWx5IGFuZCBtYXkKY2FwdHVyZSBjbG9zZWQtb3ZlciBkYXRhIGJ5IHJlZmVyZW5jZS4gRm9yIG1vcmUgaW5mb3JtYXRpb24sIHNlZQpodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vYXN5bmMtYm9vay8wM19hc3luY19hd2FpdC8wMV9jaGFwdGVyLmh0bWwuCkUwMzc0YENvZXJjZVVuc2l6ZWRgIHdhcyBpbXBsZW1lbnRlZCBvbiBhIHN0cnVjdCB3aGljaCBkb2VzIG5vdCBjb250YWluIGEgZmllbGQgd2l0aAphbiB1bnNpemVkIHR5cGUuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc0CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAp9CgovLyBlcnJvcjogU3RydWN0IGBGb29gIGhhcyBubyB1bnNpemVkIGZpZWxkcyB0aGF0IG5lZWQgYENvZXJjZVVuc2l6ZWRgLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFU+PiBmb3IgRm9vPFQ+CiAgICB3aGVyZSBUOiBDb2VyY2VVbnNpemVkPFU+IHt9CmBgYAoKQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgd2hlcmUgdGhlIGNvbXBpbGVyIGRvZXMgbm90IGtub3cgdGhlIGxlbmd0aCBvcgphbGlnbm1lbnQgb2YgYXQgY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGlzIGFsc28KdW5zaXplZC4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CgpgQ29lcmNlVW5zaXplZGAgaXMgdXNlZCB0byBjb2VyY2Ugb25lIHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppbnRvIGFub3RoZXIgc3RydWN0IGNvbnRhaW5pbmcgYSBkaWZmZXJlbnQgdW5zaXplZCB0eXBlLiBJZiB0aGUgc3RydWN0CmRvZXNuJ3QgaGF2ZSBhbnkgZmllbGRzIG9mIHVuc2l6ZWQgdHlwZXMgdGhlbiB5b3UgZG9uJ3QgbmVlZCBleHBsaWNpdApjb2VyY2lvbiB0byBnZXQgdGhlIHR5cGVzIHlvdSB3YW50LiBUbyBmaXggdGhpcyB5b3UgY2FuIGVpdGhlcgpub3QgdHJ5IHRvIGltcGxlbWVudCBgQ29lcmNlVW5zaXplZGAgb3IgeW91IGNhbiBhZGQgYSBmaWVsZCB0aGF0IGlzCnVuc2l6ZWQgdG8gdGhlIHN0cnVjdC4KCkV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShjb2VyY2VfdW5zaXplZCldCnVzZSBzdGQ6Om9wczo6Q29lcmNlVW5zaXplZDsKCi8vIFdlIGRvbid0IG5lZWQgdG8gaW1wbCBgQ29lcmNlVW5zaXplZGAgaGVyZS4Kc3RydWN0IEZvbyB7CiAgICBhOiBpMzIsCn0KCi8vIFdlIGFkZCB0aGUgdW5zaXplZCB0eXBlIGZpZWxkIHRvIHRoZSBzdHJ1Y3QuCnN0cnVjdCBCYXI8VDogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAp9CgovLyBUaGUgc3RydWN0IGhhcyBhbiB1bnNpemVkIGZpZWxkIHNvIHdlIGNhbiBpbXBsZW1lbnQKLy8gYENvZXJjZVVuc2l6ZWRgIGZvciBpdC4KaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPEJhcjxVPj4gZm9yIEJhcjxUPgogICAgd2hlcmUgVDogQ29lcmNlVW5zaXplZDxVPiB7fQpgYGAKCk5vdGUgdGhhdCBgQ29lcmNlVW5zaXplZGAgaXMgbWFpbmx5IHVzZWQgYnkgc21hcnQgcG9pbnRlcnMgbGlrZSBgQm94YCwgYFJjYAphbmQgYEFyY2AgdG8gYmUgYWJsZSB0byBtYXJrIHRoYXQgdGhleSBjYW4gY29lcmNlIHVuc2l6ZWQgdHlwZXMgdGhhdCB0aGV5CmFyZSBwb2ludGluZyBhdC4KRTAzNzVgQ29lcmNlVW5zaXplZGAgd2FzIGltcGxlbWVudGVkIG9uIGEgc3RydWN0IHdoaWNoIGNvbnRhaW5zIG1vcmUgdGhhbiBvbmUgZmllbGQKd2l0aCBhbiB1bnNpemVkIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc1CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZCwgVTogP1NpemVkPiB7CiAgICBhOiBpMzIsCiAgICBiOiBULAogICAgYzogVSwKfQoKLy8gZXJyb3I6IFN0cnVjdCBgRm9vYCBoYXMgbW9yZSB0aGFuIG9uZSB1bnNpemVkIGZpZWxkLgppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFUsIFQ+PiBmb3IgRm9vPFQsIFU+IHt9CmBgYAoKQSBzdHJ1Y3Qgd2l0aCBtb3JlIHRoYW4gb25lIGZpZWxkIGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGNhbm5vdCBpbXBsZW1lbnQKYENvZXJjZVVuc2l6ZWRgLiBUaGlzIG9ubHkgb2NjdXJzIHdoZW4geW91IGFyZSB0cnlpbmcgdG8gY29lcmNlIG9uZSBvZiB0aGUKdHlwZXMgaW4geW91ciBzdHJ1Y3QgdG8gYW5vdGhlciB0eXBlIGluIHRoZSBzdHJ1Y3QuIEluIHRoaXMgY2FzZSB3ZSB0cnkgdG8KaW1wbCBgQ29lcmNlVW5zaXplZGAgZnJvbSBgVGAgdG8gYFVgIHdoaWNoIGFyZSBib3RoIHR5cGVzIHRoYXQgdGhlIHN0cnVjdAp0YWtlcy4gQW4gW3Vuc2l6ZWQgdHlwZV1bMV0gaXMgYW55IHR5cGUgdGhhdCB0aGUgY29tcGlsZXIgZG9lc24ndCBrbm93IHRoZQpsZW5ndGggb3IgYWxpZ25tZW50IG9mIGF0IGNvbXBpbGUgdGltZS4gQW55IHN0cnVjdCBjb250YWluaW5nIGFuIHVuc2l6ZWQgdHlwZQppcyBhbHNvIHVuc2l6ZWQuCgpgQ29lcmNlVW5zaXplZGAgb25seSBhbGxvd3MgZm9yIGNvZXJjaW9uIGZyb20gYSBzdHJ1Y3R1cmUgd2l0aCBhIHNpbmdsZQp1bnNpemVkIHR5cGUgZmllbGQgdG8gYW5vdGhlciBzdHJ1Y3Qgd2l0aCBhIHNpbmdsZSB1bnNpemVkIHR5cGUgZmllbGQuCkluIGZhY3QgUnVzdCBvbmx5IGFsbG93cyBmb3IgYSBzdHJ1Y3QgdG8gaGF2ZSBvbmUgdW5zaXplZCB0eXBlIGluIGEgc3RydWN0CmFuZCB0aGF0IHVuc2l6ZWQgdHlwZSBtdXN0IGJlIHRoZSBsYXN0IGZpZWxkIGluIHRoZSBzdHJ1Y3QuIFNvIGhhdmluZyB0d28KdW5zaXplZCB0eXBlcyBpbiBhIHNpbmdsZSBzdHJ1Y3QgaXMgbm90IGFsbG93ZWQgYnkgdGhlIGNvbXBpbGVyLiBUbyBmaXggdGhpcwp1c2Ugb25seSBvbmUgZmllbGQgY29udGFpbmluZyBhbiB1bnNpemVkIHR5cGUgaW4gdGhlIHN0cnVjdCBhbmQgdGhlbiB1c2UKbXVsdGlwbGUgc3RydWN0cyB0byBtYW5hZ2UgZWFjaCB1bnNpemVkIHR5cGUgZmllbGQgeW91IG5lZWQuCgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogaTMyLAogICAgYjogVCwKfQoKaW1wbCA8VCwgVT4gQ29lcmNlVW5zaXplZDxGb288VT4+IGZvciBGb288VD4KICAgIHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KCmZuIGNvZXJjZV9mb288VDogQ29lcmNlVW5zaXplZDxVPiwgVT4odDogVCkgLT4gRm9vPFU+IHsKICAgIEZvbyB7IGE6IDEyaTMyLCBiOiB0IH0gLy8gd2UgdXNlIGNvZXJjaW9uIHRvIGdldCB0aGUgYEZvbzxVPmAgdHlwZSB3ZSBuZWVkCn0KYGBgCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE5LTA0LWFkdmFuY2VkLXR5cGVzLmh0bWwjZHluYW1pY2FsbHktc2l6ZWQtdHlwZXMtYW5kLXRoZS1zaXplZC10cmFpdApFMDM3NmBDb2VyY2VVbnNpemVkYCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHRoYXQgaXNuJ3QgYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzc2CiMhW2ZlYXR1cmUoY29lcmNlX3Vuc2l6ZWQpXQp1c2Ugc3RkOjpvcHM6OkNvZXJjZVVuc2l6ZWQ7CgpzdHJ1Y3QgRm9vPFQ6ID9TaXplZD4gewogICAgYTogVCwKfQoKLy8gZXJyb3I6IFRoZSB0eXBlIGBVYCBpcyBub3QgYSBzdHJ1Y3QKaW1wbDxULCBVPiBDb2VyY2VVbnNpemVkPFU+IGZvciBGb288VD4ge30KYGBgCgpgQ29lcmNlVW5zaXplZGAgY2FuIG9ubHkgYmUgaW1wbGVtZW50ZWQgZm9yIGEgc3RydWN0LiBVbnNpemVkIHR5cGVzIGFyZQphbHJlYWR5IGFibGUgdG8gYmUgY29lcmNlZCB3aXRob3V0IGFuIGltcGxlbWVudGF0aW9uIG9mIGBDb2VyY2VVbnNpemVkYAp3aGVyZWFzIGEgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIG5lZWRzIHRvIGtub3cgdGhlIHVuc2l6ZWQgdHlwZQpmaWVsZCBpdCdzIGNvbnRhaW5pbmcgaXMgYWJsZSB0byBiZSBjb2VyY2VkLiBBbiBbdW5zaXplZCB0eXBlXVsxXQppcyBhbnkgdHlwZSB0aGF0IHRoZSBjb21waWxlciBkb2Vzbid0IGtub3cgdGhlIGxlbmd0aCBvciBhbGlnbm1lbnQgb2YgYXQKY29tcGlsZSB0aW1lLiBBbnkgc3RydWN0IGNvbnRhaW5pbmcgYW4gdW5zaXplZCB0eXBlIGlzIGFsc28gdW5zaXplZC4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTktMDQtYWR2YW5jZWQtdHlwZXMuaHRtbCNkeW5hbWljYWxseS1zaXplZC10eXBlcy1hbmQtdGhlLXNpemVkLXRyYWl0CgpUaGUgYENvZXJjZVVuc2l6ZWRgIHRyYWl0IHRha2VzIGEgc3RydWN0IHR5cGUuIE1ha2Ugc3VyZSB0aGUgdHlwZSB5b3UgYXJlCnByb3ZpZGluZyB0byBgQ29lcmNlVW5zaXplZGAgaXMgYSBzdHJ1Y3Qgd2l0aCBvbmx5IHRoZSBsYXN0IGZpZWxkIGNvbnRhaW5pbmcgYW4KdW5zaXplZCB0eXBlLgoKRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGNvZXJjZV91bnNpemVkKV0KdXNlIHN0ZDo6b3BzOjpDb2VyY2VVbnNpemVkOwoKc3RydWN0IEZvbzxUPiB7CiAgICBhOiBULAp9CgovLyBUaGUgYEZvbzxVPmAgaXMgYSBzdHJ1Y3Qgc28gYENvZXJjZVVuc2l6ZWRgIGNhbiBiZSBpbXBsZW1lbnRlZAppbXBsPFQsIFU+IENvZXJjZVVuc2l6ZWQ8Rm9vPFU+PiBmb3IgRm9vPFQ+IHdoZXJlIFQ6IENvZXJjZVVuc2l6ZWQ8VT4ge30KYGBgCgpOb3RlIHRoYXQgaW4gUnVzdCwgc3RydWN0cyBjYW4gb25seSBjb250YWluIGFuIHVuc2l6ZWQgdHlwZSBpZiB0aGUgZmllbGQKY29udGFpbmluZyB0aGUgdW5zaXplZCB0eXBlIGlzIHRoZSBsYXN0IGFuZCBvbmx5IHVuc2l6ZWQgdHlwZSBmaWVsZCBpbiB0aGUKc3RydWN0LgpFMDM3OFRoZSBgRGlzcGF0Y2hGcm9tRHluYCB0cmFpdCB3YXMgaW1wbGVtZW50ZWQgb24gc29tZXRoaW5nIHdoaWNoIGlzIG5vdCBhIHBvaW50ZXIKb3IgYSBuZXd0eXBlIHdyYXBwZXIgYXJvdW5kIGEgcG9pbnRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzNzgKIyFbZmVhdHVyZShkaXNwYXRjaF9mcm9tX2R5bildCnVzZSBzdGQ6Om9wczo6RGlzcGF0Y2hGcm9tRHluOwoKc3RydWN0IFdyYXBwZXJFeHRyYUZpZWxkPFQ+IHsKICAgIHB0cjogVCwKICAgIGV4dHJhX3N0dWZmOiBpMzIsCn0KCmltcGw8VCwgVT4gRGlzcGF0Y2hGcm9tRHluPFdyYXBwZXJFeHRyYUZpZWxkPFU+PiBmb3IgV3JhcHBlckV4dHJhRmllbGQ8VD4Kd2hlcmUKICAgIFQ6IERpc3BhdGNoRnJvbUR5bjxVPiwKe30KYGBgCgpUaGUgYERpc3BhdGNoRnJvbUR5bmAgdHJhaXQgY3VycmVudGx5IGNhbiBvbmx5IGJlIGltcGxlbWVudGVkIGZvcgpidWlsdGluIHBvaW50ZXIgdHlwZXMgYW5kIHN0cnVjdHMgdGhhdCBhcmUgbmV3dHlwZSB3cmFwcGVycyBhcm91bmQgdGhlbQrigJQgdGhhdCBpcywgdGhlIHN0cnVjdCBtdXN0IGhhdmUgb25seSBvbmUgZmllbGQgKGV4Y2VwdCBmb3JgUGhhbnRvbURhdGFgKSwKYW5kIHRoYXQgZmllbGQgbXVzdCBpdHNlbGYgaW1wbGVtZW50IGBEaXNwYXRjaEZyb21EeW5gLgoKYGBgCiMhW2ZlYXR1cmUoZGlzcGF0Y2hfZnJvbV9keW4sIHVuc2l6ZSldCnVzZSBzdGQ6OnsKICAgIG1hcmtlcjo6VW5zaXplLAogICAgb3BzOjpEaXNwYXRjaEZyb21EeW4sCn07CgpzdHJ1Y3QgUHRyPFQ6ID9TaXplZD4oKmNvbnN0IFQpOwoKaW1wbDxUOiA/U2l6ZWQsIFU6ID9TaXplZD4gRGlzcGF0Y2hGcm9tRHluPFB0cjxVPj4gZm9yIFB0cjxUPgp3aGVyZQogICAgVDogVW5zaXplPFU+LAp7fQpgYGAKCkFub3RoZXIgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGRpc3BhdGNoX2Zyb21fZHluKV0KdXNlIHN0ZDo6ewogICAgb3BzOjpEaXNwYXRjaEZyb21EeW4sCiAgICBtYXJrZXI6OlBoYW50b21EYXRhLAp9OwoKc3RydWN0IFdyYXBwZXI8VD4gewogICAgcHRyOiBULAogICAgX3BoYW50b206IFBoYW50b21EYXRhPCgpPiwKfQoKaW1wbDxULCBVPiBEaXNwYXRjaEZyb21EeW48V3JhcHBlcjxVPj4gZm9yIFdyYXBwZXI8VD4Kd2hlcmUKICAgIFQ6IERpc3BhdGNoRnJvbUR5bjxVPiwKe30KYGBgCkUwMzc5QSB0cmFpdCBtZXRob2Qgd2FzIGRlY2xhcmVkIGNvbnN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM3OQp0cmFpdCBGb28gewogICAgY29uc3QgZm4gYmFyKCkgLT4gdTMyOyAvLyBlcnJvciEKfQpgYGAKClRyYWl0IG1ldGhvZHMgY2Fubm90IGJlIGRlY2xhcmVkIGBjb25zdGAgYnkgZGVzaWduLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlCltSRkMgOTExXS4KCltSRkMgOTExXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL3B1bGwvOTExCkUwMzgwQW4gYXV0byB0cmFpdCB3YXMgZGVjbGFyZWQgd2l0aCBhIG1ldGhvZCBvciBhbiBhc3NvY2lhdGVkIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgwCnVuc2FmZSBhdXRvIHRyYWl0IFRyYWl0IHsKICAgIHR5cGUgT3V0cHV0OyAvLyBlcnJvciEKfQpgYGAKCkF1dG8gdHJhaXRzIGNhbm5vdCBoYXZlIG1ldGhvZHMgb3IgYXNzb2NpYXRlZCBpdGVtcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlCnRoZSBbb3B0LWluIGJ1aWx0aW4gdHJhaXRzIFJGQ11bUkZDIDE5XS4KCltSRkMgMTldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wMDE5LW9wdC1pbi1idWlsdGluLXRyYWl0cy5tZApFMDM4MUl0IGlzIG5vdCBhbGxvd2VkIHRvIHVzZSBvciBjYXB0dXJlIGFuIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgxCmZuIG1haW4oKSB7CiAgICBsZXQgeDogaTMyOwogICAgbGV0IHkgPSB4OyAvLyBlcnJvciwgdXNlIG9mIHBvc3NpYmx5LXVuaW5pdGlhbGl6ZWQgdmFyaWFibGUKfQpgYGAKClRvIGZpeCB0aGlzLCBlbnN1cmUgdGhhdCBhbnkgZGVjbGFyZWQgdmFyaWFibGVzIGFyZSBpbml0aWFsaXplZCBiZWZvcmUgYmVpbmcKdXNlZC4gRXhhbXBsZToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHg6IGkzMiA9IDA7CiAgICBsZXQgeSA9IHg7IC8vIG9rIQp9CmBgYApFMDM4MkEgdmFyaWFibGUgd2FzIHVzZWQgYWZ0ZXIgaXRzIGNvbnRlbnRzIGhhdmUgYmVlbiBtb3ZlZCBlbHNld2hlcmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwMzgyCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gTXlTdHJ1Y3R7IHM6IDV1MzIgfTsKICAgIGxldCB5ID0geDsKICAgIHgucyA9IDY7CiAgICBwcmludGxuISgie30iLCB4LnMpOwp9CmBgYAoKU2luY2UgYE15U3RydWN0YCBpcyBhIHR5cGUgdGhhdCBpcyBub3QgbWFya2VkIGBDb3B5YCwgdGhlIGRhdGEgZ2V0cyBtb3ZlZCBvdXQKb2YgYHhgIHdoZW4gd2Ugc2V0IGB5YC4gVGhpcyBpcyBmdW5kYW1lbnRhbCB0byBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbTogb3V0c2lkZQpvZiB3b3JrYXJvdW5kcyBsaWtlIGBSY2AsIGEgdmFsdWUgY2Fubm90IGJlIG93bmVkIGJ5IG1vcmUgdGhhbiBvbmUgdmFyaWFibGUuCgpTb21ldGltZXMgd2UgZG9uJ3QgbmVlZCB0byBtb3ZlIHRoZSB2YWx1ZS4gVXNpbmcgYSByZWZlcmVuY2UsIHdlIGNhbiBsZXQgYW5vdGhlcgpmdW5jdGlvbiBib3Jyb3cgdGhlIHZhbHVlIHdpdGhvdXQgY2hhbmdpbmcgaXRzIG93bmVyc2hpcC4gSW4gdGhlIGV4YW1wbGUgYmVsb3csCndlIGRvbid0IGFjdHVhbGx5IGhhdmUgdG8gbW92ZSBvdXIgc3RyaW5nIHRvIGBjYWxjdWxhdGVfbGVuZ3RoYCwgd2UgY2FuIGdpdmUgaXQKYSByZWZlcmVuY2UgdG8gaXQgd2l0aCBgJmAgaW5zdGVhZC4KCmBgYApmbiBtYWluKCkgewogICAgbGV0IHMxID0gU3RyaW5nOjpmcm9tKCJoZWxsbyIpOwoKICAgIGxldCBsZW4gPSBjYWxjdWxhdGVfbGVuZ3RoKCZzMSk7CgogICAgcHJpbnRsbiEoIlRoZSBsZW5ndGggb2YgJ3t9JyBpcyB7fS4iLCBzMSwgbGVuKTsKfQoKZm4gY2FsY3VsYXRlX2xlbmd0aChzOiAmU3RyaW5nKSAtPiB1c2l6ZSB7CiAgICBzLmxlbigpCn0KYGBgCgpBIG11dGFibGUgcmVmZXJlbmNlIGNhbiBiZSBjcmVhdGVkIHdpdGggYCZtdXRgLgoKU29tZXRpbWVzIHdlIGRvbid0IHdhbnQgYSByZWZlcmVuY2UsIGJ1dCBhIGR1cGxpY2F0ZS4gQWxsIHR5cGVzIG1hcmtlZCBgQ2xvbmVgCmNhbiBiZSBkdXBsaWNhdGVkIGJ5IGNhbGxpbmcgYC5jbG9uZSgpYC4gU3Vic2VxdWVudCBjaGFuZ2VzIHRvIGEgY2xvbmUgZG8gbm90CmFmZmVjdCB0aGUgb3JpZ2luYWwgdmFyaWFibGUuCgpNb3N0IHR5cGVzIGluIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFyZSBtYXJrZWQgYENsb25lYC4gVGhlIGV4YW1wbGUgYmVsb3cKZGVtb25zdHJhdGVzIHVzaW5nIGBjbG9uZSgpYCBvbiBhIHN0cmluZy4gYHMxYCBpcyBmaXJzdCBzZXQgdG8gIm1hbnkiLCBhbmQgdGhlbgpjb3BpZWQgdG8gYHMyYC4gVGhlbiB0aGUgZmlyc3QgY2hhcmFjdGVyIG9mIGBzMWAgaXMgcmVtb3ZlZCwgd2l0aG91dCBhZmZlY3RpbmcKYHMyYC4gImFueSBtYW55IiBpcyBwcmludGVkIHRvIHRoZSBjb25zb2xlLgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHMxID0gU3RyaW5nOjpmcm9tKCJtYW55Iik7CiAgICBsZXQgczIgPSBzMS5jbG9uZSgpOwogICAgczEucmVtb3ZlKDApOwogICAgcHJpbnRsbiEoInt9IHt9IiwgczEsIHMyKTsKfQpgYGAKCklmIHdlIGNvbnRyb2wgdGhlIGRlZmluaXRpb24gb2YgYSB0eXBlLCB3ZSBjYW4gaW1wbGVtZW50IGBDbG9uZWAgb24gaXQgb3Vyc2VsdmVzCndpdGggYCNbZGVyaXZlKENsb25lKV1gLgoKU29tZSB0eXBlcyBoYXZlIG5vIG93bmVyc2hpcCBzZW1hbnRpY3MgYXQgYWxsIGFuZCBhcmUgdHJpdmlhbCB0byBkdXBsaWNhdGUuIEFuCmV4YW1wbGUgaXMgYGkzMmAgYW5kIHRoZSBvdGhlciBudW1iZXIgdHlwZXMuIFdlIGRvbid0IGhhdmUgdG8gY2FsbCBgLmNsb25lKClgIHRvCmNsb25lIHRoZW0sIGJlY2F1c2UgdGhleSBhcmUgbWFya2VkIGBDb3B5YCBpbiBhZGRpdGlvbiB0byBgQ2xvbmVgLiBJbXBsaWNpdApjbG9uaW5nIGlzIG1vcmUgY29udmVuaWVudCBpbiB0aGlzIGNhc2UuIFdlIGNhbiBtYXJrIG91ciBvd24gdHlwZXMgYENvcHlgIGlmCmFsbCB0aGVpciBtZW1iZXJzIGFsc28gYXJlIG1hcmtlZCBgQ29weWAuCgpJbiB0aGUgZXhhbXBsZSBiZWxvdywgd2UgaW1wbGVtZW50IGEgYFBvaW50YCB0eXBlLiBCZWNhdXNlIGl0IG9ubHkgc3RvcmVzIHR3bwppbnRlZ2Vycywgd2Ugb3B0LW91dCBvZiBvd25lcnNoaXAgc2VtYW50aWNzIHdpdGggYENvcHlgLiBUaGVuIHdlIGNhbgpgbGV0IHAyID0gcDFgIHdpdGhvdXQgYHAxYCBiZWluZyBtb3ZlZC4KCmBgYAojW2Rlcml2ZShDb3B5LCBDbG9uZSldCnN0cnVjdCBQb2ludCB7IHg6IGkzMiwgeTogaTMyIH0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHAxID0gUG9pbnR7IHg6IC0xLCB5OiAyIH07CiAgICBsZXQgcDIgPSBwMTsKICAgIHAxLnggPSAxOwogICAgcHJpbnRsbiEoInAxOiB7fSwge30iLCBwMS54LCBwMS55KTsKICAgIHByaW50bG4hKCJwMjoge30sIHt9IiwgcDIueCwgcDIueSk7Cn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB3ZSBkb24ndCBjb250cm9sIHRoZSBzdHJ1Y3QncyBkZWZpbml0aW9uLCBvciBtdXRhYmxlIHNoYXJlZApvd25lcnNoaXAgaXMgdHJ1bHkgcmVxdWlyZWQsIHdlIGNhbiB1c2UgYFJjYCBhbmQgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CnVzZSBzdGQ6OnJjOjpSYzsKCnN0cnVjdCBNeVN0cnVjdCB7IHM6IHUzMiB9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCB4ID0gUmM6Om5ldyhSZWZDZWxsOjpuZXcoTXlTdHJ1Y3R7IHM6IDV1MzIgfSkpOwogICAgbGV0IHkgPSB4LmNsb25lKCk7CiAgICB4LmJvcnJvd19tdXQoKS5zID0gNjsKICAgIHByaW50bG4hKCJ7fSIsIHguYm9ycm93KCkucyk7Cn0KYGBgCgpXaXRoIHRoaXMgYXBwcm9hY2gsIHggYW5kIHkgc2hhcmUgb3duZXJzaGlwIG9mIHRoZSBkYXRhIHZpYSB0aGUgYFJjYCAocmVmZXJlbmNlCmNvdW50IHR5cGUpLiBgUmVmQ2VsbGAgZXNzZW50aWFsbHkgcGVyZm9ybXMgcnVudGltZSBib3Jyb3cgY2hlY2tpbmc6IGVuc3VyaW5nCnRoYXQgYXQgbW9zdCBvbmUgd3JpdGVyIG9yIG11bHRpcGxlIHJlYWRlcnMgY2FuIGFjY2VzcyB0aGUgZGF0YSBhdCBhbnkgb25lIHRpbWUuCgpJZiB5b3Ugd2lzaCB0byBsZWFybiBtb3JlIGFib3V0IG93bmVyc2hpcCBpbiBSdXN0LCBzdGFydCB3aXRoIHRoZQpbVW5kZXJzdGFuZGluZyBPd25lcnNoaXBdW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXSBjaGFwdGVyIGluIHRoZSBCb29rLgoKW3VuZGVyc3RhbmRpbmctb3duZXJzaGlwXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDAtdW5kZXJzdGFuZGluZy1vd25lcnNoaXAuaHRtbApFMDM4MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIHBhcnRpYWxseSByZWluaXRpYWxpemUgYQpzdHJ1Y3R1cmUgdGhhdCBpcyBjdXJyZW50bHkgdW5pbml0aWFsaXplZC4KCkZvciBleGFtcGxlLCB0aGlzIGNhbiBoYXBwZW4gd2hlbiBhIGRyb3AgaGFzIHRha2VuIHBsYWNlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGb28gewogICAgYTogdTMyLAp9CmltcGwgRHJvcCBmb3IgRm9vIHsKICAgIGZuIGRyb3AoJm11dCBzZWxmKSB7IC8qIC4uLiAqLyB9Cn0KCmxldCBtdXQgeCA9IEZvbyB7IGE6IDEgfTsKZHJvcCh4KTsgLy8gYHhgIGlzIG5vdyB1bmluaXRpYWxpemVkCnguYSA9IDI7IC8vIGVycm9yLCBwYXJ0aWFsIHJlaW5pdGlhbGl6YXRpb24gb2YgdW5pbml0aWFsaXplZCBzdHJ1Y3R1cmUgYHRgCmBgYAoKVGhpcyBlcnJvciBjYW4gYmUgZml4ZWQgYnkgZnVsbHkgcmVpbml0aWFsaXppbmcgdGhlIHN0cnVjdHVyZSBpbiBxdWVzdGlvbjoKCmBgYApzdHJ1Y3QgRm9vIHsKICAgIGE6IHUzMiwKfQppbXBsIERyb3AgZm9yIEZvbyB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyAvKiAuLi4gKi8gfQp9CgpsZXQgbXV0IHggPSBGb28geyBhOiAxIH07CmRyb3AoeCk7CnggPSBGb28geyBhOiAyIH07CmBgYApFMDM4NEFuIGltbXV0YWJsZSB2YXJpYWJsZSB3YXMgcmVhc3NpZ25lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzODQKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gMzsKICAgIHggPSA1OyAvLyBlcnJvciwgcmVhc3NpZ25tZW50IG9mIGltbXV0YWJsZSB2YXJpYWJsZQp9CmBgYAoKQnkgZGVmYXVsdCwgdmFyaWFibGVzIGluIFJ1c3QgYXJlIGltbXV0YWJsZS4gVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUga2V5d29yZApgbXV0YCBhZnRlciB0aGUga2V5d29yZCBgbGV0YCB3aGVuIGRlY2xhcmluZyB0aGUgdmFyaWFibGUuIEZvciBleGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHggPSAzOwogICAgeCA9IDU7Cn0KYGBgCkUwMzg2IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhpcyBlcnJvciBvY2N1cnMgd2hlbiBhbiBhdHRlbXB0IGlzIG1hZGUgdG8gbXV0YXRlIHRoZSB0YXJnZXQgb2YgYSBtdXRhYmxlCnJlZmVyZW5jZSBzdG9yZWQgaW5zaWRlIGFuIGltbXV0YWJsZSBjb250YWluZXIuCgpGb3IgZXhhbXBsZSwgdGhpcyBjYW4gaGFwcGVuIHdoZW4gc3RvcmluZyBhIGAmbXV0YCBpbnNpZGUgYW4gaW1tdXRhYmxlIGBCb3hgOgoKYGBgCmxldCBtdXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7IC8vIGVycm9yLCBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYW4gaW1tdXRhYmxlIGNvbnRhaW5lcgpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IG1ha2luZyB0aGUgY29udGFpbmVyIG11dGFibGU6CgpgYGAKbGV0IG11dCB4OiBpNjQgPSAxOwpsZXQgbXV0IHk6IEJveDxfPiA9IEJveDo6bmV3KCZtdXQgeCk7CioqeSA9IDI7CmBgYAoKSXQgY2FuIGFsc28gYmUgZml4ZWQgYnkgdXNpbmcgYSB0eXBlIHdpdGggaW50ZXJpb3IgbXV0YWJpbGl0eSwgc3VjaCBhcyBgQ2VsbGAKb3IgYFJlZkNlbGxgOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OkNlbGw7CgpsZXQgeDogaTY0ID0gMTsKbGV0IHk6IEJveDxDZWxsPF8+PiA9IEJveDo6bmV3KENlbGw6Om5ldyh4KSk7Cnkuc2V0KDIpOwpgYGAKRTAzODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtdXRhdGUgb3IgbXV0YWJseSByZWZlcmVuY2UgZGF0YQp0aGF0IGEgY2xvc3VyZSBoYXMgY2FwdHVyZWQgaW1tdXRhYmx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAovLyBBY2NlcHRzIGEgZnVuY3Rpb24gb3IgYSBjbG9zdXJlIHRoYXQgY2FwdHVyZXMgaXRzIGVudmlyb25tZW50IGltbXV0YWJseS4KLy8gQ2xvc3VyZXMgcGFzc2VkIHRvIGZvbyB3aWxsIG5vdCBiZSBhYmxlIHRvIG11dGF0ZSB0aGVpciBjbG9zZWQtb3ZlciBzdGF0ZS4KZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKLy8gQXR0ZW1wdHMgdG8gbXV0YXRlIGNsb3NlZC1vdmVyIGRhdGEuIEVycm9yIG1lc3NhZ2UgcmVhZHM6Ci8vIGBjYW5ub3QgYXNzaWduIHRvIGRhdGEgaW4gYSBjYXB0dXJlZCBvdXRlciB2YXJpYWJsZS4uLmAKZm4gbXV0YWJsZSgpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeCA9IDIpOwp9CgovLyBBdHRlbXB0cyB0byB0YWtlIGEgbXV0YWJsZSByZWZlcmVuY2UgdG8gY2xvc2VkLW92ZXIgZGF0YS4gIEVycm9yIG1lc3NhZ2UKLy8gcmVhZHM6IGBjYW5ub3QgYm9ycm93IGRhdGEgbXV0YWJseSBpbiBhIGNhcHR1cmVkIG91dGVyIHZhcmlhYmxlLi4uYApmbiBtdXRfYWRkcigpIHsKICAgIGxldCBtdXQgeCA9IDB1MzI7CiAgICBmb28ofHwgeyBsZXQgeSA9ICZtdXQgeDsgfSk7Cn0KYGBgCgpUaGUgcHJvYmxlbSBoZXJlIGlzIHRoYXQgZm9vIGlzIGRlZmluZWQgYXMgYWNjZXB0aW5nIGEgcGFyYW1ldGVyIG9mIHR5cGUgYEZuYC4KQ2xvc3VyZXMgcGFzc2VkIGludG8gZm9vIHdpbGwgdGh1cyBiZSBpbmZlcnJlZCB0byBiZSBvZiB0eXBlIGBGbmAsIG1lYW5pbmcgdGhhdAp0aGV5IGNhcHR1cmUgdGhlaXIgY29udGV4dCBpbW11dGFibHkuCgpJZiB0aGUgZGVmaW5pdGlvbiBvZiBgZm9vYCBpcyB1bmRlciB5b3VyIGNvbnRyb2wsIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0bwpjYXB0dXJlIHRoZSBkYXRhIG11dGFibHkuIFRoaXMgY2FuIGJlIGRvbmUgYnkgZGVmaW5pbmcgYGZvb2AgdG8gdGFrZSBGbk11dApyYXRoZXIgdGhhbiBGbjoKCmBgYApmbiBmb288RjogRm5NdXQoKT4oZjogRikgeyB9CmBgYAoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIGNvbnNpZGVyIHVzaW5nIHRoZSBgQ2VsbGAgYW5kIGBSZWZDZWxsYCB0eXBlcyB0byBhY2hpZXZlCmludGVyaW9yIG11dGFiaWxpdHkgdGhyb3VnaCBhIHNoYXJlZCByZWZlcmVuY2UuIE91ciBleGFtcGxlJ3MgYG11dGFibGVgCmZ1bmN0aW9uIGNvdWxkIGJlIHJlZGVmaW5lZCBhcyBiZWxvdzoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKZm4gZm9vPEY6IEZuKCk+KGY6IEYpIHsgfQoKZm4gbXV0YWJsZSgpIHsKICAgIGxldCB4ID0gQ2VsbDo6bmV3KDB1MzIpOwogICAgZm9vKHx8IHguc2V0KDIpKTsKfQpgYGAKCllvdSBjYW4gcmVhZCBtb3JlIGluIHRoZSBBUEkgZG9jdW1lbnRhdGlvbiBmb3IgW0NlbGxdW3N0ZC1jZWxsXS4KCltzdGQtY2VsbF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2NlbGwvCkUwMzg4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgpFMDM4OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGF0dGVtcHQgd2FzIG1hZGUgdG8gbXV0YXRlIGRhdGEgdXNpbmcgYSBub24tbXV0YWJsZSByZWZlcmVuY2UuIFRoaXMKY29tbW9ubHkgb2NjdXJzIHdoZW4gYXR0ZW1wdGluZyB0byBhc3NpZ24gdG8gYSBub24tbXV0YWJsZSByZWZlcmVuY2Ugb2YgYQptdXRhYmxlIHJlZmVyZW5jZSAoYCYoJm11dCBUKWApLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJigmbXV0IGZhbmN5KTsKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBlcnJvcjogY2Fubm90IGFzc2lnbiB0byBkYXRhIGluIGEgYCZgIHJlZmVyZW5jZQogICAgcHJpbnRsbiEoInt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgJm11dCBmYW5jeWAgaXMgbXV0YWJsZSwgYnV0IGAmKCZtdXQgZmFuY3kpYCBpcyBub3QuIENyZWF0aW5nIGFuCmltbXV0YWJsZSByZWZlcmVuY2UgdG8gYSB2YWx1ZSBib3Jyb3dzIGl0IGltbXV0YWJseS4gVGhlcmUgY2FuIGJlIG11bHRpcGxlCnJlZmVyZW5jZXMgb2YgdHlwZSBgJigmbXV0IFQpYCB0aGF0IHBvaW50IHRvIHRoZSBzYW1lIHZhbHVlLCBzbyB0aGV5IG11c3QgYmUKaW1tdXRhYmxlIHRvIHByZXZlbnQgbXVsdGlwbGUgbXV0YWJsZSByZWZlcmVuY2VzIHRvIHRoZSBzYW1lIHZhbHVlLgoKVG8gZml4IHRoaXMsIGVpdGhlciByZW1vdmUgdGhlIG91dGVyIHJlZmVyZW5jZToKCmBgYApzdHJ1Y3QgRmFuY3lOdW0gewogICAgbnVtOiB1OCwKfQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZmFuY3kgPSBGYW5jeU51bXsgbnVtOiA1IH07CgogICAgbGV0IGZhbmN5X3JlZiA9ICZtdXQgZmFuY3k7CiAgICAvLyBgZmFuY3lfcmVmYCBpcyBub3cgJm11dCBGYW5jeU51bSwgcmF0aGVyIHRoYW4gJigmbXV0IEZhbmN5TnVtKQoKICAgIGZhbmN5X3JlZi5udW0gPSA2OyAvLyBObyBlcnJvciEKCiAgICBwcmludGxuISgie30iLCBmYW5jeV9yZWYubnVtKTsKfQpgYGAKCk9yIG1ha2UgdGhlIG91dGVyIHJlZmVyZW5jZSBtdXRhYmxlOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IGZhbmN5ID0gRmFuY3lOdW17IG51bTogNSB9OwoKICAgIGxldCBmYW5jeV9yZWYgPSAmbXV0ICgmbXV0IGZhbmN5KTsKICAgIC8vIGBmYW5jeV9yZWZgIGlzIG5vdyAmbXV0KCZtdXQgRmFuY3lOdW0pLCByYXRoZXIgdGhhbiAmKCZtdXQgRmFuY3lOdW0pCgogICAgZmFuY3lfcmVmLm51bSA9IDY7IC8vIE5vIGVycm9yIQoKICAgIHByaW50bG4hKCJ7fSIsIGZhbmN5X3JlZi5udW0pOwp9CmBgYApFMDM5MEEgbWV0aG9kIG9yIGNvbnN0YW50IHdhcyBpbXBsZW1lbnRlZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MApzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMgp9CgppbXBsICptdXQgRm9vIHt9Ci8vIGVycm9yOiBjYW5ub3QgZGVmaW5lIGluaGVyZW50IGBpbXBsYCBmb3IgcHJpbWl0aXZlIHR5cGVzCmBgYAoKVGhpcyBpc24ndCBhbGxvd2VkLCBidXQgdXNpbmcgYSB0cmFpdCB0byBpbXBsZW1lbnQgYSBtZXRob2Qgb3IgY29uc3RhbnQKaXMgYSBnb29kIHNvbHV0aW9uLgpFeGFtcGxlOgoKYGBgCnN0cnVjdCBGb28gewogICAgeDogaTMyCn0KCnRyYWl0IEJhciB7CiAgICBmbiBiYXIoKTsKfQoKaW1wbCBCYXIgZm9yICptdXQgRm9vIHsKICAgIGZuIGJhcigpIHt9IC8vIG9rIQp9CmBgYAoKSW5zdGVhZCBvZiBkZWZpbmluZyBhbiBpbmhlcmVudCBpbXBsZW1lbnRhdGlvbiBvbiBhIHJlZmVyZW5jZSwgeW91IGNvdWxkIGFsc28KbW92ZSB0aGUgcmVmZXJlbmNlIGluc2lkZSB0aGUgaW1wbGVtZW50YXRpb246CgpgYGBjb21waWxlX2ZhaWwsRTAzOTAKc3RydWN0IEZvbzsKCmltcGwgJkZvbyB7IC8vIGVycm9yOiBubyBub21pbmFsIHR5cGUgZm91bmQgZm9yIGluaGVyZW50IGltcGxlbWVudGF0aW9uCiAgICBmbiBiYXIoc2VsZiwgb3RoZXI6IFNlbGYpIHt9Cn0KYGBgCgpiZWNvbWVzCgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigmc2VsZiwgb3RoZXI6ICZTZWxmKSB7fQp9CmBgYApFMDM5MUEgdHlwZSBkZXBlbmRlbmN5IGN5Y2xlIGhhcyBiZWVuIGVuY291bnRlcmVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5MQp0cmFpdCBGaXJzdFRyYWl0IDogU2Vjb25kVHJhaXQgewoKfQoKdHJhaXQgU2Vjb25kVHJhaXQgOiBGaXJzdFRyYWl0IHsKCn0KYGBgCgpUaGUgcHJldmlvdXMgZXhhbXBsZSBjb250YWlucyBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiB0d28gdHJhaXRzOgpgRmlyc3RUcmFpdGAgZGVwZW5kcyBvbiBgU2Vjb25kVHJhaXRgIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGBGaXJzdFRyYWl0YC4KRTAzOTJBIHR5cGUgb3IgbGlmZXRpbWUgcGFyYW1ldGVyIGhhcyBiZWVuIGRlY2xhcmVkIGJ1dCBpcyBub3QgYWN0dWFsbHkgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTAzOTIKZW51bSBGb288VD4gewogICAgQmFyLAp9CmBgYAoKSWYgdGhlIHR5cGUgcGFyYW1ldGVyIHdhcyBpbmNsdWRlZCBieSBtaXN0YWtlLCB0aGlzIGVycm9yIGNhbiBiZSBmaXhlZApieSBzaW1wbHkgcmVtb3ZpbmcgdGhlIHR5cGUgcGFyYW1ldGVyLCBhcyBzaG93biBiZWxvdzoKCmBgYAplbnVtIEZvbyB7CiAgICBCYXIsCn0KYGBgCgpBbHRlcm5hdGl2ZWx5LCBpZiB0aGUgdHlwZSBwYXJhbWV0ZXIgd2FzIGludGVudGlvbmFsbHkgaW5zZXJ0ZWQsIGl0IG11c3QgYmUKdXNlZC4gQSBzaW1wbGUgZml4IGlzIHNob3duIGJlbG93OgoKYGBgCmVudW0gRm9vPFQ+IHsKICAgIEJhcihUKSwKfQpgYGAKClRoaXMgZXJyb3IgbWF5IGFsc28gY29tbW9ubHkgYmUgZm91bmQgd2hlbiB3b3JraW5nIHdpdGggdW5zYWZlIGNvZGUuIEZvcgpleGFtcGxlLCB3aGVuIHVzaW5nIHJhdyBwb2ludGVycyBvbmUgbWF5IHdpc2ggdG8gc3BlY2lmeSB0aGUgbGlmZXRpbWUgZm9yCndoaWNoIHRoZSBwb2ludGVkLWF0IGRhdGEgaXMgdmFsaWQuIEFuIGluaXRpYWwgYXR0ZW1wdCAoYmVsb3cpIGNhdXNlcyB0aGlzCmVycm9yOgoKYGBgY29tcGlsZV9mYWlsLEUwMzkyCnN0cnVjdCBGb288J2EsIFQ+IHsKICAgIHg6ICpjb25zdCBULAp9CmBgYAoKV2Ugd2FudCB0byBleHByZXNzIHRoZSBjb25zdHJhaW50IHRoYXQgRm9vIHNob3VsZCBub3Qgb3V0bGl2ZSBgJ2FgLCBiZWNhdXNlCnRoZSBkYXRhIHBvaW50ZWQgdG8gYnkgYFRgIGlzIG9ubHkgdmFsaWQgZm9yIHRoYXQgbGlmZXRpbWUuIFRoZSBwcm9ibGVtIGlzCnRoYXQgdGhlcmUgYXJlIG5vIGFjdHVhbCB1c2VzIG9mIGAnYWAuIEl0J3MgcG9zc2libGUgdG8gd29yayBhcm91bmQgdGhpcwpieSBhZGRpbmcgYSBQaGFudG9tRGF0YSB0eXBlIHRvIHRoZSBzdHJ1Y3QsIHVzaW5nIGl0IHRvIHRlbGwgdGhlIGNvbXBpbGVyCnRvIGFjdCBhcyBpZiB0aGUgc3RydWN0IGNvbnRhaW5lZCBhIGJvcnJvd2VkIHJlZmVyZW5jZSBgJidhIFRgOgoKYGBgCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgpzdHJ1Y3QgRm9vPCdhLCBUOiAnYT4gewogICAgeDogKmNvbnN0IFQsCiAgICBwaGFudG9tOiBQaGFudG9tRGF0YTwmJ2EgVD4KfQpgYGAKCltQaGFudG9tRGF0YV0gY2FuIGFsc28gYmUgdXNlZCB0byBleHByZXNzIGluZm9ybWF0aW9uIGFib3V0IHVudXNlZCB0eXBlCnBhcmFtZXRlcnMuCgpbUGhhbnRvbURhdGFdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3N0ZC9tYXJrZXIvc3RydWN0LlBoYW50b21EYXRhLmh0bWwKRTAzOTNBIHR5cGUgcGFyYW1ldGVyIHdoaWNoIHJlZmVyZW5jZXMgYFNlbGZgIGluIGl0cyBkZWZhdWx0IHZhbHVlIHdhcyBub3Qgc3BlY2lmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDM5Mwp0cmFpdCBBPFQ9U2VsZj4ge30KCmZuIHRvZ2V0aGVyX3dlX3dpbGxfcnVsZV90aGVfZ2FsYXh5KHNvbjogJkEpIHt9Ci8vIGVycm9yOiB0aGUgdHlwZSBwYXJhbWV0ZXIgYFRgIG11c3QgYmUgZXhwbGljaXRseSBzcGVjaWZpZWQgaW4gYW4KLy8gICAgICAgIG9iamVjdCB0eXBlIGJlY2F1c2UgaXRzIGRlZmF1bHQgdmFsdWUgYFNlbGZgIHJlZmVyZW5jZXMgdGhlCi8vICAgICAgICB0eXBlIGBTZWxmYApgYGAKCkEgdHJhaXQgb2JqZWN0IGlzIGRlZmluZWQgb3ZlciBhIHNpbmdsZSwgZnVsbHktZGVmaW5lZCB0cmFpdC4gV2l0aCBhIHJlZ3VsYXIKZGVmYXVsdCBwYXJhbWV0ZXIsIHRoaXMgcGFyYW1ldGVyIGNhbiBqdXN0IGJlIHN1YnN0aXR1dGVkIGluLiBIb3dldmVyLCBpZiB0aGUKZGVmYXVsdCBwYXJhbWV0ZXIgaXMgYFNlbGZgLCB0aGUgdHJhaXQgY2hhbmdlcyBmb3IgZWFjaCBjb25jcmV0ZSB0eXBlOyBpLmUuCmBpMzJgIHdpbGwgYmUgZXhwZWN0ZWQgdG8gaW1wbGVtZW50IGBBPGkzMj5gLCBgYm9vbGAgd2lsbCBiZSBleHBlY3RlZCB0bwppbXBsZW1lbnQgYEE8Ym9vbD5gLCBldGMuLi4gVGhlc2UgdHlwZXMgd2lsbCBub3Qgc2hhcmUgYW4gaW1wbGVtZW50YXRpb24gb2YgYQpmdWxseS1kZWZpbmVkIHRyYWl0OyBpbnN0ZWFkIHRoZXkgc2hhcmUgaW1wbGVtZW50YXRpb25zIG9mIGEgdHJhaXQgd2l0aApkaWZmZXJlbnQgcGFyYW1ldGVycyBzdWJzdGl0dXRlZCBpbiBmb3IgZWFjaCBpbXBsZW1lbnRhdGlvbi4gVGhpcyBpcwppcnJlY29uY2lsYWJsZSB3aXRoIHdoYXQgd2UgbmVlZCB0byBtYWtlIGEgdHJhaXQgb2JqZWN0IHdvcmssIGFuZCBpcyB0aHVzCmRpc2FsbG93ZWQuIE1ha2luZyB0aGUgdHJhaXQgY29uY3JldGUgYnkgZXhwbGljaXRseSBzcGVjaWZ5aW5nIHRoZSB2YWx1ZSBvZiB0aGUKZGVmYXVsdGVkIHBhcmFtZXRlciB3aWxsIGZpeCB0aGlzIGlzc3VlLiBGaXhlZCBleGFtcGxlOgoKYGBgCnRyYWl0IEE8VD1TZWxmPiB7fQoKZm4gdG9nZXRoZXJfd2Vfd2lsbF9ydWxlX3RoZV9nYWxheHkoc29uOiAmQTxpMzI+KSB7fSAvLyBPayEKYGBgCkUwMzk4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKSW4gUnVzdCAxLjMsIHRoZSBkZWZhdWx0IG9iamVjdCBsaWZldGltZSBib3VuZHMgYXJlIGV4cGVjdGVkIHRvIGNoYW5nZSwgYXMKZGVzY3JpYmVkIGluIFtSRkMgMTE1Nl0uIFlvdSBhcmUgZ2V0dGluZyBhIHdhcm5pbmcgYmVjYXVzZSB0aGUgY29tcGlsZXIKdGhpbmtzIGl0IGlzIHBvc3NpYmxlIHRoYXQgdGhpcyBjaGFuZ2Ugd2lsbCBjYXVzZSBhIGNvbXBpbGF0aW9uIGVycm9yIGluIHlvdXIKY29kZS4gSXQgaXMgcG9zc2libGUsIHRob3VnaCB1bmxpa2VseSwgdGhhdCB0aGlzIGlzIGEgZmFsc2UgYWxhcm0uCgpUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSBpcyB0aGF0IHdoZXJlIGAmJ2EgQm94PFNvbWVUcmFpdD5gIHVzZWQgdG8gZGVmYXVsdCB0bwpgJidhIEJveDxTb21lVHJhaXQrJ2E+YCwgaXQgbm93IGRlZmF1bHRzIHRvIGAmJ2EgQm94PFNvbWVUcmFpdCsnc3RhdGljPmAgKGhlcmUsCmBTb21lVHJhaXRgIGlzIHRoZSBuYW1lIG9mIHNvbWUgdHJhaXQgdHlwZSkuIE5vdGUgdGhhdCB0aGUgb25seSB0eXBlcyB3aGljaCBhcmUKYWZmZWN0ZWQgYXJlIHJlZmVyZW5jZXMgdG8gYm94ZXMsIGxpa2UgYCZCb3g8U29tZVRyYWl0PmAgb3IKYCZbQm94PFNvbWVUcmFpdD5dYC4gTW9yZSBjb21tb24gdHlwZXMgbGlrZSBgJlNvbWVUcmFpdGAgb3IgYEJveDxTb21lVHJhaXQ+YAphcmUgdW5hZmZlY3RlZC4KClRvIHNpbGVuY2UgdGhpcyB3YXJuaW5nLCBlZGl0IHlvdXIgY29kZSB0byB1c2UgYW4gZXhwbGljaXQgYm91bmQuIE1vc3Qgb2YgdGhlCnRpbWUsIHRoaXMgbWVhbnMgdGhhdCB5b3Ugd2lsbCB3YW50IHRvIGNoYW5nZSB0aGUgc2lnbmF0dXJlIG9mIGEgZnVuY3Rpb24gdGhhdAp5b3UgYXJlIGNhbGxpbmcuIEZvciBleGFtcGxlLCBpZiB0aGUgZXJyb3IgaXMgcmVwb3J0ZWQgb24gYSBjYWxsIGxpa2UgYGZvbyh4KWAsCmFuZCBgZm9vYCBpcyBkZWZpbmVkIGFzIGZvbGxvd3M6CgpgYGAKIyB0cmFpdCBTb21lVHJhaXQge30KZm4gZm9vKGFyZzogJkJveDxTb21lVHJhaXQ+KSB7IC8qIC4uLiAqLyB9CmBgYAoKWW91IG1pZ2h0IGNoYW5nZSBpdCB0bzoKCmBgYAojIHRyYWl0IFNvbWVUcmFpdCB7fQpmbiBmb288J2E+KGFyZzogJidhIEJveDxTb21lVHJhaXQrJ2E+KSB7IC8qIC4uLiAqLyB9CmBgYAoKVGhpcyBleHBsaWNpdGx5IHN0YXRlcyB0aGF0IHlvdSBleHBlY3QgdGhlIHRyYWl0IG9iamVjdCBgU29tZVRyYWl0YCB0byBjb250YWluCnJlZmVyZW5jZXMgKHdpdGggYSBtYXhpbXVtIGxpZmV0aW1lIG9mIGAnYWApLgoKW1JGQyAxMTU2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMTE1Ni1hZGp1c3QtZGVmYXVsdC1vYmplY3QtYm91bmRzLm1kCkUwMzk5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyCgpZb3UgaW1wbGVtZW50ZWQgYSB0cmFpdCwgb3ZlcnJpZGluZyBvbmUgb3IgbW9yZSBvZiBpdHMgYXNzb2NpYXRlZCB0eXBlcyBidXQgZGlkCm5vdCByZWltcGxlbWVudCBpdHMgZGVmYXVsdCBtZXRob2RzLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYAojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQXNzb2MgPSB1ODsKICAgIGZuIGJhcigmc2VsZikge30KfQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICAvLyBlcnJvciAtIHRoZSBmb2xsb3dpbmcgdHJhaXQgaXRlbXMgbmVlZCB0byBiZSByZWltcGxlbWVudGVkIGFzCiAgICAvLyAgICAgICAgIGBBc3NvY2Agd2FzIG92ZXJyaWRkZW46IGBiYXJgCiAgICB0eXBlIEFzc29jID0gaTMyOwp9CmBgYAoKVG8gZml4IHRoaXMsIGFkZCBhbiBpbXBsZW1lbnRhdGlvbiBmb3IgZWFjaCBkZWZhdWx0IG1ldGhvZCBmcm9tIHRoZSB0cmFpdDoKCmBgYAojIVtmZWF0dXJlKGFzc29jaWF0ZWRfdHlwZV9kZWZhdWx0cyldCgpwdWIgdHJhaXQgRm9vIHsKICAgIHR5cGUgQXNzb2MgPSB1ODsKICAgIGZuIGJhcigmc2VsZikge30KfQoKaW1wbCBGb28gZm9yIGkzMiB7CiAgICB0eXBlIEFzc29jID0gaTMyOwogICAgZm4gYmFyKCZzZWxmKSB7fSAvLyBvayEKfQpgYGAKRTA0MDFJbm5lciBpdGVtcyBkbyBub3QgaW5oZXJpdCB0eXBlIG9yIGNvbnN0IHBhcmFtZXRlcnMgZnJvbSB0aGUgZnVuY3Rpb25zCnRoZXkgYXJlIGVtYmVkZGVkIGluLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwMQpmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyKHk6IFQpIHsgLy8gVCBpcyBkZWZpbmVkIGluIHRoZSAib3V0ZXIiIGZ1bmN0aW9uCiAgICAgICAgLy8gLi4KICAgIH0KICAgIGJhcih4KTsKfQpgYGAKCk5vciB3aWxsIHRoaXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDEKZm4gZm9vPFQ+KHg6IFQpIHsKICAgIHR5cGUgTWF5YmVUID0gT3B0aW9uPFQ+OwogICAgLy8gLi4uCn0KYGBgCgpPciB0aGlzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAxCmZuIGZvbzxUPih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiBULAogICAgfQogICAgLy8gLi4uCn0KYGBgCgpJdGVtcyBpbnNpZGUgZnVuY3Rpb25zIGFyZSBiYXNpY2FsbHkganVzdCBsaWtlIHRvcC1sZXZlbCBpdGVtcywgZXhjZXB0CnRoYXQgdGhleSBjYW4gb25seSBiZSB1c2VkIGZyb20gdGhlIGZ1bmN0aW9uIHRoZXkgYXJlIGluLgoKVGhlcmUgYXJlIGEgY291cGxlIG9mIHNvbHV0aW9ucyBmb3IgdGhpcy4KCklmIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24sIHlvdSBtYXkgdXNlIGEgY2xvc3VyZToKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgbGV0IGJhciA9IHx5OiBUfCB7IC8vIGV4cGxpY2l0IHR5cGUgYW5ub3RhdGlvbiBtYXkgbm90IGJlIG5lY2Vzc2FyeQogICAgICAgIC8vIC4uCiAgICB9OwogICAgYmFyKHgpOwp9CmBgYAoKRm9yIGEgZ2VuZXJpYyBpdGVtLCB5b3UgY2FuIGNvcHkgb3ZlciB0aGUgcGFyYW1ldGVyczoKCmBgYApmbiBmb288VD4oeDogVCkgewogICAgZm4gYmFyPFQ+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUPih4OiBUKSB7CiAgICB0eXBlIE1heWJlVDxUPiA9IE9wdGlvbjxUPjsKfQpgYGAKCkJlIHN1cmUgdG8gY29weSBvdmVyIGFueSBib3VuZHMgYXMgd2VsbDoKCmBgYApmbiBmb288VDogQ29weT4oeDogVCkgewogICAgZm4gYmFyPFQ6IENvcHk+KHk6IFQpIHsKICAgICAgICAvLyAuLgogICAgfQogICAgYmFyKHgpOwp9CmBgYAoKYGBgCmZuIGZvbzxUOiBDb3B5Pih4OiBUKSB7CiAgICBzdHJ1Y3QgRm9vPFQ6IENvcHk+IHsKICAgICAgICB4OiBULAogICAgfQp9CmBgYAoKVGhpcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIHR5cGUgaGludHMgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpJbiBjYXNlIHRoZSBpdGVtIGlzIGEgZnVuY3Rpb24gaW5zaWRlIGFuIGBpbXBsYCwgZGVmaW5pbmcgYSBwcml2YXRlIGhlbHBlcgpmdW5jdGlvbiBtaWdodCBiZSBlYXNpZXI6CgpgYGAKIyBzdHJ1Y3QgRm9vPFQ+KFQpOwppbXBsPFQ+IEZvbzxUPiB7CiAgICBwdWIgZm4gZm9vKCZzZWxmLCB4OiBUKSB7CiAgICAgICAgc2VsZi5iYXIoeCk7CiAgICB9CgogICAgZm4gYmFyKCZzZWxmLCB5OiBUKSB7CiAgICAgICAgLy8gLi4KICAgIH0KfQpgYGAKCkZvciBkZWZhdWx0IGltcGxzIGluIHRyYWl0cywgdGhlIHByaXZhdGUgaGVscGVyIHNvbHV0aW9uIHdvbid0IHdvcmssIGhvd2V2ZXIKY2xvc3VyZXMgb3IgY29weWluZyB0aGUgcGFyYW1ldGVycyBzaG91bGQgc3RpbGwgd29yay4KRTA0MDNTb21lIHR5cGUgcGFyYW1ldGVycyBoYXZlIHRoZSBzYW1lIG5hbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAzCmZuIGY8VCwgVD4oczogVCwgdTogVCkge30gLy8gZXJyb3I6IHRoZSBuYW1lIGBUYCBpcyBhbHJlYWR5IHVzZWQgZm9yIGEgZ2VuZXJpYwogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBwYXJhbWV0ZXIgaW4gdGhpcyBpdGVtJ3MgZ2VuZXJpYyBwYXJhbWV0ZXJzCmBgYAoKUGxlYXNlIHZlcmlmeSB0aGF0IG5vbmUgb2YgdGhlIHR5cGUgcGFyYW1ldGVycyBhcmUgbWlzc3BlbGxlZCwgYW5kIHJlbmFtZSBhbnkKY2xhc2hpbmcgcGFyYW1ldGVycy4gRXhhbXBsZToKCmBgYApmbiBmPFQsIFk+KHM6IFQsIHU6IFkpIHt9IC8vIG9rIQpgYGAKClR5cGUgcGFyYW1ldGVycyBpbiBhbiBhc3NvY2lhdGVkIGl0ZW0gYWxzbyBjYW5ub3Qgc2hhZG93IHBhcmFtZXRlcnMgZnJvbSB0aGUKY29udGFpbmluZyBpdGVtOgoKYGBgY29tcGlsZV9mYWlsLEUwNDAzCnRyYWl0IEZvbzxUPiB7CiAgICBmbiBkb19zb21ldGhpbmcoJnNlbGYpIC0+IFQ7CiAgICBmbiBkb19zb21ldGhpbmdfZWxzZTxUOiBDbG9uZT4oJnNlbGYsIGJhcjogVCk7Cn0KYGBgCkUwNDA0QSB0eXBlIHRoYXQgaXMgbm90IGEgdHJhaXQgd2FzIHVzZWQgaW4gYSB0cmFpdCBwb3NpdGlvbiwgc3VjaCBhcyBhIGJvdW5kCm9yIGBpbXBsYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MDQKc3RydWN0IEZvbzsKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIge30gLy8gZXJyb3I6IGBGb29gIGlzIG5vdCBhIHRyYWl0CmZuIGJhejxUOiBGb28+KHQ6IFQpIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBub3QgYSB0cmFpdApgYGAKCkFub3RoZXIgZXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwNAp0eXBlIEZvbyA9IEl0ZXJhdG9yPEl0ZW09U3RyaW5nPjsKCmZuIGJhcjxUOiBGb28+KHQ6IFQpIHt9IC8vIGVycm9yOiBgRm9vYCBpcyBhIHR5cGUgYWxpYXMKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIHRyYWl0J3MgbmFtZSB3YXMgbm90IG1pc3NwZWxsZWQgb3IgdGhhdCB0aGUgcmlnaHQKaWRlbnRpZmllciB3YXMgdXNlZC4gRXhhbXBsZToKCmBgYAp0cmFpdCBGb28gewogICAgLy8gc29tZSBmdW5jdGlvbnMKfQpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7IC8vIG9rIQogICAgLy8gZnVuY3Rpb25zIGltcGxlbWVudGF0aW9uCn0KCmZuIGJhejxUOiBGb28+KHQ6IFQpIHt9IC8vIG9rIQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjb3VsZCBpbnRyb2R1Y2UgYSBuZXcgdHJhaXQgd2l0aCB5b3VyIGRlc2lyZWQgcmVzdHJpY3Rpb25zCmFzIGEgc3VwZXIgdHJhaXQ6CgpgYGAKIyB0cmFpdCBGb28ge30KIyBzdHJ1Y3QgQmFyOwojIGltcGwgRm9vIGZvciBCYXIge30KdHJhaXQgUXV4OiBGb28ge30gLy8gQW55dGhpbmcgdGhhdCBpbXBsZW1lbnRzIFF1eCBhbHNvIG5lZWRzIHRvIGltcGxlbWVudCBGb28KZm4gYmF6PFQ6IFF1eD4odDogVCkge30gLy8gYWxzbyBvayEKYGBgCgpGaW5hbGx5LCBpZiB5b3UgYXJlIG9uIG5pZ2h0bHkgYW5kIHdhbnQgdG8gdXNlIGEgdHJhaXQgYWxpYXMKaW5zdGVhZCBvZiBhIHR5cGUgYWxpYXMsIHlvdSBzaG91bGQgdXNlIGAjIVtmZWF0dXJlKHRyYWl0X2FsaWFzKV1gOgoKYGBgCiMhW2ZlYXR1cmUodHJhaXRfYWxpYXMpXQp0cmFpdCBGb28gPSBJdGVyYXRvcjxJdGVtPVN0cmluZz47CgpmbiBiYXI8VDogRm9vPih0OiBUKSB7fSAvLyBvayEKYGBgCkUwNDA1VGhlIGNvZGUgcmVmZXJzIHRvIGEgdHJhaXQgdGhhdCBpcyBub3QgaW4gc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDA1CnN0cnVjdCBGb287CgppbXBsIFNvbWVUcmFpdCBmb3IgRm9vIHt9IC8vIGVycm9yOiB0cmFpdCBgU29tZVRyYWl0YCBpcyBub3QgaW4gc2NvcGUKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG5hbWUgb2YgdGhlIHRyYWl0IHdhc24ndCBtaXNzcGVsbGVkIGFuZCBlbnN1cmUgdGhhdCBpdAp3YXMgaW1wb3J0ZWQuIEV4YW1wbGU6CgpgYGAKIyAjW2NmZyhmb3JfZGVtb25zdHJhdGlvbl9vbmx5KV0KLy8gc29sdXRpb24gMToKdXNlIHNvbWVfZmlsZTo6U29tZVRyYWl0OwoKLy8gc29sdXRpb24gMjoKdHJhaXQgU29tZVRyYWl0IHsKICAgIC8vIHNvbWUgZnVuY3Rpb25zCn0KCnN0cnVjdCBGb287CgppbXBsIFNvbWVUcmFpdCBmb3IgRm9vIHsgLy8gb2shCiAgICAvLyBpbXBsZW1lbnRzIGZ1bmN0aW9ucwp9CmBgYApFMDQwN0EgZGVmaW5pdGlvbiBvZiBhIG1ldGhvZCBub3QgaW4gdGhlIGltcGxlbWVudGVkIHRyYWl0IHdhcyBnaXZlbiBpbiBhIHRyYWl0CmltcGxlbWVudGF0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwNwp0cmFpdCBGb28gewogICAgZm4gYSgpOwp9CgpzdHJ1Y3QgQmFyOwoKaW1wbCBGb28gZm9yIEJhciB7CiAgICBmbiBhKCkge30KICAgIGZuIGIoKSB7fSAvLyBlcnJvcjogbWV0aG9kIGBiYCBpcyBub3QgYSBtZW1iZXIgb2YgdHJhaXQgYEZvb2AKfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgbWV0aG9kIG5hbWUgYW5kIHlvdSB1c2VkIHRoZSBjb3JyZWN0CnRyYWl0LiBGaXJzdCBleGFtcGxlOgoKYGBgCnRyYWl0IEZvbyB7CiAgICBmbiBhKCk7CiAgICBmbiBiKCk7Cn0KCnN0cnVjdCBCYXI7CgppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGEoKSB7fQogICAgZm4gYigpIHt9IC8vIG9rIQp9CmBgYAoKU2Vjb25kIGV4YW1wbGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIGZuIGEoKTsKfQoKc3RydWN0IEJhcjsKCmltcGwgRm9vIGZvciBCYXIgewogICAgZm4gYSgpIHt9Cn0KCmltcGwgQmFyIHsKICAgIGZuIGIoKSB7fQp9CmBgYApFMDQwOEFuICJvciIgcGF0dGVybiB3YXMgdXNlZCB3aGVyZSB0aGUgdmFyaWFibGUgYmluZGluZ3MgYXJlIG5vdCBjb25zaXN0ZW50bHkgYm91bmQKYWNyb3NzIHBhdHRlcm5zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwOAptYXRjaCB4IHsKICAgIFNvbWUoeSkgfCBOb25lID0+IHsgLyogdXNlIHkgKi8gfSAvLyBlcnJvcjogdmFyaWFibGUgYHlgIGZyb20gcGF0dGVybiAjMSBpcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBub3QgYm91bmQgaW4gcGF0dGVybiAjMgogICAgXyA9PiAoKQp9CmBgYAoKSGVyZSwgYHlgIGlzIGJvdW5kIHRvIHRoZSBjb250ZW50cyBvZiB0aGUgYFNvbWVgIGFuZCBjYW4gYmUgdXNlZCB3aXRoaW4gdGhlCmJsb2NrIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG1hdGNoIGFybS4gSG93ZXZlciwgaW4gY2FzZSBgeGAgaXMgYE5vbmVgLCB3ZSBoYXZlCm5vdCBzcGVjaWZpZWQgd2hhdCBgeWAgaXMsIGFuZCB0aGUgYmxvY2sgd2lsbCB1c2UgYSBub25leGlzdGVudCB2YXJpYWJsZS4KClRvIGZpeCB0aGlzIGVycm9yLCBlaXRoZXIgc3BsaXQgaW50byBtdWx0aXBsZSBtYXRjaCBhcm1zOgoKYGBgCmxldCB4ID0gU29tZSgxKTsKbWF0Y2ggeCB7CiAgICBTb21lKHkpID0+IHsgLyogdXNlIHkgKi8gfQogICAgTm9uZSA9PiB7IC8qIC4uLiAqLyB9Cn0KYGBgCgpvciwgYmluZCB0aGUgdmFyaWFibGUgdG8gYSBmaWVsZCBvZiB0aGUgc2FtZSB0eXBlIGluIGFsbCBzdWItcGF0dGVybnMgb2YgdGhlCm9yIHBhdHRlcm46CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKDAsIHkpIHwgKHksIDApID0+IHsgLyogdXNlIHkgKi99CiAgICBfID0+IHt9Cn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGlmIGB4YCBtYXRjaGVzIHRoZSBwYXR0ZXJuIGAoMCwgXylgLCB0aGUgc2Vjb25kIGZpZWxkIGlzIHNldAp0byBgeWAuIElmIGl0IG1hdGNoZXMgYChfLCAwKWAsIHRoZSBmaXJzdCBmaWVsZCBpcyBzZXQgdG8gYHlgOyBzbyBpbiBhbGwKY2FzZXMgYHlgIGlzIHNldCB0byBzb21lIHZhbHVlLgpFMDQwOUFuICJvciIgcGF0dGVybiB3YXMgdXNlZCB3aGVyZSB0aGUgdmFyaWFibGUgYmluZGluZ3MgYXJlIG5vdCBjb25zaXN0ZW50bHkgYm91bmQKYWNyb3NzIHBhdHRlcm5zLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQwOQpsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHksIDApID0+IHsgLyogdXNlIHkgKi99IC8vIGVycm9yOiB2YXJpYWJsZSBgeWAgaXMgYm91bmQgd2l0aAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgZGlmZmVyZW50IG1vZGUgaW4gcGF0dGVybiAjMgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgdGhhbiBpbiBwYXR0ZXJuICMxCiAgICBfID0+ICgpCn0KYGBgCgpIZXJlLCBgeWAgaXMgYm91bmQgYnktdmFsdWUgaW4gb25lIGNhc2UgYW5kIGJ5LXJlZmVyZW5jZSBpbiB0aGUgb3RoZXIuCgpUbyBmaXggdGhpcyBlcnJvciwganVzdCB1c2UgdGhlIHNhbWUgbW9kZSBpbiBib3RoIGNhc2VzLgpHZW5lcmFsbHkgdXNpbmcgYHJlZmAgb3IgYHJlZiBtdXRgIHdoZXJlIG5vdCBhbHJlYWR5IHVzZWQgd2lsbCBmaXggdGhpczoKCmBgYApsZXQgeCA9ICgwLCAyKTsKbWF0Y2ggeCB7CiAgICAoMCwgcmVmIHkpIHwgKHJlZiB5LCAwKSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYAoKQWx0ZXJuYXRpdmVseSwgc3BsaXQgdGhlIHBhdHRlcm46CgpgYGAKbGV0IHggPSAoMCwgMik7Cm1hdGNoIHggewogICAgKHksIDApID0+IHsgLyogdXNlIHkgKi8gfQogICAgKDAsIHJlZiB5KSA9PiB7IC8qIHVzZSB5ICovfQogICAgXyA9PiAoKQp9CmBgYApFMDQxMVRoZSBgU2VsZmAga2V5d29yZCB3YXMgdXNlZCBvdXRzaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDExCjxTZWxmPjo6Zm9vOyAvLyBlcnJvcjogdXNlIG9mIGBTZWxmYCBvdXRzaWRlIG9mIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlCiAgICAgICAgICAgICAvLyBkZWZpbml0aW9uCmBgYAoKVGhlIGBTZWxmYCBrZXl3b3JkIHJlcHJlc2VudHMgdGhlIGN1cnJlbnQgdHlwZSwgd2hpY2ggZXhwbGFpbnMgd2h5IGl0IGNhbiBvbmx5CmJlIHVzZWQgaW5zaWRlIGFuIGltcGwsIHRyYWl0LCBvciB0eXBlIGRlZmluaXRpb24uIEl0IGdpdmVzIGFjY2VzcyB0byB0aGUKYXNzb2NpYXRlZCBpdGVtcyBvZiBhIHR5cGU6CgpgYGAKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gewogICAgZm4gYmFyKCkgLT4gU2VsZjo6QmFyOyAvLyBsaWtlIHRoaXMKfQpgYGAKCkhvd2V2ZXIsIGJlIGNhcmVmdWwgd2hlbiB0d28gdHlwZXMgaGF2ZSBhIGNvbW1vbiBhc3NvY2lhdGVkIHR5cGU6CgpgYGBjb21waWxlX2ZhaWwKdHJhaXQgRm9vIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBGb28yIHsKICAgIHR5cGUgQmFyOwp9Cgp0cmFpdCBCYXogOiBGb28gKyBGb28yIHsKICAgIGZuIGJhcigpIC0+IFNlbGY6OkJhcjsKICAgIC8vIGVycm9yOiBhbWJpZ3VvdXMgYXNzb2NpYXRlZCB0eXBlIGBCYXJgIGluIGJvdW5kcyBvZiBgU2VsZmAKfQpgYGAKClRoaXMgcHJvYmxlbSBjYW4gYmUgc29sdmVkIGJ5IHNwZWNpZnlpbmcgZnJvbSB3aGljaCB0cmFpdCB3ZSB3YW50IHRvIHVzZSB0aGUKYEJhcmAgdHlwZToKCmBgYAp0cmFpdCBGb28gewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEZvbzIgewogICAgdHlwZSBCYXI7Cn0KCnRyYWl0IEJheiA6IEZvbyArIEZvbzIgewogICAgZm4gYmFyKCkgLT4gPFNlbGYgYXMgRm9vPjo6QmFyOyAvLyBvayEKfQpgYGAKRTA0MTJBIHVzZWQgdHlwZSBuYW1lIGlzIG5vdCBpbiBzY29wZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDEyCmltcGwgU29tZXRoaW5nIHt9IC8vIGVycm9yOiB0eXBlIG5hbWUgYFNvbWV0aGluZ2AgaXMgbm90IGluIHNjb3BlCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICBmbiBiYXIoTik7IC8vIGVycm9yOiB0eXBlIG5hbWUgYE5gIGlzIG5vdCBpbiBzY29wZQp9CgovLyBvcjoKCmZuIGZvbyh4OiBUKSB7fSAvLyB0eXBlIG5hbWUgYFRgIGlzIG5vdCBpbiBzY29wZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHR5cGUgbmFtZSwgeW91IGRpZApkZWNsYXJlIGl0IG9yIGltcG9ydGVkIGl0IGludG8gdGhlIHNjb3BlLiBFeGFtcGxlczoKCmBgYApzdHJ1Y3QgU29tZXRoaW5nOwoKaW1wbCBTb21ldGhpbmcge30gLy8gb2shCgovLyBvcjoKCnRyYWl0IEZvbyB7CiAgICB0eXBlIE47CgogICAgZm4gYmFyKF86IFNlbGY6Ok4pOyAvLyBvayEKfQoKLy8gb3I6CgpmbiBmb288VD4oeDogVCkge30gLy8gb2shCmBgYAoKQW5vdGhlciBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgd2hlbiBhIHR5cGUgaXMgaW1wb3J0ZWQgaW50byBhIHBhcmVudAptb2R1bGUuIFRvIGZpeCB0aGlzLCB5b3UgY2FuIGZvbGxvdyB0aGUgc3VnZ2VzdGlvbiBhbmQgdXNlIEZpbGUgZGlyZWN0bHkgb3IKYHVzZSBzdXBlcjo6RmlsZTtgIHdoaWNoIHdpbGwgaW1wb3J0IHRoZSB0eXBlcyBmcm9tIHRoZSBwYXJlbnQgbmFtZXNwYWNlLiBBbgpleGFtcGxlIHRoYXQgY2F1c2VzIHRoaXMgZXJyb3IgaXMgYmVsb3c6CgpgYGBjb21waWxlX2ZhaWwsRTA0MTIKdXNlIHN0ZDo6ZnM6OkZpbGU7Cgptb2QgZm9vIHsKICAgIGZuIHNvbWVfZnVuY3Rpb24oZjogRmlsZSkge30KfQpgYGAKCmBgYAp1c2Ugc3RkOjpmczo6RmlsZTsKCm1vZCBmb28gewogICAgLy8gZWl0aGVyCiAgICB1c2Ugc3VwZXI6OkZpbGU7CiAgICAvLyBvcgogICAgLy8gdXNlIHN0ZDo6ZnM6OkZpbGU7CiAgICBmbiBmb28oZjogRmlsZSkge30KfQojIGZuIG1haW4oKSB7fSAvLyBkb24ndCBpbnNlcnQgaXQgZm9yIHVzOyB0aGF0J2xsIGJyZWFrIGltcG9ydHMKYGBgCkUwNDE1TW9yZSB0aGFuIG9uZSBmdW5jdGlvbiBwYXJhbWV0ZXIgaGF2ZSB0aGUgc2FtZSBuYW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQxNQpmbiBmb28oZjogaTMyLCBmOiBpMzIpIHt9IC8vIGVycm9yOiBpZGVudGlmaWVyIGBmYCBpcyBib3VuZCBtb3JlIHRoYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgb25jZSBpbiB0aGlzIHBhcmFtZXRlciBsaXN0CmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHBhcmFtZXRlcnMnIG5hbWUuIEV4YW1wbGU6CgpgYGAKZm4gZm9vKGY6IGkzMiwgZzogaTMyKSB7fSAvLyBvayEKYGBgCkUwNDE2QW4gaWRlbnRpZmllciBpcyBib3VuZCBtb3JlIHRoYW4gb25jZSBpbiBhIHBhdHRlcm4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDE2Cm1hdGNoICgxLCAyKSB7CiAgICAoeCwgeCkgPT4ge30gLy8gZXJyb3I6IGlkZW50aWZpZXIgYHhgIGlzIGJvdW5kIG1vcmUgdGhhbiBvbmNlIGluIHRoZQogICAgICAgICAgICAgICAgIC8vICAgICAgICBzYW1lIHBhdHRlcm4KfQpgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBpZGVudGlmaWVycycgbmFtZS4gRXhhbXBsZToKCmBgYAptYXRjaCAoMSwgMikgewogICAgKHgsIHkpID0+IHt9IC8vIG9rIQp9CmBgYAoKT3IgbWF5YmUgZGlkIHlvdSBtZWFuIHRvIHVuaWZ5PyBDb25zaWRlciB1c2luZyBhIGd1YXJkOgoKYGBgCiMgbGV0IChBLCBCLCBDKSA9ICgxLCAyLCAzKTsKbWF0Y2ggKEEsIEIsIEMpIHsKICAgICh4LCB4Miwgc2VlKSBpZiB4ID09IHgyID0+IHsgLyogQSBhbmQgQiBhcmUgZXF1YWwsIGRvIG9uZSB0aGluZyAqLyB9CiAgICAoeSwgeiwgc2VlKSA9PiB7IC8qIEEgYW5kIEIgdW5lcXVhbDsgZG8gYW5vdGhlciB0aGluZyAqLyB9Cn0KYGBgCkUwNDIyQW4gaWRlbnRpZmllciB0aGF0IGlzIG5laXRoZXIgZGVmaW5lZCBub3IgYSBzdHJ1Y3Qgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIyCmZuIG1haW4gKCkgewogICAgbGV0IHggPSBGb28geyB4OiAxLCB5OiAyIH07Cn0KYGBgCgpJbiB0aGlzIGNhc2UsIGBGb29gIGlzIHVuZGVmaW5lZCwgc28gaXQgaW5oZXJlbnRseSBpc24ndCBhbnl0aGluZywgYW5kCmRlZmluaXRlbHkgbm90IGEgc3RydWN0LgoKYGBgY29tcGlsZV9mYWlsCmZuIG1haW4gKCkgewogICAgbGV0IGZvbyA9IDE7CiAgICBsZXQgeCA9IGZvbyB7IHg6IDEsIHk6IDIgfTsKfQpgYGAKCkluIHRoaXMgY2FzZSwgYGZvb2AgaXMgZGVmaW5lZCwgYnV0IGlzIG5vdCBhIHN0cnVjdCwgc28gUnVzdCBjYW4ndCB1c2UgaXQgYXMKb25lLgpFMDQyM0FuIGlkZW50aWZpZXIgd2FzIHVzZWQgbGlrZSBhIGZ1bmN0aW9uIG5hbWUgb3IgYSB2YWx1ZSB3YXMgZXhwZWN0ZWQgYW5kIHRoZQppZGVudGlmaWVyIGV4aXN0cyBidXQgaXQgYmVsb25ncyB0byBhIGRpZmZlcmVudCBuYW1lc3BhY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDIzCnN0cnVjdCBGb28geyBhOiBib29sIH07CgpsZXQgZiA9IEZvbygpOwovLyBlcnJvcjogZXhwZWN0ZWQgZnVuY3Rpb24sIHR1cGxlIHN0cnVjdCBvciB0dXBsZSB2YXJpYW50LCBmb3VuZCBgRm9vYAovLyBgRm9vYCBpcyBhIHN0cnVjdCBuYW1lLCBidXQgdGhpcyBleHByZXNzaW9uIHVzZXMgaXQgbGlrZSBhIGZ1bmN0aW9uIG5hbWUKYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIG5hbWUgb2Ygd2hhdCB5b3UgYWN0dWFsbHkgd2FudGVkIHRvIHVzZQpoZXJlLiBFeGFtcGxlOgoKYGBgCmZuIEZvbygpIC0+IHUzMiB7IDAgfQoKbGV0IGYgPSBGb28oKTsgLy8gb2shCmBgYAoKSXQgaXMgY29tbW9uIHRvIGZvcmdldCB0aGUgdHJhaWxpbmcgYCFgIG9uIG1hY3JvIGludm9jYXRpb25zLCB3aGljaCB3b3VsZCBhbHNvCnlpZWxkIHRoaXMgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjMKcHJpbnRsbigiIik7Ci8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsCi8vIGZvdW5kIG1hY3JvIGBwcmludGxuYAovLyBkaWQgeW91IG1lYW4gYHByaW50bG4hKC4uLilgPyAobm90aWNlIHRoZSB0cmFpbGluZyBgIWApCmBgYAoKQW5vdGhlciBjYXNlIHdoZXJlIHRoaXMgZXJyb3IgaXMgZW1pdHRlZCBpcyB3aGVuIGEgdmFsdWUgaXMgZXhwZWN0ZWQsIGJ1dApzb21ldGhpbmcgZWxzZSBpcyBmb3VuZDoKCmBgYGNvbXBpbGVfZmFpbCxFMDQyMwpwdWIgbW9kIGEgewogICAgcHViIGNvbnN0IEk6IGkzMiA9IDE7Cn0KCmZuIGgxKCkgLT4gaTMyIHsKICAgIGEuSQogICAgLy9+XiBFUlJPUiBleHBlY3RlZCB2YWx1ZSwgZm91bmQgbW9kdWxlIGBhYAogICAgLy8gZGlkIHlvdSBtZWFuIGBhOjpJYD8KfQpgYGAKRTA0MjRUaGUgYHNlbGZgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIG9mIGFuIGFzc29jaWF0ZWQgZnVuY3Rpb24gd2l0aG91dCBhICJgc2VsZmAKcmVjZWl2ZXIiIHBhcmFtZXRlci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjQKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIC8vIGBiYXJgIGlzIGEgbWV0aG9kLCBiZWNhdXNlIGl0IGhhcyBhIHJlY2VpdmVyIHBhcmFtZXRlci4KICAgIGZuIGJhcigmc2VsZikge30KCiAgICAvLyBgZm9vYCBpcyBub3QgYSBtZXRob2QsIGJlY2F1c2UgaXQgaGFzIG5vIHJlY2VpdmVyIHBhcmFtZXRlci4KICAgIGZuIGZvbygpIHsKICAgICAgICBzZWxmLmJhcigpOyAvLyBlcnJvcjogYHNlbGZgIHZhbHVlIGlzIGEga2V5d29yZCBvbmx5IGF2YWlsYWJsZSBpbgogICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBtZXRob2RzIHdpdGggYSBgc2VsZmAgcGFyYW1ldGVyCiAgICB9Cn0KYGBgCgpUaGUgYHNlbGZgIGtleXdvcmQgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgbWV0aG9kcywgd2hpY2ggYXJlIGFzc29jaWF0ZWQKZnVuY3Rpb25zIChmdW5jdGlvbnMgZGVmaW5lZCBpbnNpZGUgb2YgYSBgdHJhaXRgIG9yIGBpbXBsYCBibG9jaykgdGhhdCBoYXZlIGEKYHNlbGZgIHJlY2VpdmVyIGFzIGl0cyBmaXJzdCBwYXJhbWV0ZXIsIGxpa2UgYHNlbGZgLCBgJnNlbGZgLCBgJm11dCBzZWxmYCBvcgpgc2VsZjogJm11dCBQaW48U2VsZj5gICh0aGlzIGxhc3Qgb25lIGlzIGFuIGV4YW1wbGUgb2YgYW4gWyJhcmJpdHJhcnkgYHNlbGZgCnR5cGUiXShodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzQ0ODc0KSkuCgpDaGVjayBpZiB0aGUgYXNzb2NpYXRlZCBmdW5jdGlvbidzIHBhcmFtZXRlciBsaXN0IHNob3VsZCBoYXZlIGNvbnRhaW5lZCBhIGBzZWxmYApyZWNlaXZlciBmb3IgaXQgdG8gYmUgYSBtZXRob2QsIGFuZCBhZGQgaXQgaWYgc28uIEV4YW1wbGU6CgpgYGAKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigmc2VsZikge30KCiAgICBmbiBmb28oc2VsZikgeyAvLyBgZm9vYCBpcyBub3cgYSBtZXRob2QuCiAgICAgICAgc2VsZi5iYXIoKTsgLy8gb2shCiAgICB9Cn0KYGBgCkUwNDI1QW4gdW5yZXNvbHZlZCBuYW1lIHdhcyB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjUKc29tZXRoaW5nX3RoYXRfZG9lc250X2V4aXN0Ojpmb287Ci8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYHNvbWV0aGluZ190aGF0X2RvZXNudF9leGlzdDo6Zm9vYAoKLy8gb3I6Cgp0cmFpdCBGb28gewogICAgZm4gYmFyKCkgewogICAgICAgIFNlbGY7IC8vIGVycm9yOiB1bnJlc29sdmVkIG5hbWUgYFNlbGZgCiAgICB9Cn0KCi8vIG9yOgoKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAgLy8gZXJyb3I6IHVucmVzb2x2ZWQgbmFtZSBgdW5rbm93bl92YXJpYWJsZWAKYGBgCgpQbGVhc2UgdmVyaWZ5IHRoYXQgdGhlIG5hbWUgd2Fzbid0IG1pc3NwZWxsZWQgYW5kIGVuc3VyZSB0aGF0IHRoZQppZGVudGlmaWVyIGJlaW5nIHJlZmVycmVkIHRvIGlzIHZhbGlkIGZvciB0aGUgZ2l2ZW4gc2l0dWF0aW9uLiBFeGFtcGxlOgoKYGBgCmVudW0gc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBGb28sCn0KYGBgCgpPcjoKCmBgYAptb2Qgc29tZXRoaW5nX3RoYXRfZG9lc19leGlzdCB7CiAgICBwdWIgc3RhdGljIGZvbyA6IGkzMiA9IDBpMzI7Cn0KCnNvbWV0aGluZ190aGF0X2RvZXNfZXhpc3Q6OmZvbzsgLy8gb2shCmBgYAoKT3I6CgpgYGAKbGV0IHVua25vd25fdmFyaWFibGUgPSAxMnUzMjsKbGV0IHggPSB1bmtub3duX3ZhcmlhYmxlOyAvLyBvayEKYGBgCgpJZiB0aGUgaXRlbSBpcyBub3QgZGVmaW5lZCBpbiB0aGUgY3VycmVudCBtb2R1bGUsIGl0IG11c3QgYmUgaW1wb3J0ZWQgdXNpbmcgYQpgdXNlYCBzdGF0ZW1lbnQsIGxpa2Ugc286CgpgYGAKIyBtb2QgZm9vIHsgcHViIGZuIGJhcigpIHt9IH0KIyBmbiBtYWluKCkgewp1c2UgZm9vOjpiYXI7CmJhcigpOwojIH0KYGBgCgpJZiB0aGUgaXRlbSB5b3UgYXJlIGltcG9ydGluZyBpcyBub3QgZGVmaW5lZCBpbiBzb21lIHN1cGVyLW1vZHVsZSBvZiB0aGUKY3VycmVudCBtb2R1bGUsIHRoZW4gaXQgbXVzdCBhbHNvIGJlIGRlY2xhcmVkIGFzIHB1YmxpYyAoZS5nLiwgYHB1YiBmbmApLgpFMDQyNkFuIHVuZGVjbGFyZWQgbGFiZWwgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI2Cmxvb3AgewogICAgYnJlYWsgJ2E7IC8vIGVycm9yOiB1c2Ugb2YgdW5kZWNsYXJlZCBsYWJlbCBgJ2FgCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBzcGVsbGVkIG9yIGRlY2xhcmVkIHRoZSBsYWJlbCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKJ2E6IGxvb3AgewogICAgYnJlYWsgJ2E7IC8vIG9rIQp9CmBgYApFMDQyOEEgdHlwZSBvciBtb2R1bGUgaGFzIGJlZW4gZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MjgKc3RydWN0IEJhcjsKc3RydWN0IEJhcjsgLy8gZXJyb3I6IGR1cGxpY2F0ZSBkZWZpbml0aW9uIG9mIHZhbHVlIGBCYXJgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgcmVtb3ZlL3JlbmFtZSB0aGUKZHVwbGljYXRlZCBvbmUuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKc3RydWN0IEJhcjI7IC8vIG9rIQpgYGAKRTA0MjlUaGUgYHNlbGZgIGtleXdvcmQgY2Fubm90IGFwcGVhciBhbG9uZSBhcyB0aGUgbGFzdCBzZWdtZW50IGluIGEgYHVzZWAKZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDI5CnVzZSBzdGQ6OmZtdDo6c2VsZjsgLy8gZXJyb3I6IGBzZWxmYCBpbXBvcnRzIGFyZSBvbmx5IGFsbG93ZWQgd2l0aGluIGEgeyB9IGxpc3QKYGBgCgpUbyB1c2UgYSBuYW1lc3BhY2UgaXRzZWxmIGluIGFkZGl0aW9uIHRvIHNvbWUgb2YgaXRzIG1lbWJlcnMsIGBzZWxmYCBtYXkgYXBwZWFyCmFzIHBhcnQgb2YgYSBicmFjZS1lbmNsb3NlZCBsaXN0IG9mIGltcG9ydHM6CgpgYGAKdXNlIHN0ZDo6Zm10Ojp7c2VsZiwgRGVidWd9OwpgYGAKCklmIHlvdSBvbmx5IHdhbnQgdG8gaW1wb3J0IHRoZSBuYW1lc3BhY2UsIGRvIHNvIGRpcmVjdGx5OgoKYGBgCnVzZSBzdGQ6OmZtdDsKYGBgCkUwNDMwVGhlIGBzZWxmYCBpbXBvcnQgYXBwZWFycyBtb3JlIHRoYW4gb25jZSBpbiB0aGUgbGlzdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzAKdXNlIHNvbWV0aGluZzo6e3NlbGYsIHNlbGZ9OyAvLyBlcnJvcjogYHNlbGZgIGltcG9ydCBjYW4gb25seSBhcHBlYXIgb25jZSBpbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgbGlzdApgYGAKClBsZWFzZSB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgaW1wb3J0IG5hbWUgb3IgcmVtb3ZlIHRoZSBkdXBsaWNhdGVkCmBzZWxmYCBpbXBvcnQuIEV4YW1wbGU6CgpgYGAKIyBtb2Qgc29tZXRoaW5nIHt9CiMgZm4gbWFpbigpIHsKdXNlIHNvbWV0aGluZzo6e3NlbGZ9OyAvLyBvayEKIyB9CmBgYApFMDQzMUFuIGludmFsaWQgYHNlbGZgIGltcG9ydCB3YXMgbWFkZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzEKdXNlIHtzZWxmfTsgLy8gZXJyb3I6IGBzZWxmYCBpbXBvcnQgY2FuIG9ubHkgYXBwZWFyIGluIGFuIGltcG9ydCBsaXN0IHdpdGggYQogICAgICAgICAgICAvLyAgICAgICAgbm9uLWVtcHR5IHByZWZpeApgYGAKCllvdSBjYW5ub3QgaW1wb3J0IHRoZSBjdXJyZW50IG1vZHVsZSBpbnRvIGl0c2VsZiwgcGxlYXNlIHJlbW92ZSB0aGlzIGltcG9ydApvciB2ZXJpZnkgeW91IGRpZG4ndCBtaXNzcGVsbCBpdC4KRTA0MzJBbiBpbXBvcnQgd2FzIHVucmVzb2x2ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDMyCnVzZSBzb21ldGhpbmc6OkZvbzsgLy8gZXJyb3I6IHVucmVzb2x2ZWQgaW1wb3J0IGBzb21ldGhpbmc6OkZvb2AuCmBgYAoKSW4gUnVzdCAyMDE1LCBwYXRocyBpbiBgdXNlYCBzdGF0ZW1lbnRzIGFyZSByZWxhdGl2ZSB0byB0aGUgY3JhdGUgcm9vdC4gVG8KaW1wb3J0IGl0ZW1zIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50IGFuZCBwYXJlbnQgbW9kdWxlcywgdXNlIHRoZSBgc2VsZjo6YCBhbmQKYHN1cGVyOjpgIHByZWZpeGVzLCByZXNwZWN0aXZlbHkuCgpJbiBSdXN0IDIwMTggb3IgbGF0ZXIsIHBhdGhzIGluIGB1c2VgIHN0YXRlbWVudHMgYXJlIHJlbGF0aXZlIHRvIHRoZSBjdXJyZW50Cm1vZHVsZSB1bmxlc3MgdGhleSBiZWdpbiB3aXRoIHRoZSBuYW1lIG9mIGEgY3JhdGUgb3IgYSBsaXRlcmFsIGBjcmF0ZTo6YCwgaW4Kd2hpY2ggY2FzZSB0aGV5IHN0YXJ0IGZyb20gdGhlIGNyYXRlIHJvb3QuIEFzIGluIFJ1c3QgMjAxNSBjb2RlLCB0aGUgYHNlbGY6OmAKYW5kIGBzdXBlcjo6YCBwcmVmaXhlcyByZWZlciB0byB0aGUgY3VycmVudCBhbmQgcGFyZW50IG1vZHVsZXMgcmVzcGVjdGl2ZWx5LgoKQWxzbyB2ZXJpZnkgdGhhdCB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBpbXBvcnQgbmFtZSBhbmQgdGhhdCB0aGUgaW1wb3J0IGV4aXN0cwppbiB0aGUgbW9kdWxlIGZyb20gd2hlcmUgeW91IHRyaWVkIHRvIGltcG9ydCBpdC4gRXhhbXBsZToKCmBgYAp1c2Ugc2VsZjo6c29tZXRoaW5nOjpGb287IC8vIE9rLgoKbW9kIHNvbWV0aGluZyB7CiAgICBwdWIgc3RydWN0IEZvbzsKfQojIGZuIG1haW4oKSB7fQpgYGAKCklmIHlvdSB0cmllZCB0byB1c2UgYSBtb2R1bGUgZnJvbSBhbiBleHRlcm5hbCBjcmF0ZSBhbmQgYXJlIHVzaW5nIFJ1c3QgMjAxNSwKeW91IG1heSBoYXZlIG1pc3NlZCB0aGUgYGV4dGVybiBjcmF0ZWAgZGVjbGFyYXRpb24gKHdoaWNoIGlzIHVzdWFsbHkgcGxhY2VkIGluCnRoZSBjcmF0ZSByb290KToKCmBgYGVkaXRpb24yMDE1CmV4dGVybiBjcmF0ZSBjb3JlOyAvLyBSZXF1aXJlZCB0byB1c2UgdGhlIGBjb3JlYCBjcmF0ZSBpbiBSdXN0IDIwMTUuCgp1c2UgY29yZTo6YW55OwojIGZuIG1haW4oKSB7fQpgYGAKClNpbmNlIFJ1c3QgMjAxOCB0aGUgYGV4dGVybiBjcmF0ZWAgZGVjbGFyYXRpb24gaXMgbm90IHJlcXVpcmVkIGFuZAp5b3UgY2FuIGluc3RlYWQganVzdCBgdXNlYCBpdDoKCmBgYGVkaXRpb24yMDE4CnVzZSBjb3JlOjphbnk7IC8vIE5vIGV4dGVybiBjcmF0ZSByZXF1aXJlZCBpbiBSdXN0IDIwMTguCiMgZm4gbWFpbigpIHt9CmBgYApFMDQzM0FuIHVuZGVjbGFyZWQgY3JhdGUsIG1vZHVsZSwgb3IgdHlwZSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzMKbGV0IG1hcCA9IEhhc2hNYXA6Om5ldygpOwovLyBlcnJvcjogZmFpbGVkIHRvIHJlc29sdmU6IHVzZSBvZiB1bmRlY2xhcmVkIHR5cGUgYEhhc2hNYXBgCmBgYAoKUGxlYXNlIHZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSB0eXBlL21vZHVsZSdzIG5hbWUgb3IgdGhhdCB5b3UgZGlkbid0CmZvcmdldCB0byBpbXBvcnQgaXQ6CgpgYGAKdXNlIHN0ZDo6Y29sbGVjdGlvbnM6Okhhc2hNYXA7IC8vIEhhc2hNYXAgaGFzIGJlZW4gaW1wb3J0ZWQuCmxldCBtYXA6IEhhc2hNYXA8dTMyLCB1MzI+ID0gSGFzaE1hcDo6bmV3KCk7IC8vIFNvIGl0IGNhbiBiZSB1c2VkIQpgYGAKCklmIHlvdSd2ZSBleHBlY3RlZCB0byB1c2UgYSBjcmF0ZSBuYW1lOgoKYGBgY29tcGlsZV9mYWlsCnVzZSBmZXJyaXNfd2hlZWw6OkJpZ087Ci8vIGVycm9yOiBmYWlsZWQgdG8gcmVzb2x2ZTogdXNlIG9mIHVuZGVjbGFyZWQgY3JhdGUgb3IgbW9kdWxlIGBmZXJyaXNfd2hlZWxgCmBgYAoKTWFrZSBzdXJlIHRoZSBjcmF0ZSBoYXMgYmVlbiBhZGRlZCBhcyBhIGRlcGVuZGVuY3kgaW4gYENhcmdvLnRvbWxgLgoKVG8gdXNlIGEgbW9kdWxlIGZyb20geW91ciBjdXJyZW50IGNyYXRlLCBhZGQgdGhlIGBjcmF0ZTo6YCBwcmVmaXggdG8gdGhlIHBhdGguCkUwNDM0QSB2YXJpYWJsZSB1c2VkIGluc2lkZSBhbiBpbm5lciBmdW5jdGlvbiBjb21lcyBmcm9tIGEgZHluYW1pYyBlbnZpcm9ubWVudC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzQKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgZm4gYmFyKCkgLT4gdTMyIHsKICAgICAgICB5IC8vIGVycm9yOiBjYW4ndCBjYXB0dXJlIGR5bmFtaWMgZW52aXJvbm1lbnQgaW4gYSBmbiBpdGVtOyB1c2UgdGhlCiAgICAgICAgICAvLyAgICAgICAgfHwgeyAuLi4gfSBjbG9zdXJlIGZvcm0gaW5zdGVhZC4KICAgIH0KfQpgYGAKCklubmVyIGZ1bmN0aW9ucyBkbyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlaXIgY29udGFpbmluZyBlbnZpcm9ubWVudC4gVG8gZml4IHRoaXMKZXJyb3IsIHlvdSBjYW4gcmVwbGFjZSB0aGUgZnVuY3Rpb24gd2l0aCBhIGNsb3N1cmU6CgpgYGAKZm4gZm9vKCkgewogICAgbGV0IHkgPSA1OwogICAgbGV0IGJhciA9IHx8IHsKICAgICAgICB5CiAgICB9Owp9CmBgYAoKT3IgcmVwbGFjZSB0aGUgY2FwdHVyZWQgdmFyaWFibGUgd2l0aCBhIGNvbnN0YW50IG9yIGEgc3RhdGljIGl0ZW06CgpgYGAKZm4gZm9vKCkgewogICAgc3RhdGljIG11dCBYOiB1MzIgPSA0OwogICAgY29uc3QgWTogdTMyID0gNTsKICAgIGZuIGJhcigpIC0+IHUzMiB7CiAgICAgICAgdW5zYWZlIHsKICAgICAgICAgICAgWCA9IDM7CiAgICAgICAgfQogICAgICAgIFkKICAgIH0KfQpgYGAKRTA0MzVBIG5vbi1jb25zdGFudCB2YWx1ZSB3YXMgdXNlZCBpbiBhIGNvbnN0YW50IGV4cHJlc3Npb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM1CmxldCBmb28gPSA0MjsKbGV0IGE6IFt1ODsgZm9vXTsgLy8gZXJyb3I6IGF0dGVtcHQgdG8gdXNlIGEgbm9uLWNvbnN0YW50IHZhbHVlIGluIGEgY29uc3RhbnQKYGBgCgonY29uc3RhbnQnIG1lYW5zICdhIGNvbXBpbGUtdGltZSB2YWx1ZScuCgpNb3JlIGRldGFpbHMgY2FuIGJlIGZvdW5kIGluIHRoZSBbVmFyaWFibGVzIGFuZCBNdXRhYmlsaXR5XSBzZWN0aW9uIG9mIHRoZSBib29rLgoKW1ZhcmlhYmxlcyBhbmQgTXV0YWJpbGl0eV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDAzLTAxLXZhcmlhYmxlcy1hbmQtbXV0YWJpbGl0eS5odG1sI2RpZmZlcmVuY2VzLWJldHdlZW4tdmFyaWFibGVzLWFuZC1jb25zdGFudHMKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgcmVwbGFjZSB0aGUgdmFsdWUgd2l0aCBhIGNvbnN0YW50LiBFeGFtcGxlOgoKYGBgCmxldCBhOiBbdTg7IDQyXTsgLy8gb2shCmBgYAoKT3I6CgpgYGAKY29uc3QgRk9POiB1c2l6ZSA9IDQyOwpsZXQgYTogW3U4OyBGT09dOyAvLyBvayEKYGBgCkUwNDM2VGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggd2FzIHVzZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYSBzdHJ1Y3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDM2CmVudW0gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgV2Vla2x5LAogICAgU2VtaU1vbnRobHkgeyBkYXlzOiAodTgsIHU4KSwgYW5udWFsX3NwZWNpYWw6IGJvb2wgfSwKfQoKZm4gb25lX3VwX2NvbXBldGl0b3IoY29tcGV0aXRvcl9mcmVxdWVuY3k6IFB1YmxpY2F0aW9uRnJlcXVlbmN5KQogICAgICAgICAgICAgICAgICAgICAtPiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSB7CiAgICBtYXRjaCBjb21wZXRpdG9yX2ZyZXF1ZW5jeSB7CiAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OldlZWtseSA9PiBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHkgewogICAgICAgICAgICBkYXlzOiAoMSwgMTUpLCBhbm51YWxfc3BlY2lhbDogZmFsc2UKICAgICAgICB9LAogICAgICAgIGMgQCBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGFubnVhbF9zcGVjaWFsOiB0cnVlLCAuLmMgLy8gZXJyb3I6IGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc3ludGF4IHJlcXVpcmVzIGEgc3RydWN0CiAgICAgICAgfQogICAgfQp9CmBgYAoKVGhlIGZ1bmN0aW9uYWwgcmVjb3JkIHVwZGF0ZSBzeW50YXggaXMgb25seSBhbGxvd2VkIGZvciBzdHJ1Y3RzIChzdHJ1Y3QtbGlrZQplbnVtIHZhcmlhbnRzIGRvbid0IHF1YWxpZnksIGZvciBleGFtcGxlKS4gVG8gZml4IHRoZSBwcmV2aW91cyBjb2RlLCByZXdyaXRlIHRoZQpleHByZXNzaW9uIHdpdGhvdXQgZnVuY3Rpb25hbCByZWNvcmQgdXBkYXRlIHN5bnRheDoKCmBgYAplbnVtIFB1YmxpY2F0aW9uRnJlcXVlbmN5IHsKICAgIFdlZWtseSwKICAgIFNlbWlNb250aGx5IHsgZGF5czogKHU4LCB1OCksIGFubnVhbF9zcGVjaWFsOiBib29sIH0sCn0KCmZuIG9uZV91cF9jb21wZXRpdG9yKGNvbXBldGl0b3JfZnJlcXVlbmN5OiBQdWJsaWNhdGlvbkZyZXF1ZW5jeSkKICAgICAgICAgICAgICAgICAgICAgLT4gUHVibGljYXRpb25GcmVxdWVuY3kgewogICAgbWF0Y2ggY29tcGV0aXRvcl9mcmVxdWVuY3kgewogICAgICAgIFB1YmxpY2F0aW9uRnJlcXVlbmN5OjpXZWVrbHkgPT4gUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgZGF5czogKDEsIDE1KSwgYW5udWFsX3NwZWNpYWw6IGZhbHNlCiAgICAgICAgfSwKICAgICAgICBQdWJsaWNhdGlvbkZyZXF1ZW5jeTo6U2VtaU1vbnRobHl7IGRheXMsIC4uIH0gPT4KICAgICAgICAgICAgUHVibGljYXRpb25GcmVxdWVuY3k6OlNlbWlNb250aGx5IHsKICAgICAgICAgICAgICAgIGRheXMsIGFubnVhbF9zcGVjaWFsOiB0cnVlIC8vIG9rIQogICAgICAgIH0KICAgIH0KfQpgYGAKRTA0MzdBbiBhc3NvY2lhdGVkIHR5cGUgd2hvc2UgbmFtZSBkb2VzIG5vdCBtYXRjaCBhbnkgb2YgdGhlIGFzc29jaWF0ZWQgdHlwZXMKaW4gdGhlIHRyYWl0IHdhcyB1c2VkIHdoZW4gaW1wbGVtZW50aW5nIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzcKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIHR5cGUgQmFyID0gYm9vbDsKfQpgYGAKClRyYWl0IGltcGxlbWVudGF0aW9ucyBjYW4gb25seSBpbXBsZW1lbnQgYXNzb2NpYXRlZCB0eXBlcyB0aGF0IGFyZSBtZW1iZXJzIG9mCnRoZSB0cmFpdCBpbiBxdWVzdGlvbi4KClRoZSBzb2x1dGlvbiB0byB0aGlzIHByb2JsZW0gaXMgdG8gcmVtb3ZlIHRoZSBleHRyYW5lb3VzIGFzc29jaWF0ZWQgdHlwZToKCmBgYAp0cmFpdCBGb28ge30KCmltcGwgRm9vIGZvciBpMzIge30KYGBgCkUwNDM4QW4gYXNzb2NpYXRlZCBjb25zdGFudCB3aG9zZSBuYW1lIGRvZXMgbm90IG1hdGNoIGFueSBvZiB0aGUgYXNzb2NpYXRlZCBjb25zdGFudHMKaW4gdGhlIHRyYWl0IHdhcyB1c2VkIHdoZW4gaW1wbGVtZW50aW5nIHRoZSB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0MzgKdHJhaXQgRm9vIHt9CgppbXBsIEZvbyBmb3IgaTMyIHsKICAgIGNvbnN0IEJBUjogYm9vbCA9IHRydWU7Cn0KYGBgCgpUcmFpdCBpbXBsZW1lbnRhdGlvbnMgY2FuIG9ubHkgaW1wbGVtZW50IGFzc29jaWF0ZWQgY29uc3RhbnRzIHRoYXQgYXJlCm1lbWJlcnMgb2YgdGhlIHRyYWl0IGluIHF1ZXN0aW9uLgoKVGhlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byByZW1vdmUgdGhlIGV4dHJhbmVvdXMgYXNzb2NpYXRlZCBjb25zdGFudDoKCmBgYAp0cmFpdCBGb28ge30KCmltcGwgRm9vIGZvciBpMzIge30KYGBgCkUwNDM5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGxlbmd0aCBvZiB0aGUgcGxhdGZvcm0taW50cmluc2ljIGZ1bmN0aW9uIGBzaW1kX3NodWZmbGVgIHdhc24ndCBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChubyBsb25nZXIgZW1pdHRlZCkKIyFbZmVhdHVyZShwbGF0Zm9ybV9pbnRyaW5zaWNzKV0KCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX3NodWZmbGU8QSxCPihhOiBBLCBiOiBBLCBjOiBbdTMyOyA4XSkgLT4gQjsKICAgIC8vIGVycm9yOiBpbnZhbGlkIGBzaW1kX3NodWZmbGVgLCBuZWVkcyBsZW5ndGg6IGBzaW1kX3NodWZmbGVgCn0KYGBgCgpUaGUgYHNpbWRfc2h1ZmZsZWAgZnVuY3Rpb24gbmVlZHMgdGhlIGxlbmd0aCBvZiB0aGUgYXJyYXkgcGFzc2VkIGFzCmxhc3QgcGFyYW1ldGVyIGluIGl0cyBuYW1lLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9zaHVmZmxlODxBLEI+KGE6IEEsIGI6IEEsIGM6IFt1MzI7IDhdKSAtPiBCOwp9CmBgYApFMDQ0NUEgcHJpdmF0ZSB0cmFpdCB3YXMgdXNlZCBvbiBhIHB1YmxpYyB0eXBlIHBhcmFtZXRlciBib3VuZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ1CiMhW2RlbnkocHJpdmF0ZV9pbl9wdWJsaWMpXQoKdHJhaXQgRm9vIHsKICAgIGZuIGR1bW15KCZzZWxmKSB7IH0KfQoKcHViIHRyYWl0IEJhciA6IEZvbyB7fSAvLyBlcnJvcjogcHJpdmF0ZSB0cmFpdCBpbiBwdWJsaWMgaW50ZXJmYWNlCnB1YiBzdHJ1Y3QgQmFyMjxUOiBGb28+KHB1YiBUKTsgLy8gc2FtZSBlcnJvcgpwdWIgZm4gZm9vPFQ6IEZvbz4gKHQ6IFQpIHt9IC8vIHNhbWUgZXJyb3IKCmZuIG1haW4oKSB7fQpgYGAKClRvIHNvbHZlIHRoaXMgZXJyb3IsIHBsZWFzZSBlbnN1cmUgdGhhdCB0aGUgdHJhaXQgaXMgYWxzbyBwdWJsaWMuIFRoZSB0cmFpdApjYW4gYmUgbWFkZSBpbmFjY2Vzc2libGUgaWYgbmVjZXNzYXJ5IGJ5IHBsYWNpbmcgaXQgaW50byBhIHByaXZhdGUgaW5uZXIKbW9kdWxlLCBidXQgaXQgc3RpbGwgaGFzIHRvIGJlIG1hcmtlZCB3aXRoIGBwdWJgLiBFeGFtcGxlOgoKYGBgCnB1YiB0cmFpdCBGb28geyAvLyB3ZSBzZXQgdGhlIEZvbyB0cmFpdCBwdWJsaWMKICAgIGZuIGR1bW15KCZzZWxmKSB7IH0KfQoKcHViIHRyYWl0IEJhciA6IEZvbyB7fSAvLyBvayEKcHViIHN0cnVjdCBCYXIyPFQ6IEZvbz4ocHViIFQpOyAvLyBvayEKcHViIGZuIGZvbzxUOiBGb28+ICh0OiBUKSB7fSAvLyBvayEKCmZuIG1haW4oKSB7fQpgYGAKRTA0NDZBIHByaXZhdGUgdHlwZSB3YXMgdXNlZCBpbiBhIHB1YmxpYyB0eXBlIHNpZ25hdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NDYKIyFbZGVueShwcml2YXRlX2luX3B1YmxpYyldCnN0cnVjdCBCYXIodTMyKTsKCm1vZCBmb28gewogICAgdXNlIGNyYXRlOjpCYXI7CiAgICBwdWIgZm4gYmFyKCkgLT4gQmFyIHsgLy8gZXJyb3I6IHByaXZhdGUgdHlwZSBpbiBwdWJsaWMgaW50ZXJmYWNlCiAgICAgICAgQmFyKDApCiAgICB9Cn0KCmZuIG1haW4oKSB7fQpgYGAKClRoZXJlIGFyZSB0d28gd2F5cyB0byBzb2x2ZSB0aGlzIGVycm9yLiBUaGUgZmlyc3QgaXMgdG8gbWFrZSB0aGUgcHVibGljIHR5cGUKc2lnbmF0dXJlIG9ubHkgcHVibGljIHRvIGEgbW9kdWxlIHRoYXQgYWxzbyBoYXMgYWNjZXNzIHRvIHRoZSBwcml2YXRlIHR5cGUuClRoaXMgaXMgZG9uZSBieSB1c2luZyBwdWIoY3JhdGUpIG9yIHB1YihpbiBjcmF0ZTo6bXlfbW9kOjpldGMpCkV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcih1MzIpOwoKbW9kIGZvbyB7CiAgICB1c2UgY3JhdGU6OkJhcjsKICAgIHB1YihjcmF0ZSkgZm4gYmFyKCkgLT4gQmFyIHsgLy8gb25seSBwdWJsaWMgdG8gY3JhdGUgcm9vdAogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCgpUaGUgb3RoZXIgd2F5IHRvIHNvbHZlIHRoaXMgZXJyb3IgaXMgdG8gbWFrZSB0aGUgcHJpdmF0ZSB0eXBlIHB1YmxpYy4KRXhhbXBsZToKCmBgYApwdWIgc3RydWN0IEJhcih1MzIpOyAvLyB3ZSBzZXQgdGhlIEJhciB0eXBlIHB1YmxpYwptb2QgZm9vIHsKICAgIHVzZSBjcmF0ZTo6QmFyOwogICAgcHViIGZuIGJhcigpIC0+IEJhciB7IC8vIG9rIQogICAgICAgIEJhcigwKQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCkUwNDQ3IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGBwdWJgIGtleXdvcmQgd2FzIHVzZWQgaW5zaWRlIGEgZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgCmZuIGZvbygpIHsKICAgIHB1YiBzdHJ1Y3QgQmFyOyAvLyBlcnJvcjogdmlzaWJpbGl0eSBoYXMgbm8gZWZmZWN0IGluc2lkZSBmdW5jdGlvbnMKfQpgYGAKClNpbmNlIHdlIGNhbm5vdCBhY2Nlc3MgaXRlbXMgZGVmaW5lZCBpbnNpZGUgYSBmdW5jdGlvbiwgdGhlIHZpc2liaWxpdHkgb2YgaXRzCml0ZW1zIGRvZXMgbm90IGltcGFjdCBvdXRlciBjb2RlLiBTbyB1c2luZyB0aGUgYHB1YmAga2V5d29yZCBpbiB0aGlzIGNvbnRleHQKaXMgaW52YWxpZC4KRTA0NDgjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGUgYHB1YmAga2V5d29yZCB3YXMgdXNlZCBpbnNpZGUgYSBwdWJsaWMgZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKcHViIGVudW0gRm9vIHsKICAgIHB1YiBCYXIsIC8vIGVycm9yOiB1bm5lY2Vzc2FyeSBgcHViYCB2aXNpYmlsaXR5Cn0KYGBgCgpTaW5jZSB0aGUgZW51bSBpcyBhbHJlYWR5IHB1YmxpYywgYWRkaW5nIGBwdWJgIG9uIG9uZSBpdHMgZWxlbWVudHMgaXMKdW5uZWNlc3NhcnkuIEV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZW51bSBGb28gewogICAgcHViIEJhciwgLy8gbm90IG9rIQp9CmBgYAoKVGhpcyBpcyB0aGUgY29ycmVjdCBzeW50YXg6CgpgYGAKcHViIGVudW0gRm9vIHsKICAgIEJhciwgLy8gb2shCn0KYGBgCkUwNDQ5QSB2aXNpYmlsaXR5IHF1YWxpZmllciB3YXMgdXNlZCB3aGVuIGl0IHdhcyB1bm5lY2Vzc2FyeS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNDQ5CnN0cnVjdCBCYXI7Cgp0cmFpdCBGb28gewogICAgZm4gZm9vKCk7Cn0KCnB1YiBpbXBsIEJhciB7fSAvLyBlcnJvcjogdW5uZWNlc3NhcnkgdmlzaWJpbGl0eSBxdWFsaWZpZXIKCnB1YiBpbXBsIEZvbyBmb3IgQmFyIHsgLy8gZXJyb3I6IHVubmVjZXNzYXJ5IHZpc2liaWxpdHkgcXVhbGlmaWVyCiAgICBwdWIgZm4gZm9vKCkge30gLy8gZXJyb3I6IHVubmVjZXNzYXJ5IHZpc2liaWxpdHkgcXVhbGlmaWVyCn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgcGxlYXNlIHJlbW92ZSB0aGUgdmlzaWJpbGl0eSBxdWFsaWZpZXIgd2hlbiBpdCBpcyBub3QKcmVxdWlyZWQuIEV4YW1wbGU6CgpgYGAKc3RydWN0IEJhcjsKCnRyYWl0IEZvbyB7CiAgICBmbiBmb28oKTsKfQoKLy8gRGlyZWN0bHkgaW1wbGVtZW50ZWQgbWV0aG9kcyBzaGFyZSB0aGUgdmlzaWJpbGl0eSBvZiB0aGUgdHlwZSBpdHNlbGYsCi8vIHNvIGBwdWJgIGlzIHVubmVjZXNzYXJ5IGhlcmUKaW1wbCBCYXIge30KCi8vIFRyYWl0IG1ldGhvZHMgc2hhcmUgdGhlIHZpc2liaWxpdHkgb2YgdGhlIHRyYWl0LCBzbyBgcHViYCBpcwovLyB1bm5lY2Vzc2FyeSBpbiBlaXRoZXIgY2FzZQppbXBsIEZvbyBmb3IgQmFyIHsKICAgIGZuIGZvbygpIHt9Cn0KYGBgCkUwNDUxQSBzdHJ1Y3QgY29uc3RydWN0b3Igd2l0aCBwcml2YXRlIGZpZWxkcyB3YXMgaW52b2tlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTEKbW9kIGJhciB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIGE6IGlzaXplLAogICAgICAgIGI6IGlzaXplLAogICAgfQp9CgpsZXQgZiA9IGJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIGVycm9yOiBmaWVsZCBgYmAgb2Ygc3RydWN0IGBiYXI6OkZvb2AKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgaXMgcHJpdmF0ZQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgZW5zdXJlIHRoYXQgYWxsIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCBhcmUgcHVibGljLApvciBpbXBsZW1lbnQgYSBmdW5jdGlvbiBmb3IgZWFzeSBpbnN0YW50aWF0aW9uLiBFeGFtcGxlczoKCmBgYAptb2QgYmFyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICBwdWIgYTogaXNpemUsCiAgICAgICAgcHViIGI6IGlzaXplLCAvLyB3ZSBzZXQgYGJgIGZpZWxkIHB1YmxpYwogICAgfQp9CgpsZXQgZiA9IGJhcjo6Rm9veyBhOiAwLCBiOiAwIH07IC8vIG9rIQpgYGAKCk9yOgoKYGBgCm1vZCBiYXIgewogICAgcHViIHN0cnVjdCBGb28gewogICAgICAgIHB1YiBhOiBpc2l6ZSwKICAgICAgICBiOiBpc2l6ZSwgLy8gc3RpbGwgcHJpdmF0ZQogICAgfQoKICAgIGltcGwgRm9vIHsKICAgICAgICBwdWIgZm4gbmV3KCkgLT4gRm9vIHsgLy8gd2UgY3JlYXRlIGEgbWV0aG9kIHRvIGluc3RhbnRpYXRlIGBGb29gCiAgICAgICAgICAgIEZvbyB7IGE6IDAsIGI6IDAgfQogICAgICAgIH0KICAgIH0KfQoKbGV0IGYgPSBiYXI6OkZvbzo6bmV3KCk7IC8vIG9rIQpgYGAKRTA0NTJBbiBpbnZhbGlkIGxpbnQgYXR0cmlidXRlIGhhcyBiZWVuIGdpdmVuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1MgojIVthbGxvdyhmb28gPSAiIildIC8vIGVycm9yOiBtYWxmb3JtZWQgbGludCBhdHRyaWJ1dGUKYGBgCgpMaW50IGF0dHJpYnV0ZXMgb25seSBhY2NlcHQgYSBsaXN0IG9mIGlkZW50aWZpZXJzICh3aGVyZSBlYWNoIGlkZW50aWZpZXIgaXMgYQpsaW50IG5hbWUpLiBFbnN1cmUgdGhlIGF0dHJpYnV0ZSBpcyBvZiB0aGlzIGZvcm06CgpgYGAKIyFbYWxsb3coZm9vKV0gLy8gb2shCi8vIG9yOgojIVthbGxvdyhmb28sIGZvbzIpXSAvLyBvayEKYGBgCkUwNDUzQSBsaW50IGNoZWNrIGF0dHJpYnV0ZSB3YXMgb3ZlcnJ1bGVkIGJ5IGEgYGZvcmJpZGAgZGlyZWN0aXZlIHNldCBhcyBhbgphdHRyaWJ1dGUgb24gYW4gZW5jbG9zaW5nIHNjb3BlLCBvciBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIGAtRmAgb3B0aW9uLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ1MwojIVtmb3JiaWQobm9uX3NuYWtlX2Nhc2UpXQoKI1thbGxvdyhub25fc25ha2VfY2FzZSldCmZuIG1haW4oKSB7CiAgICBsZXQgTXlOdW1iZXIgPSAyOyAvLyBlcnJvcjogYWxsb3cobm9uX3NuYWtlX2Nhc2UpIG92ZXJydWxlZCBieSBvdXRlcgogICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGZvcmJpZChub25fc25ha2VfY2FzZSkKfQpgYGAKClRoZSBgZm9yYmlkYCBsaW50IHNldHRpbmcsIGxpa2UgYGRlbnlgLCB0dXJucyB0aGUgY29ycmVzcG9uZGluZyBjb21waWxlcgp3YXJuaW5nIGludG8gYSBoYXJkIGVycm9yLiBVbmxpa2UgYGRlbnlgLCBgZm9yYmlkYCBwcmV2ZW50cyBpdHNlbGYgZnJvbSBiZWluZwpvdmVycmlkZGVuIGJ5IGlubmVyIGF0dHJpYnV0ZXMuCgpJZiB5b3UncmUgc3VyZSB5b3Ugd2FudCB0byBvdmVycmlkZSB0aGUgbGludCBjaGVjaywgeW91IGNhbiBjaGFuZ2UgYGZvcmJpZGAgdG8KYGRlbnlgIChvciB1c2UgYC1EYCBpbnN0ZWFkIG9mIGAtRmAgaWYgdGhlIGBmb3JiaWRgIHNldHRpbmcgd2FzIGdpdmVuIGFzIGEKY29tbWFuZC1saW5lIG9wdGlvbikgdG8gYWxsb3cgdGhlIGlubmVyIGxpbnQgY2hlY2sgYXR0cmlidXRlOgoKYGBgCiMhW2Rlbnkobm9uX3NuYWtlX2Nhc2UpXQoKI1thbGxvdyhub25fc25ha2VfY2FzZSldCmZuIG1haW4oKSB7CiAgICBsZXQgTXlOdW1iZXIgPSAyOyAvLyBvayEKfQpgYGAKCk90aGVyd2lzZSwgZWRpdCB0aGUgY29kZSB0byBwYXNzIHRoZSBsaW50IGNoZWNrLCBhbmQgcmVtb3ZlIHRoZSBvdmVycnVsZWQKYXR0cmlidXRlOgoKYGBgCiMhW2ZvcmJpZChub25fc25ha2VfY2FzZSldCgpmbiBtYWluKCkgewogICAgbGV0IG15X251bWJlciA9IDI7Cn0KYGBgCkUwNDU0QSBsaW5rIG5hbWUgd2FzIGdpdmVuIHdpdGggYW4gZW1wdHkgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0NTQKI1tsaW5rKG5hbWUgPSAiIildIGV4dGVybiAiQyIge30KLy8gZXJyb3I6IGAjW2xpbmsobmFtZSA9ICIiKV1gIGdpdmVuIHdpdGggZW1wdHkgbmFtZQpgYGAKClRoZSBydXN0IGNvbXBpbGVyIGNhbm5vdCBsaW5rIHRvIGFuIGV4dGVybmFsIGxpYnJhcnkgaWYgeW91IGRvbid0IGdpdmUgaXQgaXRzCm5hbWUuIEV4YW1wbGU6CgpgYGBub19ydW4KI1tsaW5rKG5hbWUgPSAic29tZV9saWIiKV0gZXh0ZXJuICJDIiB7fSAvLyBvayEKYGBgCkUwNDU1U29tZSBsaW5raW5nIGtpbmRzIGFyZSB0YXJnZXQtc3BlY2lmaWMgYW5kIG5vdCBzdXBwb3J0ZWQgb24gYWxsIHBsYXRmb3Jtcy4KCkxpbmtpbmcgd2l0aCBga2luZD1mcmFtZXdvcmtgIGlzIG9ubHkgc3VwcG9ydGVkIHdoZW4gdGFyZ2V0aW5nIG1hY09TLAphcyBmcmFtZXdvcmtzIGFyZSBzcGVjaWZpYyB0byB0aGF0IG9wZXJhdGluZyBzeXN0ZW0uCgpTaW1pbGFybHksIGBraW5kPXJhdy1keWxpYmAgaXMgb25seSBzdXBwb3J0ZWQgd2hlbiB0YXJnZXRpbmcgV2luZG93cy1saWtlCnBsYXRmb3Jtcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKHNob3VsZC1jb21waWxlX2ZhaWwtYnV0LWNhbm5vdC1kb2N0ZXN0LWNvbmRpdGlvbmFsbHktd2l0aG91dC1tYWNvcykKI1tsaW5rKG5hbWUgPSAiRm9vQ29yZVNlcnZpY2VzIiwga2luZCA9ICJmcmFtZXdvcmsiKV0gZXh0ZXJuICJDIiB7fQovLyBPUyB1c2VkIHRvIGNvbXBpbGUgaXMgTGludXggZm9yIGV4YW1wbGUKYGBgCgpUbyBzb2x2ZSB0aGlzIGVycm9yIHlvdSBjYW4gdXNlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uOgoKYGBgCiNbY2ZnX2F0dHIodGFyZ2V0PSJtYWNvcyIsIGxpbmsobmFtZSA9ICJGb29Db3JlU2VydmljZXMiLCBraW5kID0gImZyYW1ld29yayIpKV0KZXh0ZXJuICJDIiB7fQpgYGAKCkxlYXJuIG1vcmUgaW4gdGhlIFtDb25kaXRpb25hbCBDb21waWxhdGlvbl1bY29uZGl0aW9uYWwtY29tcGlsYXRpb25dIHNlY3Rpb24Kb2YgdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMuaHRtbCNjb25kaXRpb25hbC1jb21waWxhdGlvbgpFMDQ1OEFuIHVua25vd24gImtpbmQiIHdhcyBzcGVjaWZpZWQgZm9yIGEgbGluayBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU4CiNbbGluayhraW5kID0gIndvbmRlcmZ1bF91bmljb3JuIildIGV4dGVybiAiQyIge30KLy8gZXJyb3I6IHVua25vd24ga2luZDogYHdvbmRlcmZ1bF91bmljb3JuYApgYGAKClBsZWFzZSBzcGVjaWZ5IGEgdmFsaWQgImtpbmQiIHZhbHVlLCBmcm9tIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKKiBzdGF0aWMKKiBkeWxpYgoqIGZyYW1ld29yawoqIHJhdy1keWxpYgpFMDQ1OUEgbGluayB3YXMgdXNlZCB3aXRob3V0IGEgbmFtZSBwYXJhbWV0ZXIuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDU5CiNbbGluayhraW5kID0gImR5bGliIildIGV4dGVybiAiQyIge30KLy8gZXJyb3I6IGAjW2xpbmsoLi4uKV1gIHNwZWNpZmllZCB3aXRob3V0IGBuYW1lID0gImZvbyJgCmBgYAoKUGxlYXNlIGFkZCB0aGUgbmFtZSBwYXJhbWV0ZXIgdG8gYWxsb3cgdGhlIHJ1c3QgY29tcGlsZXIgdG8gZmluZCB0aGUgbGlicmFyeQp5b3Ugd2FudC4gRXhhbXBsZToKCmBgYG5vX3J1bgojW2xpbmsoa2luZCA9ICJkeWxpYiIsIG5hbWUgPSAic29tZV9saWIiKV0gZXh0ZXJuICJDIiB7fSAvLyBvayEKYGBgCkUwNDYzQSBwbHVnaW4vY3JhdGUgd2FzIGRlY2xhcmVkIGJ1dCBjYW5ub3QgYmUgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDYzCiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGNvb2tpZV9tb25zdGVyKV0gLy8gZXJyb3I6IGNhbid0IGZpbmQgY3JhdGUgZm9yIGBjb29raWVfbW9uc3RlcmAKZXh0ZXJuIGNyYXRlIGNha2VfaXNfYV9saWU7IC8vIGVycm9yOiBjYW4ndCBmaW5kIGNyYXRlIGZvciBgY2FrZV9pc19hX2xpZWAKYGBgCgpZb3UgbmVlZCB0byBsaW5rIHlvdXIgY29kZSB0byB0aGUgcmVsZXZhbnQgY3JhdGUgaW4gb3JkZXIgdG8gYmUgYWJsZSB0byB1c2UgaXQKKHRocm91Z2ggQ2FyZ28gb3IgdGhlIGAtTGAgb3B0aW9uIG9mIHJ1c3RjIGV4YW1wbGUpLiBQbHVnaW5zIGFyZSBjcmF0ZXMgYXMKd2VsbCwgYW5kIHlvdSBsaW5rIHRvIHRoZW0gdGhlIHNhbWUgd2F5LgoKIyMgQ29tbW9uIGNhdXNlcwoKLSBUaGUgY3JhdGUgaXMgbm90IHByZXNlbnQgYXQgYWxsLiBJZiB1c2luZyBDYXJnbywgYWRkIGl0IHRvIGBbZGVwZW5kZW5jaWVzXWAKICBpbiBDYXJnby50b21sLgotIFRoZSBjcmF0ZSBpcyBwcmVzZW50LCBidXQgdW5kZXIgYSBkaWZmZXJlbnQgbmFtZS4gSWYgdXNpbmcgQ2FyZ28sIGxvb2sgZm9yCiAgYHBhY2thZ2UgPSBgIHVuZGVyIGBbZGVwZW5kZW5jaWVzXWAgaW4gQ2FyZ28udG9tbC4KCiMjIENvbW1vbiBjYXVzZXMgZm9yIG1pc3NpbmcgYHN0ZGAgb3IgYGNvcmVgCgotIFlvdSBhcmUgY3Jvc3MtY29tcGlsaW5nIGZvciBhIHRhcmdldCB3aGljaCBkb2Vzbid0IGhhdmUgYHN0ZGAgcHJlcGFja2FnZWQuCiAgQ29uc2lkZXIgb25lIG9mIHRoZSBmb2xsb3dpbmc6CiAgKyBBZGRpbmcgYSBwcmUtY29tcGlsZWQgdmVyc2lvbiBvZiBzdGQgd2l0aCBgcnVzdHVwIHRhcmdldCBhZGRgCiAgKyBCdWlsZGluZyBzdGQgZnJvbSBzb3VyY2Ugd2l0aCBgY2FyZ28gYnVpbGQgLVogYnVpbGQtc3RkYAogICsgVXNpbmcgYCMhW25vX3N0ZF1gIGF0IHRoZSBjcmF0ZSByb290LCBzbyB5b3Ugd29uJ3QgbmVlZCBgc3RkYCBpbiB0aGUgZmlyc3QKICAgIHBsYWNlLgotIFlvdSBhcmUgZGV2ZWxvcGluZyB0aGUgY29tcGlsZXIgaXRzZWxmIGFuZCBoYXZlbid0IGJ1aWx0IGxpYnN0ZCBmcm9tIHNvdXJjZS4KICBZb3UgY2FuIHVzdWFsbHkgYnVpbGQgaXQgd2l0aCBgeC5weSBidWlsZCBsaWJyYXJ5L3N0ZGAuIE1vcmUgaW5mb3JtYXRpb24KICBhYm91dCB4LnB5IGlzIGF2YWlsYWJsZSBpbiB0aGUgW3J1c3RjLWRldi1ndWlkZV0uCgpbcnVzdGMtZGV2LWd1aWRlXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9idWlsZGluZy9ob3ctdG8tYnVpbGQtYW5kLXJ1bi5odG1sI2J1aWxkaW5nLXRoZS1jb21waWxlcgpFMDQ2NFRoZSBjb21waWxlciBmb3VuZCBtdWx0aXBsZSBsaWJyYXJ5IGZpbGVzIHdpdGggdGhlIHJlcXVlc3RlZCBjcmF0ZSBuYW1lLgoKVGhpcyBlcnJvciBjYW4gb2NjdXIgaW4gc2V2ZXJhbCBkaWZmZXJlbnQgY2FzZXMgLS0gZm9yIGV4YW1wbGUsIHdoZW4gdXNpbmcKYGV4dGVybiBjcmF0ZWAgb3IgcGFzc2luZyBgLS1leHRlcm5gIG9wdGlvbnMgd2l0aG91dCBjcmF0ZSBwYXRocy4gSXQgY2FuIGFsc28gYmUKY2F1c2VkIGJ5IGNhY2hpbmcgaXNzdWVzIHdpdGggdGhlIGJ1aWxkIGRpcmVjdG9yeSwgaW4gd2hpY2ggY2FzZSBgY2FyZ28gY2xlYW5gCm1heSBoZWxwLgpFMDQ2Nk1hY3JvIGltcG9ydCBkZWNsYXJhdGlvbiB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBjb21waWxlX2ZhaWwsRTA0NjYKI1ttYWNyb191c2UoYV9tYWNybyhhbm90aGVyX21hY3JvKSldIC8vIGVycm9yOiBpbnZhbGlkIGltcG9ydCBkZWNsYXJhdGlvbgpleHRlcm4gY3JhdGUgY29yZSBhcyBzb21lX2NyYXRlOwoKI1ttYWNyb191c2UoaV93YW50ID0gInNvbWVfbWFjcm9zIildIC8vIGVycm9yOiBpbnZhbGlkIGltcG9ydCBkZWNsYXJhdGlvbgpleHRlcm4gY3JhdGUgY29yZSBhcyBhbm90aGVyX2NyYXRlOwpgYGAKClRoaXMgaXMgYSBzeW50YXggZXJyb3IgYXQgdGhlIGxldmVsIG9mIGF0dHJpYnV0ZSBkZWNsYXJhdGlvbnMuIFRoZSBwcm9wZXIKc3ludGF4IGZvciBtYWNybyBpbXBvcnRzIGlzIHRoZSBmb2xsb3dpbmc6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKLy8gSW4gc29tZV9jcmF0ZToKI1ttYWNyb19leHBvcnRdCm1hY3JvX3J1bGVzISBnZXRfdGFjb3MgewogICAgLi4uCn0KCiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZ2V0X3BpbWllbnRvcyB7CiAgICAuLi4KfQoKLy8gSW4geW91ciBjcmF0ZToKI1ttYWNyb191c2UoZ2V0X3RhY29zLCBnZXRfcGltaWVudG9zKV0gLy8gSXQgaW1wb3J0cyBgZ2V0X3RhY29zYCBhbmQKZXh0ZXJuIGNyYXRlIHNvbWVfY3JhdGU7ICAgICAgICAgICAgICAgLy8gYGdldF9waW1pZW50b3NgIG1hY3JvcyBmcm9tIHNvbWVfY3JhdGUKYGBgCgpJZiB5b3Ugd291bGQgbGlrZSB0byBpbXBvcnQgYWxsIGV4cG9ydGVkIG1hY3Jvcywgd3JpdGUgYG1hY3JvX3VzZWAgd2l0aCBubwphcmd1bWVudHMuCkUwNDY4QSBub24tcm9vdCBtb2R1bGUgdHJpZWQgdG8gaW1wb3J0IG1hY3JvcyBmcm9tIGFub3RoZXIgY3JhdGUuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDY4Cm1vZCBmb28gewogICAgI1ttYWNyb191c2UoZGVidWdfYXNzZXJ0KV0gIC8vIGVycm9yOiBtdXN0IGJlIGF0IGNyYXRlIHJvb3QgdG8gaW1wb3J0CiAgICBleHRlcm4gY3JhdGUgY29yZTsgICAgICAgICAgLy8gICAgICAgIG1hY3JvcyBmcm9tIGFub3RoZXIgY3JhdGUKICAgIGZuIHJ1bl9tYWNybygpIHsgZGVidWdfYXNzZXJ0ISh0cnVlKTsgfQp9CmBgYAoKT25seSBgZXh0ZXJuIGNyYXRlYCBpbXBvcnRzIGF0IHRoZSBjcmF0ZSByb290IGxldmVsIGFyZSBhbGxvd2VkIHRvIGltcG9ydAptYWNyb3MuCgpFaXRoZXIgbW92ZSB0aGUgbWFjcm8gaW1wb3J0IHRvIGNyYXRlIHJvb3Qgb3IgZG8gd2l0aG91dCB0aGUgZm9yZWlnbiBtYWNyb3MuClRoaXMgd2lsbCB3b3JrOgoKYGBgCiNbbWFjcm9fdXNlKGRlYnVnX2Fzc2VydCldIC8vIG9rIQpleHRlcm4gY3JhdGUgY29yZTsKCm1vZCBmb28gewogICAgZm4gcnVuX21hY3JvKCkgeyBkZWJ1Z19hc3NlcnQhKHRydWUpOyB9Cn0KIyBmbiBtYWluKCkge30KYGBgCkUwNDY5QSBtYWNybyBsaXN0ZWQgZm9yIGltcG9ydCB3YXMgbm90IGZvdW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ2OQojW21hY3JvX3VzZShkcmluaywgYmVfbWVycnkpXSAvLyBlcnJvcjogaW1wb3J0ZWQgbWFjcm8gbm90IGZvdW5kCmV4dGVybiBjcmF0ZSBhbGxvYzsKCmZuIG1haW4oKSB7CiAgICAvLyAuLi4KfQpgYGAKCkVpdGhlciB0aGUgbGlzdGVkIG1hY3JvIGlzIG5vdCBjb250YWluZWQgaW4gdGhlIGltcG9ydGVkIGNyYXRlLCBvciBpdCBpcyBub3QKZXhwb3J0ZWQgZnJvbSB0aGUgZ2l2ZW4gY3JhdGUuCgpUaGlzIGNvdWxkIGJlIGNhdXNlZCBieSBhIHR5cG8uIERpZCB5b3UgbWlzc3BlbGwgdGhlIG1hY3JvJ3MgbmFtZT8KCkRvdWJsZS1jaGVjayB0aGUgbmFtZXMgb2YgdGhlIG1hY3JvcyBsaXN0ZWQgZm9yIGltcG9ydCwgYW5kIHRoYXQgdGhlIGNyYXRlCmluIHF1ZXN0aW9uIGV4cG9ydHMgdGhlbS4KCkEgd29ya2luZyB2ZXJzaW9uIHdvdWxkIGJlOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1tdWx0aWNyYXRlLXByb2plY3QpCi8vIEluIHNvbWVfY3JhdGUgY3JhdGU6CiNbbWFjcm9fZXhwb3J0XQptYWNyb19ydWxlcyEgZWF0IHsKICAgIC4uLgp9CgojW21hY3JvX2V4cG9ydF0KbWFjcm9fcnVsZXMhIGRyaW5rIHsKICAgIC4uLgp9CgovLyBJbiB5b3VyIGNyYXRlOgojW21hY3JvX3VzZShlYXQsIGRyaW5rKV0KZXh0ZXJuIGNyYXRlIHNvbWVfY3JhdGU7IC8vb2shCmBgYApFMDQ3NyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSB0eXBlIGRvZXMgbm90IGZ1bGZpbGwgdGhlIHJlcXVpcmVkIGxpZmV0aW1lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAp1c2Ugc3RkOjpzeW5jOjpNdXRleDsKCnN0cnVjdCBNeVN0cmluZzwnYT4gewogICAgZGF0YTogJidhIHN0ciwKfQoKZm4gaV93YW50X3N0YXRpY19jbG9zdXJlPEY+KGE6IEYpCiAgICB3aGVyZSBGOiBGbigpICsgJ3N0YXRpYyB7fQoKZm4gcHJpbnRfc3RyaW5nPCdhPihzOiBNdXRleDxNeVN0cmluZzwnYT4+KSB7CgogICAgaV93YW50X3N0YXRpY19jbG9zdXJlKG1vdmUgfHwgeyAgICAgLy8gZXJyb3I6IHRoaXMgY2xvc3VyZSBoYXMgbGlmZXRpbWUgJ2EKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICByYXRoZXIgdGhhbiAnc3RhdGljCiAgICAgICAgcHJpbnRsbiEoInt9Iiwgcy5sb2NrKCkudW53cmFwKCkuZGF0YSk7CiAgICB9KTsKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgdGhlIGNsb3N1cmUgZG9lcyBub3Qgc2F0aXNmeSB0aGUgYCdzdGF0aWNgIGxpZmV0aW1lIGNvbnN0cmFpbnQuClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhlIGxpZmV0aW1lIG9mIHRoZSB0eXBlLiBIZXJlLCB3ZQpjYW4gZml4IHRoaXMgcHJvYmxlbSBieSBnaXZpbmcgYHNgIGEgc3RhdGljIGxpZmV0aW1lOgoKYGBgCnVzZSBzdGQ6OnN5bmM6Ok11dGV4OwoKc3RydWN0IE15U3RyaW5nPCdhPiB7CiAgICBkYXRhOiAmJ2Egc3RyLAp9CgpmbiBpX3dhbnRfc3RhdGljX2Nsb3N1cmU8Rj4oYTogRikKICAgIHdoZXJlIEY6IEZuKCkgKyAnc3RhdGljIHt9CgpmbiBwcmludF9zdHJpbmcoczogTXV0ZXg8TXlTdHJpbmc8J3N0YXRpYz4+KSB7CgogICAgaV93YW50X3N0YXRpY19jbG9zdXJlKG1vdmUgfHwgeyAgICAgLy8gb2shCiAgICAgICAgcHJpbnRsbiEoInt9Iiwgcy5sb2NrKCkudW53cmFwKCkuZGF0YSk7CiAgICB9KTsKfQpgYGAKRTA0NzhBIGxpZmV0aW1lIGJvdW5kIHdhcyBub3Qgc2F0aXNmaWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ3OAovLyBDaGVjayB0aGF0IHRoZSBleHBsaWNpdCBsaWZldGltZSBib3VuZCAoYCdTbm93V2hpdGVgLCBpbiB0aGlzIGV4YW1wbGUpIG11c3QKLy8gb3V0bGl2ZSBhbGwgdGhlIHN1cGVyYm91bmRzIGZyb20gdGhlIHRyYWl0IChgJ2tpc3NgLCBpbiB0aGlzIGV4YW1wbGUpLgoKdHJhaXQgV2VkZGluZzwndD46ICd0IHsgfQoKc3RydWN0IFByaW5jZTwna2lzcywgJ1Nub3dXaGl0ZT4gewogICAgY2hpbGQ6IEJveDxXZWRkaW5nPCdraXNzPiArICdTbm93V2hpdGU+LAogICAgLy8gZXJyb3I6IGxpZmV0aW1lIGJvdW5kIG5vdCBzYXRpc2ZpZWQKfQpgYGAKCkluIHRoaXMgZXhhbXBsZSwgdGhlIGAnU25vd1doaXRlYCBsaWZldGltZSBpcyBzdXBwb3NlZCB0byBvdXRsaXZlIHRoZSBgJ2tpc3NgCmxpZmV0aW1lIGJ1dCB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGBQcmluY2VgIHN0cnVjdCBkb2Vzbid0IGVuZm9yY2UgaXQuIFRvIGZpeAp0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBzcGVjaWZ5IGl0OgoKYGBgCnRyYWl0IFdlZGRpbmc8J3Q+OiAndCB7IH0KCnN0cnVjdCBQcmluY2U8J2tpc3MsICdTbm93V2hpdGU6ICdraXNzPiB7IC8vIFlvdSBzYXkgaGVyZSB0aGF0ICdTbm93V2hpdGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbXVzdCBsaXZlIGxvbmdlciB0aGFuICdraXNzLgogICAgY2hpbGQ6IEJveDxXZWRkaW5nPCdraXNzPiArICdTbm93V2hpdGU+LCAvLyBBbmQgbm93IGl0J3MgYWxsIGdvb2QhCn0KYGBgCkUwNDgyIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBsaWZldGltZSBvZiBhIHJldHVybmVkIHZhbHVlIGRvZXMgbm90IG91dGxpdmUgdGhlIGZ1bmN0aW9uIGNhbGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCmZuIHByZWZpeDwnYT4oCiAgICB3b3JkczogaW1wbCBJdGVyYXRvcjxJdGVtID0gJidhIHN0cj4KKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+IHsgLy8gZXJyb3IhCiAgICB3b3Jkcy5tYXAofHZ8IGZvcm1hdCEoImZvby17fSIsIHYpKQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIG1ha2UgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXR1cm5lZCB2YWx1ZSBleHBsaWNpdDoKCmBgYApmbiBwcmVmaXg8J2E+KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnYSBzdHI+ICsgJ2EKKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+ICsgJ2EgeyAvLyBvayEKICAgIHdvcmRzLm1hcCh8dnwgZm9ybWF0ISgiZm9vLXt9IiwgdikpCn0KYGBgCgpUaGUgW2BpbXBsIFRyYWl0YF0gZmVhdHVyZSBpbiB0aGlzIGV4YW1wbGUgdXNlcyBhbiBpbXBsaWNpdCBgJ3N0YXRpY2AgbGlmZXRpbWUKcmVzdHJpY3Rpb24gaW4gdGhlIHJldHVybmVkIHR5cGUuIEhvd2V2ZXIgdGhlIHR5cGUgaW1wbGVtZW50aW5nIHRoZSBgSXRlcmF0b3JgCnBhc3NlZCB0byB0aGUgZnVuY3Rpb24gbGl2ZXMganVzdCBhcyBsb25nIGFzIGAnYWAsIHdoaWNoIGlzIG5vdCBsb25nIGVub3VnaC4KClRoZSBzb2x1dGlvbiBpbnZvbHZlcyBhZGRpbmcgbGlmZXRpbWUgYm91bmQgdG8gYm90aCBmdW5jdGlvbiBhcmd1bWVudCBhbmQKdGhlIHJldHVybiB2YWx1ZSB0byBtYWtlIHN1cmUgdGhhdCB0aGUgdmFsdWVzIGluc2lkZSB0aGUgaXRlcmF0b3IKYXJlIG5vdCBkcm9wcGVkIHdoZW4gdGhlIGZ1bmN0aW9uIGdvZXMgb3V0IG9mIHRoZSBzY29wZS4KCkFuIGFsdGVybmF0aXZlIHNvbHV0aW9uIHdvdWxkIGJlIHRvIGd1YXJhbnRlZSB0aGF0IHRoZSBgSXRlbWAgcmVmZXJlbmNlcwppbiB0aGUgaXRlcmF0b3IgYXJlIGFsaXZlIGZvciB0aGUgd2hvbGUgbGlmZXRpbWUgb2YgdGhlIHByb2dyYW0uCgpgYGAKZm4gcHJlZml4KAogICAgd29yZHM6IGltcGwgSXRlcmF0b3I8SXRlbSA9ICYnc3RhdGljIHN0cj4KKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW0gPSBTdHJpbmc+IHsgIC8vIG9rIQogICAgd29yZHMubWFwKHx2fCBmb3JtYXQhKCJmb28te30iLCB2KSkKfQpgYGAKCkEgc2ltaWxhciBsaWZldGltZSBwcm9ibGVtIG1pZ2h0IGFyaXNlIHdoZW4gcmV0dXJuaW5nIGNsb3N1cmVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCmZuIGZvbygKICAgIHg6ICZtdXQgVmVjPGkzMj4KKSAtPiBpbXBsIEZuTXV0KCZtdXQgVmVjPGkzMj4pIC0+ICZbaTMyXSB7IC8vIGVycm9yIQogICAgfHl8IHsKICAgICAgICB5LmFwcGVuZCh4KTsKICAgICAgICB5CiAgICB9Cn0KYGBgCgpBbmFsb2dpY2FsbHksIGEgc29sdXRpb24gaGVyZSBpcyB0byB1c2UgZXhwbGljaXQgcmV0dXJuIGxpZmV0aW1lCmFuZCBtb3ZlIHRoZSBvd25lcnNoaXAgb2YgdGhlIHZhcmlhYmxlIHRvIHRoZSBjbG9zdXJlLgoKYGBgCmZuIGZvbzwnYT4oCiAgICB4OiAmJ2EgbXV0IFZlYzxpMzI+CikgLT4gaW1wbCBGbk11dCgmbXV0IFZlYzxpMzI+KSAtPiAmW2kzMl0gKyAnYSB7IC8vIG9rIQogICAgbW92ZSB8eXwgewogICAgICAgIHkuYXBwZW5kKHgpOwogICAgICAgIHkKICAgIH0KfQpgYGAKClRvIGJldHRlciB1bmRlcnN0YW5kIHRoZSBsaWZldGltZSB0cmVhdG1lbnQgaW4gdGhlIFtgaW1wbCBUcmFpdGBdLApwbGVhc2Ugc2VlIHRoZSBbUkZDIDE5NTFdLgoKW2BpbXBsIFRyYWl0YF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL3R5cGVzL2ltcGwtdHJhaXQuaHRtbApbUkZDIDE5NTFdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8xOTUxLWV4cGFuZC1pbXBsLXRyYWl0Lmh0bWwKRTA0OTFBIHJlZmVyZW5jZSBoYXMgYSBsb25nZXIgbGlmZXRpbWUgdGhhbiB0aGUgZGF0YSBpdCByZWZlcmVuY2VzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5MQpzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBmbigmJ2EgaTMyKSwKfQoKdHJhaXQgVHJhaXQ8J2EsICdiPiB7CiAgICB0eXBlIE91dDsKfQoKaW1wbDwnYSwgJ2I+IFRyYWl0PCdhLCAnYj4gZm9yIHVzaXplIHsKICAgIHR5cGUgT3V0ID0gJidhIEZvbzwnYj47IC8vIGVycm9yIQp9CmBgYAoKSGVyZSwgdGhlIHByb2JsZW0gaXMgdGhhdCB0aGUgY29tcGlsZXIgY2Fubm90IGJlIHN1cmUgdGhhdCB0aGUgYCdiYCBsaWZldGltZQp3aWxsIGxpdmUgbG9uZ2VyIHRoYW4gYCdhYCwgd2hpY2ggc2hvdWxkIGJlIG1hbmRhdG9yeSBpbiBvcmRlciB0byBiZSBzdXJlIHRoYXQKYFRyYWl0OjpPdXRgIHdpbGwgYWx3YXlzIGhhdmUgYSByZWZlcmVuY2UgcG9pbnRpbmcgdG8gYW4gZXhpc3RpbmcgdHlwZS4gU28gaW4KdGhpcyBjYXNlLCB3ZSBqdXN0IG5lZWQgdG8gdGVsbCB0aGUgY29tcGlsZXIgdGhhbiBgJ2JgIG11c3Qgb3V0bGl2ZSBgJ2FgOgoKYGBgCnN0cnVjdCBGb288J2E+IHsKICAgIHg6IGZuKCYnYSBpMzIpLAp9Cgp0cmFpdCBUcmFpdDwnYSwgJ2I+IHsKICAgIHR5cGUgT3V0Owp9CgppbXBsPCdhLCAnYjogJ2E+IFRyYWl0PCdhLCAnYj4gZm9yIHVzaXplIHsgLy8gd2UgYWRkZWQgdGhlIGxpZmV0aW1lIGVuZm9yY2VtZW50CiAgICB0eXBlIE91dCA9ICYnYSBGb288J2I+OyAvLyBpdCBub3cgd29ya3MhCn0KYGBgCkUwNDkyQSBib3Jyb3cgb2YgYSBjb25zdGFudCBjb250YWluaW5nIGludGVyaW9yIG11dGFiaWxpdHkgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTIKdXNlIHN0ZDo6c3luYzo6YXRvbWljOjpBdG9taWNVc2l6ZTsKCmNvbnN0IEE6IEF0b21pY1VzaXplID0gQXRvbWljVXNpemU6Om5ldygwKTsKY29uc3QgQjogJidzdGF0aWMgQXRvbWljVXNpemUgPSAmQTsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYSBjb25zdGFudCB3aGljaCBtYXkgY29udGFpbiBpbnRlcmlvciBtdXRhYmlsaXR5LAovLyAgICAgICAgY3JlYXRlIGEgc3RhdGljIGluc3RlYWQKYGBgCgpBIGBjb25zdGAgcmVwcmVzZW50cyBhIGNvbnN0YW50IHZhbHVlIHRoYXQgc2hvdWxkIG5ldmVyIGNoYW5nZS4gSWYgb25lIHRha2VzCmEgYCZgIHJlZmVyZW5jZSB0byB0aGUgY29uc3RhbnQsIHRoZW4gb25lIGlzIHRha2luZyBhIHBvaW50ZXIgdG8gc29tZSBtZW1vcnkKbG9jYXRpb24gY29udGFpbmluZyB0aGUgdmFsdWUuIE5vcm1hbGx5IHRoaXMgaXMgcGVyZmVjdGx5IGZpbmU6IG1vc3QgdmFsdWVzCmNhbid0IGJlIGNoYW5nZWQgdmlhIGEgc2hhcmVkIGAmYCBwb2ludGVyLCBidXQgaW50ZXJpb3IgbXV0YWJpbGl0eSB3b3VsZCBhbGxvdwppdC4gVGhhdCBpcywgYSBjb25zdGFudCB2YWx1ZSBjb3VsZCBiZSBtdXRhdGVkLiBPbiB0aGUgb3RoZXIgaGFuZCwgYSBgc3RhdGljYCBpcwpleHBsaWNpdGx5IGEgc2luZ2xlIG1lbW9yeSBsb2NhdGlvbiwgd2hpY2ggY2FuIGJlIG11dGF0ZWQgYXQgd2lsbC4KClNvLCBpbiBvcmRlciB0byBzb2x2ZSB0aGlzIGVycm9yLCB1c2Ugc3RhdGljcyB3aGljaCBhcmUgYFN5bmNgOgoKYGBgCnVzZSBzdGQ6OnN5bmM6OmF0b21pYzo6QXRvbWljVXNpemU7CgpzdGF0aWMgQTogQXRvbWljVXNpemUgPSBBdG9taWNVc2l6ZTo6bmV3KDApOwpzdGF0aWMgQjogJidzdGF0aWMgQXRvbWljVXNpemUgPSAmQTsgLy8gb2shCmBgYAoKWW91IGNhbiBhbHNvIGhhdmUgdGhpcyBlcnJvciB3aGlsZSB1c2luZyBhIGNlbGwgdHlwZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5Mgp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKY29uc3QgQTogQ2VsbDx1c2l6ZT4gPSBDZWxsOjpuZXcoMSk7CmNvbnN0IEI6ICZDZWxsPHVzaXplPiA9ICZBOwovLyBlcnJvcjogY2Fubm90IGJvcnJvdyBhIGNvbnN0YW50IHdoaWNoIG1heSBjb250YWluIGludGVyaW9yIG11dGFiaWxpdHksCi8vICAgICAgICBjcmVhdGUgYSBzdGF0aWMgaW5zdGVhZAoKLy8gb3I6CnN0cnVjdCBDIHsgYTogQ2VsbDx1c2l6ZT4gfQoKY29uc3QgRDogQyA9IEMgeyBhOiBDZWxsOjpuZXcoMSkgfTsKY29uc3QgRTogJkNlbGw8dXNpemU+ID0gJkQuYTsgLy8gZXJyb3IKCi8vIG9yOgpjb25zdCBGOiAmQyA9ICZEOyAvLyBlcnJvcgpgYGAKClRoaXMgaXMgYmVjYXVzZSBjZWxsIHR5cGVzIGRvIG9wZXJhdGlvbnMgdGhhdCBhcmUgbm90IHRocmVhZC1zYWZlLiBEdWUgdG8gdGhpcywKdGhleSBkb24ndCBpbXBsZW1lbnQgU3luYyBhbmQgdGh1cyBjYW4ndCBiZSBwbGFjZWQgaW4gc3RhdGljcy4KCkhvd2V2ZXIsIGlmIHlvdSBzdGlsbCB3aXNoIHRvIHVzZSB0aGVzZSB0eXBlcywgeW91IGNhbiBhY2hpZXZlIHRoaXMgYnkgYW4gdW5zYWZlCndyYXBwZXI6CgpgYGAKdXNlIHN0ZDo6Y2VsbDo6Q2VsbDsKdXNlIHN0ZDo6bWFya2VyOjpTeW5jOwoKc3RydWN0IE5vdFRocmVhZFNhZmU8VD4gewogICAgdmFsdWU6IENlbGw8VD4sCn0KCnVuc2FmZSBpbXBsPFQ+IFN5bmMgZm9yIE5vdFRocmVhZFNhZmU8VD4ge30KCnN0YXRpYyBBOiBOb3RUaHJlYWRTYWZlPHVzaXplPiA9IE5vdFRocmVhZFNhZmUgeyB2YWx1ZSA6IENlbGw6Om5ldygxKSB9OwpzdGF0aWMgQjogJidzdGF0aWMgTm90VGhyZWFkU2FmZTx1c2l6ZT4gPSAmQTsgLy8gb2shCmBgYAoKUmVtZW1iZXIgdGhpcyBzb2x1dGlvbiBpcyB1bnNhZmUhIFlvdSB3aWxsIGhhdmUgdG8gZW5zdXJlIHRoYXQgYWNjZXNzZXMgdG8gdGhlCmNlbGwgYXJlIHN5bmNocm9uaXplZC4KRTA0OTNBIHZhbHVlIHdpdGggYSBjdXN0b20gYERyb3BgIGltcGxlbWVudGF0aW9uIG1heSBiZSBkcm9wcGVkIGR1cmluZyBjb25zdC1ldmFsLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5MwplbnVtIERyb3BUeXBlIHsKICAgIEEsCn0KCmltcGwgRHJvcCBmb3IgRHJvcFR5cGUgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHt9Cn0KCnN0cnVjdCBGb28gewogICAgZmllbGQxOiBEcm9wVHlwZSwKfQoKc3RhdGljIEZPTzogRm9vID0gRm9vIHsgZmllbGQxOiAoRHJvcFR5cGU6OkEsIERyb3BUeXBlOjpBKS4xIH07IC8vIGVycm9yIQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCBpZiB0aGUgZ2l2ZW4gdHlwZSBvciBvbmUgb2YgaXRzIGZpZWxkcyBpbXBsZW1lbnRzIHRoZQpgRHJvcGAgdHJhaXQsIHRoaXMgYERyb3BgIGltcGxlbWVudGF0aW9uIGNhbm5vdCBiZSBjYWxsZWQgd2l0aGluIGEgY29uc3QKY29udGV4dCBzaW5jZSBpdCBtYXkgcnVuIGFyYml0cmFyeSwgbm9uLWNvbnN0LWNoZWNrZWQgY29kZS4gVG8gcHJldmVudCB0aGlzCmlzc3VlLCBlbnN1cmUgYWxsIHZhbHVlcyB3aXRoIGEgY3VzdG9tIGBEcm9wYCBpbXBsZW1lbnRhdGlvbiBlc2NhcGUgdGhlCmluaXRpYWxpemVyLgoKYGBgCmVudW0gRHJvcFR5cGUgewogICAgQSwKfQoKaW1wbCBEcm9wIGZvciBEcm9wVHlwZSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikge30KfQoKc3RydWN0IEZvbyB7CiAgICBmaWVsZDE6IERyb3BUeXBlLAp9CgpzdGF0aWMgRk9POiBGb28gPSBGb28geyBmaWVsZDE6IERyb3BUeXBlOjpBIH07IC8vIFdlIGluaXRpYWxpemUgYWxsIGZpZWxkcwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGJ5IGhhbmQuCmBgYApFMDQ5NSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgbGlmZXRpbWUgY2Fubm90IGJlIGRldGVybWluZWQgaW4gdGhlIGdpdmVuIHNpdHVhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKZm4gdHJhbnNtdXRlX2xpZmV0aW1lPCdhLCAnYiwgVD4odDogJidhIChULCkpIC0+ICYnYiBUIHsKICAgIG1hdGNoICgmdCwpIHsgLy8gZXJyb3IhCiAgICAgICAgKCh1LCksKSA9PiB1LAogICAgfQp9CgpsZXQgeSA9IEJveDo6bmV3KCg0MiwpKTsKbGV0IHggPSB0cmFuc211dGVfbGlmZXRpbWUoJnkpOwpgYGAKCkluIHRoaXMgY29kZSwgeW91IGhhdmUgdHdvIHdheXMgdG8gc29sdmUgdGhpcyBpc3N1ZToKIDEuIEVuZm9yY2UgdGhhdCBgJ2FgIGxpdmVzIGF0IGxlYXN0IGFzIGxvbmcgYXMgYCdiYC4KIDIuIFVzZSB0aGUgc2FtZSBsaWZldGltZSByZXF1aXJlbWVudCBmb3IgYm90aCBpbnB1dCBhbmQgb3V0cHV0IHZhbHVlcy4KClNvIGZvciB0aGUgZmlyc3Qgc29sdXRpb24sIHlvdSBjYW4gZG8gaXQgYnkgcmVwbGFjaW5nIGAnYWAgd2l0aCBgJ2E6ICdiYDoKCmBgYApmbiB0cmFuc211dGVfbGlmZXRpbWU8J2E6ICdiLCAnYiwgVD4odDogJidhIChULCkpIC0+ICYnYiBUIHsKICAgIG1hdGNoICgmdCwpIHsgLy8gb2shCiAgICAgICAgKCh1LCksKSA9PiB1LAogICAgfQp9CmBgYAoKSW4gdGhlIHNlY29uZCB5b3UgY2FuIGRvIGl0IGJ5IHNpbXBseSByZW1vdmluZyBgJ2JgIHNvIHRoZXkgYm90aCB1c2UgYCdhYDoKCmBgYApmbiB0cmFuc211dGVfbGlmZXRpbWU8J2EsIFQ+KHQ6ICYnYSAoVCwpKSAtPiAmJ2EgVCB7CiAgICBtYXRjaCAoJnQsKSB7IC8vIG9rIQogICAgICAgICgodSwpLCkgPT4gdSwKICAgIH0KfQpgYGAKRTA0OTZBIGxpZmV0aW1lIG5hbWUgaXMgc2hhZG93aW5nIGFub3RoZXIgbGlmZXRpbWUgbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA0OTYKc3RydWN0IEZvbzwnYT4gewogICAgYTogJidhIGkzMiwKfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBmPCdhPih4OiAmJ2EgaTMyKSB7IC8vIGVycm9yOiBsaWZldGltZSBuYW1lIGAnYWAgc2hhZG93cyBhIGxpZmV0aW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBuYW1lIHRoYXQgaXMgYWxyZWFkeSBpbiBzY29wZQogICAgfQp9CmBgYAoKUGxlYXNlIGNoYW5nZSB0aGUgbmFtZSBvZiBvbmUgb2YgdGhlIGxpZmV0aW1lcyB0byByZW1vdmUgdGhpcyBlcnJvci4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICBhOiAmJ2EgaTMyLAp9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGY8J2I+KHg6ICYnYiBpMzIpIHsgLy8gb2shCiAgICB9Cn0KCmZuIG1haW4oKSB7Cn0KYGBgCkUwNDk3IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQSBzdGFiaWxpdHkgYXR0cmlidXRlIHdhcyB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCiNbc3RhYmxlXSAvLyBlcnJvcjogc3RhYmlsaXR5IGF0dHJpYnV0ZXMgbWF5IG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgdGhlCiAgICAgICAgICAvLyAgICAgICAgc3RhbmRhcmQgbGlicmFyeQpmbiBmb28oKSB7fQpgYGAKCkl0IGlzIG5vdCBwb3NzaWJsZSB0byB1c2Ugc3RhYmlsaXR5IGF0dHJpYnV0ZXMgb3V0c2lkZSBvZiB0aGUgc3RhbmRhcmQgbGlicmFyeS4KQWxzbywgZm9yIG5vdywgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHdyaXRlIGRlcHJlY2F0aW9uIG1lc3NhZ2VzIGVpdGhlci4KRTA0OThUaGUgYHBsdWdpbmAgYXR0cmlidXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNDk4CiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyhhcmdzKSldIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CiMhW3BsdWdpbihiYXI9InRlc3QiKV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKYGBgCgpUaGUgYCNbcGx1Z2luXWAgYXR0cmlidXRlIHNob3VsZCB0YWtlIGEgc2luZ2xlIGFyZ3VtZW50OiB0aGUgbmFtZSBvZiB0aGUgcGx1Z2luLgoKRm9yIGV4YW1wbGUsIGZvciB0aGUgcGx1Z2luIGBmb29gOgoKYGBgaWdub3JlIChyZXF1aXJlcyBleHRlcm5hbCBwbHVnaW4gY3JhdGUpCiMhW2ZlYXR1cmUocGx1Z2luKV0KIyFbcGx1Z2luKGZvbyldIC8vIG9rIQpgYGAKClNlZSB0aGUgW2BwbHVnaW5gIGZlYXR1cmVdIHNlY3Rpb24gb2YgdGhlIFVuc3RhYmxlIGJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltgcGx1Z2luYCBmZWF0dXJlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvcGx1Z2luLmh0bWwKRTA0OTlBIHZhcmlhYmxlIHdhcyBib3Jyb3dlZCBhcyBtdXRhYmxlIG1vcmUgdGhhbiBvbmNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDQ5OQpsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7CmxldCBtdXQgYSA9ICZtdXQgaTsKeDsKLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYGlgIGFzIG11dGFibGUgbW9yZSB0aGFuIG9uY2UgYXQgYSB0aW1lCmBgYAoKUGxlYXNlIG5vdGUgdGhhdCBpbiBSdXN0LCB5b3UgY2FuIGVpdGhlciBoYXZlIG1hbnkgaW1tdXRhYmxlIHJlZmVyZW5jZXMsIG9yIG9uZQptdXRhYmxlIHJlZmVyZW5jZS4gRm9yIG1vcmUgZGV0YWlscyB5b3UgbWF5IHdhbnQgdG8gcmVhZCB0aGUKW1JlZmVyZW5jZXMgJiBCb3Jyb3dpbmddW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ10gc2VjdGlvbiBvZiB0aGUgQm9vay4KCltyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gwNC0wMi1yZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmcuaHRtbAoKRXhhbXBsZToKCmBgYApsZXQgbXV0IGkgPSAwOwpsZXQgbXV0IHggPSAmbXV0IGk7IC8vIG9rIQoKLy8gb3I6CmxldCBtdXQgaSA9IDA7CmxldCBhID0gJmk7IC8vIG9rIQpsZXQgYiA9ICZpOyAvLyBzdGlsbCBvayEKbGV0IGMgPSAmaTsgLy8gc3RpbGwgb2shCmI7CmE7CmBgYApFMDUwMEEgYm9ycm93ZWQgdmFyaWFibGUgd2FzIHVzZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMApmbiB5b3Vfa25vd19ub3RoaW5nKGpvbl9zbm93OiAmbXV0IGkzMikgewogICAgbGV0IG5pZ2h0c193YXRjaCA9ICZqb25fc25vdzsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsgLy8gZXJyb3I6IGNsb3N1cmUgcmVxdWlyZXMgdW5pcXVlIGFjY2VzcyB0byBgam9uX3Nub3dgCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGJ1dCBpdCBpcyBhbHJlYWR5IGJvcnJvd2VkCiAgICB9OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKfQpgYGAKCkluIGhlcmUsIGBqb25fc25vd2AgaXMgYWxyZWFkeSBib3Jyb3dlZCBieSB0aGUgYG5pZ2h0c193YXRjaGAgcmVmZXJlbmNlLCBzbyBpdApjYW5ub3QgYmUgYm9ycm93ZWQgYnkgdGhlIGBzdGFya3NgIGNsb3N1cmUgYXQgdGhlIHNhbWUgdGltZS4gVG8gZml4IHRoaXMgaXNzdWUsCnlvdSBjYW4gY3JlYXRlIHRoZSBjbG9zdXJlIGFmdGVyIHRoZSBib3Jyb3cgaGFzIGVuZGVkOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbmlnaHRzX3dhdGNoID0gJmpvbl9zbm93OwogICAgcHJpbnRsbiEoInt9IiwgbmlnaHRzX3dhdGNoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07Cn0KYGBgCgpPciwgaWYgdGhlIHR5cGUgaW1wbGVtZW50cyB0aGUgYENsb25lYCB0cmFpdCwgeW91IGNhbiBjbG9uZSBpdCBiZXR3ZWVuCmNsb3N1cmVzOgoKYGBgCmZuIHlvdV9rbm93X25vdGhpbmcoam9uX3Nub3c6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGpvbl9jb3B5ID0gam9uX3Nub3cuY2xvbmUoKTsKICAgIGxldCBzdGFya3MgPSB8fCB7CiAgICAgICAgKmpvbl9zbm93ID0gMzsKICAgIH07CiAgICBwcmludGxuISgie30iLCBqb25fY29weSk7Cn0KYGBgCkUwNTAxQSBtdXRhYmxlIHZhcmlhYmxlIGlzIHVzZWQgYnV0IGl0IGlzIGFscmVhZHkgY2FwdHVyZWQgYnkgYSBjbG9zdXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMQpmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikgewogICAgLy8gQWN0aW9ucyB3aGljaCByZXF1aXJlIHVuaXF1ZSBhY2Nlc3MKfQoKZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7CiAgICAvLyBBY3Rpb25zIHdoaWNoIHJlcXVpcmUgdW5pcXVlIGFjY2Vzcwp9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOyAvLyBlcnJvcjogY2Fubm90IGJvcnJvdyBgKmFgIGFzIG11dGFibGUgYmVjYXVzZSBwcmV2aW91cwogICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgY2xvc3VyZSByZXF1aXJlcyB1bmlxdWUgYWNjZXNzLgogICAgYmFyKCk7Cn0KYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IGEgbXV0YWJsZSB2YXJpYWJsZSBpcyB1c2VkIHdoaWxlIGl0IGlzIHN0aWxsIGNhcHR1cmVkCmJ5IGEgY2xvc3VyZS4gQmVjYXVzZSB0aGUgY2xvc3VyZSBoYXMgYm9ycm93ZWQgdGhlIHZhcmlhYmxlLCBpdCBpcyBub3QgYXZhaWxhYmxlCnVudGlsIHRoZSBjbG9zdXJlIGdvZXMgb3V0IG9mIHNjb3BlLgoKTm90ZSB0aGF0IGEgY2FwdHVyZSB3aWxsIGVpdGhlciBtb3ZlIG9yIGJvcnJvdyBhIHZhcmlhYmxlLCBidXQgaW4gdGhpcwpzaXR1YXRpb24sIHRoZSBjbG9zdXJlIGlzIGJvcnJvd2luZyB0aGUgdmFyaWFibGUuIFRha2UgYSBsb29rIGF0IHRoZSBjaGFwdGVyCm9uIFtDYXB0dXJpbmddW2NhcHR1cmluZ10gaW4gUnVzdCBCeSBFeGFtcGxlIGZvciBtb3JlIGluZm9ybWF0aW9uLgoKW2NhcHR1cmluZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RhYmxlL3J1c3QtYnktZXhhbXBsZS9mbi9jbG9zdXJlcy9jYXB0dXJlLmh0bWwKClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgY2FuIGZpbmlzaCB1c2luZyB0aGUgY2xvc3VyZSBiZWZvcmUgdXNpbmcgdGhlIGNhcHR1cmVkCnZhcmlhYmxlOgoKYGBgCmZuIGluc2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQpmbiBvdXRzaWRlX2Nsb3N1cmUoeDogJm11dCBpMzIpIHt9CgpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGxldCBtdXQgYmFyID0gfHwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKGEpCiAgICB9OwogICAgYmFyKCk7CiAgICAvLyBib3Jyb3cgb24gYGFgIGVuZHMuCiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7IC8vIG9rIQp9CmBgYAoKT3IgeW91IGNhbiBwYXNzIHRoZSB2YXJpYWJsZSBhcyBhIHBhcmFtZXRlciB0byB0aGUgY2xvc3VyZToKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgbXV0IGJhciA9IHxzOiAmbXV0IGkzMnwgewogICAgICAgIGluc2lkZV9jbG9zdXJlKHMpCiAgICB9OwogICAgb3V0c2lkZV9jbG9zdXJlKGEpOwogICAgYmFyKGEpOwp9CmBgYAoKSXQgbWF5IGJlIHBvc3NpYmxlIHRvIGRlZmluZSB0aGUgY2xvc3VyZSBsYXRlcjoKCmBgYApmbiBpbnNpZGVfY2xvc3VyZSh4OiAmbXV0IGkzMikge30KZm4gb3V0c2lkZV9jbG9zdXJlKHg6ICZtdXQgaTMyKSB7fQoKZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBvdXRzaWRlX2Nsb3N1cmUoYSk7CiAgICBsZXQgbXV0IGJhciA9IHx8IHsKICAgICAgICBpbnNpZGVfY2xvc3VyZShhKQogICAgfTsKICAgIGJhcigpOwp9CmBgYApFMDUwMkEgdmFyaWFibGUgYWxyZWFkeSBib3Jyb3dlZCBhcyBpbW11dGFibGUgd2FzIGJvcnJvd2VkIGFzIG11dGFibGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTAyCmZuIGJhcih4OiAmbXV0IGkzMikge30KZm4gZm9vKGE6ICZtdXQgaTMyKSB7CiAgICBsZXQgeSA9ICZhOyAvLyBhIGlzIGJvcnJvd2VkIGFzIGltbXV0YWJsZS4KICAgIGJhcihhKTsgLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgYCphYCBhcyBtdXRhYmxlIGJlY2F1c2UgYGFgIGlzIGFsc28gYm9ycm93ZWQKICAgICAgICAgICAgLy8gICAgICAgIGFzIGltbXV0YWJsZQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZW5zdXJlIHRoYXQgeW91IGRvbid0IGhhdmUgYW55IG90aGVyIHJlZmVyZW5jZXMgdG8gdGhlCnZhcmlhYmxlIGJlZm9yZSB0cnlpbmcgdG8gYWNjZXNzIGl0IG11dGFibHk6CgpgYGAKZm4gYmFyKHg6ICZtdXQgaTMyKSB7fQpmbiBmb28oYTogJm11dCBpMzIpIHsKICAgIGJhcihhKTsKICAgIGxldCB5ID0gJmE7IC8vIG9rIQogICAgcHJpbnRsbiEoInt9IiwgeSk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKRTA1MDNBIHZhbHVlIHdhcyB1c2VkIGFmdGVyIGl0IHdhcyBtdXRhYmx5IGJvcnJvd2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwMwpmbiBtYWluKCkgewogICAgbGV0IG11dCB2YWx1ZSA9IDM7CiAgICAvLyBDcmVhdGUgYSBtdXRhYmxlIGJvcnJvdyBvZiBgdmFsdWVgLgogICAgbGV0IGJvcnJvdyA9ICZtdXQgdmFsdWU7CiAgICBsZXQgX3N1bSA9IHZhbHVlICsgMTsgLy8gZXJyb3I6IGNhbm5vdCB1c2UgYHZhbHVlYCBiZWNhdXNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGl0IHdhcyBtdXRhYmx5IGJvcnJvd2VkCiAgICBwcmludGxuISgie30iLCBib3Jyb3cpOwp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCBgdmFsdWVgIGlzIG11dGFibHkgYm9ycm93ZWQgYnkgYGJvcnJvd2AgYW5kIGNhbm5vdCBiZQp1c2VkIHRvIGNhbGN1bGF0ZSBgc3VtYC4gVGhpcyBpcyBub3QgcG9zc2libGUgYmVjYXVzZSB0aGlzIHdvdWxkIHZpb2xhdGUKUnVzdCdzIG11dGFiaWxpdHkgcnVsZXMuCgpZb3UgY2FuIGZpeCB0aGlzIGVycm9yIGJ5IGZpbmlzaGluZyB1c2luZyB0aGUgYm9ycm93IGJlZm9yZSB0aGUgbmV4dCB1c2Ugb2YKdGhlIHZhbHVlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgbXV0IHZhbHVlID0gMzsKICAgIGxldCBib3Jyb3cgPSAmbXV0IHZhbHVlOwogICAgcHJpbnRsbiEoInt9IiwgYm9ycm93KTsKICAgIC8vIFRoZSBibG9jayBoYXMgZW5kZWQgYW5kIHdpdGggaXQgdGhlIGJvcnJvdy4KICAgIC8vIFlvdSBjYW4gbm93IHVzZSBgdmFsdWVgIGFnYWluLgogICAgbGV0IF9zdW0gPSB2YWx1ZSArIDE7Cn0KYGBgCgpPciBieSBjbG9uaW5nIGB2YWx1ZWAgYmVmb3JlIGJvcnJvd2luZyBpdDoKCmBgYApmbiBtYWluKCkgewogICAgbGV0IG11dCB2YWx1ZSA9IDM7CiAgICAvLyBXZSBjbG9uZSBgdmFsdWVgLCBjcmVhdGluZyBhIGNvcHkuCiAgICBsZXQgdmFsdWVfY2xvbmVkID0gdmFsdWUuY2xvbmUoKTsKICAgIC8vIFRoZSBtdXRhYmxlIGJvcnJvdyBpcyBhIHJlZmVyZW5jZSB0byBgdmFsdWVgIGFuZAogICAgLy8gbm90IHRvIGB2YWx1ZV9jbG9uZWRgLi4uCiAgICBsZXQgYm9ycm93ID0gJm11dCB2YWx1ZTsKICAgIC8vIC4uLiB3aGljaCBtZWFucyB3ZSBjYW4gc3RpbGwgdXNlIGB2YWx1ZV9jbG9uZWRgLAogICAgbGV0IF9zdW0gPSB2YWx1ZV9jbG9uZWQgKyAxOwogICAgLy8gZXZlbiB0aG91Z2ggdGhlIGJvcnJvdyBvbmx5IGVuZHMgaGVyZS4KICAgIHByaW50bG4hKCJ7fSIsIGJvcnJvdyk7Cn0KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKRTA1MDQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBtb3ZlIGEgYm9ycm93ZWQgdmFyaWFibGUgaW50byBhCmNsb3N1cmUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9udW0ubnVtKTsKICAgICAgICAvLyBlcnJvcjogY2Fubm90IG1vdmUgYGZhbmN5X251bWAgaW50byBjbG9zdXJlIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKICAgIH07CgogICAgeCgpOwogICAgcHJpbnRsbiEoIm1haW4gZnVuY3Rpb246IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KYGBgCgpIZXJlLCBgZmFuY3lfbnVtYCBpcyBib3Jyb3dlZCBieSBgZmFuY3lfcmVmYCBhbmQgc28gY2Fubm90IGJlIG1vdmVkIGludG8KdGhlIGNsb3N1cmUgYHhgLiBUaGVyZSBpcyBubyB3YXkgdG8gbW92ZSBhIHZhbHVlIGludG8gYSBjbG9zdXJlIHdoaWxlIGl0IGlzCmJvcnJvd2VkLCBhcyB0aGF0IHdvdWxkIGludmFsaWRhdGUgdGhlIGJvcnJvdy4KCklmIHRoZSBjbG9zdXJlIGNhbid0IG91dGxpdmUgdGhlIHZhbHVlIGJlaW5nIG1vdmVkLCB0cnkgdXNpbmcgYSByZWZlcmVuY2UKcmF0aGVyIHRoYW4gbW92aW5nOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGZhbmN5X3JlZiBpcyB1c2FibGUgaGVyZSBiZWNhdXNlIGl0IGRvZXNuJ3QgbW92ZSBgZmFuY3lfbnVtYAogICAgICAgIHByaW50bG4hKCJjaGlsZCBmdW5jdGlvbjoge30iLCBmYW5jeV9yZWYubnVtKTsKICAgIH07CgogICAgeCgpOwoKICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X251bS5udW0pOwp9CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCBhbmQgdGhlbiBtb3ZlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZgp0aGUgYm9ycm93IHVzaW5nIGEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07CgogICAgewogICAgICAgIGxldCBmYW5jeV9yZWYgPSAmZmFuY3lfbnVtOwogICAgICAgIHByaW50bG4hKCJtYWluIGZ1bmN0aW9uOiB7fSIsIGZhbmN5X3JlZi5udW0pOwogICAgICAgIC8vIGBmYW5jeV9yZWZgIGdvZXMgb3V0IG9mIHNjb3BlIGhlcmUKICAgIH0KCiAgICBsZXQgeCA9IG1vdmUgfHwgewogICAgICAgIC8vIGBmYW5jeV9udW1gIGNhbiBiZSBtb3ZlZCBub3cgKG5vIG1vcmUgcmVmZXJlbmNlcyBleGlzdCkKICAgICAgICBwcmludGxuISgiY2hpbGQgZnVuY3Rpb246IHt9IiwgZmFuY3lfbnVtLm51bSk7CiAgICB9OwoKICAgIHgoKTsKfQpgYGAKCklmIHRoZSBsaWZldGltZSBvZiBhIHJlZmVyZW5jZSBpc24ndCBlbm91Z2gsIHN1Y2ggYXMgaW4gdGhlIGNhc2Ugb2YgdGhyZWFkaW5nLApjb25zaWRlciB1c2luZyBhbiBgQXJjYCB0byBjcmVhdGUgYSByZWZlcmVuY2UtY291bnRlZCB2YWx1ZToKCmBgYAp1c2Ugc3RkOjpzeW5jOjpBcmM7CnVzZSBzdGQ6OnRocmVhZDsKCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBtYWluKCkgewogICAgbGV0IGZhbmN5X3JlZjEgPSBBcmM6Om5ldyhGYW5jeU51bSB7IG51bTogNSB9KTsKICAgIGxldCBmYW5jeV9yZWYyID0gZmFuY3lfcmVmMS5jbG9uZSgpOwoKICAgIGxldCB4ID0gdGhyZWFkOjpzcGF3bihtb3ZlIHx8IHsKICAgICAgICAvLyBgZmFuY3lfcmVmMWAgY2FuIGJlIG1vdmVkIGFuZCBoYXMgYSBgJ3N0YXRpY2AgbGlmZXRpbWUKICAgICAgICBwcmludGxuISgiY2hpbGQgdGhyZWFkOiB7fSIsIGZhbmN5X3JlZjEubnVtKTsKICAgIH0pOwoKICAgIHguam9pbigpLmV4cGVjdCgiY2hpbGQgdGhyZWFkIHNob3VsZCBmaW5pc2giKTsKICAgIHByaW50bG4hKCJtYWluIHRocmVhZDoge30iLCBmYW5jeV9yZWYyLm51bSk7Cn0KYGBgCkUwNTA1QSB2YWx1ZSB3YXMgbW92ZWQgb3V0IHdoaWxlIGl0IHdhcyBzdGlsbCBib3Jyb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDUKc3RydWN0IFZhbHVlIHt9CgpmbiBib3Jyb3codmFsOiAmVmFsdWUpIHt9CgpmbiBlYXQodmFsOiBWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CiAgICBsZXQgX3JlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KHgpOwogICAgYm9ycm93KF9yZWZfdG9fdmFsKTsKfQpgYGAKCkhlcmUsIHRoZSBmdW5jdGlvbiBgZWF0YCB0YWtlcyBvd25lcnNoaXAgb2YgYHhgLiBIb3dldmVyLApgeGAgY2Fubm90IGJlIG1vdmVkIGJlY2F1c2UgdGhlIGJvcnJvdyB0byBgX3JlZl90b192YWxgCm5lZWRzIHRvIGxhc3QgdGlsbCB0aGUgZnVuY3Rpb24gYGJvcnJvd2AuClRvIGZpeCB0aGF0IHlvdSBjYW4gZG8gYSBmZXcgZGlmZmVyZW50IHRoaW5nczoKCiogVHJ5IHRvIGF2b2lkIG1vdmluZyB0aGUgdmFyaWFibGUuCiogUmVsZWFzZSBib3Jyb3cgYmVmb3JlIG1vdmUuCiogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgb24gdGhlIHR5cGUuCgpFeGFtcGxlczoKCmBgYApzdHJ1Y3QgVmFsdWUge30KCmZuIGJvcnJvdyh2YWw6ICZWYWx1ZSkge30KCmZuIGVhdCh2YWw6ICZWYWx1ZSkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFZhbHVle307CgogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KCZ4KTsgLy8gcGFzcyBieSByZWZlcmVuY2UsIGlmIGl0J3MgcG9zc2libGUKICAgIGJvcnJvdyhyZWZfdG9fdmFsKTsKfQpgYGAKCk9yOgoKYGBgCnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwoKICAgIGxldCByZWZfdG9fdmFsOiAmVmFsdWUgPSAmeDsKICAgIGJvcnJvdyhyZWZfdG9fdmFsKTsKICAgIC8vIHJlZl90b192YWwgaXMgbm8gbG9uZ2VyIHVzZWQuCiAgICBlYXQoeCk7Cn0KYGBgCgpPcjoKCmBgYAojW2Rlcml2ZShDbG9uZSwgQ29weSldIC8vIGltcGxlbWVudCBDb3B5IHRyYWl0CnN0cnVjdCBWYWx1ZSB7fQoKZm4gYm9ycm93KHZhbDogJlZhbHVlKSB7fQoKZm4gZWF0KHZhbDogVmFsdWUpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBWYWx1ZXt9OwogICAgbGV0IHJlZl90b192YWw6ICZWYWx1ZSA9ICZ4OwogICAgZWF0KHgpOyAvLyBpdCB3aWxsIGJlIGNvcGllZCBoZXJlLgogICAgYm9ycm93KHJlZl90b192YWwpOwp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gUnVzdCdzIG93bmVyc2hpcCBzeXN0ZW0sIHRha2UgYSBsb29rIGF0IHRoZQpbUmVmZXJlbmNlcyAmIEJvcnJvd2luZ11bcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXSBzZWN0aW9uIG9mIHRoZSBCb29rLgoKW3JlZmVyZW5jZXMtYW5kLWJvcnJvd2luZ106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDA0LTAyLXJlZmVyZW5jZXMtYW5kLWJvcnJvd2luZy5odG1sCkUwNTA2QW4gYXR0ZW1wdCB3YXMgbWFkZSB0byBhc3NpZ24gdG8gYSBib3Jyb3dlZCB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDYKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IGZhbmN5X3JlZiA9ICZmYW5jeV9udW07CmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07Ci8vIGVycm9yOiBjYW5ub3QgYXNzaWduIHRvIGBmYW5jeV9udW1gIGJlY2F1c2UgaXQgaXMgYm9ycm93ZWQKCnByaW50bG4hKCJOdW06IHt9LCBSZWY6IHt9IiwgZmFuY3lfbnVtLm51bSwgZmFuY3lfcmVmLm51bSk7CmBgYAoKQmVjYXVzZSBgZmFuY3lfcmVmYCBzdGlsbCBob2xkcyBhIHJlZmVyZW5jZSB0byBgZmFuY3lfbnVtYCwgYGZhbmN5X251bWAgY2FuJ3QKYmUgYXNzaWduZWQgdG8gYSBuZXcgdmFsdWUgYXMgaXQgd291bGQgaW52YWxpZGF0ZSB0aGUgcmVmZXJlbmNlLgoKQWx0ZXJuYXRpdmVseSwgd2UgY2FuIG1vdmUgb3V0IG9mIGBmYW5jeV9udW1gIGludG8gYSBzZWNvbmQgYGZhbmN5X251bWA6CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdTgsCn0KCmxldCBtdXQgZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDUgfTsKbGV0IG1vdmVkX251bSA9IGZhbmN5X251bTsKZmFuY3lfbnVtID0gRmFuY3lOdW0geyBudW06IDYgfTsKCnByaW50bG4hKCJOdW06IHt9LCBNb3ZlZCBudW06IHt9IiwgZmFuY3lfbnVtLm51bSwgbW92ZWRfbnVtLm51bSk7CmBgYAoKSWYgdGhlIHZhbHVlIGhhcyB0byBiZSBib3Jyb3dlZCwgdHJ5IGxpbWl0aW5nIHRoZSBsaWZldGltZSBvZiB0aGUgYm9ycm93IHVzaW5nCmEgc2NvcGVkIGJsb2NrOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpsZXQgbXV0IGZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA1IH07Cgp7CiAgICBsZXQgZmFuY3lfcmVmID0gJmZhbmN5X251bTsKICAgIHByaW50bG4hKCJSZWY6IHt9IiwgZmFuY3lfcmVmLm51bSk7Cn0KCi8vIFdvcmtzIGJlY2F1c2UgYGZhbmN5X3JlZmAgaXMgbm8gbG9uZ2VyIGluIHNjb3BlCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYAoKT3IgYnkgbW92aW5nIHRoZSByZWZlcmVuY2UgaW50byBhIGZ1bmN0aW9uOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHU4LAp9CgpmbiBwcmludF9mYW5jeV9yZWYoZmFuY3lfcmVmOiAmRmFuY3lOdW0pewogICAgcHJpbnRsbiEoIlJlZjoge30iLCBmYW5jeV9yZWYubnVtKTsKfQoKbGV0IG11dCBmYW5jeV9udW0gPSBGYW5jeU51bSB7IG51bTogNSB9OwoKcHJpbnRfZmFuY3lfcmVmKCZmYW5jeV9udW0pOwoKLy8gV29ya3MgYmVjYXVzZSBmdW5jdGlvbiBib3Jyb3cgaGFzIGVuZGVkCmZhbmN5X251bSA9IEZhbmN5TnVtIHsgbnVtOiA2IH07CnByaW50bG4hKCJOdW06IHt9IiwgZmFuY3lfbnVtLm51bSk7CmBgYApFMDUwN0EgYm9ycm93ZWQgdmFsdWUgd2FzIG1vdmVkIG91dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDcKdXNlIHN0ZDo6Y2VsbDo6UmVmQ2VsbDsKCnN0cnVjdCBUaGVEYXJrS25pZ2h0OwoKaW1wbCBUaGVEYXJrS25pZ2h0IHsKICAgIGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fQp9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBSZWZDZWxsOjpuZXcoVGhlRGFya0tuaWdodCk7CgogICAgeC5ib3Jyb3coKS5ub3RoaW5nX2lzX3RydWUoKTsgLy8gZXJyb3I6IGNhbm5vdCBtb3ZlIG91dCBvZiBib3Jyb3dlZCBjb250ZW50Cn0KYGBgCgpIZXJlLCB0aGUgYG5vdGhpbmdfaXNfdHJ1ZWAgbWV0aG9kIHRha2VzIHRoZSBvd25lcnNoaXAgb2YgYHNlbGZgLiBIb3dldmVyLApgc2VsZmAgY2Fubm90IGJlIG1vdmVkIGJlY2F1c2UgYC5ib3Jyb3coKWAgb25seSBwcm92aWRlcyBhbiBgJlRoZURhcmtLbmlnaHRgLAp3aGljaCBpcyBhIGJvcnJvdyBvZiB0aGUgY29udGVudCBvd25lZCBieSB0aGUgYFJlZkNlbGxgLiBUbyBmaXggdGhpcyBlcnJvciwKeW91IGhhdmUgdGhyZWUgY2hvaWNlczoKCiogVHJ5IHRvIGF2b2lkIG1vdmluZyB0aGUgdmFyaWFibGUuCiogU29tZWhvdyByZWNsYWltIHRoZSBvd25lcnNoaXAuCiogSW1wbGVtZW50IHRoZSBgQ29weWAgdHJhaXQgb24gdGhlIHR5cGUuCgpUaGlzIGNhbiBhbHNvIGhhcHBlbiB3aGVuIHVzaW5nIGEgdHlwZSBpbXBsZW1lbnRpbmcgYEZuYCBvciBgRm5NdXRgLCBhcyBuZWl0aGVyCmFsbG93cyBtb3Zpbmcgb3V0IG9mIHRoZW0gKHRoZXkgdXN1YWxseSByZXByZXNlbnQgY2xvc3VyZXMgd2hpY2ggY2FuIGJlIGNhbGxlZAptb3JlIHRoYW4gb25jZSkuIE11Y2ggb2YgdGhlIHRleHQgZm9sbG93aW5nIGFwcGxpZXMgZXF1YWxseSB3ZWxsIHRvIG5vbi1gRm5PbmNlYApjbG9zdXJlIGJvZGllcy4KCkV4YW1wbGVzOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoJnNlbGYpIHt9IC8vIEZpcnN0IGNhc2UsIHdlIGRvbid0IHRha2Ugb3duZXJzaGlwCn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKCiAgICB4LmJvcnJvdygpLm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBvayEKfQpgYGAKCk9yOgoKYGBgCnVzZSBzdGQ6OmNlbGw6OlJlZkNlbGw7CgpzdHJ1Y3QgVGhlRGFya0tuaWdodDsKCmltcGwgVGhlRGFya0tuaWdodCB7CiAgICBmbiBub3RoaW5nX2lzX3RydWUoc2VsZikge30KfQoKZm4gbWFpbigpIHsKICAgIGxldCB4ID0gUmVmQ2VsbDo6bmV3KFRoZURhcmtLbmlnaHQpOwogICAgbGV0IHggPSB4LmludG9faW5uZXIoKTsgLy8gd2UgZ2V0IGJhY2sgb3duZXJzaGlwCgogICAgeC5ub3RoaW5nX2lzX3RydWUoKTsgLy8gb2shCn0KYGBgCgpPcjoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXSAvLyB3ZSBpbXBsZW1lbnQgdGhlIENvcHkgdHJhaXQKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFJlZkNlbGw6Om5ldyhUaGVEYXJrS25pZ2h0KTsKCiAgICB4LmJvcnJvdygpLm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBvayEKfQpgYGAKCk1vdmluZyBhIG1lbWJlciBvdXQgb2YgYSBtdXRhYmx5IGJvcnJvd2VkIHN0cnVjdCB3aWxsIGFsc28gY2F1c2UgRTA1MDcgZXJyb3I6CgpgYGBjb21waWxlX2ZhaWwsRTA1MDcKc3RydWN0IFRoZURhcmtLbmlnaHQ7CgppbXBsIFRoZURhcmtLbmlnaHQgewogICAgZm4gbm90aGluZ19pc190cnVlKHNlbGYpIHt9Cn0KCnN0cnVjdCBCYXRjYXZlIHsKICAgIGtuaWdodDogVGhlRGFya0tuaWdodAp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBjYXZlID0gQmF0Y2F2ZSB7CiAgICAgICAga25pZ2h0OiBUaGVEYXJrS25pZ2h0CiAgICB9OwogICAgbGV0IGJvcnJvd2VkID0gJm11dCBjYXZlOwoKICAgIGJvcnJvd2VkLmtuaWdodC5ub3RoaW5nX2lzX3RydWUoKTsgLy8gRTA1MDcKfQpgYGAKCkl0IGlzIGZpbmUgb25seSBpZiB5b3UgcHV0IHNvbWV0aGluZyBiYWNrLiBgbWVtOjpyZXBsYWNlYCBjYW4gYmUgdXNlZCBmb3IgdGhhdDoKCmBgYAojIHN0cnVjdCBUaGVEYXJrS25pZ2h0OwojIGltcGwgVGhlRGFya0tuaWdodCB7IGZuIG5vdGhpbmdfaXNfdHJ1ZShzZWxmKSB7fSB9CiMgc3RydWN0IEJhdGNhdmUgeyBrbmlnaHQ6IFRoZURhcmtLbmlnaHQgfQp1c2Ugc3RkOjptZW07CgpsZXQgbXV0IGNhdmUgPSBCYXRjYXZlIHsKICAgIGtuaWdodDogVGhlRGFya0tuaWdodAp9OwpsZXQgYm9ycm93ZWQgPSAmbXV0IGNhdmU7CgptZW06OnJlcGxhY2UoJm11dCBib3Jyb3dlZC5rbmlnaHQsIFRoZURhcmtLbmlnaHQpLm5vdGhpbmdfaXNfdHJ1ZSgpOyAvLyBvayEKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBSdXN0J3Mgb3duZXJzaGlwIHN5c3RlbSwgdGFrZSBhIGxvb2sgYXQgdGhlCltSZWZlcmVuY2VzICYgQm9ycm93aW5nXVtyZWZlcmVuY2VzLWFuZC1ib3Jyb3dpbmddIHNlY3Rpb24gb2YgdGhlIEJvb2suCgpbcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDQtMDItcmVmZXJlbmNlcy1hbmQtYm9ycm93aW5nLmh0bWwKRTA1MDhBIHZhbHVlIHdhcyBtb3ZlZCBvdXQgb2YgYSBub24tY29weSBmaXhlZC1zaXplIGFycmF5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUwOApzdHJ1Y3QgTm9uQ29weTsKCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXkgPSBbTm9uQ29weTsgMV07CiAgICBsZXQgX3ZhbHVlID0gYXJyYXlbMF07IC8vIGVycm9yOiBjYW5ub3QgbW92ZSBvdXQgb2YgdHlwZSBgW05vbkNvcHk7IDFdYCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGEgbm9uLWNvcHkgZml4ZWQtc2l6ZSBhcnJheQp9CmBgYAoKVGhlIGZpcnN0IGVsZW1lbnQgd2FzIG1vdmVkIG91dCBvZiB0aGUgYXJyYXksIGJ1dCB0aGlzIGlzIG5vdApwb3NzaWJsZSBiZWNhdXNlIGBOb25Db3B5YCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBDb3B5YCB0cmFpdC4KCkNvbnNpZGVyIGJvcnJvd2luZyB0aGUgZWxlbWVudCBpbnN0ZWFkIG9mIG1vdmluZyBpdDoKCmBgYApzdHJ1Y3QgTm9uQ29weTsKCmZuIG1haW4oKSB7CiAgICBsZXQgYXJyYXkgPSBbTm9uQ29weTsgMV07CiAgICBsZXQgX3ZhbHVlID0gJmFycmF5WzBdOyAvLyBCb3Jyb3dpbmcgaXMgYWxsb3dlZCwgdW5saWtlIG1vdmluZy4KfQpgYGAKCkFsdGVybmF0aXZlbHksIGlmIHlvdXIgdHlwZSBpbXBsZW1lbnRzIGBDbG9uZWAgYW5kIHlvdSBuZWVkIHRvIG93biB0aGUgdmFsdWUsCmNvbnNpZGVyIGJvcnJvd2luZyBhbmQgdGhlbiBjbG9uaW5nOgoKYGBgCiNbZGVyaXZlKENsb25lKV0Kc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgLy8gTm93IHlvdSBjYW4gY2xvbmUgdGhlIGFycmF5IGVsZW1lbnQuCiAgICBsZXQgX3ZhbHVlID0gYXJyYXlbMF0uY2xvbmUoKTsKfQpgYGAKCklmIHlvdSByZWFsbHkgd2FudCB0byBtb3ZlIHRoZSB2YWx1ZSBvdXQsIHlvdSBjYW4gdXNlIGEgZGVzdHJ1Y3R1cmluZyBhcnJheQpwYXR0ZXJuIHRvIG1vdmUgaXQ6CgpgYGAKc3RydWN0IE5vbkNvcHk7CgpmbiBtYWluKCkgewogICAgbGV0IGFycmF5ID0gW05vbkNvcHk7IDFdOwogICAgLy8gRGVzdHJ1Y3R1cmluZyB0aGUgYXJyYXkKICAgIGxldCBbX3ZhbHVlXSA9IGFycmF5Owp9CmBgYApFMDUwOVRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYW4gYXR0ZW1wdCBpcyBtYWRlIHRvIG1vdmUgb3V0IG9mIGEgdmFsdWUgd2hvc2UgdHlwZQppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTA5CnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgZmFuY3lfZmllbGQgPSBkcm9wX3N0cnVjdC5mYW5jeTsgLy8gRXJyb3IgRTA1MDkKICAgIHByaW50bG4hKCJGYW5jeToge30iLCBmYW5jeV9maWVsZC5udW0pOwogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9zdHJ1Y3QuZHJvcCgpYCBhcyBkcm9wX3N0cnVjdCBnb2VzIG91dCBvZiBzY29wZQp9CmBgYAoKSGVyZSwgd2UgdHJpZWQgdG8gbW92ZSBhIGZpZWxkIG91dCBvZiBhIHN0cnVjdCBvZiB0eXBlIGBEcm9wU3RydWN0YCB3aGljaAppbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuIEhvd2V2ZXIsIGEgc3RydWN0IGNhbm5vdCBiZSBkcm9wcGVkIGlmIG9uZSBvcgptb3JlIG9mIGl0cyBmaWVsZHMgaGF2ZSBiZWVuIG1vdmVkLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdCBnZXRzCmNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgbWF5IHVzZSB0aGUgZmllbGRzIG9mIHRoZQpzdHJ1Y3QsIHNvIG1vdmluZyBvdXQgb2YgdGhlIHN0cnVjdCBjb3VsZCBtYWtlIGl0IGltcG9zc2libGUgdG8gcnVuIHRoZQpkZXN0cnVjdG9yLiBUaGVyZWZvcmUsIHdlIG11c3QgdGhpbmsgb2YgYWxsIHZhbHVlcyB3aG9zZSB0eXBlIGltcGxlbWVudHMgdGhlCmBEcm9wYCB0cmFpdCBhcyBzaW5nbGUgdW5pdHMgd2hvc2UgZmllbGRzIGNhbm5vdCBiZSBtb3ZlZC4KClRoaXMgZXJyb3IgY2FuIGJlIGZpeGVkIGJ5IGNyZWF0aW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBmaWVsZHMgb2YgYSBzdHJ1Y3QsCmVudW0sIG9yIHR1cGxlIHVzaW5nIHRoZSBgcmVmYCBrZXl3b3JkOgoKYGBgCnN0cnVjdCBGYW5jeU51bSB7CiAgICBudW06IHVzaXplCn0KCnN0cnVjdCBEcm9wU3RydWN0IHsKICAgIGZhbmN5OiBGYW5jeU51bQp9CgppbXBsIERyb3AgZm9yIERyb3BTdHJ1Y3QgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsKICAgICAgICAvLyBEZXN0cnVjdCBEcm9wU3RydWN0LCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgbGV0IGRyb3Bfc3RydWN0ID0gRHJvcFN0cnVjdHtmYW5jeTogRmFuY3lOdW17bnVtOiA1fX07CiAgICBsZXQgcmVmIGZhbmN5X2ZpZWxkID0gZHJvcF9zdHJ1Y3QuZmFuY3k7IC8vIE5vIG1vcmUgZXJyb3JzIQogICAgcHJpbnRsbiEoIkZhbmN5OiB7fSIsIGZhbmN5X2ZpZWxkLm51bSk7CiAgICAvLyBpbXBsaWNpdCBjYWxsIHRvIGBkcm9wX3N0cnVjdC5kcm9wKClgIGFzIGRyb3Bfc3RydWN0IGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCgpOb3RlIHRoYXQgdGhpcyB0ZWNobmlxdWUgY2FuIGFsc28gYmUgdXNlZCBpbiB0aGUgYXJtcyBvZiBhIG1hdGNoIGV4cHJlc3Npb246CgpgYGAKc3RydWN0IEZhbmN5TnVtIHsKICAgIG51bTogdXNpemUKfQoKZW51bSBEcm9wRW51bSB7CiAgICBGYW5jeShGYW5jeU51bSkKfQoKaW1wbCBEcm9wIGZvciBEcm9wRW51bSB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgewogICAgICAgIC8vIERlc3RydWN0IERyb3BFbnVtLCBwb3NzaWJseSB1c2luZyBGYW5jeU51bQogICAgfQp9CgpmbiBtYWluKCkgewogICAgLy8gQ3JlYXRlcyBhbmQgZW51bSBvZiB0eXBlIGBEcm9wRW51bWAsIHdoaWNoIGltcGxlbWVudHMgYERyb3BgCiAgICBsZXQgZHJvcF9lbnVtID0gRHJvcEVudW06OkZhbmN5KEZhbmN5TnVte251bTogMTB9KTsKICAgIG1hdGNoIGRyb3BfZW51bSB7CiAgICAgICAgLy8gQ3JlYXRlcyBhIHJlZmVyZW5jZSB0byB0aGUgaW5zaWRlIG9mIGBEcm9wRW51bTo6RmFuY3lgCiAgICAgICAgRHJvcEVudW06OkZhbmN5KHJlZiBmYW5jeV9maWVsZCkgPT4gLy8gTm8gZXJyb3IhCiAgICAgICAgICAgIHByaW50bG4hKCJJdCB3YXMgZmFuY3ktLSB7fSEiLCBmYW5jeV9maWVsZC5udW0pLAogICAgfQogICAgLy8gaW1wbGljaXQgY2FsbCB0byBgZHJvcF9lbnVtLmRyb3AoKWAgYXMgZHJvcF9lbnVtIGdvZXMgb3V0IG9mIHNjb3BlCn0KYGBgCkUwNTEwVGhlIG1hdGNoZWQgdmFsdWUgd2FzIGFzc2lnbmVkIGluIGEgbWF0Y2ggZ3VhcmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTEwCmxldCBtdXQgeCA9IFNvbWUoMCk7Cm1hdGNoIHggewogICAgTm9uZSA9PiB7fQogICAgU29tZShfKSBpZiB7IHggPSBOb25lOyBmYWxzZSB9ID0+IHt9IC8vIGVycm9yIQogICAgU29tZShfKSA9PiB7fQp9CmBgYAoKV2hlbiBtYXRjaGluZyBvbiBhIHZhcmlhYmxlIGl0IGNhbm5vdCBiZSBtdXRhdGVkIGluIHRoZSBtYXRjaCBndWFyZHMsIGFzIHRoaXMKY291bGQgY2F1c2UgdGhlIG1hdGNoIHRvIGJlIG5vbi1leGhhdXN0aXZlLgoKSGVyZSBleGVjdXRpbmcgYHggPSBOb25lYCB3b3VsZCBtb2RpZnkgdGhlIHZhbHVlIGJlaW5nIG1hdGNoZWQgYW5kIHJlcXVpcmUgdXMKdG8gZ28gImJhY2sgaW4gdGltZSIgdG8gdGhlIGBOb25lYCBhcm0uIFRvIGZpeCBpdCwgY2hhbmdlIHRoZSB2YWx1ZSBpbiB0aGUgbWF0Y2gKYXJtOgoKYGBgCmxldCBtdXQgeCA9IFNvbWUoMCk7Cm1hdGNoIHggewogICAgTm9uZSA9PiB7fQogICAgU29tZShfKSA9PiB7CiAgICAgICAgeCA9IE5vbmU7IC8vIG9rIQogICAgfQp9CmBgYApFMDUxMUludmFsaWQgbW9ub21vcnBoaXphdGlvbiBvZiBhbiBpbnRyaW5zaWMgZnVuY3Rpb24gd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTExCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgpleHRlcm4gInBsYXRmb3JtLWludHJpbnNpYyIgewogICAgZm4gc2ltZF9hZGQ8VD4oYTogVCwgYjogVCkgLT4gVDsKfQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHNpbWRfYWRkKDAsIDEpOyB9CiAgICAvLyBlcnJvcjogaW52YWxpZCBtb25vbW9ycGhpemF0aW9uIG9mIGBzaW1kX2FkZGAgaW50cmluc2ljCn0KYGBgCgpUaGUgZ2VuZXJpYyB0eXBlIGhhcyB0byBiZSBhIFNJTUQgdHlwZS4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHJlcHJfc2ltZCldCiMhW2ZlYXR1cmUocGxhdGZvcm1faW50cmluc2ljcyldCgojW3JlcHIoc2ltZCldCiNbZGVyaXZlKENvcHksIENsb25lKV0Kc3RydWN0IGkzMngyKGkzMiwgaTMyKTsKCmV4dGVybiAicGxhdGZvcm0taW50cmluc2ljIiB7CiAgICBmbiBzaW1kX2FkZDxUPihhOiBULCBiOiBUKSAtPiBUOwp9Cgp1bnNhZmUgeyBzaW1kX2FkZChpMzJ4MigwLCAwKSwgaTMyeDIoMSwgMikpOyB9IC8vIG9rIQpgYGAKRTA1MTJUcmFuc211dGUgd2l0aCB0d28gZGlmZmVyZW50bHkgc2l6ZWQgdHlwZXMgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTIKZm4gdGFrZXNfdTgoXzogdTgpIHt9CgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsgdGFrZXNfdTgoOjpzdGQ6Om1lbTo6dHJhbnNtdXRlKDB1MTYpKTsgfQogICAgLy8gZXJyb3I6IGNhbm5vdCB0cmFuc211dGUgYmV0d2VlbiB0eXBlcyBvZiBkaWZmZXJlbnQgc2l6ZXMsCiAgICAvLyAgICAgICAgb3IgZGVwZW5kZW50bHktc2l6ZWQgdHlwZXMKfQpgYGAKClBsZWFzZSB1c2UgdHlwZXMgd2l0aCBzYW1lIHNpemUgb3IgdXNlIHRoZSBleHBlY3RlZCB0eXBlIGRpcmVjdGx5LiBFeGFtcGxlOgoKYGBgCmZuIHRha2VzX3U4KF86IHU4KSB7fQoKZm4gbWFpbigpIHsKICAgIHVuc2FmZSB7IHRha2VzX3U4KDo6c3RkOjptZW06OnRyYW5zbXV0ZSgwaTgpKTsgfSAvLyBvayEKICAgIC8vIG9yOgogICAgdW5zYWZlIHsgdGFrZXNfdTgoMHU4KTsgfSAvLyBvayEKfQpgYGAKRTA1MTVBIHJlZmVyZW5jZSB0byBhIGxvY2FsIHZhcmlhYmxlIHdhcyByZXR1cm5lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTUKZm4gZ2V0X2RhbmdsaW5nX3JlZmVyZW5jZSgpIC0+ICYnc3RhdGljIGkzMiB7CiAgICBsZXQgeCA9IDA7CiAgICAmeAp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNTE1CnVzZSBzdGQ6OnNsaWNlOjpJdGVyOwpmbiBnZXRfZGFuZ2xpbmdfaXRlcmF0b3I8J2E+KCkgLT4gSXRlcjwnYSwgaTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2Lml0ZXIoKQp9CmBgYAoKTG9jYWwgdmFyaWFibGVzLCBmdW5jdGlvbiBwYXJhbWV0ZXJzIGFuZCB0ZW1wb3JhcmllcyBhcmUgYWxsIGRyb3BwZWQgYmVmb3JlIHRoZQplbmQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkuIFNvIGEgcmVmZXJlbmNlIHRvIHRoZW0gY2Fubm90IGJlIHJldHVybmVkLgoKQ29uc2lkZXIgcmV0dXJuaW5nIGFuIG93bmVkIHZhbHVlIGluc3RlYWQ6CgpgYGAKdXNlIHN0ZDo6dmVjOjpJbnRvSXRlcjsKCmZuIGdldF9pbnRlZ2VyKCkgLT4gaTMyIHsKICAgIGxldCB4ID0gMDsKICAgIHgKfQoKZm4gZ2V0X293bmVkX2l0ZXJhdG9yKCkgLT4gSW50b0l0ZXI8aTMyPiB7CiAgICBsZXQgdiA9IHZlYyFbMSwgMiwgM107CiAgICB2LmludG9faXRlcigpCn0KYGBgCkUwNTE2VGhlIGB0eXBlb2ZgIGtleXdvcmQgaXMgY3VycmVudGx5IHJlc2VydmVkIGJ1dCB1bmltcGxlbWVudGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUxNgpmbiBtYWluKCkgewogICAgbGV0IHg6IHR5cGVvZig5MikgPSA5MjsKfQpgYGAKClRyeSB1c2luZyB0eXBlIGluZmVyZW5jZSBpbnN0ZWFkLiBFeGFtcGxlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IDkyOwp9CmBgYApFMDUxN0EgYCNbcmVwciguLildYCBhdHRyaWJ1dGUgd2FzIHBsYWNlZCBvbiBhbiB1bnN1cHBvcnRlZCBpdGVtLgoKRXhhbXBsZXMgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MTcKI1tyZXByKEMpXQp0eXBlIEZvbyA9IHU4OwoKI1tyZXByKHBhY2tlZCldCmVudW0gRm9vIHtCYXIsIEJhen0KCiNbcmVwcih1OCldCnN0cnVjdCBGb28ge2JhcjogYm9vbCwgYmF6OiBib29sfQoKI1tyZXByKEMpXQppbXBsIEZvbyB7CiAgICAvLyAuLi4KfQpgYGAKCiogVGhlIGAjW3JlcHIoQyldYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgcGxhY2VkIG9uIHN0cnVjdHMgYW5kIGVudW1zLgoqIFRoZSBgI1tyZXByKHBhY2tlZCldYCBhbmQgYCNbcmVwcihzaW1kKV1gIGF0dHJpYnV0ZXMgb25seSB3b3JrIG9uIHN0cnVjdHMuCiogVGhlIGAjW3JlcHIodTgpXWAsIGAjW3JlcHIoaTE2KV1gLCBldGMgYXR0cmlidXRlcyBvbmx5IHdvcmsgb24gZW51bXMuCgpUaGVzZSBhdHRyaWJ1dGVzIGRvIG5vdCB3b3JrIG9uIHR5cGVkZWZzLCBzaW5jZSB0eXBlZGVmcyBhcmUganVzdCBhbGlhc2VzLgoKUmVwcmVzZW50YXRpb25zIGxpa2UgYCNbcmVwcih1OCldYCwgYCNbcmVwcihpNjQpXWAgYXJlIGZvciBzZWxlY3RpbmcgdGhlCmRpc2NyaW1pbmFudCBzaXplIGZvciBlbnVtcyB3aXRoIG5vIGRhdGEgZmllbGRzIG9uIGFueSBvZiB0aGUgdmFyaWFudHMsIGUuZy4KYGVudW0gQ29sb3Ige1JlZCwgQmx1ZSwgR3JlZW59YCwgZWZmZWN0aXZlbHkgc2V0dGluZyB0aGUgc2l6ZSBvZiB0aGUgZW51bSB0bwp0aGUgc2l6ZSBvZiB0aGUgcHJvdmlkZWQgdHlwZS4gU3VjaCBhbiBlbnVtIGNhbiBiZSBjYXN0IHRvIGEgdmFsdWUgb2YgdGhlIHNhbWUKdHlwZSBhcyB3ZWxsLiBJbiBzaG9ydCwgYCNbcmVwcih1OCldYCBtYWtlcyB0aGUgZW51bSBiZWhhdmUgbGlrZSBhbiBpbnRlZ2VyCndpdGggYSBjb25zdHJhaW5lZCBzZXQgb2YgYWxsb3dlZCB2YWx1ZXMuCgpPbmx5IGZpZWxkLWxlc3MgZW51bXMgY2FuIGJlIGNhc3QgdG8gbnVtZXJpY2FsIHByaW1pdGl2ZXMsIHNvIHRoaXMgYXR0cmlidXRlCndpbGwgbm90IGFwcGx5IHRvIHN0cnVjdHMuCgpgI1tyZXByKHBhY2tlZCldYCByZWR1Y2VzIHBhZGRpbmcgdG8gbWFrZSB0aGUgc3RydWN0IHNpemUgc21hbGxlci4gVGhlCnJlcHJlc2VudGF0aW9uIG9mIGVudW1zIGlzbid0IHN0cmljdGx5IGRlZmluZWQgaW4gUnVzdCwgYW5kIHRoaXMgYXR0cmlidXRlCndvbid0IHdvcmsgb24gZW51bXMuCgpgI1tyZXByKHNpbWQpXWAgd2lsbCBnaXZlIGEgc3RydWN0IGNvbnNpc3Rpbmcgb2YgYSBob21vZ2VuZW91cyBzZXJpZXMgb2YgbWFjaGluZQp0eXBlcyAoaS5lLiwgYHU4YCwgYGkzMmAsIGV0YykgYSByZXByZXNlbnRhdGlvbiB0aGF0IHBlcm1pdHMgdmVjdG9yaXphdGlvbiB2aWEKU0lNRC4gVGhpcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZSBmb3IgZW51bXMgc2luY2UgdGhleSBkb24ndCBjb25zaXN0IG9mIGEKc2luZ2xlIGxpc3Qgb2YgZGF0YS4KRTA1MThBbiBgI1tpbmxpbmUoLi4pXWAgYXR0cmlidXRlIHdhcyBpbmNvcnJlY3RseSBwbGFjZWQgb24gc29tZXRoaW5nIG90aGVyIHRoYW4gYQpmdW5jdGlvbiBvciBtZXRob2QuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTE4CiNbaW5saW5lKGFsd2F5cyldCnN0cnVjdCBGb287CgojW2lubGluZShuZXZlcildCmltcGwgRm9vIHsKICAgIC8vIC4uLgp9CmBgYAoKYCNbaW5saW5lXWAgaGludHMgdGhlIGNvbXBpbGVyIHdoZXRoZXIgb3Igbm90IHRvIGF0dGVtcHQgdG8gaW5saW5lIGEgbWV0aG9kIG9yCmZ1bmN0aW9uLiBCeSBkZWZhdWx0LCB0aGUgY29tcGlsZXIgZG9lcyBhIHByZXR0eSBnb29kIGpvYiBvZiBmaWd1cmluZyB0aGlzIG91dAppdHNlbGYsIGJ1dCBpZiB5b3UgZmVlbCB0aGUgbmVlZCBmb3IgYW5ub3RhdGlvbnMsIGAjW2lubGluZShhbHdheXMpXWAgYW5kCmAjW2lubGluZShuZXZlcildYCBjYW4gb3ZlcnJpZGUgb3IgZm9yY2UgdGhlIGNvbXBpbGVyJ3MgZGVjaXNpb24uCgpJZiB5b3Ugd2lzaCB0byBhcHBseSB0aGlzIGF0dHJpYnV0ZSB0byBhbGwgbWV0aG9kcyBpbiBhbiBpbXBsLCBtYW51YWxseSBhbm5vdGF0ZQplYWNoIG1ldGhvZDsgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGFubm90YXRlIHRoZSBlbnRpcmUgaW1wbCB3aXRoIGFuIGAjW2lubGluZV1gCmF0dHJpYnV0ZS4KRTA1MjBBIG5vbi1kZWZhdWx0IGltcGxlbWVudGF0aW9uIHdhcyBhbHJlYWR5IG1hZGUgb24gdGhpcyB0eXBlIHNvIGl0IGNhbm5vdCBiZQpzcGVjaWFsaXplZCBmdXJ0aGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyMAojIVtmZWF0dXJlKHNwZWNpYWxpemF0aW9uKV0KCnRyYWl0IFNwYWNlTGxhbWEgewogICAgZm4gZmx5KCZzZWxmKTsKfQoKLy8gYXBwbGllcyB0byBhbGwgVAppbXBsPFQ+IFNwYWNlTGxhbWEgZm9yIFQgewogICAgZGVmYXVsdCBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIG5vbi1kZWZhdWx0IGltcGwKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUIGFuZCBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBmbiBmbHkoJnNlbGYpIHt9Cn0KCi8vIHNpbmNlIGBpMzJgIGlzIGNsb25lLCB0aGlzIGNvbmZsaWN0cyB3aXRoIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbgppbXBsIFNwYWNlTGxhbWEgZm9yIGkzMiB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30KICAgIC8vIGVycm9yOiBpdGVtIGBmbHlgIGlzIHByb3ZpZGVkIGJ5IGFuIGBpbXBsYCB0aGF0IHNwZWNpYWxpemVzCiAgICAvLyAgICAgICAgYW5vdGhlciwgYnV0IHRoZSBpdGVtIGluIHRoZSBwYXJlbnQgYGltcGxgIGlzIG5vdCBtYXJrZWQKICAgIC8vICAgICAgICBgZGVmYXVsdGAgYW5kIHNvIGl0IGNhbm5vdCBiZSBzcGVjaWFsaXplZC4KfQpgYGAKClNwZWNpYWxpemF0aW9uIG9ubHkgYWxsb3dzIHlvdSB0byBvdmVycmlkZSBgZGVmYXVsdGAgZnVuY3Rpb25zIGluCmltcGxlbWVudGF0aW9ucy4KClRvIGZpeCB0aGlzIGVycm9yLCB5b3UgbmVlZCB0byBtYXJrIGFsbCB0aGUgcGFyZW50IGltcGxlbWVudGF0aW9ucyBhcyBkZWZhdWx0LgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3BlY2lhbGl6YXRpb24pXQoKdHJhaXQgU3BhY2VMbGFtYSB7CiAgICBmbiBmbHkoJnNlbGYpOwp9CgovLyBhcHBsaWVzIHRvIGFsbCBUCmltcGw8VD4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbi4KfQoKLy8gYXBwbGllcyB0byBhbGwgYENsb25lYCBUOyBvdmVycmlkZXMgdGhlIHByZXZpb3VzIGltcGwKaW1wbDxUOiBDbG9uZT4gU3BhY2VMbGFtYSBmb3IgVCB7CiAgICBkZWZhdWx0IGZuIGZseSgmc2VsZikge30gLy8gVGhpcyBpcyBhIHBhcmVudCBpbXBsZW1lbnRhdGlvbiBidXQgd2FzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gcHJldmlvdXNseSBub3QgYSBkZWZhdWx0IG9uZSwgY2F1c2luZyB0aGUgZXJyb3IKfQoKLy8gYXBwbGllcyB0byBpMzIsIG92ZXJyaWRlcyB0aGUgcHJldmlvdXMgdHdvIGltcGxzCmltcGwgU3BhY2VMbGFtYSBmb3IgaTMyIHsKICAgIGZuIGZseSgmc2VsZikge30gLy8gQW5kIG5vdyB0aGF0J3Mgb2shCn0KYGBgCkUwNTIxQm9ycm93ZWQgZGF0YSBlc2NhcGVzIG91dHNpZGUgb2YgY2xvc3VyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjEKbGV0IG11dCBsaXN0OiBWZWM8JnN0cj4gPSBWZWM6Om5ldygpOwoKbGV0IF9hZGQgPSB8ZWw6ICZzdHJ8IHsKICAgIGxpc3QucHVzaChlbCk7IC8vIGVycm9yOiBgZWxgIGVzY2FwZXMgdGhlIGNsb3N1cmUgYm9keSBoZXJlCn07CmBgYAoKQSB0eXBlIGFubm90YXRpb24gb2YgYSBjbG9zdXJlIHBhcmFtZXRlciBpbXBsaWVzIGEgbmV3IGxpZmV0aW1lIGRlY2xhcmF0aW9uLgpDb25zaWRlciB0byBkcm9wIGl0LCB0aGUgY29tcGlsZXIgaXMgcmVsaWFibHkgYWJsZSB0byBpbmZlciB0aGVtLgoKYGBgCmxldCBtdXQgbGlzdDogVmVjPCZzdHI+ID0gVmVjOjpuZXcoKTsKCmxldCBfYWRkID0gfGVsfCB7CiAgICBsaXN0LnB1c2goZWwpOwp9OwpgYGAKClNlZSB0aGUgW0Nsb3N1cmUgdHlwZSBpbmZlcmVuY2UgYW5kIGFubm90YXRpb25dW2Nsb3N1cmUtaW5mZXJlLWFubm90YXRpb25dIGFuZApbTGlmZXRpbWUgZWxpc2lvbl1bbGlmZXRpbWUtZWxpc2lvbl0gc2VjdGlvbnMgb2YgdGhlIEJvb2sgZm9yIG1vcmUgZGV0YWlscy4KCltjbG9zdXJlLWluZmVyZS1hbm5vdGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTMtMDEtY2xvc3VyZXMuaHRtbCNjbG9zdXJlLXR5cGUtaW5mZXJlbmNlLWFuZC1hbm5vdGF0aW9uCltsaWZldGltZS1lbGlzaW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvbGlmZXRpbWUtZWxpc2lvbi5odG1sCkUwNTIyVGhlIGxhbmcgYXR0cmlidXRlIHdhcyB1c2VkIGluIGFuIGludmFsaWQgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjIKIyFbZmVhdHVyZShsYW5nX2l0ZW1zKV0KCiNbbGFuZyA9ICJjb29raWUiXQpmbiBjb29raWUoKSAtPiAhIHsgLy8gZXJyb3I6IGRlZmluaXRpb24gb2YgYW4gdW5rbm93biBsYW5ndWFnZSBpdGVtOiBgY29va2llYAogICAgbG9vcCB7fQp9CmBgYAoKVGhlIGxhbmcgYXR0cmlidXRlIGlzIGludGVuZGVkIGZvciBtYXJraW5nIHNwZWNpYWwgaXRlbXMgdGhhdCBhcmUgYnVpbHQtaW4gdG8KUnVzdCBpdHNlbGYuIFRoaXMgaW5jbHVkZXMgc3BlY2lhbCB0cmFpdHMgKGxpa2UgYENvcHlgIGFuZCBgU2l6ZWRgKSB0aGF0IGFmZmVjdApob3cgdGhlIGNvbXBpbGVyIGJlaGF2ZXMsIGFzIHdlbGwgYXMgc3BlY2lhbCBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgYXV0b21hdGljYWxseQppbnZva2VkIChzdWNoIGFzIHRoZSBoYW5kbGVyIGZvciBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIHdoZW4gaW5kZXhpbmcgYSBzbGljZSkuCkUwNTI0QSB2YXJpYWJsZSB3aGljaCByZXF1aXJlcyB1bmlxdWUgYWNjZXNzIGlzIGJlaW5nIHVzZWQgaW4gbW9yZSB0aGFuIG9uZSBjbG9zdXJlCmF0IHRoZSBzYW1lIHRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTI0CmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgbGV0IG11dCBjMSA9IHx8IHNldCh4KTsKICAgIGxldCBtdXQgYzIgPSB8fCBzZXQoeCk7IC8vIGVycm9yIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKVG8gc29sdmUgdGhpcyBpc3N1ZSwgbXVsdGlwbGUgc29sdXRpb25zIGFyZSBhdmFpbGFibGUuIEZpcnN0LCBpcyBpdCByZXF1aXJlZApmb3IgdGhpcyB2YXJpYWJsZSB0byBiZSB1c2VkIGluIG1vcmUgdGhhbiBvbmUgY2xvc3VyZSBhdCBhIHRpbWU/IElmIGl0IGlzIHRoZQpjYXNlLCB1c2UgcmVmZXJlbmNlIGNvdW50ZWQgdHlwZXMgc3VjaCBhcyBgUmNgIChvciBgQXJjYCBpZiBpdCBydW5zCmNvbmN1cnJlbnRseSk6CgpgYGAKdXNlIHN0ZDo6cmM6OlJjOwp1c2Ugc3RkOjpjZWxsOjpSZWZDZWxsOwoKZm4gc2V0KHg6ICZtdXQgaXNpemUpIHsKICAgICp4ICs9IDQ7Cn0KCmZuIGRyYWdvb29vbih4OiAmbXV0IGlzaXplKSB7CiAgICBsZXQgeCA9IFJjOjpuZXcoUmVmQ2VsbDo6bmV3KHgpKTsKICAgIGxldCB5ID0gUmM6OmNsb25lKCZ4KTsKICAgIGxldCBtdXQgYzEgPSB8fCB7IGxldCBtdXQgeDIgPSB4LmJvcnJvd19tdXQoKTsgc2V0KCZtdXQgeDIpOyB9OwogICAgbGV0IG11dCBjMiA9IHx8IHsgbGV0IG11dCB4MiA9IHkuYm9ycm93X211dCgpOyBzZXQoJm11dCB4Mik7IH07IC8vIG9rIQoKICAgIGMyKCk7CiAgICBjMSgpOwp9CmBgYAoKSWYgbm90LCBqdXN0IHJ1biBjbG9zdXJlcyBvbmUgYXQgYSB0aW1lOgoKYGBgCmZuIHNldCh4OiAmbXV0IGlzaXplKSB7CiAgICAqeCArPSA0Owp9CgpmbiBkcmFnb29vb24oeDogJm11dCBpc2l6ZSkgewogICAgeyAvLyBUaGlzIGJsb2NrIGlzbid0IG5lY2Vzc2FyeSBzaW5jZSBub24tbGV4aWNhbCBsaWZldGltZXMsIGl0J3MganVzdCB0bwogICAgICAvLyBtYWtlIGl0IG1vcmUgY2xlYXIuCiAgICAgICAgbGV0IG11dCBjMSA9IHx8IHNldCgmbXV0ICp4KTsKICAgICAgICBjMSgpOwogICAgfSAvLyBgYzFgIGhhcyBiZWVuIGRyb3BwZWQgaGVyZSBzbyB3ZSdyZSBmcmVlIHRvIHVzZSBgeGAgYWdhaW4hCiAgICBsZXQgbXV0IGMyID0gfHwgc2V0KCZtdXQgKngpOwogICAgYzIoKTsKfQpgYGAKRTA1MjVBIGNsb3N1cmUgd2FzIHVzZWQgYnV0IGRpZG4ndCBpbXBsZW1lbnQgdGhlIGV4cGVjdGVkIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyNQpzdHJ1Y3QgWDsKCmZuIGZvbzxUPihfOiBUKSB7fQpmbiBiYXI8VDogRm4odTMyKT4oXzogVCkge30KCmZuIG1haW4oKSB7CiAgICBsZXQgeCA9IFg7CiAgICBsZXQgY2xvc3VyZSA9IHxffCBmb28oeCk7IC8vIGVycm9yOiBleHBlY3RlZCBhIGNsb3N1cmUgdGhhdCBpbXBsZW1lbnRzCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGUgYEZuYCB0cmFpdCwgYnV0IHRoaXMgY2xvc3VyZSBvbmx5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbXBsZW1lbnRzIGBGbk9uY2VgCiAgICBiYXIoY2xvc3VyZSk7Cn0KYGBgCgpJbiB0aGUgZXhhbXBsZSBhYm92ZSwgYGNsb3N1cmVgIGlzIGFuIGBGbk9uY2VgIGNsb3N1cmUgd2hlcmVhcyB0aGUgYGJhcmAKZnVuY3Rpb24gZXhwZWN0ZWQgYW4gYEZuYCBjbG9zdXJlLiBJbiB0aGlzIGNhc2UsIGl0J3Mgc2ltcGxlIHRvIGZpeCB0aGUgaXNzdWUsCnlvdSBqdXN0IGhhdmUgdG8gaW1wbGVtZW50IGBDb3B5YCBhbmQgYENsb25lYCB0cmFpdHMgb24gYHN0cnVjdCBYYCBhbmQgaXQnbGwKYmUgb2s6CgpgYGAKI1tkZXJpdmUoQ2xvbmUsIENvcHkpXSAvLyBXZSBpbXBsZW1lbnQgYENsb25lYCBhbmQgYENvcHlgIHRyYWl0cy4Kc3RydWN0IFg7CgpmbiBmb288VD4oXzogVCkge30KZm4gYmFyPFQ6IEZuKHUzMik+KF86IFQpIHt9CgpmbiBtYWluKCkgewogICAgbGV0IHggPSBYOwogICAgbGV0IGNsb3N1cmUgPSB8X3wgZm9vKHgpOwogICAgYmFyKGNsb3N1cmUpOyAvLyBvayEKfQpgYGAKClRvIGJldHRlciB1bmRlcnN0YW5kIGhvdyB0aGVzZSB3b3JrIGluIFJ1c3QsIHJlYWQgdGhlIFtDbG9zdXJlc11bY2xvc3VyZXNdCmNoYXB0ZXIgb2YgdGhlIEJvb2suCgpbY2xvc3VyZXNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMy0wMS1jbG9zdXJlcy5odG1sCkUwNTI3VGhlIG51bWJlciBvZiBlbGVtZW50cyBpbiBhbiBhcnJheSBvciBzbGljZSBwYXR0ZXJuIGRpZmZlcmVkIGZyb20gdGhlIG51bWJlciBvZgplbGVtZW50cyBpbiB0aGUgYXJyYXkgYmVpbmcgbWF0Y2hlZC4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjcKbGV0IHIgPSAmWzEsIDIsIDMsIDRdOwptYXRjaCByIHsKICAgICZbYSwgYl0gPT4geyAvLyBlcnJvcjogcGF0dGVybiByZXF1aXJlcyAyIGVsZW1lbnRzIGJ1dCBhcnJheQogICAgICAgICAgICAgICAgIC8vICAgICAgICBoYXMgNAogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgcGF0dGVybiBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIG1hdGNoZWQKYXJyYXkuIEFkZGl0aW9uYWwgZWxlbWVudHMgY2FuIGJlIG1hdGNoZWQgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIC4uXSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9IiwgYSwgYik7CiAgICB9Cn0KYGBgCkUwNTI4QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiByZXF1aXJlZCBtb3JlIGVsZW1lbnRzIHRoYW4gd2VyZSBwcmVzZW50IGluIHRoZQptYXRjaGVkIGFycmF5LgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUyOApsZXQgciA9ICZbMSwgMl07Cm1hdGNoIHIgewogICAgJlthLCBiLCBjLCByZXN0IEAgLi5dID0+IHsgLy8gZXJyb3I6IHBhdHRlcm4gcmVxdWlyZXMgYXQgbGVhc3QgMwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGVsZW1lbnRzIGJ1dCBhcnJheSBoYXMgMgogICAgICAgIHByaW50bG4hKCJhPXt9LCBiPXt9LCBjPXt9IHJlc3Q9ezo/fSIsIGEsIGIsIGMsIHJlc3QpOwogICAgfQp9CmBgYAoKRW5zdXJlIHRoYXQgdGhlIG1hdGNoZWQgYXJyYXkgaGFzIGF0IGxlYXN0IGFzIG1hbnkgZWxlbWVudHMgYXMgdGhlIHBhdHRlcm4KcmVxdWlyZXMuIFlvdSBjYW4gbWF0Y2ggYW4gYXJiaXRyYXJ5IG51bWJlciBvZiByZW1haW5pbmcgZWxlbWVudHMgd2l0aCBgLi5gOgoKYGBgCmxldCByID0gJlsxLCAyLCAzLCA0LCA1XTsKbWF0Y2ggciB7CiAgICAmW2EsIGIsIGMsIHJlc3QgQCAuLl0gPT4geyAvLyBvayEKICAgICAgICAvLyBwcmludHMgYGE9MSwgYj0yLCBjPTMgcmVzdD1bNCwgNV1gCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30sIGM9e30gcmVzdD17Oj99IiwgYSwgYiwgYywgcmVzdCk7CiAgICB9Cn0KYGBgCkUwNTI5QW4gYXJyYXkgb3Igc2xpY2UgcGF0dGVybiB3YXMgbWF0Y2hlZCBhZ2FpbnN0IHNvbWUgb3RoZXIgdHlwZS4KCkV4YW1wbGUgb2YgZXJyb25lb3VzIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MjkKbGV0IHI6IGYzMiA9IDEuMDsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBlcnJvcjogZXhwZWN0ZWQgYW4gYXJyYXkgb3Igc2xpY2UsIGZvdW5kIGBmMzJgCiAgICAgICAgcHJpbnRsbiEoImE9e30sIGI9e30iLCBhLCBiKTsKICAgIH0KfQpgYGAKCkVuc3VyZSB0aGF0IHRoZSBwYXR0ZXJuIGFuZCB0aGUgZXhwcmVzc2lvbiBiZWluZyBtYXRjaGVkIG9uIGFyZSBvZiBjb25zaXN0ZW50CnR5cGVzOgoKYGBgCmxldCByID0gWzEuMCwgMi4wXTsKbWF0Y2ggciB7CiAgICBbYSwgYl0gPT4geyAvLyBvayEKICAgICAgICBwcmludGxuISgiYT17fSwgYj17fSIsIGEsIGIpOwogICAgfQp9CmBgYApFMDUzMEEgYmluZGluZyBzaGFkb3dlZCBzb21ldGhpbmcgaXQgc2hvdWxkbid0LgoKQSBtYXRjaCBhcm0gb3IgYSB2YXJpYWJsZSBoYXMgYSBuYW1lIHRoYXQgaXMgYWxyZWFkeSB1c2VkIGJ5CnNvbWV0aGluZyBlbHNlLCBlLmcuCgoqIHN0cnVjdCBuYW1lCiogZW51bSB2YXJpYW50Ciogc3RhdGljCiogYXNzb2NpYXRlZCBjb25zdGFudAoKVGhpcyBlcnJvciBtYXkgYWxzbyBoYXBwZW4gd2hlbiBhbiBlbnVtIHZhcmlhbnQgKndpdGggZmllbGRzKiBpcyB1c2VkCmluIGEgcGF0dGVybiwgYnV0IHdpdGhvdXQgaXRzIGZpZWxkcy4KCmBgYGNvbXBpbGVfZmFpbAplbnVtIEVudW0gewogICAgV2l0aEZpZWxkKGkzMikKfQoKdXNlIEVudW06Oio7Cm1hdGNoIFdpdGhGaWVsZCgxKSB7CiAgICBXaXRoRmllbGQgPT4ge30gLy8gZXJyb3I6IG1pc3NpbmcgKF8pCn0KYGBgCgpNYXRjaCBiaW5kaW5ncyBjYW5ub3Qgc2hhZG93IHN0YXRpY3M6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzAKc3RhdGljIFRFU1Q6IGkzMiA9IDA7CgpsZXQgciA9IDEyMzsKbWF0Y2ggciB7CiAgICBURVNUID0+IHt9IC8vIGVycm9yOiBuYW1lIG9mIGEgc3RhdGljCn0KYGBgCgpGaXhlZCBleGFtcGxlczoKCmBgYApzdGF0aWMgVEVTVDogaTMyID0gMDsKCmxldCByID0gMTIzOwptYXRjaCByIHsKICAgIHNvbWVfdmFsdWUgPT4ge30gLy8gb2shCn0KYGBgCgpvcgoKYGBgCmNvbnN0IFRFU1Q6IGkzMiA9IDA7IC8vIGNvbnN0LCBub3Qgc3RhdGljCgpsZXQgciA9IDEyMzsKbWF0Y2ggciB7CiAgICBURVNUID0+IHt9IC8vIGNvbnN0IGlzIG9rIQogICAgb3RoZXJfdmFsdWVzID0+IHt9Cn0KYGBgCkUwNTMxQW4gdW5rbm93biB0dXBsZSBzdHJ1Y3QvdmFyaWFudCBoYXMgYmVlbiB1c2VkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMQpsZXQgVHlwZSh4KSA9IFR5cGUoMTIpOyAvLyBlcnJvciEKbWF0Y2ggQmFyKDEyKSB7CiAgICBCYXIoeCkgPT4ge30gLy8gZXJyb3IhCiAgICBfID0+IHt9Cn0KYGBgCgpJbiBtb3N0IGNhc2VzLCBpdCdzIGVpdGhlciBhIGZvcmdvdHRlbiBpbXBvcnQgb3IgYSB0eXBvLiBIb3dldmVyLCBsZXQncyBsb29rIGF0CmhvdyB5b3UgY2FuIGhhdmUgc3VjaCBhIHR5cGU6CgpgYGBlZGl0aW9uMjAxOApzdHJ1Y3QgVHlwZSh1MzIpOyAvLyB0aGlzIGlzIGEgdHVwbGUgc3RydWN0CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwgLy8gdGhpcyBpcyBhIHR1cGxlIHZhcmlhbnQKfQoKdXNlIEZvbzo6KjsgLy8gVG8gdXNlIEZvbydzIHZhcmlhbnQgZGlyZWN0bHksIHdlIG5lZWQgdG8gaW1wb3J0IHRoZW0gaW4KICAgICAgICAgICAgLy8gdGhlIHNjb3BlLgpgYGAKCkVpdGhlciB3YXksIGl0IHNob3VsZCB3b3JrIGZpbmUgd2l0aCBvdXIgcHJldmlvdXMgY29kZToKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBUeXBlKHUzMik7CgplbnVtIEZvbyB7CiAgICBCYXIodTMyKSwKfQp1c2UgRm9vOjoqOwoKbGV0IFR5cGUoeCkgPSBUeXBlKDEyKTsgLy8gb2shCm1hdGNoIFR5cGUoMTIpIHsKICAgIFR5cGUoeCkgPT4ge30gLy8gb2shCiAgICBfID0+IHt9Cn0KYGBgCkUwNTMyUGF0dGVybiBhcm0gZGlkIG5vdCBtYXRjaCBleHBlY3RlZCBraW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMgplbnVtIFN0YXRlIHsKICAgIFN1Y2NlZWRlZCwKICAgIEZhaWxlZChTdHJpbmcpLAp9CgpmbiBwcmludF9vbl9mYWlsdXJlKHN0YXRlOiAmU3RhdGUpIHsKICAgIG1hdGNoICpzdGF0ZSB7CiAgICAgICAgLy8gZXJyb3I6IGV4cGVjdGVkIHVuaXQgc3RydWN0LCB1bml0IHZhcmlhbnQgb3IgY29uc3RhbnQsIGZvdW5kIHR1cGxlCiAgICAgICAgLy8gICAgICAgIHZhcmlhbnQgYFN0YXRlOjpGYWlsZWRgCiAgICAgICAgU3RhdGU6OkZhaWxlZCA9PiBwcmludGxuISgiRmFpbGVkIiksCiAgICAgICAgXyA9PiAoKQogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGVuc3VyZSB0aGUgbWF0Y2ggYXJtIGtpbmQgaXMgdGhlIHNhbWUgYXMgdGhlIGV4cHJlc3Npb24KbWF0Y2hlZC4KCkZpeGVkIGV4YW1wbGU6CgpgYGAKZW51bSBTdGF0ZSB7CiAgICBTdWNjZWVkZWQsCiAgICBGYWlsZWQoU3RyaW5nKSwKfQoKZm4gcHJpbnRfb25fZmFpbHVyZShzdGF0ZTogJlN0YXRlKSB7CiAgICBtYXRjaCAqc3RhdGUgewogICAgICAgIFN0YXRlOjpGYWlsZWQocmVmIG1zZykgPT4gcHJpbnRsbiEoIkZhaWxlZCB3aXRoIHt9IiwgbXNnKSwKICAgICAgICBfID0+ICgpCiAgICB9Cn0KYGBgCkUwNTMzQW4gaXRlbSB3aGljaCBpc24ndCBhIHVuaXQgc3RydWN0LCBhIHZhcmlhbnQsIG5vciBhIGNvbnN0YW50IGhhcyBiZWVuIHVzZWQgYXMgYQptYXRjaCBwYXR0ZXJuLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzMwpzdHJ1Y3QgVG9ydG9pc2U7CgppbXBsIFRvcnRvaXNlIHsKICAgIGZuIHR1cnRsZSgmc2VsZikgLT4gdTMyIHsgMCB9Cn0KCm1hdGNoIDB1MzIgewogICAgVG9ydG9pc2U6OnR1cnRsZSA9PiB7fSAvLyBFcnJvciEKICAgIF8gPT4ge30KfQppZiBsZXQgVG9ydG9pc2U6OnR1cnRsZSA9IDB1MzIge30gLy8gU2FtZSBlcnJvciEKYGBgCgpJZiB5b3Ugd2FudCB0byBtYXRjaCBhZ2FpbnN0IGEgdmFsdWUgcmV0dXJuZWQgYnkgYSBtZXRob2QsIHlvdSBuZWVkIHRvIGJpbmQgdGhlCnZhbHVlIGZpcnN0OgoKYGBgCnN0cnVjdCBUb3J0b2lzZTsKCmltcGwgVG9ydG9pc2UgewogICAgZm4gdHVydGxlKCZzZWxmKSAtPiB1MzIgeyAwIH0KfQoKbWF0Y2ggMHUzMiB7CiAgICB4IGlmIHggPT0gVG9ydG9pc2UudHVydGxlKCkgPT4ge30gLy8gQm91bmQgaW50byBgeGAgdGhlbiB3ZSBjb21wYXJlIGl0IQogICAgXyA9PiB7fQp9CmBgYApFMDUzNFRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1MzQKI1tpbmxpbmUoKV0gLy8gZXJyb3I6IGV4cGVjdGVkIG9uZSBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBwYXJlbnRoZXNpemVkIGBpbmxpbmVgIGF0dHJpYnV0ZSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIHRvIGJlIHNwZWNpZmllZDoKCmBgYAojW2lubGluZShhbHdheXMpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCm9yOgoKYGBgCiNbaW5saW5lKG5ldmVyKV0KZm4gc29tZXRoaW5nKCkge30KYGBgCgpBbHRlcm5hdGl2ZWx5LCBhIHBhcmVuLWxlc3MgdmVyc2lvbiBvZiB0aGUgYXR0cmlidXRlIG1heSBiZSB1c2VkIHRvIGhpbnQgdGhlCmNvbXBpbGVyIGFib3V0IGlubGluaW5nIG9wcG9ydHVuaXR5OgoKYGBgCiNbaW5saW5lXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbmxpbmVgIGF0dHJpYnV0ZV1baW5saW5lLWF0dHJpYnV0ZV0gc2VjdGlvbgpvZiB0aGUgUmVmZXJlbmNlLgoKW2lubGluZS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbCN0aGUtaW5saW5lLWF0dHJpYnV0ZQpFMDUzNUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5saW5lYCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM1CiNbaW5saW5lKHVua25vd24pXSAvLyBlcnJvcjogaW52YWxpZCBhcmd1bWVudApwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzOgoKICogYWx3YXlzCiAqIG5ldmVyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5saW5lYCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcyBlcnJvci4KRXhhbXBsZToKCmBgYAojW2lubGluZShuZXZlcildIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbmxpbmVgIEF0dHJpYnV0ZV1baW5saW5lLWF0dHJpYnV0ZV0gc2VjdGlvbgpvZiB0aGUgUmVmZXJlbmNlLgoKW2lubGluZS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbCN0aGUtaW5saW5lLWF0dHJpYnV0ZQpFMDUzNlRoZSBgbm90YCBjZmctcHJlZGljYXRlIHdhcyBtYWxmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM2CiNbY2ZnKG5vdCgpKV0gLy8gZXJyb3I6IGV4cGVjdGVkIDEgY2ZnLXBhdHRlcm4KcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKVGhlIGBub3RgIHByZWRpY2F0ZSBleHBlY3RzIG9uZSBjZmctcGF0dGVybi4gRXhhbXBsZToKCmBgYAojW2NmZyhub3QodGFyZ2V0X29zID0gImxpbnV4IikpXSAvLyBvayEKcHViIGZuIHNvbWV0aGluZygpIHt9CgpwdWIgZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGBjZmdgIGF0dHJpYnV0ZSwgcmVhZCB0aGUgc2VjdGlvbiBvbgpbQ29uZGl0aW9uYWwgQ29tcGlsYXRpb25dW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXSBpbiB0aGUgUmVmZXJlbmNlLgoKW2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvY29uZGl0aW9uYWwtY29tcGlsYXRpb24uaHRtbApFMDUzN0FuIHVua25vd24gcHJlZGljYXRlIHdhcyB1c2VkIGluc2lkZSB0aGUgYGNmZ2AgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzNwojW2NmZyh1bmtub3duKCkpXSAvLyBlcnJvcjogaW52YWxpZCBwcmVkaWNhdGUgYHVua25vd25gCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgY2ZnYCBhdHRyaWJ1dGUgc3VwcG9ydHMgb25seSB0aHJlZSBraW5kcyBvZiBwcmVkaWNhdGVzOgoKICogYW55CiAqIGFsbAogKiBub3QKCkV4YW1wbGU6CgpgYGAKI1tjZmcobm90KHRhcmdldF9vcyA9ICJsaW51eCIpKV0gLy8gb2shCnB1YiBmbiBzb21ldGhpbmcoKSB7fQoKcHViIGZuIG1haW4oKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBgY2ZnYCBhdHRyaWJ1dGUsIHJlYWQgdGhlIHNlY3Rpb24gb24KW0NvbmRpdGlvbmFsIENvbXBpbGF0aW9uXVtjb25kaXRpb25hbC1jb21waWxhdGlvbl0gaW4gdGhlIFJlZmVyZW5jZS4KCltjb25kaXRpb25hbC1jb21waWxhdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2NvbmRpdGlvbmFsLWNvbXBpbGF0aW9uLmh0bWwKRTA1MzhBdHRyaWJ1dGUgY29udGFpbnMgc2FtZSBtZXRhIGl0ZW0gbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTM4CiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlPSIxLjAuMCIsCiAgICBub3RlPSJGaXJzdCBkZXByZWNhdGlvbiBub3RlLiIsCiAgICBub3RlPSJTZWNvbmQgZGVwcmVjYXRpb24gbm90ZS4iIC8vIGVycm9yOiBtdWx0aXBsZSBzYW1lIG1ldGEgaXRlbQopXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIEVhY2gga2V5IG1heSBvbmx5IGJlCnVzZWQgb25jZSBpbiBlYWNoIGF0dHJpYnV0ZS4KClRvIGZpeCB0aGUgcHJvYmxlbSwgcmVtb3ZlIGFsbCBidXQgb25lIG9mIHRoZSBtZXRhIGl0ZW1zIHdpdGggdGhlIHNhbWUga2V5LgoKRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgbm90ZT0iRmlyc3QgZGVwcmVjYXRpb24gbm90ZS4iCildCmZuIGRlcHJlY2F0ZWRfZnVuY3Rpb24oKSB7fQpgYGAKRTA1MzlBbiBpbnZhbGlkIG1ldGEtaXRlbSB3YXMgdXNlZCBpbnNpZGUgYW4gYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDUzOQojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbZGVwcmVjYXRlZChub3RlKV0gLy8gZXJyb3IhCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJkZXByZWNhdGVkX2ZuIiwgaXNzdWUgPSAiMTIzIildCmZuIGRlcHJlY2F0ZWQoKSB7fQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX3N0cnVjdCIsIGlzc3VlKV0gLy8gZXJyb3IhCnN0cnVjdCBVbnN0YWJsZTsKCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiB1bnN0YWJsZV9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gInN0YWJsZV9zdHJ1Y3QiLCBzaW5jZSldIC8vIGVycm9yIQpzdHJ1Y3QgU3RhYmxlOwoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSldIC8vIGVycm9yIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4KVG8gZml4IHRoZXNlIGlzc3VlcyB5b3UgbmVlZCB0byBnaXZlIHJlcXVpcmVkIGtleS12YWx1ZSBwYWlycy4KCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbZGVwcmVjYXRlZChzaW5jZSA9ICIxLjM5LjAiLCBub3RlID0gInJlYXNvbiIpXSAvLyBvayEKI1t1bnN0YWJsZShmZWF0dXJlID0gImRlcHJlY2F0ZWRfZm4iLCBpc3N1ZSA9ICIxMjMiKV0KZm4gZGVwcmVjYXRlZCgpIHt9CgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfc3RydWN0IiwgaXNzdWUgPSAiMTIzIildIC8vIG9rIQpzdHJ1Y3QgVW5zdGFibGU7CgojW3J1c3RjX2NvbnN0X3Vuc3RhYmxlKGZlYXR1cmUgPSAidW5zdGFibGVfZm4iLCBpc3N1ZSA9ICIxMjQiKV0gLy8gb2shCmNvbnN0IGZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX3N0cnVjdCIsIHNpbmNlID0gIjEuMzkuMCIpXSAvLyBvayEKc3RydWN0IFN0YWJsZTsKCiNbcnVzdGNfY29uc3Rfc3RhYmxlKGZlYXR1cmUgPSAic3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4zOS4wIildIC8vIG9rIQpjb25zdCBmbiBzdGFibGVfZm4oKSB7fQpgYGAKRTA1NDFBbiB1bmtub3duIG1ldGEgaXRlbSB3YXMgdXNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDEKI1tkZXByZWNhdGVkKAogICAgc2luY2U9IjEuMC4wIiwKICAgIC8vIGVycm9yOiB1bmtub3duIG1ldGEgaXRlbQogICAgcmVhc29uPSJFeGFtcGxlIGludmFsaWQgbWV0YSBpdGVtLiBTaG91bGQgYmUgJ25vdGUnIikKXQpmbiBkZXByZWNhdGVkX2Z1bmN0aW9uKCkge30KYGBgCgpNZXRhIGl0ZW1zIGFyZSB0aGUga2V5LXZhbHVlIHBhaXJzIGluc2lkZSBvZiBhbiBhdHRyaWJ1dGUuIFRoZSBrZXlzIHByb3ZpZGVkCm11c3QgYmUgb25lIG9mIHRoZSB2YWxpZCBrZXlzIGZvciB0aGUgc3BlY2lmaWVkIGF0dHJpYnV0ZS4KClRvIGZpeCB0aGUgcHJvYmxlbSwgZWl0aGVyIHJlbW92ZSB0aGUgdW5rbm93biBtZXRhIGl0ZW0sIG9yIHJlbmFtZSBpdCBpZiB5b3UKcHJvdmlkZWQgdGhlIHdyb25nIG5hbWUuCgpJbiB0aGUgZXJyb25lb3VzIGNvZGUgZXhhbXBsZSBhYm92ZSwgdGhlIHdyb25nIG5hbWUgd2FzIHByb3ZpZGVkLCBzbyBjaGFuZ2luZwp0byBhIGNvcnJlY3Qgb25lIGl0IHdpbGwgZml4IHRoZSBlcnJvci4gRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZT0iMS4wLjAiLAogICAgbm90ZT0iVGhpcyBpcyBhIHZhbGlkIG1ldGEgaXRlbSBmb3IgdGhlIGRlcHJlY2F0ZWQgYXR0cmlidXRlLiIKKV0KZm4gZGVwcmVjYXRlZF9mdW5jdGlvbigpIHt9CmBgYApFMDU0MlRoZSBgc2luY2VgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0MgojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAiX3N0YWJsZV9mbiIpXSAvLyBpbnZhbGlkCmZuIF9zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2NvbnN0X2ZuIildIC8vIGludmFsaWQKY29uc3QgZm4gX3N0YWJsZV9jb25zdF9mbigpIHt9CgojW3N0YWJsZShmZWF0dXJlID0gIl9kZXByZWNhdGVkX2ZuIiwgc2luY2UgPSAiMC4xLjAiKV0KI1tkZXByZWNhdGVkKAogICAgbm90ZSA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgc2luY2VgIGZpZWxkLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2ZuIiwgc2luY2UgPSAiMS4wLjAiKV0gLy8gb2shCmZuIF9zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF9zdGFibGUoZmVhdHVyZSA9ICJfc3RhYmxlX2NvbnN0X2ZuIiwgc2luY2UgPSAiMS4wLjAiKV0gLy8gb2shCmNvbnN0IGZuIF9zdGFibGVfY29uc3RfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJfZGVwcmVjYXRlZF9mbiIsIHNpbmNlID0gIjAuMS4wIildCiNbZGVwcmVjYXRlZCgKICAgIHNpbmNlID0gIjEuMC4wIiwKICAgIG5vdGUgPSAiZXhwbGFuYXRpb24gZm9yIGRlcHJlY2F0aW9uIgopXSAvLyBvayEKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClNlZSB0aGUgW0hvdyBSdXN0IGlzIE1hZGUgYW5kIOKAnE5pZ2h0bHkgUnVzdOKAnV1baG93LXJ1c3QtbWFkZS1uaWdodGx5XSBhcHBlbmRpeApvZiB0aGUgQm9vayBhbmQgdGhlIFtTdGFiaWxpdHkgYXR0cmlidXRlc11bc3RhYmlsaXR5LWF0dHJpYnV0ZXNdIHNlY3Rpb24gb2YgdGhlClJ1c3RjIERldiBHdWlkZSBmb3IgbW9yZSBkZXRhaWxzLgoKW2hvdy1ydXN0LW1hZGUtbmlnaHRseV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wNy1uaWdodGx5LXJ1c3QuaHRtbApbc3RhYmlsaXR5LWF0dHJpYnV0ZXNdOiBodHRwczovL3J1c3RjLWRldi1ndWlkZS5ydXN0LWxhbmcub3JnL3N0YWJpbGl0eS5odG1sCkUwNTQzVGhlIGBub3RlYCB2YWx1ZSBpcyBtaXNzaW5nIGluIGEgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDMKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShzaW5jZSA9ICIwLjEuMCIsIGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iKV0KI1tkZXByZWNhdGVkKAogICAgc2luY2UgPSAiMS4wLjAiCildIC8vIGludmFsaWQKZm4gX2RlcHJlY2F0ZWRfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIHRoZSBgbm90ZWAgZmllbGQuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3N0YWJsZShzaW5jZSA9ICIwLjEuMCIsIGZlYXR1cmUgPSAiX2RlcHJlY2F0ZWRfZm4iKV0KI1tkZXByZWNhdGVkKAogICAgc2luY2UgPSAiMS4wLjAiLAogICAgbm90ZSA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIG9rIQpmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKRTA1NDRNdWx0aXBsZSBzdGFiaWxpdHkgYXR0cmlidXRlcyB3ZXJlIGRlY2xhcmVkIG9uIHRoZSBzYW1lIGl0ZW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQ0CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAicnVzdDEiKV0KCiNbc3RhYmxlKGZlYXR1cmUgPSAicnVzdDEiLCBzaW5jZSA9ICIxLjAuMCIpXQojW3N0YWJsZShmZWF0dXJlID0gInRlc3QiLCBzaW5jZSA9ICIyLjAuMCIpXSAvLyBpbnZhbGlkCmZuIGZvbygpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIGVuc3VyZSB0aGF0IGVhY2ggaXRlbSBoYXMgYXQgbW9zdCBvbmUgc3RhYmlsaXR5IGF0dHJpYnV0ZS4KCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInJ1c3QxIildCgojW3N0YWJsZShmZWF0dXJlID0gInRlc3QiLCBzaW5jZSA9ICIyLjAuMCIpXSAvLyBvayEKZm4gZm9vKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbApFMDU0NVRoZSBgaXNzdWVgIHZhbHVlIGlzIGluY29ycmVjdCBpbiBhIHN0YWJpbGl0eSBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTQ1CiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9mbiIsIGlzc3VlID0gIjAiKV0gLy8gaW52YWxpZApmbiBfdW5zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIsIGlzc3VlID0gIjAiKV0gLy8gaW52YWxpZApjb25zdCBmbiBfdW5zdGFibGVfY29uc3RfZm4oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGlzc3VlLCB5b3UgbmVlZCB0byBwcm92aWRlIGEgY29ycmVjdCB2YWx1ZSBpbiB0aGUgYGlzc3VlYCBmaWVsZC4KRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJfdW5zdGFibGVfZm4iLCBpc3N1ZSA9ICJub25lIildIC8vIG9rIQpmbiBfdW5zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIsIGlzc3VlID0gIjEiKV0gLy8gb2shCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKRTA1NDZUaGUgYGZlYXR1cmVgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0NgojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoaXNzdWUgPSAibm9uZSIpXSAvLyBpbnZhbGlkCmZuIHVuc3RhYmxlX2ZuKCkge30KCiNbc3RhYmxlKHNpbmNlID0gIjEuMC4wIildIC8vIGludmFsaWQKZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgeW91IG5lZWQgdG8gcHJvdmlkZSB0aGUgYGZlYXR1cmVgIGZpZWxkLiBFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1t1bnN0YWJsZShmZWF0dXJlID0gInVuc3RhYmxlX2ZuIiwgaXNzdWUgPSAibm9uZSIpXSAvLyBvayEKZm4gdW5zdGFibGVfZm4oKSB7fQoKI1tzdGFibGUoZmVhdHVyZSA9ICJzdGFibGVfZm4iLCBzaW5jZSA9ICIxLjAuMCIpXSAvLyBvayEKZm4gc3RhYmxlX2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbApFMDU0N1RoZSBgaXNzdWVgIHZhbHVlIGlzIG1pc3NpbmcgaW4gYSBzdGFiaWxpdHkgYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU0NwojIVtmZWF0dXJlKHN0YWdlZF9hcGkpXQojIVtzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KCiNbdW5zdGFibGUoZmVhdHVyZSA9ICJfdW5zdGFibGVfZm4iKV0gLy8gaW52YWxpZApmbiBfdW5zdGFibGVfZm4oKSB7fQoKI1tydXN0Y19jb25zdF91bnN0YWJsZShmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIpXSAvLyBpbnZhbGlkCmNvbnN0IGZuIF91bnN0YWJsZV9jb25zdF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIHByb3ZpZGUgdGhlIGBpc3N1ZWAgZmllbGQuIEV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiX3Vuc3RhYmxlX2ZuIiwgaXNzdWUgPSAibm9uZSIpXSAvLyBvayEKZm4gX3Vuc3RhYmxlX2ZuKCkge30KCiNbcnVzdGNfY29uc3RfdW5zdGFibGUoCiAgICBmZWF0dXJlID0gIl91bnN0YWJsZV9jb25zdF9mbiIsCiAgICBpc3N1ZSA9ICJub25lIgopXSAvLyBvayEKY29uc3QgZm4gX3Vuc3RhYmxlX2NvbnN0X2ZuKCkge30KYGBgCgpTZWUgdGhlIFtIb3cgUnVzdCBpcyBNYWRlIGFuZCDigJxOaWdodGx5IFJ1c3TigJ1dW2hvdy1ydXN0LW1hZGUtbmlnaHRseV0gYXBwZW5kaXgKb2YgdGhlIEJvb2sgYW5kIHRoZSBbU3RhYmlsaXR5IGF0dHJpYnV0ZXNdW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXSBzZWN0aW9uIG9mIHRoZQpSdXN0YyBEZXYgR3VpZGUgZm9yIG1vcmUgZGV0YWlscy4KCltob3ctcnVzdC1tYWRlLW5pZ2h0bHldOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svYXBwZW5kaXgtMDctbmlnaHRseS1ydXN0Lmh0bWwKW3N0YWJpbGl0eS1hdHRyaWJ1dGVzXTogaHR0cHM6Ly9ydXN0Yy1kZXYtZ3VpZGUucnVzdC1sYW5nLm9yZy9zdGFiaWxpdHkuaHRtbApFMDU0OUEgYGRlcHJlY2F0ZWRgIGF0dHJpYnV0ZSB3YXNuJ3QgcGFpcmVkIHdpdGggYSBgc3RhYmxlYC9gdW5zdGFibGVgIGF0dHJpYnV0ZSB3aXRoCmAjIVtmZWF0dXJlKHN0YWdlZF9hcGkpXWAgZW5hYmxlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NDkKIyFbZmVhdHVyZShzdGFnZWRfYXBpKV0KIyFbc3RhYmxlKHNpbmNlID0gIjEuMC4wIiwgZmVhdHVyZSA9ICJ0ZXN0IildCgojW2RlcHJlY2F0ZWQoCiAgICBzaW5jZSA9ICIxLjAuMSIsCiAgICBub3RlID0gImV4cGxhbmF0aW9uIGZvciBkZXByZWNhdGlvbiIKKV0gLy8gaW52YWxpZApmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHlvdSBuZWVkIHRvIGFkZCBhbHNvIGFuIGF0dHJpYnV0ZSBgc3RhYmxlYCBvciBgdW5zdGFibGVgLgpFeGFtcGxlOgoKYGBgCiMhW2ZlYXR1cmUoc3RhZ2VkX2FwaSldCiMhW3N0YWJsZShzaW5jZSA9ICIxLjAuMCIsIGZlYXR1cmUgPSAidGVzdCIpXQoKI1tzdGFibGUoc2luY2UgPSAiMS4wLjAiLCBmZWF0dXJlID0gInRlc3QiKV0KI1tkZXByZWNhdGVkKAogICAgc2luY2UgPSAiMS4wLjEiLAogICAgbm90ZSA9ICJleHBsYW5hdGlvbiBmb3IgZGVwcmVjYXRpb24iCildIC8vIG9rIQpmbiBfZGVwcmVjYXRlZF9mbigpIHt9CmBgYAoKU2VlIHRoZSBbSG93IFJ1c3QgaXMgTWFkZSBhbmQg4oCcTmlnaHRseSBSdXN04oCdXVtob3ctcnVzdC1tYWRlLW5pZ2h0bHldIGFwcGVuZGl4Cm9mIHRoZSBCb29rIGFuZCB0aGUgW1N0YWJpbGl0eSBhdHRyaWJ1dGVzXVtzdGFiaWxpdHktYXR0cmlidXRlc10gc2VjdGlvbiBvZiB0aGUKUnVzdGMgRGV2IEd1aWRlIGZvciBtb3JlIGRldGFpbHMuCgpbaG93LXJ1c3QtbWFkZS1uaWdodGx5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTA3LW5pZ2h0bHktcnVzdC5odG1sCltzdGFiaWxpdHktYXR0cmlidXRlc106IGh0dHBzOi8vcnVzdGMtZGV2LWd1aWRlLnJ1c3QtbGFuZy5vcmcvc3RhYmlsaXR5Lmh0bWwKRTA1NTAjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIKCk1vcmUgdGhhbiBvbmUgYGRlcHJlY2F0ZWRgIGF0dHJpYnV0ZSBoYXMgYmVlbiBwdXQgb24gYW4gaXRlbS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwKI1tkZXByZWNhdGVkKG5vdGUgPSAiYmVjYXVzZSB3aHkgbm90PyIpXQojW2RlcHJlY2F0ZWQobm90ZSA9ICJyaWdodD8iKV0gLy8gZXJyb3IhCmZuIHRoZV9iYW5pc2hlZCgpIHt9CmBgYAoKVGhlIGBkZXByZWNhdGVkYCBhdHRyaWJ1dGUgY2FuIG9ubHkgYmUgcHJlc2VudCAqKm9uY2UqKiBvbiBhbiBpdGVtLgoKYGBgCiNbZGVwcmVjYXRlZChub3RlID0gImJlY2F1c2Ugd2h5IG5vdCwgcmlnaHQ/IildCmZuIHRoZV9iYW5pc2hlZCgpIHt9IC8vIG9rIQpgYGAKRTA1NTFBbiBpbnZhbGlkIG1ldGEtaXRlbSB3YXMgdXNlZCBpbnNpZGUgYW4gYXR0cmlidXRlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU1MQojW2RlcHJlY2F0ZWQobm90ZSldIC8vIGVycm9yIQpmbiBpX2FtX2RlcHJlY2F0ZWQoKSB7fQpgYGAKCk1ldGEgaXRlbXMgYXJlIHRoZSBrZXktdmFsdWUgcGFpcnMgaW5zaWRlIG9mIGFuIGF0dHJpYnV0ZS4gVG8gZml4IHRoaXMgaXNzdWUsCnlvdSBuZWVkIHRvIGdpdmUgYSB2YWx1ZSB0byB0aGUgYG5vdGVgIGtleS4gRXhhbXBsZToKCmBgYAojW2RlcHJlY2F0ZWQobm90ZSA9ICJiZWNhdXNlIildIC8vIG9rIQpmbiBpX2FtX2RlcHJlY2F0ZWQoKSB7fQpgYGAKRTA1NTJBIHVucmVjb2duaXplZCByZXByZXNlbnRhdGlvbiBhdHRyaWJ1dGUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTUyCiNbcmVwcihEKV0gLy8gZXJyb3I6IHVucmVjb2duaXplZCByZXByZXNlbnRhdGlvbiBoaW50CnN0cnVjdCBNeVN0cnVjdCB7CiAgICBteV9maWVsZDogdXNpemUKfQpgYGAKCllvdSBjYW4gdXNlIGEgYHJlcHJgIGF0dHJpYnV0ZSB0byB0ZWxsIHRoZSBjb21waWxlciBob3cgeW91IHdhbnQgYSBzdHJ1Y3Qgb3IKZW51bSB0byBiZSBsYWlkIG91dCBpbiBtZW1vcnkuCgpNYWtlIHN1cmUgeW91J3JlIHVzaW5nIG9uZSBvZiB0aGUgc3VwcG9ydGVkIG9wdGlvbnM6CgpgYGAKI1tyZXByKEMpXSAvLyBvayEKc3RydWN0IE15U3RydWN0IHsKICAgIG15X2ZpZWxkOiB1c2l6ZQp9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgc3BlY2lmeWluZyByZXByZXNlbnRhdGlvbnMsIHNlZSB0aGUgWyJBbHRlcm5hdGl2ZQpSZXByZXNlbnRhdGlvbnMiIHNlY3Rpb25dIG9mIHRoZSBSdXN0b25vbWljb24uCgpbIkFsdGVybmF0aXZlIFJlcHJlc2VudGF0aW9ucyIgc2VjdGlvbl06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbm9taWNvbi9vdGhlci1yZXBycy5odG1sCkUwNTU0RmVhdHVyZSBhdHRyaWJ1dGVzIGFyZSBvbmx5IGFsbG93ZWQgb24gdGhlIG5pZ2h0bHkgcmVsZWFzZSBjaGFubmVsLiBTdGFibGUgb3IKYmV0YSBjb21waWxlcnMgd2lsbCBub3QgY29tcGx5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoZGVwZW5kcyBvbiByZWxlYXNlIGNoYW5uZWwpCiMhW2ZlYXR1cmUobGFuZ19pdGVtcyldIC8vIGVycm9yOiBgIyFbZmVhdHVyZV1gIG1heSBub3QgYmUgdXNlZCBvbiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIHN0YWJsZSByZWxlYXNlIGNoYW5uZWwKYGBgCgpJZiB5b3UgbmVlZCB0aGUgZmVhdHVyZSwgbWFrZSBzdXJlIHRvIHVzZSBhIG5pZ2h0bHkgcmVsZWFzZSBvZiB0aGUgY29tcGlsZXIKKGJ1dCBiZSB3YXJuZWQgdGhhdCB0aGUgZmVhdHVyZSBtYXkgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGluIHRoZSBmdXR1cmUpLgpFMDU1NlRoZSBgZmVhdHVyZWAgYXR0cmlidXRlIHdhcyBiYWRseSBmb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU2CiMhW2ZlYXR1cmUoZm9vX2Jhcl9iYXosIGZvbyhiYXIpLCBmb28gPSAiYmF6IiwgZm9vKV0gLy8gZXJyb3IhCiMhW2ZlYXR1cmVdIC8vIGVycm9yIQojIVtmZWF0dXJlID0gImZvbyJdIC8vIGVycm9yIQpgYGAKClRoZSBgZmVhdHVyZWAgYXR0cmlidXRlIG9ubHkgYWNjZXB0IGEgImZlYXR1cmUgZmxhZyIgYW5kIGNhbiBvbmx5IGJlIHVzZWQgb24KbmlnaHRseS4gRXhhbXBsZToKCmBgYGlnbm9yZSAob25seSB3b3JrcyBpbiBuaWdodGx5KQojIVtmZWF0dXJlKGZsYWcpXQpgYGAKRTA1NTdBIGZlYXR1cmUgYXR0cmlidXRlIG5hbWVkIGEgZmVhdHVyZSB0aGF0IGhhcyBiZWVuIHJlbW92ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU3CiMhW2ZlYXR1cmUobWFuYWdlZF9ib3hlcyldIC8vIGVycm9yOiBmZWF0dXJlIGhhcyBiZWVuIHJlbW92ZWQKYGBgCgpEZWxldGUgdGhlIG9mZmVuZGluZyBmZWF0dXJlIGF0dHJpYnV0ZS4KRTA1NTlBbiB1bmtub3duIGZpZWxkIHdhcyBzcGVjaWZpZWQgaW50byBhbiBlbnVtJ3Mgc3RydWN0dXJlIHZhcmlhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTU5CmVudW0gRmllbGQgewogICAgRm9vbCB7IHg6IHUzMiB9LAp9CgpsZXQgcyA9IEZpZWxkOjpGb29sIHsgam9rZTogMCB9OwovLyBlcnJvcjogc3RydWN0IHZhcmlhbnQgYEZpZWxkOjpGb29sYCBoYXMgbm8gZmllbGQgbmFtZWQgYGpva2VgCmBgYAoKVmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIGZpZWxkJ3MgbmFtZSBvciB0aGF0IHRoZSBmaWVsZCBleGlzdHMuIEV4YW1wbGU6CgpgYGAKZW51bSBGaWVsZCB7CiAgICBGb29sIHsgam9rZTogdTMyIH0sCn0KCmxldCBzID0gRmllbGQ6OkZvb2wgeyBqb2tlOiAwIH07IC8vIG9rIQpgYGAKRTA1NjBBbiB1bmtub3duIGZpZWxkIHdhcyBzcGVjaWZpZWQgaW50byBhIHN0cnVjdHVyZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NjAKc3RydWN0IFNpbWJhIHsKICAgIG1vdGhlcjogdTMyLAp9CgpsZXQgcyA9IFNpbWJhIHsgbW90aGVyOiAxLCBmYXRoZXI6IDAgfTsKLy8gZXJyb3I6IHN0cnVjdHVyZSBgU2ltYmFgIGhhcyBubyBmaWVsZCBuYW1lZCBgZmF0aGVyYApgYGAKClZlcmlmeSB5b3UgZGlkbid0IG1pc3NwZWxsIHRoZSBmaWVsZCdzIG5hbWUgb3IgdGhhdCB0aGUgZmllbGQgZXhpc3RzLiBFeGFtcGxlOgoKYGBgCnN0cnVjdCBTaW1iYSB7CiAgICBtb3RoZXI6IHUzMiwKICAgIGZhdGhlcjogdTMyLAp9CgpsZXQgcyA9IFNpbWJhIHsgbW90aGVyOiAxLCBmYXRoZXI6IDAgfTsgLy8gb2shCmBgYApFMDU2MUEgbm9uLWlkZW50IG9yIG5vbi13aWxkY2FyZCBwYXR0ZXJuIGhhcyBiZWVuIHVzZWQgYXMgYSBwYXJhbWV0ZXIgb2YgYSBmdW5jdGlvbgpwb2ludGVyIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTYxCnR5cGUgQTEgPSBmbihtdXQgcGFyYW06IHU4KTsgLy8gZXJyb3IhCnR5cGUgQTIgPSBmbigmcGFyYW06IHUzMik7IC8vIGVycm9yIQpgYGAKCldoZW4gdXNpbmcgYW4gYWxpYXMgb3ZlciBhIGZ1bmN0aW9uIHR5cGUsIHlvdSBjYW5ub3QgZS5nLiBkZW5vdGUgYSBwYXJhbWV0ZXIgYXMKYmVpbmcgbXV0YWJsZS4KClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSBwYXR0ZXJucyAoYF9gIGlzIGFsbG93ZWQgdGhvdWdoKS4gRXhhbXBsZToKCmBgYAp0eXBlIEExID0gZm4ocGFyYW06IHU4KTsgLy8gb2shCnR5cGUgQTIgPSBmbihfOiB1MzIpOyAvLyBvayEKYGBgCgpZb3UgY2FuIGFsc28gb21pdCB0aGUgcGFyYW1ldGVyIG5hbWU6CgpgYGAKdHlwZSBBMyA9IGZuKGkxNik7IC8vIG9rIQpgYGAKRTA1NjJBYnN0cmFjdCByZXR1cm4gdHlwZXMgKHdyaXR0ZW4gYGltcGwgVHJhaXRgIGZvciBzb21lIHRyYWl0IGBUcmFpdGApIGFyZSBvbmx5CmFsbG93ZWQgYXMgZnVuY3Rpb24gYW5kIGluaGVyZW50IGltcGwgcmV0dXJuIHR5cGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2MgpmbiBtYWluKCkgewogICAgbGV0IGNvdW50X3RvX3RlbjogaW1wbCBJdGVyYXRvcjxJdGVtPXVzaXplPiA9IDAuLjEwOwogICAgLy8gZXJyb3I6IGBpbXBsIFRyYWl0YCBub3QgYWxsb3dlZCBvdXRzaWRlIG9mIGZ1bmN0aW9uIGFuZCBpbmhlcmVudCBtZXRob2QKICAgIC8vICAgICAgICByZXR1cm4gdHlwZXMKICAgIGZvciBpIGluIGNvdW50X3RvX3RlbiB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgaSk7CiAgICB9Cn0KYGBgCgpNYWtlIHN1cmUgYGltcGwgVHJhaXRgIG9ubHkgYXBwZWFycyBpbiByZXR1cm4tdHlwZSBwb3NpdGlvbi4KCmBgYApmbiBjb3VudF90b19uKG46IHVzaXplKSAtPiBpbXBsIEl0ZXJhdG9yPEl0ZW09dXNpemU+IHsKICAgIDAuLm4KfQoKZm4gbWFpbigpIHsKICAgIGZvciBpIGluIGNvdW50X3RvX24oMTApIHsgIC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIGkpOwogICAgfQp9CmBgYAoKU2VlIFtSRkMgMTUyMl0gZm9yIG1vcmUgZGV0YWlscy4KCltSRkMgMTUyMl06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzE1MjItY29uc2VydmF0aXZlLWltcGwtdHJhaXQubWQKRTA1NjVBIGxpdGVyYWwgd2FzIHVzZWQgaW4gYSBidWlsdC1pbiBhdHRyaWJ1dGUgdGhhdCBkb2Vzbid0IHN1cHBvcnQgbGl0ZXJhbHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY1CiNbcmVwcigiQyIpXSAvLyBlcnJvcjogbWV0YSBpdGVtIGluIGByZXByYCBtdXN0IGJlIGFuIGlkZW50aWZpZXIKc3RydWN0IFJlcHIge30KCmZuIG1haW4oKSB7fQpgYGAKCkxpdGVyYWxzIGluIGF0dHJpYnV0ZXMgYXJlIG5ldyBhbmQgbGFyZ2VseSB1bnN1cHBvcnRlZCBpbiBidWlsdC1pbiBhdHRyaWJ1dGVzLgpXb3JrIHRvIHN1cHBvcnQgbGl0ZXJhbHMgd2hlcmUgYXBwcm9wcmlhdGUgaXMgb25nb2luZy4gVHJ5IHVzaW5nIGFuIHVucXVvdGVkCm5hbWUgaW5zdGVhZDoKCmBgYAojW3JlcHIoQyldIC8vIG9rIQpzdHJ1Y3QgUmVwciB7fQoKZm4gbWFpbigpIHt9CmBgYApFMDU2NkNvbmZsaWN0aW5nIHJlcHJlc2VudGF0aW9uIGhpbnRzIGhhdmUgYmVlbiB1c2VkIG9uIGEgc2FtZSBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NgojW3JlcHIodTMyLCB1NjQpXQplbnVtIFJlcHIgeyBBIH0KYGBgCgpJbiBtb3N0IGNhc2VzIChpZiBub3QgYWxsKSwgdXNpbmcganVzdCBvbmUgcmVwcmVzZW50YXRpb24gaGludCBpcyBtb3JlIHRoYW4KZW5vdWdoLiBJZiB5b3Ugd2FudCB0byBoYXZlIGEgcmVwcmVzZW50YXRpb24gaGludCBkZXBlbmRpbmcgb24gdGhlIGN1cnJlbnQKYXJjaGl0ZWN0dXJlLCB1c2UgYGNmZ19hdHRyYC4gRXhhbXBsZToKCmBgYAojW2NmZ19hdHRyKGxpbnV4LCByZXByKHUzMikpXQojW2NmZ19hdHRyKG5vdChsaW51eCksIHJlcHIodTY0KSldCmVudW0gUmVwciB7IEEgfQpgYGAKRTA1NjdHZW5lcmljcyBoYXZlIGJlZW4gdXNlZCBvbiBhbiBhdXRvIHRyYWl0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU2NwojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCmF1dG8gdHJhaXQgR2VuZXJpYzxUPiB7fSAvLyBlcnJvciEKIyBmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgdGhlCmNvbXBpbGVyIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGluZmVyIHRoZSB0eXBlcyBvZiB0aGUgdHJhaXQncyBnZW5lcmljCnBhcmFtZXRlcnMuCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIGdlbmVyaWNzOgoKYGBgCiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKYXV0byB0cmFpdCBHZW5lcmljIHt9IC8vIG9rIQojIGZuIG1haW4oKSB7fQpgYGAKRTA1NjhBIHN1cGVyIHRyYWl0IGhhcyBiZWVuIGFkZGVkIHRvIGFuIGF1dG8gdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY4CiMhW2ZlYXR1cmUoYXV0b190cmFpdHMpXQoKYXV0byB0cmFpdCBCb3VuZCA6IENvcHkge30gLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpTaW5jZSBhbiBhdXRvIHRyYWl0IGlzIGltcGxlbWVudGVkIG9uIGFsbCBleGlzdGluZyB0eXBlcywgYWRkaW5nIGEgc3VwZXIgdHJhaXQKd291bGQgZmlsdGVyIG91dCBhIGxvdCBvZiB0aG9zZSB0eXBlcy4gSW4gdGhlIGN1cnJlbnQgZXhhbXBsZSwgYWxtb3N0IG5vbmUgb2YKYWxsIHRoZSBleGlzdGluZyB0eXBlcyBjb3VsZCBpbXBsZW1lbnQgYEJvdW5kYCBiZWNhdXNlIHZlcnkgZmV3IG9mIHRoZW0gaGF2ZSB0aGUKYENvcHlgIHRyYWl0LgoKVG8gZml4IHRoaXMgaXNzdWUsIGp1c3QgcmVtb3ZlIHRoZSBzdXBlciB0cmFpdDoKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCmF1dG8gdHJhaXQgQm91bmQge30gLy8gb2shCgpmbiBtYWluKCkge30KYGBgCkUwNTY5SWYgYW4gaW1wbCBoYXMgYSBnZW5lcmljIHBhcmFtZXRlciB3aXRoIHRoZSBgI1ttYXlfZGFuZ2xlXWAgYXR0cmlidXRlLCB0aGVuCnRoYXQgaW1wbCBtdXN0IGJlIGRlY2xhcmVkIGFzIGFuIGB1bnNhZmUgaW1wbGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTY5CiMhW2ZlYXR1cmUoZHJvcGNrX2V5ZXBhdGNoKV0KCnN0cnVjdCBGb288WD4oWCk7CmltcGw8I1ttYXlfZGFuZ2xlXSBYPiBEcm9wIGZvciBGb288WD4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgfQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSBhcmUgYXNzZXJ0aW5nIHRoYXQgdGhlIGRlc3RydWN0b3IgZm9yIGBGb29gIHdpbGwgbm90CmFjY2VzcyBhbnkgZGF0YSBvZiB0eXBlIGBYYCwgYW5kIHJlcXVpcmUgdGhpcyBhc3NlcnRpb24gdG8gYmUgdHJ1ZSBmb3IKb3ZlcmFsbCBzYWZldHkgaW4gb3VyIHByb2dyYW0uIFRoZSBjb21waWxlciBkb2VzIG5vdCBjdXJyZW50bHkgYXR0ZW1wdCB0bwp2ZXJpZnkgdGhpcyBhc3NlcnRpb247IHRoZXJlZm9yZSB3ZSBtdXN0IHRhZyB0aGlzIGBpbXBsYCBhcyB1bnNhZmUuCkUwNTcwVGhlIHJlcXVlc3RlZCBBQkkgaXMgdW5zdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgdGFyZ2V0LgoKVGhlIHJ1c3QgY29tcGlsZXIgbWFpbnRhaW5zIGZvciBlYWNoIHRhcmdldCBhIGxpc3Qgb2YgdW5zdXBwb3J0ZWQgQUJJcyBvbgp0aGF0IHRhcmdldC4gSWYgYW4gQUJJIGlzIHByZXNlbnQgaW4gc3VjaCBhIGxpc3QgdGhpcyB1c3VhbGx5IG1lYW5zIHRoYXQgdGhlCnRhcmdldCAvIEFCSSBjb21iaW5hdGlvbiBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgbGx2bS4KCklmIG5lY2Vzc2FyeSwgeW91IGNhbiBjaXJjdW12ZW50IHRoaXMgY2hlY2sgdXNpbmcgY3VzdG9tIHRhcmdldCBzcGVjaWZpY2F0aW9ucy4KRTA1NzFBIGBicmVha2Agc3RhdGVtZW50IHdpdGggYW4gYXJndW1lbnQgYXBwZWFyZWQgaW4gYSBub24tYGxvb3BgIGxvb3AuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTcxCiMgbGV0IG11dCBpID0gMTsKIyBmbiBzYXRpc2ZpZWQobjogdXNpemUpIC0+IGJvb2wgeyBuICUgMjMgPT0gMCB9CmxldCByZXN1bHQgPSB3aGlsZSB0cnVlIHsKICAgIGlmIHNhdGlzZmllZChpKSB7CiAgICAgICAgYnJlYWsgMiAqIGk7IC8vIGVycm9yOiBgYnJlYWtgIHdpdGggdmFsdWUgZnJvbSBhIGB3aGlsZWAgbG9vcAogICAgfQogICAgaSArPSAxOwp9OwpgYGAKClRoZSBgYnJlYWtgIHN0YXRlbWVudCBjYW4gdGFrZSBhbiBhcmd1bWVudCAod2hpY2ggd2lsbCBiZSB0aGUgdmFsdWUgb2YgdGhlIGxvb3AKZXhwcmVzc2lvbiBpZiB0aGUgYGJyZWFrYCBzdGF0ZW1lbnQgaXMgZXhlY3V0ZWQpIGluIGBsb29wYCBsb29wcywgYnV0IG5vdApgZm9yYCwgYHdoaWxlYCwgb3IgYHdoaWxlIGxldGAgbG9vcHMuCgpNYWtlIHN1cmUgYGJyZWFrIHZhbHVlO2Agc3RhdGVtZW50cyBvbmx5IG9jY3VyIGluIGBsb29wYCBsb29wczoKCmBgYAojIGxldCBtdXQgaSA9IDE7CiMgZm4gc2F0aXNmaWVkKG46IHVzaXplKSAtPiBib29sIHsgbiAlIDIzID09IDAgfQpsZXQgcmVzdWx0ID0gbG9vcCB7IC8vIFRoaXMgaXMgbm93IGEgImxvb3AiIGxvb3AuCiAgICBpZiBzYXRpc2ZpZWQoaSkgewogICAgICAgIGJyZWFrIDIgKiBpOyAvLyBvayEKICAgIH0KICAgIGkgKz0gMTsKfTsKYGBgCkUwNTcyQSByZXR1cm4gc3RhdGVtZW50IHdhcyBmb3VuZCBvdXRzaWRlIG9mIGEgZnVuY3Rpb24gYm9keS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzIKY29uc3QgRk9POiB1MzIgPSByZXR1cm4gMDsgLy8gZXJyb3I6IHJldHVybiBzdGF0ZW1lbnQgb3V0c2lkZSBvZiBmdW5jdGlvbiBib2R5CgpmbiBtYWluKCkge30KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwganVzdCByZW1vdmUgdGhlIHJldHVybiBrZXl3b3JkIG9yIG1vdmUgdGhlIGV4cHJlc3Npb24gaW50byBhCmZ1bmN0aW9uLiBFeGFtcGxlOgoKYGBgCmNvbnN0IEZPTzogdTMyID0gMDsKCmZuIHNvbWVfZm4oKSAtPiB1MzIgewogICAgcmV0dXJuIEZPTzsKfQoKZm4gbWFpbigpIHsKICAgIHNvbWVfZm4oKTsKfQpgYGAKRTA1NzNTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgaGFzIGJlZW4gdXNlZCB3aGVuIG9uZSB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDU3MwplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbjo6Qm9ybiB7IC8vIGVycm9yIQogICAgRHJhZ29uOjpCb3JuCn0KCmNvbnN0IEhPQkJJVDogdTMyID0gMjsKaW1wbCBIT0JCSVQge30gLy8gZXJyb3IhCgplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKF86IFdpemFyZDo6U2FydW1hbik7IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwgaWYKd2Ugd2FudCB0byByZXR1cm4gdGhlIGBCb3JuYCB2YXJpYW50IGZyb20gdGhlIGBEcmFnb25gIGVudW0sIHdlIG11c3Qgc2V0IHRoZQpmdW5jdGlvbiB0byByZXR1cm4gdGhlIGVudW0gYW5kIG5vdCBpdHMgdmFyaWFudDoKCmBgYAplbnVtIERyYWdvbiB7CiAgICBCb3JuLAp9CgpmbiBvYmxpdmlvbigpIC0+IERyYWdvbiB7IC8vIG9rIQogICAgRHJhZ29uOjpCb3JuCn0KYGBgCgpJbiB0aGUgc2Vjb25kIGVycm9yLCB5b3UgY2FuJ3QgaW1wbGVtZW50IHNvbWV0aGluZyBvbiBhbiBpdGVtLCBvbmx5IG9uIHR5cGVzLgpXZSB3b3VsZCBuZWVkIHRvIGNyZWF0ZSBhIG5ldyB0eXBlIGlmIHdlIHdhbnRlZCB0byBkbyBzb21ldGhpbmcgc2ltaWxhcjoKCmBgYApzdHJ1Y3QgSG9iYml0KHUzMik7IC8vIHdlIGNyZWF0ZSBhIG5ldyB0eXBlCgpjb25zdCBIT0JCSVQ6IEhvYmJpdCA9IEhvYmJpdCgyKTsKaW1wbCBIb2JiaXQge30gLy8gb2shCmBgYAoKSW4gdGhlIHRoaXJkIGNhc2UsIHdlIHRyaWVkIHRvIG9ubHkgZXhwZWN0IG9uZSB2YXJpYW50IG9mIHRoZSBgV2l6YXJkYCBlbnVtLAp3aGljaCBpcyBub3QgcG9zc2libGUuIFRvIG1ha2UgdGhpcyB3b3JrLCB3ZSBuZWVkIHRvIHVzaW5nIHBhdHRlcm4gbWF0Y2hpbmcKb3ZlciB0aGUgYFdpemFyZGAgZW51bToKCmBgYAplbnVtIFdpemFyZCB7CiAgICBHYW5kYWxmLAogICAgU2FydW1hbiwKfQoKdHJhaXQgSXNlbmdhcmQgewogICAgZm4gd2l6YXJkKHc6IFdpemFyZCkgeyAvLyBvayEKICAgICAgICBtYXRjaCB3IHsKICAgICAgICAgICAgV2l6YXJkOjpTYXJ1bWFuID0+IHsKICAgICAgICAgICAgICAgIC8vIGRvIHNvbWV0aGluZwogICAgICAgICAgICB9CiAgICAgICAgICAgIF8gPT4ge30gLy8gaWdub3JlIGV2ZXJ5dGhpbmcgZWxzZQogICAgICAgIH0KICAgIH0KfQpgYGAKRTA1NzRTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHN0cnVjdCwgdmFyaWFudCBvciB1bmlvbiBoYXMgYmVlbiB1c2VkIHdoZW4gb25lIHdhcwpleHBlY3RlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzQKbW9kIG1vcmRvciB7fQoKbGV0IHNhdXJvbiA9IG1vcmRvciB7IHg6ICgpIH07IC8vIGVycm9yIQoKZW51bSBKYWsgewogICAgRGF4dGVyIHsgaTogaXNpemUgfSwKfQoKbGV0IGVjbyA9IEphazo6RGF4dGVyIHsgaTogMSB9OwptYXRjaCBlY28gewogICAgSmFrIHsgaSB9ID0+IHt9IC8vIGVycm9yIQp9CmBgYAoKSW4gYWxsIHRoZXNlIGVycm9ycywgYSB0eXBlIHdhcyBleHBlY3RlZC4gRm9yIGV4YW1wbGUsIGluIHRoZSBmaXJzdCBlcnJvciwKd2UgdHJpZWQgdG8gaW5zdGFudGlhdGUgdGhlIGBtb3Jkb3JgIG1vZHVsZSwgd2hpY2ggaXMgaW1wb3NzaWJsZS4gSWYgeW91IHdhbnQKdG8gaW5zdGFudGlhdGUgYSB0eXBlIGluc2lkZSBhIG1vZHVsZSwgeW91IGNhbiBkbyBpdCBhcyBmb2xsb3c6CgpgYGAKbW9kIG1vcmRvciB7CiAgICBwdWIgc3RydWN0IFRoZVJpbmcgewogICAgICAgIHB1YiB4OiB1c2l6ZSwKICAgIH0KfQoKbGV0IHNhdXJvbiA9IG1vcmRvcjo6VGhlUmluZyB7IHg6IDEgfTsgLy8gb2shCmBgYAoKSW4gdGhlIHNlY29uZCBlcnJvciwgd2UgdHJpZWQgdG8gYmluZCB0aGUgYEpha2AgZW51bSBkaXJlY3RseSwgd2hpY2ggaXMgbm90CnBvc3NpYmxlOiB5b3UgY2FuIG9ubHkgYmluZCBvbmUgb2YgaXRzIHZhcmlhbnRzLiBUbyBkbyBzbzoKCmBgYAplbnVtIEphayB7CiAgICBEYXh0ZXIgeyBpOiBpc2l6ZSB9LAp9CgpsZXQgZWNvID0gSmFrOjpEYXh0ZXIgeyBpOiAxIH07Cm1hdGNoIGVjbyB7CiAgICBKYWs6OkRheHRlciB7IGkgfSA9PiB7fSAvLyBvayEKfQpgYGAKRTA1NzVTb21ldGhpbmcgb3RoZXIgdGhhbiBhIHR5cGUgb3IgYW4gYXNzb2NpYXRlZCB0eXBlIHdhcyBnaXZlbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1NzUKZW51bSBSaWNrIHsgTW9ydHkgfQoKbGV0IF86IDx1OCBhcyBSaWNrPjo6TW9ydHk7IC8vIGVycm9yIQoKdHJhaXQgQWdlIHsKICAgIHR5cGUgRW1waXJlOwogICAgZm4gTXl0aG9sb2d5KCkge30KfQoKaW1wbCBBZ2UgZm9yIHU4IHsKICAgIHR5cGUgRW1waXJlID0gdTE2Owp9CgpsZXQgXzogPHU4IGFzIEFnZT46Ok15dGhvbG9neTsgLy8gZXJyb3IhCmBgYAoKSW4gYm90aCBjYXNlcywgd2UncmUgZGVjbGFyaW5nIGEgdmFyaWFibGUgKGNhbGxlZCBgX2ApIGFuZCB3ZSdyZSBnaXZpbmcgaXQgYQp0eXBlLiBIb3dldmVyLCBgPHU4IGFzIFJpY2s+OjpNb3J0eWAgYW5kIGA8dTggYXMgQWdlPjo6TXl0aG9sb2d5YCBhcmVuJ3QgdHlwZXMsCnRoZXJlZm9yZSB0aGUgY29tcGlsZXIgdGhyb3dzIGFuIGVycm9yLgoKYDx1OCBhcyBSaWNrPjo6TW9ydHlgIGlzIGFuIGVudW0gdmFyaWFudCwgeW91IGNhbm5vdCB1c2UgYSB2YXJpYW50IGFzIGEgdHlwZSwKeW91IGhhdmUgdG8gdXNlIHRoZSBlbnVtIGRpcmVjdGx5OgoKYGBgCmVudW0gUmljayB7IE1vcnR5IH0KCmxldCBfOiBSaWNrOyAvLyBvayEKYGBgCgpgPHU4IGFzIEFnZT46Ok15dGhvbG9neWAgaXMgYSB0cmFpdCBtZXRob2QsIHdoaWNoIGlzIGRlZmluaXRlbHkgbm90IGEgdHlwZS4KSG93ZXZlciwgdGhlIGBBZ2VgIHRyYWl0IHByb3ZpZGVzIGFuIGFzc29jaWF0ZWQgdHlwZSBgRW1waXJlYCB3aGljaCBjYW4gYmUKdXNlZCBhcyBhIHR5cGU6CgpgYGAKdHJhaXQgQWdlIHsKICAgIHR5cGUgRW1waXJlOwogICAgZm4gTXl0aG9sb2d5KCkge30KfQoKaW1wbCBBZ2UgZm9yIHU4IHsKICAgIHR5cGUgRW1waXJlID0gdTE2Owp9CgpsZXQgXzogPHU4IGFzIEFnZT46OkVtcGlyZTsgLy8gb2shCmBgYApFMDU3NkFuIGFzc29jaWF0ZWQgaXRlbSB3YXNuJ3QgZm91bmQgaW4gdGhlIGdpdmVuIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc2CnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpZb3U7IC8vIGVycm9yIQp9CmBgYAoKSW4gdGhpcyBleGFtcGxlLCB3ZSB0cmllZCB0byB1c2UgdGhlIG5vbi1leGlzdGVudCBhc3NvY2lhdGVkIHR5cGUgYFlvdWAgb2YgdGhlCmBIZWxsb2AgdHJhaXQuIFRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYW4gZXhpc3RpbmcgYXNzb2NpYXRlZCB0eXBlOgoKYGBgCnRyYWl0IEhlbGxvIHsKICAgIHR5cGUgV2hvOwoKICAgIGZuIGhlbGxvKCkgLT4gPFNlbGYgYXMgSGVsbG8+OjpXaG87IC8vIG9rIQp9CmBgYApFMDU3N1NvbWV0aGluZyBvdGhlciB0aGFuIGEgbW9kdWxlIHdhcyBmb3VuZCBpbiB2aXNpYmlsaXR5IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU3NyxlZGl0aW9uMjAxOApwdWIgc3RydWN0IFNlYTsKCnB1YiAoaW4gY3JhdGU6OlNlYSkgc3RydWN0IFNoYXJrOyAvLyBlcnJvciEKCmZuIG1haW4oKSB7fQpgYGAKCmBTZWFgIGlzIG5vdCBhIG1vZHVsZSwgdGhlcmVmb3JlIGl0IGlzIGludmFsaWQgdG8gdXNlIGl0IGluIGEgdmlzaWJpbGl0eSBwYXRoLgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIGVuc3VyZSBgc2VhYCBpcyBhIG1vZHVsZS4KClBsZWFzZSBub3RlIHRoYXQgdGhlIHZpc2liaWxpdHkgc2NvcGUgY2FuIG9ubHkgYmUgYXBwbGllZCBvbiBhbmNlc3RvcnMhCgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIHNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpzZWEpIHN0cnVjdCBTaGFyazsgLy8gb2shCn0KCmZuIG1haW4oKSB7fQpgYGAKRTA1NzhBIG1vZHVsZSBjYW5ub3QgYmUgZm91bmQgYW5kIHRoZXJlZm9yZSwgdGhlIHZpc2liaWxpdHkgY2Fubm90IGJlIGRldGVybWluZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc4LGVkaXRpb24yMDE4CmZvbyEoKTsKCnB1YiAoaW4gOjpTZWEpIHN0cnVjdCBTaGFyazsgLy8gZXJyb3IhCgpmbiBtYWluKCkge30KYGBgCgpCZWNhdXNlIG9mIHRoZSBjYWxsIHRvIHRoZSBgZm9vYCBtYWNybywgdGhlIGNvbXBpbGVyIGd1ZXNzZXMgdGhhdCB0aGUgbWlzc2luZwptb2R1bGUgY291bGQgYmUgaW5zaWRlIGl0IGFuZCBmYWlscyBiZWNhdXNlIHRoZSBtYWNybyBkZWZpbml0aW9uIGNhbm5vdCBiZQpmb3VuZC4KClRvIGZpeCB0aGlzIGVycm9yLCBwbGVhc2UgYmUgc3VyZSB0aGF0IHRoZSBtb2R1bGUgaXMgaW4gc2NvcGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIFNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpTZWEpIHN0cnVjdCBTaGFyazsKfQoKZm4gbWFpbigpIHt9CmBgYApFMDU3OUEgbG93ZXIgcmFuZ2Ugd2Fzbid0IGxlc3MgdGhhbiB0aGUgdXBwZXIgcmFuZ2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTc5CiMhW2ZlYXR1cmUoZXhjbHVzaXZlX3JhbmdlX3BhdHRlcm4pXQoKZm4gbWFpbigpIHsKICAgIG1hdGNoIDV1MzIgewogICAgICAgIC8vIFRoaXMgcmFuZ2UgaXMgb2ssIGFsYmVpdCBwb2ludGxlc3MuCiAgICAgICAgMS4uMiA9PiB7fQogICAgICAgIC8vIFRoaXMgcmFuZ2UgaXMgZW1wdHksIGFuZCB0aGUgY29tcGlsZXIgY2FuIHRlbGwuCiAgICAgICAgNS4uNSA9PiB7fSAvLyBlcnJvciEKICAgIH0KfQpgYGAKCldoZW4gbWF0Y2hpbmcgYWdhaW5zdCBhbiBleGNsdXNpdmUgcmFuZ2UsIHRoZSBjb21waWxlciB2ZXJpZmllcyB0aGF0IHRoZSByYW5nZQppcyBub24tZW1wdHkuIEV4Y2x1c2l2ZSByYW5nZSBwYXR0ZXJucyBpbmNsdWRlIHRoZSBzdGFydCBwb2ludCBidXQgbm90IHRoZSBlbmQKcG9pbnQsIHNvIHRoaXMgaXMgZXF1aXZhbGVudCB0byByZXF1aXJpbmcgdGhlIHN0YXJ0IG9mIHRoZSByYW5nZSB0byBiZSBsZXNzCnRoYW4gdGhlIGVuZCBvZiB0aGUgcmFuZ2UuCkUwNTgwVGhlIGBtYWluYCBmdW5jdGlvbiB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgwCmZuIG1haW4oeDogaTMyKSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGhhcyB3cm9uZyB0eXBlCiAgICBwcmludGxuISgie30iLCB4KTsKfQpgYGAKClRoZSBgbWFpbmAgZnVuY3Rpb24gcHJvdG90eXBlIHNob3VsZCBuZXZlciB0YWtlIGFyZ3VtZW50cy4KRXhhbXBsZToKCmBgYApmbiBtYWluKCkgewogICAgLy8geW91ciBjb2RlCn0KYGBgCgpJZiB5b3Ugd2FudCB0byBnZXQgY29tbWFuZC1saW5lIGFyZ3VtZW50cywgdXNlIGBzdGQ6OmVudjo6YXJnc2AuIFRvIGV4aXQgd2l0aCBhCnNwZWNpZmllZCBleGl0IGNvZGUsIHVzZSBgc3RkOjpwcm9jZXNzOjpleGl0YC4KRTA1ODFJbiBhIGBmbmAgdHlwZSwgYSBsaWZldGltZSBhcHBlYXJzIG9ubHkgaW4gdGhlIHJldHVybiB0eXBlCmFuZCBub3QgaW4gdGhlIGFyZ3VtZW50cyB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODEKZm4gbWFpbigpIHsKICAgIC8vIEhlcmUsIGAnYWAgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZToKICAgIGxldCB4OiBmb3I8J2E+IGZuKCkgLT4gJidhIGkzMjsKfQpgYGAKClRoZSBwcm9ibGVtIGhlcmUgaXMgdGhhdCB0aGUgbGlmZXRpbWUgaXNuJ3QgY29uc3RyYWluZWQgYnkgYW55IG9mIHRoZSBhcmd1bWVudHMsCm1ha2luZyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSBob3cgbG9uZyBpdCdzIHN1cHBvc2VkIHRvIGxpdmUuCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGFyZ3VtZW50cywgb3IgdXNlIHRoZQpgJ3N0YXRpY2AgbGlmZXRpbWUuIEV4YW1wbGU6CgpgYGAKZm4gbWFpbigpIHsKICAgIC8vIEhlcmUsIGAnYWAgYXBwZWFycyBvbmx5IGluIHRoZSByZXR1cm4gdHlwZToKICAgIGxldCB4OiBmb3I8J2E+IGZuKCYnYSBpMzIpIC0+ICYnYSBpMzI7CiAgICBsZXQgeTogZm4oKSAtPiAmJ3N0YXRpYyBpMzI7Cn0KYGBgCgpOb3RlOiBUaGUgZXhhbXBsZXMgYWJvdmUgdXNlZCB0byBiZSAoZXJyb25lb3VzbHkpIGFjY2VwdGVkIGJ5IHRoZQpjb21waWxlciwgYnV0IHRoaXMgd2FzIHNpbmNlIGNvcnJlY3RlZC4gU2VlIFtpc3N1ZSAjMzM2ODVdIGZvciBtb3JlCmRldGFpbHMuCgpbaXNzdWUgIzMzNjg1XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy8zMzY4NQpFMDU4MkEgbGlmZXRpbWUgaXMgb25seSBwcmVzZW50IGluIGFuIGFzc29jaWF0ZWQtdHlwZSBiaW5kaW5nLCBhbmQgbm90IGluIHRoZSBpbnB1dAp0eXBlcyB0byB0aGUgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgyCmZuIGJhcjxGPih0OiBGKQogICAgLy8gTm8gdHlwZSBjYW4gc2F0aXNmeSB0aGlzIHJlcXVpcmVtZW50LCBzaW5jZSBgJ2FgIGRvZXMgbm90CiAgICAvLyBhcHBlYXIgaW4gYW55IG9mIHRoZSBpbnB1dCB0eXBlcyAoaGVyZSwgYGkzMmApOgogICAgd2hlcmUgRjogZm9yPCdhPiBGbihpMzIpIC0+IE9wdGlvbjwmJ2EgaTMyPgp7Cn0KCmZuIG1haW4oKSB7IH0KYGBgCgpUbyBmaXggdGhpcyBpc3N1ZSwgZWl0aGVyIHVzZSB0aGUgbGlmZXRpbWUgaW4gdGhlIGlucHV0cywgb3IgdXNlCmAnc3RhdGljYC4gRXhhbXBsZToKCmBgYApmbiBiYXI8RiwgRz4odDogRiwgdTogRykKICAgIHdoZXJlIEY6IGZvcjwnYT4gRm4oJidhIGkzMikgLT4gT3B0aW9uPCYnYSBpMzI+LAogICAgICAgICAgRzogRm4oaTMyKSAtPiBPcHRpb248JidzdGF0aWMgaTMyPiwKewp9CgpmbiBtYWluKCkgeyB9CmBgYAoKTm90ZTogVGhlIGV4YW1wbGVzIGFib3ZlIHVzZWQgdG8gYmUgKGVycm9uZW91c2x5KSBhY2NlcHRlZCBieSB0aGUKY29tcGlsZXIsIGJ1dCB0aGlzIHdhcyBzaW5jZSBjb3JyZWN0ZWQuIFNlZSBbaXNzdWUgIzMzNjg1XSBmb3IgbW9yZQpkZXRhaWxzLgoKW2lzc3VlICMzMzY4NV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvMzM2ODUKRTA1ODNBIGZpbGUgd2Fzbid0IGZvdW5kIGZvciBhbiBvdXQtb2YtbGluZSBtb2R1bGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTgzCm1vZCBmaWxlX3RoYXRfZG9lc250X2V4aXN0OyAvLyBlcnJvcjogZmlsZSBub3QgZm91bmQgZm9yIG1vZHVsZQoKZm4gbWFpbigpIHt9CmBgYAoKUGxlYXNlIGJlIHN1cmUgdGhhdCBhIGZpbGUgY29ycmVzcG9uZGluZyB0byB0aGUgbW9kdWxlIGV4aXN0cy4gSWYgeW91CndhbnQgdG8gdXNlIGEgbW9kdWxlIG5hbWVkIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0YCwgeW91IG5lZWQgdG8gaGF2ZSBhIGZpbGUKbmFtZWQgYGZpbGVfdGhhdF9kb2VzbnRfZXhpc3QucnNgIG9yIGBmaWxlX3RoYXRfZG9lc250X2V4aXN0L21vZC5yc2AgaW4gdGhlCnNhbWUgZGlyZWN0b3J5LgpFMDU4NEEgZG9jIGNvbW1lbnQgdGhhdCBpcyBub3QgYXR0YWNoZWQgdG8gYW55dGhpbmcgaGFzIGJlZW4gZW5jb3VudGVyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg0CnRyYWl0IElzbGFuZCB7CiAgICBmbiBsb3N0KCk7CgogICAgLy8vIEknbSBsb3N0IQp9CmBgYAoKQSBsaXR0bGUgcmVtaW5kZXI6IGEgZG9jIGNvbW1lbnQgaGFzIHRvIGJlIHBsYWNlZCBiZWZvcmUgdGhlIGl0ZW0gaXQncyBzdXBwb3NlZAp0byBkb2N1bWVudC4gU28gaWYgeW91IHdhbnQgdG8gZG9jdW1lbnQgdGhlIGBJc2xhbmRgIHRyYWl0LCB5b3UgbmVlZCB0byBwdXQgYQpkb2MgY29tbWVudCBiZWZvcmUgaXQsIG5vdCBpbnNpZGUgaXQuIFNhbWUgZ29lcyBmb3IgdGhlIGBsb3N0YCBtZXRob2Q6IHRoZSBkb2MKY29tbWVudCBuZWVkcyB0byBiZSBiZWZvcmUgaXQ6CgpgYGAKLy8vIEknbSBUSEUgaXNsYW5kIQp0cmFpdCBJc2xhbmQgewogICAgLy8vIEknbSBsb3N0IQogICAgZm4gbG9zdCgpOwp9CmBgYApFMDU4NUEgZG9jdW1lbnRhdGlvbiBjb21tZW50IHRoYXQgZG9lc24ndCBkb2N1bWVudCBhbnl0aGluZyB3YXMgZm91bmQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTg1CmZuIG1haW4oKSB7CiAgICAvLyBUaGUgZm9sbG93aW5nIGRvYyBjb21tZW50IHdpbGwgZmFpbDoKICAgIC8vLyBUaGlzIGlzIGEgdXNlbGVzcyBkb2MgY29tbWVudCEKfQpgYGAKCkRvY3VtZW50YXRpb24gY29tbWVudHMgbmVlZCB0byBiZSBmb2xsb3dlZCBieSBpdGVtcywgaW5jbHVkaW5nIGZ1bmN0aW9ucywKdHlwZXMsIG1vZHVsZXMsIGV0Yy4gRXhhbXBsZXM6CgpgYGAKLy8vIEknbSBkb2N1bWVudGluZyB0aGUgZm9sbG93aW5nIHN0cnVjdDoKc3RydWN0IEZvbzsKCi8vLyBJJ20gZG9jdW1lbnRpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbjoKZm4gZm9vKCkge30KYGBgCkUwNTg2QW4gaW5jbHVzaXZlIHJhbmdlIHdhcyB1c2VkIHdpdGggbm8gZW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4NgpmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uPV07IC8vIGVycm9yOiBpbmNsdXNpdmUgcmFuZ2Ugd2FzIHVzZWQgd2l0aCBubyBlbmQKfQpgYGAKCkFuIGluY2x1c2l2ZSByYW5nZSBuZWVkcyBhbiBlbmQgaW4gb3JkZXIgdG8gKmluY2x1ZGUqIGl0LiBJZiB5b3UganVzdCBuZWVkIGEKc3RhcnQgYW5kIG5vIGVuZCwgdXNlIGEgbm9uLWluY2x1c2l2ZSByYW5nZSAod2l0aCBgLi5gKToKCmBgYApmbiBtYWluKCkgewogICAgbGV0IHRtcCA9IHZlYyFbMCwgMSwgMiwgMywgNCwgNCwgMywgMywgMiwgMV07CiAgICBsZXQgeCA9ICZ0bXBbMS4uXTsgLy8gb2shCn0KYGBgCgpPciBwdXQgYW4gZW5kIHRvIHlvdXIgaW5jbHVzaXZlIHJhbmdlOgoKYGBgCmZuIG1haW4oKSB7CiAgICBsZXQgdG1wID0gdmVjIVswLCAxLCAyLCAzLCA0LCA0LCAzLCAzLCAyLCAxXTsKICAgIGxldCB4ID0gJnRtcFsxLi49M107IC8vIG9rIQp9CmBgYApFMDU4N0EgdHlwZSBoYXMgYm90aCBgcGFja2VkYCBhbmQgYGFsaWduYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODcKI1tyZXByKHBhY2tlZCwgYWxpZ24oOCkpXSAvLyBlcnJvciEKc3RydWN0IFVtYnJlbGxhKGkzMik7CmBgYAoKWW91IGNhbm5vdCB1c2UgYHBhY2tlZGAgYW5kIGBhbGlnbmAgaGludHMgb24gYSBzYW1lIHR5cGUuIElmIHlvdSB3YW50IHRvIHBhY2sgYQp0eXBlIHRvIGEgZ2l2ZW4gc2l6ZSwgeW91IHNob3VsZCBwcm92aWRlIGEgc2l6ZSB0byBwYWNrZWQ6CgpgYGAKI1tyZXByKHBhY2tlZCldIC8vIG9rIQpzdHJ1Y3QgVW1icmVsbGEoaTMyKTsKYGBgCkUwNTg4QSB0eXBlIHdpdGggYHBhY2tlZGAgcmVwcmVzZW50YXRpb24gaGludCBoYXMgYSBmaWVsZCB3aXRoIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1ODgKI1tyZXByKGFsaWduKDE2KSldCnN0cnVjdCBBbGlnbmVkKGkzMik7CgojW3JlcHIocGFja2VkKV0gLy8gZXJyb3IhCnN0cnVjdCBQYWNrZWQoQWxpZ25lZCk7CmBgYAoKSnVzdCBsaWtlIHlvdSBjYW5ub3QgaGF2ZSBib3RoIGBhbGlnbmAgYW5kIGBwYWNrZWRgIHJlcHJlc2VudGF0aW9uIGhpbnRzIG9uIGEKc2FtZSB0eXBlLCBhIGBwYWNrZWRgIHR5cGUgY2Fubm90IGNvbnRhaW4gYW5vdGhlciB0eXBlIHdpdGggdGhlIGBhbGlnbmAKcmVwcmVzZW50YXRpb24gaGludC4gSG93ZXZlciwgeW91IGNhbiBkbyB0aGUgb3Bwb3NpdGU6CgpgYGAKI1tyZXByKHBhY2tlZCldCnN0cnVjdCBQYWNrZWQoaTMyKTsKCiNbcmVwcihhbGlnbigxNikpXSAvLyBvayEKc3RydWN0IEFsaWduZWQoUGFja2VkKTsKYGBgCkUwNTg5VGhlIHZhbHVlIG9mIGBOYCB0aGF0IHdhcyBzcGVjaWZpZWQgZm9yIGByZXByKGFsaWduKE4pKWAgd2FzIG5vdCBhIHBvd2VyCm9mIHR3bywgb3Igd2FzIGdyZWF0ZXIgdGhhbiAyXjI5LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU4OQojW3JlcHIoYWxpZ24oMTUpKV0gLy8gZXJyb3I6IGludmFsaWQgYHJlcHIoYWxpZ24pYCBhdHRyaWJ1dGU6IG5vdCBhIHBvd2VyIG9mIHR3bwplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKRTA1OTBgYnJlYWtgIG9yIGBjb250aW51ZWAga2V5d29yZHMgd2VyZSB1c2VkIGluIGEgY29uZGl0aW9uIG9mIGEgYHdoaWxlYCBsb29wCndpdGhvdXQgYSBsYWJlbC4KCkVycm9uZW91cyBjb2RlIGNvZGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTAKd2hpbGUgYnJlYWsge30KYGBgCgpgYnJlYWtgIG9yIGBjb250aW51ZWAgbXVzdCBpbmNsdWRlIGEgbGFiZWwgd2hlbiB1c2VkIGluIHRoZSBjb25kaXRpb24gb2YgYQpgd2hpbGVgIGxvb3AuCgpUbyBmaXggdGhpcywgYWRkIGEgbGFiZWwgc3BlY2lmeWluZyB3aGljaCBsb29wIGlzIGJlaW5nIGJyb2tlbiBvdXQgb2Y6CgpgYGAKJ2Zvbzogd2hpbGUgYnJlYWsgJ2ZvbyB7fQpgYGAKRTA1OTFQZXIgW1JGQyA0MDFdW3JmYzQwMV0sIGlmIHlvdSBoYXZlIGEgZnVuY3Rpb24gZGVjbGFyYXRpb24gYGZvb2A6CgpgYGAKc3RydWN0IFM7CgovLyBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZXhwbGFuYXRpb24sIGFsbCBvZiB0aGVzZQovLyBkaWZmZXJlbnQga2luZHMgb2YgYGZuYCBkZWNsYXJhdGlvbnMgYXJlIGVxdWl2YWxlbnQ6CgpmbiBmb28oeDogUykgeyAvKiAuLi4gKi8gfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQpleHRlcm4gIkMiIHsKICAgIGZuIGZvbyh4OiBTKTsKfQojICNbY2ZnKGZvcl9kZW1vbnN0cmF0aW9uX29ubHkpXQppbXBsIFMgewogICAgZm4gZm9vKHNlbGYpIHsgLyogLi4uICovIH0KfQpgYGAKCnRoZSB0eXBlIG9mIGBmb29gIGlzICoqbm90KiogYGZuKFMpYCwgYXMgb25lIG1pZ2h0IGV4cGVjdC4KUmF0aGVyLCBpdCBpcyBhIHVuaXF1ZSwgemVyby1zaXplZCBtYXJrZXIgdHlwZSB3cml0dGVuIGhlcmUgYXMgYHR5cGVvZihmb28pYC4KSG93ZXZlciwgYHR5cGVvZihmb28pYCBjYW4gYmUgX2NvZXJjZWRfIHRvIGEgZnVuY3Rpb24gcG9pbnRlciBgZm4oUylgLApzbyB5b3UgcmFyZWx5IG5vdGljZSB0aGlzOgoKYGBgCiMgc3RydWN0IFM7CiMgZm4gZm9vKF86IFMpIHt9CmxldCB4OiBmbihTKSA9IGZvbzsgLy8gT0ssIGNvZXJjZXMKYGBgCgpUaGUgcmVhc29uIHRoYXQgdGhpcyBtYXR0ZXIgaXMgdGhhdCB0aGUgdHlwZSBgZm4oUylgIGlzIG5vdCBzcGVjaWZpYyB0bwphbnkgcGFydGljdWxhciBmdW5jdGlvbjogaXQncyBhIGZ1bmN0aW9uIF9wb2ludGVyXy4gU28gY2FsbGluZyBgeCgpYCByZXN1bHRzCmluIGEgdmlydHVhbCBjYWxsLCB3aGVyZWFzIGBmb28oKWAgaXMgc3RhdGljYWxseSBkaXNwYXRjaGVkLCBiZWNhdXNlIHRoZSB0eXBlCm9mIGBmb29gIHRlbGxzIHVzIHByZWNpc2VseSB3aGF0IGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZC4KCkFzIG5vdGVkIGFib3ZlLCBjb2VyY2lvbnMgbWVhbiB0aGF0IG1vc3QgY29kZSBkb2Vzbid0IGhhdmUgdG8gYmUKY29uY2VybmVkIHdpdGggdGhpcyBkaXN0aW5jdGlvbi4gSG93ZXZlciwgeW91IGNhbiB0ZWxsIHRoZSBkaWZmZXJlbmNlCndoZW4gdXNpbmcgKip0cmFuc211dGUqKiB0byBjb252ZXJ0IGEgZm4gaXRlbSBpbnRvIGEgZm4gcG9pbnRlci4KClRoaXMgaXMgc29tZXRpbWVzIGRvbmUgYXMgcGFydCBvZiBhbiBGRkk6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTEKZXh0ZXJuICJDIiBmbiBmb28odXNlcmRhdGE6IEJveDxpMzI+KSB7CiAgICAvKiAuLi4gKi8KfQoKIyBmbiBjYWxsYmFjayhfOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSkge30KIyB1c2Ugc3RkOjptZW06OnRyYW5zbXV0ZTsKdW5zYWZlIHsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28pOwogICAgY2FsbGJhY2soZik7Cn0KYGBgCgpIZXJlLCB0cmFuc211dGUgaXMgYmVpbmcgdXNlZCB0byBjb252ZXJ0IHRoZSB0eXBlcyBvZiB0aGUgZm4gYXJndW1lbnRzLgpUaGlzIHBhdHRlcm4gaXMgaW5jb3JyZWN0IGJlY2F1c2UgdGhlIHR5cGUgb2YgYGZvb2AgaXMgYSBmdW5jdGlvbiAqKml0ZW0qKgooYHR5cGVvZihmb28pYCksIHdoaWNoIGlzIHplcm8tc2l6ZWQsIGFuZCB0aGUgdGFyZ2V0IHR5cGUgKGBmbigpYCkKaXMgYSBmdW5jdGlvbiBwb2ludGVyLCB3aGljaCBpcyBub3QgemVyby1zaXplZC4KVGhpcyBwYXR0ZXJuIHNob3VsZCBiZSByZXdyaXR0ZW4uIFRoZXJlIGFyZSBhIGZldyBwb3NzaWJsZSB3YXlzIHRvIGRvIHRoaXM6CgotIGNoYW5nZSB0aGUgb3JpZ2luYWwgZm4gZGVjbGFyYXRpb24gdG8gbWF0Y2ggdGhlIGV4cGVjdGVkIHNpZ25hdHVyZSwKICBhbmQgZG8gdGhlIGNhc3QgaW4gdGhlIGZuIGJvZHkgKHRoZSBwcmVmZXJyZWQgb3B0aW9uKQotIGNhc3QgdGhlIGZuIGl0ZW0gb2YgYSBmbiBwb2ludGVyIGJlZm9yZSBjYWxsaW5nIHRyYW5zbXV0ZSwgYXMgc2hvd24gaGVyZToKCiAgICBgYGAKICAgICMgZXh0ZXJuICJDIiBmbiBmb28oXzogQm94PGkzMj4pIHt9CiAgICAjIHVzZSBzdGQ6Om1lbTo6dHJhbnNtdXRlOwogICAgIyB1bnNhZmUgewogICAgbGV0IGY6IGV4dGVybiAiQyIgZm4oKm11dCBpMzIpID0gdHJhbnNtdXRlKGZvbyBhcyBleHRlcm4gIkMiIGZuKF8pKTsKICAgIGxldCBmOiBleHRlcm4gIkMiIGZuKCptdXQgaTMyKSA9IHRyYW5zbXV0ZShmb28gYXMgdXNpemUpOyAvLyB3b3JrcyB0b28KICAgICMgfQogICAgYGBgCgpUaGUgc2FtZSBhcHBsaWVzIHRvIHRyYW5zbXV0ZXMgdG8gYCptdXQgZm4oKWAsIHdoaWNoIHdlcmUgb2JzZXJ2ZWQgaW4gcHJhY3RpY2UuCk5vdGUgdGhvdWdoIHRoYXQgdXNlIG9mIHRoaXMgdHlwZSBpcyBnZW5lcmFsbHkgaW5jb3JyZWN0LgpUaGUgaW50ZW50aW9uIGlzIHR5cGljYWxseSB0byBkZXNjcmliZSBhIGZ1bmN0aW9uIHBvaW50ZXIsIGJ1dCBqdXN0IGBmbigpYAphbG9uZSBzdWZmaWNlcyBmb3IgdGhhdC4gYCptdXQgZm4oKWAgaXMgYSBwb2ludGVyIHRvIGEgZm4gcG9pbnRlci4KKFNpbmNlIHRoZXNlIHZhbHVlcyBhcmUgdHlwaWNhbGx5IGp1c3QgcGFzc2VkIHRvIEMgY29kZSwgaG93ZXZlciwgdGhpcyByYXJlbHkKbWFrZXMgYSBkaWZmZXJlbmNlIGluIHByYWN0aWNlLikKCltyZmM0MDFdOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3JmY3MvYmxvYi9tYXN0ZXIvdGV4dC8wNDAxLWNvZXJjaW9ucy5tZApFMDU5MlRoaXMgZXJyb3Igb2NjdXJzIHdoZW4geW91IGRlZmluZWQgbWV0aG9kcyBvciBhc3NvY2lhdGVkIGZ1bmN0aW9ucyB3aXRoIHNhbWUKbmFtZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTIKc3RydWN0IEZvbzsKCmltcGwgRm9vIHsKICAgIGZuIGJhcigpIHt9IC8vIHByZXZpb3VzIGRlZmluaXRpb24gaGVyZQp9CgppbXBsIEZvbyB7CiAgICBmbiBiYXIoKSB7fSAvLyBkdXBsaWNhdGUgZGVmaW5pdGlvbiBoZXJlCn0KYGBgCgpBIHNpbWlsYXIgZXJyb3IgaXMgRTAyMDEuIFRoZSBkaWZmZXJlbmNlIGlzIHdoZXRoZXIgdGhlcmUgaXMgb25lIGRlY2xhcmF0aW9uCmJsb2NrIG9yIG5vdC4gVG8gYXZvaWQgdGhpcyBlcnJvciwgeW91IG11c3QgZ2l2ZSBlYWNoIGBmbmAgYSB1bmlxdWUgbmFtZS4KCmBgYApzdHJ1Y3QgRm9vOwoKaW1wbCBGb28gewogICAgZm4gYmFyKCkge30KfQoKaW1wbCBGb28gewogICAgZm4gYmF6KCkge30gLy8gZGVmaW5lIHdpdGggZGlmZmVyZW50IG5hbWUKfQpgYGAKRTA1OTNZb3UgdHJpZWQgdG8gc3VwcGx5IGFuIGBGbmAtYmFzZWQgdHlwZSB3aXRoIGFuIGluY29ycmVjdCBudW1iZXIgb2YgYXJndW1lbnRzCnRoYW4gd2hhdCB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTkzCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICAvLyBbRTA1OTNdIGNsb3N1cmUgdGFrZXMgMSBhcmd1bWVudCBidXQgMCBhcmd1bWVudHMgYXJlIHJlcXVpcmVkCiAgICBmb28ofHl8IHsgfSk7Cn0KYGBgCgpZb3UgaGF2ZSB0byBwcm92aWRlIHRoZSBzYW1lIG51bWJlciBvZiBhcmd1bWVudHMgYXMgZXhwZWN0ZWQgYnkgdGhlIGBGbmAtYmFzZWQKdHlwZS4gU28gdG8gZml4IHRoZSBwcmV2aW91cyBleGFtcGxlLCB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgYHlgIGFyZ3VtZW50OgoKYGBgCmZuIGZvbzxGOiBGbigpPih4OiBGKSB7IH0KCmZuIG1haW4oKSB7CiAgICBmb28ofHwgeyB9KTsgLy8gb2shCn0KYGBgCkUwNTk0QSBub24tbXV0YWJsZSB2YWx1ZSB3YXMgYXNzaWduZWQgYSB2YWx1ZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTQKc3RydWN0IFNvbGFyU3lzdGVtIHsKICAgIGVhcnRoOiBpMzIsCn0KCmxldCBzcyA9IFNvbGFyU3lzdGVtIHsgZWFydGg6IDMgfTsKc3MuZWFydGggPSAyOyAvLyBlcnJvciEKYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgZGVjbGFyZSBgc3NgIGFzIG11dGFibGUgYnkgdXNpbmcgdGhlIGBtdXRgIGtleXdvcmQ6CgpgYGAKc3RydWN0IFNvbGFyU3lzdGVtIHsKICAgIGVhcnRoOiBpMzIsCn0KCmxldCBtdXQgc3MgPSBTb2xhclN5c3RlbSB7IGVhcnRoOiAzIH07IC8vIGRlY2xhcmluZyBgc3NgIGFzIG11dGFibGUKc3MuZWFydGggPSAyOyAvLyBvayEKYGBgCkUwNTk1IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQ2xvc3VyZXMgY2Fubm90IG11dGF0ZSBpbW11dGFibGUgY2FwdHVyZWQgdmFyaWFibGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NApsZXQgeCA9IDM7IC8vIGVycm9yOiBjbG9zdXJlIGNhbm5vdCBhc3NpZ24gdG8gaW1tdXRhYmxlIGxvY2FsIHZhcmlhYmxlIGB4YApsZXQgbXV0IGMgPSB8fCB7IHggKz0gMSB9OwpgYGAKCk1ha2UgdGhlIHZhcmlhYmxlIGJpbmRpbmcgbXV0YWJsZToKCmBgYApsZXQgbXV0IHggPSAzOyAvLyBvayEKbGV0IG11dCBjID0gfHwgeyB4ICs9IDEgfTsKYGBgCkUwNTk2VGhpcyBlcnJvciBvY2N1cnMgYmVjYXVzZSB5b3UgdHJpZWQgdG8gbXV0YWJseSBib3Jyb3cgYSBub24tbXV0YWJsZSB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA1OTYKbGV0IHggPSAxOwpsZXQgeSA9ICZtdXQgeDsgLy8gZXJyb3I6IGNhbm5vdCBib3Jyb3cgbXV0YWJseQpgYGAKCkluIGhlcmUsIGB4YCBpc24ndCBtdXRhYmxlLCBzbyB3aGVuIHdlIHRyeSB0byBtdXRhYmx5IGJvcnJvdyBpdCBpbiBgeWAsIGl0CmZhaWxzLiBUbyBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gbWFrZSBgeGAgbXV0YWJsZToKCmBgYApsZXQgbXV0IHggPSAxOwpsZXQgeSA9ICZtdXQgeDsgLy8gb2shCmBgYApFMDU5N1RoaXMgZXJyb3Igb2NjdXJzIGJlY2F1c2UgYSB2YWx1ZSB3YXMgZHJvcHBlZCB3aGlsZSBpdCB3YXMgc3RpbGwgYm9ycm93ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk3CnN0cnVjdCBGb288J2E+IHsKICAgIHg6IE9wdGlvbjwmJ2EgdTMyPiwKfQoKbGV0IG11dCB4ID0gRm9vIHsgeDogTm9uZSB9Owp7CiAgICBsZXQgeSA9IDA7CiAgICB4LnggPSBTb21lKCZ5KTsgLy8gZXJyb3I6IGB5YCBkb2VzIG5vdCBsaXZlIGxvbmcgZW5vdWdoCn0KcHJpbnRsbiEoIns6P30iLCB4LngpOwpgYGAKCkhlcmUsIGB5YCBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGlubmVyIHNjb3BlLCBidXQgaXQgaXMgYm9ycm93ZWQgYnkKYHhgIHVudGlsIHRoZSBgcHJpbnRsbmAuIFRvIGZpeCB0aGUgcHJldmlvdXMgZXhhbXBsZSwganVzdCByZW1vdmUgdGhlIHNjb3BlCnNvIHRoYXQgYHlgIGlzbid0IGRyb3BwZWQgdW50aWwgYWZ0ZXIgdGhlIHByaW50bG4KCmBgYApzdHJ1Y3QgRm9vPCdhPiB7CiAgICB4OiBPcHRpb248JidhIHUzMj4sCn0KCmxldCBtdXQgeCA9IEZvbyB7IHg6IE5vbmUgfTsKCmxldCB5ID0gMDsKeC54ID0gU29tZSgmeSk7CgpwcmludGxuISgiezo/fSIsIHgueCk7CmBgYApFMDU5OVRoaXMgZXJyb3Igb2NjdXJzIHdoZW4gYSBtZXRob2QgaXMgdXNlZCBvbiBhIHR5cGUgd2hpY2ggZG9lc24ndCBpbXBsZW1lbnQgaXQ6CgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNTk5CnN0cnVjdCBNb3V0aDsKCmxldCB4ID0gTW91dGg7CnguY2hvY29sYXRlKCk7IC8vIGVycm9yOiBubyBtZXRob2QgbmFtZWQgYGNob2NvbGF0ZWAgZm91bmQgZm9yIHR5cGUgYE1vdXRoYAogICAgICAgICAgICAgICAvLyAgICAgICAgaW4gdGhlIGN1cnJlbnQgc2NvcGUKYGBgCgpJbiB0aGlzIGNhc2UsIHlvdSBuZWVkIHRvIGltcGxlbWVudCB0aGUgYGNob2NvbGF0ZWAgbWV0aG9kIHRvIGZpeCB0aGUgZXJyb3I6CgpgYGAKc3RydWN0IE1vdXRoOwoKaW1wbCBNb3V0aCB7CiAgICBmbiBjaG9jb2xhdGUoJnNlbGYpIHsgLy8gV2UgaW1wbGVtZW50IHRoZSBgY2hvY29sYXRlYCBtZXRob2QgaGVyZS4KICAgICAgICBwcmludGxuISgiSG1tbSEgSSBsb3ZlIGNob2NvbGF0ZSEiKTsKICAgIH0KfQoKbGV0IHggPSBNb3V0aDsKeC5jaG9jb2xhdGUoKTsgLy8gb2shCmBgYApFMDYwMEFuIHVuYXJ5IG9wZXJhdG9yIHdhcyB1c2VkIG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCBpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDAKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKIVF1ZXN0aW9uOjpZZXM7IC8vIGVycm9yOiBjYW5ub3QgYXBwbHkgdW5hcnkgb3BlcmF0b3IgYCFgIHRvIHR5cGUgYFF1ZXN0aW9uYApgYGAKCkluIHRoaXMgY2FzZSwgYFF1ZXN0aW9uYCB3b3VsZCBuZWVkIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpOb3RgIHRyYWl0IGluCm9yZGVyIHRvIGJlIGFibGUgdG8gdXNlIGAhYCBvbiBpdC4gTGV0J3MgaW1wbGVtZW50IGl0OgoKYGBgCnVzZSBzdGQ6Om9wczo6Tm90OwoKZW51bSBRdWVzdGlvbiB7CiAgICBZZXMsCiAgICBObywKfQoKLy8gV2UgaW1wbGVtZW50IHRoZSBgTm90YCB0cmFpdCBvbiB0aGUgZW51bS4KaW1wbCBOb3QgZm9yIFF1ZXN0aW9uIHsKICAgIHR5cGUgT3V0cHV0ID0gYm9vbDsKCiAgICBmbiBub3Qoc2VsZikgLT4gYm9vbCB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIFF1ZXN0aW9uOjpZZXMgPT4gZmFsc2UsIC8vIElmIHRoZSBgQW5zd2VyYCBpcyBgWWVzYCwgdGhlbiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXR1cm5zIGZhbHNlLgogICAgICAgICAgICBRdWVzdGlvbjo6Tm8gPT4gdHJ1ZSwgLy8gQW5kIGhlcmUgd2UgZG8gdGhlIG9wcG9zaXRlLgogICAgICAgIH0KICAgIH0KfQoKYXNzZXJ0X2VxISghUXVlc3Rpb246OlllcywgZmFsc2UpOwphc3NlcnRfZXEhKCFRdWVzdGlvbjo6Tm8sIHRydWUpOwpgYGAKRTA2MDFObyBgbWFpbmAgZnVuY3Rpb24gd2FzIGZvdW5kIGluIGEgYmluYXJ5IGNyYXRlLgoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCBhIGBtYWluYCBmdW5jdGlvbjoKCmBgYApmbiBtYWluKCkgewogICAgLy8gWW91ciBwcm9ncmFtIHdpbGwgc3RhcnQgaGVyZS4KICAgIHByaW50bG4hKCJIZWxsbyB3b3JsZCEiKTsKfQpgYGAKCklmIHlvdSBkb24ndCBrbm93IHRoZSBiYXNpY3Mgb2YgUnVzdCwgeW91IGNhbiBsb29rIGF0IHRoZQpbUnVzdCBCb29rXVtydXN0LWJvb2tdIHRvIGdldCBzdGFydGVkLgoKW3J1c3QtYm9va106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay8KRTA2MDJBbiB1bmtub3duIG9yIGludmFsaWQgbGludCB3YXMgdXNlZCBvbiB0aGUgY29tbWFuZCBsaW5lLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYHNoCnJ1c3RjIC1EIGJvZ3VzIHJ1c3RfZmlsZS5ycwpgYGAKCk1heWJlIHlvdSBqdXN0IG1pc3NwZWxsZWQgdGhlIGxpbnQgbmFtZSBvciB0aGUgbGludCBkb2Vzbid0IGV4aXN0IGFueW1vcmUuCkVpdGhlciB3YXksIHRyeSB0byB1cGRhdGUvcmVtb3ZlIGl0IGluIG9yZGVyIHRvIGZpeCB0aGUgZXJyb3IuCkUwNjAzQSBwcml2YXRlIGl0ZW0gd2FzIHVzZWQgb3V0c2lkZSBpdHMgc2NvcGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjAzCm1vZCBmb28gewogICAgY29uc3QgUFJJVkFURTogdTMyID0gMHhfYV9iYWRfMWRlYV91MzI7IC8vIFRoaXMgY29uc3QgaXMgcHJpdmF0ZSwgc28gd2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBjYW4ndCB1c2UgaXQgb3V0c2lkZSBvZiB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBgZm9vYCBtb2R1bGUuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBmb286OlBSSVZBVEUpOyAvLyBlcnJvcjogY29uc3RhbnQgYFBSSVZBVEVgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGlzIHByaXZhdGUKYGBgCgpJbiBvcmRlciB0byBmaXggdGhpcyBlcnJvciwgeW91IG5lZWQgdG8gbWFrZSB0aGUgaXRlbSBwdWJsaWMgYnkgdXNpbmcgdGhlIGBwdWJgCmtleXdvcmQuIEV4YW1wbGU6CgpgYGAKbW9kIGZvbyB7CiAgICBwdWIgY29uc3QgUFJJVkFURTogdTMyID0gMHhfYV9iYWRfMWRlYV91MzI7IC8vIFdlIHNldCBpdCBwdWJsaWMgYnkgdXNpbmcgdGhlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGBwdWJgIGtleXdvcmQuCn0KCnByaW50bG4hKCJjb25zdCB2YWx1ZToge30iLCBmb286OlBSSVZBVEUpOyAvLyBvayEKYGBgCkUwNjA0QSBjYXN0IHRvIGBjaGFyYCB3YXMgYXR0ZW1wdGVkIG9uIGEgdHlwZSBvdGhlciB0aGFuIGB1OGAuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA0CjB1MzIgYXMgY2hhcjsgLy8gZXJyb3I6IG9ubHkgYHU4YCBjYW4gYmUgY2FzdCBhcyBgY2hhcmAsIG5vdCBgdTMyYApgYGAKCmBjaGFyYCBpcyBhIFVuaWNvZGUgU2NhbGFyIFZhbHVlLCBhbiBpbnRlZ2VyIHZhbHVlIGZyb20gMCB0byAweEQ3RkYgYW5kCjB4RTAwMCB0byAweDEwRkZGRi4gKFRoZSBnYXAgaXMgZm9yIHN1cnJvZ2F0ZSBwYWlycy4pIE9ubHkgYHU4YCBhbHdheXMgZml0cyBpbgp0aG9zZSByYW5nZXMgc28gb25seSBgdThgIG1heSBiZSBjYXN0IHRvIGBjaGFyYC4KClRvIGFsbG93IGxhcmdlciB2YWx1ZXMsIHVzZSBgY2hhcjo6ZnJvbV91MzJgLCB3aGljaCBjaGVja3MgdGhlIHZhbHVlIGlzIHZhbGlkLgoKYGBgCmFzc2VydF9lcSEoODZ1OCBhcyBjaGFyLCAnVicpOyAvLyBvayEKYXNzZXJ0X2VxIShjaGFyOjpmcm9tX3UzMigweDNCMSksIFNvbWUoJ86xJykpOyAvLyBvayEKYXNzZXJ0X2VxIShjaGFyOjpmcm9tX3UzMigweEQ4MDApLCBOb25lKTsgLy8gbm90IGEgVVNWLgpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDVBbiBpbnZhbGlkIGNhc3Qgd2FzIGF0dGVtcHRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjA1CmxldCB4ID0gMHU4Owp4IGFzIFZlYzx1OD47IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGB1OGAgYXMgYHN0ZDo6dmVjOjpWZWM8dTg+YAoKLy8gQW5vdGhlciBleGFtcGxlCgpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOyAvLyBTbyBoZXJlLCBgdmAgaXMgYSBgKmNvbnN0IHU4YC4KdiBhcyAmdTg7IC8vIGVycm9yOiBub24tcHJpbWl0aXZlIGNhc3Q6IGAqY29uc3QgdThgIGFzIGAmdThgCmBgYAoKT25seSBwcmltaXRpdmUgdHlwZXMgY2FuIGJlIGNhc3QgaW50byBlYWNoIG90aGVyLiBFeGFtcGxlczoKCmBgYApsZXQgeCA9IDB1ODsKeCBhcyB1MzI7IC8vIG9rIQoKbGV0IHYgPSBjb3JlOjpwdHI6Om51bGw6Ojx1OD4oKTsKdiBhcyAqY29uc3QgaTg7IC8vIG9rIQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IGNhc3RzLCB0YWtlIGEgbG9vayBhdCB0aGUgVHlwZSBjYXN0IHNlY3Rpb24gaW4KW1RoZSBSZWZlcmVuY2UgQm9va11bMV0uCgpbMV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2V4cHJlc3Npb25zL29wZXJhdG9yLWV4cHIuaHRtbCN0eXBlLWNhc3QtZXhwcmVzc2lvbnMKRTA2MDZBbiBpbmNvbXBhdGlibGUgY2FzdCB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNgpsZXQgeCA9ICYwdTg7IC8vIEhlcmUsIGB4YCBpcyBhIGAmdThgLgpsZXQgeTogdTMyID0geCBhcyB1MzI7IC8vIGVycm9yOiBjYXN0aW5nIGAmdThgIGFzIGB1MzJgIGlzIGludmFsaWQKYGBgCgpXaGVuIGNhc3RpbmcsIGtlZXAgaW4gbWluZCB0aGF0IG9ubHkgcHJpbWl0aXZlIHR5cGVzIGNhbiBiZSBjYXN0IGludG8gZWFjaApvdGhlci4gRXhhbXBsZToKCmBgYApsZXQgeCA9ICYwdTg7CmxldCB5OiB1MzIgPSAqeCBhcyB1MzI7IC8vIFdlIGRlcmVmZXJlbmNlIGl0IGZpcnN0IGFuZCB0aGVuIGNhc3QgaXQuCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgY2FzdHMsIHRha2UgYSBsb29rIGF0IHRoZSBUeXBlIGNhc3Qgc2VjdGlvbiBpbgpbVGhlIFJlZmVyZW5jZSBCb29rXVsxXS4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwN0EgY2FzdCBiZXR3ZWVuIGEgdGhpbiBhbmQgYSBmYXQgcG9pbnRlciB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYwNwpsZXQgdiA9IGNvcmU6OnB0cjo6bnVsbDo6PHU4PigpOwp2IGFzICpjb25zdCBbdThdOwpgYGAKCkZpcnN0OiB3aGF0IGFyZSB0aGluIGFuZCBmYXQgcG9pbnRlcnM/CgpUaGluIHBvaW50ZXJzIGFyZSAic2ltcGxlIiBwb2ludGVyczogdGhleSBhcmUgcHVyZWx5IGEgcmVmZXJlbmNlIHRvIGEgbWVtb3J5CmFkZHJlc3MuCgpGYXQgcG9pbnRlcnMgYXJlIHBvaW50ZXJzIHJlZmVyZW5jaW5nIER5bmFtaWNhbGx5IFNpemVkIFR5cGVzIChhbHNvIGNhbGxlZApEU1RzKS4gRFNUcyBkb24ndCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplLCB0aGVyZWZvcmUgdGhleSBjYW4gb25seSBleGlzdApiZWhpbmQgc29tZSBraW5kIG9mIHBvaW50ZXIgdGhhdCBjb250YWlucyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uLiBGb3IgZXhhbXBsZSwKc2xpY2VzIGFuZCB0cmFpdCBvYmplY3RzIGFyZSBEU1RzLiBJbiB0aGUgY2FzZSBvZiBzbGljZXMsIHRoZSBhZGRpdGlvbmFsCmluZm9ybWF0aW9uIHRoZSBmYXQgcG9pbnRlciBob2xkcyBpcyB0aGVpciBzaXplLgoKVG8gZml4IHRoaXMgZXJyb3IsIGRvbid0IHRyeSB0byBjYXN0IGRpcmVjdGx5IGJldHdlZW4gdGhpbiBhbmQgZmF0IHBvaW50ZXJzLgoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdHlwZSBjYXN0cywgdGFrZSBhIGxvb2sgYXQgdGhlIHNlY3Rpb24gb2YgdGhlCltUaGUgUnVzdCBSZWZlcmVuY2VdWzFdIG9uIHR5cGUgY2FzdCBleHByZXNzaW9ucy4KClsxXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvZXhwcmVzc2lvbnMvb3BlcmF0b3ItZXhwci5odG1sI3R5cGUtY2FzdC1leHByZXNzaW9ucwpFMDYwOEFuIGF0dGVtcHQgdG8gdXNlIGluZGV4IG9uIGEgdHlwZSB3aGljaCBkb2Vzbid0IGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQgd2FzIHBlcmZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDgKMHU4WzJdOyAvLyBlcnJvcjogY2Fubm90IGluZGV4IGludG8gYSB2YWx1ZSBvZiB0eXBlIGB1OGAKYGBgCgpUbyBiZSBhYmxlIHRvIGluZGV4IGludG8gYSB0eXBlIGl0IG5lZWRzIHRvIGltcGxlbWVudCB0aGUgYHN0ZDo6b3BzOjpJbmRleGAKdHJhaXQuIEV4YW1wbGU6CgpgYGAKbGV0IHY6IFZlYzx1OD4gPSB2ZWMhWzAsIDEsIDIsIDNdOwoKLy8gVGhlIGBWZWNgIHR5cGUgaW1wbGVtZW50cyB0aGUgYEluZGV4YCB0cmFpdCBzbyB5b3UgY2FuIGRvOgpwcmludGxuISgie30iLCB2WzJdKTsKYGBgCkUwNjA5QXR0ZW1wdGVkIHRvIGFjY2VzcyBhIG5vbi1leGlzdGVudCBmaWVsZCBpbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MDkKc3RydWN0IFN0cnVjdFdpdGhGaWVsZHMgewogICAgeDogdTMyLAp9CgpsZXQgcyA9IFN0cnVjdFdpdGhGaWVsZHMgeyB4OiAwIH07CnByaW50bG4hKCJ7fSIsIHMuZm9vKTsgLy8gZXJyb3I6IG5vIGZpZWxkIGBmb29gIG9uIHR5cGUgYFN0cnVjdFdpdGhGaWVsZHNgCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGNoZWNrIHRoYXQgeW91IGRpZG4ndCBtaXNzcGVsbCB0aGUgZmllbGQncyBuYW1lIG9yIHRoYXQgdGhlCmZpZWxkIGFjdHVhbGx5IGV4aXN0cy4gRXhhbXBsZToKCmBgYApzdHJ1Y3QgU3RydWN0V2l0aEZpZWxkcyB7CiAgICB4OiB1MzIsCn0KCmxldCBzID0gU3RydWN0V2l0aEZpZWxkcyB7IHg6IDAgfTsKcHJpbnRsbiEoInt9Iiwgcy54KTsgLy8gb2shCmBgYApFMDYxMEF0dGVtcHRlZCB0byBhY2Nlc3MgYSBmaWVsZCBvbiBhIHByaW1pdGl2ZSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYxMApsZXQgeDogdTMyID0gMDsKcHJpbnRsbiEoInt9IiwgeC5mb28pOyAvLyBlcnJvcjogYHtpbnRlZ2VyfWAgaXMgYSBwcmltaXRpdmUgdHlwZSwgdGhlcmVmb3JlCiAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGRvZXNuJ3QgaGF2ZSBmaWVsZHMKYGBgCgpQcmltaXRpdmUgdHlwZXMgYXJlIHRoZSBtb3N0IGJhc2ljIHR5cGVzIGF2YWlsYWJsZSBpbiBSdXN0IGFuZCBkb24ndCBoYXZlCmZpZWxkcy4gVG8gYWNjZXNzIGRhdGEgdmlhIG5hbWVkIGZpZWxkcywgc3RydWN0IHR5cGVzIGFyZSB1c2VkLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgc3RydWN0IGNhbGxlZCBgRm9vYCBjb250YWluaW5nIHR3byBmaWVsZHM6CnN0cnVjdCBGb28gewogICAgeDogdTMyLAogICAgeTogaTY0LAp9CgovLyBXZSBjcmVhdGUgYW4gaW5zdGFuY2Ugb2YgdGhpcyBzdHJ1Y3Q6CmxldCB2YXJpYWJsZSA9IEZvbyB7IHg6IDAsIHk6IC0xMiB9OwovLyBBbmQgd2UgY2FuIG5vdyBhY2Nlc3MgaXRzIGZpZWxkczoKcHJpbnRsbiEoIng6IHt9LCB5OiB7fSIsIHZhcmlhYmxlLngsIHZhcmlhYmxlLnkpOwpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IFtwcmltaXRpdmVzXSBhbmQgW3N0cnVjdHNdLCB0YWtlIGEgbG9vayBhdCB0aGUgQm9vay4KCltwcmltaXRpdmVzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDMtMDItZGF0YS10eXBlcy5odG1sCltzdHJ1Y3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMDUtMDAtc3RydWN0cy5odG1sCkUwNjE0QXR0ZW1wdGVkIHRvIGRlcmVmZXJlbmNlIGEgdmFyaWFibGUgd2hpY2ggY2Fubm90IGJlIGRlcmVmZXJlbmNlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTQKbGV0IHkgPSAwdTMyOwoqeTsgLy8gZXJyb3I6IHR5cGUgYHUzMmAgY2Fubm90IGJlIGRlcmVmZXJlbmNlZApgYGAKCk9ubHkgdHlwZXMgaW1wbGVtZW50aW5nIGBzdGQ6Om9wczo6RGVyZWZgIGNhbiBiZSBkZXJlZmVyZW5jZWQgKHN1Y2ggYXMgYCZUYCkuCkV4YW1wbGU6CgpgYGAKbGV0IHkgPSAwdTMyOwpsZXQgeCA9ICZ5OwovLyBTbyBoZXJlLCBgeGAgaXMgYSBgJnUzMmAsIHNvIHdlIGNhbiBkZXJlZmVyZW5jZSBpdDoKKng7IC8vIG9rIQpgYGAKRTA2MTVBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgbWV0aG9kIGxpa2UgYSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTUKc3RydWN0IEZvbyB7CiAgICB4OiB1MzIsCn0KCmltcGwgRm9vIHsKICAgIGZuIG1ldGhvZCgmc2VsZikge30KfQoKbGV0IGYgPSBGb28geyB4OiAwIH07CmYubWV0aG9kOyAvLyBlcnJvcjogYXR0ZW1wdGVkIHRvIHRha2UgdmFsdWUgb2YgbWV0aG9kIGBtZXRob2RgIG9uIHR5cGUgYEZvb2AKYGBgCgpJZiB5b3Ugd2FudCB0byB1c2UgYSBtZXRob2QsIGFkZCBgKClgIGFmdGVyIGl0OgoKYGBgCiMgc3RydWN0IEZvbyB7IHg6IHUzMiB9CiMgaW1wbCBGb28geyBmbiBtZXRob2QoJnNlbGYpIHt9IH0KIyBsZXQgZiA9IEZvbyB7IHg6IDAgfTsKZi5tZXRob2QoKTsKYGBgCgpIb3dldmVyLCBpZiB5b3Ugd2FudGVkIHRvIGFjY2VzcyBhIGZpZWxkIG9mIGEgc3RydWN0IGNoZWNrIHRoYXQgdGhlIGZpZWxkIG5hbWUKaXMgc3BlbGxlZCBjb3JyZWN0bHkuIEV4YW1wbGU6CgpgYGAKIyBzdHJ1Y3QgRm9vIHsgeDogdTMyIH0KIyBpbXBsIEZvbyB7IGZuIG1ldGhvZCgmc2VsZikge30gfQojIGxldCBmID0gRm9vIHsgeDogMCB9OwpwcmludGxuISgie30iLCBmLngpOwpgYGAKRTA2MTZBdHRlbXB0ZWQgdG8gYWNjZXNzIGEgcHJpdmF0ZSBmaWVsZCBvbiBhIHN0cnVjdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTYKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBlcnJvcjogZmllbGQgYHhgIG9mIHN0cnVjdCBgc29tZV9tb2R1bGU6OkZvb2AgaXMgcHJpdmF0ZQpgYGAKCklmIHlvdSB3YW50IHRvIGFjY2VzcyB0aGlzIGZpZWxkLCB5b3UgaGF2ZSB0d28gb3B0aW9uczoKCjEpIFNldCB0aGUgZmllbGQgcHVibGljOgoKYGBgCm1vZCBzb21lX21vZHVsZSB7CiAgICBwdWIgc3RydWN0IEZvbyB7CiAgICAgICAgcHViIHg6IHUzMiwgLy8gYHhgIGlzIG5vdyBwdWJsaWMuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLngpOyAvLyBvayEKYGBgCgoyKSBBZGQgYSBnZXR0ZXIgZnVuY3Rpb246CgpgYGAKbW9kIHNvbWVfbW9kdWxlIHsKICAgIHB1YiBzdHJ1Y3QgRm9vIHsKICAgICAgICB4OiB1MzIsIC8vIFNvIGB4YCBpcyBzdGlsbCBwcml2YXRlIGluIGhlcmUuCiAgICB9CgogICAgaW1wbCBGb28gewogICAgICAgIHB1YiBmbiBuZXcoKSAtPiBGb28geyBGb28geyB4OiAwIH0gfQoKICAgICAgICAvLyBXZSBjcmVhdGUgdGhlIGdldHRlciBmdW5jdGlvbiBoZXJlOgogICAgICAgIHB1YiBmbiBnZXRfeCgmc2VsZikgLT4gJnUzMiB7ICZzZWxmLnggfQogICAgfQp9CgpsZXQgZiA9IHNvbWVfbW9kdWxlOjpGb286Om5ldygpOwpwcmludGxuISgie30iLCBmLmdldF94KCkpOyAvLyBvayEKYGBgCkUwNjE3QXR0ZW1wdGVkIHRvIHBhc3MgYW4gaW52YWxpZCB0eXBlIG9mIHZhcmlhYmxlIGludG8gYSB2YXJpYWRpYyBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MTcKIyB1c2Ugc3RkOjpvczo6cmF3Ojp7Y19jaGFyLCBjX2ludH07CmV4dGVybiAiQyIgewogICAgZm4gcHJpbnRmKGZvcm1hdDogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKfQoKdW5zYWZlIHsKICAgIHByaW50ZigiJWZcblwwIi5hc19wdHIoKSBhcyBfLCAwZjMyKTsKICAgIC8vIGVycm9yOiBjYW5ub3QgcGFzcyBhbiBgZjMyYCB0byB2YXJpYWRpYyBmdW5jdGlvbiwgY2FzdCB0byBgY19kb3VibGVgCn0KYGBgCgpDZXJ0YWluIFJ1c3QgdHlwZXMgbXVzdCBiZSBjYXN0IGJlZm9yZSBwYXNzaW5nIHRoZW0gdG8gYSB2YXJpYWRpYyBmdW5jdGlvbiwKYmVjYXVzZSBvZiBhcmNhbmUgQUJJIHJ1bGVzIGRpY3RhdGVkIGJ5IHRoZSBDIHN0YW5kYXJkLiBUbyBmaXggdGhlIGVycm9yLApjYXN0IHRoZSB2YWx1ZSB0byB0aGUgdHlwZSBzcGVjaWZpZWQgYnkgdGhlIGVycm9yIG1lc3NhZ2UgKHdoaWNoIHlvdSBtYXkgbmVlZAp0byBpbXBvcnQgZnJvbSBgc3RkOjpvczo6cmF3YCkuCgpJbiB0aGlzIGNhc2UsIGBjX2RvdWJsZWAgaGFzIHRoZSBzYW1lIHNpemUgYXMgYGY2NGAgc28gd2UgY2FuIHVzZSBpdCBkaXJlY3RseToKCmBgYG5vX3J1bgojIHVzZSBzdGQ6Om9zOjpyYXc6OntjX2NoYXIsIGNfaW50fTsKIyBleHRlcm4gIkMiIHsKIyAgICAgZm4gcHJpbnRmKGZvcm1hdDogKmNvbnN0IGNfY2hhciwgLi4uKSAtPiBjX2ludDsKIyB9Cgp1bnNhZmUgewogICAgcHJpbnRmKCIlZlxuXDAiLmFzX3B0cigpIGFzIF8sIDBmNjQpOyAvLyBvayEKfQpgYGAKRTA2MThBdHRlbXB0ZWQgdG8gY2FsbCBzb21ldGhpbmcgd2hpY2ggaXNuJ3QgYSBmdW5jdGlvbiBub3IgYSBtZXRob2QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDYxOAplbnVtIFggewogICAgRW50cnksCn0KClg6OkVudHJ5KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsCiAgICAgICAgICAgIC8vIGZvdW5kIGBYOjpFbnRyeWAKCi8vIE9yIGV2ZW4gc2ltcGxlcjoKbGV0IHggPSAwaTMyOwp4KCk7IC8vIGVycm9yOiBleHBlY3RlZCBmdW5jdGlvbiwgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQsIGZvdW5kIGBpMzJgCmBgYAoKT25seSBmdW5jdGlvbnMgYW5kIG1ldGhvZHMgY2FuIGJlIGNhbGxlZCB1c2luZyBgKClgLiBFeGFtcGxlOgoKYGBgCi8vIFdlIGRlY2xhcmUgYSBmdW5jdGlvbjoKZm4gaV9hbV9hX2Z1bmN0aW9uKCkge30KCi8vIEFuZCB3ZSBjYWxsIGl0OgppX2FtX2FfZnVuY3Rpb24oKTsKYGBgCkUwNjE5IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIHR5cGUtY2hlY2tlciBuZWVkZWQgdG8ga25vdyB0aGUgdHlwZSBvZiBhbiBleHByZXNzaW9uLCBidXQgdGhhdCB0eXBlIGhhZCBub3QKeWV0IGJlZW4gaW5mZXJyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsCmxldCBtdXQgeCA9IHZlYyFbXTsKbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICAvLyBIZXJlLCB0aGUgdHlwZSBvZiBgdmAgaXMgbm90ICh5ZXQpIGtub3duLCBzbyB3ZQogICAgICAgIC8vIGNhbm5vdCByZXNvbHZlIHRoaXMgbWV0aG9kIGNhbGw6CiAgICAgICAgdi50b191cHBlcmNhc2UoKTsgLy8gZXJyb3I6IHRoZSB0eXBlIG9mIHRoaXMgdmFsdWUgbXVzdCBiZSBrbm93biBpbgogICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICB0aGlzIGNvbnRleHQKICAgIH0KICAgIE5vbmUgPT4ge30KfQpgYGAKClR5cGUgaW5mZXJlbmNlIHR5cGljYWxseSBwcm9jZWVkcyBmcm9tIHRoZSB0b3Agb2YgdGhlIGZ1bmN0aW9uIHRvIHRoZSBib3R0b20sCmZpZ3VyaW5nIG91dCB0eXBlcyBhcyBpdCBnb2VzLiBJbiBzb21lIGNhc2VzIC0tIG5vdGFibHkgbWV0aG9kIGNhbGxzIGFuZApvdmVybG9hZGFibGUgb3BlcmF0b3JzIGxpa2UgYCpgIC0tIHRoZSB0eXBlIGNoZWNrZXIgbWF5IG5vdCBoYXZlIGVub3VnaAppbmZvcm1hdGlvbiAqeWV0KiB0byBtYWtlIHByb2dyZXNzLiBUaGlzIGNhbiBiZSB0cnVlIGV2ZW4gaWYgdGhlIHJlc3Qgb2YgdGhlCmZ1bmN0aW9uIHByb3ZpZGVzIGVub3VnaCBjb250ZXh0IChiZWNhdXNlIHRoZSB0eXBlLWNoZWNrZXIgaGFzbid0IGxvb2tlZCB0aGF0CmZhciBhaGVhZCB5ZXQpLiBJbiB0aGlzIGNhc2UsIHR5cGUgYW5ub3RhdGlvbnMgY2FuIGJlIHVzZWQgdG8gaGVscCBpdCBhbG9uZy4KClRvIGZpeCB0aGlzIGVycm9yLCBqdXN0IHNwZWNpZnkgdGhlIHR5cGUgb2YgdGhlIHZhcmlhYmxlLiBFeGFtcGxlOgoKYGBgCmxldCBtdXQgeDogVmVjPFN0cmluZz4gPSB2ZWMhW107IC8vIFdlIHByZWNpc2UgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cy4KbWF0Y2ggeC5wb3AoKSB7CiAgICBTb21lKHYpID0+IHsKICAgICAgICB2LnRvX3VwcGVyY2FzZSgpOyAvLyBTaW5jZSBydXN0YyBub3cga25vd3MgdGhlIHR5cGUgb2YgdGhlIHZlYyBlbGVtZW50cywKICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB3ZSBjYW4gdXNlIGB2YCdzIG1ldGhvZHMuCiAgICB9CiAgICBOb25lID0+IHt9Cn0KYGBgCkUwNjIwQSBjYXN0IHRvIGFuIHVuc2l6ZWQgdHlwZSB3YXMgYXR0ZW1wdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMApsZXQgeCA9ICZbMV91c2l6ZSwgMl0gYXMgW3VzaXplXTsgLy8gZXJyb3I6IGNhc3QgdG8gdW5zaXplZCB0eXBlOiBgJlt1c2l6ZTsgMl1gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgYXMgYFt1c2l6ZV1gCmBgYAoKSW4gUnVzdCwgc29tZSB0eXBlcyBkb24ndCBoYXZlIGEga25vd24gc2l6ZSBhdCBjb21waWxlLXRpbWUuIEZvciBleGFtcGxlLCBpbiBhCnNsaWNlIHR5cGUgbGlrZSBgW3UzMl1gLCB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGlzIG5vdCBrbm93biBhdCBjb21waWxlLXRpbWUgYW5kCmhlbmNlIHRoZSBvdmVyYWxsIHNpemUgY2Fubm90IGJlIGNvbXB1dGVkLiBBcyBhIHJlc3VsdCwgc3VjaCB0eXBlcyBjYW4gb25seSBiZQptYW5pcHVsYXRlZCB0aHJvdWdoIGEgcmVmZXJlbmNlIChlLmcuLCBgJlRgIG9yIGAmbXV0IFRgKSBvciBvdGhlciBwb2ludGVyLXR5cGUKKGUuZy4sIGBCb3hgIG9yIGBSY2ApLiBUcnkgY2FzdGluZyB0byBhIHJlZmVyZW5jZSBpbnN0ZWFkOgoKYGBgCmxldCB4ID0gJlsxX3VzaXplLCAyXSBhcyAmW3VzaXplXTsgLy8gb2shCmBgYApFMDYyMVRoaXMgZXJyb3IgY29kZSBpbmRpY2F0ZXMgYSBtaXNtYXRjaCBiZXR3ZWVuIHRoZSBsaWZldGltZXMgYXBwZWFyaW5nIGluIHRoZQpmdW5jdGlvbiBzaWduYXR1cmUgKGkuZS4sIHRoZSBwYXJhbWV0ZXIgdHlwZXMgYW5kIHRoZSByZXR1cm4gdHlwZSkgYW5kIHRoZQpkYXRhLWZsb3cgZm91bmQgaW4gdGhlIGZ1bmN0aW9uIGJvZHkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIxCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJmkzMikgLT4gJidhIGkzMiB7IC8vIGVycm9yOiBleHBsaWNpdCBsaWZldGltZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgcmVxdWlyZWQgaW4gdGhlIHR5cGUgb2YKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGB5YAogICAgaWYgeCA+IHkgeyB4IH0gZWxzZSB7IHkgfQp9CmBgYAoKSW4gdGhlIGNvZGUgYWJvdmUsIHRoZSBmdW5jdGlvbiBpcyByZXR1cm5pbmcgZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLCBidXQgdGhlIGAnYWAgYW5ub3RhdGlvbiBpbmRpY2F0ZXMgdGhhdCBpdCBpcyByZXR1cm5pbmcgZGF0YSBvbmx5IGZyb20gYHhgLgpUbyBmaXggdGhlIGVycm9yLCB0aGUgc2lnbmF0dXJlIGFuZCB0aGUgYm9keSBtdXN0IGJlIG1hZGUgdG8gbWF0Y2guIFR5cGljYWxseSwKdGhpcyBpcyBkb25lIGJ5IHVwZGF0aW5nIHRoZSBmdW5jdGlvbiBzaWduYXR1cmUuIFNvLCBpbiB0aGlzIGNhc2UsIHdlIGNoYW5nZQp0aGUgdHlwZSBvZiBgeWAgdG8gYCYnYSBpMzJgLCBsaWtlIHNvOgoKYGBgCmZuIGZvbzwnYT4oeDogJidhIGkzMiwgeTogJidhIGkzMikgLT4gJidhIGkzMiB7CiAgICBpZiB4ID4geSB7IHggfSBlbHNlIHsgeSB9Cn0KYGBgCgpOb3cgdGhlIHNpZ25hdHVyZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZnVuY3Rpb24gZGF0YSBib3Jyb3dlZCBmcm9tIGVpdGhlciBgeGAgb3IKYHlgLiBBbHRlcm5hdGl2ZWx5LCB5b3UgY291bGQgY2hhbmdlIHRoZSBib2R5IHRvIG5vdCByZXR1cm4gZGF0YSBmcm9tIGB5YDoKCmBgYApmbiBmb288J2E+KHg6ICYnYSBpMzIsIHk6ICZpMzIpIC0+ICYnYSBpMzIgewogICAgeAp9CmBgYApFMDYyMkFuIGludHJpbnNpYyB3YXMgZGVjbGFyZWQgd2l0aG91dCBiZWluZyBhIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyMgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgc3RhdGljIGJyZWFrcG9pbnQ6IGZuKCk7IC8vIGVycm9yOiBpbnRyaW5zaWMgbXVzdCBiZSBhIGZ1bmN0aW9uCn0KCmZuIG1haW4oKSB7IHVuc2FmZSB7IGJyZWFrcG9pbnQoKTsgfSB9CmBgYAoKQW4gaW50cmluc2ljIGlzIGEgZnVuY3Rpb24gYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBnaXZlbiBwcm9ncmFtbWluZyBsYW5ndWFnZQp3aG9zZSBpbXBsZW1lbnRhdGlvbiBpcyBoYW5kbGVkIHNwZWNpYWxseSBieSB0aGUgY29tcGlsZXIuIEluIG9yZGVyIHRvIGZpeCB0aGlzCmVycm9yLCBqdXN0IGRlY2xhcmUgYSBmdW5jdGlvbi4gRXhhbXBsZToKCmBgYG5vX3J1bgojIVtmZWF0dXJlKGludHJpbnNpY3MpXQpleHRlcm4gInJ1c3QtaW50cmluc2ljIiB7CiAgICBwdWIgZm4gYnJlYWtwb2ludCgpOyAvLyBvayEKfQoKZm4gbWFpbigpIHsgdW5zYWZlIHsgYnJlYWtwb2ludCgpOyB9IH0KYGBgCkUwNjIzQSBsaWZldGltZSBkaWRuJ3QgbWF0Y2ggd2hhdCB3YXMgZXhwZWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjIzCnN0cnVjdCBGb288J2EsICdiLCBUPihzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE8KCYnYSAoKSwgJidiICgpLCBUKT4pCndoZXJlCiAgICBUOiBDb252ZXJ0PCdhLCAnYj47Cgp0cmFpdCBDb252ZXJ0PCdhLCAnYj46IFNpemVkIHsKICAgIGZuIGNhc3QoJidhIHNlbGYpIC0+ICYnYiBTZWxmOwp9CmltcGw8J2xvbmc6ICdzaG9ydCwgJ3Nob3J0LCBUPiBDb252ZXJ0PCdsb25nLCAnc2hvcnQ+IGZvciBUIHsKICAgIGZuIGNhc3QoJidsb25nIHNlbGYpIC0+ICYnc2hvcnQgVCB7CiAgICAgICAgc2VsZgogICAgfQp9Ci8vIGVycm9yCmZuIGJhZGJvaTwnaW5fLCAnb3V0LCBUPigKICAgIHg6IEZvbzwnaW5fLCAnb3V0LCBUPiwKICAgIHNhZG5lc3M6ICYnaW5fIFQKKSAtPiAmJ291dCBUIHsKICAgIHNhZG5lc3MuY2FzdCgpCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIHdlIHRyaWVkIHRvIHNldCBhIHZhbHVlIHdpdGggYW4gaW5jb21wYXRpYmxlIGxpZmV0aW1lIHRvCmFub3RoZXIgb25lIChgJ2luX2AgaXMgdW5yZWxhdGVkIHRvIGAnb3V0YCkuIFdlIGNhbiBzb2x2ZSB0aGlzIGlzc3VlIGluCnR3byBkaWZmZXJlbnQgd2F5czoKCkVpdGhlciB3ZSBtYWtlIGAnaW5fYCBsaXZlIGF0IGxlYXN0IGFzIGxvbmcgYXMgYCdvdXRgOgoKYGBgCnN0cnVjdCBGb288J2EsICdiLCBUPihzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE8KCYnYSAoKSwgJidiICgpLCBUKT4pCndoZXJlCiAgICBUOiBDb252ZXJ0PCdhLCAnYj47Cgp0cmFpdCBDb252ZXJ0PCdhLCAnYj46IFNpemVkIHsKICAgIGZuIGNhc3QoJidhIHNlbGYpIC0+ICYnYiBTZWxmOwp9CmltcGw8J2xvbmc6ICdzaG9ydCwgJ3Nob3J0LCBUPiBDb252ZXJ0PCdsb25nLCAnc2hvcnQ+IGZvciBUIHsKICAgIGZuIGNhc3QoJidsb25nIHNlbGYpIC0+ICYnc2hvcnQgVCB7CiAgICAgICAgc2VsZgogICAgfQp9CmZuIGJhZGJvaTwnaW5fOiAnb3V0LCAnb3V0LCBUPigKICAgIHg6IEZvbzwnaW5fLCAnb3V0LCBUPiwKICAgIHNhZG5lc3M6ICYnaW5fIFQKKSAtPiAmJ291dCBUIHsKICAgIHNhZG5lc3MuY2FzdCgpCn0KYGBgCgpPciB3ZSB1c2Ugb25seSBvbmUgbGlmZXRpbWU6CgpgYGAKc3RydWN0IEZvbzwnYSwgJ2IsIFQ+KHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTwoJidhICgpLCAmJ2IgKCksIFQpPikKd2hlcmUKICAgIFQ6IENvbnZlcnQ8J2EsICdiPjsKCnRyYWl0IENvbnZlcnQ8J2EsICdiPjogU2l6ZWQgewogICAgZm4gY2FzdCgmJ2Egc2VsZikgLT4gJidiIFNlbGY7Cn0KaW1wbDwnbG9uZzogJ3Nob3J0LCAnc2hvcnQsIFQ+IENvbnZlcnQ8J2xvbmcsICdzaG9ydD4gZm9yIFQgewogICAgZm4gY2FzdCgmJ2xvbmcgc2VsZikgLT4gJidzaG9ydCBUIHsKICAgICAgICBzZWxmCiAgICB9Cn0KZm4gYmFkYm9pPCdvdXQsIFQ+KHg6IEZvbzwnb3V0LCAnb3V0LCBUPiwgc2FkbmVzczogJidvdXQgVCkgLT4gJidvdXQgVCB7CiAgICBzYWRuZXNzLmNhc3QoKQp9CmBgYApFMDYyNEEgcHJpdmF0ZSBpdGVtIHdhcyB1c2VkIG91dHNpZGUgb2YgaXRzIHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNAptb2QgaW5uZXIgewogICAgcHViIHN0cnVjdCBGb287CgogICAgaW1wbCBGb28gewogICAgICAgIGZuIG1ldGhvZCgmc2VsZikge30KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmZvby5tZXRob2QoKTsgLy8gZXJyb3I6IG1ldGhvZCBgbWV0aG9kYCBpcyBwcml2YXRlCmBgYAoKVHdvIHBvc3NpYmlsaXRpZXMgYXJlIGF2YWlsYWJsZSB0byBzb2x2ZSB0aGlzIGlzc3VlOgoKMS4gT25seSB1c2UgdGhlIGl0ZW0gaW4gdGhlIHNjb3BlIGl0IGhhcyBiZWVuIGRlZmluZWQ6CgpgYGAKbW9kIGlubmVyIHsKICAgIHB1YiBzdHJ1Y3QgRm9vOwoKICAgIGltcGwgRm9vIHsKICAgICAgICBmbiBtZXRob2QoJnNlbGYpIHt9CiAgICB9CgogICAgcHViIGZuIGNhbGxfbWV0aG9kKGZvbzogJkZvbykgeyAvLyBXZSBjcmVhdGUgYSBwdWJsaWMgZnVuY3Rpb24uCiAgICAgICAgZm9vLm1ldGhvZCgpOyAvLyBXaGljaCBjYWxscyB0aGUgaXRlbS4KICAgIH0KfQoKbGV0IGZvbyA9IGlubmVyOjpGb287CmlubmVyOjpjYWxsX21ldGhvZCgmZm9vKTsgLy8gQW5kIHNpbmNlIHRoZSBmdW5jdGlvbiBpcyBwdWJsaWMsIHdlIGNhbiBjYWxsIHRoZQogICAgICAgICAgICAgICAgICAgICAgICAgIC8vIG1ldGhvZCB0aHJvdWdoIGl0LgpgYGAKCjIuIE1ha2UgdGhlIGl0ZW0gcHVibGljOgoKYGBgCm1vZCBpbm5lciB7CiAgICBwdWIgc3RydWN0IEZvbzsKCiAgICBpbXBsIEZvbyB7CiAgICAgICAgcHViIGZuIG1ldGhvZCgmc2VsZikge30gLy8gSXQncyBub3cgcHVibGljLgogICAgfQp9CgpsZXQgZm9vID0gaW5uZXI6OkZvbzsKZm9vLm1ldGhvZCgpOyAvLyBPayEKYGBgCkUwNjI1QSBjb21waWxlLXRpbWUgY29uc3QgdmFyaWFibGUgaXMgcmVmZXJyaW5nIHRvIGEgdGhyZWFkLWxvY2FsIHN0YXRpYyB2YXJpYWJsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjUKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKI1t0aHJlYWRfbG9jYWxdCnN0YXRpYyBYOiB1c2l6ZSA9IDEyOwoKY29uc3QgWTogdXNpemUgPSAyICogWDsKYGBgCgpTdGF0aWMgYW5kIGNvbnN0IHZhcmlhYmxlcyBjYW4gcmVmZXIgdG8gb3RoZXIgY29uc3QgdmFyaWFibGVzIGJ1dCBhIGNvbnN0CnZhcmlhYmxlIGNhbm5vdCByZWZlciB0byBhIHRocmVhZC1sb2NhbCBzdGF0aWMgdmFyaWFibGUuIEluIHRoaXMgZXhhbXBsZSwKYFlgIGNhbm5vdCByZWZlciB0byBgWGAuIFRvIGZpeCB0aGlzLCB0aGUgdmFsdWUgY2FuIGJlIGV4dHJhY3RlZCBhcyBhIGNvbnN0CmFuZCB0aGVuIHVzZWQ6CgpgYGAKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKY29uc3QgQzogdXNpemUgPSAxMjsKCiNbdGhyZWFkX2xvY2FsXQpzdGF0aWMgWDogdXNpemUgPSBDOwoKY29uc3QgWTogdXNpemUgPSAyICogQzsKYGBgCkUwNjI2VGhpcyBlcnJvciBvY2N1cnMgYmVjYXVzZSBhIGJvcnJvdyBpbiBhIGdlbmVyYXRvciBwZXJzaXN0cyBhY3Jvc3MgYQp5aWVsZCBwb2ludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjYKIyAjIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCwgcGluKV0KIyB1c2Ugc3RkOjpvcHM6OkdlbmVyYXRvcjsKIyB1c2Ugc3RkOjpwaW46OlBpbjsKbGV0IG11dCBiID0gfHwgewogICAgbGV0IGEgPSAmU3RyaW5nOjpuZXcoKTsgLy8gPC0tIFRoaXMgYm9ycm93Li4uCiAgICB5aWVsZCAoKTsgLy8gLi4uaXMgc3RpbGwgaW4gc2NvcGUgaGVyZSwgd2hlbiB0aGUgeWllbGQgb2NjdXJzLgogICAgcHJpbnRsbiEoInt9IiwgYSk7Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpBdCBwcmVzZW50LCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIGhhdmUgYSB5aWVsZCB0aGF0IG9jY3VycyB3aGlsZSBhCmJvcnJvdyBpcyBzdGlsbCBpbiBzY29wZS4gVG8gcmVzb2x2ZSB0aGlzIGVycm9yLCB0aGUgYm9ycm93IG11c3QKZWl0aGVyIGJlICJjb250YWluZWQiIHRvIGEgc21hbGxlciBzY29wZSB0aGF0IGRvZXMgbm90IG92ZXJsYXAgdGhlCnlpZWxkIG9yIGVsc2UgZWxpbWluYXRlZCBpbiBhbm90aGVyIHdheS4gU28sIGZvciBleGFtcGxlLCB3ZSBtaWdodApyZXNvbHZlIHRoZSBwcmV2aW91cyBleGFtcGxlIGJ5IHJlbW92aW5nIHRoZSBib3Jyb3cgYW5kIGp1c3Qgc3RvcmluZwp0aGUgaW50ZWdlciBieSB2YWx1ZToKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgICBsZXQgYSA9IDM7CiAgICB5aWVsZCAoKTsKICAgIHByaW50bG4hKCJ7fSIsIGEpOwp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGNhc2UsIG9mIGNvdXJzZS4gSW4gbW9yZSBjb21wbGV4IGNhc2VzLCB3ZSBtYXkKd2lzaCB0byBoYXZlIG1vcmUgdGhhbiBvbmUgcmVmZXJlbmNlIHRvIHRoZSB2YWx1ZSB0aGF0IHdhcyBib3Jyb3dlZCAtLQppbiB0aG9zZSBjYXNlcywgc29tZXRoaW5nIGxpa2UgdGhlIGBSY2Agb3IgYEFyY2AgdHlwZXMgbWF5IGJlIHVzZWZ1bC4KClRoaXMgZXJyb3IgYWxzbyBmcmVxdWVudGx5IGFyaXNlcyB3aXRoIGl0ZXJhdGlvbjoKCmBgYGNvbXBpbGVfZmFpbCxFMDYyNgojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBmb3IgJnggaW4gJnYgeyAvLyA8LS0gYm9ycm93IG9mIGB2YCBpcyBzdGlsbCBpbiBzY29wZS4uLgogICAgeWllbGQgeDsgLy8gLi4ud2hlbiB0aGlzIHlpZWxkIG9jY3Vycy4KICB9Cn07ClBpbjo6bmV3KCZtdXQgYikucmVzdW1lKCgpKTsKYGBgCgpTdWNoIGNhc2VzIGNhbiBzb21ldGltZXMgYmUgcmVzb2x2ZWQgYnkgaXRlcmF0aW5nICJieSB2YWx1ZSIgKG9yIHVzaW5nCmBpbnRvX2l0ZXIoKWApIHRvIGF2b2lkIGJvcnJvd2luZzoKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBmb3IgeCBpbiB2IHsgLy8gPC0tIFRha2Ugb3duZXJzaGlwIG9mIHRoZSB2YWx1ZXMgaW5zdGVhZCEKICAgIHlpZWxkIHg7IC8vIDwtLSBOb3cgeWllbGQgaXMgT0suCiAgfQp9OwpQaW46Om5ldygmbXV0IGIpLnJlc3VtZSgoKSk7CmBgYAoKSWYgdGFraW5nIG93bmVyc2hpcCBpcyBub3QgYW4gb3B0aW9uLCB1c2luZyBpbmRpY2VzIGNhbiB3b3JrIHRvbzoKCmBgYAojICMhW2ZlYXR1cmUoZ2VuZXJhdG9ycywgZ2VuZXJhdG9yX3RyYWl0LCBwaW4pXQojIHVzZSBzdGQ6Om9wczo6R2VuZXJhdG9yOwojIHVzZSBzdGQ6OnBpbjo6UGluOwpsZXQgbXV0IGIgPSB8fCB7CiAgbGV0IHYgPSB2ZWMhWzEsMiwzXTsKICBsZXQgbGVuID0gdi5sZW4oKTsgLy8gKCopCiAgZm9yIGkgaW4gMC4ubGVuIHsKICAgIGxldCB4ID0gdltpXTsgLy8gKCopCiAgICB5aWVsZCB4OyAvLyA8LS0gTm93IHlpZWxkIGlzIE9LLgogIH0KfTsKUGluOjpuZXcoJm11dCBiKS5yZXN1bWUoKCkpOwoKLy8gKCopIC0tIFVuZm9ydHVuYXRlbHksIHRoZXNlIHRlbXBvcmFyaWVzIGFyZSBjdXJyZW50bHkgcmVxdWlyZWQuCi8vIFNlZSA8aHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy80MzEyMj4uCmBgYApFMDYyN0EgeWllbGQgZXhwcmVzc2lvbiB3YXMgdXNlZCBvdXRzaWRlIG9mIHRoZSBnZW5lcmF0b3IgbGl0ZXJhbC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjcKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gZmFrZV9nZW5lcmF0b3IoKSAtPiAmJ3N0YXRpYyBzdHIgewogICAgeWllbGQgMTsKICAgIHJldHVybiAiZm9vIgp9CgpmbiBtYWluKCkgewogICAgbGV0IG11dCBnZW5lcmF0b3IgPSBmYWtlX2dlbmVyYXRvcjsKfQpgYGAKClRoZSBlcnJvciBvY2N1cnMgYmVjYXVzZSBrZXl3b3JkIGB5aWVsZGAgY2FuIG9ubHkgYmUgdXNlZCBpbnNpZGUgdGhlIGdlbmVyYXRvcgpsaXRlcmFsLiBUaGlzIGNhbiBiZSBmaXhlZCBieSBjb25zdHJ1Y3RpbmcgdGhlIGdlbmVyYXRvciBjb3JyZWN0bHkuCgpgYGAKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gbWFpbigpIHsKICAgIGxldCBtdXQgZ2VuZXJhdG9yID0gfHwgewogICAgICAgIHlpZWxkIDE7CiAgICAgICAgcmV0dXJuICJmb28iCiAgICB9Owp9CmBgYApFMDYyOE1vcmUgdGhhbiBvbmUgcGFyYW1ldGVyIHdhcyB1c2VkIGZvciBhIGdlbmVyYXRvci4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2MjgKIyFbZmVhdHVyZShnZW5lcmF0b3JzLCBnZW5lcmF0b3JfdHJhaXQpXQoKZm4gbWFpbigpIHsKICAgIGxldCBnZW5lcmF0b3IgPSB8YTogaTMyLCBiOiBpMzJ8IHsKICAgICAgICAvLyBlcnJvcjogdG9vIG1hbnkgcGFyYW1ldGVycyBmb3IgYSBnZW5lcmF0b3IKICAgICAgICAvLyBBbGxvd2VkIG9ubHkgMCBvciAxIHBhcmFtZXRlcgogICAgICAgIHlpZWxkIGE7CiAgICB9Owp9CmBgYAoKQXQgcHJlc2VudCwgaXQgaXMgbm90IHBlcm1pdHRlZCB0byBwYXNzIG1vcmUgdGhhbiBvbmUgZXhwbGljaXQKcGFyYW1ldGVyIGZvciBhIGdlbmVyYXRvci5UaGlzIGNhbiBiZSBmaXhlZCBieSB1c2luZwphdCBtb3N0IDEgcGFyYW1ldGVyIGZvciB0aGUgZ2VuZXJhdG9yLiBGb3IgZXhhbXBsZSwgd2UgbWlnaHQgcmVzb2x2ZQp0aGUgcHJldmlvdXMgZXhhbXBsZSBieSBwYXNzaW5nIG9ubHkgb25lIHBhcmFtZXRlci4KCmBgYAojIVtmZWF0dXJlKGdlbmVyYXRvcnMsIGdlbmVyYXRvcl90cmFpdCldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHxhOiBpMzJ8IHsKICAgICAgICB5aWVsZCBhOwogICAgfTsKfQpgYGAKRTA2MzFUaGlzIGVycm9yIGluZGljYXRlcyBhIHR5cGUgbWlzbWF0Y2ggaW4gY2xvc3VyZSBhcmd1bWVudHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjMxCmZuIGZvbzxGOiBGbihpMzIpPihmOiBGKSB7Cn0KCmZuIG1haW4oKSB7CiAgICBmb28ofHg6ICZzdHJ8IHt9KTsKfQpgYGAKClRoZSBlcnJvciBvY2N1cnMgYmVjYXVzZSBgZm9vYCBhY2NlcHRzIGEgY2xvc3VyZSB0aGF0IHRha2VzIGFuIGBpMzJgIGFyZ3VtZW50LApidXQgaW4gYG1haW5gLCBpdCBpcyBwYXNzZWQgYSBjbG9zdXJlIHdpdGggYSBgJnN0cmAgYXJndW1lbnQuCgpUaGlzIGNhbiBiZSByZXNvbHZlZCBieSBjaGFuZ2luZyB0aGUgdHlwZSBhbm5vdGF0aW9uIG9yIHJlbW92aW5nIGl0IGVudGlyZWx5CmlmIGl0IGNhbiBiZSBpbmZlcnJlZC4KCmBgYApmbiBmb288RjogRm4oaTMyKT4oZjogRikgewp9CgpmbiBtYWluKCkgewogICAgZm9vKHx4OiBpMzJ8IHt9KTsKfQpgYGAKRTA2MzIjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBbiBleHBsaWNpdCBnZW5lcmljIGFyZ3VtZW50IHdhcyBwcm92aWRlZCB3aGVuIGNhbGxpbmcgYSBmdW5jdGlvbiB0aGF0CnVzZXMgYGltcGwgVHJhaXRgIGluIGFyZ3VtZW50IHBvc2l0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGFuIGVycm9yKQpmbiBmb288VDogQ29weT4oYTogVCwgYjogaW1wbCBDbG9uZSkge30KCmZvbzo6PGkzMj4oMGkzMiwgImFiYyIudG9fc3RyaW5nKCkpOwpgYGAKCkVpdGhlciBhbGwgZ2VuZXJpYyBhcmd1bWVudHMgc2hvdWxkIGJlIGluZmVycmVkIGF0IHRoZSBjYWxsIHNpdGUsIG9yCnRoZSBmdW5jdGlvbiBkZWZpbml0aW9uIHNob3VsZCB1c2UgYW4gZXhwbGljaXQgZ2VuZXJpYyB0eXBlIHBhcmFtZXRlcgppbnN0ZWFkIG9mIGBpbXBsIFRyYWl0YC4gRXhhbXBsZToKCmBgYApmbiBmb288VDogQ29weT4oYTogVCwgYjogaW1wbCBDbG9uZSkge30KZm4gYmFyPFQ6IENvcHksIFU6IENsb25lPihhOiBULCBiOiBVKSB7fQoKZm9vKDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKCmJhcjo6PGkzMiwgU3RyaW5nPigwaTMyLCAiYWJjIi50b19zdHJpbmcoKSk7CmJhcjo6PF8sIF8+KDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYmFyKDBpMzIsICJhYmMiLnRvX3N0cmluZygpKTsKYGBgCkUwNjMzIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGB1bndpbmRgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojIVtmZWF0dXJlKHVud2luZF9hdHRyaWJ1dGVzKV0KCiNbdW53aW5kKCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGV4dGVybiAiQyIgZm4gc29tZXRoaW5nKCkge30KCmZuIG1haW4oKSB7fQpgYGAKClRoZSBgI1t1bndpbmRdYCBhdHRyaWJ1dGUgc2hvdWxkIGJlIHVzZWQgYXMgZm9sbG93czoKCi0gYCNbdW53aW5kKGFib3J0cyldYCAtLSBzcGVjaWZpZXMgdGhhdCBpZiBhIG5vbi1SdXN0IEFCSSBmdW5jdGlvbgogIHNob3VsZCBhYm9ydCB0aGUgcHJvY2VzcyBpZiBpdCBhdHRlbXB0cyB0byB1bndpbmQuIFRoaXMgaXMgdGhlIHNhZmVyCiAgYW5kIHByZWZlcnJlZCBvcHRpb24uCgotIGAjW3Vud2luZChhbGxvd2VkKV1gIC0tIHNwZWNpZmllcyB0aGF0IGEgbm9uLVJ1c3QgQUJJIGZ1bmN0aW9uCiAgc2hvdWxkIGJlIGFsbG93ZWQgdG8gdW53aW5kLiBUaGlzIGNhbiBlYXNpbHkgcmVzdWx0IGluIFVuZGVmaW5lZAogIEJlaGF2aW9yIChVQiksIHNvIGJlIGNhcmVmdWwuCgpOQi4gVGhlIGRlZmF1bHQgYmVoYXZpb3IgaGVyZSBpcyAiYWxsb3dlZCIsIGJ1dCB0aGlzIGlzIHVuc3BlY2lmaWVkCmFuZCBsaWtlbHkgdG8gY2hhbmdlIGluIHRoZSBmdXR1cmUuCkUwNjM0QSB0eXBlIGhhcyBjb25mbGljdGluZyBgcGFja2VkYCByZXByZXNlbnRhdGlvbiBoaW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM0CiNbcmVwcihwYWNrZWQsIHBhY2tlZCgyKSldIC8vIGVycm9yIQpzdHJ1Y3QgQ29tcGFueShpMzIpOwoKI1tyZXByKHBhY2tlZCgyKSldIC8vIGVycm9yIQojW3JlcHIocGFja2VkKV0Kc3RydWN0IENvbXBhbnkoaTMyKTsKYGBgCgpZb3UgY2Fubm90IHVzZSBjb25mbGljdGluZyBgcGFja2VkYCBoaW50cyBvbiBhIHNhbWUgdHlwZS4gSWYgeW91IHdhbnQgdG8gcGFjayBhCnR5cGUgdG8gYSBnaXZlbiBzaXplLCB5b3Ugc2hvdWxkIHByb3ZpZGUgYSBzaXplIHRvIHBhY2tlZDoKCmBgYAojW3JlcHIocGFja2VkKV0gLy8gb2shCnN0cnVjdCBDb21wYW55KGkzMik7CmBgYApFMDYzNVRoZSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSBzcGVjaWZpZWQgYW4gdW5rbm93biBmZWF0dXJlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDYzNQojIVtmZWF0dXJlKG5vbmV4aXN0ZW50X3J1c3RfZmVhdHVyZSldIC8vIGVycm9yOiB1bmtub3duIGZlYXR1cmUKYGBgCkUwNjM2QSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgbXVsdGlwbGUgdGltZXMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjM2CiMhW2FsbG93KHN0YWJsZV9mZWF0dXJlcyldCiMhW2ZlYXR1cmUocnVzdDEpXQojIVtmZWF0dXJlKHJ1c3QxKV0gLy8gZXJyb3I6IHRoZSBmZWF0dXJlIGBydXN0MWAgaGFzIGFscmVhZHkgYmVlbiBkZWNsYXJlZApgYGAKRTA2MzdgJ19gIGxpZmV0aW1lIG5hbWUgb3IgYCZUYCB3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUgaGFzIGJlZW4gdXNlZApvbiBpbGxlZ2FsIHBsYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDEwNixFMDYzNwpmbiB1bmRlcnNjb3JlX2xpZmV0aW1lPCdfPihzdHIxOiAmJ18gc3RyLCBzdHIyOiAmJ18gc3RyKSAtPiAmJ18gc3RyIHsKICAgICAgICAgICAgICAgICAgICAgLy9eXiBgJ19gIGlzIGEgcmVzZXJ2ZWQgbGlmZXRpbWUgbmFtZQogICAgaWYgc3RyMS5sZW4oKSA+IHN0cjIubGVuKCkgewogICAgICAgIHN0cjEKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CgpmbiBhbmRfd2l0aG91dF9leHBsaWNpdF9saWZldGltZTxUPigpCndoZXJlCiAgICBUOiBJbnRvPCZ1MzI+LAogICAgICAgICAgLy9eIGAmYCB3aXRob3V0IGFuIGV4cGxpY2l0IGxpZmV0aW1lIG5hbWUKewp9CmBgYAoKRmlyc3QsIGAnX2AgY2Fubm90IGJlIHVzZWQgYXMgYSBsaWZldGltZSBpZGVudGlmaWVyIGluIHNvbWUgcGxhY2VzCmJlY2F1c2UgaXQgaXMgYSByZXNlcnZlZCBmb3IgdGhlIGFub255bW91cyBsaWZldGltZS4gU2Vjb25kLCBgJlRgCndpdGhvdXQgYW4gZXhwbGljaXQgbGlmZXRpbWUgbmFtZSBjYW5ub3QgYWxzbyBiZSB1c2VkIGluIHNvbWUgcGxhY2VzLgpUbyBmaXggdGhlbSwgdXNlIGEgbG93ZXJjYXNlIGxldHRlciBzdWNoIGFzIGAnYWAsIG9yIGEgc2VyaWVzCm9mIGxvd2VyY2FzZSBsZXR0ZXJzIHN1Y2ggYXMgYCdmb29gLiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBsaWZldGltZQppZGVudGlmaWVyLCBzZWUgW3RoZSBib29rXVtiay1ub10uIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHVzaW5nCnRoZSBhbm9ueW1vdXMgbGlmZXRpbWUgaW4gUnVzdCAyMDE4LCBzZWUgW3RoZSBSdXN0IDIwMTggYmxvZyBwb3N0XVtibG9nLWFsXS4KCkNvcnJlY3RlZCBleGFtcGxlOgoKYGBgCmZuIHVuZGVyc2NvcmVfbGlmZXRpbWU8J2E+KHN0cjE6ICYnYSBzdHIsIHN0cjI6ICYnYSBzdHIpIC0+ICYnYSBzdHIgewogICAgaWYgc3RyMS5sZW4oKSA+IHN0cjIubGVuKCkgewogICAgICAgIHN0cjEKICAgIH0gZWxzZSB7CiAgICAgICAgc3RyMgogICAgfQp9CgpmbiBhbmRfd2l0aG91dF9leHBsaWNpdF9saWZldGltZTwnZm9vLCBUPigpCndoZXJlCiAgICBUOiBJbnRvPCYnZm9vIHUzMj4sCnsKfQpgYGAKCltiay1ub106IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9hcHBlbmRpeC0wMi1vcGVyYXRvcnMuaHRtbCNub24tb3BlcmF0b3Itc3ltYm9scwpbYmxvZy1hbF06IGh0dHBzOi8vYmxvZy5ydXN0LWxhbmcub3JnLzIwMTgvMTIvMDYvUnVzdC0xLjMxLWFuZC1ydXN0LTIwMTguaHRtbCNtb3JlLWxpZmV0aW1lLWVsaXNpb24tcnVsZXMKRTA2MzhUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBzdHJ1Y3QsIGVudW0gb3IgZW51bSB2YXJpYW50IG11c3QgYmUgbWF0Y2hlZApub24tZXhoYXVzdGl2ZWx5IGFzIGl0IGhhcyBiZWVuIG1hcmtlZCBhcyBgbm9uX2V4aGF1c3RpdmVgLgoKV2hlbiBhcHBsaWVkIHdpdGhpbiBhIGNyYXRlLCBkb3duc3RyZWFtIHVzZXJzIG9mIHRoZSBjcmF0ZSB3aWxsIG5lZWQgdG8gdXNlIHRoZQpgX2AgcGF0dGVybiB3aGVuIG1hdGNoaW5nIGVudW1zIGFuZCB1c2UgdGhlIGAuLmAgcGF0dGVybiB3aGVuIG1hdGNoaW5nIHN0cnVjdHMuCkRvd25zdHJlYW0gY3JhdGVzIGNhbm5vdCBtYXRjaCBhZ2FpbnN0IG5vbi1leGhhdXN0aXZlIGVudW0gdmFyaWFudHMuCgpGb3IgZXhhbXBsZSwgaW4gdGhlIGJlbG93IGV4YW1wbGUsIHNpbmNlIHRoZSBlbnVtIGlzIG1hcmtlZCBhcwpgbm9uX2V4aGF1c3RpdmVgLCBpdCBpcyByZXF1aXJlZCB0aGF0IGRvd25zdHJlYW0gY3JhdGVzIG1hdGNoIG5vbi1leGhhdXN0aXZlbHkKb24gaXQuCgpgYGBydXN0LGlnbm9yZSAocHNldWRvLVJ1c3QpCiNbbm9uX2V4aGF1c3RpdmVdCnB1YiBlbnVtIEVycm9yIHsKICAgIE1lc3NhZ2UoU3RyaW5nKSwKICAgIE90aGVyLAp9CgppbXBsIERpc3BsYXkgZm9yIEVycm9yIHsKICAgIGZuIGZtdCgmc2VsZiwgZm9ybWF0dGVyOiAmbXV0IGZtdDo6Rm9ybWF0dGVyKSAtPiBmbXQ6OlJlc3VsdCB7CiAgICAgICAgLy8gVGhpcyB3aWxsIG5vdCBlcnJvciwgZGVzcGl0ZSBiZWluZyBtYXJrZWQgYXMgbm9uX2V4aGF1c3RpdmUsIGFzIHRoaXMKICAgICAgICAvLyBlbnVtIGlzIGRlZmluZWQgd2l0aGluIHRoZSBjdXJyZW50IGNyYXRlLCBpdCBjYW4gYmUgbWF0Y2hlZAogICAgICAgIC8vIGV4aGF1c3RpdmVseS4KICAgICAgICBsZXQgZGlzcGxheSA9IG1hdGNoIHNlbGYgewogICAgICAgICAgICBNZXNzYWdlKHMpID0+IHMsCiAgICAgICAgICAgIE90aGVyID0+ICJvdGhlciBvciB1bmtub3duIGVycm9yIiwKICAgICAgICB9OwogICAgICAgIGZvcm1hdHRlci53cml0ZV9zdHIoZGlzcGxheSkKICAgIH0KfQpgYGAKCkFuIGV4YW1wbGUgb2YgbWF0Y2hpbmcgbm9uLWV4aGF1c3RpdmVseSBvbiB0aGUgYWJvdmUgZW51bSBpcyBwcm92aWRlZCBiZWxvdzoKCmBgYHJ1c3QsaWdub3JlIChwc2V1ZG8tUnVzdCkKdXNlIG15Y3JhdGU6OkVycm9yOwoKLy8gVGhpcyB3aWxsIG5vdCBlcnJvciBhcyB0aGUgbm9uX2V4aGF1c3RpdmUgRXJyb3IgZW51bSBoYXMgYmVlbiBtYXRjaGVkIHdpdGggYQovLyB3aWxkY2FyZC4KbWF0Y2ggZXJyb3IgewogICAgTWVzc2FnZShzKSA9PiAuLi4sCiAgICBPdGhlciA9PiAuLi4sCiAgICBfID0+IC4uLiwKfQpgYGAKClNpbWlsYXJseSwgZm9yIHN0cnVjdHMsIG1hdGNoIHdpdGggYC4uYCB0byBhdm9pZCB0aGlzIGVycm9yLgpFMDYzOVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cnVjdCwgZW51bSBvciBlbnVtIHZhcmlhbnQgY2Fubm90IGJlCmluc3RhbnRpYXRlZCBmcm9tIG91dHNpZGUgb2YgdGhlIGRlZmluaW5nIGNyYXRlIGFzIGl0IGhhcyBiZWVuIG1hcmtlZAphcyBgbm9uX2V4aGF1c3RpdmVgIGFuZCBhcyBzdWNoIG1vcmUgZmllbGRzL3ZhcmlhbnRzIG1heSBiZSBhZGRlZCBpbgpmdXR1cmUgdGhhdCBjb3VsZCBjYXVzZSBhZHZlcnNlIHNpZGUgZWZmZWN0cyBmb3IgdGhpcyBjb2RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoaXQgb25seSB3b3JrcyBjcm9zcy1jcmF0ZSkKI1tub25fZXhoYXVzdGl2ZV0KcHViIHN0cnVjdCBOb3JtYWxTdHJ1Y3QgewogICAgcHViIGZpcnN0X2ZpZWxkOiB1MTYsCiAgICBwdWIgc2Vjb25kX2ZpZWxkOiB1MTYsCn0KCmxldCBucyA9IE5vcm1hbFN0cnVjdCB7IGZpcnN0X2ZpZWxkOiA2NDAsIHNlY29uZF9maWVsZDogNDgwIH07IC8vIGVycm9yIQpgYGAKCkl0IGlzIHJlY29tbWVuZGVkIHRoYXQgeW91IGxvb2sgZm9yIGEgYG5ld2AgZnVuY3Rpb24gb3IgZXF1aXZhbGVudCBpbiB0aGUKY3JhdGUncyBkb2N1bWVudGF0aW9uLgpFMDY0MUF0dGVtcHRlZCB0byBjYXN0IHRvL2Zyb20gYSBwb2ludGVyIHdpdGggYW4gdW5rbm93biBraW5kLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0MQpsZXQgYiA9IDAgYXMgKmNvbnN0IF87IC8vIGVycm9yCmBgYAoKVHlwZSBpbmZvcm1hdGlvbiBtdXN0IGJlIHByb3ZpZGVkIGlmIGEgcG9pbnRlciB0eXBlIGJlaW5nIGNhc3QgZnJvbS9pbnRvIGFub3RoZXIKdHlwZSB3aGljaCBjYW5ub3QgYmUgaW5mZXJyZWQ6CgpgYGAKLy8gQ3JlYXRpbmcgYSBwb2ludGVyIGZyb20gcmVmZXJlbmNlOiB0eXBlIGNhbiBiZSBpbmZlcnJlZApsZXQgYSA9ICYoU3RyaW5nOjpmcm9tKCJIZWxsbyB3b3JsZCEiKSkgYXMgKmNvbnN0IF87IC8vIG9rIQoKbGV0IGIgPSAwIGFzICpjb25zdCBpMzI7IC8vIG9rIQoKbGV0IGM6ICpjb25zdCBpMzIgPSAwIGFzICpjb25zdCBfOyAvLyBvayEKYGBgCkUwNjQyVHJhaXQgbWV0aG9kcyBjdXJyZW50bHkgY2Fubm90IHRha2UgcGF0dGVybnMgYXMgYXJndW1lbnRzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mgp0cmFpdCBGb28gewogICAgZm4gZm9vKCh4LCB5KTogKGkzMiwgaTMyKSk7IC8vIGVycm9yOiBwYXR0ZXJucyBhcmVuJ3QgYWxsb3dlZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBpbiB0cmFpdCBtZXRob2RzCn0KYGBgCgpZb3UgY2FuIGluc3RlYWQgdXNlIGEgc2luZ2xlIG5hbWUgZm9yIHRoZSBhcmd1bWVudDoKCmBgYAp0cmFpdCBGb28gewogICAgZm4gZm9vKHhfYW5kX3k6IChpMzIsIGkzMikpOyAvLyBvayEKfQpgYGAKRTA2NDNUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZXJlIGlzIGEgbWlzbWF0Y2ggYmV0d2VlbiBnZW5lcmljIHBhcmFtZXRlcnMgYW5kCmltcGwgVHJhaXQgcGFyYW1ldGVycyBpbiBhIHRyYWl0IGRlY2xhcmF0aW9uIHZlcnN1cyBpdHMgaW1wbC4KCmBgYGNvbXBpbGVfZmFpbCxFMDY0Mwp0cmFpdCBGb28gewogICAgZm4gZm9vKCZzZWxmLCBfOiAmaW1wbCBJdGVyYXRvcik7Cn0KaW1wbCBGb28gZm9yICgpIHsKICAgIGZuIGZvbzxVOiBJdGVyYXRvcj4oJnNlbGYsIF86ICZVKSB7IH0gLy8gZXJyb3IgbWV0aG9kIGBmb29gIGhhcyBpbmNvbXBhdGlibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gc2lnbmF0dXJlIGZvciB0cmFpdAp9CmBgYApFMDY0NEEgY2xvc3VyZSBvciBnZW5lcmF0b3Igd2FzIGNvbnN0cnVjdGVkIHRoYXQgcmVmZXJlbmNlcyBpdHMgb3duIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjQ0CmZuIGZpeDxGPihmOiAmRikKICB3aGVyZSBGOiBGbigmRikKewogICAgZigmZik7Cn0KCmZuIG1haW4oKSB7CiAgICBmaXgoJnx5fCB7CiAgICAgICAgLy8gSGVyZSwgd2hlbiBgeGAgaXMgY2FsbGVkLCB0aGUgcGFyYW1ldGVyIGB5YCBpcyBlcXVhbCB0byBgeGAuCiAgICB9KTsKfQpgYGAKClJ1c3QgZG9lcyBub3QgcGVybWl0IGEgY2xvc3VyZSB0byBkaXJlY3RseSByZWZlcmVuY2UgaXRzIG93biB0eXBlLAplaXRoZXIgdGhyb3VnaCBhbiBhcmd1bWVudCAoYXMgaW4gdGhlIGV4YW1wbGUgYWJvdmUpIG9yIGJ5IGNhcHR1cmluZwppdHNlbGYgdGhyb3VnaCBpdHMgZW52aXJvbm1lbnQuIFRoaXMgcmVzdHJpY3Rpb24gaGVscHMga2VlcCBjbG9zdXJlCmluZmVyZW5jZSB0cmFjdGFibGUuCgpUaGUgZWFzaWVzdCBmaXggaXMgdG8gcmV3cml0ZSB5b3VyIGNsb3N1cmUgaW50byBhIHRvcC1sZXZlbCBmdW5jdGlvbiwKb3IgaW50byBhIG1ldGhvZC4gSW4gc29tZSBjYXNlcywgeW91IG1heSBhbHNvIGJlIGFibGUgdG8gaGF2ZSB5b3VyCmNsb3N1cmUgY2FsbCBpdHNlbGYgYnkgY2FwdHVyaW5nIGEgYCZGbigpYCBvYmplY3Qgb3IgYGZuKClgIHBvaW50ZXIKdGhhdCByZWZlcnMgdG8gaXRzZWxmLiBUaGF0IGlzIHBlcm1pdHRpbmcsIHNpbmNlIHRoZSBjbG9zdXJlIHdvdWxkIGJlCmludm9raW5nIGl0c2VsZiB2aWEgYSB2aXJ0dWFsIGNhbGwsIGFuZCBoZW5jZSBkb2VzIG5vdCBkaXJlY3RseQpyZWZlcmVuY2UgaXRzIG93biAqdHlwZSouCkUwNjQ2SXQgaXMgbm90IHBvc3NpYmxlIHRvIGRlZmluZSBgbWFpbmAgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDYKZm4gbWFpbigpIHdoZXJlIGkzMjogQ29weSB7IC8vIGVycm9yOiBtYWluIGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGhhdmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGEgd2hlcmUgY2xhdXNlCn0KYGBgCkUwNjQ3VGhlIGBzdGFydGAgZnVuY3Rpb24gd2FzIGRlZmluZWQgd2l0aCBhIHdoZXJlIGNsYXVzZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDcKIyFbZmVhdHVyZShzdGFydCldCgojW3N0YXJ0XQpmbiBzdGFydChfOiBpc2l6ZSwgXzogKmNvbnN0ICpjb25zdCB1OCkgLT4gaXNpemUgd2hlcmUgKCk6IENvcHkgewogICAgLy9eIGVycm9yOiBzdGFydCBmdW5jdGlvbiBpcyBub3QgYWxsb3dlZCB0byBoYXZlIGEgd2hlcmUgY2xhdXNlCiAgICAwCn0KYGBgCkUwNjQ4QW4gYGV4cG9ydF9uYW1lYCBhdHRyaWJ1dGUgY29udGFpbnMgbnVsbCBjaGFyYWN0ZXJzIChgXDBgKS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NDgKI1tleHBvcnRfbmFtZT0iXDBmb28iXSAvLyBlcnJvcjogYGV4cG9ydF9uYW1lYCBtYXkgbm90IGNvbnRhaW4gbnVsbCBjaGFyYWN0ZXJzCnB1YiBmbiBiYXIoKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCByZW1vdmUgdGhlIG51bGwgY2hhcmFjdGVyczoKCmBgYAojW2V4cG9ydF9uYW1lPSJmb28iXSAvLyBvayEKcHViIGZuIGJhcigpIHt9CmBgYApFMDY1N0EgbGlmZXRpbWUgYm91bmQgb24gYSB0cmFpdCBpbXBsZW1lbnRhdGlvbiB3YXMgY2FwdHVyZWQgYXQgYW4gaW5jb3JyZWN0IHBsYWNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY1Nwp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdhPj4+IC8vIGVycm9yIQp7CiAgICBCb3g6Om5ldygoKSkKfQoKc3RydWN0IEZvbzsKaW1wbCBGb28gewogICAgZm4gaW1wbF9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdCgpCiAgICAgICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYT4+PiAvLyBlcnJvciEKICAgIHsKICAgICAgICBCb3g6Om5ldygoKSkKICAgIH0KfQpgYGAKCkhlcmUsIHlvdSBoYXZlIHVzZWQgdGhlIGluYXBwcm9wcmlhdGUgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YCwKVGhlIGBpbXBsIFRyYWl0YCBjYW4gb25seSBjYXB0dXJlIGxpZmV0aW1lcyBib3VuZCBhdCB0aGUgZm4gb3IgaW1wbApsZXZlbC4KClRvIGZpeCB0aGlzIHdlIGhhdmUgdG8gZGVmaW5lIHRoZSBsaWZldGltZSBhdCB0aGUgZnVuY3Rpb24gb3IgaW1wbApsZXZlbCBhbmQgdXNlIHRoYXQgbGlmZXRpbWUgaW4gdGhlIGBpbXBsIFRyYWl0YC4gRm9yIGV4YW1wbGUgeW91IGNhbgpkZWZpbmUgdGhlIGxpZmV0aW1lIGF0IHRoZSBmdW5jdGlvbjoKCmBgYAp0cmFpdCBJZDxUPiB7fQp0cmFpdCBMdDwnYT4ge30KCmltcGw8J2E+IEx0PCdhPiBmb3IgKCkge30KaW1wbDxUPiBJZDxUPiBmb3IgVCB7fQoKZm4gZnJlZV9mbl9jYXB0dXJlX2hydGJfaW5faW1wbF90cmFpdDwnYj4oKQogICAgLT4gQm94PGZvcjwnYT4gSWQ8aW1wbCBMdDwnYj4+PiAvLyBvayEKewogICAgQm94OjpuZXcoKCkpCn0KCnN0cnVjdCBGb287CmltcGwgRm9vIHsKICAgIGZuIGltcGxfZm5fY2FwdHVyZV9ocnRiX2luX2ltcGxfdHJhaXQ8J2I+KCkKICAgICAgICAtPiBCb3g8Zm9yPCdhPiBJZDxpbXBsIEx0PCdiPj4+IC8vIG9rIQogICAgewogICAgICAgIEJveDo6bmV3KCgpKQogICAgfQp9CmBgYApFMDY1OEFuIHVuc3RhYmxlIGZlYXR1cmUgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjU4CiNbcmVwcih1MTI4KV0gLy8gZXJyb3I6IHVzZSBvZiB1bnN0YWJsZSBsaWJyYXJ5IGZlYXR1cmUgJ3JlcHIxMjgnCmVudW0gRm9vIHsKICAgIEJhcih1NjQpLAp9CmBgYAoKSWYgeW91J3JlIHVzaW5nIGEgc3RhYmxlIG9yIGEgYmV0YSB2ZXJzaW9uIG9mIHJ1c3RjLCB5b3Ugd29uJ3QgYmUgYWJsZSB0byB1c2UKYW55IHVuc3RhYmxlIGZlYXR1cmVzLiBJbiBvcmRlciB0byBkbyBzbywgcGxlYXNlIHN3aXRjaCB0byBhIG5pZ2h0bHkgdmVyc2lvbiBvZgpydXN0YyAoYnkgdXNpbmcgW3J1c3R1cF0pLgoKSWYgeW91J3JlIHVzaW5nIGEgbmlnaHRseSB2ZXJzaW9uIG9mIHJ1c3RjLCBqdXN0IGFkZCB0aGUgY29ycmVzcG9uZGluZyBmZWF0dXJlCnRvIGJlIGFibGUgdG8gdXNlIGl0OgoKYGBgCiMhW2ZlYXR1cmUocmVwcjEyOCldCgojW3JlcHIodTEyOCldIC8vIG9rIQplbnVtIEZvbyB7CiAgICBCYXIodTY0KSwKfQpgYGAKCltydXN0dXBdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcnVzdHVwL2NvbmNlcHRzL2NoYW5uZWxzLmh0bWwKRTA2NTlBbiBpdGVtIHVzYWdlIGlzIGFtYmlndW91cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA2NTkKcHViIG1vZCBtb29uIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9CgpwdWIgbW9kIGVhcnRoIHsKICAgIHB1YiBmbiBmb28oKSB7fQp9Cgptb2QgY29sbGlkZXIgewogICAgcHViIHVzZSBjcmF0ZTo6bW9vbjo6KjsKICAgIHB1YiB1c2UgY3JhdGU6OmVhcnRoOjoqOwp9CgpmbiBtYWluKCkgewogICAgY3JhdGU6OmNvbGxpZGVyOjpmb28oKTsgLy8gRVJST1I6IGBmb29gIGlzIGFtYmlndW91cwp9CmBgYAoKVGhpcyBlcnJvciBnZW5lcmFsbHkgYXBwZWFycyB3aGVuIHR3byBpdGVtcyB3aXRoIHRoZSBzYW1lIG5hbWUgYXJlIGltcG9ydGVkIGludG8KYSBtb2R1bGUuIEhlcmUsIHRoZSBgZm9vYCBmdW5jdGlvbnMgYXJlIGltcG9ydGVkIGFuZCByZWV4cG9ydGVkIGZyb20gdGhlCmBjb2xsaWRlcmAgbW9kdWxlIGFuZCB0aGVyZWZvcmUsIHdoZW4gd2UncmUgdXNpbmcgYGNvbGxpZGVyOjpmb28oKWAsIGJvdGgKZnVuY3Rpb25zIGNvbGxpZGUuCgpUbyBzb2x2ZSB0aGlzIGVycm9yLCB0aGUgYmVzdCBzb2x1dGlvbiBpcyBnZW5lcmFsbHkgdG8ga2VlcCB0aGUgcGF0aCBiZWZvcmUgdGhlCml0ZW0gd2hlbiB1c2luZyBpdC4gRXhhbXBsZToKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgbW9vbiB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKcHViIG1vZCBlYXJ0aCB7CiAgICBwdWIgZm4gZm9vKCkge30KfQoKbW9kIGNvbGxpZGVyIHsKICAgIHB1YiB1c2UgY3JhdGU6Om1vb247CiAgICBwdWIgdXNlIGNyYXRlOjplYXJ0aDsKfQoKZm4gbWFpbigpIHsKICAgIGNyYXRlOjpjb2xsaWRlcjo6bW9vbjo6Zm9vKCk7IC8vIG9rIQogICAgY3JhdGU6OmNvbGxpZGVyOjplYXJ0aDo6Zm9vKCk7IC8vIG9rIQp9CmBgYApFMDY2MCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClRoZSBhcmd1bWVudCB0byB0aGUgYGxsdm1fYXNtYCBtYWNybyBpcyBub3Qgd2VsbC1mb3JtZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChubyBsb25nZXIgZW1pdHRlZCkKbGx2bV9hc20hKCJub3AiICJub3AiKTsKYGBgCkUwNjYxIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gaW52YWxpZCBzeW50YXggd2FzIHBhc3NlZCB0byB0aGUgc2Vjb25kIGFyZ3VtZW50IG9mIGFuIGBsbHZtX2FzbWAgbWFjcm8gbGluZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5vIGxvbmdlciBlbWl0dGVkKQpsZXQgYTsKbGx2bV9hc20hKCJub3AiIDogInIiKGEpKTsKYGBgCkUwNjYyIyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKQW4gaW52YWxpZCBpbnB1dCBvcGVyYW5kIGNvbnN0cmFpbnQgd2FzIHBhc3NlZCB0byB0aGUgYGxsdm1fYXNtYCBtYWNybwoodGhpcmQgbGluZSkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChubyBsb25nZXIgZW1pdHRlZCkKbGx2bV9hc20hKCJ4b3IgJWVheCwgJWVheCIKICAgICAgICAgIDoKICAgICAgICAgIDogIj10ZXN0IigiYSIpCiAgICAgICAgICk7CmBgYApFMDY2MyMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkFuIGludmFsaWQgaW5wdXQgb3BlcmFuZCBjb25zdHJhaW50IHdhcyBwYXNzZWQgdG8gdGhlIGBsbHZtX2FzbWAgbWFjcm8KKHRoaXJkIGxpbmUpLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCmxsdm1fYXNtISgieG9yICVlYXgsICVlYXgiCiAgICAgICAgICA6CiAgICAgICAgICA6ICIrdGVzdCIoImEiKQogICAgICAgICApOwpgYGAKRTA2NjQjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpBIGNsb2JiZXIgd2FzIHN1cnJvdW5kZWQgYnkgYnJhY2VzIGluIHRoZSBgbGx2bV9hc21gIG1hY3JvLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCmxsdm1fYXNtISgibW92ICQkMHgyMDAsICVlYXgiCiAgICAgICAgICA6CiAgICAgICAgICA6CiAgICAgICAgICA6ICJ7ZWF4fSIKICAgICAgICAgKTsKYGBgCkUwNjY1IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKVGhlIGBEZWZhdWx0YCB0cmFpdCB3YXMgZGVyaXZlZCBvbiBhbiBlbnVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbAojW2Rlcml2ZShEZWZhdWx0KV0KZW51bSBGb29kIHsKICAgIFN3ZWV0LAogICAgU2FsdHksCn0KYGBgCgpUaGUgYERlZmF1bHRgIGNhbm5vdCBiZSBkZXJpdmVkIG9uIGFuIGVudW0gZm9yIHRoZSBzaW1wbGUgcmVhc29uIHRoYXQgdGhlCmNvbXBpbGVyIGRvZXNuJ3Qga25vdyB3aGljaCB2YWx1ZSB0byBwaWNrIGJ5IGRlZmF1bHQgd2hlcmVhcyBpdCBjYW4gZm9yIGEKc3RydWN0IGFzIGxvbmcgYXMgYWxsIGl0cyBmaWVsZHMgaW1wbGVtZW50IHRoZSBgRGVmYXVsdGAgdHJhaXQgYXMgd2VsbC4KCklmIHlvdSBzdGlsbCB3YW50IHRvIGltcGxlbWVudCBgRGVmYXVsdGAgb24geW91ciBlbnVtLCB5b3UnbGwgaGF2ZSB0byBkbyBpdCAiYnkKaGFuZCI6CgpgYGAKZW51bSBGb29kIHsKICAgIFN3ZWV0LAogICAgU2FsdHksCn0KCmltcGwgRGVmYXVsdCBmb3IgRm9vZCB7CiAgICBmbiBkZWZhdWx0KCkgLT4gRm9vZCB7CiAgICAgICAgRm9vZDo6U3dlZXQKICAgIH0KfQpgYGAKRTA2NjZgaW1wbCBUcmFpdGAgdHlwZXMgY2Fubm90IGFwcGVhciBuZXN0ZWQgaW4gdGhlIGdlbmVyaWMgYXJndW1lbnRzIG9mIG90aGVyCmBpbXBsIFRyYWl0YCB0eXBlcy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NjYKdHJhaXQgTXlHZW5lcmljVHJhaXQ8VD4ge30KdHJhaXQgTXlJbm5lclRyYWl0IHt9CgpmbiBmb28oCiAgICBiYXI6IGltcGwgTXlHZW5lcmljVHJhaXQ8aW1wbCBNeUlubmVyVHJhaXQ+LCAvLyBlcnJvciEKKSB7fQpgYGAKClR5cGUgcGFyYW1ldGVycyBmb3IgYGltcGwgVHJhaXRgIHR5cGVzIG11c3QgYmUgZXhwbGljaXRseSBkZWZpbmVkIGFzIG5hbWVkCmdlbmVyaWMgcGFyYW1ldGVyczoKCmBgYAp0cmFpdCBNeUdlbmVyaWNUcmFpdDxUPiB7fQp0cmFpdCBNeUlubmVyVHJhaXQge30KCmZuIGZvbzxUOiBNeUlubmVyVHJhaXQ+KAogICAgYmFyOiBpbXBsIE15R2VuZXJpY1RyYWl0PFQ+LCAvLyBvayEKKSB7fQpgYGAKRTA2NjdgaW1wbCBUcmFpdGAgaXMgbm90IGFsbG93ZWQgaW4gcGF0aCBwYXJhbWV0ZXJzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY2NwpmbiBzb21lX2ZuKG11dCB4OiBpbXBsIEl0ZXJhdG9yKSAtPiA8aW1wbCBJdGVyYXRvcj46Okl0ZW0geyAvLyBlcnJvciEKICAgIHgubmV4dCgpLnVud3JhcCgpCn0KYGBgCgpZb3UgY2Fubm90IHVzZSBgaW1wbCBUcmFpdGAgaW4gcGF0aCBwYXJhbWV0ZXJzLiBJZiB5b3Ugd2FudCBzb21ldGhpbmcKZXF1aXZhbGVudCwgeW91IGNhbiBkbyB0aGlzIGluc3RlYWQ6CgpgYGAKZm4gc29tZV9mbjxUOiBJdGVyYXRvcj4obXV0IHg6IFQpIC0+IFQ6Okl0ZW0geyAvLyBvayEKICAgIHgubmV4dCgpLnVud3JhcCgpCn0KYGBgCkUwNjY4IyMjIyBOb3RlOiB0aGlzIGVycm9yIGNvZGUgaXMgbm8gbG9uZ2VyIGVtaXR0ZWQgYnkgdGhlIGNvbXBpbGVyLgoKTWFsZm9ybWVkIGlubGluZSBhc3NlbWJseSByZWplY3RlZCBieSBMTFZNLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAobm8gbG9uZ2VyIGVtaXR0ZWQpCiMhW2ZlYXR1cmUobGx2bV9hc20pXQoKZm4gbWFpbigpIHsKICAgIGxldCByYXg6IHU2NDsKICAgIHVuc2FmZSB7CiAgICAgICAgbGx2bV9hc20hKCIiIDoiPXtyYXgiKHJheCkpOwogICAgICAgIHByaW50bG4hKCJBY2N1bXVsYXRvciBpczoge30iLCByYXgpOwogICAgfQp9CmBgYAoKTExWTSBjaGVja3MgdGhlIHZhbGlkaXR5IG9mIHRoZSBjb25zdHJhaW50cyBhbmQgdGhlIGFzc2VtYmx5IHN0cmluZyBwYXNzZWQgdG8KaXQuIFRoaXMgZXJyb3IgaW1wbGllcyB0aGF0IExMVk0gc2VlbXMgc29tZXRoaW5nIHdyb25nIHdpdGggdGhlIGlubGluZQphc3NlbWJseSBjYWxsLgoKSW4gcGFydGljdWxhciwgaXQgY2FuIGhhcHBlbiBpZiB5b3UgZm9yZ290IHRoZSBjbG9zaW5nIGJyYWNrZXQgb2YgYSByZWdpc3Rlcgpjb25zdHJhaW50IChzZWUgaXNzdWUgIzUxNDMwKSwgbGlrZSBpbiB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLgpFMDY2OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNhbm5vdCBjb252ZXJ0IGlubGluZSBhc3NlbWJseSBvcGVyYW5kIHRvIGEgc2luZ2xlIExMVk0gdmFsdWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgaWdub3JlIChubyBsb25nZXIgZW1pdHRlZCkKIyFbZmVhdHVyZShsbHZtX2FzbSldCgpmbiBtYWluKCkgewogICAgdW5zYWZlIHsKICAgICAgICBsbHZtX2FzbSEoIiIgOjogInIiKCIiKSk7IC8vIGVycm9yIQogICAgfQp9CmBgYAoKVGhpcyBlcnJvciB1c3VhbGx5IGhhcHBlbnMgd2hlbiB0cnlpbmcgdG8gcGFzcyBpbiBhIHZhbHVlIHRvIGFuIGlucHV0IGlubGluZQphc3NlbWJseSBvcGVyYW5kIHRoYXQgaXMgYWN0dWFsbHkgYSBwYWlyIG9mIHZhbHVlcy4gSW4gcGFydGljdWxhciwgdGhpcyBjYW4KaGFwcGVuIHdoZW4gdHJ5aW5nIHRvIHBhc3MgaW4gYSBzbGljZSwgZm9yIGluc3RhbmNlIGEgYCZzdHJgLiBJbiBSdXN0LCB0aGVzZQp2YWx1ZXMgYXJlIHJlcHJlc2VudGVkIGludGVybmFsbHkgYXMgYSBwYWlyIG9mIHZhbHVlcywgdGhlIHBvaW50ZXIgYW5kIGl0cwpsZW5ndGguIFdoZW4gcGFzc2VkIGFzIGFuIGlucHV0IG9wZXJhbmQsIHRoaXMgcGFpciBvZiB2YWx1ZXMgY2FuIG5vdCBiZQpjb2VyY2VkIGludG8gYSByZWdpc3RlciBhbmQgdGh1cyB3ZSBtdXN0IGZhaWwgd2l0aCBhbiBlcnJvci4KRTA2NzBSdXN0IDIwMTUgZG9lcyBub3QgcGVybWl0IHRoZSB1c2Ugb2YgYGFzeW5jIGZuYC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2NzAKYXN5bmMgZm4gZm9vKCkge30KYGBgCgpTd2l0Y2ggdG8gdGhlIFJ1c3QgMjAxOCBlZGl0aW9uIHRvIHVzZSBgYXN5bmMgZm5gLgpFMDY3MSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkNvbnN0IHBhcmFtZXRlcnMgY2Fubm90IGRlcGVuZCBvbiB0eXBlIHBhcmFtZXRlcnMuClRoZSBmb2xsb3dpbmcgaXMgdGhlcmVmb3JlIGludmFsaWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzAKZm4gY29uc3RfaWQ8VCwgY29uc3QgTjogVD4oKSAtPiBUIHsgLy8gZXJyb3IKICAgIE4KfQpgYGAKRTA2ODcjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbi1iYW5kIGxpZmV0aW1lcyBjYW5ub3QgYmUgdXNlZCBpbiBgZm5gL2BGbmAgc3ludGF4LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZXM6CgpgYGBpZ25vcmUgKGZlYXR1cmUgZ290IHJlbW92ZWQpCiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vKHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBlcnJvciEKCmZuIGJhcih4OiAmRm4oJidhIHUzMikpIHt9IC8vIGVycm9yIQoKZm4gYmF6KHg6IGZuKCYnYSB1MzIpLCB5OiAmJ2EgdTMyKSB7fSAvLyBlcnJvciEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsIEZvbzwnYT4gewogICAgZm4gYmFyKCZzZWxmLCB4OiBmbigmJ2EgdTMyKSkge30gLy8gZXJyb3IhCn0KYGBgCgpMaWZldGltZXMgdXNlZCBpbiBgZm5gIG9yIGBGbmAgc3ludGF4IG11c3QgYmUgZXhwbGljaXRseQpkZWNsYXJlZCB1c2luZyBgPC4uLj5gIGJpbmRlcnMuIEZvciBleGFtcGxlOgoKYGBgCmZuIGZvbzwnYT4oeDogZm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmFyPCdhPih4OiAmRm4oJidhIHUzMikpIHt9IC8vIG9rIQoKZm4gYmF6PCdhPih4OiBmbigmJ2EgdTMyKSwgeTogJidhIHUzMikge30gLy8gb2shCgpzdHJ1Y3QgRm9vPCdhPiB7IHg6ICYnYSB1MzIgfQoKaW1wbDwnYT4gRm9vPCdhPiB7CiAgICBmbiBiYXIoJnNlbGYsIHg6IGZuKCYnYSB1MzIpKSB7fSAvLyBvayEKfQpgYGAKRTA2ODgjIyMjIE5vdGU6IHRoaXMgZXJyb3IgY29kZSBpcyBubyBsb25nZXIgZW1pdHRlZCBieSB0aGUgY29tcGlsZXIuCgpJbi1iYW5kIGxpZmV0aW1lcyB3ZXJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGZlYXR1cmUgZ290IHJlbW92ZWQpCiMhW2ZlYXR1cmUoaW5fYmFuZF9saWZldGltZXMpXQoKZm4gZm9vPCdhPih4OiAmJ2EgdTMyLCB5OiAmJ2IgdTMyKSB7fSAgIC8vIGVycm9yIQoKc3RydWN0IEZvbzwnYT4geyB4OiAmJ2EgdTMyIH0KCmltcGwgRm9vPCdhPiB7CiAgICBmbiBiYXI8J2I+KHg6ICYnYSB1MzIsIHk6ICYnYiB1MzIsIHo6ICYnYyB1MzIpIHt9ICAgLy8gZXJyb3IhCn0KCmltcGw8J2I+IEZvbzwnYT4geyAgLy8gZXJyb3IhCiAgICBmbiBiYXooKSB7fQp9CmBgYAoKSW4tYmFuZCBsaWZldGltZXMgY2Fubm90IGJlIG1peGVkIHdpdGggZXhwbGljaXQgbGlmZXRpbWUgYmluZGVycy4KRm9yIGV4YW1wbGU6CgpgYGAKZm4gZm9vPCdhLCAnYj4oeDogJidhIHUzMiwgeTogJidiIHUzMikge30gICAvLyBvayEKCnN0cnVjdCBGb288J2E+IHsgeDogJidhIHUzMiB9CgppbXBsPCdhPiBGb288J2E+IHsKICAgIGZuIGJhcjwnYiwnYz4oeDogJidhIHUzMiwgeTogJidiIHUzMiwgejogJidjIHUzMikge30gICAgLy8gb2shCn0KCmltcGw8J2E+IEZvbzwnYT4geyAgLy8gb2shCiAgICBmbiBiYXooKSB7fQp9CmBgYApFMDY4OUEgbWV0aG9kIHdhcyBjYWxsZWQgb24gYW4gYW1iaWd1b3VzIG51bWVyaWMgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2ODkKMi4wLm5lZygpOyAvLyBlcnJvciEKYGBgCgpUaGlzIGVycm9yIGluZGljYXRlcyB0aGF0IHRoZSBudW1lcmljIHZhbHVlIGZvciB0aGUgbWV0aG9kIGJlaW5nIHBhc3NlZCBleGlzdHMKYnV0IHRoZSB0eXBlIG9mIHRoZSBudW1lcmljIHZhbHVlIG9yIGJpbmRpbmcgY291bGQgbm90IGJlIGlkZW50aWZpZWQuCgpUaGUgZXJyb3IgaGFwcGVucyBvbiBudW1lcmljIGxpdGVyYWxzIGFuZCBvbiBudW1lcmljIGJpbmRpbmdzIHdpdGhvdXQgYW4KaWRlbnRpZmllZCBjb25jcmV0ZSB0eXBlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjg5CmxldCB4ID0gMi4wOwp4Lm5lZygpOyAgLy8gc2FtZSBlcnJvciBhcyBhYm92ZQpgYGAKCkJlY2F1c2Ugb2YgdGhpcywgeW91IG11c3QgZ2l2ZSB0aGUgbnVtZXJpYyBsaXRlcmFsIG9yIGJpbmRpbmcgYSB0eXBlOgoKYGBgCnVzZSBzdGQ6Om9wczo6TmVnOwoKbGV0IF8gPSAyLjBfZjMyLm5lZygpOyAvLyBvayEKbGV0IHg6IGYzMiA9IDIuMDsKbGV0IF8gPSB4Lm5lZygpOyAvLyBvayEKbGV0IF8gPSAoMi4wIGFzIGYzMikubmVnKCk7IC8vIG9rIQpgYGAKRTA2OTBBIHN0cnVjdCB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiBoaW50IGByZXByKHRyYW5zcGFyZW50KWAgaGFkIHR3byBvciBtb3JlIGZpZWxkcwp0aGF0IHdlcmUgbm90IGd1YXJhbnRlZWQgdG8gYmUgemVyby1zaXplZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IExlbmd0aFdpdGhVbml0PFU+IHsgLy8gZXJyb3I6IHRyYW5zcGFyZW50IHN0cnVjdCBuZWVkcyBhdCBtb3N0IG9uZQogICAgdmFsdWU6IGYzMiwgICAgICAgICAgICAvLyAgICAgICAgbm9uLXplcm8tc2l6ZWQgZmllbGQsIGJ1dCBoYXMgMgogICAgdW5pdDogVSwKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgc3RydWN0cyBhcmUgcmVwcmVzZW50ZWQgZXhhY3RseSBsaWtlIG9uZSBvZiB0aGVpciBmaWVsZHMgYXQKcnVuIHRpbWUsIHNhaWQgZmllbGQgbXVzdCBiZSB1bmlxdWVseSBkZXRlcm1pbmVkLiBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgZmllbGRzLAppdCBpcyBub3QgY2xlYXIgaG93IHRoZSBzdHJ1Y3Qgc2hvdWxkIGJlIHJlcHJlc2VudGVkLgpOb3RlIHRoYXQgZmllbGRzIG9mIHplcm8tc2l6ZWQgdHlwZXMgKGUuZy4sIGBQaGFudG9tRGF0YWApIGNhbiBhbHNvIGV4aXN0CmFsb25nc2lkZSB0aGUgZmllbGQgdGhhdCBjb250YWlucyB0aGUgYWN0dWFsIGRhdGEsIHRoZXkgZG8gbm90IGNvdW50IGZvciB0aGlzCmVycm9yLiBXaGVuIGdlbmVyaWMgdHlwZXMgYXJlIGludm9sdmVkIChhcyBpbiB0aGUgYWJvdmUgZXhhbXBsZSksIGFuIGVycm9yIGlzCnJlcG9ydGVkIGJlY2F1c2UgdGhlIHR5cGUgcGFyYW1ldGVyIGNvdWxkIGJlIG5vbi16ZXJvLXNpemVkLgoKVG8gY29tYmluZSBgcmVwcih0cmFuc3BhcmVudClgIHdpdGggdHlwZSBwYXJhbWV0ZXJzLCBgUGhhbnRvbURhdGFgIG1heSBiZQp1c2VmdWw6CgpgYGAKdXNlIHN0ZDo6bWFya2VyOjpQaGFudG9tRGF0YTsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBMZW5ndGhXaXRoVW5pdDxVPiB7CiAgICB2YWx1ZTogZjMyLAogICAgdW5pdDogUGhhbnRvbURhdGE8VT4sCn0KYGBgCkUwNjkxQSBzdHJ1Y3QsIGVudW0sIG9yIHVuaW9uIHdpdGggdGhlIGByZXByKHRyYW5zcGFyZW50KWAgcmVwcmVzZW50YXRpb24gaGludApjb250YWlucyBhIHplcm8tc2l6ZWQgZmllbGQgdGhhdCByZXF1aXJlcyBub24tdHJpdmlhbCBhbGlnbm1lbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkxCiMhW2ZlYXR1cmUocmVwcl9hbGlnbildCgojW3JlcHIoYWxpZ24oMzIpKV0Kc3RydWN0IEZvcmNlQWxpZ24zMjsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBXcmFwcGVyKGYzMiwgRm9yY2VBbGlnbjMyKTsgLy8gZXJyb3I6IHplcm8tc2l6ZWQgZmllbGQgaW4gdHJhbnNwYXJlbnQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgc3RydWN0IGhhcyBhbGlnbm1lbnQgbGFyZ2VyIHRoYW4gMQpgYGAKCkEgdHJhbnNwYXJlbnQgc3RydWN0LCBlbnVtLCBvciB1bmlvbiBpcyBzdXBwb3NlZCB0byBiZSByZXByZXNlbnRlZCBleGFjdGx5IGxpa2UKdGhlIHBpZWNlIG9mIGRhdGEgaXQgY29udGFpbnMuIFplcm8tc2l6ZWQgZmllbGRzIHdpdGggZGlmZmVyZW50IGFsaWdubWVudApyZXF1aXJlbWVudHMgcG90ZW50aWFsbHkgY29uZmxpY3Qgd2l0aCB0aGlzIHByb3BlcnR5LiBJbiB0aGUgZXhhbXBsZSBhYm92ZSwKYFdyYXBwZXJgIHdvdWxkIGhhdmUgdG8gYmUgYWxpZ25lZCB0byAzMiBieXRlcyBldmVuIHRob3VnaCBgZjMyYCBoYXMgYSBzbWFsbGVyCmFsaWdubWVudCByZXF1aXJlbWVudC4KCkNvbnNpZGVyIHJlbW92aW5nIHRoZSBvdmVyLWFsaWduZWQgemVyby1zaXplZCBmaWVsZDoKCmBgYAojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgV3JhcHBlcihmMzIpOwpgYGAKCkFsdGVybmF0aXZlbHksIGBQaGFudG9tRGF0YTxUPmAgaGFzIGFsaWdubWVudCAxIGZvciBhbGwgYFRgLCBzbyB5b3UgY2FuIHVzZSBpdAppZiB5b3UgbmVlZCB0byBrZWVwIHRoZSBmaWVsZCBmb3Igc29tZSByZWFzb246CgpgYGAKIyFbZmVhdHVyZShyZXByX2FsaWduKV0KCnVzZSBzdGQ6Om1hcmtlcjo6UGhhbnRvbURhdGE7CgojW3JlcHIoYWxpZ24oMzIpKV0Kc3RydWN0IEZvcmNlQWxpZ24zMjsKCiNbcmVwcih0cmFuc3BhcmVudCldCnN0cnVjdCBXcmFwcGVyKGYzMiwgUGhhbnRvbURhdGE8Rm9yY2VBbGlnbjMyPik7CmBgYAoKTm90ZSB0aGF0IGVtcHR5IGFycmF5cyBgW1Q7IDBdYCBoYXZlIHRoZSBzYW1lIGFsaWdubWVudCByZXF1aXJlbWVudCBhcyB0aGUKZWxlbWVudCB0eXBlIGBUYC4gQWxzbyBub3RlIHRoYXQgdGhlIGVycm9yIGlzIGNvbnNlcnZhdGl2ZWx5IHJlcG9ydGVkIGV2ZW4gd2hlbgp0aGUgYWxpZ25tZW50IG9mIHRoZSB6ZXJvLXNpemVkIHR5cGUgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIHRoZSBkYXRhIGZpZWxkJ3MKYWxpZ25tZW50LgpFMDY5MkEgYHJlcHIodHJhbnNwYXJlbnQpYCB0eXBlIHdhcyBhbHNvIGFubm90YXRlZCB3aXRoIG90aGVyLCBpbmNvbXBhdGlibGUKcmVwcmVzZW50YXRpb24gaGludHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNjkyCiNbcmVwcih0cmFuc3BhcmVudCwgQyldIC8vIGVycm9yOiBpbmNvbXBhdGlibGUgcmVwcmVzZW50YXRpb24gaGludHMKc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQSB0eXBlIGFubm90YXRlZCBhcyBgcmVwcih0cmFuc3BhcmVudClgIGRlbGVnYXRlcyBhbGwgcmVwcmVzZW50YXRpb24gY29uY2VybnMgdG8KYW5vdGhlciB0eXBlLCBzbyBhZGRpbmcgbW9yZSByZXByZXNlbnRhdGlvbiBoaW50cyBpcyBjb250cmFkaWN0b3J5LiBSZW1vdmUKZWl0aGVyIHRoZSBgdHJhbnNwYXJlbnRgIGhpbnQgb3IgdGhlIG90aGVyIGhpbnRzLCBsaWtlIHRoaXM6CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CmBgYAoKQWx0ZXJuYXRpdmVseSwgbW92ZSB0aGUgb3RoZXIgYXR0cmlidXRlcyB0byB0aGUgY29udGFpbmVkIHR5cGU6CgpgYGAKI1tyZXByKEMpXQpzdHJ1Y3QgRm9vIHsKICAgIHg6IGkzMiwKICAgIC8vIC4uLgp9CgojW3JlcHIodHJhbnNwYXJlbnQpXQpzdHJ1Y3QgRm9vV3JhcHBlcihGb28pOwpgYGAKCk5vdGUgdGhhdCBpbnRyb2R1Y2luZyBhbm90aGVyIGBzdHJ1Y3RgIGp1c3QgdG8gaGF2ZSBhIHBsYWNlIGZvciB0aGUgb3RoZXIKYXR0cmlidXRlcyBtYXkgaGF2ZSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvbiB0aGUgcmVwcmVzZW50YXRpb246CgpgYGAKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zKGYzMik7CgojW3JlcHIoQyldCnN0cnVjdCBGbG9hdChmMzIpOwoKI1tyZXByKHRyYW5zcGFyZW50KV0Kc3RydWN0IEdyYW1zMihGbG9hdCk7IC8vIHRoaXMgaXMgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCBhYm92ZQpgYGAKCkhlcmUsIGBHcmFtczJgIGlzIGEgbm90IGVxdWl2YWxlbnQgdG8gYEdyYW1zYCAtLSB0aGUgZm9ybWVyIHRyYW5zcGFyZW50bHkgd3JhcHMKYSAobm9uLXRyYW5zcGFyZW50KSBzdHJ1Y3QgY29udGFpbmluZyBhIHNpbmdsZSBmbG9hdCwgd2hpbGUgYEdyYW1zYCBpcyBhCnRyYW5zcGFyZW50IHdyYXBwZXIgYXJvdW5kIGEgZmxvYXQuIFRoaXMgY2FuIG1ha2UgYSBkaWZmZXJlbmNlIGZvciB0aGUgQUJJLgpFMDY5M2BhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCB3YXMgaW5jb3JyZWN0bHkgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDY5MwojW3JlcHIoYWxpZ249OCldIC8vIGVycm9yIQpzdHJ1Y3QgQWxpZ244KGk4KTsKCiNbcmVwcihhbGlnbj0iOCIpXSAvLyBlcnJvciEKc3RydWN0IEFsaWduOChpOCk7CmBgYAoKVGhpcyBpcyBhIHN5bnRheCBlcnJvciBhdCB0aGUgbGV2ZWwgb2YgYXR0cmlidXRlIGRlY2xhcmF0aW9ucy4gVGhlIHByb3BlcgpzeW50YXggZm9yIGBhbGlnbmAgcmVwcmVzZW50YXRpb24gaGludCBpcyB0aGUgZm9sbG93aW5nOgoKYGBgCiNbcmVwcihhbGlnbig4KSldIC8vIG9rIQpzdHJ1Y3QgQWxpZ244KGk4KTsKYGBgCkUwNjk1QSBgYnJlYWtgIHN0YXRlbWVudCB3aXRob3V0IGEgbGFiZWwgYXBwZWFyZWQgaW5zaWRlIGEgbGFiZWxlZCBibG9jay4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTUKbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrOwogICAgfQp9CmBgYAoKTWFrZSBzdXJlIHRvIGFsd2F5cyBsYWJlbCB0aGUgYGJyZWFrYDoKCmBgYAonbDogbG9vcCB7CiAgICAnYTogewogICAgICAgIGJyZWFrICdsOwogICAgfQp9CmBgYAoKT3IgaWYgeW91IHdhbnQgdG8gYGJyZWFrYCB0aGUgbGFiZWxlZCBibG9jazoKCmBgYApsb29wIHsKICAgICdhOiB7CiAgICAgICAgYnJlYWsgJ2E7CiAgICB9CiAgICBicmVhazsKfQpgYGAKRTA2OTZBIGZ1bmN0aW9uIGlzIHVzaW5nIGBjb250aW51ZWAga2V5d29yZCBpbmNvcnJlY3RseS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA2OTYKZm4gY29udGludWVfc2ltcGxlKCkgewogICAgJ2I6IHsKICAgICAgICBjb250aW51ZTsgLy8gZXJyb3IhCiAgICB9Cn0KZm4gY29udGludWVfbGFiZWxlZCgpIHsKICAgICdiOiB7CiAgICAgICAgY29udGludWUgJ2I7IC8vIGVycm9yIQogICAgfQp9CmZuIGNvbnRpbnVlX2Nyb3NzaW5nKCkgewogICAgbG9vcCB7CiAgICAgICAgJ2I6IHsKICAgICAgICAgICAgY29udGludWU7IC8vIGVycm9yIQogICAgICAgIH0KICAgIH0KfQpgYGAKCkhlcmUgd2UgaGF2ZSB1c2VkIHRoZSBgY29udGludWVgIGtleXdvcmQgaW5jb3JyZWN0bHkuIEFzIHdlCmhhdmUgc2VlbiBhYm92ZSB0aGF0IGBjb250aW51ZWAgcG9pbnRpbmcgdG8gYSBsYWJlbGVkIGJsb2NrLgoKVG8gZml4IHRoaXMgd2UgaGF2ZSB0byB1c2UgdGhlIGxhYmVsZWQgYmxvY2sgcHJvcGVybHkuCkZvciBleGFtcGxlOgoKYGBgCmZuIGNvbnRpbnVlX3NpbXBsZSgpIHsKICAgICdiOiBsb29wIHsKICAgICAgICBjb250aW51ZSA7IC8vIG9rIQogICAgfQp9CmZuIGNvbnRpbnVlX2xhYmVsZWQoKSB7CiAgICAnYjogbG9vcCB7CiAgICAgICAgY29udGludWUgJ2I7IC8vIG9rIQogICAgfQp9CmZuIGNvbnRpbnVlX2Nyb3NzaW5nKCkgewogICAgbG9vcCB7CiAgICAgICAgJ2I6IGxvb3AgewogICAgICAgICAgICBjb250aW51ZTsgLy8gb2shCiAgICAgICAgfQogICAgfQp9CmBgYApFMDY5N0EgY2xvc3VyZSBoYXMgYmVlbiB1c2VkIGFzIGBzdGF0aWNgLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDY5NwpmbiBtYWluKCkgewogICAgc3RhdGljIHx8IHt9OyAvLyB1c2VkIGFzIGBzdGF0aWNgCn0KYGBgCgpDbG9zdXJlcyBjYW5ub3QgYmUgdXNlZCBhcyBgc3RhdGljYC4gVGhleSAic2F2ZSIgdGhlIGVudmlyb25tZW50LAphbmQgYXMgc3VjaCBhIHN0YXRpYyBjbG9zdXJlIHdvdWxkIHNhdmUgb25seSBhIHN0YXRpYyBlbnZpcm9ubWVudAp3aGljaCB3b3VsZCBjb25zaXN0IG9ubHkgb2YgdmFyaWFibGVzIHdpdGggYSBzdGF0aWMgbGlmZXRpbWUuIEdpdmVuCnRoaXMgaXQgd291bGQgYmUgYmV0dGVyIHRvIHVzZSBhIHByb3BlciBmdW5jdGlvbi4gVGhlIGVhc2llc3QgZml4CmlzIHRvIHJlbW92ZSB0aGUgYHN0YXRpY2Aga2V5d29yZC4KRTA2OThXaGVuIHVzaW5nIGdlbmVyYXRvcnMgKG9yIGFzeW5jKSBhbGwgdHlwZSB2YXJpYWJsZXMgbXVzdCBiZSBib3VuZCBzbyBhCmdlbmVyYXRvciBjYW4gYmUgY29uc3RydWN0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNjk4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXIoKS5hd2FpdDsgLy8gZXJyb3I6IGNhbm5vdCBpbmZlciB0eXBlIGZvciBgVGAKfQpgYGAKCkluIHRoZSBhYm92ZSBleGFtcGxlIGBUYCBpcyB1bmtub3dhYmxlIGJ5IHRoZSBjb21waWxlci4KVG8gZml4IHRoaXMgeW91IG11c3QgYmluZCBgVGAgdG8gYSBjb25jcmV0ZSB0eXBlIHN1Y2ggYXMgYFN0cmluZ2AKc28gdGhhdCBhIGdlbmVyYXRvciBjYW4gdGhlbiBiZSBjb25zdHJ1Y3RlZDoKCmBgYGVkaXRpb24yMDE4CmFzeW5jIGZuIGJhcjxUPigpIC0+ICgpIHt9Cgphc3luYyBmbiBmb28oKSB7CiAgICBiYXI6OjxTdHJpbmc+KCkuYXdhaXQ7CiAgICAvLyAgIF5eXl5eXl5eIHNwZWNpZnkgdHlwZSBleHBsaWNpdGx5Cn0KYGBgCkUwNjk5QSBtZXRob2Qgd2FzIGNhbGxlZCBvbiBhIHJhdyBwb2ludGVyIHdob3NlIGlubmVyIHR5cGUgd2Fzbid0IGNvbXBsZXRlbHkga25vd24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4LEUwNjk5CiMgIyFbZGVueSh3YXJuaW5ncyldCiMgZm4gbWFpbigpIHsKbGV0IGZvbyA9ICYxOwpsZXQgYmFyID0gZm9vIGFzICpjb25zdCBfOwppZiBiYXIuaXNfbnVsbCgpIHsKICAgIC8vIC4uLgp9CiMgfQpgYGAKCkhlcmUsIHRoZSB0eXBlIG9mIGBiYXJgIGlzbid0IGtub3duOyBpdCBjb3VsZCBiZSBhIHBvaW50ZXIgdG8gYW55dGhpbmcuIEluc3RlYWQsCnNwZWNpZnkgYSB0eXBlIGZvciB0aGUgcG9pbnRlciAocHJlZmVyYWJseSBzb21ldGhpbmcgdGhhdCBtYWtlcyBzZW5zZSBmb3IgdGhlCnRoaW5nIHlvdSdyZSBwb2ludGluZyB0byk6CgpgYGAKbGV0IGZvbyA9ICYxOwpsZXQgYmFyID0gZm9vIGFzICpjb25zdCBpMzI7CmlmIGJhci5pc19udWxsKCkgewogICAgLy8gLi4uCn0KYGBgCgpFdmVuIHRob3VnaCBgaXNfbnVsbCgpYCBleGlzdHMgYXMgYSBtZXRob2Qgb24gYW55IHJhdyBwb2ludGVyLCBSdXN0IHNob3dzIHRoaXMKZXJyb3IgYmVjYXVzZSAgUnVzdCBhbGxvd3MgZm9yIGBzZWxmYCB0byBoYXZlIGFyYml0cmFyeSB0eXBlcyAoYmVoaW5kIHRoZQphcmJpdHJhcnlfc2VsZl90eXBlcyBmZWF0dXJlIGZsYWcpLgoKVGhpcyBtZWFucyB0aGF0IHNvbWVvbmUgY2FuIHNwZWNpZnkgc3VjaCBhIGZ1bmN0aW9uOgoKYGBgaWdub3JlIChjYW5ub3QtZG9jdGVzdC1mZWF0dXJlLWRvZXNudC1leGlzdC15ZXQpCmltcGwgRm9vIHsKICAgIGZuIGlzX251bGwoc2VsZjogKmNvbnN0IFNlbGYpIC0+IGJvb2wgewogICAgICAgIC8vIGRvIHNvbWV0aGluZyBlbHNlCiAgICB9Cn0KYGBgCgphbmQgbm93IHdoZW4geW91IGNhbGwgYC5pc19udWxsKClgIG9uIGEgcmF3IHBvaW50ZXIgdG8gYEZvb2AsIHRoZXJlJ3MgYW1iaWd1aXR5LgoKR2l2ZW4gdGhhdCB3ZSBkb24ndCBrbm93IHdoYXQgdHlwZSB0aGUgcG9pbnRlciBpcywgYW5kIHRoZXJlJ3MgcG90ZW50aWFsCmFtYmlndWl0eSBmb3Igc29tZSB0eXBlcywgd2UgZGlzYWxsb3cgY2FsbGluZyBtZXRob2RzIG9uIHJhdyBwb2ludGVycyB3aGVuCnRoZSB0eXBlIGlzIHVua25vd24uCkUwNzAwVGhlIGBpbXBsIFRyYWl0YCByZXR1cm4gdHlwZSBjYXB0dXJlcyBsaWZldGltZSBwYXJhbWV0ZXJzIHRoYXQgZG8gbm90CmFwcGVhciB3aXRoaW4gdGhlIGBpbXBsIFRyYWl0YCBpdHNlbGYuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAwCnVzZSBzdGQ6OmNlbGw6OkNlbGw7Cgp0cmFpdCBUcmFpdDwnYT4geyB9CgppbXBsPCdhLCAnYj4gVHJhaXQ8J2I+IGZvciBDZWxsPCYnYSB1MzI+IHsgfQoKZm4gZm9vPCd4LCAneT4oeDogQ2VsbDwmJ3ggdTMyPikgLT4gaW1wbCBUcmFpdDwneT4Kd2hlcmUgJ3g6ICd5CnsKICAgIHgKfQpgYGAKCkhlcmUsIHRoZSBmdW5jdGlvbiBgZm9vYCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBgQ2VsbDwmJ3ggdTMyPmAsCndoaWNoIHJlZmVyZW5jZXMgdGhlIGxpZmV0aW1lIGAneGAuIEhvd2V2ZXIsIHRoZSByZXR1cm4gdHlwZSBpcwpkZWNsYXJlZCBhcyBgaW1wbCBUcmFpdDwneT5gIC0tIHRoaXMgaW5kaWNhdGVzIHRoYXQgYGZvb2AgcmV0dXJucwoic29tZSB0eXBlIHRoYXQgaW1wbGVtZW50cyBgVHJhaXQ8J3k+YCIsIGJ1dCBpdCBhbHNvIGluZGljYXRlcyB0aGF0CnRoZSByZXR1cm4gdHlwZSAqKm9ubHkgY2FwdHVyZXMgZGF0YSByZWZlcmVuY2luZyB0aGUgbGlmZXRpbWUgYCd5YCoqLgpJbiB0aGlzIGNhc2UsIHRob3VnaCwgd2UgYXJlIHJlZmVyZW5jaW5nIGRhdGEgd2l0aCBsaWZldGltZSBgJ3hgLCBzbwp0aGlzIGZ1bmN0aW9uIGlzIGluIGVycm9yLgoKVG8gZml4IHRoaXMsIHlvdSBtdXN0IHJlZmVyZW5jZSB0aGUgbGlmZXRpbWUgYCd4YCBmcm9tIHRoZSByZXR1cm4KdHlwZS4gRm9yIGV4YW1wbGUsIGNoYW5naW5nIHRoZSByZXR1cm4gdHlwZSB0byBgaW1wbCBUcmFpdDwneT4gKyAneGAKd291bGQgd29yazoKCmBgYAp1c2Ugc3RkOjpjZWxsOjpDZWxsOwoKdHJhaXQgVHJhaXQ8J2E+IHsgfQoKaW1wbDwnYSwnYj4gVHJhaXQ8J2I+IGZvciBDZWxsPCYnYSB1MzI+IHsgfQoKZm4gZm9vPCd4LCAneT4oeDogQ2VsbDwmJ3ggdTMyPikgLT4gaW1wbCBUcmFpdDwneT4gKyAneAp3aGVyZSAneDogJ3kKewogICAgeAp9CmBgYApFMDcwMVRoaXMgZXJyb3IgaW5kaWNhdGVzIHRoYXQgYSBgI1tub25fZXhoYXVzdGl2ZV1gIGF0dHJpYnV0ZSB3YXMgaW5jb3JyZWN0bHkgcGxhY2VkCm9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgc3RydWN0IG9yIGVudW0uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAxCiNbbm9uX2V4aGF1c3RpdmVdCnRyYWl0IEZvbyB7IH0KYGBgCkUwNzAzSW52YWxpZCBBQkkgKEFwcGxpY2F0aW9uIEJpbmFyeSBJbnRlcmZhY2UpIHVzZWQgaW4gdGhlIGNvZGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzAzCmV4dGVybiAiaW52YWxpZCIgZm4gZm9vKCkge30gLy8gZXJyb3IhCiMgZm4gbWFpbigpIHt9CmBgYAoKQXQgcHJlc2VudCBmZXcgcHJlZGVmaW5lZCBBQkkncyAobGlrZSBSdXN0LCBDLCBzeXN0ZW0sIGV0Yy4pIGNhbiBiZQp1c2VkIGluIFJ1c3QuIFZlcmlmeSB0aGF0IHRoZSBBQkkgaXMgcHJlZGVmaW5lZC4gRm9yIGV4YW1wbGUgeW91IGNhbgpyZXBsYWNlIHRoZSBnaXZlbiBBQkkgZnJvbSAnUnVzdCcuCgpgYGAKZXh0ZXJuICJSdXN0IiBmbiBmb28oKSB7fSAvLyBvayEKIyBmbiBtYWluKCkgeyB9CmBgYApFMDcwNEFuIGluY29ycmVjdCB2aXNpYmlsaXR5IHJlc3RyaWN0aW9uIHdhcyBzcGVjaWZpZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzA0Cm1vZCBmb28gewogICAgcHViKGZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KYGBgCgpUbyBtYWtlIHN0cnVjdCBgQmFyYCBvbmx5IHZpc2libGUgaW4gbW9kdWxlIGBmb29gIHRoZSBgaW5gIGtleXdvcmQgc2hvdWxkIGJlCnVzZWQ6CgpgYGAKbW9kIGZvbyB7CiAgICBwdWIoaW4gY3JhdGU6OmZvbykgc3RydWN0IEJhciB7CiAgICAgICAgeDogaTMyCiAgICB9Cn0KIyBmbiBtYWluKCkge30KYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiBzZWUgdGhlIFJ1c3QgUmVmZXJlbmNlIG9uIFtWaXNpYmlsaXR5XS4KCltWaXNpYmlsaXR5XTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdmlzaWJpbGl0eS1hbmQtcHJpdmFjeS5odG1sCkUwNzA1QSBgIyFbZmVhdHVyZV1gIGF0dHJpYnV0ZSB3YXMgZGVjbGFyZWQgZm9yIGEgZmVhdHVyZSB0aGF0IGlzIHN0YWJsZSBpbiB0aGUKY3VycmVudCBlZGl0aW9uLCBidXQgbm90IGluIGFsbCBlZGl0aW9ucy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBydXN0MjAxOCxjb21waWxlX2ZhaWwsRTA3MDUKIyFbZmVhdHVyZShydXN0XzIwMThfcHJldmlldyldCiMhW2ZlYXR1cmUodGVzdF8yMDE4X2ZlYXR1cmUpXSAvLyBlcnJvcjogdGhlIGZlYXR1cmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGB0ZXN0XzIwMThfZmVhdHVyZWAgaXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGluY2x1ZGVkIGluIHRoZSBSdXN0IDIwMTggZWRpdGlvbgpgYGAKRTA3MDZgYXN5bmMgZm5gcyBhcmUgbm90IHlldCBzdXBwb3J0ZWQgaW4gdHJhaXRzIGluIFJ1c3QuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLGVkaXRpb24yMDE4CnRyYWl0IFQgewogICAgLy8gTmVpdGhlciBjYXNlIGlzIGN1cnJlbnRseSBzdXBwb3J0ZWQuCiAgICBhc3luYyBmbiBmb28oKSB7fQogICAgYXN5bmMgZm4gYmFyKCZzZWxmKSB7fQp9CmBgYAoKYGFzeW5jIGZuYHMgcmV0dXJuIGFuIGBpbXBsIEZ1dHVyZWAsIG1ha2luZyB0aGUgZm9sbG93aW5nIHR3byBleGFtcGxlcwplcXVpdmFsZW50OgoKYGBgZWRpdGlvbjIwMTgsaWdub3JlIChleGFtcGxlLW9mLWRlc3VnYXJpbmctZXF1aXZhbGVuY2UpCmFzeW5jIGZuIGZvbygpIC0+IFVzZXIgewogICAgdW5pbXBsZW1lbnRlZCEoKQp9Ci8vIFRoZSBhc3luYyBmbiBhYm92ZSBnZXRzIGRlc3VnYXJlZCBhcyBmb2xsb3dzOgpmbiBmb28oJnNlbGYpIC0+IGltcGwgRnV0dXJlPE91dHB1dCA9IFVzZXI+ICsgJ18gewogICAgdW5pbXBsZW1lbnRlZCEoKQp9CmBgYAoKQnV0IHdoZW4gaXQgY29tZXMgdG8gc3VwcG9ydGluZyB0aGlzIGluIHRyYWl0cywgdGhlcmUgYXJlIFthIGZldyBpbXBsZW1lbnRhdGlvbgppc3N1ZXNdW2FzeW5jLWlzLWhhcmRdLiBPbmUgb2YgdGhlbSBpcyByZXR1cm5pbmcgYGltcGwgVHJhaXRgIGluIHRyYWl0cyBpcyBub3QKc3VwcG9ydGVkLCBhcyBpdCB3b3VsZCByZXF1aXJlIFtHZW5lcmljIEFzc29jaWF0ZWQgVHlwZXNdIHRvIGJlIHN1cHBvcnRlZDoKCmBgYGVkaXRpb24yMDE4LGlnbm9yZSAoZXhhbXBsZS1vZi1kZXN1Z2FyaW5nLWVxdWl2YWxlbmNlKQppbXBsIE15RGF0YWJhc2UgewogICAgYXN5bmMgZm4gZ2V0X3VzZXIoJnNlbGYpIC0+IFVzZXIgewogICAgICAgIHVuaW1wbGVtZW50ZWQhKCkKICAgIH0KfQoKaW1wbCBNeURhdGFiYXNlIHsKICAgIGZuIGdldF91c2VyKCZzZWxmKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSBVc2VyPiArICdfIHsKICAgICAgICB1bmltcGxlbWVudGVkISgpCiAgICB9Cn0KYGBgCgpVbnRpbCB0aGVzZSBpc3N1ZXMgYXJlIHJlc29sdmVkLCB5b3UgY2FuIHVzZSB0aGUgW2Bhc3luYy10cmFpdGAgY3JhdGVdLCBhbGxvd2luZwp5b3UgdG8gdXNlIGBhc3luYyBmbmAgaW4gdHJhaXRzIGJ5IGRlc3VnYXJpbmcgdG8gImJveGVkIGZ1dHVyZXMiCihgUGluPEJveDxkeW4gRnV0dXJlICsgU2VuZCArICdhc3luYz4+YCkuCgpOb3RlIHRoYXQgdXNpbmcgdGhlc2UgdHJhaXQgbWV0aG9kcyB3aWxsIHJlc3VsdCBpbiBhIGhlYXAgYWxsb2NhdGlvbgpwZXItZnVuY3Rpb24tY2FsbC4gVGhpcyBpcyBub3QgYSBzaWduaWZpY2FudCBjb3N0IGZvciB0aGUgdmFzdCBtYWpvcml0eSBvZgphcHBsaWNhdGlvbnMsIGJ1dCBzaG91bGQgYmUgY29uc2lkZXJlZCB3aGVuIGRlY2lkaW5nIHdoZXRoZXIgdG8gdXNlIHRoaXMKZnVuY3Rpb25hbGl0eSBpbiB0aGUgcHVibGljIEFQSSBvZiBhIGxvdy1sZXZlbCBmdW5jdGlvbiB0aGF0IGlzIGV4cGVjdGVkIHRvIGJlCmNhbGxlZCBtaWxsaW9ucyBvZiB0aW1lcyBhIHNlY29uZC4KCllvdSBtaWdodCBiZSBpbnRlcmVzdGVkIGluIHZpc2l0aW5nIHRoZSBbYXN5bmMgYm9va10gZm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24uCgpbYGFzeW5jLXRyYWl0YCBjcmF0ZV06IGh0dHBzOi8vY3JhdGVzLmlvL2NyYXRlcy9hc3luYy10cmFpdApbYXN5bmMtaXMtaGFyZF06IGh0dHBzOi8vc21hbGxjdWx0Zm9sbG93aW5nLmNvbS9iYWJ5c3RlcHMvYmxvZy8yMDE5LzEwLzI2L2FzeW5jLWZuLWluLXRyYWl0cy1hcmUtaGFyZC8KW0dlbmVyaWMgQXNzb2NpYXRlZCBUeXBlc106IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNDQyNjUKW2FzeW5jIGJvb2tdOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vYXN5bmMtYm9vay8wN193b3JrYXJvdW5kcy8wNV9hc3luY19pbl90cmFpdHMuaHRtbApFMDcwOGBhc3luY2Agbm9uLWBtb3ZlYCBjbG9zdXJlcyB3aXRoIHBhcmFtZXRlcnMgYXJlIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOCxFMDcwOAojIVtmZWF0dXJlKGFzeW5jX2Nsb3N1cmUpXQoKZm4gbWFpbigpIHsKICAgIGxldCBhZGRfb25lID0gYXN5bmMgfG51bTogdTh8IHsgLy8gZXJyb3IhCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKCmBhc3luY2Agd2l0aCBub24tbW92ZSBpcyBjdXJyZW50bHkgbm90IHN1cHBvcnRlZCB3aXRoIHRoZSBjdXJyZW50CnZlcnNpb24sIHlvdSBjYW4gdXNlIHN1Y2Nlc3NmdWxseSBieSB1c2luZyBtb3ZlOgoKYGBgZWRpdGlvbjIwMTgKIyFbZmVhdHVyZShhc3luY19jbG9zdXJlKV0KCmZuIG1haW4oKSB7CiAgICBsZXQgYWRkX29uZSA9IGFzeW5jIG1vdmUgfG51bTogdTh8IHsgLy8gb2shCiAgICAgICAgbnVtICsgMQogICAgfTsKfQpgYGAKRTA3MTBBbiB1bmtub3duIHRvb2wgbmFtZSB3YXMgZm91bmQgaW4gYSBzY29wZWQgbGludC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGVzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzEwCiNbYWxsb3coY2xpcHA6OmZpbHRlcl9tYXApXSAvLyBlcnJvciFgCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKYGBgY29tcGlsZV9mYWlsLEUwNzEwCiNbd2FybihjbGlwcDo6ZmlsdGVyX21hcCldIC8vIGVycm9yIWAKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCgpQbGVhc2UgdmVyaWZ5IHlvdSBkaWRuJ3QgbWlzc3BlbGwgdGhlIHRvb2wncyBuYW1lIG9yIHRoYXQgeW91IGRpZG4ndApmb3JnZXQgdG8gaW1wb3J0IGl0IGluIHlvdSBwcm9qZWN0OgoKYGBgCiNbYWxsb3coY2xpcHB5OjpmaWx0ZXJfbWFwKV0gLy8gb2shCmZuIG1haW4oKSB7CiAgICAvLyBidXNpbmVzcyBsb2dpYwp9CmBgYAoKYGBgCiNbd2FybihjbGlwcHk6OmZpbHRlcl9tYXApXSAvLyBvayEKZm4gbWFpbigpIHsKICAgIC8vIGJ1c2luZXNzIGxvZ2ljCn0KYGBgCkUwNzEyQSBib3Jyb3cgb2YgYSB0aHJlYWQtbG9jYWwgdmFyaWFibGUgd2FzIG1hZGUgaW5zaWRlIGEgZnVuY3Rpb24gd2hpY2ggb3V0bGl2ZWQKdGhlIGxpZmV0aW1lIG9mIHRoZSBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MTIKIyFbZmVhdHVyZSh0aHJlYWRfbG9jYWwpXQoKI1t0aHJlYWRfbG9jYWxdCnN0YXRpYyBGT086IHU4ID0gMzsKCmZuIG1haW4oKSB7CiAgICBsZXQgYSA9ICZGT087IC8vIGVycm9yOiB0aHJlYWQtbG9jYWwgdmFyaWFibGUgYm9ycm93ZWQgcGFzdCBlbmQgb2YgZnVuY3Rpb24KCiAgICBzdGQ6OnRocmVhZDo6c3Bhd24obW92ZSB8fCB7CiAgICAgICAgcHJpbnRsbiEoInt9IiwgYSk7CiAgICB9KTsKfQpgYGAKRTA3MTNUaGlzIGVycm9yIG9jY3VycyB3aGVuIGFuIGF0dGVtcHQgaXMgbWFkZSB0byBib3Jyb3cgc3RhdGUgcGFzdCB0aGUgZW5kIG9mIHRoZQpsaWZldGltZSBvZiBhIHR5cGUgdGhhdCBpbXBsZW1lbnRzIHRoZSBgRHJvcGAgdHJhaXQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzEzCnB1YiBzdHJ1Y3QgUzwnYT4geyBkYXRhOiAmJ2EgbXV0IFN0cmluZyB9CgppbXBsPCdhPiBEcm9wIGZvciBTPCdhPiB7CiAgICBmbiBkcm9wKCZtdXQgc2VsZikgeyBzZWxmLmRhdGEucHVzaF9zdHIoImJlaW5nIGRyb3BwZWQiKTsgfQp9CgpmbiBkZW1vPCdhPihzOiBTPCdhPikgLT4gJidhIG11dCBTdHJpbmcgeyBsZXQgcCA9ICZtdXQgKnMuZGF0YTsgcCB9CmBgYAoKSGVyZSwgYGRlbW9gIHRyaWVzIHRvIGJvcnJvdyB0aGUgc3RyaW5nIGRhdGEgaGVsZCB3aXRoaW4gaXRzCmFyZ3VtZW50IGBzYCBhbmQgdGhlbiByZXR1cm4gdGhhdCBib3Jyb3cuIEhvd2V2ZXIsIGBTYCBpcwpkZWNsYXJlZCBhcyBpbXBsZW1lbnRpbmcgYERyb3BgLgoKU3RydWN0cyBpbXBsZW1lbnRpbmcgdGhlIGBEcm9wYCB0cmFpdCBoYXZlIGFuIGltcGxpY2l0IGRlc3RydWN0b3IgdGhhdApnZXRzIGNhbGxlZCB3aGVuIHRoZXkgZ28gb3V0IG9mIHNjb3BlLiBUaGlzIGRlc3RydWN0b3IgZ2V0cyBleGNsdXNpdmUKYWNjZXNzIHRvIHRoZSBmaWVsZHMgb2YgdGhlIHN0cnVjdCB3aGVuIGl0IHJ1bnMuCgpUaGlzIG1lYW5zIHRoYXQgd2hlbiBgc2AgcmVhY2hlcyB0aGUgZW5kIG9mIGBkZW1vYCwgaXRzIGRlc3RydWN0b3IKZ2V0cyBleGNsdXNpdmUgYWNjZXNzIHRvIGl0cyBgJm11dGAtYm9ycm93ZWQgc3RyaW5nIGRhdGEuICBhbGxvd2luZwphbm90aGVyIGJvcnJvdyBvZiB0aGF0IHN0cmluZyBkYXRhIChgcGApLCB0byBleGlzdCBhY3Jvc3MgdGhlIGRyb3Agb2YKYHNgIHdvdWxkIGJlIGEgdmlvbGF0aW9uIG9mIHRoZSBwcmluY2lwbGUgdGhhdCBgJm11dGAtYm9ycm93cyBoYXZlCmV4Y2x1c2l2ZSwgdW5hbGlhc2VkIGFjY2VzcyB0byB0aGVpciByZWZlcmVuY2VkIGRhdGEuCgpUaGlzIGVycm9yIGNhbiBiZSBmaXhlZCBieSBjaGFuZ2luZyBgZGVtb2Agc28gdGhhdCB0aGUgZGVzdHJ1Y3RvciBkb2VzCm5vdCBydW4gd2hpbGUgdGhlIHN0cmluZy1kYXRhIGlzIGJvcnJvd2VkOyBmb3IgZXhhbXBsZSBieSB0YWtpbmcgYFNgCmJ5IHJlZmVyZW5jZToKCmBgYApwdWIgc3RydWN0IFM8J2E+IHsgZGF0YTogJidhIG11dCBTdHJpbmcgfQoKaW1wbDwnYT4gRHJvcCBmb3IgUzwnYT4gewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgc2VsZi5kYXRhLnB1c2hfc3RyKCJiZWluZyBkcm9wcGVkIik7IH0KfQoKZm4gZGVtbzwnYT4oczogJidhIG11dCBTPCdhPikgLT4gJidhIG11dCBTdHJpbmcgeyBsZXQgcCA9ICZtdXQgKigqcykuZGF0YTsgcCB9CmBgYAoKTm90ZSB0aGF0IHRoaXMgYXBwcm9hY2ggbmVlZHMgYSByZWZlcmVuY2UgdG8gUyB3aXRoIGxpZmV0aW1lIGAnYWAuCk5vdGhpbmcgc2hvcnRlciB0aGFuIGAnYWAgd2lsbCBzdWZmaWNlOiBhIHNob3J0ZXIgbGlmZXRpbWUgd291bGQgaW1wbHkKdGhhdCBhZnRlciBgZGVtb2AgZmluaXNoZXMgZXhlY3V0aW5nLCBzb21ldGhpbmcgZWxzZSAoc3VjaCBhcyB0aGUKZGVzdHJ1Y3RvciEpIGNvdWxkIGFjY2VzcyBgcy5kYXRhYCBhZnRlciB0aGUgZW5kIG9mIHRoYXQgc2hvcnRlcgpsaWZldGltZSwgd2hpY2ggd291bGQgYWdhaW4gdmlvbGF0ZSB0aGUgYCZtdXRgLWJvcnJvdydzIGV4Y2x1c2l2ZQphY2Nlc3MuCkUwNzE0QSBgI1ttYXJrZXJdYCB0cmFpdCBjb250YWluZWQgYW4gYXNzb2NpYXRlZCBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxNAojIVtmZWF0dXJlKG1hcmtlcl90cmFpdF9hdHRyKV0KIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfZGVmYXVsdHMpXQoKI1ttYXJrZXJdCnRyYWl0IE1hcmtlckNvbnN0IHsKICAgIGNvbnN0IE46IHVzaXplOyAvLyBlcnJvciEKfQoKZm4gbWFpbigpIHt9CmBgYAoKVGhlIGl0ZW1zIG9mIG1hcmtlciB0cmFpdHMgY2Fubm90IGJlIG92ZXJyaWRkZW4sIHNvIHRoZXJlJ3Mgbm8gbmVlZCB0byBoYXZlIHRoZW0Kd2hlbiB0aGV5IGNhbm5vdCBiZSBjaGFuZ2VkIHBlci10eXBlIGFueXdheS4gIElmIHlvdSB3YW50ZWQgdGhlbSBmb3IgZXJnb25vbWljCnJlYXNvbnMsIGNvbnNpZGVyIG1ha2luZyBhbiBleHRlbnNpb24gdHJhaXQgaW5zdGVhZC4KRTA3MTVBbiBgaW1wbGAgZm9yIGEgYCNbbWFya2VyXWAgdHJhaXQgdHJpZWQgdG8gb3ZlcnJpZGUgYW4gYXNzb2NpYXRlZCBpdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxNQojIVtmZWF0dXJlKG1hcmtlcl90cmFpdF9hdHRyKV0KCiNbbWFya2VyXQp0cmFpdCBNYXJrZXIgewogICAgY29uc3QgTjogdXNpemUgPSAwOwogICAgZm4gZG9fc29tZXRoaW5nKCkge30KfQoKc3RydWN0IE92ZXJyaWRlQ29uc3Q7CmltcGwgTWFya2VyIGZvciBPdmVycmlkZUNvbnN0IHsgLy8gZXJyb3IhCiAgICBjb25zdCBOOiB1c2l6ZSA9IDE7Cn0KIyBmbiBtYWluKCkge30KYGBgCgpCZWNhdXNlIG1hcmtlciB0cmFpdHMgYXJlIGFsbG93ZWQgdG8gaGF2ZSBtdWx0aXBsZSBpbXBsZW1lbnRhdGlvbnMgZm9yIHRoZSBzYW1lCnR5cGUsIGl0J3Mgbm90IGFsbG93ZWQgdG8gb3ZlcnJpZGUgYW55dGhpbmcgaW4gdGhvc2UgaW1wbGVtZW50YXRpb25zLCBhcyBpdAp3b3VsZCBiZSBhbWJpZ3VvdXMgd2hpY2ggb3ZlcnJpZGUgc2hvdWxkIGFjdHVhbGx5IGJlIHVzZWQuCkUwNzE2QSB0ZW1wb3JhcnkgdmFsdWUgaXMgYmVpbmcgZHJvcHBlZCB3aGlsZSBhIGJvcnJvdyBpcyBzdGlsbCBpbiBhY3RpdmUgdXNlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxNgpmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCBwID0gYmFyKCZmb28oKSk7CiAgICAgICAgIC8vIC0tLS0tLSBjcmVhdGVzIGEgdGVtcG9yYXJ5CmxldCBxID0gKnA7CmBgYAoKSGVyZSwgdGhlIGV4cHJlc3Npb24gYCZmb28oKWAgaXMgYm9ycm93aW5nIHRoZSBleHByZXNzaW9uIGBmb28oKWAuIEFzIGBmb28oKWAgaXMKYSBjYWxsIHRvIGEgZnVuY3Rpb24sIGFuZCBub3QgdGhlIG5hbWUgb2YgYSB2YXJpYWJsZSwgdGhpcyBjcmVhdGVzIGEKKip0ZW1wb3JhcnkqKiAtLSB0aGF0IHRlbXBvcmFyeSBzdG9yZXMgdGhlIHJldHVybiB2YWx1ZSBmcm9tIGBmb28oKWAgc28gdGhhdCBpdApjYW4gYmUgYm9ycm93ZWQuIFlvdSBjb3VsZCBpbWFnaW5lIHRoYXQgYGxldCBwID0gYmFyKCZmb28oKSk7YCBpcyBlcXVpdmFsZW50IHRvCnRoZSBmb2xsb3dpbmcsIHdoaWNoIHVzZXMgYW4gZXhwbGljaXQgdGVtcG9yYXJ5IHZhcmlhYmxlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDU5NwojIGZuIGZvbygpIC0+IGkzMiB7IDIyIH0KIyBmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgcCA9IHsKICBsZXQgdG1wID0gZm9vKCk7IC8vIHRoZSB0ZW1wb3JhcnkKICBiYXIoJnRtcCkgLy8gZXJyb3I6IGB0bXBgIGRvZXMgbm90IGxpdmUgbG9uZyBlbm91Z2gKfTsgLy8gPC0tIHRtcCBpcyBmcmVlZCBhcyB3ZSBleGl0IHRoaXMgYmxvY2sKbGV0IHEgPSBwOwpgYGAKCldoZW5ldmVyIGEgdGVtcG9yYXJ5IGlzIGNyZWF0ZWQsIGl0IGlzIGF1dG9tYXRpY2FsbHkgZHJvcHBlZCAoZnJlZWQpIGFjY29yZGluZwp0byBmaXhlZCBydWxlcy4gT3JkaW5hcmlseSwgdGhlIHRlbXBvcmFyeSBpcyBkcm9wcGVkIGF0IHRoZSBlbmQgb2YgdGhlIGVuY2xvc2luZwpzdGF0ZW1lbnQgLS0gaW4gdGhpcyBjYXNlLCBhZnRlciB0aGUgYGxldGAuIFRoaXMgaXMgaWxsdXN0cmF0ZWQgaW4gdGhlIGV4YW1wbGUKYWJvdmUgYnkgc2hvd2luZyB0aGF0IGB0bXBgIHdvdWxkIGJlIGZyZWVkIGFzIHdlIGV4aXQgdGhlIGJsb2NrLgoKVG8gZml4IHRoaXMgcHJvYmxlbSwgeW91IG5lZWQgdG8gY3JlYXRlIGEgbG9jYWwgdmFyaWFibGUgdG8gc3RvcmUgdGhlIHZhbHVlIGluCnJhdGhlciB0aGFuIHJlbHlpbmcgb24gYSB0ZW1wb3JhcnkuIEZvciBleGFtcGxlLCB5b3UgbWlnaHQgY2hhbmdlIHRoZSBvcmlnaW5hbApwcm9ncmFtIHRvIHRoZSBmb2xsb3dpbmc6CgpgYGAKZm4gZm9vKCkgLT4gaTMyIHsgMjIgfQpmbiBiYXIoeDogJmkzMikgLT4gJmkzMiB7IHggfQpsZXQgdmFsdWUgPSBmb28oKTsgLy8gZHJvcHBlZCBhdCB0aGUgZW5kIG9mIHRoZSBlbmNsb3NpbmcgYmxvY2sKbGV0IHAgPSBiYXIoJnZhbHVlKTsKbGV0IHEgPSAqcDsKYGBgCgpCeSBpbnRyb2R1Y2luZyB0aGUgZXhwbGljaXQgYGxldCB2YWx1ZWAsIHdlIGFsbG9jYXRlIHN0b3JhZ2UgdGhhdCB3aWxsIGxhc3QKdW50aWwgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIGJsb2NrICh3aGVuIGB2YWx1ZWAgZ29lcyBvdXQgb2Ygc2NvcGUpLiBXaGVuIHdlCmJvcnJvdyBgJnZhbHVlYCwgd2UgYXJlIGJvcnJvd2luZyBhIGxvY2FsIHZhcmlhYmxlIHRoYXQgYWxyZWFkeSBleGlzdHMsIGFuZApoZW5jZSBubyB0ZW1wb3JhcnkgaXMgY3JlYXRlZC4KClRlbXBvcmFyaWVzIGFyZSBub3QgYWx3YXlzIGRyb3BwZWQgYXQgdGhlIGVuZCBvZiB0aGUgZW5jbG9zaW5nIHN0YXRlbWVudC4gSW4Kc2ltcGxlIGNhc2VzIHdoZXJlIHRoZSBgJmAgZXhwcmVzc2lvbiBpcyBpbW1lZGlhdGVseSBzdG9yZWQgaW50byBhIHZhcmlhYmxlLCB0aGUKY29tcGlsZXIgd2lsbCBhdXRvbWF0aWNhbGx5IGV4dGVuZCB0aGUgbGlmZXRpbWUgb2YgdGhlIHRlbXBvcmFyeSB1bnRpbCB0aGUgZW5kCm9mIHRoZSBlbmNsb3NpbmcgYmxvY2suIFRoZXJlZm9yZSwgYW4gYWx0ZXJuYXRpdmUgd2F5IHRvIGZpeCB0aGUgb3JpZ2luYWwKcHJvZ3JhbSBpcyB0byB3cml0ZSBgbGV0IHRtcCA9ICZmb28oKWAgYW5kIG5vdCBgbGV0IHRtcCA9IGZvbygpYDoKCmBgYApmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmZuIGJhcih4OiAmaTMyKSAtPiAmaTMyIHsgeCB9CmxldCB2YWx1ZSA9ICZmb28oKTsKbGV0IHAgPSBiYXIodmFsdWUpOwpsZXQgcSA9ICpwOwpgYGAKCkhlcmUsIHdlIGFyZSBzdGlsbCBib3Jyb3dpbmcgYGZvbygpYCwgYnV0IGFzIHRoZSBib3Jyb3cgaXMgYXNzaWduZWQgZGlyZWN0bHkKaW50byBhIHZhcmlhYmxlLCB0aGUgdGVtcG9yYXJ5IHdpbGwgbm90IGJlIGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKZW5jbG9zaW5nIGJsb2NrLiBTaW1pbGFyIHJ1bGVzIGFwcGx5IHdoZW4gdGVtcG9yYXJpZXMgYXJlIHN0b3JlZCBpbnRvIGFnZ3JlZ2F0ZQpzdHJ1Y3R1cmVzIGxpa2UgYSB0dXBsZSBvciBzdHJ1Y3Q6CgpgYGAKLy8gSGVyZSwgdHdvIHRlbXBvcmFyaWVzIGFyZSBjcmVhdGVkLCBidXQKLy8gYXMgdGhleSBhcmUgc3RvcmVkIGRpcmVjdGx5IGludG8gYHZhbHVlYCwKLy8gdGhleSBhcmUgbm90IGRyb3BwZWQgdW50aWwgdGhlIGVuZCBvZiB0aGUKLy8gZW5jbG9zaW5nIGJsb2NrLgpmbiBmb28oKSAtPiBpMzIgeyAyMiB9CmxldCB2YWx1ZSA9ICgmZm9vKCksICZmb28oKSk7CmBgYApFMDcxOEEgYCNbbGFuZyA9ICIuLiJdYCBhdHRyaWJ1dGUgd2FzIHBsYWNlZCBvbiB0aGUgd3JvbmcgaXRlbSB0eXBlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcxOAojIVtmZWF0dXJlKGxhbmdfaXRlbXMpXQoKI1tsYW5nID0gIm93bmVkX2JveCJdCnN0YXRpYyBYOiB1MzIgPSA0MjsKYGBgCkUwNzE5QW4gYXNzb2NpYXRlZCB0eXBlIHZhbHVlIHdhcyBzcGVjaWZpZWQgbW9yZSB0aGFuIG9uY2UuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzE5CiMhW2ZlYXR1cmUoYXNzb2NpYXRlZF90eXBlX2JvdW5kcyldCgp0cmFpdCBGb29UcmFpdCB7fQp0cmFpdCBCYXJUcmFpdCB7fQoKLy8gZXJyb3I6IGFzc29jaWF0ZWQgdHlwZSBgSXRlbWAgaW4gdHJhaXQgYEl0ZXJhdG9yYCBpcyBzcGVjaWZpZWQgdHdpY2UKc3RydWN0IEZvbzxUOiBJdGVyYXRvcjxJdGVtOiBGb29UcmFpdCwgSXRlbTogQmFyVHJhaXQ+PiB7IGY6IFQgfQpgYGAKCmBJdGVtYCBpbiB0cmFpdCBgSXRlcmF0b3JgIGNhbm5vdCBiZSBzcGVjaWZpZWQgbXVsdGlwbGUgdGltZXMgZm9yIHN0cnVjdCBgRm9vYC4KVG8gZml4IHRoaXMsIGNyZWF0ZSBhIG5ldyB0cmFpdCB0aGF0IGlzIGEgY29tYmluYXRpb24gb2YgdGhlIGRlc2lyZWQgdHJhaXRzIGFuZApzcGVjaWZ5IHRoZSBhc3NvY2lhdGVkIHR5cGUgd2l0aCB0aGUgbmV3IHRyYWl0LgoKQ29ycmVjdGVkIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShhc3NvY2lhdGVkX3R5cGVfYm91bmRzKV0KCnRyYWl0IEZvb1RyYWl0IHt9CnRyYWl0IEJhclRyYWl0IHt9CnRyYWl0IEZvb0JhclRyYWl0OiBGb29UcmFpdCArIEJhclRyYWl0IHt9CgpzdHJ1Y3QgRm9vPFQ6IEl0ZXJhdG9yPEl0ZW06IEZvb0JhclRyYWl0Pj4geyBmOiBUIH0gLy8gb2shCmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYXNzb2NpYXRlZCB0eXBlcywgc2VlIFt0aGUgYm9va11bYmstYXRdLiBGb3IgbW9yZQppbmZvcm1hdGlvbiBvbiBhc3NvY2lhdGVkIHR5cGUgYm91bmRzLCBzZWUgW1JGQyAyMjg5XVtyZmMtMjI4OV0uCgpbYmstYXRdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxOS0wMy1hZHZhbmNlZC10cmFpdHMuaHRtbCNzcGVjaWZ5aW5nLXBsYWNlaG9sZGVyLXR5cGVzLWluLXRyYWl0LWRlZmluaXRpb25zLXdpdGgtYXNzb2NpYXRlZC10eXBlcwpbcmZjLTIyODldOiBodHRwczovL3J1c3QtbGFuZy5naXRodWIuaW8vcmZjcy8yMjg5LWFzc29jaWF0ZWQtdHlwZS1ib3VuZHMuaHRtbApFMDcyMEFuIGBpbXBsIFRyYWl0YCB0eXBlIGV4cGFuZHMgdG8gYSByZWN1cnNpdmUgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MjAKZm4gbWFrZV9yZWN1cnNpdmVfdHlwZSgpIC0+IGltcGwgU2l6ZWQgewogICAgW21ha2VfcmVjdXJzaXZlX3R5cGUoKSwgbWFrZV9yZWN1cnNpdmVfdHlwZSgpXQp9CmBgYAoKQW4gYGltcGwgVHJhaXRgIHR5cGUgbXVzdCBiZSBleHBhbmRhYmxlIHRvIGEgY29uY3JldGUgdHlwZSB0aGF0IGNvbnRhaW5zIG5vCmBpbXBsIFRyYWl0YCB0eXBlcy4gRm9yIGV4YW1wbGUgdGhlIHByZXZpb3VzIGV4YW1wbGUgdHJpZXMgdG8gY3JlYXRlIGFuCmBpbXBsIFRyYWl0YCB0eXBlIGBUYCB0aGF0IGlzIGVxdWFsIHRvIGBbVCwgVF1gLgpFMDcyMlRoZSBgb3B0aW1pemVgIGF0dHJpYnV0ZSB3YXMgbWFsZm9ybWVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDcyMgojIVtmZWF0dXJlKG9wdGltaXplX2F0dHJpYnV0ZSldCgojW29wdGltaXplKHNvbWV0aGluZyldIC8vIGVycm9yOiBpbnZhbGlkIGFyZ3VtZW50CnB1YiBmbiBzb21ldGhpbmcoKSB7fQpgYGAKClRoZSBgI1tvcHRpbWl6ZV1gIGF0dHJpYnV0ZSBzaG91bGQgYmUgdXNlZCBhcyBmb2xsb3dzOgoKLSBgI1tvcHRpbWl6ZShzaXplKV1gIC0tIGluc3RydWN0cyB0aGUgb3B0aW1pemF0aW9uIHBpcGVsaW5lIHRvIGdlbmVyYXRlIGNvZGUKICB0aGF0J3Mgc21hbGxlciByYXRoZXIgdGhhbiBmYXN0ZXIKCi0gYCNbb3B0aW1pemUoc3BlZWQpXWAgLS0gaW5zdHJ1Y3RzIHRoZSBvcHRpbWl6YXRpb24gcGlwZWxpbmUgdG8gZ2VuZXJhdGUgY29kZQogIHRoYXQncyBmYXN0ZXIgcmF0aGVyIHRoYW4gc21hbGxlcgoKRm9yIGV4YW1wbGU6CgpgYGAKIyFbZmVhdHVyZShvcHRpbWl6ZV9hdHRyaWJ1dGUpXQoKI1tvcHRpbWl6ZShzaXplKV0KcHViIGZuIHNvbWV0aGluZygpIHt9CmBgYAoKU2VlIFtSRkMgMjQxMl0gZm9yIG1vcmUgZGV0YWlscy4KCltSRkMgMjQxMl06IGh0dHBzOi8vcnVzdC1sYW5nLmdpdGh1Yi5pby9yZmNzLzI0MTItb3B0aW1pemUtYXR0ci5odG1sCkUwNzI0YCNbZmZpX3JldHVybnNfdHdpY2VdYCB3YXMgdXNlZCBvbiBzb21ldGhpbmcgb3RoZXIgdGhhbiBhIGZvcmVpZ24gZnVuY3Rpb24KZGVjbGFyYXRpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzI0CiMhW2ZlYXR1cmUoZmZpX3JldHVybnNfdHdpY2UpXQojIVtjcmF0ZV90eXBlID0gImxpYiJdCgojW2ZmaV9yZXR1cm5zX3R3aWNlXSAvLyBlcnJvciEKcHViIGZuIGZvbygpIHt9CmBgYAoKYCNbZmZpX3JldHVybnNfdHdpY2VdYCBjYW4gb25seSBiZSB1c2VkIG9uIGZvcmVpZ24gZnVuY3Rpb24gZGVjbGFyYXRpb25zLgpGb3IgZXhhbXBsZSwgd2UgbWlnaHQgY29ycmVjdCB0aGUgcHJldmlvdXMgZXhhbXBsZSBieSBkZWNsYXJpbmcKdGhlIGZ1bmN0aW9uIGluc2lkZSBvZiBhbsKgYGV4dGVybmDCoGJsb2NrLgoKYGBgCiMhW2ZlYXR1cmUoZmZpX3JldHVybnNfdHdpY2UpXQoKZXh0ZXJuICJDIiB7CiAgICNbZmZpX3JldHVybnNfdHdpY2VdIC8vIG9rIQogICBwdWIgZm4gZm9vKCk7Cn0KYGBgCkUwNzI1QSBmZWF0dXJlIGF0dHJpYnV0ZSBuYW1lZCBhIGZlYXR1cmUgdGhhdCB3YXMgZGlzYWxsb3dlZCBpbiB0aGUgY29tcGlsZXIKY29tbWFuZCBsaW5lIGZsYWdzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGlnbm9yZSAoY2FuJ3Qgc3BlY2lmeSBjb21waWxlciBmbGFncyBmcm9tIGRvY3Rlc3RzKQojIVtmZWF0dXJlKG5ldmVyX3R5cGUpXSAvLyBlcnJvcjogdGhlIGZlYXR1cmUgYG5ldmVyX3R5cGVgIGlzIG5vdCBpbgogICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGUgbGlzdCBvZiBhbGxvd2VkIGZlYXR1cmVzCmBgYAoKRGVsZXRlIHRoZSBvZmZlbmRpbmcgZmVhdHVyZSBhdHRyaWJ1dGUsIG9yIGFkZCBpdCB0byB0aGUgbGlzdCBvZiBhbGxvd2VkCmZlYXR1cmVzIGluIHRoZSBgLVogYWxsb3dfZmVhdHVyZXNgIGZsYWcuCkUwNzI2QW4gYXJndW1lbnQgbGlmZXRpbWUgd2FzIGVsaWRlZCBpbiBhbiBhc3luYyBmdW5jdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpXaGVuIGEgc3RydWN0IG9yIGEgdHlwZSBpcyBib3VuZC9kZWNsYXJlZCB3aXRoIGEgbGlmZXRpbWUgaXQgaXMgaW1wb3J0YW50IGZvcgp0aGUgUnVzdCBjb21waWxlciB0byBrbm93LCBvbiB1c2FnZSwgdGhlIGxpZmVzcGFuIG9mIHRoZSB0eXBlLiBXaGVuIHRoZQpsaWZldGltZSBpcyBub3QgZXhwbGljaXRseSBtZW50aW9uZWQgYW5kIHRoZSBSdXN0IENvbXBpbGVyIGNhbm5vdCBkZXRlcm1pbmUKdGhlIGxpZmV0aW1lIG9mIHlvdXIgdHlwZSwgdGhlIGZvbGxvd2luZyBlcnJvciBvY2N1cnMuCgpgYGBjb21waWxlX2ZhaWwsRTA3MjYKdXNlIGZ1dHVyZXM6OmV4ZWN1dG9yOjpibG9ja19vbjsKc3RydWN0IENvbnRlbnQ8J2E+IHsKICAgIHRpdGxlOiAmJ2Egc3RyLAogICAgYm9keTogJidhIHN0ciwKfQphc3luYyBmbiBjcmVhdGUoY29udGVudDogQ29udGVudCkgeyAvLyBlcnJvcjogaW1wbGljaXQgZWxpZGVkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpZmV0aW1lIG5vdCBhbGxvd2VkIGhlcmUKICAgIHByaW50bG4hKCJ0aXRsZToge30iLCBjb250ZW50LnRpdGxlKTsKICAgIHByaW50bG4hKCJib2R5OiB7fSIsIGNvbnRlbnQuYm9keSk7Cn0KbGV0IGNvbnRlbnQgPSBDb250ZW50IHsgdGl0bGU6ICJSdXN0IiwgYm9keTogImlzIGdyZWF0ISIgfTsKbGV0IGZ1dHVyZSA9IGNyZWF0ZShjb250ZW50KTsKYmxvY2tfb24oZnV0dXJlKTsKYGBgCgpTcGVjaWZ5IGRlc2lyZWQgbGlmZXRpbWUgb2YgcGFyYW1ldGVyIGBjb250ZW50YCBvciBpbmRpY2F0ZSB0aGUgYW5vbnltb3VzCmxpZmV0aW1lIGxpa2UgYGNvbnRlbnQ6IENvbnRlbnQ8J18+YC4gVGhlIGFub255bW91cyBsaWZldGltZSB0ZWxscyB0aGUgUnVzdApjb21waWxlciB0aGF0IGBjb250ZW50YCBpcyBvbmx5IG5lZWRlZCB1bnRpbCBjcmVhdGUgZnVuY3Rpb24gaXMgZG9uZSB3aXRoCml0J3MgZXhlY3V0aW9uLgoKVGhlIGBpbXBsaWNpdCBlbGlzaW9uYCBtZWFuaW5nIHRoZSBvbWlzc2lvbiBvZiBzdWdnZXN0ZWQgbGlmZXRpbWUgdGhhdCBpcwpgcHViIGFzeW5jIGZuIGNyZWF0ZTwnYT4oY29udGVudDogQ29udGVudDwnYT4pIHt9YCBpcyBub3QgYWxsb3dlZCBoZXJlIGFzCmxpZmV0aW1lIG9mIHRoZSBgY29udGVudGAgY2FuIGRpZmZlciBmcm9tIGN1cnJlbnQgY29udGV4dDoKCmBgYGlnbm9yZSAobmVlZHMgZnV0dXJlcyBkZXBlbmRlbmN5KQphc3luYyBmbiBjcmVhdGUoY29udGVudDogQ29udGVudDwnXz4pIHsgLy8gb2shCiAgICBwcmludGxuISgidGl0bGU6IHt9IiwgY29udGVudC50aXRsZSk7CiAgICBwcmludGxuISgiYm9keToge30iLCBjb250ZW50LmJvZHkpOwp9CmBgYAoKS25vdyBtb3JlIGFib3V0IGxpZmV0aW1lIGVsaXNpb24gaW4gdGhpcyBbY2hhcHRlcl1bbGlmZXRpbWUtZWxpc2lvbl0gYW5kIGEKY2hhcHRlciBvbiBsaWZldGltZXMgY2FuIGJlIGZvdW5kIFtoZXJlXVtsaWZldGltZXNdLgoKW2xpZmV0aW1lLWVsaXNpb25dOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMy1saWZldGltZS1zeW50YXguaHRtbCNsaWZldGltZS1lbGlzaW9uCltsaWZldGltZXNdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3J1c3QtYnktZXhhbXBsZS9zY29wZS9saWZldGltZS5odG1sCkUwNzI3QSBgeWllbGRgIGNsYXVzZSB3YXMgdXNlZCBpbiBhbiBgYXN5bmNgIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzI3LGVkaXRpb24yMDE4CiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycyldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHx8IHsKICAgICAgICBhc3luYyB7CiAgICAgICAgICAgIHlpZWxkOwogICAgICAgIH0KICAgIH07Cn0KYGBgCgpIZXJlLCB0aGUgYHlpZWxkYCBrZXl3b3JkIGlzIHVzZWQgaW4gYW4gYGFzeW5jYCBibG9jaywKd2hpY2ggaXMgbm90IHlldCBzdXBwb3J0ZWQuCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGhhdmUgdG8gbW92ZSBgeWllbGRgIG91dCBvZiB0aGUgYGFzeW5jYCBibG9jazoKCmBgYGVkaXRpb24yMDE4CiMhW2ZlYXR1cmUoZ2VuZXJhdG9ycyldCgpmbiBtYWluKCkgewogICAgbGV0IGdlbmVyYXRvciA9IHx8IHsKICAgICAgICB5aWVsZDsKICAgIH07Cn0KYGBgCkUwNzI4W2Bhd2FpdGBdIGhhcyBiZWVuIHVzZWQgb3V0c2lkZSBbYGFzeW5jYF0gZnVuY3Rpb24gb3IgW2Bhc3luY2BdIGJsb2NrLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGVkaXRpb24yMDE4LGNvbXBpbGVfZmFpbCxFMDcyOAojIHVzZSBzdGQ6OnBpbjo6UGluOwojIHVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwojIHVzZSBzdGQ6OnRhc2s6OntDb250ZXh0LCBQb2xsfTsKIwojIHN0cnVjdCBXYWtlT25jZVRoZW5Db21wbGV0ZShib29sKTsKIwojIGZuIHdha2VfYW5kX3lpZWxkX29uY2UoKSAtPiBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIFdha2VPbmNlVGhlbkNvbXBsZXRlKGZhbHNlKQojIH0KIwojIGltcGwgRnV0dXJlIGZvciBXYWtlT25jZVRoZW5Db21wbGV0ZSB7CiMgICAgIHR5cGUgT3V0cHV0ID0gKCk7CiMgICAgIGZuIHBvbGwobXV0IHNlbGY6IFBpbjwmbXV0IFNlbGY+LCBjeDogJm11dCBDb250ZXh0PCdfPikgLT4gUG9sbDwoKT4gewojICAgICAgICAgaWYgc2VsZi4wIHsKIyAgICAgICAgICAgICBQb2xsOjpSZWFkeSgoKSkKIyAgICAgICAgIH0gZWxzZSB7CiMgICAgICAgICAgICAgY3gud2FrZXIoKS53YWtlX2J5X3JlZigpOwojICAgICAgICAgICAgIHNlbGYuMCA9IHRydWU7CiMgICAgICAgICAgICAgUG9sbDo6UGVuZGluZwojICAgICAgICAgfQojICAgICB9CiMgfQojCmZuIGZvbygpIHsKICAgIHdha2VfYW5kX3lpZWxkX29uY2UoKS5hd2FpdCAvLyBgYXdhaXRgIGlzIHVzZWQgb3V0c2lkZSBgYXN5bmNgIGNvbnRleHQKfQpgYGAKCltgYXdhaXRgXSBpcyB1c2VkIHRvIHN1c3BlbmQgdGhlIGN1cnJlbnQgY29tcHV0YXRpb24gdW50aWwgdGhlIGdpdmVuCmZ1dHVyZSBpcyByZWFkeSB0byBwcm9kdWNlIGEgdmFsdWUuIFNvIGl0IGlzIGxlZ2FsIG9ubHkgd2l0aGluCmFuIFtgYXN5bmNgXSBjb250ZXh0LCBsaWtlIGFuIGBhc3luY2AgZnVuY3Rpb24gb3IgYW4gYGFzeW5jYCBibG9jay4KCmBgYGVkaXRpb24yMDE4CiMgdXNlIHN0ZDo6cGluOjpQaW47CiMgdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CiMgdXNlIHN0ZDo6dGFzazo6e0NvbnRleHQsIFBvbGx9OwojCiMgc3RydWN0IFdha2VPbmNlVGhlbkNvbXBsZXRlKGJvb2wpOwojCiMgZm4gd2FrZV9hbmRfeWllbGRfb25jZSgpIC0+IFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgV2FrZU9uY2VUaGVuQ29tcGxldGUoZmFsc2UpCiMgfQojCiMgaW1wbCBGdXR1cmUgZm9yIFdha2VPbmNlVGhlbkNvbXBsZXRlIHsKIyAgICAgdHlwZSBPdXRwdXQgPSAoKTsKIyAgICAgZm4gcG9sbChtdXQgc2VsZjogUGluPCZtdXQgU2VsZj4sIGN4OiAmbXV0IENvbnRleHQ8J18+KSAtPiBQb2xsPCgpPiB7CiMgICAgICAgICBpZiBzZWxmLjAgewojICAgICAgICAgICAgIFBvbGw6OlJlYWR5KCgpKQojICAgICAgICAgfSBlbHNlIHsKIyAgICAgICAgICAgICBjeC53YWtlcigpLndha2VfYnlfcmVmKCk7CiMgICAgICAgICAgICAgc2VsZi4wID0gdHJ1ZTsKIyAgICAgICAgICAgICBQb2xsOjpQZW5kaW5nCiMgICAgICAgICB9CiMgICAgIH0KIyB9CiMKYXN5bmMgZm4gZm9vKCkgewogICAgd2FrZV9hbmRfeWllbGRfb25jZSgpLmF3YWl0IC8vIGBhd2FpdGAgaXMgdXNlZCB3aXRoaW4gYGFzeW5jYCBmdW5jdGlvbgp9CgpmbiBiYXIoeDogdTgpIC0+IGltcGwgRnV0dXJlPE91dHB1dCA9IHU4PiB7CiAgICBhc3luYyBtb3ZlIHsKICAgICAgICB3YWtlX2FuZF95aWVsZF9vbmNlKCkuYXdhaXQ7IC8vIGBhd2FpdGAgaXMgdXNlZCB3aXRoaW4gYGFzeW5jYCBibG9jawogICAgICAgIHgKICAgIH0KfQpgYGAKCltgYXN5bmNgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQva2V5d29yZC5hc3luYy5odG1sCltgYXdhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9zdGQva2V5d29yZC5hd2FpdC5odG1sCkUwNzI5U3VwcG9ydCBmb3IgTm9uLUxleGljYWwgTGlmZXRpbWVzIChOTEwpIGhhcyBiZWVuIGluY2x1ZGVkIGluIHRoZSBSdXN0IGNvbXBpbGVyCnNpbmNlIDEuMzEsIGFuZCBoYXMgYmVlbiBlbmFibGVkIG9uIHRoZSAyMDE1IGVkaXRpb24gc2luY2UgMS4zNi4gVGhlIG5ldyBib3Jyb3cKY2hlY2tlciBmb3IgTkxMIHVuY292ZXJlZCBzb21lIGJ1Z3MgaW4gdGhlIG9sZCBib3Jyb3cgY2hlY2tlciwgd2hpY2ggaW4gc29tZQpjYXNlcyBhbGxvd2VkIHVuc291bmQgY29kZSB0byBjb21waWxlLCByZXN1bHRpbmcgaW4gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuCgojIyMgV2hhdCBkbyBJIGRvPwoKQ2hhbmdlIHlvdXIgY29kZSBzbyB0aGUgd2FybmluZyBkb2VzIG5vIGxvbmdlciB0cmlnZ2VyLiBGb3IgYmFja3dhcmRzCmNvbXBhdGliaWxpdHksIHRoaXMgdW5zb3VuZCBjb2RlIG1heSBzdGlsbCBjb21waWxlICh3aXRoIGEgd2FybmluZykgcmlnaHQgbm93LgpIb3dldmVyLCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsIHRoZSBjb21waWxlciB3aWxsIG5vIGxvbmdlciBhY2NlcHQgdGhpcwpjb2RlIGFuZCB3aWxsIHRocm93IGEgaGFyZCBlcnJvci4KCiMjIyBTaG91bGRuJ3QgeW91IGZpeCB0aGUgb2xkIGJvcnJvdyBjaGVja2VyPwoKVGhlIG9sZCBib3Jyb3cgY2hlY2tlciBoYXMga25vd24gc291bmRuZXNzIGlzc3VlcyB0aGF0IGFyZSBiYXNpY2FsbHkgaW1wb3NzaWJsZQp0byBmaXguIFRoZSBuZXcgTkxMLWJhc2VkIGJvcnJvdyBjaGVja2VyIGlzIHRoZSBmaXguCgojIyMgQ2FuIEkgdHVybiB0aGVzZSB3YXJuaW5ncyBpbnRvIGVycm9ycyBieSBkZW55aW5nIGEgbGludD8KCk5vLgoKIyMjIFdoZW4gYXJlIHRoZXNlIHdhcm5pbmdzIGdvaW5nIHRvIHR1cm4gaW50byBlcnJvcnM/CgpObyBmb3JtYWwgdGltZWxpbmUgZm9yIHR1cm5pbmcgdGhlIHdhcm5pbmdzIGludG8gZXJyb3JzIGhhcyBiZWVuIHNldC4gU2VlCltHaXRIdWIgaXNzdWUgNTg3ODFdKGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcnVzdC9pc3N1ZXMvNTg3ODEpIGZvciBtb3JlCmluZm9ybWF0aW9uLgoKIyMjIFdoeSBkbyBJIGdldCB0aGlzIG1lc3NhZ2Ugd2l0aCBjb2RlIHRoYXQgZG9lc24ndCBpbnZvbHZlIGJvcnJvd2luZz8KClRoZXJlIGFyZSBzb21lIGtub3duIGJ1Z3MgdGhhdCB0cmlnZ2VyIHRoaXMgbWVzc2FnZS4KRTA3MzBBbiBhcnJheSB3aXRob3V0IGEgZml4ZWQgbGVuZ3RoIHdhcyBwYXR0ZXJuLW1hdGNoZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzMwCmZuIGlzXzEyMzxjb25zdCBOOiB1c2l6ZT4oeDogW3UzMjsgTl0pIC0+IGJvb2wgewogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBlcnJvcjogY2Fubm90IHBhdHRlcm4tbWF0Y2ggb24gYW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICBhcnJheSB3aXRob3V0IGEgZml4ZWQgbGVuZ3RoCiAgICAgICAgXyA9PiBmYWxzZQogICAgfQp9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHlvdSBoYXZlIHR3byBzb2x1dGlvbnM6CiAxLiBVc2UgYW4gYXJyYXkgd2l0aCBhIGZpeGVkIGxlbmd0aC4KIDIuIFVzZSBhIHNsaWNlLgoKRXhhbXBsZSB3aXRoIGFuIGFycmF5IHdpdGggYSBmaXhlZCBsZW5ndGg6CgpgYGAKZm4gaXNfMTIzKHg6IFt1MzI7IDNdKSAtPiBib29sIHsgLy8gV2UgdXNlIGFuIGFycmF5IHdpdGggYSBmaXhlZCBzaXplCiAgICBtYXRjaCB4IHsKICAgICAgICBbMSwgMiwgLi5dID0+IHRydWUsIC8vIG9rIQogICAgICAgIF8gPT4gZmFsc2UKICAgIH0KfQpgYGAKCkV4YW1wbGUgd2l0aCBhIHNsaWNlOgoKYGBgCmZuIGlzXzEyMyh4OiAmW3UzMl0pIC0+IGJvb2wgeyAvLyBXZSB1c2UgYSBzbGljZQogICAgbWF0Y2ggeCB7CiAgICAgICAgWzEsIDIsIC4uXSA9PiB0cnVlLCAvLyBvayEKICAgICAgICBfID0+IGZhbHNlCiAgICB9Cn0KYGBgCkUwNzMxQW4gZW51bSB3aXRoIHRoZSByZXByZXNlbnRhdGlvbiBoaW50IGByZXByKHRyYW5zcGFyZW50KWAgaGFkIHplcm8gb3IgbW9yZSB0aGFuCm9uZSB2YXJpYW50cy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3MzEKI1tyZXByKHRyYW5zcGFyZW50KV0KZW51bSBTdGF0dXMgeyAvLyBlcnJvcjogdHJhbnNwYXJlbnQgZW51bSBuZWVkcyBleGFjdGx5IG9uZSB2YXJpYW50LCBidXQgaGFzIDIKICAgIEVycm5vKHUzMiksCiAgICBPaywKfQpgYGAKCkJlY2F1c2UgdHJhbnNwYXJlbnQgZW51bXMgYXJlIHJlcHJlc2VudGVkIGV4YWN0bHkgbGlrZSBvbmUgb2YgdGhlaXIgdmFyaWFudHMgYXQKcnVuIHRpbWUsIHNhaWQgdmFyaWFudCBtdXN0IGJlIHVuaXF1ZWx5IGRldGVybWluZWQuIElmIHRoZXJlIGlzIG5vIHZhcmlhbnQsIG9yCmlmIHRoZXJlIGFyZSBtdWx0aXBsZSB2YXJpYW50cywgaXQgaXMgbm90IGNsZWFyIGhvdyB0aGUgZW51bSBzaG91bGQgYmUKcmVwcmVzZW50ZWQuCkUwNzMyQW4gYGVudW1gIHdpdGggYSBkaXNjcmltaW5hbnQgbXVzdCBzcGVjaWZ5IGEgYCNbcmVwcihpbnR0eXBlKV1gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczMgplbnVtIEVudW0geyAvLyBlcnJvciEKICAgIFVuaXQgPSAxLAogICAgVHVwbGUoKSA9IDIsCiAgICBTdHJ1Y3R7fSA9IDMsCn0KIyBmbiBtYWluKCkge30KYGBgCgpBIGAjW3JlcHIoaW50dHlwZSldYCBtdXN0IGJlIHByb3ZpZGVkIG9uIGFuIGBlbnVtYCBpZiBpdCBoYXMgYSBub24tdW5pdAp2YXJpYW50IHdpdGggYSBkaXNjcmltaW5hbnQsIG9yIHdoZXJlIHRoZXJlIGFyZSBib3RoIHVuaXQgdmFyaWFudHMgd2l0aApkaXNjcmltaW5hbnRzIGFuZCBub24tdW5pdCB2YXJpYW50cy4gVGhpcyByZXN0cmljdGlvbiBlbnN1cmVzIHRoYXQgdGhlcmUKaXMgYSB3ZWxsLWRlZmluZWQgd2F5IHRvIGV4dHJhY3QgYSB2YXJpYW50J3MgZGlzY3JpbWluYW50IGZyb20gYSB2YWx1ZTsKZm9yIGluc3RhbmNlOgoKYGBgCiNbcmVwcih1OCldCmVudW0gRW51bSB7CiAgICBVbml0ID0gMywKICAgIFR1cGxlKHUxNikgPSAyLAogICAgU3RydWN0IHsKICAgICAgICBhOiB1OCwKICAgICAgICBiOiB1MTYsCiAgICB9ID0gMSwKfQoKZm4gZGlzY3JpbWluYW50KHYgOiAmRW51bSkgLT4gdTggewogICAgdW5zYWZlIHsgKih2IGFzICpjb25zdCBFbnVtIGFzICpjb25zdCB1OCkgfQp9CgpmbiBtYWluKCkgewogICAgYXNzZXJ0X2VxISgzLCBkaXNjcmltaW5hbnQoJkVudW06OlVuaXQpKTsKICAgIGFzc2VydF9lcSEoMiwgZGlzY3JpbWluYW50KCZFbnVtOjpUdXBsZSg1KSkpOwogICAgYXNzZXJ0X2VxISgxLCBkaXNjcmltaW5hbnQoJkVudW06OlN0cnVjdHthOiA3LCBiOiAxMX0pKTsKfQpgYGAKRTA3MzNBbiBbYGFzeW5jYF0gZnVuY3Rpb24gdXNlZCByZWN1cnNpb24gd2l0aG91dCBib3hpbmcuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzMzCmFzeW5jIGZuIGZvbyhuOiB1c2l6ZSkgewogICAgaWYgbiA+IDAgewogICAgICAgIGZvbyhuIC0gMSkuYXdhaXQ7CiAgICB9Cn0KYGBgCgpUbyBwZXJmb3JtIGFzeW5jIHJlY3Vyc2lvbiwgdGhlIGBhc3luYyBmbmAgbmVlZHMgdG8gYmUgZGVzdWdhcmVkIHN1Y2ggdGhhdCB0aGUKYEZ1dHVyZWAgaXMgZXhwbGljaXQgaW4gdGhlIHJldHVybiB0eXBlOgoKYGBgZWRpdGlvbjIwMTgsY29tcGlsZV9mYWlsLEUwNzIwCnVzZSBzdGQ6OmZ1dHVyZTo6RnV0dXJlOwpmbiBmb29fZGVzdWdhcmVkKG46IHVzaXplKSAtPiBpbXBsIEZ1dHVyZTxPdXRwdXQgPSAoKT4gewogICAgYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fZGVzdWdhcmVkKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9Cn0KYGBgCgpGaW5hbGx5LCB0aGUgZnV0dXJlIGlzIHdyYXBwZWQgaW4gYSBwaW5uZWQgYm94OgoKYGBgZWRpdGlvbjIwMTgKdXNlIHN0ZDo6ZnV0dXJlOjpGdXR1cmU7CnVzZSBzdGQ6OnBpbjo6UGluOwpmbiBmb29fcmVjdXJzaXZlKG46IHVzaXplKSAtPiBQaW48Qm94PGR5biBGdXR1cmU8T3V0cHV0ID0gKCk+Pj4gewogICAgQm94OjpwaW4oYXN5bmMgbW92ZSB7CiAgICAgICAgaWYgbiA+IDAgewogICAgICAgICAgICBmb29fcmVjdXJzaXZlKG4gLSAxKS5hd2FpdDsKICAgICAgICB9CiAgICB9KQp9CmBgYAoKVGhlIGBCb3g8Li4uPmAgZW5zdXJlcyB0aGF0IHRoZSByZXN1bHQgaXMgb2Yga25vd24gc2l6ZSwgYW5kIHRoZSBwaW4gaXMKcmVxdWlyZWQgdG8ga2VlcCBpdCBpbiB0aGUgc2FtZSBwbGFjZSBpbiBtZW1vcnkuCgpbYGFzeW5jYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvc3RkL2tleXdvcmQuYXN5bmMuaHRtbApFMDczNEEgc3RhYmlsaXR5IGF0dHJpYnV0ZSBoYXMgYmVlbiB1c2VkIG91dHNpZGUgb2YgdGhlIHN0YW5kYXJkIGxpYnJhcnkuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM0CiNbc3RhYmxlKGZlYXR1cmUgPSAiYSIsIHNpbmNlID0gImIiKV0gLy8gaW52YWxpZAojW3Vuc3RhYmxlKGZlYXR1cmUgPSAiYiIsIGlzc3VlID0gIm5vbmUiKV0gLy8gaW52YWxpZApmbiBmb28oKXt9CmBgYAoKVGhlc2UgYXR0cmlidXRlcyBhcmUgbWVhbnQgdG8gb25seSBiZSB1c2VkIGJ5IHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGFuZCBhcmUKcmVqZWN0ZWQgaW4geW91ciBvd24gY3JhdGVzLgpFMDczNVR5cGUgcGFyYW1ldGVyIGRlZmF1bHRzIGNhbm5vdCB1c2UgYFNlbGZgIG9uIHN0cnVjdHMsIGVudW1zLCBvciB1bmlvbnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM1CnN0cnVjdCBGb288WCA9IEJveDxTZWxmPj4gewogICAgZmllbGQxOiBPcHRpb248WD4sCiAgICBmaWVsZDI6IE9wdGlvbjxYPiwKfQovLyBlcnJvcjogdHlwZSBwYXJhbWV0ZXJzIGNhbm5vdCB1c2UgYFNlbGZgIGluIHRoZWlyIGRlZmF1bHRzLgpgYGAKRTA3MzZgI1t0cmFja19jYWxsZXJdYCBhbmQgYCNbbmFrZWRdYCBjYW5ub3QgYm90aCBiZSBhcHBsaWVkIHRvIHRoZSBzYW1lIGZ1bmN0aW9uLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczNgojW25ha2VkXQojW3RyYWNrX2NhbGxlcl0KZm4gZm9vKCkge30KYGBgCgpUaGlzIGlzIHByaW1hcmlseSBkdWUgdG8gQUJJIGluY29tcGF0aWJpbGl0aWVzIGJldHdlZW4gdGhlIHR3byBhdHRyaWJ1dGVzLgpTZWUgW1JGQyAyMDkxXSBmb3IgZGV0YWlscyBvbiB0aGlzIGFuZCBvdGhlciBsaW1pdGF0aW9ucy4KCltSRkMgMjA5MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzIwOTEtaW5saW5lLXNlbWFudGljLm1kCkUwNzM3YCNbdHJhY2tfY2FsbGVyXWAgcmVxdWlyZXMgZnVuY3Rpb25zIHRvIGhhdmUgdGhlIGAiUnVzdCJgIEFCSSBmb3IgaW1wbGljaXRseQpyZWNlaXZpbmcgY2FsbGVyIGxvY2F0aW9uLiBTZWUgW1JGQyAyMDkxXSBmb3IgZGV0YWlscyBvbiB0aGlzIGFuZCBvdGhlcgpyZXN0cmljdGlvbnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzM3CiNbdHJhY2tfY2FsbGVyXQpleHRlcm4gIkMiIGZuIGZvbygpIHt9CmBgYAoKW1JGQyAyMDkxXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9yZmNzL2Jsb2IvbWFzdGVyL3RleHQvMjA5MS1pbmxpbmUtc2VtYW50aWMubWQKRTA3MzlgI1t0cmFja19jYWxsZXJdYCBjYW4gbm90IGJlIGFwcGxpZWQgb24gc3RydWN0LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDczOQojW3RyYWNrX2NhbGxlcl0Kc3RydWN0IEJhciB7CiAgICBhOiB1OCwKfQpgYGAKCltSRkMgMjA5MV06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzIwOTEtaW5saW5lLXNlbWFudGljLm1kCkUwNzQwQSBgdW5pb25gIHdhcyBkZWNsYXJlZCB3aXRoIGZpZWxkcyB3aXRoIGRlc3RydWN0b3JzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MAp1bmlvbiBUZXN0IHsKICAgIGE6IEEsIC8vIGVycm9yIQp9CgojW2Rlcml2ZShEZWJ1ZyldCnN0cnVjdCBBKGkzMik7CgppbXBsIERyb3AgZm9yIEEgewogICAgZm4gZHJvcCgmbXV0IHNlbGYpIHsgcHJpbnRsbiEoIkEiKTsgfQp9CmBgYAoKQSBgdW5pb25gIGNhbm5vdCBoYXZlIGZpZWxkcyB3aXRoIGRlc3RydWN0b3JzLgpFMDc0MUEgbm9uLXN0cnVjdHVyYWwtbWF0Y2ggdHlwZSB3YXMgdXNlZCBhcyB0aGUgdHlwZSBvZiBhIGNvbnN0IGdlbmVyaWMgcGFyYW1ldGVyLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MQojIVtmZWF0dXJlKGFkdF9jb25zdF9wYXJhbXMpXQoKc3RydWN0IEE7CgpzdHJ1Y3QgQjxjb25zdCBYOiBBPjsgLy8gZXJyb3IhCmBgYAoKT25seSBzdHJ1Y3R1cmFsLW1hdGNoIHR5cGVzICh0aGF0IGlzLCB0eXBlcyB0aGF0IGRlcml2ZSBgUGFydGlhbEVxYCBhbmQgYEVxYCkKbWF5IGJlIHVzZWQgYXMgdGhlIHR5cGVzIG9mIGNvbnN0IGdlbmVyaWMgcGFyYW1ldGVycy4KClRvIGZpeCB0aGUgcHJldmlvdXMgY29kZSBleGFtcGxlLCB3ZSBkZXJpdmUgYFBhcnRpYWxFcWAgYW5kIGBFcWA6CgpgYGAKIyFbZmVhdHVyZShhZHRfY29uc3RfcGFyYW1zKV0KCiNbZGVyaXZlKFBhcnRpYWxFcSwgRXEpXSAvLyBXZSBkZXJpdmUgYm90aCB0cmFpdHMgaGVyZS4Kc3RydWN0IEE7CgpzdHJ1Y3QgQjxjb25zdCBYOiBBPjsgLy8gb2shCmBgYApFMDc0MlZpc2liaWxpdHkgaXMgcmVzdHJpY3RlZCB0byBhIG1vZHVsZSB3aGljaCBpc24ndCBhbiBhbmNlc3RvciBvZiB0aGUgY3VycmVudAppdGVtLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0MixlZGl0aW9uMjAxOApwdWIgbW9kIHNlYSB7fQoKcHViIChpbiBjcmF0ZTo6c2VhKSBzdHJ1Y3QgU2hhcms7IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIHdlIG5lZWQgdG8gbW92ZSB0aGUgYFNoYXJrYCBzdHJ1Y3QgaW5zaWRlIHRoZSBgc2VhYCBtb2R1bGU6CgpgYGBlZGl0aW9uMjAxOApwdWIgbW9kIHNlYSB7CiAgICBwdWIgKGluIGNyYXRlOjpzZWEpIHN0cnVjdCBTaGFyazsgLy8gb2shCn0KCmZuIG1haW4oKSB7fQpgYGAKCk9mIGNvdXJzZSwgeW91IGNhbiBkbyBpdCBhcyBsb25nIGFzIHRoZSBtb2R1bGUgeW91J3JlIHJlZmVycmluZyB0byBpcyBhbgphbmNlc3RvcjoKCmBgYGVkaXRpb24yMDE4CnB1YiBtb2QgZWFydGggewogICAgcHViIG1vZCBzZWEgewogICAgICAgIHB1YiAoaW4gY3JhdGU6OmVhcnRoKSBzdHJ1Y3QgU2hhcms7IC8vIG9rIQogICAgfQp9CgpmbiBtYWluKCkge30KYGBgCkUwNzQzVGhlIEMtdmFyaWFkaWMgdHlwZSBgLi4uYCBoYXMgYmVlbiBuZXN0ZWQgaW5zaWRlIGFub3RoZXIgdHlwZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NDMKZm4gZm9vMih4OiB1OCwgeTogJi4uLikge30gLy8gZXJyb3IhCmBgYAoKT25seSBmb3JlaWduIGZ1bmN0aW9ucyBjYW4gdXNlIHRoZSBDLXZhcmlhZGljIHR5cGUgKGAuLi5gKS4gSW4gc3VjaCBmdW5jdGlvbnMsCmAuLi5gIG1heSBvbmx5IG9jY3VyIG5vbi1uZXN0ZWQuIFRoYXQgaXMsIGB5OiAmJ2EgLi4uYCBpcyBub3QgYWxsb3dlZC4KCkEgQy12YXJpYWRpYyB0eXBlIGlzIHVzZWQgdG8gZ2l2ZSBhbiB1bmRlZmluZWQgbnVtYmVyIG9mIHBhcmFtZXRlcnMgdG8gYSBnaXZlbgpmdW5jdGlvbiAobGlrZSBgcHJpbnRmYCBpbiBDKS4gVGhlIGVxdWl2YWxlbnQgaW4gUnVzdCB3b3VsZCBiZSB0byB1c2UgbWFjcm9zCmRpcmVjdGx5IChsaWtlIGBwcmludGxuIWAgZm9yIGV4YW1wbGUpLgpFMDc0NEFuIHVuc3VwcG9ydGVkIGV4cHJlc3Npb24gd2FzIHVzZWQgaW5zaWRlIGEgY29uc3QgY29udGV4dC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsZWRpdGlvbjIwMTgsRTA3NDQKY29uc3QgXzogaTMyID0gewogICAgYXN5bmMgeyAwIH0uYXdhaXQKfTsKYGBgCgpBdCB0aGUgbW9tZW50LCBgLmF3YWl0YCBpcyBmb3JiaWRkZW4gaW5zaWRlIGEgYGNvbnN0YCwgYHN0YXRpY2AsIG9yIGBjb25zdCBmbmAuCgpUaGlzIG1heSBiZSBhbGxvd2VkIGF0IHNvbWUgcG9pbnQgaW4gdGhlIGZ1dHVyZSwgYnV0IHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QKeWV0IGNvbXBsZXRlLiBTZWUgdGhlIHRyYWNraW5nIGlzc3VlIGZvciBbYGFzeW5jYF0gaW4gYGNvbnN0IGZuYC4KCltgYXN5bmNgXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy82OTQzMQpFMDc0NVRoZSBhZGRyZXNzIG9mIHRlbXBvcmFyeSB2YWx1ZSB3YXMgdGFrZW4uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ1CiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHB0ciA9ICZyYXcgY29uc3QgMjsgLy8gZXJyb3IhCn0KYGBgCgpJbiB0aGlzIGV4YW1wbGUsIGAyYCBpcyBkZXN0cm95ZWQgcmlnaHQgYWZ0ZXIgdGhlIGFzc2lnbm1lbnQsIHdoaWNoIG1lYW5zIHRoYXQKYHB0cmAgbm93IHBvaW50cyB0byBhbiB1bmF2YWlsYWJsZSBsb2NhdGlvbi4KClRvIGF2b2lkIHRoaXMgZXJyb3IsIGZpcnN0IGJpbmQgdGhlIHRlbXBvcmFyeSB0byBhIG5hbWVkIGxvY2FsIHZhcmlhYmxlOgoKYGBgCiMgIyFbZmVhdHVyZShyYXdfcmVmX29wKV0KZm4gdGVtcF9hZGRyZXNzKCkgewogICAgbGV0IHZhbCA9IDI7CiAgICBsZXQgcHRyID0gJnJhdyBjb25zdCB2YWw7IC8vIG9rIQp9CmBgYApFMDc0NkFuIHVuYm94ZWQgdHJhaXQgb2JqZWN0IHdhcyB1c2VkIGFzIGEgcmV0dXJuIHZhbHVlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0Ngp0cmFpdCBUIHsKICAgIGZuIGJhcigmc2VsZik7Cn0Kc3RydWN0IFModXNpemUpOwppbXBsIFQgZm9yIFMgewogICAgZm4gYmFyKCZzZWxmKSB7fQp9CgovLyBIYXZpbmcgdGhlIHRyYWl0IGBUYCBhcyByZXR1cm4gdHlwZSBpcyBpbnZhbGlkIGJlY2F1c2UKLy8gdW5ib3hlZCB0cmFpdCBvYmplY3RzIGRvIG5vdCBoYXZlIGEgc3RhdGljYWxseSBrbm93biBzaXplOgpmbiBmb28oKSAtPiBkeW4gVCB7IC8vIGVycm9yIQogICAgUyg0MikKfQpgYGAKClJldHVybiB0eXBlcyBjYW5ub3QgYmUgYGR5biBUcmFpdGBzIGFzIHRoZXkgbXVzdCBiZSBgU2l6ZWRgLgoKVG8gYXZvaWQgdGhlIGVycm9yIHRoZXJlIGFyZSBhIGNvdXBsZSBvZiBvcHRpb25zLgoKSWYgdGhlcmUgaXMgYSBzaW5nbGUgdHlwZSBpbnZvbHZlZCwgeW91IGNhbiB1c2UgW2BpbXBsIFRyYWl0YF06CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9Ci8vIFRoZSBjb21waWxlciB3aWxsIHNlbGVjdCBgUyh1c2l6ZSlgIGFzIHRoZSBtYXRlcmlhbGl6ZWQgcmV0dXJuIHR5cGUgb2YgdGhpcwovLyBmdW5jdGlvbiwgYnV0IGNhbGxlcnMgd2lsbCBvbmx5IGtub3cgdGhhdCB0aGUgcmV0dXJuIHR5cGUgaW1wbGVtZW50cyBgVGAuCmZuIGZvbygpIC0+IGltcGwgVCB7IC8vIG9rIQogICAgUyg0MikKfQpgYGAKCklmIHRoZXJlIGFyZSBtdWx0aXBsZSB0eXBlcyBpbnZvbHZlZCwgdGhlIG9ubHkgd2F5IHlvdSBjYXJlIHRvIGludGVyYWN0IHdpdGgKdGhlbSBpcyB0aHJvdWdoIHRoZSB0cmFpdCdzIGludGVyZmFjZSwgYW5kIGhhdmluZyB0byByZWx5IG9uIGR5bmFtaWMgZGlzcGF0Y2gKaXMgYWNjZXB0YWJsZSwgdGhlbiB5b3UgY2FuIHVzZSBbdHJhaXQgb2JqZWN0c10gd2l0aCBgQm94YCwgb3Igb3RoZXIgY29udGFpbmVyCnR5cGVzIGxpa2UgYFJjYCBvciBgQXJjYDoKCmBgYAojIHRyYWl0IFQgewojICAgICBmbiBiYXIoJnNlbGYpOwojIH0KIyBzdHJ1Y3QgUyh1c2l6ZSk7CiMgaW1wbCBUIGZvciBTIHsKIyAgICAgZm4gYmFyKCZzZWxmKSB7fQojIH0Kc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKaW1wbCBUIGZvciBPIHsKICAgIGZuIGJhcigmc2VsZikge30KfQoKLy8gVGhpcyBub3cgcmV0dXJucyBhICJ0cmFpdCBvYmplY3QiIGFuZCBjYWxsZXJzIGFyZSBvbmx5IGJlIGFibGUgdG8gYWNjZXNzCi8vIGFzc29jaWF0ZWQgaXRlbXMgZnJvbSBgVGAuCmZuIGZvbyh4OiBib29sKSAtPiBCb3g8ZHluIFQ+IHsgLy8gb2shCiAgICBpZiB4IHsKICAgICAgICBCb3g6Om5ldyhTKDQyKSkKICAgIH0gZWxzZSB7CiAgICAgICAgQm94OjpuZXcoTygidmFsIikpCiAgICB9Cn0KYGBgCgpGaW5hbGx5LCBpZiB5b3Ugd2lzaCB0byBzdGlsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZSwgeW91IGNhbgpjcmVhdGUgYSBuZXcgYGVudW1gIHdpdGggYSB2YXJpYW50IGZvciBlYWNoIHR5cGU6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQplbnVtIEUgewogICAgUyhTKSwKICAgIE8oTyksCn0KCi8vIFRoZSBjYWxsZXIgY2FuIGFjY2VzcyB0aGUgb3JpZ2luYWwgdHlwZXMgZGlyZWN0bHksIGJ1dCBpdCBuZWVkcyB0byBtYXRjaCBvbgovLyB0aGUgcmV0dXJuZWQgYGVudW0gRWAuCmZuIGZvbyh4OiBib29sKSAtPiBFIHsKICAgIGlmIHggewogICAgICAgIEU6OlMoUyg0MikpCiAgICB9IGVsc2UgewogICAgICAgIEU6Ok8oTygidmFsIikpCiAgICB9Cn0KYGBgCgpZb3UgY2FuIGV2ZW4gaW1wbGVtZW50IHRoZSBgdHJhaXRgIG9uIHRoZSByZXR1cm5lZCBgZW51bWAgc28gdGhlIGNhbGxlcnMKKmRvbid0KiBoYXZlIHRvIG1hdGNoIG9uIHRoZSByZXR1cm5lZCB2YWx1ZSB0byBpbnZva2UgdGhlIGFzc29jaWF0ZWQgaXRlbXM6CgpgYGAKIyB0cmFpdCBUIHsKIyAgICAgZm4gYmFyKCZzZWxmKTsKIyB9CiMgc3RydWN0IFModXNpemUpOwojIGltcGwgVCBmb3IgUyB7CiMgICAgIGZuIGJhcigmc2VsZikge30KIyB9CiMgc3RydWN0IE8oJidzdGF0aWMgc3RyKTsKIyBpbXBsIFQgZm9yIE8gewojICAgICBmbiBiYXIoJnNlbGYpIHt9CiMgfQojIGVudW0gRSB7CiMgICAgIFMoUyksCiMgICAgIE8oTyksCiMgfQppbXBsIFQgZm9yIEUgewogICAgZm4gYmFyKCZzZWxmKSB7CiAgICAgICAgbWF0Y2ggc2VsZiB7CiAgICAgICAgICAgIEU6OlMocykgPT4gcy5iYXIoKSwKICAgICAgICAgICAgRTo6TyhvKSA9PiBvLmJhcigpLAogICAgICAgIH0KICAgIH0KfQpgYGAKCklmIHlvdSBkZWNpZGUgdG8gdXNlIHRyYWl0IG9iamVjdHMsIGJlIGF3YXJlIHRoYXQgdGhlc2UgcmVseSBvbgpbZHluYW1pYyBkaXNwYXRjaF0sIHdoaWNoIGhhcyBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsIGFzIHRoZSBjb21waWxlciBuZWVkcwp0byBlbWl0IGNvZGUgdGhhdCB3aWxsIGZpZ3VyZSBvdXQgd2hpY2ggbWV0aG9kIHRvIGNhbGwgKmF0IHJ1bnRpbWUqIGluc3RlYWQgb2YKZHVyaW5nIGNvbXBpbGF0aW9uLiBVc2luZyB0cmFpdCBvYmplY3RzIHdlIGFyZSB0cmFkaW5nIGZsZXhpYmlsaXR5IGZvcgpwZXJmb3JtYW5jZS4KCltgaW1wbCBUcmFpdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL2Jvb2svY2gxMC0wMi10cmFpdHMuaHRtbCNyZXR1cm5pbmctdHlwZXMtdGhhdC1pbXBsZW1lbnQtdHJhaXRzClt0cmFpdCBvYmplY3RzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbZHluYW1pYyBkaXNwYXRjaF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvYm9vay9jaDE3LTAyLXRyYWl0LW9iamVjdHMuaHRtbCN0cmFpdC1vYmplY3RzLXBlcmZvcm0tZHluYW1pYy1kaXNwYXRjaApFMDc0N0dlbmVyaWMgYXJndW1lbnRzIHdlcmUgbm90IHByb3ZpZGVkIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZSBjb3JyZXNwb25kaW5nCmdlbmVyaWMgcGFyYW1ldGVycyBhcmUgZGVjbGFyZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ3CnN0cnVjdCBTPCdhLCBUPigmJ2EgVCk7Cgp0eXBlIFggPSBTPCgpLCAnc3RhdGljPjsgLy8gZXJyb3I6IHRoZSB0eXBlIGFyZ3VtZW50IGlzIHByb3ZpZGVkIGJlZm9yZSB0aGUKICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxpZmV0aW1lIGFyZ3VtZW50CmBgYAoKVGhlIGFyZ3VtZW50IG9yZGVyIHNob3VsZCBiZSBjaGFuZ2VkIHRvIG1hdGNoIHRoZSBwYXJhbWV0ZXIgZGVjbGFyYXRpb24Kb3JkZXIsIGFzIGluIHRoZSBmb2xsb3dpbmc6CgpgYGAKc3RydWN0IFM8J2EsIFQ+KCYnYSBUKTsKCnR5cGUgWCA9IFM8J3N0YXRpYywgKCk+OyAvLyBvawpgYGAKRTA3NDhBIHJhdyBzdHJpbmcgaXNuJ3QgY29ycmVjdGx5IHRlcm1pbmF0ZWQgYmVjYXVzZSB0aGUgdHJhaWxpbmcgYCNgIGNvdW50IGRvZXNuJ3QKbWF0Y2ggaXRzIGxlYWRpbmcgYCNgIGNvdW50LgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc0OApsZXQgZG9scGhpbnMgPSByIyMiRG9scGhpbnMhIiM7IC8vIGVycm9yIQpgYGAKClRvIHRlcm1pbmF0ZSBhIHJhdyBzdHJpbmcsIHlvdSBoYXZlIHRvIGhhdmUgdGhlIHNhbWUgbnVtYmVyIG9mIGAjYCBhdCB0aGUgZW5kCmFzIGF0IHRoZSBiZWdpbm5pbmcuIEV4YW1wbGU6CgpgYGAKbGV0IGRvbHBoaW5zID0gciMiRG9scGhpbnMhIiM7IC8vIE9uZSBgI2AgYXQgdGhlIGJlZ2lubmluZywgb25lIGF0IHRoZSBlbmQgc28KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFsbCBnb29kIQpgYGAKRTA3NDlBbiBpdGVtIHdhcyBhZGRlZCBvbiBhIG5lZ2F0aXZlIGltcGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzQ5CiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmltcGwgIU15VHJhaXQgZm9yIHUzMiB7CiAgICB0eXBlIEZvbyA9IGkzMjsgLy8gZXJyb3IhCn0KYGBgCgpOZWdhdGl2ZSBpbXBscyBhcmUgbm90IGFsbG93ZWQgdG8gaGF2ZSBhbnkgaXRlbXMuIE5lZ2F0aXZlIGltcGxzIGRlY2xhcmUgdGhhdCBhCnRyYWl0IGlzICoqbm90KiogaW1wbGVtZW50ZWQgKGFuZCBuZXZlciB3aWxsIGJlKSBhbmQgaGVuY2UgdGhlcmUgaXMgbm8gbmVlZCB0bwpzcGVjaWZ5IHRoZSB2YWx1ZXMgZm9yIHRyYWl0IG1ldGhvZHMgb3Igb3RoZXIgaXRlbXMuCgpPbmUgd2F5IHRvIGZpeCB0aGlzIGlzIHRvIHJlbW92ZSB0aGUgaXRlbXMgaW4gbmVnYXRpdmUgaW1wbHM6CgpgYGAKIyAjIVtmZWF0dXJlKG5lZ2F0aXZlX2ltcGxzKV0KdHJhaXQgTXlUcmFpdCB7CiAgICB0eXBlIEZvbzsKfQoKaW1wbCAhTXlUcmFpdCBmb3IgdTMyIHt9CmBgYApFMDc1MEEgbmVnYXRpdmUgaW1wbCB3YXMgbWFkZSBkZWZhdWx0IGltcGwuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUwCiMgIyFbZmVhdHVyZShuZWdhdGl2ZV9pbXBscyldCiMgIyFbZmVhdHVyZShzcGVjaWFsaXphdGlvbildCnRyYWl0IE15VHJhaXQgewogICAgdHlwZSBGb287Cn0KCmRlZmF1bHQgaW1wbCAhTXlUcmFpdCBmb3IgdTMyIHt9IC8vIGVycm9yIQojIGZuIG1haW4oKSB7fQpgYGAKCk5lZ2F0aXZlIGltcGxzIGNhbm5vdCBiZSBkZWZhdWx0IGltcGxzLiBBIGRlZmF1bHQgaW1wbCBzdXBwbGllcyBkZWZhdWx0IHZhbHVlcwpmb3IgdGhlIGl0ZW1zIHdpdGhpbiB0byBiZSB1c2VkIGJ5IG90aGVyIGltcGxzLCB3aGVyZWFzIGEgbmVnYXRpdmUgaW1wbCBkZWNsYXJlcwp0aGF0IHRoZXJlIGFyZSBubyBvdGhlciBpbXBscy4gQ29tYmluaW5nIGl0IGRvZXMgbm90IG1ha2Ugc2Vuc2UuCkUwNzUxVGhlcmUgYXJlIGJvdGggYSBwb3NpdGl2ZSBhbmQgbmVnYXRpdmUgdHJhaXQgaW1wbGVtZW50YXRpb24gZm9yIHRoZSBzYW1lIHR5cGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUxCnRyYWl0IE15VHJhaXQge30KaW1wbCBNeVRyYWl0IGZvciBpMzIgeyB9CmltcGwgIU15VHJhaXQgZm9yIGkzMiB7IH0gLy8gZXJyb3IhCmBgYAoKTmVnYXRpdmUgaW1wbGVtZW50YXRpb25zIGFyZSBhIHByb21pc2UgdGhhdCB0aGUgdHJhaXQgd2lsbCBuZXZlciBiZSBpbXBsZW1lbnRlZApmb3IgdGhlIGdpdmVuIHR5cGVzLiBUaGVyZWZvcmUsIGJvdGggY2Fubm90IGV4aXN0cyBhdCB0aGUgc2FtZSB0aW1lLgpFMDc1MlRoZSBlbnRyeSBwb2ludCBvZiB0aGUgcHJvZ3JhbSB3YXMgbWFya2VkIGFzIGBhc3luY2AuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUyCmFzeW5jIGZuIG1haW4oKSAtPiBSZXN1bHQ8KCksICgpPiB7IC8vIGVycm9yIQogICAgT2soKCkpCn0KYGBgCgpgZm4gbWFpbigpYCBvciB0aGUgc3BlY2lmaWVkIHN0YXJ0IGZ1bmN0aW9uIGlzIG5vdCBhbGxvd2VkIHRvIGJlIGBhc3luY2AuIE5vdApoYXZpbmcgYSBjb3JyZWN0IGFzeW5jIHJ1bnRpbWUgbGlicmFyeSBzZXR1cCBtYXkgY2F1c2UgdGhpcyBlcnJvci4gVG8gZml4IGl0LApkZWNsYXJlIHRoZSBlbnRyeSBwb2ludCB3aXRob3V0IGBhc3luY2A6CgpgYGAKZm4gbWFpbigpIC0+IFJlc3VsdDwoKSwgKCk+IHsgLy8gb2shCiAgICBPaygoKSkKfQpgYGAKRTA3NTNBbiBpbm5lciBkb2MgY29tbWVudCB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzUzCmZuIGZvbygpIHt9Ci8vISBmb28KLy8gXiBlcnJvciEKZm4gbWFpbigpIHt9CmBgYAoKSW5uZXIgZG9jdW1lbnQgY2FuIG9ubHkgYmUgdXNlZCBiZWZvcmUgaXRlbXMuIEZvciBleGFtcGxlOgoKYGBgCi8vISBBIHdvcmtpbmcgY29tbWVudCBhcHBsaWVkIHRvIHRoZSBtb2R1bGUhCmZuIGZvbygpIHsKICAgIC8vISBBbm90aGVyIHdvcmtpbmcgY29tbWVudCEKfQpmbiBtYWluKCkge30KYGBgCgpJbiBjYXNlIHlvdSB3YW50IHRvIGRvY3VtZW50IHRoZSBpdGVtIGZvbGxvd2luZyB0aGUgZG9jIGNvbW1lbnQsIHlvdSBtaWdodCB3YW50CnRvIHVzZSBvdXRlciBkb2MgY29tbWVudDoKCmBgYAovLy8gSSBhbSBhbiBvdXRlciBkb2MgY29tbWVudAojW2RvYyA9ICJJIGFtIGFsc28gYW4gb3V0ZXIgZG9jIGNvbW1lbnQhIl0KZm4gZm9vKCkgewogICAgLy8gLi4uCn0KYGBgCkUwNzU0QSBub24tQVNDSUkgaWRlbnRpZmllciB3YXMgdXNlZCBpbiBhbiBpbnZhbGlkIGNvbnRleHQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NAoKbW9kIMWZxbPFm8WlOyAvLyBlcnJvciEKCiNbbm9fbWFuZ2xlXQpmbiDFmcWzxZvFpSgpIHt9IC8vIGVycm9yIQoKZm4gbWFpbigpIHt9CmBgYAoKTm9uLUFTQ0lJIGNhbiBiZSB1c2VkIGFzIG1vZHVsZSBuYW1lcyBpZiBpdCBpcyBpbmxpbmVkIG9yIGlmIGEgYCNbcGF0aF1gCmF0dHJpYnV0ZSBpcyBzcGVjaWZpZWQuIEZvciBleGFtcGxlOgoKYGBgCm1vZCDFmcWzxZvFpSB7IC8vIG9rIQogICAgY29uc3QgSVNfR1JFQVQ6IGJvb2wgPSB0cnVlOwp9CgpmbiBtYWluKCkge30KYGBgCkUwNzU1VGhlIGBmZmlfcHVyZWAgYXR0cmlidXRlIHdhcyB1c2VkIG9uIGEgbm9uLWZvcmVpZ24gZnVuY3Rpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU1CiMhW2ZlYXR1cmUoZmZpX3B1cmUpXQoKI1tmZmlfcHVyZV0gLy8gZXJyb3IhCnB1YiBmbiBmb28oKSB7fQojIGZuIG1haW4oKSB7fQpgYGAKClRoZSBgZmZpX3B1cmVgIGF0dHJpYnV0ZSBjYW4gb25seSBiZSB1c2VkIG9uIGZvcmVpZ24gZnVuY3Rpb25zIHdoaWNoIGRvIG5vdCBoYXZlCnNpZGUgZWZmZWN0cyBvciBpbmZpbml0ZSBsb29wczoKCmBgYAojIVtmZWF0dXJlKGZmaV9wdXJlKV0KCmV4dGVybiAiQyIgewogICAgI1tmZmlfcHVyZV0gLy8gb2shCiAgICBwdWIgZm4gc3RybGVuKHM6ICpjb25zdCBpOCkgLT4gaXNpemU7Cn0KIyBmbiBtYWluKCkge30KYGBgCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdCBpbiB0aGUgW3Vuc3RhYmxlIFJ1c3QgQm9va10uCgpbdW5zdGFibGUgUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1wdXJlLmh0bWwKRTA3NTZUaGUgYGZmaV9jb25zdGAgYXR0cmlidXRlIHdhcyB1c2VkIG9uIHNvbWV0aGluZyBvdGhlciB0aGFuIGEgZm9yZWlnbiBmdW5jdGlvbgpkZWNsYXJhdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NTYKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKI1tmZmlfY29uc3RdIC8vIGVycm9yIQpwdWIgZm4gZm9vKCkge30KIyBmbiBtYWluKCkge30KYGBgCgpUaGUgYGZmaV9jb25zdGAgYXR0cmlidXRlIGNhbiBvbmx5IGJlIHVzZWQgb24gZm9yZWlnbiBmdW5jdGlvbiBkZWNsYXJhdGlvbnMKd2hpY2ggaGF2ZSBubyBzaWRlIGVmZmVjdHMgZXhjZXB0IGZvciB0aGVpciByZXR1cm4gdmFsdWU6CgpgYGAKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0gLy8gb2shCiAgICBwdWIgZm4gc3RybGVuKHM6ICpjb25zdCBpOCkgLT4gaTMyOwp9CiMgZm4gbWFpbigpIHt9CmBgYAoKWW91IGNhbiBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBpdCBpbiB0aGUgW3Vuc3RhYmxlIFJ1c3QgQm9va10uCgpbdW5zdGFibGUgUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9uaWdodGx5L3Vuc3RhYmxlLWJvb2svbGFuZ3VhZ2UtZmVhdHVyZXMvZmZpLWNvbnN0Lmh0bWwKRTA3NTdBIGZ1bmN0aW9uIHdhcyBnaXZlbiBib3RoIHRoZSBgZmZpX2NvbnN0YCBhbmQgYGZmaV9wdXJlYCBhdHRyaWJ1dGVzLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc1NwojIVtmZWF0dXJlKGZmaV9jb25zdCwgZmZpX3B1cmUpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0KICAgICNbZmZpX3B1cmVdIC8vIGVycm9yOiBgI1tmZmlfY29uc3RdYCBmdW5jdGlvbiBjYW5ub3QgYmUgYCNbZmZpX3B1cmVdYAogICAgcHViIGZuIHNxdWFyZShudW06IGkzMikgLT4gaTMyOwp9CmBgYAoKQXMgYGZmaV9jb25zdGAgcHJvdmlkZXMgc3Ryb25nZXIgZ3VhcmFudGVlcyB0aGFuIGBmZmlfcHVyZWAsIHJlbW92ZSB0aGUKYGZmaV9wdXJlYCBhdHRyaWJ1dGU6CgpgYGAKIyFbZmVhdHVyZShmZmlfY29uc3QpXQoKZXh0ZXJuICJDIiB7CiAgICAjW2ZmaV9jb25zdF0KICAgIHB1YiBmbiBzcXVhcmUobnVtOiBpMzIpIC0+IGkzMjsKfQpgYGAKCllvdSBjYW4gZ2V0IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgYGNvbnN0YCBhbmQgYHB1cmVgIGluIHRoZSBbR0NDIGRvY3VtZW50YXRpb24Kb24gQ29tbW9uIEZ1bmN0aW9uIEF0dHJpYnV0ZXNdLiBUaGUgdW5zdGFibGUgUnVzdCBCb29rIGhhcyBtb3JlIGluZm9ybWF0aW9uCmFib3V0IFtgZmZpX2NvbnN0YF0gYW5kIFtgZmZpX3B1cmVgXS4KCltHQ0MgZG9jdW1lbnRhdGlvbiBvbiBDb21tb24gRnVuY3Rpb24gQXR0cmlidXRlc106IGh0dHBzOi8vZ2NjLmdudS5vcmcvb25saW5lZG9jcy9nY2MvQ29tbW9uLUZ1bmN0aW9uLUF0dHJpYnV0ZXMuaHRtbApbYGZmaV9jb25zdGBdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL25pZ2h0bHkvdW5zdGFibGUtYm9vay9sYW5ndWFnZS1mZWF0dXJlcy9mZmktY29uc3QuaHRtbApbYGZmaV9wdXJlYF06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvbmlnaHRseS91bnN0YWJsZS1ib29rL2xhbmd1YWdlLWZlYXR1cmVzL2ZmaS1wdXJlLmh0bWwKRTA3NThBIG11bHRpLWxpbmUgKGRvYy0pY29tbWVudCBpcyB1bnRlcm1pbmF0ZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU4Ci8qIEkgYW0gbm90IHRlcm1pbmF0ZWQhCmBgYAoKVGhlIHNhbWUgZ29lcyBmb3IgZG9jIGNvbW1lbnRzOgoKYGBgY29tcGlsZV9mYWlsLEUwNzU4Ci8qISBJIGFtIG5vdCB0ZXJtaW5hdGVkIQpgYGAKCllvdSBuZWVkIHRvIGVuZCB5b3VyIG11bHRpLWxpbmUgY29tbWVudCB3aXRoIGAqL2AgaW4gb3JkZXIgdG8gZml4IHRoaXMgZXJyb3I6CgpgYGAKLyogSSBhbSB0ZXJtaW5hdGVkISAqLwovKiEgSSBhbSBhbHNvIHRlcm1pbmF0ZWQhICovCmBgYApFMDc1OSMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KClJldHVybiB0eXBlIGludm9sdmluZyBhIHRyYWl0IGRpZCBub3QgcmVxdWlyZSBgJ3N0YXRpY2AgbGlmZXRpbWUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlczoKCmBgYGNvbXBpbGVfZmFpbAp1c2Ugc3RkOjpmbXQ6OkRlYnVnOwoKZm4gZm9vKHg6ICZpMzIpIC0+IGltcGwgRGVidWcgeyAvLyBlcnJvciEKICAgIHgKfQoKZm4gYmFyKHg6ICZpMzIpIC0+IEJveDxkeW4gRGVidWc+IHsgLy8gZXJyb3IhCiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKQWRkIGAnc3RhdGljYCByZXF1aXJlbWVudCB0byBmaXggdGhlbToKCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmJ3N0YXRpYyBpMzIpIC0+IGltcGwgRGVidWcgKyAnc3RhdGljIHsgLy8gb2shCiAgICB4Cn0KCmZuIGJhcih4OiAmJ3N0YXRpYyBpMzIpIC0+IEJveDxkeW4gRGVidWcgKyAnc3RhdGljPiB7IC8vIG9rIQogICAgQm94OjpuZXcoeCkKfQpgYGAKCkJvdGggW2BkeW4gVHJhaXRgXSBhbmQgW2BpbXBsIFRyYWl0YF0gaW4gcmV0dXJuIHR5cGVzIGhhdmUgYW4gaW1wbGljaXQKYCdzdGF0aWNgIHJlcXVpcmVtZW50LCBtZWFuaW5nIHRoYXQgdGhlIHZhbHVlIGltcGxlbWVudGluZyB0aGVtIHRoYXQgaXMgYmVpbmcKcmV0dXJuZWQgaGFzIHRvIGJlIGVpdGhlciBhIGAnc3RhdGljYCBib3Jyb3cgb3IgYW4gb3duZWQgdmFsdWUuCgpJbiBvcmRlciB0byBjaGFuZ2UgdGhlIHJlcXVpcmVtZW50IGZyb20gYCdzdGF0aWNgIHRvIGJlIGEgbGlmZXRpbWUgZGVyaXZlZCBmcm9tCml0cyBhcmd1bWVudHMsIHlvdSBjYW4gYWRkIGFuIGV4cGxpY2l0IGJvdW5kLCBlaXRoZXIgdG8gYW4gYW5vbnltb3VzIGxpZmV0aW1lCmAnX2Agb3Igc29tZSBhcHByb3ByaWF0ZSBuYW1lZCBsaWZldGltZS4KCmBgYAojIHVzZSBzdGQ6OmZtdDo6RGVidWc7CmZuIGZvbyh4OiAmaTMyKSAtPiBpbXBsIERlYnVnICsgJ18gewogICAgeAp9CmZuIGJhcih4OiAmaTMyKSAtPiBCb3g8ZHluIERlYnVnICsgJ18+IHsKICAgIEJveDo6bmV3KHgpCn0KYGBgCgpUaGVzZSBhcmUgZXF1aXZhbGVudCB0byB0aGUgZm9sbG93aW5nIGV4cGxpY2l0IGxpZmV0aW1lIGFubm90YXRpb25zOgoKYGBgCiMgdXNlIHN0ZDo6Zm10OjpEZWJ1ZzsKZm4gZm9vPCdhPih4OiAmJ2EgaTMyKSAtPiBpbXBsIERlYnVnICsgJ2EgewogICAgeAp9CmZuIGJhcjwnYT4oeDogJidhIGkzMikgLT4gQm94PGR5biBEZWJ1ZyArICdhPiB7CiAgICBCb3g6Om5ldyh4KQp9CmBgYAoKW2BkeW4gVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTctMDItdHJhaXQtb2JqZWN0cy5odG1sI3VzaW5nLXRyYWl0LW9iamVjdHMtdGhhdC1hbGxvdy1mb3ItdmFsdWVzLW9mLWRpZmZlcmVudC10eXBlcwpbYGltcGwgVHJhaXRgXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2NoMTAtMDItdHJhaXRzLmh0bWwjcmV0dXJuaW5nLXR5cGVzLXRoYXQtaW1wbGVtZW50LXRyYWl0cwpFMDc2MCMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCmBhc3luYyBmbmAvYGltcGwgdHJhaXRgIHJldHVybiB0eXBlIGNhbm5vdCBjb250YWluIGEgcHJvamVjdGlvbgpvciBgU2VsZmAgdGhhdCByZWZlcmVuY2VzIGxpZmV0aW1lcyBmcm9tIGEgcGFyZW50IHNjb3BlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxlZGl0aW9uMjAxOApzdHJ1Y3QgUzwnYT4oJidhIGkzMik7CgppbXBsPCdhPiBTPCdhPiB7CiAgICBhc3luYyBmbiBuZXcoaTogJidhIGkzMikgLT4gU2VsZiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciB3ZSBuZWVkIHRvIHNwZWxsIG91dCBgU2VsZmAgdG8gYFM8J2E+YDoKCmBgYGVkaXRpb24yMDE4CnN0cnVjdCBTPCdhPigmJ2EgaTMyKTsKCmltcGw8J2E+IFM8J2E+IHsKICAgIGFzeW5jIGZuIG5ldyhpOiAmJ2EgaTMyKSAtPiBTPCdhPiB7CiAgICAgICAgUygmMjIpCiAgICB9Cn0KYGBgCgpUaGlzIHdpbGwgYmUgYWxsb3dlZCBhdCBzb21lIHBvaW50IGluIHRoZSBmdXR1cmUsCmJ1dCB0aGUgaW1wbGVtZW50YXRpb24gaXMgbm90IHlldCBjb21wbGV0ZS4KU2VlIHRoZSBbaXNzdWUtNjE5NDldIGZvciB0aGlzIGxpbWl0YXRpb24uCgpbaXNzdWUtNjE5NDldOiBodHRwczovL2dpdGh1Yi5jb20vcnVzdC1sYW5nL3J1c3QvaXNzdWVzLzYxOTQ5CkUwNzYxTXVsdGlwbGUgY2FuZGlkYXRlIGZpbGVzIHdlcmUgZm91bmQgZm9yIGFuIG91dC1vZi1saW5lIG1vZHVsZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKE11bHRpcGxlIHNvdXJjZSBmaWxlcyBhcmUgcmVxdWlyZWQgZm9yIGNvbXBpbGVfZmFpbC4pCi8vIGZpbGU6IGFtYmlndW91c19tb2R1bGUvbW9kLnJzCgpmbiBmb28oKSB7fQoKLy8gZmlsZTogYW1iaWd1b3VzX21vZHVsZS5ycwoKZm4gZm9vKCkge30KCi8vIGZpbGU6IGxpYi5ycwoKbW9kIGFtYmlndW91c19tb2R1bGU7IC8vIGVycm9yOiBmaWxlIGZvciBtb2R1bGUgYGFtYmlndW91c19tb2R1bGVgCiAgICAgICAgICAgICAgICAgICAgICAvLyBmb3VuZCBhdCBib3RoIGFtYmlndW91c19tb2R1bGUucnMgYW5kCiAgICAgICAgICAgICAgICAgICAgICAvLyBhbWJpZ3VvdXNfbW9kdWxlLnJzL21vZC5ycwpgYGAKClBsZWFzZSByZW1vdmUgdGhpcyBhbWJpZ3VpdHkgYnkgZGVsZXRpbmcvcmVuYW1pbmcgb25lIG9mIHRoZSBjYW5kaWRhdGUgZmlsZXMuCkUwNzYyQSBjaGFyYWN0ZXIgbGl0ZXJhbCB3YXNuJ3QgZW5kZWQgd2l0aCBhIHF1b3RlLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MgpzdGF0aWMgQzogY2hhciA9ICfil487IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgcXVvdGU6CgpgYGAKc3RhdGljIEM6IGNoYXIgPSAn4pePJzsgLy8gb2shCmBgYApFMDc2M0EgYnl0ZSBjb25zdGFudCB3YXNuJ3QgY29ycmVjdGx5IGVuZGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2MwpsZXQgYyA9IGInYTsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBxdW90ZToKCmBgYApsZXQgYyA9IGInYSc7IC8vIG9rIQpgYGAKRTA3NjRBIG11dGFibGUgcmVmZXJlbmNlIHdhcyB1c2VkIGluIGEgY29uc3RhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY0CiMhW2ZlYXR1cmUoY29uc3RfbXV0X3JlZnMpXQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IE9IX05POiAmJ3N0YXRpYyBtdXQgdXNpemUgPSAmbXV0IDE7IC8vIGVycm9yIQp9CmBgYAoKTXV0YWJsZSByZWZlcmVuY2VzIChgJm11dGApIGNhbiBvbmx5IGJlIHVzZWQgaW4gY29uc3RhbnQgZnVuY3Rpb25zLCBub3Qgc3RhdGljcwpvciBjb25zdGFudHMuIFRoaXMgbGltaXRhdGlvbiBleGlzdHMgdG8gcHJldmVudCB0aGUgY3JlYXRpb24gb2YgY29uc3RhbnRzIHRoYXQKaGF2ZSBhIG11dGFibGUgcmVmZXJlbmNlIGluIHRoZWlyIGZpbmFsIHZhbHVlLiBJZiB5b3UgaGFkIGEgY29uc3RhbnQgb2YKYCZtdXQgaTMyYCB0eXBlLCB5b3UgY291bGQgbW9kaWZ5IHRoZSB2YWx1ZSB0aHJvdWdoIHRoYXQgcmVmZXJlbmNlLCBtYWtpbmcgdGhlCmNvbnN0YW50IGVzc2VudGlhbGx5IG11dGFibGUuCgpXaGlsZSB0aGVyZSBjb3VsZCBiZSBhIG1vcmUgZmluZS1ncmFpbmVkIHNjaGVtZSBpbiB0aGUgZnV0dXJlIHRoYXQgYWxsb3dzCm11dGFibGUgcmVmZXJlbmNlcyBpZiB0aGV5IGFyZSBub3QgImxlYWtlZCIgdG8gdGhlIGZpbmFsIHZhbHVlLCBhIG1vcmUKY29uc2VydmF0aXZlIGFwcHJvYWNoIHdhcyBjaG9zZW4gZm9yIG5vdy4gYGNvbnN0IGZuYCBkbyBub3QgaGF2ZSB0aGlzIHByb2JsZW0sCmFzIHRoZSBib3Jyb3cgY2hlY2tlciB3aWxsIHByZXZlbnQgdGhlIGBjb25zdCBmbmAgZnJvbSByZXR1cm5pbmcgbmV3IG11dGFibGUKcmVmZXJlbmNlcy4KClJlbWVtYmVyOiB5b3UgY2Fubm90IHVzZSBhIGZ1bmN0aW9uIGNhbGwgaW5zaWRlIGEgY29uc3RhbnQgb3Igc3RhdGljLiBIb3dldmVyLAp5b3UgY2FuIHRvdGFsbHkgdXNlIGl0IGluIGNvbnN0YW50IGZ1bmN0aW9uczoKCmBgYAojIVtmZWF0dXJlKGNvbnN0X211dF9yZWZzKV0KCmNvbnN0IGZuIGZvbyh4OiB1c2l6ZSkgLT4gdXNpemUgewogICAgbGV0IG11dCB5ID0gMTsKICAgIGxldCB6ID0gJm11dCB5OwogICAgKnogKz0geDsKICAgIHkKfQoKZm4gbWFpbigpIHsKICAgIGNvbnN0IEZPTzogdXNpemUgPSBmb28oMTApOyAvLyBvayEKfQpgYGAKRTA3NjVBIGRvdWJsZSBxdW90ZSBzdHJpbmcgKGAiYCkgd2FzIG5vdCB0ZXJtaW5hdGVkLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc2NQpsZXQgcyA9ICI7IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBhZGQgdGhlIG1pc3NpbmcgZG91YmxlIHF1b3RlIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZzoKCmBgYApsZXQgcyA9ICIiOyAvLyBvayEKYGBgCkUwNzY2QSBkb3VibGUgcXVvdGUgYnl0ZSBzdHJpbmcgKGBiImApIHdhcyBub3QgdGVybWluYXRlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NjYKbGV0IHMgPSBiIjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkb3VibGUgcXVvdGUgYXQgdGhlIGVuZCBvZiB0aGUgc3RyaW5nOgoKYGBgCmxldCBzID0gYiIiOyAvLyBvayEKYGBgCkUwNzY3QW4gdW5yZWFjaGFibGUgbGFiZWwgd2FzIHVzZWQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY3CidhOiBsb29wIHsKICAgIHx8IHsKICAgICAgICBsb29wIHsgYnJlYWsgJ2EgfSAvLyBlcnJvcjogdXNlIG9mIHVucmVhY2hhYmxlIGxhYmVsIGAnYWAKICAgIH07Cn0KYGBgCgpFbnN1cmUgdGhhdCB0aGUgbGFiZWwgaXMgd2l0aGluIHNjb3BlLiBMYWJlbHMgYXJlIG5vdCByZWFjaGFibGUgdGhyb3VnaApmdW5jdGlvbnMsIGNsb3N1cmVzLCBhc3luYyBibG9ja3Mgb3IgbW9kdWxlcy4gRXhhbXBsZToKCmBgYAonYTogbG9vcCB7CiAgICBicmVhayAnYTsgLy8gb2shCn0KYGBgCkUwNzY4QSBudW1iZXIgaW4gYSBub24tZGVjaW1hbCBiYXNlIGhhcyBubyBkaWdpdHMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY4CmxldCBzOiBpMzIgPSAwYjsgLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGFkZCB0aGUgbWlzc2luZyBkaWdpdHM6CgpgYGAKbGV0IHM6IGkzMiA9IDBiMTsgLy8gb2shCmBgYApFMDc2OUEgdHVwbGUgc3RydWN0IG9yIHR1cGxlIHZhcmlhbnQgd2FzIHVzZWQgaW4gYSBwYXR0ZXJuIGFzIGlmIGl0IHdlcmUgYSBzdHJ1Y3Qgb3IKc3RydWN0IHZhcmlhbnQuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzY5CmVudW0gRSB7CiAgICBBKGkzMiksCn0KCmxldCBlID0gRTo6QSg0Mik7CgptYXRjaCBlIHsKICAgIEU6OkEgeyBudW1iZXIgfSA9PiB7IC8vIGVycm9yIQogICAgICAgIHByaW50bG4hKCJ7fSIsIG51bWJlcik7CiAgICB9Cn0KYGBgCgpUbyBmaXggdGhpcyBlcnJvciwgeW91IGNhbiB1c2UgdGhlIHR1cGxlIHBhdHRlcm46CgpgYGAKIyBlbnVtIEUgewojICAgICBBKGkzMiksCiMgfQojIGxldCBlID0gRTo6QSg0Mik7Cm1hdGNoIGUgewogICAgRTo6QShudW1iZXIpID0+IHsgLy8gb2shCiAgICAgICAgcHJpbnRsbiEoInt9IiwgbnVtYmVyKTsKICAgIH0KfQpgYGAKCkFsdGVybmF0aXZlbHksIHlvdSBjYW4gYWxzbyB1c2UgdGhlIHN0cnVjdCBwYXR0ZXJuIGJ5IHVzaW5nIHRoZSBjb3JyZWN0IGZpZWxkCm5hbWVzIGFuZCBiaW5kaW5nIHRoZW0gdG8gbmV3IGlkZW50aWZpZXJzOgoKYGBgCiMgZW51bSBFIHsKIyAgICAgQShpMzIpLAojIH0KIyBsZXQgZSA9IEU6OkEoNDIpOwptYXRjaCBlIHsKICAgIEU6OkEgeyAwOiBudW1iZXIgfSA9PiB7IC8vIG9rIQogICAgICAgIHByaW50bG4hKCJ7fSIsIG51bWJlcik7CiAgICB9Cn0KYGBgCkUwNzcwVGhlIHR5cGUgb2YgYSBjb25zdCBwYXJhbWV0ZXIgcmVmZXJlbmNlcyBvdGhlciBnZW5lcmljIHBhcmFtZXRlcnMuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzcwCmZuIGZvbzxULCBjb25zdCBOOiBUPigpIHt9IC8vIGVycm9yIQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCB1c2UgYSBjb25jcmV0ZSB0eXBlIGZvciB0aGUgY29uc3QgcGFyYW1ldGVyOgoKYGBgCmZuIGZvbzxULCBjb25zdCBOOiB1c2l6ZT4oKSB7fQpgYGAKRTA3NzFBIG5vbi1gJ3N0YXRpY2AgbGlmZXRpbWUgd2FzIHVzZWQgaW4gYSBjb25zdCBnZW5lcmljLiBUaGlzIGlzIGN1cnJlbnRseSBub3QKYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzEKIyFbZmVhdHVyZShhZHRfY29uc3RfcGFyYW1zKV0KCmZuIGZ1bmN0aW9uX3dpdGhfc3RyPCdhLCBjb25zdCBTVFJJTkc6ICYnYSBzdHI+KCkge30gLy8gZXJyb3IhCmBgYAoKVG8gZml4IHRoaXMgaXNzdWUsIHRoZSBsaWZldGltZSBpbiB0aGUgY29uc3QgZ2VuZXJpYyBuZWVkIHRvIGJlIGNoYW5nZWQgdG8KYCdzdGF0aWNgOgoKYGBgCiMhW2ZlYXR1cmUoYWR0X2NvbnN0X3BhcmFtcyldCgpmbiBmdW5jdGlvbl93aXRoX3N0cjxjb25zdCBTVFJJTkc6ICYnc3RhdGljIHN0cj4oKSB7fSAvLyBvayEKYGBgCgpGb3IgbW9yZSBpbmZvcm1hdGlvbiwgc2VlIFtHaXRIdWIgaXNzdWUgIzc0MDUyXS4KCltHaXRIdWIgaXNzdWUgIzc0MDUyXTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L2lzc3Vlcy83NDA1MgpFMDc3MiMjIyMgTm90ZTogdGhpcyBlcnJvciBjb2RlIGlzIG5vIGxvbmdlciBlbWl0dGVkIGJ5IHRoZSBjb21waWxlci4KCkEgdHJhaXQgb2JqZWN0IGhhcyBzb21lIHNwZWNpZmljIGxpZmV0aW1lIGAnMWAsIGJ1dCBpdCB3YXMgdXNlZCBpbiBhIHdheSB0aGF0CnJlcXVpcmVzIGl0IHRvIGhhdmUgYSBgJ3N0YXRpY2AgbGlmZXRpbWUuCgpFeGFtcGxlIG9mIGVycm9uZW91cyBjb2RlOgoKYGBgY29tcGlsZV9mYWlsCnRyYWl0IEJvb2xlYW5MaWtlIHt9CnRyYWl0IFBlcnNvbiB7fQoKaW1wbCBCb29sZWFuTGlrZSBmb3IgYm9vbCB7fQoKaW1wbCBkeW4gUGVyc29uIHsKICAgIGZuIGlzX2Nvb2woJnNlbGYpIC0+IGJvb2wgewogICAgICAgIC8vIGhleSB5b3UsIHlvdSdyZSBwcmV0dHkgY29vbAogICAgICAgIHRydWUKICAgIH0KfQoKZm4gZ2V0X2lzX2Nvb2w8J3A+KHBlcnNvbjogJidwIGR5biBQZXJzb24pIC0+IGltcGwgQm9vbGVhbkxpa2UgewogICAgLy8gZXJyb3I6IGBwZXJzb25gIGhhcyBhbiBhbm9ueW1vdXMgbGlmZXRpbWUgYCdwYCBidXQgY2FsbGluZwogICAgLy8gICAgICAgIGBwcmludF9jb29sX2ZuYCBpbnRyb2R1Y2VzIGFuIGltcGxpY2l0IGAnc3RhdGljYCBsaWZldGltZQogICAgLy8gICAgICAgIHJlcXVpcmVtZW50CiAgICBwZXJzb24uaXNfY29vbCgpCn0KYGBgCgpUaGUgdHJhaXQgb2JqZWN0IGBwZXJzb25gIGluIHRoZSBmdW5jdGlvbiBgZ2V0X2lzX2Nvb2xgLCB3aGlsZSBhbHJlYWR5IGJlaW5nCmJlaGluZCBhIHJlZmVyZW5jZSB3aXRoIGxpZmV0aW1lIGAncGAsIGFsc28gaGFzIGl0J3Mgb3duIGltcGxpY2l0IGxpZmV0aW1lLApgJzJgLgoKTGlmZXRpbWUgYCcyYCByZXByZXNlbnRzIHRoZSBkYXRhIHRoZSB0cmFpdCBvYmplY3QgbWlnaHQgaG9sZCBpbnNpZGUsIGZvcgpleGFtcGxlOgoKYGBgCnRyYWl0IE15VHJhaXQge30KCnN0cnVjdCBNeVN0cnVjdDwnYT4oJidhIGkzMik7CgppbXBsPCdhPiBNeVRyYWl0IGZvciBNeVN0cnVjdDwnYT4ge30KYGBgCgpXaXRoIHRoaXMgc2NlbmFyaW8sIGlmIGEgdHJhaXQgb2JqZWN0IG9mIGBkeW4gTXlUcmFpdCArICcyYCB3YXMgbWFkZSBmcm9tCmBNeVN0cnVjdDwnYT5gLCBgJ2FgIG11c3QgbGl2ZSBhcyBsb25nLCBpZiBub3QgbG9uZ2VyIHRoYW4gYCcyYC4gVGhpcyBhbGxvd3MgdGhlCnRyYWl0IG9iamVjdCdzIGludGVybmFsIGRhdGEgdG8gYmUgYWNjZXNzZWQgc2FmZWx5IGZyb20gYW55IHRyYWl0IG1ldGhvZHMuIFRoaXMKcnVsZSBhbHNvIGdvZXMgZm9yIGFueSBsaWZldGltZSBhbnkgc3RydWN0IG1hZGUgaW50byBhIHRyYWl0IG9iamVjdCBtYXkgaGF2ZS4KCkluIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgYGR5biBQZXJzb25gLCB0aGUgYCcyYCBsaWZldGltZSByZXByZXNlbnRpbmcgdGhlCmludGVybmFsIGRhdGEgd2FzIG9taXR0ZWQsIG1lYW5pbmcgdGhhdCB0aGUgY29tcGlsZXIgaW5mZXJyZWQgdGhlIGxpZmV0aW1lCmAnc3RhdGljYC4gQXMgYSByZXN1bHQsIHRoZSBpbXBsZW1lbnRhdGlvbidzIGBpc19jb29sYCBpcyBpbmZlcnJlZCBieSB0aGUKY29tcGlsZXIgdG8gbG9vayBsaWtlIHRoaXM6CgpgYGAKIyB0cmFpdCBQZXJzb24ge30KIwojIGltcGwgZHluIFBlcnNvbiB7CmZuIGlzX2Nvb2w8J2E+KHNlbGY6ICYnYSAoZHluIFBlcnNvbiArICdzdGF0aWMpKSAtPiBib29sIHt1bmltcGxlbWVudGVkISgpfQojIH0KYGBgCgpXaGlsZSB0aGUgYGdldF9pc19jb29sYCBmdW5jdGlvbiBpcyBpbmZlcnJlZCB0byBsb29rIGxpa2UgdGhpczoKCmBgYAojIHRyYWl0IFBlcnNvbiB7fQojIHRyYWl0IEJvb2xlYW5MaWtlIHt9CiMKZm4gZ2V0X2lzX2Nvb2w8J3AsIFI6IEJvb2xlYW5MaWtlPihwZXJzb246ICYncCAoZHluIFBlcnNvbiArICdwKSkgLT4gUiB7CiAgICB1bmltcGxlbWVudGVkISgpCn0KYGBgCgpXaGljaCBicmluZ3MgdXMgdG8gdGhlIGNvcmUgb2YgdGhlIHByb2JsZW07IHRoZSBhc3NpZ25tZW50IG9mIHR5cGUKYCYnXyAoZHluIFBlcnNvbiArICdfKWAgdG8gdHlwZSBgJidfIChkeW4gUGVyc29uICsgJ3N0YXRpYylgIGlzIGltcG9zc2libGUuCgpGaXhpbmcgaXQgaXMgYXMgc2ltcGxlIGFzIGJlaW5nIGdlbmVyaWMgb3ZlciBsaWZldGltZSBgJzJgLCBhcyB0byBwcmV2ZW50IHRoZQpjb21waWxlciBmcm9tIGluZmVycmluZyBpdCBhcyBgJ3N0YXRpY2A6CgpgYGAKIyB0cmFpdCBQZXJzb24ge30KIwppbXBsPCdkPiBkeW4gUGVyc29uICsgJ2Qgey8qIC4uLiAqL30KCi8vIFRoaXMgd29ya3MgdG9vLCBhbmQgaXMgbW9yZSBlbGVnYW50OgovL2ltcGwgZHluIFBlcnNvbiArICdfIHsvKiAuLi4gKi99CmBgYAoKU2VlIHRoZSBbUnVzdCBSZWZlcmVuY2Ugb24gVHJhaXQgT2JqZWN0IExpZmV0aW1lIEJvdW5kc11bdHJhaXQtb2JqZWN0c10gZm9yCm1vcmUgaW5mb3JtYXRpb24gb24gdHJhaXQgb2JqZWN0IGxpZmV0aW1lcy4KClt0cmFpdC1vYmplY3QtbGlmZXRpbWUtYm91bmRzXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvdHlwZXMvdHJhaXQtb2JqZWN0Lmh0bWwjdHJhaXQtb2JqZWN0LWxpZmV0aW1lLWJvdW5kcwpFMDc3M0EgYnVpbHRpbi1tYWNybyB3YXMgZGVmaW5lZCBtb3JlIHRoYW4gb25jZS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzMKIyFbZmVhdHVyZShkZWNsX21hY3JvKV0KIyFbZmVhdHVyZShydXN0Y19hdHRycyldCgojW3J1c3RjX2J1aWx0aW5fbWFjcm9dCnB1YiBtYWNybyB0ZXN0KCRpdGVtOml0ZW0pIHsKICAgIC8qIGNvbXBpbGVyIGJ1aWx0LWluICovCn0KCm1vZCBpbm5lciB7CiAgICAjW3J1c3RjX2J1aWx0aW5fbWFjcm9dCiAgICBwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAgICAgLyogY29tcGlsZXIgYnVpbHQtaW4gKi8KICAgIH0KfQpgYGAKClRvIGZpeCB0aGUgaXNzdWUsIHJlbW92ZSB0aGUgZHVwbGljYXRlIGRlY2xhcmF0aW9uOgoKYGBgCiMhW2ZlYXR1cmUoZGVjbF9tYWNybyldCiMhW2ZlYXR1cmUocnVzdGNfYXR0cnMpXQoKI1tydXN0Y19idWlsdGluX21hY3JvXQpwdWIgbWFjcm8gdGVzdCgkaXRlbTppdGVtKSB7CiAgICAvKiBjb21waWxlciBidWlsdC1pbiAqLwp9CmBgYAoKSW4gdmVyeSByYXJlIGVkZ2UgY2FzZXMsIHRoaXMgbWF5IGhhcHBlbiB3aGVuIGxvYWRpbmcgYGNvcmVgIG9yIGBzdGRgIHR3aWNlLApvbmNlIHdpdGggYGNoZWNrYCBtZXRhZGF0YSBhbmQgb25jZSB3aXRoIGBidWlsZGAgbWV0YWRhdGEuCkZvciBtb3JlIGluZm9ybWF0aW9uLCBzZWUgWyM3NTE3Nl0uCgpbIzc1MTc2XTogaHR0cHM6Ly9naXRodWIuY29tL3J1c3QtbGFuZy9ydXN0L3B1bGwvNzUxNzYjaXNzdWVjb21tZW50LTY4MzIzNDQ2OApFMDc3NGBkZXJpdmVgIHdhcyBhcHBsaWVkIG9uIHNvbWV0aGluZyB3aGljaCBpcyBub3QgYSBzdHJ1Y3QsIGEgdW5pb24gb3IgYW4gZW51bS4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzQKdHJhaXQgRm9vIHsKICAgICNbZGVyaXZlKENsb25lKV0gLy8gZXJyb3IhCiAgICB0eXBlIEJhcjsKfQpgYGAKCkFzIHNhaWQgYWJvdmUsIHRoZSBgZGVyaXZlYCBhdHRyaWJ1dGUgaXMgb25seSBhbGxvd2VkIG9uIHN0cnVjdHMsIHVuaW9ucyBvcgplbnVtczoKCmBgYAojW2Rlcml2ZShDbG9uZSldIC8vIG9rIQpzdHJ1Y3QgQmFyIHsKICAgIGZpZWxkOiB1MzIsCn0KYGBgCgpZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBgZGVyaXZlYCBpbiB0aGUgW1J1c3QgQm9va10uCgpbUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAzLWRlcml2YWJsZS10cmFpdHMuaHRtbApFMDc3NWAjW2Ntc2Vfbm9uc2VjdXJlX2VudHJ5XWAgaXMgb25seSB2YWxpZCBmb3IgdGFyZ2V0cyB3aXRoIHRoZSBUcnVzdFpvbmUtTQpleHRlbnNpb24uCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc1CiMhW2ZlYXR1cmUoY21zZV9ub25zZWN1cmVfZW50cnkpXQoKI1tjbXNlX25vbnNlY3VyZV9lbnRyeV0KcHViIGV4dGVybiAiQyIgZm4gZW50cnlfZnVuY3Rpb24oKSB7fQpgYGAKClRvIGZpeCB0aGlzIGVycm9yLCBjb21waWxlIHlvdXIgY29kZSBmb3IgYSBSdXN0IHRhcmdldCB0aGF0IHN1cHBvcnRzIHRoZQpUcnVzdFpvbmUtTSBleHRlbnNpb24uIFRoZSBjdXJyZW50IHBvc3NpYmxlIHRhcmdldHMgYXJlOgoqIGB0aHVtYnY4bS5tYWluLW5vbmUtZWFiaWAKKiBgdGh1bWJ2OG0ubWFpbi1ub25lLWVhYmloZmAKKiBgdGh1bWJ2OG0uYmFzZS1ub25lLWVhYmlgCkUwNzc2YCNbY21zZV9ub25zZWN1cmVfZW50cnldYCBmdW5jdGlvbnMgcmVxdWlyZSBhIEMgQUJJCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc2CiMhW2ZlYXR1cmUoY21zZV9ub25zZWN1cmVfZW50cnkpXQoKI1tub19tYW5nbGVdCiNbY21zZV9ub25zZWN1cmVfZW50cnldCnB1YiBmbiBlbnRyeV9mdW5jdGlvbihpbnB1dDogVmVjPHUzMj4pIHt9CmBgYAoKVG8gZml4IHRoaXMgZXJyb3IsIGRlY2xhcmUgeW91ciBlbnRyeSBmdW5jdGlvbiB3aXRoIGEgQyBBQkksIHVzaW5nIGBleHRlcm4gIkMiYC4KRTA3NzdBIGxpdGVyYWwgdmFsdWUgd2FzIHVzZWQgaW5zaWRlIGAjW2Rlcml2ZV1gLgoKRXJyb25lb3VzIGNvZGUgZXhhbXBsZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc3NwojW2Rlcml2ZSgiQ2xvbmUiKV0gLy8gZXJyb3IhCnN0cnVjdCBGb287CmBgYAoKT25seSBwYXRocyB0byB0cmFpdHMgYXJlIGFsbG93ZWQgYXMgYXJndW1lbnQgaW5zaWRlIGAjW2Rlcml2ZV1gLiBZb3UgY2FuIGZpbmQKbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgYCNbZGVyaXZlXWAgYXR0cmlidXRlIGluIHRoZSBbUnVzdCBCb29rXS4KCgpgYGAKI1tkZXJpdmUoQ2xvbmUpXSAvLyBvayEKc3RydWN0IEZvbzsKYGBgCgpbUnVzdCBCb29rXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9ib29rL2FwcGVuZGl4LTAzLWRlcml2YWJsZS10cmFpdHMuaHRtbApFMDc3OFRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2FzIG1hbGZvcm1lZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3NzgKIyFbZmVhdHVyZShpc2FfYXR0cmlidXRlKV0KCiNbaW5zdHJ1Y3Rpb25fc2V0KCldIC8vIGVycm9yOiBleHBlY3RlZCBvbmUgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBwYXJlbnRoZXNpemVkIGBpbnN0cnVjdGlvbl9zZXRgIGF0dHJpYnV0ZSByZXF1aXJlcyB0aGUgcGFyYW1ldGVyIHRvIGJlCnNwZWNpZmllZDoKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldCmZuIHNvbWV0aGluZygpIHt9CmBgYAoKb3I6CgpgYGAKIyFbZmVhdHVyZShpc2FfYXR0cmlidXRlKV0KCiNbY2ZnX2F0dHIodGFyZ2V0X2FyY2g9ImFybSIsIGluc3RydWN0aW9uX3NldChhcm06OnQzMikpXQpmbiBzb21ldGhpbmcoKSB7fQpgYGAKCkZvciBtb3JlIGluZm9ybWF0aW9uIHNlZSB0aGUgW2BpbnN0cnVjdGlvbl9zZXRgIGF0dHJpYnV0ZV1baXNhLWF0dHJpYnV0ZV0Kc2VjdGlvbiBvZiB0aGUgUmVmZXJlbmNlLgoKW2lzYS1hdHRyaWJ1dGVdOiBodHRwczovL2RvYy5ydXN0LWxhbmcub3JnL3JlZmVyZW5jZS9hdHRyaWJ1dGVzL2NvZGVnZW4uaHRtbApFMDc3OUFuIHVua25vd24gYXJndW1lbnQgd2FzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUuCgpFcnJvbmVvdXMgY29kZSBleGFtcGxlOgoKYGBgY29tcGlsZV9mYWlsLEUwNzc5CiMhW2ZlYXR1cmUoaXNhX2F0dHJpYnV0ZSldCgojW2luc3RydWN0aW9uX3NldChpbnRlbDo6eDY0KV0gLy8gZXJyb3I6IGludmFsaWQgYXJndW1lbnQKcHViIGZuIHNvbWV0aGluZygpIHt9CmZuIG1haW4oKSB7fQpgYGAKClRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgb25seSBzdXBwb3J0cyB0d28gYXJndW1lbnRzIGN1cnJlbnRseToKCiAqIGFybTo6YTMyCiAqIGFybTo6dDMyCgpBbGwgb3RoZXIgYXJndW1lbnRzIGdpdmVuIHRvIHRoZSBgaW5zdHJ1Y3Rpb25fc2V0YCBhdHRyaWJ1dGUgd2lsbCByZXR1cm4gdGhpcwplcnJvci4gRXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGlzYV9hdHRyaWJ1dGUpXQoKI1tjZmdfYXR0cih0YXJnZXRfYXJjaD0iYXJtIiwgaW5zdHJ1Y3Rpb25fc2V0KGFybTo6YTMyKSldIC8vIG9rIQpwdWIgZm4gc29tZXRoaW5nKCkge30KZm4gbWFpbigpIHt9CmBgYAoKRm9yIG1vcmUgaW5mb3JtYXRpb24gc2VlIHRoZSBbYGluc3RydWN0aW9uX3NldGAgYXR0cmlidXRlXVtpc2EtYXR0cmlidXRlXQpzZWN0aW9uIG9mIHRoZSBSZWZlcmVuY2UuCgpbaXNhLWF0dHJpYnV0ZV06IGh0dHBzOi8vZG9jLnJ1c3QtbGFuZy5vcmcvcmVmZXJlbmNlL2F0dHJpYnV0ZXMvY29kZWdlbi5odG1sCkUwNzgwQ2Fubm90IHVzZSBgZG9jKGlubGluZSlgIHdpdGggYW5vbnltb3VzIGltcG9ydHMKCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKGNhbm5vdC1kb2N0ZXN0LW11bHRpY3JhdGUtcHJvamVjdCkKCiNbZG9jKGlubGluZSldIC8vIGVycm9yOiBpbnZhbGlkIGRvYyBhcmd1bWVudApwdWIgdXNlIGZvbzo6Rm9vIGFzIF87CmBgYAoKQW5vbnltb3VzIGltcG9ydHMgYXJlIGFsd2F5cyByZW5kZXJlZCB3aXRoIGAjW2RvYyhub19pbmxpbmUpXWAuIFRvIGZpeCB0aGlzCmVycm9yLCByZW1vdmUgdGhlIGAjW2RvYyhpbmxpbmUpXWAgYXR0cmlidXRlLgoKRXhhbXBsZToKCmBgYGlnbm9yZSAoY2Fubm90LWRvY3Rlc3QtbXVsdGljcmF0ZS1wcm9qZWN0KQoKcHViIHVzZSBmb286OkZvbyBhcyBfOwpgYGAKRTA3ODFUaGUgYEMtY21zZS1ub25zZWN1cmUtY2FsbGAgQUJJIGNhbiBvbmx5IGJlIHVzZWQgd2l0aCBmdW5jdGlvbiBwb2ludGVycy4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODEKIyFbZmVhdHVyZShhYmlfY19jbXNlX25vbnNlY3VyZV9jYWxsKV0KCnB1YiBleHRlcm4gIkMtY21zZS1ub25zZWN1cmUtY2FsbCIgZm4gdGVzdCgpIHt9CmBgYAoKVGhlIGBDLWNtc2Utbm9uc2VjdXJlLWNhbGxgIEFCSSBzaG91bGQgYmUgdXNlZCBieSBjYXN0aW5nIGZ1bmN0aW9uIHBvaW50ZXJzIHRvCnNwZWNpZmljIGFkZHJlc3Nlcy4KRTA3ODJUcmFpdCBvYmplY3RzIG11c3QgaW5jbHVkZSB0aGUgYGR5bmAga2V5d29yZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAyMSxjb21waWxlX2ZhaWwsRTA3ODIKdHJhaXQgRm9vIHt9CmZuIHRlc3QoYXJnOiBCb3g8Rm9vPikge30gLy8gZXJyb3IhCmBgYAoKVHJhaXQgb2JqZWN0cyBhcmUgYSB3YXkgdG8gY2FsbCBtZXRob2RzIG9uIHR5cGVzIHRoYXQgYXJlIG5vdCBrbm93biB1bnRpbApydW50aW1lIGJ1dCBjb25mb3JtIHRvIHNvbWUgdHJhaXQuCgpUcmFpdCBvYmplY3RzIHNob3VsZCBiZSBmb3JtZWQgd2l0aCBgQm94PGR5biBGb28+YCwgYnV0IGluIHRoZSBjb2RlIGFib3ZlCmBkeW5gIGlzIGxlZnQgb2ZmLgoKVGhpcyBtYWtlcyBpdCBoYXJkZXIgdG8gc2VlIHRoYXQgYGFyZ2AgaXMgYSB0cmFpdCBvYmplY3QgYW5kIG5vdCBhCnNpbXBseSBhIGhlYXAgYWxsb2NhdGVkIHR5cGUgY2FsbGVkIGBGb29gLgoKVG8gZml4IHRoaXMgaXNzdWUsIGFkZCBgZHluYCBiZWZvcmUgdGhlIHRyYWl0IG5hbWUuCgpgYGBlZGl0aW9uMjAyMQp0cmFpdCBGb28ge30KZm4gdGVzdChhcmc6IEJveDxkeW4gRm9vPikge30gLy8gb2shCmBgYAoKVGhpcyB1c2VkIHRvIGJlIGFsbG93ZWQgYmVmb3JlIGVkaXRpb24gMjAyMSwgYnV0IGlzIG5vdyBhbiBlcnJvci4KRTA3ODNUaGUgcmFuZ2UgcGF0dGVybiBgLi4uYCBpcyBubyBsb25nZXIgYWxsb3dlZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBlZGl0aW9uMjAyMSxjb21waWxlX2ZhaWwsRTA3ODMKbWF0Y2ggMnU4IHsKICAgIDAuLi45ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIGVycm9yIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKCk9sZGVyIFJ1c3QgY29kZSB1c2luZyBwcmV2aW91cyBlZGl0aW9ucyBhbGxvd2VkIGAuLi5gIHRvIHN0YW5kIGZvciBleGNsdXNpdmUKcmFuZ2VzIHdoaWNoIGFyZSBub3cgc2lnbmlmaWVkIHVzaW5nIGAuLj1gLgoKVG8gbWFrZSB0aGlzIGNvZGUgY29tcGlsZSByZXBsYWNlIHRoZSBgLi4uYCB3aXRoIGAuLj1gLgoKYGBgZWRpdGlvbjIwMjEKbWF0Y2ggMnU4IHsKICAgIDAuLj05ID0+IHByaW50bG4hKCJHb3QgYSBudW1iZXIgbGVzcyB0aGFuIDEwIiksIC8vIG9rIQogICAgXyA9PiBwcmludGxuISgiR290IGEgbnVtYmVyIDEwIG9yIG1vcmUiKSwKfQpgYGAKRTA3ODRBIHVuaW9uIGV4cHJlc3Npb24gZG9lcyBub3QgaGF2ZSBleGFjdGx5IG9uZSBmaWVsZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODQKdW5pb24gQmlyZCB7CiAgICBwaWdlb246IHU4LAogICAgdHVydGxlZG92ZTogdTE2LAp9CgpsZXQgYmlyZCA9IEJpcmQge307IC8vIGVycm9yCmxldCBiaXJkID0gQmlyZCB7IHBpZ2VvbjogMCwgdHVydGxlZG92ZTogMSB9OyAvLyBlcnJvcgpgYGAKClRoZSBrZXkgcHJvcGVydHkgb2YgdW5pb25zIGlzIHRoYXQgYWxsIGZpZWxkcyBvZiBhIHVuaW9uIHNoYXJlIGNvbW1vbiBzdG9yYWdlLgpBcyBhIHJlc3VsdCwgd3JpdGVzIHRvIG9uZSBmaWVsZCBvZiBhIHVuaW9uIGNhbiBvdmVyd3JpdGUgaXRzIG90aGVyIGZpZWxkcywgYW5kCnNpemUgb2YgYSB1bmlvbiBpcyBkZXRlcm1pbmVkIGJ5IHRoZSBzaXplIG9mIGl0cyBsYXJnZXN0IGZpZWxkLgoKWW91IGNhbiBmaW5kIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHVuaW9uIHR5cGVzIGluIHRoZSBbUnVzdCByZWZlcmVuY2VdLgoKV29ya2luZyBleGFtcGxlOgoKYGBgCnVuaW9uIEJpcmQgewogICAgcGlnZW9uOiB1OCwKICAgIHR1cnRsZWRvdmU6IHUxNiwKfQoKbGV0IGJpcmQgPSBCaXJkIHsgcGlnZW9uOiAwIH07IC8vIE9LCmBgYAoKW1J1c3QgcmVmZXJlbmNlXTogaHR0cHM6Ly9kb2MucnVzdC1sYW5nLm9yZy9yZWZlcmVuY2UvaXRlbXMvdW5pb25zLmh0bWwKRTA3ODVBbiBpbmhlcmVudCBgaW1wbGAgd2FzIHdyaXR0ZW4gb24gYSBkeW4gYXV0byB0cmFpdC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODUKIyFbZmVhdHVyZShhdXRvX3RyYWl0cyldCgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gQXV0b1RyYWl0IHt9CmBgYAoKRHluIG9iamVjdHMgYWxsb3cgYW55IG51bWJlciBvZiBhdXRvIHRyYWl0cywgcGx1cyBhdCBtb3N0IG9uZSBub24tYXV0byB0cmFpdC4KVGhlIG5vbi1hdXRvIHRyYWl0IGJlY29tZXMgdGhlICJwcmluY2lwYWwgdHJhaXQiLgoKV2hlbiBjaGVja2luZyBpZiBhbiBpbXBsIG9uIGEgZHluIHRyYWl0IGlzIGNvaGVyZW50LCB0aGUgcHJpbmNpcGFsIHRyYWl0IGlzCm5vcm1hbGx5IHRoZSBvbmx5IG9uZSBjb25zaWRlcmVkLiBTaW5jZSB0aGUgZXJyb25lb3VzIGNvZGUgaGFzIG5vIHByaW5jaXBhbAp0cmFpdCwgaXQgY2Fubm90IGJlIGltcGxlbWVudGVkIGF0IGFsbC4KCldvcmtpbmcgZXhhbXBsZToKCmBgYAojIVtmZWF0dXJlKGF1dG9fdHJhaXRzKV0KCnRyYWl0IFByaW5jaXBhbFRyYWl0IHt9CgphdXRvIHRyYWl0IEF1dG9UcmFpdCB7fQoKaW1wbCBkeW4gUHJpbmNpcGFsVHJhaXQgKyBBdXRvVHJhaXQgKyBTZW5kIHt9CmBgYApFMDc4NkEgbWV0YWRhdGEgZmlsZSB3YXMgaW52YWxpZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBpZ25vcmUgKG5lZWRzIGV4dGVybiBmaWxlcykKdXNlIDo6Zm9vOyAvLyBlcnJvcjogZm91bmQgaW52YWxpZCBtZXRhZGF0YSBmaWxlcyBmb3IgY3JhdGUgYGZvb2AKYGBgCgpXaGVuIGxvYWRpbmcgY3JhdGVzLCBlYWNoIGNyYXRlIG11c3QgaGF2ZSBhIHZhbGlkIG1ldGFkYXRhIGZpbGUuCkludmFsaWQgZmlsZXMgY291bGQgYmUgY2F1c2VkIGJ5IGZpbGVzeXN0ZW0gY29ycnVwdGlvbiwKYW4gSU8gZXJyb3Igd2hpbGUgcmVhZGluZyB0aGUgZmlsZSwgb3IgKHJhcmVseSkgYSBidWcgaW4gdGhlIGNvbXBpbGVyIGl0c2VsZi4KCkNvbnNpZGVyIGRlbGV0aW5nIHRoZSBmaWxlIGFuZCByZWNyZWF0aW5nIGl0LApvciByZXBvcnRpbmcgYSBidWcgYWdhaW5zdCB0aGUgY29tcGlsZXIuCkUwNzg3QW4gdW5zdXBwb3J0ZWQgbmFrZWQgZnVuY3Rpb24gZGVmaW5pdGlvbi4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3ODcKIyFbZmVhdHVyZShuYWtlZF9mdW5jdGlvbnMpXQoKI1tuYWtlZF0KcHViIGV4dGVybiAiQyIgZm4gZigpIC0+IHUzMiB7CiAgICA0Mgp9CmBgYAoKVGhlIG5ha2VkIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgdXNpbmcgYSBzaW5nbGUgaW5saW5lIGFzc2VtYmx5CmJsb2NrLgoKVGhlIGV4ZWN1dGlvbiBtdXN0IG5ldmVyIGZhbGwgdGhyb3VnaCBwYXN0IHRoZSBlbmQgb2YgdGhlIGFzc2VtYmx5CmNvZGUgc28gdGhlIGJsb2NrIG11c3QgdXNlIGBub3JldHVybmAgb3B0aW9uLiBUaGUgYXNtIGJsb2NrIGNhbiBhbHNvCnVzZSBgYXR0X3N5bnRheGAgYW5kIGByYXdgIG9wdGlvbnMsIGJ1dCBvdGhlcnMgb3B0aW9ucyBhcmUgbm90IGFsbG93ZWQuCgpUaGUgYXNtIGJsb2NrIG11c3Qgbm90IGNvbnRhaW4gYW55IG9wZXJhbmRzIG90aGVyIHRoYW4gYGNvbnN0YCBhbmQKYHN5bWAuCgojIyMgQWRkaXRpb25hbCBpbmZvcm1hdGlvbgoKRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgW1JGQyAyOTcyXS4KCltSRkMgMjk3Ml06IGh0dHBzOi8vZ2l0aHViLmNvbS9ydXN0LWxhbmcvcmZjcy9ibG9iL21hc3Rlci90ZXh0LzI5NzItY29uc3RyYWluZWQtbmFrZWQubWQKRTA3ODhBIGAjW25vX2NvdmVyYWdlXWAgYXR0cmlidXRlIHdhcyBhcHBsaWVkIHRvIHNvbWV0aGluZyB3aGljaCBkb2VzIG5vdCBzaG93IHVwCmluIGNvZGUgY292ZXJhZ2UsIG9yIGlzIHRvbyBncmFudWxhciB0byBiZSBleGNsdWRlZCBmcm9tIHRoZSBjb3ZlcmFnZSByZXBvcnQuCgpGb3Igbm93LCB0aGlzIGF0dHJpYnV0ZSBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGZ1bmN0aW9uLCBtZXRob2QsIGFuZCBjbG9zdXJlCmRlZmluaXRpb25zLiBJbiB0aGUgZnV0dXJlLCBpdCBtYXkgYmUgYWRkZWQgdG8gc3RhdGVtZW50cywgYmxvY2tzLCBhbmQKZXhwcmVzc2lvbnMsIGFuZCBmb3IgdGhlIHRpbWUgYmVpbmcsIHVzaW5nIHRoaXMgYXR0cmlidXRlIGluIHRob3NlIHBsYWNlcwp3aWxsIGp1c3QgZW1pdCBhbiBgdW51c2VkX2F0dHJpYnV0ZXNgIGxpbnQgaW5zdGVhZCBvZiB0aGlzIGVycm9yLgoKRXhhbXBsZSBvZiBlcnJvbmVvdXMgY29kZToKCmBgYGNvbXBpbGVfZmFpbCxFMDc4OAojW25vX2NvdmVyYWdlXQpzdHJ1Y3QgRm9vOwoKI1tub19jb3ZlcmFnZV0KY29uc3QgRk9POiBGb28gPSBGb287CmBgYAoKYCNbbm9fY292ZXJhZ2VdYCB0ZWxscyB0aGUgY29tcGlsZXIgdG8gbm90IGdlbmVyYXRlIGNvdmVyYWdlIGluc3RydW1lbnRhdGlvbiBmb3IKYSBwaWVjZSBvZiBjb2RlIHdoZW4gdGhlIGAtQyBpbnN0cnVtZW50LWNvdmVyYWdlYCBmbGFnIGlzIHBhc3NlZC4gVGhpbmdzIGxpa2UKc3RydWN0cyBhbmQgY29uc3RzIGFyZSBub3QgY292ZXJhYmxlIGNvZGUsIGFuZCB0aHVzIGNhbm5vdCBkbyBhbnl0aGluZyB3aXRoIHRoaXMKYXR0cmlidXRlLgoKSWYgeW91IHdpc2ggdG8gYXBwbHkgdGhpcyBhdHRyaWJ1dGUgdG8gYWxsIG1ldGhvZHMgaW4gYW4gaW1wbCBvciBtb2R1bGUsCm1hbnVhbGx5IGFubm90YXRlIGVhY2ggbWV0aG9kOyBpdCBpcyBub3QgcG9zc2libGUgdG8gYW5ub3RhdGUgdGhlIGVudGlyZSBpbXBsCndpdGggYSBgI1tub19jb3ZlcmFnZV1gIGF0dHJpYnV0ZS4KRTA3OTBZb3UgbmVlZCB0byBzcGVjaWZ5IGEgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24gb2YgdGhlIHRyYWl0IGluIG9yZGVyIHRvIGNhbGwgdGhlCm1ldGhvZC4KCkVycm9uZW91cyBjb2RlIGV4YW1wbGU6CgpgYGBjb21waWxlX2ZhaWwsRTA3OTAKdHJhaXQgR2VuZXJhdG9yIHsKICAgIGZuIGNyZWF0ZSgpIC0+IHUzMjsKfQoKc3RydWN0IEltcGw7CgppbXBsIEdlbmVyYXRvciBmb3IgSW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAxIH0KfQoKc3RydWN0IEFub3RoZXJJbXBsOwoKaW1wbCBHZW5lcmF0b3IgZm9yIEFub3RoZXJJbXBsIHsKICAgIGZuIGNyZWF0ZSgpIC0+IHUzMiB7IDIgfQp9CgpsZXQgY29udDogdTMyID0gR2VuZXJhdG9yOjpjcmVhdGUoKTsKLy8gZXJyb3IsIGltcG9zc2libGUgdG8gY2hvb3NlIG9uZSBvZiBHZW5lcmF0b3IgdHJhaXQgaW1wbGVtZW50YXRpb24KLy8gU2hvdWxkIGl0IGJlIEltcGwgb3IgQW5vdGhlckltcGwsIG1heWJlIHNvbWV0aGluZyBlbHNlPwpgYGAKClRoaXMgZXJyb3IgY2FuIGJlIHNvbHZlZCBieSBhZGRpbmcgdHlwZSBhbm5vdGF0aW9ucyB0aGF0IHByb3ZpZGUgdGhlIG1pc3NpbmcKaW5mb3JtYXRpb24gdG8gdGhlIGNvbXBpbGVyLiBJbiB0aGlzIGNhc2UsIHRoZSBzb2x1dGlvbiBpcyB0byB1c2UgYSBjb25jcmV0ZQp0eXBlOgoKYGBgCnRyYWl0IEdlbmVyYXRvciB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzI7Cn0KCnN0cnVjdCBBbm90aGVySW1wbDsKCmltcGwgR2VuZXJhdG9yIGZvciBBbm90aGVySW1wbCB7CiAgICBmbiBjcmVhdGUoKSAtPiB1MzIgeyAyIH0KfQoKbGV0IGdlbjEgPSBBbm90aGVySW1wbDo6Y3JlYXRlKCk7CgovLyBpZiB0aGVyZSBhcmUgbXVsdGlwbGUgbWV0aG9kcyB3aXRoIHNhbWUgbmFtZSAoZGlmZmVyZW50IHRyYWl0cykKbGV0IGdlbjIgPSA8QW5vdGhlckltcGwgYXMgR2VuZXJhdG9yPjo6Y3JlYXRlKCk7CmBgYApFMDc5MVN0YXRpYyB2YXJpYWJsZXMgd2l0aCB0aGUgYCNbbGlua2FnZV1gIGF0dHJpYnV0ZSB3aXRoaW4gZXh0ZXJuYWwgYmxvY2tzCm11c3QgaGF2ZSBvbmUgb2YgdGhlIGZvbGxvd2luZyB0eXBlcywgd2hpY2ggYXJlIGVxdWl2YWxlbnQgdG8gYSBudWxsYWJsZQpwb2ludGVyIGluIEM6CgoqIGAqbXV0IFRgIG9yIGAqY29uc3QgVGAsIHdoZXJlIGBUYCBtYXkgYmUgYW55IHR5cGUuCgoqIEFuIGVudW1lcmF0b3IgdHlwZSB3aXRoIG5vIGAjW3JlcHJdYCBhdHRyaWJ1dGUgYW5kIHdpdGggdHdvIHZhcmlhbnRzLCB3aGVyZQogIG9uZSBvZiB0aGUgdmFyaWFudHMgaGFzIG5vIGZpZWxkcywgYW5kIHRoZSBvdGhlciBoYXMgYSBzaW5nbGUgZmllbGQgb2Ygb25lIG9mCiAgdGhlIGZvbGxvd2luZyBub24tbnVsbGFibGUgdHlwZXM6CiAgKiBSZWZlcmVuY2UgdHlwZQogICogRnVuY3Rpb24gcG9pbnRlciB0eXBlCgogIFRoZSB2YXJpYW50cyBjYW4gYXBwZWFyIGluIGVpdGhlciBvcmRlci4KCkZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIGRlY2xhcmF0aW9uIGlzIGludmFsaWQ6CgpgYGBjb21waWxlX2ZhaWwsRTA3OTEKIyFbZmVhdHVyZShsaW5rYWdlKV0KCmV4dGVybiAiQyIgewogICAgI1tsaW5rYWdlID0gImV4dGVybl93ZWFrIl0KICAgIHN0YXRpYyBmb286IGk4Owp9CmBgYAoKVGhlIGZvbGxvd2luZyBkZWNsYXJhdGlvbnMgYXJlIHZhbGlkOgoKYGBgCiMhW2ZlYXR1cmUobGlua2FnZSldCgpleHRlcm4gIkMiIHsKICAgICNbbGlua2FnZSA9ICJleHRlcm5fd2VhayJdCiAgICBzdGF0aWMgZm9vOiBPcHRpb248dW5zYWZlIGV4dGVybiAiQyIgZm4oKT47CgogICAgI1tsaW5rYWdlID0gImV4dGVybl93ZWFrIl0KICAgIHN0YXRpYyBiYXI6IE9wdGlvbjwmJ3N0YXRpYyBpOD47CgogICAgI1tsaW5rYWdlID0gImV4dGVybl93ZWFrIl0KICAgIHN0YXRpYyBiYXo6ICptdXQgaTg7Cn0KYGBgCkUwMjA4RTAyODBFMDMxM0UwMzIwRTAzNzdFMDQ1N0UwNDYwRTA0NjFFMDQ2MkUwNDY1RTA0NzJFMDQ3NkUwNDkwRTA1MTRFMDUxOUUwNTIzRTA2NDBFMDcxMUUwNzE3RTA3ODkAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAawMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACxAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACWAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAATwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB/AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA3BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA1wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC9AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAsgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHSUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC+AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB0AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABZAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAALAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAASAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoQQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAuAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHIEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD3AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA8wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAQBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAC0FAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAChAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACQDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+QQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACkAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADzAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAPAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAmAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABTAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGYKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABDAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABfAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABcBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAnAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAIAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAPwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADeAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAeQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADgAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAMwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABdAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKsCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2gIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABiAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACkSAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZAsAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAALBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAJAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAASAUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABsAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA7wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAcAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAQwQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADNAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3gMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAWwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB5AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABYAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAF0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADkAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKcBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAnAcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcwgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACvAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOoHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAPAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABgAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAcgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA8AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH8DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADHAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADrBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHwDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACVAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA4wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB2AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFsCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABkAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAE4DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACpAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADYAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAL4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAewMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC8AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAN0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAATAgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABRBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABoHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAegUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACqBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABgNAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAxQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABBAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALMFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAADQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABAAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHEFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAoAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACVBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlwYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAByAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJYEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA9wEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB0AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAC0EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADmAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHAEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAVwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABWAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABnBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAC4EAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAlwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA6AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFIFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3wIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADlAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAGwYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADEAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAeAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD5AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIwDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADEAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOACAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAeAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABYAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACcEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABiAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB+BQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABxAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPMCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAIgQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABNAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOkHAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD4BwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD9AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC4AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPwDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANwcAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA4AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPUFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+QgAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAHBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPYFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuwoAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABuBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4JAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAByAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABoCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADvAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOoFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADYBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACsDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAALwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAANBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABkEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAASgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADaAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAANgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADmAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALkCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACzAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABsAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEECAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2wQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADoAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEAFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB1AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEkEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAwwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAnBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAoEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAArgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABpAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAygEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABqAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANYAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACkAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC/AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAK8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAqAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAEQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAOAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAUAUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACUAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANgDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAogEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD3AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAQCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAATwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAChAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFQDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAIAMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAChAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABjAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAFAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAALAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAGABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAmwoAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAPAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAP0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAkwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABvAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAfQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAvAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFMDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAARQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAEAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAA0DAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAKgMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACeAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAD0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqQMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACwAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbwMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABxAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAHAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB1AwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAJgUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACTAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAgBgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJYDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAARAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABuCQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAogIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADwAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANUCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA+AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACpAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAK4AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5AAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACGBQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIUFAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADLAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAG4BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABpAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOgAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAFQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAA0AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAHgEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAYwIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACoAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAM8AAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA8QAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAfAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB8BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACFAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAO0BAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAhQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAB7AgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAqwAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADpAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAEDAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACNAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADQEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAjQUAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAC3BAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAbgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAbAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAOQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACTBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAADcEAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzwAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACOAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOABAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAgwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACtBwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAIQIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACDAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAPUGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAzgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAqAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANAKAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAtwAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAIoBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAArAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAARAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAKIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvgYAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADqAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAH4HAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAApAQAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAOAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAICAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAewMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADhAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAABwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACFAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAFYBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5gAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAcAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAB0CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAXgIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAD0AQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMMBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6gEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACIDAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANkBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAugEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABGAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANQBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAZwEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACmAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABgCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAewEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABSAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAI8CAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA5QMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABZAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAcGAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3AIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAOAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAANcAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAvAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACKBAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAABdAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMsAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA2QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAFAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAABwCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAwoAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAATAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAOEBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAwgEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAsAQAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJsBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAyAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADrAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAJIBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAOQEAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACYAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAACYCAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAA3QIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAACIAgAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAALwBAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAuAIAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAADrAwAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAMADAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAugMAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD7AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHKAAAEAPH/AAAAAAAAAAAAAAAAAAAAAAAAAAADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAADABAAAAAAAAAAAAAAAAAAAAAAAAAAAAADABEAAAAAAAAAAAAAAAAAAAAAAAAAAAADABIAAAAAAAAAAAAAAAAAAAAAAAAAAAADABMAAAAAAAAAAAAAAAAAAAAAAAAAAAADABQAAAAAAAAAAAAAAAAAAAAAAAAAAAADABUAAAAAAAAAAAAAAAAAAAAAAAAAAAADABYAAAAAAAAAAAAAAAAAAAAAAAAAAAADABcAAAAAAAAAAAAAAAAAAAAAAAAAAAADABgAAAAAAAAAAAAAAAAAAAAAAAAAAAADABkAAAAAAAAAAAAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAAAAAAAAAAADABsAAAAAAAAAAAAAAAAAAAAAAAAAAAADABwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8AAAAAAAAAAAAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAAAAAAAAAAADACEAAAAAAAAAAAAAAAAAAAAAAAAAAAADACIAAAAAAAAAAAAAAAAAAAAAAAAAAAADACMAAAAAAAAAAAAAAAAAAAAAAAAAAAADACQAAAAAAAAAAAAAAAAAAAAAAAAAAAADACUAAAAAAAAAAAAAAAAAAAAAAAAAAAADACYAAAAAAAAAAAAAAAAAAAAAAAAAAAADACcAAAAAAAAAAAAAAAAAAAAAAAAAAAADACgAAAAAAAAAAAAAAAAAAAAAAAAAAAADACkAAAAAAAAAAAAAAAAAAAAAAAAAAAADACoAAAAAAAAAAAAAAAAAAAAAAAAAAAADACsAAAAAAAAAAAAAAAAAAAAAAAAAAAADACwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8AAAAAAAAAAAAAAAAAAAAAAAAAAAADADAAAAAAAAAAAAAAAAAAAAAAAAAAAAADADEAAAAAAAAAAAAAAAAAAAAAAAAAAAADADIAAAAAAAAAAAAAAAAAAAAAAAAAAAADADMAAAAAAAAAAAAAAAAAAAAAAAAAAAADADQAAAAAAAAAAAAAAAAAAAAAAAAAAAADADUAAAAAAAAAAAAAAAAAAAAAAAAAAAADADYAAAAAAAAAAAAAAAAAAAAAAAAAAAADADcAAAAAAAAAAAAAAAAAAAAAAAAAAAADADgAAAAAAAAAAAAAAAAAAAAAAAAAAAADADkAAAAAAAAAAAAAAAAAAAAAAAAAAAADADoAAAAAAAAAAAAAAAAAAAAAAAAAAAADADsAAAAAAAAAAAAAAAAAAAAAAAAAAAADADwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8AAAAAAAAAAAAAAAAAAAAAAAAAAAADALAAAAAAAAAAAAAAAAAAAAAAAAAAAAADALEAAAAAAAAAAAAAAAAAAAAAAAAAAAADALIAAAAAAAAAAAAAAAAAAAAAAAAAAAADALMAAAAAAAAAAAAAAAAAAAAAAAAAAAADALQAAAAAAAAAAAAAAAAAAAAAAAAAAAADALUAAAAAAAAAAAAAAAAAAAAAAAAAAAADALYAAAAAAAAAAAAAAAAAAAAAAAAAAAADALcAAAAAAAAAAAAAAAAAAAAAAAAAAAADALgAAAAAAAAAAAAAAAAAAAAAAAAAAAADALkAAAAAAAAAAAAAAAAAAAAAAAAAAAADALoAAAAAAAAAAAAAAAAAAAAAAAAAAAADALsAAAAAAAAAAAAAAAAAAAAAAAAAAAADALwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8AAAAAAAAAAAAAAAAAAAAAAAAAAAADANAAAAAAAAAAAAAAAAAAAAAAAAAAAAADANEAAAAAAAAAAAAAAAAAAAAAAAAAAAADANIAAAAAAAAAAAAAAAAAAAAAAAAAAAADANMAAAAAAAAAAAAAAAAAAAAAAAAAAAADANQAAAAAAAAAAAAAAAAAAAAAAAAAAAADANUAAAAAAAAAAAAAAAAAAAAAAAAAAAADANYAAAAAAAAAAAAAAAAAAAAAAAAAAAADANcAAAAAAAAAAAAAAAAAAAAAAAAAAAADANgAAAAAAAAAAAAAAAAAAAAAAAAAAAADANkAAAAAAAAAAAAAAAAAAAAAAAAAAAADANoAAAAAAAAAAAAAAAAAAAAAAAAAAAADANsAAAAAAAAAAAAAAAAAAAAAAAAAAAADANwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPEAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPIAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsAAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwAAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0AAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4AAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8AAAAAAAAAAAAAAAAAAAAAAAAAAAADAAABAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8BAAAAAAAAAAAAAAAAAAAAAAAAAAADABABAAAAAAAAAAAAAAAAAAAAAAAAAAADABEBAAAAAAAAAAAAAAAAAAAAAAAAAAADABIBAAAAAAAAAAAAAAAAAAAAAAAAAAADABMBAAAAAAAAAAAAAAAAAAAAAAAAAAADABQBAAAAAAAAAAAAAAAAAAAAAAAAAAADABUBAAAAAAAAAAAAAAAAAAAAAAAAAAADABYBAAAAAAAAAAAAAAAAAAAAAAAAAAADABcBAAAAAAAAAAAAAAAAAAAAAAAAAAADABgBAAAAAAAAAAAAAAAAAAAAAAAAAAADABkBAAAAAAAAAAAAAAAAAAAAAAAAAAADABoBAAAAAAAAAAAAAAAAAAAAAAAAAAADABsBAAAAAAAAAAAAAAAAAAAAAAAAAAADABwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8BAAAAAAAAAAAAAAAAAAAAAAAAAAADACABAAAAAAAAAAAAAAAAAAAAAAAAAAADACEBAAAAAAAAAAAAAAAAAAAAAAAAAAADACIBAAAAAAAAAAAAAAAAAAAAAAAAAAADACMBAAAAAAAAAAAAAAAAAAAAAAAAAAADACQBAAAAAAAAAAAAAAAAAAAAAAAAAAADACUBAAAAAAAAAAAAAAAAAAAAAAAAAAADACYBAAAAAAAAAAAAAAAAAAAAAAAAAAADACcBAAAAAAAAAAAAAAAAAAAAAAAAAAADACgBAAAAAAAAAAAAAAAAAAAAAAAAAAADACkBAAAAAAAAAAAAAAAAAAAAAAAAAAADACoBAAAAAAAAAAAAAAAAAAAAAAAAAAADACsBAAAAAAAAAAAAAAAAAAAAAAAAAAADACwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8BAAAAAAAAAAAAAAAAAAAAAAAAAAADADABAAAAAAAAAAAAAAAAAAAAAAAAAAADADEBAAAAAAAAAAAAAAAAAAAAAAAAAAADADIBAAAAAAAAAAAAAAAAAAAAAAAAAAADADMBAAAAAAAAAAAAAAAAAAAAAAAAAAADADQBAAAAAAAAAAAAAAAAAAAAAAAAAAADADUBAAAAAAAAAAAAAAAAAAAAAAAAAAADADYBAAAAAAAAAAAAAAAAAAAAAAAAAAADADcBAAAAAAAAAAAAAAAAAAAAAAAAAAADADgBAAAAAAAAAAAAAAAAAAAAAAAAAAADADkBAAAAAAAAAAAAAAAAAAAAAAAAAAADADoBAAAAAAAAAAAAAAAAAAAAAAAAAAADADsBAAAAAAAAAAAAAAAAAAAAAAAAAAADADwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAEABAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAFABAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAGABAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAHABAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAIABAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJABAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAKABAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8BAAAAAAAAAAAAAAAAAAAAAAAAAAADALABAAAAAAAAAAAAAAAAAAAAAAAAAAADALEBAAAAAAAAAAAAAAAAAAAAAAAAAAADALIBAAAAAAAAAAAAAAAAAAAAAAAAAAADALMBAAAAAAAAAAAAAAAAAAAAAAAAAAADALQBAAAAAAAAAAAAAAAAAAAAAAAAAAADALUBAAAAAAAAAAAAAAAAAAAAAAAAAAADALYBAAAAAAAAAAAAAAAAAAAAAAAAAAADALcBAAAAAAAAAAAAAAAAAAAAAAAAAAADALgBAAAAAAAAAAAAAAAAAAAAAAAAAAADALkBAAAAAAAAAAAAAAAAAAAAAAAAAAADALoBAAAAAAAAAAAAAAAAAAAAAAAAAAADALsBAAAAAAAAAAAAAAAAAAAAAAAAAAADALwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAMABAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8BAAAAAAAAAAAAAAAAAAAAAAAAAAADANABAAAAAAAAAAAAAAAAAAAAAAAAAAADANEBAAAAAAAAAAAAAAAAAAAAAAAAAAADANIBAAAAAAAAAAAAAAAAAAAAAAAAAAADANMBAAAAAAAAAAAAAAAAAAAAAAAAAAADANQBAAAAAAAAAAAAAAAAAAAAAAAAAAADANUBAAAAAAAAAAAAAAAAAAAAAAAAAAADANYBAAAAAAAAAAAAAAAAAAAAAAAAAAADANcBAAAAAAAAAAAAAAAAAAAAAAAAAAADANgBAAAAAAAAAAAAAAAAAAAAAAAAAAADANkBAAAAAAAAAAAAAAAAAAAAAAAAAAADANoBAAAAAAAAAAAAAAAAAAAAAAAAAAADANsBAAAAAAAAAAAAAAAAAAAAAAAAAAADANwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAOABAAAAAAAAAAAAAAAAAAAAAAAAAAADAOEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAPABAAAAAAAAAAAAAAAAAAAAAAAAAAADAPEBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPIBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsBAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwBAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0BAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4BAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8BAAAAAAAAAAAAAAAAAAAAAAAAAAADAAACAAAAAAAAAAAAAAAAAAAAAAAAAAADAAECAAAAAAAAAAAAAAAAAAAAAAAAAAADAAICAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8CAAAAAAAAAAAAAAAAAAAAAAAAAAADABACAAAAAAAAAAAAAAAAAAAAAAAAAAADABECAAAAAAAAAAAAAAAAAAAAAAAAAAADABICAAAAAAAAAAAAAAAAAAAAAAAAAAADABMCAAAAAAAAAAAAAAAAAAAAAAAAAAADABQCAAAAAAAAAAAAAAAAAAAAAAAAAAADABUCAAAAAAAAAAAAAAAAAAAAAAAAAAADABYCAAAAAAAAAAAAAAAAAAAAAAAAAAADABcCAAAAAAAAAAAAAAAAAAAAAAAAAAADABgCAAAAAAAAAAAAAAAAAAAAAAAAAAADABkCAAAAAAAAAAAAAAAAAAAAAAAAAAADABoCAAAAAAAAAAAAAAAAAAAAAAAAAAADABsCAAAAAAAAAAAAAAAAAAAAAAAAAAADABwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8CAAAAAAAAAAAAAAAAAAAAAAAAAAADACACAAAAAAAAAAAAAAAAAAAAAAAAAAADACECAAAAAAAAAAAAAAAAAAAAAAAAAAADACICAAAAAAAAAAAAAAAAAAAAAAAAAAADACMCAAAAAAAAAAAAAAAAAAAAAAAAAAADACQCAAAAAAAAAAAAAAAAAAAAAAAAAAADACUCAAAAAAAAAAAAAAAAAAAAAAAAAAADACYCAAAAAAAAAAAAAAAAAAAAAAAAAAADACcCAAAAAAAAAAAAAAAAAAAAAAAAAAADACgCAAAAAAAAAAAAAAAAAAAAAAAAAAADACkCAAAAAAAAAAAAAAAAAAAAAAAAAAADACoCAAAAAAAAAAAAAAAAAAAAAAAAAAADACsCAAAAAAAAAAAAAAAAAAAAAAAAAAADACwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8CAAAAAAAAAAAAAAAAAAAAAAAAAAADADACAAAAAAAAAAAAAAAAAAAAAAAAAAADADECAAAAAAAAAAAAAAAAAAAAAAAAAAADADICAAAAAAAAAAAAAAAAAAAAAAAAAAADADMCAAAAAAAAAAAAAAAAAAAAAAAAAAADADQCAAAAAAAAAAAAAAAAAAAAAAAAAAADADUCAAAAAAAAAAAAAAAAAAAAAAAAAAADADYCAAAAAAAAAAAAAAAAAAAAAAAAAAADADcCAAAAAAAAAAAAAAAAAAAAAAAAAAADADgCAAAAAAAAAAAAAAAAAAAAAAAAAAADADkCAAAAAAAAAAAAAAAAAAAAAAAAAAADADoCAAAAAAAAAAAAAAAAAAAAAAAAAAADADsCAAAAAAAAAAAAAAAAAAAAAAAAAAADADwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAEACAAAAAAAAAAAAAAAAAAAAAAAAAAADAEECAAAAAAAAAAAAAAAAAAAAAAAAAAADAEICAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAFACAAAAAAAAAAAAAAAAAAAAAAAAAAADAFECAAAAAAAAAAAAAAAAAAAAAAAAAAADAFICAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAGACAAAAAAAAAAAAAAAAAAAAAAAAAAADAGECAAAAAAAAAAAAAAAAAAAAAAAAAAADAGICAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAHACAAAAAAAAAAAAAAAAAAAAAAAAAAADAHECAAAAAAAAAAAAAAAAAAAAAAAAAAADAHICAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAIACAAAAAAAAAAAAAAAAAAAAAAAAAAADAIECAAAAAAAAAAAAAAAAAAAAAAAAAAADAIICAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJACAAAAAAAAAAAAAAAAAAAAAAAAAAADAJECAAAAAAAAAAAAAAAAAAAAAAAAAAADAJICAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAKACAAAAAAAAAAAAAAAAAAAAAAAAAAADAKECAAAAAAAAAAAAAAAAAAAAAAAAAAADAKICAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8CAAAAAAAAAAAAAAAAAAAAAAAAAAADALACAAAAAAAAAAAAAAAAAAAAAAAAAAADALECAAAAAAAAAAAAAAAAAAAAAAAAAAADALICAAAAAAAAAAAAAAAAAAAAAAAAAAADALMCAAAAAAAAAAAAAAAAAAAAAAAAAAADALQCAAAAAAAAAAAAAAAAAAAAAAAAAAADALUCAAAAAAAAAAAAAAAAAAAAAAAAAAADALYCAAAAAAAAAAAAAAAAAAAAAAAAAAADALcCAAAAAAAAAAAAAAAAAAAAAAAAAAADALgCAAAAAAAAAAAAAAAAAAAAAAAAAAADALkCAAAAAAAAAAAAAAAAAAAAAAAAAAADALoCAAAAAAAAAAAAAAAAAAAAAAAAAAADALsCAAAAAAAAAAAAAAAAAAAAAAAAAAADALwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAMACAAAAAAAAAAAAAAAAAAAAAAAAAAADAMECAAAAAAAAAAAAAAAAAAAAAAAAAAADAMICAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8CAAAAAAAAAAAAAAAAAAAAAAAAAAADANACAAAAAAAAAAAAAAAAAAAAAAAAAAADANECAAAAAAAAAAAAAAAAAAAAAAAAAAADANICAAAAAAAAAAAAAAAAAAAAAAAAAAADANMCAAAAAAAAAAAAAAAAAAAAAAAAAAADANQCAAAAAAAAAAAAAAAAAAAAAAAAAAADANUCAAAAAAAAAAAAAAAAAAAAAAAAAAADANYCAAAAAAAAAAAAAAAAAAAAAAAAAAADANcCAAAAAAAAAAAAAAAAAAAAAAAAAAADANgCAAAAAAAAAAAAAAAAAAAAAAAAAAADANkCAAAAAAAAAAAAAAAAAAAAAAAAAAADANoCAAAAAAAAAAAAAAAAAAAAAAAAAAADANsCAAAAAAAAAAAAAAAAAAAAAAAAAAADANwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAOACAAAAAAAAAAAAAAAAAAAAAAAAAAADAOECAAAAAAAAAAAAAAAAAAAAAAAAAAADAOICAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAOwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAO0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAO4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAO8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAPACAAAAAAAAAAAAAAAAAAAAAAAAAAADAPECAAAAAAAAAAAAAAAAAAAAAAAAAAADAPICAAAAAAAAAAAAAAAAAAAAAAAAAAADAPMCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPQCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPUCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPYCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPcCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPgCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPkCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPoCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPsCAAAAAAAAAAAAAAAAAAAAAAAAAAADAPwCAAAAAAAAAAAAAAAAAAAAAAAAAAADAP0CAAAAAAAAAAAAAAAAAAAAAAAAAAADAP4CAAAAAAAAAAAAAAAAAAAAAAAAAAADAP8CAAAAAAAAAAAAAAAAAAAAAAAAAAADAAADAAAAAAAAAAAAAAAAAAAAAAAAAAADAAEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAAwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAA0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAA4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAA8DAAAAAAAAAAAAAAAAAAAAAAAAAAADABADAAAAAAAAAAAAAAAAAAAAAAAAAAADABEDAAAAAAAAAAAAAAAAAAAAAAAAAAADABIDAAAAAAAAAAAAAAAAAAAAAAAAAAADABMDAAAAAAAAAAAAAAAAAAAAAAAAAAADABQDAAAAAAAAAAAAAAAAAAAAAAAAAAADABUDAAAAAAAAAAAAAAAAAAAAAAAAAAADABYDAAAAAAAAAAAAAAAAAAAAAAAAAAADABcDAAAAAAAAAAAAAAAAAAAAAAAAAAADABgDAAAAAAAAAAAAAAAAAAAAAAAAAAADABkDAAAAAAAAAAAAAAAAAAAAAAAAAAADABoDAAAAAAAAAAAAAAAAAAAAAAAAAAADABsDAAAAAAAAAAAAAAAAAAAAAAAAAAADABwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAB0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAB4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAB8DAAAAAAAAAAAAAAAAAAAAAAAAAAADACADAAAAAAAAAAAAAAAAAAAAAAAAAAADACEDAAAAAAAAAAAAAAAAAAAAAAAAAAADACIDAAAAAAAAAAAAAAAAAAAAAAAAAAADACMDAAAAAAAAAAAAAAAAAAAAAAAAAAADACQDAAAAAAAAAAAAAAAAAAAAAAAAAAADACUDAAAAAAAAAAAAAAAAAAAAAAAAAAADACYDAAAAAAAAAAAAAAAAAAAAAAAAAAADACcDAAAAAAAAAAAAAAAAAAAAAAAAAAADACgDAAAAAAAAAAAAAAAAAAAAAAAAAAADACkDAAAAAAAAAAAAAAAAAAAAAAAAAAADACoDAAAAAAAAAAAAAAAAAAAAAAAAAAADACsDAAAAAAAAAAAAAAAAAAAAAAAAAAADACwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAC0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAC4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAC8DAAAAAAAAAAAAAAAAAAAAAAAAAAADADADAAAAAAAAAAAAAAAAAAAAAAAAAAADADEDAAAAAAAAAAAAAAAAAAAAAAAAAAADADIDAAAAAAAAAAAAAAAAAAAAAAAAAAADADMDAAAAAAAAAAAAAAAAAAAAAAAAAAADADQDAAAAAAAAAAAAAAAAAAAAAAAAAAADADUDAAAAAAAAAAAAAAAAAAAAAAAAAAADADYDAAAAAAAAAAAAAAAAAAAAAAAAAAADADcDAAAAAAAAAAAAAAAAAAAAAAAAAAADADgDAAAAAAAAAAAAAAAAAAAAAAAAAAADADkDAAAAAAAAAAAAAAAAAAAAAAAAAAADADoDAAAAAAAAAAAAAAAAAAAAAAAAAAADADsDAAAAAAAAAAAAAAAAAAAAAAAAAAADADwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAD0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAD4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAD8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAEADAAAAAAAAAAAAAAAAAAAAAAAAAAADAEEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAEwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAE0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAE4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAE8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAFADAAAAAAAAAAAAAAAAAAAAAAAAAAADAFEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAFwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAF0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAF4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAF8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAGADAAAAAAAAAAAAAAAAAAAAAAAAAAADAGEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAGwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAG0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAG4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAG8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAHADAAAAAAAAAAAAAAAAAAAAAAAAAAADAHEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAHwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAH0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAH4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAH8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAIADAAAAAAAAAAAAAAAAAAAAAAAAAAADAIEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAIwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAI0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAI4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAI8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJADAAAAAAAAAAAAAAAAAAAAAAAAAAADAJEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAJ8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAKADAAAAAAAAAAAAAAAAAAAAAAAAAAADAKEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAKwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAK0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAK4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAK8DAAAAAAAAAAAAAAAAAAAAAAAAAAADALADAAAAAAAAAAAAAAAAAAAAAAAAAAADALEDAAAAAAAAAAAAAAAAAAAAAAAAAAADALIDAAAAAAAAAAAAAAAAAAAAAAAAAAADALMDAAAAAAAAAAAAAAAAAAAAAAAAAAADALQDAAAAAAAAAAAAAAAAAAAAAAAAAAADALUDAAAAAAAAAAAAAAAAAAAAAAAAAAADALYDAAAAAAAAAAAAAAAAAAAAAAAAAAADALcDAAAAAAAAAAAAAAAAAAAAAAAAAAADALgDAAAAAAAAAAAAAAAAAAAAAAAAAAADALkDAAAAAAAAAAAAAAAAAAAAAAAAAAADALoDAAAAAAAAAAAAAAAAAAAAAAAAAAADALsDAAAAAAAAAAAAAAAAAAAAAAAAAAADALwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAL0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAL4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAL8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAMADAAAAAAAAAAAAAAAAAAAAAAAAAAADAMEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMUDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMYDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMcDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMgDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMkDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMoDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMsDAAAAAAAAAAAAAAAAAAAAAAAAAAADAMwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAM0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAM4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAM8DAAAAAAAAAAAAAAAAAAAAAAAAAAADANADAAAAAAAAAAAAAAAAAAAAAAAAAAADANEDAAAAAAAAAAAAAAAAAAAAAAAAAAADANIDAAAAAAAAAAAAAAAAAAAAAAAAAAADANMDAAAAAAAAAAAAAAAAAAAAAAAAAAADANQDAAAAAAAAAAAAAAAAAAAAAAAAAAADANUDAAAAAAAAAAAAAAAAAAAAAAAAAAADANYDAAAAAAAAAAAAAAAAAAAAAAAAAAADANcDAAAAAAAAAAAAAAAAAAAAAAAAAAADANgDAAAAAAAAAAAAAAAAAAAAAAAAAAADANkDAAAAAAAAAAAAAAAAAAAAAAAAAAADANoDAAAAAAAAAAAAAAAAAAAAAAAAAAADANsDAAAAAAAAAAAAAAAAAAAAAAAAAAADANwDAAAAAAAAAAAAAAAAAAAAAAAAAAADAN0DAAAAAAAAAAAAAAAAAAAAAAAAAAADAN4DAAAAAAAAAAAAAAAAAAAAAAAAAAADAN8DAAAAAAAAAAAAAAAAAAAAAAAAAAADAOADAAAAAAAAAAAAAAAAAAAAAAAAAAADAOEDAAAAAAAAAAAAAAAAAAAAAAAAAAADAOIDAAAAAAAAAAAAAAAAAAAAAAAAAAADAOMDAAAAAAAAAAAAAAAAAAAAAAAAAAADAOQDAAAAAAAAAAAAAAAAAAAAAAAAAAADAOUDAAAAAAAAAAAAAAAAAAAAADkAAAARAOcDAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAQAAAAIAAAAAAAAAAAAAABAAAAAAAAAAAQAAAAMAAAAAAAAAAAAAACAAAAAAAAAAAQAAAAQAAAAAAAAAAAAAADAAAAAAAAAAAQAAAAUAAAAAAAAAAAAAAEAAAAAAAAAAAQAAAAYAAAAAAAAAAAAAAFAAAAAAAAAAAQAAAAcAAAAAAAAAAAAAAGAAAAAAAAAAAQAAAAgAAAAAAAAAAAAAAHAAAAAAAAAAAQAAAAkAAAAAAAAAAAAAAIAAAAAAAAAAAQAAAAoAAAAAAAAAAAAAAJAAAAAAAAAAAQAAAAsAAAAAAAAAAAAAAKAAAAAAAAAAAQAAAAwAAAAAAAAAAAAAALAAAAAAAAAAAQAAAA0AAAAAAAAAAAAAAMAAAAAAAAAAAQAAAA4AAAAAAAAAAAAAANAAAAAAAAAAAQAAAA8AAAAAAAAAAAAAAOAAAAAAAAAAAQAAABAAAAAAAAAAAAAAAPAAAAAAAAAAAQAAABEAAAAAAAAAAAAAAAABAAAAAAAAAQAAABIAAAAAAAAAAAAAABABAAAAAAAAAQAAABMAAAAAAAAAAAAAACABAAAAAAAAAQAAABQAAAAAAAAAAAAAADABAAAAAAAAAQAAABUAAAAAAAAAAAAAAEABAAAAAAAAAQAAABYAAAAAAAAAAAAAAFABAAAAAAAAAQAAABcAAAAAAAAAAAAAAGABAAAAAAAAAQAAABgAAAAAAAAAAAAAAHABAAAAAAAAAQAAABkAAAAAAAAAAAAAAIABAAAAAAAAAQAAABoAAAAAAAAAAAAAAJABAAAAAAAAAQAAABsAAAAAAAAAAAAAAKABAAAAAAAAAQAAABwAAAAAAAAAAAAAALABAAAAAAAAAQAAAB0AAAAAAAAAAAAAAMABAAAAAAAAAQAAAB4AAAAAAAAAAAAAANABAAAAAAAAAQAAAB8AAAAAAAAAAAAAAOABAAAAAAAAAQAAACAAAAAAAAAAAAAAAPABAAAAAAAAAQAAACEAAAAAAAAAAAAAAAACAAAAAAAAAQAAACIAAAAAAAAAAAAAABACAAAAAAAAAQAAACMAAAAAAAAAAAAAACACAAAAAAAAAQAAACQAAAAAAAAAAAAAADACAAAAAAAAAQAAACUAAAAAAAAAAAAAAEACAAAAAAAAAQAAACYAAAAAAAAAAAAAAFACAAAAAAAAAQAAACcAAAAAAAAAAAAAAGACAAAAAAAAAQAAACgAAAAAAAAAAAAAAHACAAAAAAAAAQAAACkAAAAAAAAAAAAAAIACAAAAAAAAAQAAACoAAAAAAAAAAAAAAJACAAAAAAAAAQAAACsAAAAAAAAAAAAAAKACAAAAAAAAAQAAACwAAAAAAAAAAAAAALACAAAAAAAAAQAAAC0AAAAAAAAAAAAAAMACAAAAAAAAAQAAAC4AAAAAAAAAAAAAANACAAAAAAAAAQAAAC8AAAAAAAAAAAAAAOACAAAAAAAAAQAAADAAAAAAAAAAAAAAAPACAAAAAAAAAQAAADEAAAAAAAAAAAAAAAADAAAAAAAAAQAAADIAAAAAAAAAAAAAABADAAAAAAAAAQAAADMAAAAAAAAAAAAAACADAAAAAAAAAQAAADQAAAAAAAAAAAAAADADAAAAAAAAAQAAADUAAAAAAAAAAAAAAEADAAAAAAAAAQAAADYAAAAAAAAAAAAAAFADAAAAAAAAAQAAADcAAAAAAAAAAAAAAGADAAAAAAAAAQAAADgAAAAAAAAAAAAAAHADAAAAAAAAAQAAADkAAAAAAAAAAAAAAIADAAAAAAAAAQAAADoAAAAAAAAAAAAAAJADAAAAAAAAAQAAADsAAAAAAAAAAAAAAKADAAAAAAAAAQAAADwAAAAAAAAAAAAAALADAAAAAAAAAQAAAD0AAAAAAAAAAAAAAMADAAAAAAAAAQAAAD4AAAAAAAAAAAAAANADAAAAAAAAAQAAAD8AAAAAAAAAAAAAAOADAAAAAAAAAQAAAEAAAAAAAAAAAAAAAPADAAAAAAAAAQAAAEEAAAAAAAAAAAAAAAAEAAAAAAAAAQAAAEIAAAAAAAAAAAAAABAEAAAAAAAAAQAAAEMAAAAAAAAAAAAAACAEAAAAAAAAAQAAAEQAAAAAAAAAAAAAADAEAAAAAAAAAQAAAEUAAAAAAAAAAAAAAEAEAAAAAAAAAQAAAEYAAAAAAAAAAAAAAFAEAAAAAAAAAQAAAEcAAAAAAAAAAAAAAGAEAAAAAAAAAQAAAEgAAAAAAAAAAAAAAHAEAAAAAAAAAQAAAEkAAAAAAAAAAAAAAIAEAAAAAAAAAQAAAEoAAAAAAAAAAAAAAJAEAAAAAAAAAQAAAEsAAAAAAAAAAAAAAKAEAAAAAAAAAQAAAEwAAAAAAAAAAAAAALAEAAAAAAAAAQAAAE0AAAAAAAAAAAAAAMAEAAAAAAAAAQAAAE4AAAAAAAAAAAAAANAEAAAAAAAAAQAAAE8AAAAAAAAAAAAAAOAEAAAAAAAAAQAAAFAAAAAAAAAAAAAAAPAEAAAAAAAAAQAAAFEAAAAAAAAAAAAAAAAFAAAAAAAAAQAAAFIAAAAAAAAAAAAAABAFAAAAAAAAAQAAAFMAAAAAAAAAAAAAACAFAAAAAAAAAQAAAFQAAAAAAAAAAAAAADAFAAAAAAAAAQAAAFUAAAAAAAAAAAAAAEAFAAAAAAAAAQAAAFYAAAAAAAAAAAAAAFAFAAAAAAAAAQAAAFcAAAAAAAAAAAAAAGAFAAAAAAAAAQAAAFgAAAAAAAAAAAAAAHAFAAAAAAAAAQAAAFkAAAAAAAAAAAAAAIAFAAAAAAAAAQAAAFoAAAAAAAAAAAAAAJAFAAAAAAAAAQAAAFsAAAAAAAAAAAAAAKAFAAAAAAAAAQAAAFwAAAAAAAAAAAAAALAFAAAAAAAAAQAAAF0AAAAAAAAAAAAAAMAFAAAAAAAAAQAAAF4AAAAAAAAAAAAAANAFAAAAAAAAAQAAAF8AAAAAAAAAAAAAAOAFAAAAAAAAAQAAAGAAAAAAAAAAAAAAAPAFAAAAAAAAAQAAAGEAAAAAAAAAAAAAAAAGAAAAAAAAAQAAAGIAAAAAAAAAAAAAABAGAAAAAAAAAQAAAGMAAAAAAAAAAAAAACAGAAAAAAAAAQAAAGQAAAAAAAAAAAAAADAGAAAAAAAAAQAAAGUAAAAAAAAAAAAAAEAGAAAAAAAAAQAAAGYAAAAAAAAAAAAAAFAGAAAAAAAAAQAAAGcAAAAAAAAAAAAAAGAGAAAAAAAAAQAAAGgAAAAAAAAAAAAAAHAGAAAAAAAAAQAAAGkAAAAAAAAAAAAAAIAGAAAAAAAAAQAAAGoAAAAAAAAAAAAAAJAGAAAAAAAAAQAAAGsAAAAAAAAAAAAAAKAGAAAAAAAAAQAAAGwAAAAAAAAAAAAAALAGAAAAAAAAAQAAAG0AAAAAAAAAAAAAAMAGAAAAAAAAAQAAAG4AAAAAAAAAAAAAANAGAAAAAAAAAQAAAG8AAAAAAAAAAAAAAOAGAAAAAAAAAQAAAHAAAAAAAAAAAAAAAPAGAAAAAAAAAQAAAHEAAAAAAAAAAAAAAAAHAAAAAAAAAQAAAHIAAAAAAAAAAAAAABAHAAAAAAAAAQAAAHMAAAAAAAAAAAAAACAHAAAAAAAAAQAAAHQAAAAAAAAAAAAAADAHAAAAAAAAAQAAAHUAAAAAAAAAAAAAAEAHAAAAAAAAAQAAAHYAAAAAAAAAAAAAAFAHAAAAAAAAAQAAAHcAAAAAAAAAAAAAAGAHAAAAAAAAAQAAAHgAAAAAAAAAAAAAAHAHAAAAAAAAAQAAAHkAAAAAAAAAAAAAAIAHAAAAAAAAAQAAAHoAAAAAAAAAAAAAAJAHAAAAAAAAAQAAAHsAAAAAAAAAAAAAAKAHAAAAAAAAAQAAAHwAAAAAAAAAAAAAALAHAAAAAAAAAQAAAH0AAAAAAAAAAAAAAMAHAAAAAAAAAQAAAH4AAAAAAAAAAAAAANAHAAAAAAAAAQAAAH8AAAAAAAAAAAAAAOAHAAAAAAAAAQAAAIAAAAAAAAAAAAAAAPAHAAAAAAAAAQAAAIEAAAAAAAAAAAAAAAAIAAAAAAAAAQAAAIIAAAAAAAAAAAAAABAIAAAAAAAAAQAAAIMAAAAAAAAAAAAAACAIAAAAAAAAAQAAAIQAAAAAAAAAAAAAADAIAAAAAAAAAQAAAIUAAAAAAAAAAAAAAEAIAAAAAAAAAQAAAIYAAAAAAAAAAAAAAFAIAAAAAAAAAQAAAIcAAAAAAAAAAAAAAGAIAAAAAAAAAQAAAIgAAAAAAAAAAAAAAHAIAAAAAAAAAQAAAIkAAAAAAAAAAAAAAIAIAAAAAAAAAQAAAIoAAAAAAAAAAAAAAJAIAAAAAAAAAQAAAIsAAAAAAAAAAAAAAKAIAAAAAAAAAQAAAIwAAAAAAAAAAAAAALAIAAAAAAAAAQAAAI0AAAAAAAAAAAAAAMAIAAAAAAAAAQAAAI4AAAAAAAAAAAAAANAIAAAAAAAAAQAAAI8AAAAAAAAAAAAAAOAIAAAAAAAAAQAAAJAAAAAAAAAAAAAAAPAIAAAAAAAAAQAAAJEAAAAAAAAAAAAAAAAJAAAAAAAAAQAAAJIAAAAAAAAAAAAAABAJAAAAAAAAAQAAAJMAAAAAAAAAAAAAACAJAAAAAAAAAQAAAJQAAAAAAAAAAAAAADAJAAAAAAAAAQAAAJUAAAAAAAAAAAAAAEAJAAAAAAAAAQAAAJYAAAAAAAAAAAAAAFAJAAAAAAAAAQAAAJcAAAAAAAAAAAAAAGAJAAAAAAAAAQAAAJgAAAAAAAAAAAAAAHAJAAAAAAAAAQAAAJkAAAAAAAAAAAAAAIAJAAAAAAAAAQAAAJoAAAAAAAAAAAAAAJAJAAAAAAAAAQAAAJsAAAAAAAAAAAAAAKAJAAAAAAAAAQAAAJwAAAAAAAAAAAAAALAJAAAAAAAAAQAAAJ0AAAAAAAAAAAAAAMAJAAAAAAAAAQAAAJ4AAAAAAAAAAAAAANAJAAAAAAAAAQAAAJ8AAAAAAAAAAAAAAOAJAAAAAAAAAQAAAKAAAAAAAAAAAAAAAPAJAAAAAAAAAQAAAKEAAAAAAAAAAAAAAAAKAAAAAAAAAQAAAKIAAAAAAAAAAAAAABAKAAAAAAAAAQAAAKMAAAAAAAAAAAAAACAKAAAAAAAAAQAAAKQAAAAAAAAAAAAAADAKAAAAAAAAAQAAAKUAAAAAAAAAAAAAAEAKAAAAAAAAAQAAAKYAAAAAAAAAAAAAAFAKAAAAAAAAAQAAAKcAAAAAAAAAAAAAAGAKAAAAAAAAAQAAAKgAAAAAAAAAAAAAAHAKAAAAAAAAAQAAAKkAAAAAAAAAAAAAAIAKAAAAAAAAAQAAAKoAAAAAAAAAAAAAAJAKAAAAAAAAAQAAAKsAAAAAAAAAAAAAAKAKAAAAAAAAAQAAAKwAAAAAAAAAAAAAALAKAAAAAAAAAQAAAK0AAAAAAAAAAAAAAMAKAAAAAAAAAQAAAK4AAAAAAAAAAAAAANAKAAAAAAAAAQAAAK8AAAAAAAAAAAAAAOAKAAAAAAAAAQAAALAAAAAAAAAAAAAAAPAKAAAAAAAAAQAAALEAAAAAAAAAAAAAAAALAAAAAAAAAQAAALIAAAAAAAAAAAAAABALAAAAAAAAAQAAALMAAAAAAAAAAAAAACALAAAAAAAAAQAAALQAAAAAAAAAAAAAADALAAAAAAAAAQAAALUAAAAAAAAAAAAAAEALAAAAAAAAAQAAALYAAAAAAAAAAAAAAFALAAAAAAAAAQAAALcAAAAAAAAAAAAAAGALAAAAAAAAAQAAALgAAAAAAAAAAAAAAHALAAAAAAAAAQAAALkAAAAAAAAAAAAAAIALAAAAAAAAAQAAALoAAAAAAAAAAAAAAJALAAAAAAAAAQAAALsAAAAAAAAAAAAAAKALAAAAAAAAAQAAALwAAAAAAAAAAAAAALALAAAAAAAAAQAAAL0AAAAAAAAAAAAAAMALAAAAAAAAAQAAAL4AAAAAAAAAAAAAANALAAAAAAAAAQAAAL8AAAAAAAAAAAAAAOALAAAAAAAAAQAAAMAAAAAAAAAAAAAAAPALAAAAAAAAAQAAAMEAAAAAAAAAAAAAAAAMAAAAAAAAAQAAAMIAAAAAAAAAAAAAABAMAAAAAAAAAQAAAMMAAAAAAAAAAAAAACAMAAAAAAAAAQAAAMQAAAAAAAAAAAAAADAMAAAAAAAAAQAAAMUAAAAAAAAAAAAAAEAMAAAAAAAAAQAAAMYAAAAAAAAAAAAAAFAMAAAAAAAAAQAAAMcAAAAAAAAAAAAAAGAMAAAAAAAAAQAAAMgAAAAAAAAAAAAAAHAMAAAAAAAAAQAAAMkAAAAAAAAAAAAAAIAMAAAAAAAAAQAAAMoAAAAAAAAAAAAAAJAMAAAAAAAAAQAAAMsAAAAAAAAAAAAAAKAMAAAAAAAAAQAAAMwAAAAAAAAAAAAAALAMAAAAAAAAAQAAAM0AAAAAAAAAAAAAAMAMAAAAAAAAAQAAAM4AAAAAAAAAAAAAANAMAAAAAAAAAQAAAM8AAAAAAAAAAAAAAOAMAAAAAAAAAQAAANAAAAAAAAAAAAAAAPAMAAAAAAAAAQAAANEAAAAAAAAAAAAAAAANAAAAAAAAAQAAANIAAAAAAAAAAAAAABANAAAAAAAAAQAAANMAAAAAAAAAAAAAACANAAAAAAAAAQAAANQAAAAAAAAAAAAAADANAAAAAAAAAQAAANUAAAAAAAAAAAAAAEANAAAAAAAAAQAAANYAAAAAAAAAAAAAAFANAAAAAAAAAQAAANcAAAAAAAAAAAAAAGANAAAAAAAAAQAAANgAAAAAAAAAAAAAAHANAAAAAAAAAQAAANkAAAAAAAAAAAAAAIANAAAAAAAAAQAAANoAAAAAAAAAAAAAAJANAAAAAAAAAQAAANsAAAAAAAAAAAAAAKANAAAAAAAAAQAAANwAAAAAAAAAAAAAALANAAAAAAAAAQAAAN0AAAAAAAAAAAAAAMANAAAAAAAAAQAAAN4AAAAAAAAAAAAAANANAAAAAAAAAQAAAN8AAAAAAAAAAAAAAOANAAAAAAAAAQAAAOAAAAAAAAAAAAAAAPANAAAAAAAAAQAAAOEAAAAAAAAAAAAAAAAOAAAAAAAAAQAAAOIAAAAAAAAAAAAAABAOAAAAAAAAAQAAAOMAAAAAAAAAAAAAACAOAAAAAAAAAQAAAOQAAAAAAAAAAAAAADAOAAAAAAAAAQAAAOUAAAAAAAAAAAAAAEAOAAAAAAAAAQAAAOYAAAAAAAAAAAAAAFAOAAAAAAAAAQAAAOcAAAAAAAAAAAAAAGAOAAAAAAAAAQAAAOgAAAAAAAAAAAAAAHAOAAAAAAAAAQAAAOkAAAAAAAAAAAAAAIAOAAAAAAAAAQAAAOoAAAAAAAAAAAAAAJAOAAAAAAAAAQAAAOsAAAAAAAAAAAAAAKAOAAAAAAAAAQAAAOwAAAAAAAAAAAAAALAOAAAAAAAAAQAAAO0AAAAAAAAAAAAAAMAOAAAAAAAAAQAAAO4AAAAAAAAAAAAAANAOAAAAAAAAAQAAAO8AAAAAAAAAAAAAAOAOAAAAAAAAAQAAAPAAAAAAAAAAAAAAAPAOAAAAAAAAAQAAAPEAAAAAAAAAAAAAAAAPAAAAAAAAAQAAAPIAAAAAAAAAAAAAABAPAAAAAAAAAQAAAPMAAAAAAAAAAAAAACAPAAAAAAAAAQAAAPQAAAAAAAAAAAAAADAPAAAAAAAAAQAAAPUAAAAAAAAAAAAAAEAPAAAAAAAAAQAAAPYAAAAAAAAAAAAAAFAPAAAAAAAAAQAAAPcAAAAAAAAAAAAAAGAPAAAAAAAAAQAAAPgAAAAAAAAAAAAAAHAPAAAAAAAAAQAAAPkAAAAAAAAAAAAAAIAPAAAAAAAAAQAAAPoAAAAAAAAAAAAAAJAPAAAAAAAAAQAAAPsAAAAAAAAAAAAAAKAPAAAAAAAAAQAAAPwAAAAAAAAAAAAAALAPAAAAAAAAAQAAAP0AAAAAAAAAAAAAAMAPAAAAAAAAAQAAAP4AAAAAAAAAAAAAANAPAAAAAAAAAQAAAP8AAAAAAAAAAAAAAOAPAAAAAAAAAQAAAAABAAAAAAAAAAAAAPAPAAAAAAAAAQAAAAEBAAAAAAAAAAAAAAAQAAAAAAAAAQAAAAIBAAAAAAAAAAAAABAQAAAAAAAAAQAAAAMBAAAAAAAAAAAAACAQAAAAAAAAAQAAAAQBAAAAAAAAAAAAADAQAAAAAAAAAQAAAAUBAAAAAAAAAAAAAEAQAAAAAAAAAQAAAAYBAAAAAAAAAAAAAFAQAAAAAAAAAQAAAAcBAAAAAAAAAAAAAGAQAAAAAAAAAQAAAAgBAAAAAAAAAAAAAHAQAAAAAAAAAQAAAAkBAAAAAAAAAAAAAIAQAAAAAAAAAQAAAAoBAAAAAAAAAAAAAJAQAAAAAAAAAQAAAAsBAAAAAAAAAAAAAKAQAAAAAAAAAQAAAAwBAAAAAAAAAAAAALAQAAAAAAAAAQAAAA0BAAAAAAAAAAAAAMAQAAAAAAAAAQAAAA4BAAAAAAAAAAAAANAQAAAAAAAAAQAAAA8BAAAAAAAAAAAAAOAQAAAAAAAAAQAAABABAAAAAAAAAAAAAPAQAAAAAAAAAQAAABEBAAAAAAAAAAAAAAARAAAAAAAAAQAAABIBAAAAAAAAAAAAABARAAAAAAAAAQAAABMBAAAAAAAAAAAAACARAAAAAAAAAQAAABQBAAAAAAAAAAAAADARAAAAAAAAAQAAABUBAAAAAAAAAAAAAEARAAAAAAAAAQAAABYBAAAAAAAAAAAAAFARAAAAAAAAAQAAABcBAAAAAAAAAAAAAGARAAAAAAAAAQAAABgBAAAAAAAAAAAAAHARAAAAAAAAAQAAABkBAAAAAAAAAAAAAIARAAAAAAAAAQAAABoBAAAAAAAAAAAAAJARAAAAAAAAAQAAABsBAAAAAAAAAAAAAKARAAAAAAAAAQAAABwBAAAAAAAAAAAAALARAAAAAAAAAQAAAB0BAAAAAAAAAAAAAMARAAAAAAAAAQAAAB4BAAAAAAAAAAAAANARAAAAAAAAAQAAAB8BAAAAAAAAAAAAAOARAAAAAAAAAQAAACABAAAAAAAAAAAAAPARAAAAAAAAAQAAACEBAAAAAAAAAAAAAAASAAAAAAAAAQAAACIBAAAAAAAAAAAAABASAAAAAAAAAQAAACMBAAAAAAAAAAAAACASAAAAAAAAAQAAACQBAAAAAAAAAAAAADASAAAAAAAAAQAAACUBAAAAAAAAAAAAAEASAAAAAAAAAQAAACYBAAAAAAAAAAAAAFASAAAAAAAAAQAAACcBAAAAAAAAAAAAAGASAAAAAAAAAQAAACgBAAAAAAAAAAAAAHASAAAAAAAAAQAAACkBAAAAAAAAAAAAAIASAAAAAAAAAQAAACoBAAAAAAAAAAAAAJASAAAAAAAAAQAAACsBAAAAAAAAAAAAAKASAAAAAAAAAQAAACwBAAAAAAAAAAAAALASAAAAAAAAAQAAAC0BAAAAAAAAAAAAAMASAAAAAAAAAQAAAC4BAAAAAAAAAAAAANASAAAAAAAAAQAAAC8BAAAAAAAAAAAAAOASAAAAAAAAAQAAADABAAAAAAAAAAAAAPASAAAAAAAAAQAAADEBAAAAAAAAAAAAAAATAAAAAAAAAQAAADIBAAAAAAAAAAAAABATAAAAAAAAAQAAADMBAAAAAAAAAAAAACATAAAAAAAAAQAAADQBAAAAAAAAAAAAADATAAAAAAAAAQAAADUBAAAAAAAAAAAAAEATAAAAAAAAAQAAADYBAAAAAAAAAAAAAFATAAAAAAAAAQAAADcBAAAAAAAAAAAAAGATAAAAAAAAAQAAADgBAAAAAAAAAAAAAHATAAAAAAAAAQAAADkBAAAAAAAAAAAAAIATAAAAAAAAAQAAADoBAAAAAAAAAAAAAJATAAAAAAAAAQAAADsBAAAAAAAAAAAAAKATAAAAAAAAAQAAADwBAAAAAAAAAAAAALATAAAAAAAAAQAAAD0BAAAAAAAAAAAAAMATAAAAAAAAAQAAAD4BAAAAAAAAAAAAANATAAAAAAAAAQAAAD8BAAAAAAAAAAAAAOATAAAAAAAAAQAAAEABAAAAAAAAAAAAAPATAAAAAAAAAQAAAEEBAAAAAAAAAAAAAAAUAAAAAAAAAQAAAEIBAAAAAAAAAAAAABAUAAAAAAAAAQAAAEMBAAAAAAAAAAAAACAUAAAAAAAAAQAAAEQBAAAAAAAAAAAAADAUAAAAAAAAAQAAAEUBAAAAAAAAAAAAAEAUAAAAAAAAAQAAAEYBAAAAAAAAAAAAAFAUAAAAAAAAAQAAAEcBAAAAAAAAAAAAAGAUAAAAAAAAAQAAAEgBAAAAAAAAAAAAAHAUAAAAAAAAAQAAAEkBAAAAAAAAAAAAAIAUAAAAAAAAAQAAAEoBAAAAAAAAAAAAAJAUAAAAAAAAAQAAAEsBAAAAAAAAAAAAAKAUAAAAAAAAAQAAAEwBAAAAAAAAAAAAALAUAAAAAAAAAQAAAE0BAAAAAAAAAAAAAMAUAAAAAAAAAQAAAE4BAAAAAAAAAAAAANAUAAAAAAAAAQAAAE8BAAAAAAAAAAAAAOAUAAAAAAAAAQAAAFABAAAAAAAAAAAAAPAUAAAAAAAAAQAAAFEBAAAAAAAAAAAAAAAVAAAAAAAAAQAAAFIBAAAAAAAAAAAAABAVAAAAAAAAAQAAAFMBAAAAAAAAAAAAACAVAAAAAAAAAQAAAFQBAAAAAAAAAAAAADAVAAAAAAAAAQAAAFUBAAAAAAAAAAAAAEAVAAAAAAAAAQAAAFYBAAAAAAAAAAAAAFAVAAAAAAAAAQAAAFcBAAAAAAAAAAAAAGAVAAAAAAAAAQAAAFgBAAAAAAAAAAAAAHAVAAAAAAAAAQAAAFkBAAAAAAAAAAAAAIAVAAAAAAAAAQAAAFoBAAAAAAAAAAAAAJAVAAAAAAAAAQAAAFsBAAAAAAAAAAAAAKAVAAAAAAAAAQAAAFwBAAAAAAAAAAAAALAVAAAAAAAAAQAAAF0BAAAAAAAAAAAAAMAVAAAAAAAAAQAAAF4BAAAAAAAAAAAAANAVAAAAAAAAAQAAAF8BAAAAAAAAAAAAAOAVAAAAAAAAAQAAAGABAAAAAAAAAAAAAPAVAAAAAAAAAQAAAGEBAAAAAAAAAAAAAAAWAAAAAAAAAQAAAGIBAAAAAAAAAAAAABAWAAAAAAAAAQAAAGMBAAAAAAAAAAAAACAWAAAAAAAAAQAAAGQBAAAAAAAAAAAAADAWAAAAAAAAAQAAAGUBAAAAAAAAAAAAAEAWAAAAAAAAAQAAAGYBAAAAAAAAAAAAAFAWAAAAAAAAAQAAAGcBAAAAAAAAAAAAAGAWAAAAAAAAAQAAAGgBAAAAAAAAAAAAAHAWAAAAAAAAAQAAAGkBAAAAAAAAAAAAAIAWAAAAAAAAAQAAAGoBAAAAAAAAAAAAAJAWAAAAAAAAAQAAAGsBAAAAAAAAAAAAAKAWAAAAAAAAAQAAAGwBAAAAAAAAAAAAALAWAAAAAAAAAQAAAG0BAAAAAAAAAAAAAMAWAAAAAAAAAQAAAG4BAAAAAAAAAAAAANAWAAAAAAAAAQAAAG8BAAAAAAAAAAAAAOAWAAAAAAAAAQAAAHABAAAAAAAAAAAAAPAWAAAAAAAAAQAAAHEBAAAAAAAAAAAAAAAXAAAAAAAAAQAAAHIBAAAAAAAAAAAAABAXAAAAAAAAAQAAAHMBAAAAAAAAAAAAACAXAAAAAAAAAQAAAHQBAAAAAAAAAAAAADAXAAAAAAAAAQAAAHUBAAAAAAAAAAAAAEAXAAAAAAAAAQAAAHYBAAAAAAAAAAAAAFAXAAAAAAAAAQAAAHcBAAAAAAAAAAAAAGAXAAAAAAAAAQAAAHgBAAAAAAAAAAAAAHAXAAAAAAAAAQAAAHkBAAAAAAAAAAAAAIAXAAAAAAAAAQAAAHoBAAAAAAAAAAAAAJAXAAAAAAAAAQAAAHsBAAAAAAAAAAAAAKAXAAAAAAAAAQAAAHwBAAAAAAAAAAAAALAXAAAAAAAAAQAAAH0BAAAAAAAAAAAAAMAXAAAAAAAAAQAAAH4BAAAAAAAAAAAAANAXAAAAAAAAAQAAAH8BAAAAAAAAAAAAAOAXAAAAAAAAAQAAAIABAAAAAAAAAAAAAPAXAAAAAAAAAQAAAIEBAAAAAAAAAAAAAAAYAAAAAAAAAQAAAIIBAAAAAAAAAAAAABAYAAAAAAAAAQAAAIMBAAAAAAAAAAAAACAYAAAAAAAAAQAAAIQBAAAAAAAAAAAAADAYAAAAAAAAAQAAAIUBAAAAAAAAAAAAAEAYAAAAAAAAAQAAAIYBAAAAAAAAAAAAAFAYAAAAAAAAAQAAAIcBAAAAAAAAAAAAAGAYAAAAAAAAAQAAAIgBAAAAAAAAAAAAAHAYAAAAAAAAAQAAAIkBAAAAAAAAAAAAAIAYAAAAAAAAAQAAAIoBAAAAAAAAAAAAAJAYAAAAAAAAAQAAAIsBAAAAAAAAAAAAAKAYAAAAAAAAAQAAAIwBAAAAAAAAAAAAALAYAAAAAAAAAQAAAI0BAAAAAAAAAAAAAMAYAAAAAAAAAQAAAI4BAAAAAAAAAAAAANAYAAAAAAAAAQAAAI8BAAAAAAAAAAAAAOAYAAAAAAAAAQAAAJABAAAAAAAAAAAAAPAYAAAAAAAAAQAAAJEBAAAAAAAAAAAAAAAZAAAAAAAAAQAAAJIBAAAAAAAAAAAAABAZAAAAAAAAAQAAAJMBAAAAAAAAAAAAACAZAAAAAAAAAQAAAJQBAAAAAAAAAAAAADAZAAAAAAAAAQAAAJUBAAAAAAAAAAAAAEAZAAAAAAAAAQAAAJYBAAAAAAAAAAAAAFAZAAAAAAAAAQAAAJcBAAAAAAAAAAAAAGAZAAAAAAAAAQAAAJgBAAAAAAAAAAAAAHAZAAAAAAAAAQAAAJkBAAAAAAAAAAAAAIAZAAAAAAAAAQAAAJoBAAAAAAAAAAAAAJAZAAAAAAAAAQAAAJsBAAAAAAAAAAAAAKAZAAAAAAAAAQAAAJwBAAAAAAAAAAAAALAZAAAAAAAAAQAAAJ0BAAAAAAAAAAAAAMAZAAAAAAAAAQAAAJ4BAAAAAAAAAAAAANAZAAAAAAAAAQAAAJ8BAAAAAAAAAAAAAOAZAAAAAAAAAQAAAKABAAAAAAAAAAAAAPAZAAAAAAAAAQAAAKEBAAAAAAAAAAAAAAAaAAAAAAAAAQAAAKIBAAAAAAAAAAAAABAaAAAAAAAAAQAAAKMBAAAAAAAAAAAAACAaAAAAAAAAAQAAAKQBAAAAAAAAAAAAADAaAAAAAAAAAQAAAKUBAAAAAAAAAAAAAEAaAAAAAAAAAQAAAKYBAAAAAAAAAAAAAFAaAAAAAAAAAQAAAKcBAAAAAAAAAAAAAGAaAAAAAAAAAQAAAKgBAAAAAAAAAAAAAHAaAAAAAAAAAQAAAKkBAAAAAAAAAAAAAIAaAAAAAAAAAQAAAKoBAAAAAAAAAAAAAJAaAAAAAAAAAQAAAKsBAAAAAAAAAAAAAKAaAAAAAAAAAQAAAKwBAAAAAAAAAAAAALAaAAAAAAAAAQAAAK0BAAAAAAAAAAAAAMAaAAAAAAAAAQAAAK4BAAAAAAAAAAAAANAaAAAAAAAAAQAAAK8BAAAAAAAAAAAAAOAaAAAAAAAAAQAAALABAAAAAAAAAAAAAPAaAAAAAAAAAQAAALEBAAAAAAAAAAAAAAAbAAAAAAAAAQAAALIBAAAAAAAAAAAAABAbAAAAAAAAAQAAALMBAAAAAAAAAAAAACAbAAAAAAAAAQAAALQBAAAAAAAAAAAAADAbAAAAAAAAAQAAALUBAAAAAAAAAAAAAEAbAAAAAAAAAQAAALYBAAAAAAAAAAAAAFAbAAAAAAAAAQAAALcBAAAAAAAAAAAAAGAbAAAAAAAAAQAAALgBAAAAAAAAAAAAAHAbAAAAAAAAAQAAALkBAAAAAAAAAAAAAIAbAAAAAAAAAQAAALoBAAAAAAAAAAAAAJAbAAAAAAAAAQAAALsBAAAAAAAAAAAAAKAbAAAAAAAAAQAAALwBAAAAAAAAAAAAALAbAAAAAAAAAQAAAL0BAAAAAAAAAAAAAMAbAAAAAAAAAQAAAL4BAAAAAAAAAAAAANAbAAAAAAAAAQAAAL8BAAAAAAAAAAAAAOAbAAAAAAAAAQAAAMABAAAAAAAAAAAAAPAbAAAAAAAAAQAAAMEBAAAAAAAAAAAAAAAcAAAAAAAAAQAAAMIBAAAAAAAAAAAAABAcAAAAAAAAAQAAAMMBAAAAAAAAAAAAACAcAAAAAAAAAQAAAMQBAAAAAAAAAAAAADAcAAAAAAAAAQAAAMUBAAAAAAAAAAAAAEAcAAAAAAAAAQAAAMYBAAAAAAAAAAAAAFAcAAAAAAAAAQAAAMcBAAAAAAAAAAAAAGAcAAAAAAAAAQAAAMgBAAAAAAAAAAAAAHAcAAAAAAAAAQAAAMkBAAAAAAAAAAAAAIAcAAAAAAAAAQAAAMoBAAAAAAAAAAAAAJAcAAAAAAAAAQAAAMsBAAAAAAAAAAAAAKAcAAAAAAAAAQAAAMwBAAAAAAAAAAAAALAcAAAAAAAAAQAAAM0BAAAAAAAAAAAAAMAcAAAAAAAAAQAAAM4BAAAAAAAAAAAAANAcAAAAAAAAAQAAAM8BAAAAAAAAAAAAAOAcAAAAAAAAAQAAANABAAAAAAAAAAAAAPAcAAAAAAAAAQAAANEBAAAAAAAAAAAAAAAdAAAAAAAAAQAAANIBAAAAAAAAAAAAABAdAAAAAAAAAQAAANMBAAAAAAAAAAAAACAdAAAAAAAAAQAAANQBAAAAAAAAAAAAADAdAAAAAAAAAQAAANUBAAAAAAAAAAAAAEAdAAAAAAAAAQAAANYBAAAAAAAAAAAAAFAdAAAAAAAAAQAAANcBAAAAAAAAAAAAAGAdAAAAAAAAAQAAANgBAAAAAAAAAAAAAHAdAAAAAAAAAQAAANkBAAAAAAAAAAAAAIAdAAAAAAAAAQAAANoBAAAAAAAAAAAAAJAdAAAAAAAAAQAAANsBAAAAAAAAAAAAAKAdAAAAAAAAAQAAANwBAAAAAAAAAAAAALAdAAAAAAAAAQAAAN0BAAAAAAAAAAAAAMAdAAAAAAAAAQAAAN4BAAAAAAAAAAAAANAdAAAAAAAAAQAAAN8BAAAAAAAAAAAAAOAdAAAAAAAAAQAAAOABAAAAAAAAAAAAAPAdAAAAAAAAAQAAAOEBAAAAAAAAAAAAAAAeAAAAAAAAAQAAAOIBAAAAAAAAAAAAABAeAAAAAAAAAQAAAOMBAAAAAAAAAAAAACAeAAAAAAAAAQAAAOQBAAAAAAAAAAAAADAeAAAAAAAAAQAAAOUBAAAAAAAAAAAAAEAeAAAAAAAAAQAAAOYBAAAAAAAAAAAAAFAeAAAAAAAAAQAAAOcBAAAAAAAAAAAAAGAeAAAAAAAAAQAAAOgBAAAAAAAAAAAAAHAeAAAAAAAAAQAAAOkBAAAAAAAAAAAAAIAeAAAAAAAAAQAAAOoBAAAAAAAAAAAAAJAeAAAAAAAAAQAAAOsBAAAAAAAAAAAAAKAeAAAAAAAAAQAAAOwBAAAAAAAAAAAAALAeAAAAAAAAAQAAAO0BAAAAAAAAAAAAAMAeAAAAAAAAAQAAAO4BAAAAAAAAAAAAANAeAAAAAAAAAQAAAO8BAAAAAAAAAAAAAOAeAAAAAAAAAQAAAPABAAAAAAAAAAAAAPAeAAAAAAAAAQAAAPEBAAAAAAAAAAAAAAAfAAAAAAAAAQAAAPIBAAAAAAAAAAAAABAfAAAAAAAAAQAAAPMBAAAAAAAAAAAAACAfAAAAAAAAAQAAAPQBAAAAAAAAAAAAADAfAAAAAAAAAQAAAPUBAAAAAAAAAAAAAEAfAAAAAAAAAQAAAPYBAAAAAAAAAAAAAFAfAAAAAAAAAQAAAPcBAAAAAAAAAAAAAGAfAAAAAAAAAQAAAPgBAAAAAAAAAAAAAHAfAAAAAAAAAQAAAPkBAAAAAAAAAAAAAIAfAAAAAAAAAQAAAPoBAAAAAAAAAAAAAJAfAAAAAAAAAQAAAPsBAAAAAAAAAAAAAKAfAAAAAAAAAQAAAPwBAAAAAAAAAAAAALAfAAAAAAAAAQAAAP0BAAAAAAAAAAAAAMAfAAAAAAAAAQAAAP4BAAAAAAAAAAAAANAfAAAAAAAAAQAAAP8BAAAAAAAAAAAAAOAfAAAAAAAAAQAAAAACAAAAAAAAAAAAAPAfAAAAAAAAAQAAAAECAAAAAAAAAAAAAAAgAAAAAAAAAQAAAAICAAAAAAAAAAAAABAgAAAAAAAAAQAAAAMCAAAAAAAAAAAAACAgAAAAAAAAAQAAAAQCAAAAAAAAAAAAADAgAAAAAAAAAQAAAAUCAAAAAAAAAAAAAEAgAAAAAAAAAQAAAAYCAAAAAAAAAAAAAFAgAAAAAAAAAQAAAAcCAAAAAAAAAAAAAGAgAAAAAAAAAQAAAAgCAAAAAAAAAAAAAHAgAAAAAAAAAQAAAAkCAAAAAAAAAAAAAIAgAAAAAAAAAQAAAAoCAAAAAAAAAAAAAJAgAAAAAAAAAQAAAAsCAAAAAAAAAAAAAKAgAAAAAAAAAQAAAAwCAAAAAAAAAAAAALAgAAAAAAAAAQAAAA0CAAAAAAAAAAAAAMAgAAAAAAAAAQAAAA4CAAAAAAAAAAAAANAgAAAAAAAAAQAAAA8CAAAAAAAAAAAAAOAgAAAAAAAAAQAAABACAAAAAAAAAAAAAPAgAAAAAAAAAQAAABECAAAAAAAAAAAAAAAhAAAAAAAAAQAAABICAAAAAAAAAAAAABAhAAAAAAAAAQAAABMCAAAAAAAAAAAAACAhAAAAAAAAAQAAABQCAAAAAAAAAAAAADAhAAAAAAAAAQAAABUCAAAAAAAAAAAAAEAhAAAAAAAAAQAAABYCAAAAAAAAAAAAAFAhAAAAAAAAAQAAABcCAAAAAAAAAAAAAGAhAAAAAAAAAQAAABgCAAAAAAAAAAAAAHAhAAAAAAAAAQAAABkCAAAAAAAAAAAAAIAhAAAAAAAAAQAAABoCAAAAAAAAAAAAAJAhAAAAAAAAAQAAABsCAAAAAAAAAAAAAKAhAAAAAAAAAQAAABwCAAAAAAAAAAAAALAhAAAAAAAAAQAAAB0CAAAAAAAAAAAAAMAhAAAAAAAAAQAAAB4CAAAAAAAAAAAAANAhAAAAAAAAAQAAAB8CAAAAAAAAAAAAAOAhAAAAAAAAAQAAACACAAAAAAAAAAAAAPAhAAAAAAAAAQAAACECAAAAAAAAAAAAAAAiAAAAAAAAAQAAACICAAAAAAAAAAAAABAiAAAAAAAAAQAAACMCAAAAAAAAAAAAACAiAAAAAAAAAQAAACQCAAAAAAAAAAAAADAiAAAAAAAAAQAAACUCAAAAAAAAAAAAAEAiAAAAAAAAAQAAACYCAAAAAAAAAAAAAFAiAAAAAAAAAQAAACcCAAAAAAAAAAAAAGAiAAAAAAAAAQAAACgCAAAAAAAAAAAAAHAiAAAAAAAAAQAAACkCAAAAAAAAAAAAAIAiAAAAAAAAAQAAACoCAAAAAAAAAAAAAJAiAAAAAAAAAQAAACsCAAAAAAAAAAAAAKAiAAAAAAAAAQAAACwCAAAAAAAAAAAAALAiAAAAAAAAAQAAAC0CAAAAAAAAAAAAAMAiAAAAAAAAAQAAAC4CAAAAAAAAAAAAANAiAAAAAAAAAQAAAC8CAAAAAAAAAAAAAOAiAAAAAAAAAQAAADACAAAAAAAAAAAAAPAiAAAAAAAAAQAAADECAAAAAAAAAAAAAAAjAAAAAAAAAQAAADICAAAAAAAAAAAAABAjAAAAAAAAAQAAADMCAAAAAAAAAAAAACAjAAAAAAAAAQAAADQCAAAAAAAAAAAAADAjAAAAAAAAAQAAADUCAAAAAAAAAAAAAEAjAAAAAAAAAQAAADYCAAAAAAAAAAAAAFAjAAAAAAAAAQAAADcCAAAAAAAAAAAAAGAjAAAAAAAAAQAAADgCAAAAAAAAAAAAAHAjAAAAAAAAAQAAADkCAAAAAAAAAAAAAIAjAAAAAAAAAQAAADoCAAAAAAAAAAAAAJAjAAAAAAAAAQAAADsCAAAAAAAAAAAAAKAjAAAAAAAAAQAAADwCAAAAAAAAAAAAALAjAAAAAAAAAQAAAD0CAAAAAAAAAAAAAMAjAAAAAAAAAQAAAD4CAAAAAAAAAAAAANAjAAAAAAAAAQAAAD8CAAAAAAAAAAAAAOAjAAAAAAAAAQAAAEACAAAAAAAAAAAAAPAjAAAAAAAAAQAAAEECAAAAAAAAAAAAAAAkAAAAAAAAAQAAAEICAAAAAAAAAAAAABAkAAAAAAAAAQAAAEMCAAAAAAAAAAAAACAkAAAAAAAAAQAAAEQCAAAAAAAAAAAAADAkAAAAAAAAAQAAAEUCAAAAAAAAAAAAAEAkAAAAAAAAAQAAAEYCAAAAAAAAAAAAAFAkAAAAAAAAAQAAAEcCAAAAAAAAAAAAAGAkAAAAAAAAAQAAAEgCAAAAAAAAAAAAAHAkAAAAAAAAAQAAAEkCAAAAAAAAAAAAAIAkAAAAAAAAAQAAAEoCAAAAAAAAAAAAAJAkAAAAAAAAAQAAAEsCAAAAAAAAAAAAAKAkAAAAAAAAAQAAAEwCAAAAAAAAAAAAALAkAAAAAAAAAQAAAE0CAAAAAAAAAAAAAMAkAAAAAAAAAQAAAE4CAAAAAAAAAAAAANAkAAAAAAAAAQAAAE8CAAAAAAAAAAAAAOAkAAAAAAAAAQAAAFACAAAAAAAAAAAAAPAkAAAAAAAAAQAAAFECAAAAAAAAAAAAAAAlAAAAAAAAAQAAAFICAAAAAAAAAAAAABAlAAAAAAAAAQAAAFMCAAAAAAAAAAAAACAlAAAAAAAAAQAAAFQCAAAAAAAAAAAAADAlAAAAAAAAAQAAAFUCAAAAAAAAAAAAAEAlAAAAAAAAAQAAAFYCAAAAAAAAAAAAAFAlAAAAAAAAAQAAAFcCAAAAAAAAAAAAAGAlAAAAAAAAAQAAAFgCAAAAAAAAAAAAAHAlAAAAAAAAAQAAAFkCAAAAAAAAAAAAAIAlAAAAAAAAAQAAAFoCAAAAAAAAAAAAAJAlAAAAAAAAAQAAAFsCAAAAAAAAAAAAAKAlAAAAAAAAAQAAAFwCAAAAAAAAAAAAALAlAAAAAAAAAQAAAF0CAAAAAAAAAAAAAMAlAAAAAAAAAQAAAF4CAAAAAAAAAAAAANAlAAAAAAAAAQAAAF8CAAAAAAAAAAAAAOAlAAAAAAAAAQAAAGACAAAAAAAAAAAAAPAlAAAAAAAAAQAAAGECAAAAAAAAAAAAAAAmAAAAAAAAAQAAAGICAAAAAAAAAAAAABAmAAAAAAAAAQAAAGMCAAAAAAAAAAAAACAmAAAAAAAAAQAAAGQCAAAAAAAAAAAAADAmAAAAAAAAAQAAAGUCAAAAAAAAAAAAAEAmAAAAAAAAAQAAAGYCAAAAAAAAAAAAAFAmAAAAAAAAAQAAAGcCAAAAAAAAAAAAAGAmAAAAAAAAAQAAAGgCAAAAAAAAAAAAAHAmAAAAAAAAAQAAAGkCAAAAAAAAAAAAAIAmAAAAAAAAAQAAAGoCAAAAAAAAAAAAAJAmAAAAAAAAAQAAAGsCAAAAAAAAAAAAAKAmAAAAAAAAAQAAAGwCAAAAAAAAAAAAALAmAAAAAAAAAQAAAG0CAAAAAAAAAAAAAMAmAAAAAAAAAQAAAG4CAAAAAAAAAAAAANAmAAAAAAAAAQAAAG8CAAAAAAAAAAAAAOAmAAAAAAAAAQAAAHACAAAAAAAAAAAAAPAmAAAAAAAAAQAAAHECAAAAAAAAAAAAAAAnAAAAAAAAAQAAAHICAAAAAAAAAAAAABAnAAAAAAAAAQAAAHMCAAAAAAAAAAAAACAnAAAAAAAAAQAAAHQCAAAAAAAAAAAAADAnAAAAAAAAAQAAAHUCAAAAAAAAAAAAAEAnAAAAAAAAAQAAAHYCAAAAAAAAAAAAAFAnAAAAAAAAAQAAAHcCAAAAAAAAAAAAAGAnAAAAAAAAAQAAAHgCAAAAAAAAAAAAAHAnAAAAAAAAAQAAAHkCAAAAAAAAAAAAAIAnAAAAAAAAAQAAAHoCAAAAAAAAAAAAAJAnAAAAAAAAAQAAAHsCAAAAAAAAAAAAAKAnAAAAAAAAAQAAAHwCAAAAAAAAAAAAALAnAAAAAAAAAQAAAH0CAAAAAAAAAAAAAMAnAAAAAAAAAQAAAH4CAAAAAAAAAAAAANAnAAAAAAAAAQAAAH8CAAAAAAAAAAAAAOAnAAAAAAAAAQAAAIACAAAAAAAAAAAAAPAnAAAAAAAAAQAAAIECAAAAAAAAAAAAAAAoAAAAAAAAAQAAAIICAAAAAAAAAAAAABAoAAAAAAAAAQAAAIMCAAAAAAAAAAAAACAoAAAAAAAAAQAAAIQCAAAAAAAAAAAAADAoAAAAAAAAAQAAAIUCAAAAAAAAAAAAAEAoAAAAAAAAAQAAAIYCAAAAAAAAAAAAAFAoAAAAAAAAAQAAAIcCAAAAAAAAAAAAAGAoAAAAAAAAAQAAAIgCAAAAAAAAAAAAAHAoAAAAAAAAAQAAAIkCAAAAAAAAAAAAAIAoAAAAAAAAAQAAAIoCAAAAAAAAAAAAAJAoAAAAAAAAAQAAAIsCAAAAAAAAAAAAAKAoAAAAAAAAAQAAAIwCAAAAAAAAAAAAALAoAAAAAAAAAQAAAI0CAAAAAAAAAAAAAMAoAAAAAAAAAQAAAI4CAAAAAAAAAAAAANAoAAAAAAAAAQAAAI8CAAAAAAAAAAAAAOAoAAAAAAAAAQAAAJACAAAAAAAAAAAAAPAoAAAAAAAAAQAAAJECAAAAAAAAAAAAAAApAAAAAAAAAQAAAJICAAAAAAAAAAAAABApAAAAAAAAAQAAAJMCAAAAAAAAAAAAACApAAAAAAAAAQAAAJQCAAAAAAAAAAAAADApAAAAAAAAAQAAAJUCAAAAAAAAAAAAAEApAAAAAAAAAQAAAJYCAAAAAAAAAAAAAFApAAAAAAAAAQAAAJcCAAAAAAAAAAAAAGApAAAAAAAAAQAAAJgCAAAAAAAAAAAAAHApAAAAAAAAAQAAAJkCAAAAAAAAAAAAAIApAAAAAAAAAQAAAJoCAAAAAAAAAAAAAJApAAAAAAAAAQAAAJsCAAAAAAAAAAAAAKApAAAAAAAAAQAAAJwCAAAAAAAAAAAAALApAAAAAAAAAQAAAJ0CAAAAAAAAAAAAAMApAAAAAAAAAQAAAJ4CAAAAAAAAAAAAANApAAAAAAAAAQAAAJ8CAAAAAAAAAAAAAOApAAAAAAAAAQAAAKACAAAAAAAAAAAAAPApAAAAAAAAAQAAAKECAAAAAAAAAAAAAAAqAAAAAAAAAQAAAKICAAAAAAAAAAAAABAqAAAAAAAAAQAAAKMCAAAAAAAAAAAAACAqAAAAAAAAAQAAAKQCAAAAAAAAAAAAADAqAAAAAAAAAQAAAKUCAAAAAAAAAAAAAEAqAAAAAAAAAQAAAKYCAAAAAAAAAAAAAFAqAAAAAAAAAQAAAKcCAAAAAAAAAAAAAGAqAAAAAAAAAQAAAKgCAAAAAAAAAAAAAHAqAAAAAAAAAQAAAKkCAAAAAAAAAAAAAIAqAAAAAAAAAQAAAKoCAAAAAAAAAAAAAJAqAAAAAAAAAQAAAKsCAAAAAAAAAAAAAKAqAAAAAAAAAQAAAKwCAAAAAAAAAAAAALAqAAAAAAAAAQAAAK0CAAAAAAAAAAAAAMAqAAAAAAAAAQAAAK4CAAAAAAAAAAAAANAqAAAAAAAAAQAAAK8CAAAAAAAAAAAAAOAqAAAAAAAAAQAAALACAAAAAAAAAAAAAPAqAAAAAAAAAQAAALECAAAAAAAAAAAAAAArAAAAAAAAAQAAALICAAAAAAAAAAAAABArAAAAAAAAAQAAALMCAAAAAAAAAAAAACArAAAAAAAAAQAAALQCAAAAAAAAAAAAADArAAAAAAAAAQAAALUCAAAAAAAAAAAAAEArAAAAAAAAAQAAALYCAAAAAAAAAAAAAFArAAAAAAAAAQAAALcCAAAAAAAAAAAAAGArAAAAAAAAAQAAALgCAAAAAAAAAAAAAHArAAAAAAAAAQAAALkCAAAAAAAAAAAAAIArAAAAAAAAAQAAALoCAAAAAAAAAAAAAJArAAAAAAAAAQAAALsCAAAAAAAAAAAAAKArAAAAAAAAAQAAALwCAAAAAAAAAAAAALArAAAAAAAAAQAAAL0CAAAAAAAAAAAAAMArAAAAAAAAAQAAAL4CAAAAAAAAAAAAANArAAAAAAAAAQAAAL8CAAAAAAAAAAAAAOArAAAAAAAAAQAAAMACAAAAAAAAAAAAAPArAAAAAAAAAQAAAMECAAAAAAAAAAAAAAAsAAAAAAAAAQAAAMICAAAAAAAAAAAAABAsAAAAAAAAAQAAAMMCAAAAAAAAAAAAACAsAAAAAAAAAQAAAMQCAAAAAAAAAAAAADAsAAAAAAAAAQAAAMUCAAAAAAAAAAAAAEAsAAAAAAAAAQAAAMYCAAAAAAAAAAAAAFAsAAAAAAAAAQAAAMcCAAAAAAAAAAAAAGAsAAAAAAAAAQAAAMgCAAAAAAAAAAAAAHAsAAAAAAAAAQAAAMkCAAAAAAAAAAAAAIAsAAAAAAAAAQAAAMoCAAAAAAAAAAAAAJAsAAAAAAAAAQAAAMsCAAAAAAAAAAAAAKAsAAAAAAAAAQAAAMwCAAAAAAAAAAAAALAsAAAAAAAAAQAAAM0CAAAAAAAAAAAAAMAsAAAAAAAAAQAAAM4CAAAAAAAAAAAAANAsAAAAAAAAAQAAAM8CAAAAAAAAAAAAAOAsAAAAAAAAAQAAANACAAAAAAAAAAAAAPAsAAAAAAAAAQAAANECAAAAAAAAAAAAAAAtAAAAAAAAAQAAANICAAAAAAAAAAAAABAtAAAAAAAAAQAAANMCAAAAAAAAAAAAACAtAAAAAAAAAQAAANQCAAAAAAAAAAAAADAtAAAAAAAAAQAAANUCAAAAAAAAAAAAAEAtAAAAAAAAAQAAANYCAAAAAAAAAAAAAFAtAAAAAAAAAQAAANcCAAAAAAAAAAAAAGAtAAAAAAAAAQAAANgCAAAAAAAAAAAAAHAtAAAAAAAAAQAAANkCAAAAAAAAAAAAAIAtAAAAAAAAAQAAANoCAAAAAAAAAAAAAJAtAAAAAAAAAQAAANsCAAAAAAAAAAAAAKAtAAAAAAAAAQAAANwCAAAAAAAAAAAAALAtAAAAAAAAAQAAAN0CAAAAAAAAAAAAAMAtAAAAAAAAAQAAAN4CAAAAAAAAAAAAANAtAAAAAAAAAQAAAN8CAAAAAAAAAAAAAOAtAAAAAAAAAQAAAOACAAAAAAAAAAAAAPAtAAAAAAAAAQAAAOECAAAAAAAAAAAAAAAuAAAAAAAAAQAAAOICAAAAAAAAAAAAABAuAAAAAAAAAQAAAOMCAAAAAAAAAAAAACAuAAAAAAAAAQAAAOQCAAAAAAAAAAAAADAuAAAAAAAAAQAAAOUCAAAAAAAAAAAAAEAuAAAAAAAAAQAAAOYCAAAAAAAAAAAAAFAuAAAAAAAAAQAAAOcCAAAAAAAAAAAAAGAuAAAAAAAAAQAAAOgCAAAAAAAAAAAAAHAuAAAAAAAAAQAAAOkCAAAAAAAAAAAAAIAuAAAAAAAAAQAAAOoCAAAAAAAAAAAAAJAuAAAAAAAAAQAAAOsCAAAAAAAAAAAAAKAuAAAAAAAAAQAAAOwCAAAAAAAAAAAAALAuAAAAAAAAAQAAAO0CAAAAAAAAAAAAAMAuAAAAAAAAAQAAAO4CAAAAAAAAAAAAANAuAAAAAAAAAQAAAO8CAAAAAAAAAAAAAOAuAAAAAAAAAQAAAPACAAAAAAAAAAAAAPAuAAAAAAAAAQAAAPECAAAAAAAAAAAAAAAvAAAAAAAAAQAAAPICAAAAAAAAAAAAABAvAAAAAAAAAQAAAPMCAAAAAAAAAAAAACAvAAAAAAAAAQAAAPQCAAAAAAAAAAAAADAvAAAAAAAAAQAAAPUCAAAAAAAAAAAAAEAvAAAAAAAAAQAAAPYCAAAAAAAAAAAAAFAvAAAAAAAAAQAAAPcCAAAAAAAAAAAAAGAvAAAAAAAAAQAAAPgCAAAAAAAAAAAAAHAvAAAAAAAAAQAAAPkCAAAAAAAAAAAAAIAvAAAAAAAAAQAAAPoCAAAAAAAAAAAAAJAvAAAAAAAAAQAAAPsCAAAAAAAAAAAAAKAvAAAAAAAAAQAAAPwCAAAAAAAAAAAAALAvAAAAAAAAAQAAAP0CAAAAAAAAAAAAAMAvAAAAAAAAAQAAAP4CAAAAAAAAAAAAANAvAAAAAAAAAQAAAP8CAAAAAAAAAAAAAOAvAAAAAAAAAQAAAAADAAAAAAAAAAAAAPAvAAAAAAAAAQAAAAEDAAAAAAAAAAAAAAAwAAAAAAAAAQAAAAIDAAAAAAAAAAAAABAwAAAAAAAAAQAAAAMDAAAAAAAAAAAAACAwAAAAAAAAAQAAAAQDAAAAAAAAAAAAADAwAAAAAAAAAQAAAAUDAAAAAAAAAAAAAEAwAAAAAAAAAQAAAAYDAAAAAAAAAAAAAFAwAAAAAAAAAQAAAAcDAAAAAAAAAAAAAGAwAAAAAAAAAQAAAAgDAAAAAAAAAAAAAHAwAAAAAAAAAQAAAAkDAAAAAAAAAAAAAIAwAAAAAAAAAQAAAAoDAAAAAAAAAAAAAJAwAAAAAAAAAQAAAAsDAAAAAAAAAAAAAKAwAAAAAAAAAQAAAAwDAAAAAAAAAAAAALAwAAAAAAAAAQAAAA0DAAAAAAAAAAAAAMAwAAAAAAAAAQAAAA4DAAAAAAAAAAAAANAwAAAAAAAAAQAAAA8DAAAAAAAAAAAAAOAwAAAAAAAAAQAAABADAAAAAAAAAAAAAPAwAAAAAAAAAQAAABEDAAAAAAAAAAAAAAAxAAAAAAAAAQAAABIDAAAAAAAAAAAAABAxAAAAAAAAAQAAABMDAAAAAAAAAAAAACAxAAAAAAAAAQAAABQDAAAAAAAAAAAAADAxAAAAAAAAAQAAABUDAAAAAAAAAAAAAEAxAAAAAAAAAQAAABYDAAAAAAAAAAAAAFAxAAAAAAAAAQAAABcDAAAAAAAAAAAAAGAxAAAAAAAAAQAAABgDAAAAAAAAAAAAAHAxAAAAAAAAAQAAABkDAAAAAAAAAAAAAIAxAAAAAAAAAQAAABoDAAAAAAAAAAAAAJAxAAAAAAAAAQAAABsDAAAAAAAAAAAAAKAxAAAAAAAAAQAAABwDAAAAAAAAAAAAALAxAAAAAAAAAQAAAB0DAAAAAAAAAAAAAMAxAAAAAAAAAQAAAB4DAAAAAAAAAAAAANAxAAAAAAAAAQAAAB8DAAAAAAAAAAAAAOAxAAAAAAAAAQAAACADAAAAAAAAAAAAAPAxAAAAAAAAAQAAACEDAAAAAAAAAAAAAAAyAAAAAAAAAQAAACIDAAAAAAAAAAAAABAyAAAAAAAAAQAAACMDAAAAAAAAAAAAACAyAAAAAAAAAQAAACQDAAAAAAAAAAAAADAyAAAAAAAAAQAAACUDAAAAAAAAAAAAAEAyAAAAAAAAAQAAACYDAAAAAAAAAAAAAFAyAAAAAAAAAQAAACcDAAAAAAAAAAAAAGAyAAAAAAAAAQAAACgDAAAAAAAAAAAAAHAyAAAAAAAAAQAAACkDAAAAAAAAAAAAAIAyAAAAAAAAAQAAACoDAAAAAAAAAAAAAJAyAAAAAAAAAQAAACsDAAAAAAAAAAAAAKAyAAAAAAAAAQAAACwDAAAAAAAAAAAAALAyAAAAAAAAAQAAAC0DAAAAAAAAAAAAAMAyAAAAAAAAAQAAAC4DAAAAAAAAAAAAANAyAAAAAAAAAQAAAC8DAAAAAAAAAAAAAOAyAAAAAAAAAQAAADADAAAAAAAAAAAAAPAyAAAAAAAAAQAAADEDAAAAAAAAAAAAAAAzAAAAAAAAAQAAADIDAAAAAAAAAAAAABAzAAAAAAAAAQAAADMDAAAAAAAAAAAAACAzAAAAAAAAAQAAADQDAAAAAAAAAAAAADAzAAAAAAAAAQAAADUDAAAAAAAAAAAAAEAzAAAAAAAAAQAAADYDAAAAAAAAAAAAAFAzAAAAAAAAAQAAADcDAAAAAAAAAAAAAGAzAAAAAAAAAQAAADgDAAAAAAAAAAAAAHAzAAAAAAAAAQAAADkDAAAAAAAAAAAAAIAzAAAAAAAAAQAAADoDAAAAAAAAAAAAAJAzAAAAAAAAAQAAADsDAAAAAAAAAAAAAKAzAAAAAAAAAQAAADwDAAAAAAAAAAAAALAzAAAAAAAAAQAAAD0DAAAAAAAAAAAAAMAzAAAAAAAAAQAAAD4DAAAAAAAAAAAAANAzAAAAAAAAAQAAAD8DAAAAAAAAAAAAAOAzAAAAAAAAAQAAAEADAAAAAAAAAAAAAPAzAAAAAAAAAQAAAEEDAAAAAAAAAAAAAAA0AAAAAAAAAQAAAEIDAAAAAAAAAAAAABA0AAAAAAAAAQAAAEMDAAAAAAAAAAAAACA0AAAAAAAAAQAAAEQDAAAAAAAAAAAAADA0AAAAAAAAAQAAAEUDAAAAAAAAAAAAAEA0AAAAAAAAAQAAAEYDAAAAAAAAAAAAAFA0AAAAAAAAAQAAAEcDAAAAAAAAAAAAAGA0AAAAAAAAAQAAAEgDAAAAAAAAAAAAAHA0AAAAAAAAAQAAAEkDAAAAAAAAAAAAAIA0AAAAAAAAAQAAAEoDAAAAAAAAAAAAAJA0AAAAAAAAAQAAAEsDAAAAAAAAAAAAAKA0AAAAAAAAAQAAAEwDAAAAAAAAAAAAALA0AAAAAAAAAQAAAE0DAAAAAAAAAAAAAMA0AAAAAAAAAQAAAE4DAAAAAAAAAAAAANA0AAAAAAAAAQAAAE8DAAAAAAAAAAAAAOA0AAAAAAAAAQAAAFADAAAAAAAAAAAAAPA0AAAAAAAAAQAAAFEDAAAAAAAAAAAAAAA1AAAAAAAAAQAAAFIDAAAAAAAAAAAAABA1AAAAAAAAAQAAAFMDAAAAAAAAAAAAACA1AAAAAAAAAQAAAFQDAAAAAAAAAAAAADA1AAAAAAAAAQAAAFUDAAAAAAAAAAAAAEA1AAAAAAAAAQAAAFYDAAAAAAAAAAAAAFA1AAAAAAAAAQAAAFcDAAAAAAAAAAAAAGA1AAAAAAAAAQAAAFgDAAAAAAAAAAAAAHA1AAAAAAAAAQAAAFkDAAAAAAAAAAAAAIA1AAAAAAAAAQAAAFoDAAAAAAAAAAAAAJA1AAAAAAAAAQAAAFsDAAAAAAAAAAAAAKA1AAAAAAAAAQAAAFwDAAAAAAAAAAAAALA1AAAAAAAAAQAAAF0DAAAAAAAAAAAAAMA1AAAAAAAAAQAAAF4DAAAAAAAAAAAAANA1AAAAAAAAAQAAAF8DAAAAAAAAAAAAAOA1AAAAAAAAAQAAAGADAAAAAAAAAAAAAPA1AAAAAAAAAQAAAGEDAAAAAAAAAAAAAAA2AAAAAAAAAQAAAGIDAAAAAAAAAAAAABA2AAAAAAAAAQAAAGMDAAAAAAAAAAAAACA2AAAAAAAAAQAAAGQDAAAAAAAAAAAAADA2AAAAAAAAAQAAAGUDAAAAAAAAAAAAAEA2AAAAAAAAAQAAAGYDAAAAAAAAAAAAAFA2AAAAAAAAAQAAAGcDAAAAAAAAAAAAAGA2AAAAAAAAAQAAAGgDAAAAAAAAAAAAAHA2AAAAAAAAAQAAAGkDAAAAAAAAAAAAAIA2AAAAAAAAAQAAAGoDAAAAAAAAAAAAAJA2AAAAAAAAAQAAAGsDAAAAAAAAAAAAAKA2AAAAAAAAAQAAAGwDAAAAAAAAAAAAALA2AAAAAAAAAQAAAG0DAAAAAAAAAAAAAMA2AAAAAAAAAQAAAG4DAAAAAAAAAAAAANA2AAAAAAAAAQAAAG8DAAAAAAAAAAAAAOA2AAAAAAAAAQAAAHADAAAAAAAAAAAAAPA2AAAAAAAAAQAAAHEDAAAAAAAAAAAAAAA3AAAAAAAAAQAAAHIDAAAAAAAAAAAAABA3AAAAAAAAAQAAAHMDAAAAAAAAAAAAACA3AAAAAAAAAQAAAHQDAAAAAAAAAAAAADA3AAAAAAAAAQAAAHUDAAAAAAAAAAAAAEA3AAAAAAAAAQAAAHYDAAAAAAAAAAAAAFA3AAAAAAAAAQAAAHcDAAAAAAAAAAAAAGA3AAAAAAAAAQAAAHgDAAAAAAAAAAAAAHA3AAAAAAAAAQAAAHkDAAAAAAAAAAAAAIA3AAAAAAAAAQAAAHoDAAAAAAAAAAAAAJA3AAAAAAAAAQAAAHsDAAAAAAAAAAAAAKA3AAAAAAAAAQAAAHwDAAAAAAAAAAAAALA3AAAAAAAAAQAAAH0DAAAAAAAAAAAAAMA3AAAAAAAAAQAAAH4DAAAAAAAAAAAAANA3AAAAAAAAAQAAAH8DAAAAAAAAAAAAAOA3AAAAAAAAAQAAAIADAAAAAAAAAAAAAPA3AAAAAAAAAQAAAIEDAAAAAAAAAAAAAAA4AAAAAAAAAQAAAIIDAAAAAAAAAAAAABA4AAAAAAAAAQAAAIMDAAAAAAAAAAAAACA4AAAAAAAAAQAAAIQDAAAAAAAAAAAAADA4AAAAAAAAAQAAAIUDAAAAAAAAAAAAAEA4AAAAAAAAAQAAAIYDAAAAAAAAAAAAAFA4AAAAAAAAAQAAAIcDAAAAAAAAAAAAAGA4AAAAAAAAAQAAAIgDAAAAAAAAAAAAAHA4AAAAAAAAAQAAAIkDAAAAAAAAAAAAAIA4AAAAAAAAAQAAAIoDAAAAAAAAAAAAAJA4AAAAAAAAAQAAAIsDAAAAAAAAAAAAAKA4AAAAAAAAAQAAAIwDAAAAAAAAAAAAALA4AAAAAAAAAQAAAI0DAAAAAAAAAAAAAMA4AAAAAAAAAQAAAI4DAAAAAAAAAAAAANA4AAAAAAAAAQAAAI8DAAAAAAAAAAAAAOA4AAAAAAAAAQAAAJADAAAAAAAAAAAAAPA4AAAAAAAAAQAAAJEDAAAAAAAAAAAAAAA5AAAAAAAAAQAAAJIDAAAAAAAAAAAAABA5AAAAAAAAAQAAAJMDAAAAAAAAAAAAACA5AAAAAAAAAQAAAJQDAAAAAAAAAAAAADA5AAAAAAAAAQAAAJUDAAAAAAAAAAAAAEA5AAAAAAAAAQAAAJYDAAAAAAAAAAAAAFA5AAAAAAAAAQAAAJcDAAAAAAAAAAAAAGA5AAAAAAAAAQAAAJgDAAAAAAAAAAAAAHA5AAAAAAAAAQAAAJkDAAAAAAAAAAAAAIA5AAAAAAAAAQAAAJoDAAAAAAAAAAAAAJA5AAAAAAAAAQAAAJsDAAAAAAAAAAAAAKA5AAAAAAAAAQAAAJwDAAAAAAAAAAAAALA5AAAAAAAAAQAAAJ0DAAAAAAAAAAAAAMA5AAAAAAAAAQAAAJ4DAAAAAAAAAAAAANA5AAAAAAAAAQAAAJ8DAAAAAAAAAAAAAOA5AAAAAAAAAQAAAKADAAAAAAAAAAAAAPA5AAAAAAAAAQAAAKEDAAAAAAAAAAAAAAA6AAAAAAAAAQAAAKIDAAAAAAAAAAAAABA6AAAAAAAAAQAAAKMDAAAAAAAAAAAAACA6AAAAAAAAAQAAAKQDAAAAAAAAAAAAADA6AAAAAAAAAQAAAKUDAAAAAAAAAAAAAEA6AAAAAAAAAQAAAKYDAAAAAAAAAAAAAFA6AAAAAAAAAQAAAKcDAAAAAAAAAAAAAGA6AAAAAAAAAQAAAKgDAAAAAAAAAAAAAHA6AAAAAAAAAQAAAKkDAAAAAAAAAAAAAIA6AAAAAAAAAQAAAKoDAAAAAAAAAAAAAJA6AAAAAAAAAQAAAKsDAAAAAAAAAAAAAKA6AAAAAAAAAQAAAKwDAAAAAAAAAAAAALA6AAAAAAAAAQAAAK0DAAAAAAAAAAAAAMA6AAAAAAAAAQAAAK4DAAAAAAAAAAAAANA6AAAAAAAAAQAAAK8DAAAAAAAAAAAAAOA6AAAAAAAAAQAAALADAAAAAAAAAAAAAPA6AAAAAAAAAQAAALEDAAAAAAAAAAAAAAA7AAAAAAAAAQAAALIDAAAAAAAAAAAAABA7AAAAAAAAAQAAALMDAAAAAAAAAAAAACA7AAAAAAAAAQAAALQDAAAAAAAAAAAAADA7AAAAAAAAAQAAALUDAAAAAAAAAAAAAEA7AAAAAAAAAQAAALYDAAAAAAAAAAAAAFA7AAAAAAAAAQAAALcDAAAAAAAAAAAAAGA7AAAAAAAAAQAAALgDAAAAAAAAAAAAAHA7AAAAAAAAAQAAALkDAAAAAAAAAAAAAIA7AAAAAAAAAQAAALoDAAAAAAAAAAAAAJA7AAAAAAAAAQAAALsDAAAAAAAAAAAAAKA7AAAAAAAAAQAAALwDAAAAAAAAAAAAALA7AAAAAAAAAQAAAL0DAAAAAAAAAAAAAMA7AAAAAAAAAQAAAL4DAAAAAAAAAAAAANA7AAAAAAAAAQAAAL8DAAAAAAAAAAAAAOA7AAAAAAAAAQAAAMADAAAAAAAAAAAAAPA7AAAAAAAAAQAAAMEDAAAAAAAAAAAAAAA8AAAAAAAAAQAAAMIDAAAAAAAAAAAAABA8AAAAAAAAAQAAAMMDAAAAAAAAAAAAACA8AAAAAAAAAQAAAMQDAAAAAAAAAAAAADA8AAAAAAAAAQAAAMUDAAAAAAAAAAAAAEA8AAAAAAAAAQAAAMYDAAAAAAAAAAAAAFA8AAAAAAAAAQAAAMcDAAAAAAAAAAAAAGA8AAAAAAAAAQAAAMgDAAAAAAAAAAAAAHA8AAAAAAAAAQAAAMkDAAAAAAAAAAAAAIA8AAAAAAAAAQAAAMoDAAAAAAAAAAAAAJA8AAAAAAAAAQAAAMsDAAAAAAAAAAAAAKA8AAAAAAAAAQAAAMwDAAAAAAAAAAAAALA8AAAAAAAAAQAAAM0DAAAAAAAAAAAAAMA8AAAAAAAAAQAAAM4DAAAAAAAAAAAAANA8AAAAAAAAAQAAAM8DAAAAAAAAAAAAAOA8AAAAAAAAAQAAANADAAAAAAAAAAAAAAA9AAAAAAAAAQAAANEDAAAAAAAAAAAAACA9AAAAAAAAAQAAANIDAAAAAAAAAAAAAEA9AAAAAAAAAQAAANMDAAAAAAAAAAAAAGA9AAAAAAAAAQAAANQDAAAAAAAAAAAAAIA9AAAAAAAAAQAAANUDAAAAAAAAAAAAAKA9AAAAAAAAAQAAANYDAAAAAAAAAAAAAMA9AAAAAAAAAQAAANcDAAAAAAAAAAAAAOA9AAAAAAAAAQAAANgDAAAAAAAAAAAAAAA+AAAAAAAAAQAAANkDAAAAAAAAAAAAACA+AAAAAAAAAQAAANoDAAAAAAAAAAAAAEA+AAAAAAAAAQAAANsDAAAAAAAAAAAAAGA+AAAAAAAAAQAAANwDAAAAAAAAAAAAAIA+AAAAAAAAAQAAAN0DAAAAAAAAAAAAAKA+AAAAAAAAAQAAAN4DAAAAAAAAAAAAAMA+AAAAAAAAAQAAAN8DAAAAAAAAAAAAAOA+AAAAAAAAAQAAAOADAAAAAAAAAAAAAAA/AAAAAAAAAQAAAOEDAAAAAAAAAAAAACA/AAAAAAAAAQAAAOIDAAAAAAAAAAAAAEA/AAAAAAAAAQAAAOMDAAAAAAAAAAAAAAAAAAAAAAAAAQAAAOQDAAAAAAAAAAAAAAAudGV4dAAubm90ZS5HTlUtc3RhY2sALnN0cnRhYgAuc3ltdGFiAC5yZWxhLmRhdGEucmVsLnJvLl9STnZOdENzYU1VdE1MQkZiZDRfMTdydXN0Y19lcnJvcl9jb2RlczExZXJyb3JfY29kZXMxMURJQUdOT1NUSUNTAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg5OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43OTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjk5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU5OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40OTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzk5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI5OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xOTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTg5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg4OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43ODkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjg5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU4OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40ODkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzg5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI4OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xODkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTc5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg3OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjc5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU3OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzc5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI3OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTY5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg2OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjY5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU2OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzY5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI2OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTU5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg1OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjU5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU1OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzU5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI1OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTQ5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg0OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjQ5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU0OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzQ5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI0OQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTM5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgzOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjM5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUzOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzM5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIzOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTI5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgyOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjI5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUyOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzI5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIyOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTE5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgxOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjE5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUxOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzE5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIxOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTA5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgwOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjA5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUwOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzA5AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIwOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMDkALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44OTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzk4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY5OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41OTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDk4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM5OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yOTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTk4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk4OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44ODgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzg4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY4OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41ODgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDg4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM4OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yODgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTg4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk3OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzc4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY3OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDc4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM3OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTc4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk2OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzY4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY2OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDY4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM2OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTY4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk1OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzU4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY1OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDU4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM1OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTU4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk0OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzQ4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY0OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDQ4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM0OAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTQ4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkzOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzM4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYzOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDM4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMzOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMzgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTM4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkyOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzI4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYyOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDI4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMyOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTI4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkxOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzE4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYxOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDE4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMxOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMTgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTE4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkwOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzA4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYwOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDA4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMwOAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMDgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTA4AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODk3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc5NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42OTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTk3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ5NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zOTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjk3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE5NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45ODcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODg3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc4NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42ODcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTg3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ4NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zODcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjg3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE4NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODc3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc3NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTc3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ3NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjc3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE3NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODY3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc2NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTY3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ2NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjY3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE2NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODU3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc1NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTU3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ1NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjU3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE1NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODQ3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc0NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTQ3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ0NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjQ3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE0NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODM3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjczNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTM3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQzNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMzcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjM3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEzNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODI3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcyNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTI3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQyNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMjcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjI3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEyNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODE3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcxNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTE3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQxNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMTcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjE3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjExNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODA3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcwNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTA3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQwNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMDcALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjA3AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEwNwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg5NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43OTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjk2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU5NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40OTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzk2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI5NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xOTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTg2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg4NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43ODYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjg2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU4NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40ODYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzg2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI4NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xODYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTc2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg3NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjc2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU3NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzc2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI3NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTY2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg2NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjY2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU2NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzY2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI2NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTU2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg1NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjU2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU1NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzU2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI1NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTQ2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg0NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjQ2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU0NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzQ2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI0NgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTM2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgzNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjM2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUzNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzM2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIzNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTI2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgyNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjI2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUyNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzI2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIyNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTE2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgxNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjE2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUxNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzE2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIxNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTA2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgwNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjA2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUwNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzA2AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIwNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMDYALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44OTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzk1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY5NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41OTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDk1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM5NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yOTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTk1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk4NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44ODUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzg1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY4NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41ODUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDg1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM4NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yODUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTg1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk3NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzc1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY3NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDc1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM3NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTc1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk2NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzY1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY2NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDY1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM2NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTY1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk1NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzU1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY1NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDU1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM1NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTU1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk0NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzQ1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY0NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDQ1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM0NQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTQ1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkzNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzM1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYzNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDM1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMzNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMzUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTM1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkyNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzI1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYyNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDI1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMyNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMjUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTI1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkxNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzE1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYxNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDE1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMxNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMTUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTE1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkwNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzA1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYwNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDA1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMwNQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMDUALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTA1AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUALnJlbGEuZGF0YS5yZWwucm8uLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk5NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44OTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzk0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY5NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41OTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDk0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM5NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yOTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTk0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk4NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44ODQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzg0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY4NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41ODQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDg0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM4NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yODQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTg0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk3NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzc0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY3NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDc0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM3NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTc0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk2NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzY0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY2NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDY0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM2NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTY0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk1NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzU0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY1NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDU0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM1NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTU0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk0NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzQ0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY0NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDQ0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM0NAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTQ0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkzNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzM0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYzNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDM0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMzNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMzQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTM0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkyNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzI0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYyNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDI0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMyNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTI0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkxNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzE0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYxNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDE0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMxNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMTQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTE0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkwNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzA0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYwNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDA0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMwNAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMDQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTA0AC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTkzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg5MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43OTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjkzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU5MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40OTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzkzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI5MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xOTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTgzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg4MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43ODMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjgzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU4MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40ODMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzgzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI4MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xODMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTczAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg3MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjczAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU3MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzczAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI3MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTYzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg2MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjYzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU2MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzYzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI2MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTUzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg1MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjUzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU1MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzUzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI1MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTQzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg0MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjQzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU0MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzQzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI0MwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTMzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgzMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjMzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUzMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzMzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIzMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTIzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgyMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjIzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUyMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzIzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIyMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTEzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgxMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjEzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUxMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzEzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIxMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTAzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgwMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjAzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUwMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzAzAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIwMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMDMALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMwAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45OTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODkyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc5MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42OTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTkyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ5MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zOTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjkyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE5MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45ODIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODgyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc4MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42ODIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTgyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ4MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zODIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjgyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE4MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODcyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc3MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTcyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ3MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjcyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE3MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODYyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc2MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTYyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ2MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjYyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE2MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODUyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc1MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTUyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ1MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjUyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE1MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45NDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODQyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjc0MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42NDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTQyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQ0MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zNDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjQyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjE0MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODMyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjczMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTMyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQzMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMzIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjMyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEzMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODIyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcyMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTIyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQyMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMjIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjIyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEyMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODEyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcxMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTEyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQxMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMTIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjEyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjExMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy45MDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODAyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcwMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy42MDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTAyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQwMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4zMDIALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjAyAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEwMgAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk5MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44OTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzkxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY5MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41OTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDkxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM5MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yOTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTkxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk4MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44ODEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzgxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY4MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41ODEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDgxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM4MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yODEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTgxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk3MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzcxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY3MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDcxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM3MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTcxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjcxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk2MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzYxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY2MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDYxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM2MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTYxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk1MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzUxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY1MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDUxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM1MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTUxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjk0MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44NDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzQxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjY0MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41NDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDQxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjM0MQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yNDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTQxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjQxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkzMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzMxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYzMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDMxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMzMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMzEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTMxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkyMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzIxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYyMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDIxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMyMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTIxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkxMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzExAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYxMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDExAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMxMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMTEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTExAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjExAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjkwMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy44MDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzAxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjYwMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy41MDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDAxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjMwMQAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4yMDEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTAxAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjEALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTkwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg5MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43OTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjkwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU5MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40OTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzkwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI5MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xOTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTgwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg4MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43ODAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjgwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU4MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40ODAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzgwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI4MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xODAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuODAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTcwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg3MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjcwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU3MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzcwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI3MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTYwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg2MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjYwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU2MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzYwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI2MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTUwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg1MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjUwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU1MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzUwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI1MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTQwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjg0MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43NDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjQwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjU0MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40NDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzQwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjI0MAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xNDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTMwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgzMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjMwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUzMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzMwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIzMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTIwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgyMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjIwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUyMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzIwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIyMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMjAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTEwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgxMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjEwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUxMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzEwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIxMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy4xMTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMTAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuOTAwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjgwMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy43MDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuNjAwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjUwMAAucm9kYXRhLi5MYW5vbi41Y2NmMTJiMTYzYjNmOGQ4YTcwMTY0MmNkY2RjNDgzMy40MDAALnJvZGF0YS4uTGFub24uNWNjZjEyYjE2M2IzZjhkOGE3MDE2NDJjZGNkYzQ4MzMuMzAwAC5yb2RhdGEuLkxhbm9uLjVjY2YxMmIxNjNiM2Y4ZDhhNzAxNjQyY2RjZGM0ODMzLjIwMAAucm9kYXRhLi5MYW5v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AAABAAAAAgAAAAAAAAAAAAAAAAAAAP89BAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAABTpgAAAQAAAAIAAAAAAAAAAAAAAAAAAAAEPgQAAAAAAFMDAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAADpIAAAEAAAACAAAAAAAAAAAAAAAAAAAAV0EEAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAMl9AAABAAAAAgAAAAAAAAAAAAAAAAAAAFxBBAAAAAAARQEAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACEaQAAAQAAAAIAAAAAAAAAAAAAAAAAAAChQgQAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAANVUAAAEAAAACAAAAAAAAAAAAAAAAAAAApkIEAAAAAAAEAQAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAACRBAAABAAAAAgAAAAAAAAAAAAAAAAAAAKpDBAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAATLQAAAQAAAAIAAAAAAAAAAAAAAAAAAACvQwQAAAAAAA0DAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAhkAAAEAAAACAAAAAAAAAAAAAAAAAAAAvEYEAAAAAAAFAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAPEEAAABAAAAAgAAAAAAAAAAAAAAAAAAAMFGBAAAAAAAKgMAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAACRuAAAAQAAAAIAAAAAAAAAAAAAAAAAAADrSQQAAAAAAAUAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAATKQAAAEAAAACAAAAAAAAAAAAAAAAAAAA8EkEAAAAAACeAgAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAeQAAABAAAAAgAAAAAAAAAAAAAAAAAAAI5MBAAAAAAABQAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAADCewAAAQAAAAIAAAAAAAAAAAAAAAAAAACTTAQAAAAAAD0CAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAfWcAAAEA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