Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCi8vIFNQRFgtRmlsZUNvcHlyaWdodFRleHQ6IFN5bnRhY29yZSBMTEMgqSAyMDE2LTIwMjEKLy8gCi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSwgVmVyc2lvbiAyLjAgKHRoZSAiTGljZW5zZSIpOwovLyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCi8vIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAovLwovLyAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAovLwovLyBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCi8vIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsCi8vIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLgovLyBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCi8vIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgovLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAovLyBTUERYLUZpbGVDb250cmlidXRvcjogU3ludGFjb3JlIExMQwovLyAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwovLy8gQGZpbGUgICAgICAgPHNjcjFfYXJjaF9kZXNjcmlwdGlvbi5zdmg+Ci8vLyBAYnJpZWYgICAgICBBcmNoaXRlY3R1cmUgZGVzY3JpcHRpb24gZmlsZQovLy8KCmBpZm5kZWYgU0NSMV9BUkNIX0RFU0NSSVBUSU9OX1NWSApgZGVmaW5lIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgKCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDT1JFIEZVTkRBTUVOVEFMIFBBUkFNRVRFUlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFNDUjEgY29yZSBpZGVudGlmaWVycwpgZGVmaW5lIFNDUjFfTUlNUElEICAgICAgICAgICAgIDMyJ2gyMTA1MTQwMApgZGVmaW5lIFNDUjFfTVZFTkRPUklEICAgICAgICAgIDMyJ2gwMDAwMDAwMAoKLy8gV2lkdGggb2YgbWFpbiByZWdpc3RlcnMgYW5kIGJ1c2VzCmBkZWZpbmUgU0NSMV9YTEVOICAgICAgICAgICAgICAgMzIKYGRlZmluZSBTQ1IxX0lNRU1fQVdJRFRIICAgICAgICBgU0NSMV9YTEVOCmBkZWZpbmUgU0NSMV9JTUVNX0RXSURUSCAgICAgICAgYFNDUjFfWExFTgpgZGVmaW5lIFNDUjFfRE1FTV9BV0lEVEggICAgICAgIGBTQ1IxX1hMRU4KYGRlZmluZSBTQ1IxX0RNRU1fRFdJRFRIICAgICAgICBgU0NSMV9YTEVOCgovLyBUQVAgSURDT0RFCmBkZWZpbmUgU0NSMV9UQVBfSURDT0RFICAgICAgICAgJ2hERUIxMTAwMQoKCmBpZmRlZiBTQ1IxX0FSQ0hfQ1VTVE9NCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIElOQ0xVREUgU0NSMV9BUkNIX0NVU1RPTS5TVkgKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFRoZSBleHRlcm5hbCBmaWxlIHNjcjFfYXJjaF9jdXN0b20uc3ZoIGlzIHVzZWQgZm9yIHRoZSBvcGVuIFNDUjEtU0RLIHByb2plY3QsCi8vIGFuZCBjYW4gYWxzbyBiZSB1c2VkIGZvciBhbnkgY3VzdG9tIHByb2plY3RzLgoKLy8gVGhlIGZpbGUgc2V0czoKLy8gLSB0YXJnZXQgcGxhdGZvcm0gKEZQR0EvQVNJQyksIHdoaWNoIGFmZmVjdHMgdGhlIGNob2ljZSBvZiBsb2dpY2FsIGNvbnN0cnVjdHM7Ci8vIC0gZGV2aWNlIGJ1aWxkIElEOwovLyAtIGFkZHJlc3MgY29uc3RhbnRzOwovLyAtIGNvdWxkIGVuYWJsZXMgY29uZmlndXJhdGlvbiBwYXJhbWV0ZXJzLgoKLy8gUG9zc2libGUgdGFyZ2V0czoKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTCAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBGUEdBcwovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX0lOVEVMX01BWDEwICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIEludGVsIE1BWCAxMCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfRlBHQV9JTlRFTF9BUlJJQVYgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBJbnRlbCBBcnJpYSBWIEZQR0FzICh1c2VkIGluIHRoZSBTQ1IxLVNESyBwcm9qZWN0KQovLyBgZGVmaW5lIFNDUjFfVFJHVF9GUEdBX1hJTElOWCAgICAgICAgLy8gdGFyZ2V0IHBsYXRmb3JtIGlzIFhpbGlueCBGUEdBcyAodXNlZCBpbiB0aGUgU0NSMS1TREsgcHJvamVjdCkKLy8gYGRlZmluZSBTQ1IxX1RSR1RfQVNJQyAgICAgICAgICAgICAgIC8vIHRhcmdldCBwbGF0Zm9ybSBpcyBBU0lDCi8vIGBkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAvLyB0YXJnZXQgaXMgc2ltdWxhdGlvbiAoZW5hYmxlIHNpbXVsYXRpb24gY29kZSkKCiBgaW5jbHVkZSAic2NyMV9hcmNoX2N1c3RvbS5zdmgiCgpgZW5kaWYgLy8gU0NSMV9BUkNIX0NVU1RPTQoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIFJFQ09NTUVOREVEIENPUkUgQVJDSElURUNUVVJFIENPTkZJR1VSQVRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBVbmNvbW1lbnQgb25lIG9mIHRoZXNlIGRlZmluZXMgdG8gc2V0IHRoZSByZWNvbW1lbmRlZCBjb25maWd1cmF0aW9uOgoKYGRlZmluZSBTQ1IxX0NGR19SVjMySU1DX01BWAovL2BkZWZpbmUgU0NSMV9DRkdfUlYzMklDX0JBU0UKLy9gZGVmaW5lIFNDUjFfQ0ZHX1JWMzJFQ19NSU4KCi8vIElmIGFsbCBkZWZpbmVzIGFyZSBjb21tZW50ZWQsIGN1c3RvbSBjb25maWd1cmF0aW9uIHdpbGwgYmUgdXNlZCAoc2VlIGJlbG93KQoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gUkVBRC1PTkxZOiBzZXR0aW5ncyBmb3IgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbnMKYGlmZGVmICBTQ1IxX0NGR19SVjMySU1DX01BWAogIGBkZWZpbmUgU0NSMV9SVklfRVhUCiAgYGRlZmluZSBTQ1IxX1JWTV9FWFQKICBgZGVmaW5lIFNDUjFfUlZDX0VYVAogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAyNjsKICBgZGVmaW5lIFNDUjFfTVRWRUNfTU9ERV9FTgogIGBkZWZpbmUgU0NSMV9GQVNUX01VTAovL2BkZWZpbmUgU0NSMV9NUFJGX1JTVF9FTiAtIHlvc3lzIGZpeCwgdHdvIGRpbWVuc2lvbmFsIGFycmF5IGluaXQgbm90IGFsbG93ZWQKICBgZGVmaW5lIFNDUjFfTUNPVU5URU5fRU4KLy8gIGBkZWZpbmUgU0NSMV9EQkdfRU4KICBgZGVmaW5lIFNDUjFfVERVX0VOCiAgcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX1REVV9UUklHX05VTSA9IDQ7CiAgYGRlZmluZSBTQ1IxX1REVV9JQ09VTlRfRU4KICBgZGVmaW5lIFNDUjFfSVBJQ19FTgogIGBkZWZpbmUgU0NSMV9JUElDX1NZTkNfRU4KLy8gIGBkZWZpbmUgU0NSMV9UQ01fRU4KYGVsc2lmICBTQ1IxX0NGR19SVjMySUNfQkFTRQogIGBkZWZpbmUgU0NSMV9SVklfRVhUCiAgYGRlZmluZSBTQ1IxX1JWQ19FWFQKICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfTVRWRUNfQkFTRV9XUl9CSVRTID0gMTY7CiAgYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4KICBgZGVmaW5lIFNDUjFfTk9fREVDX1NUQUdFCiAgYGRlZmluZSBTQ1IxX01QUkZfUlNUX0VOCiAgYGRlZmluZSBTQ1IxX01DT1VOVEVOX0VOCiAgYGRlZmluZSBTQ1IxX0RCR19FTgogIGBkZWZpbmUgU0NSMV9URFVfRU4KICBwYXJhbWV0ZXIgaW50IHVuc2lnbmVkIFNDUjFfVERVX1RSSUdfTlVNID0gMjsKICBgZGVmaW5lIFNDUjFfVERVX0lDT1VOVF9FTgogIGBkZWZpbmUgU0NSMV9JUElDX0VOCiAgYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTgogIGBkZWZpbmUgU0NSMV9UQ01fRU4KYGVsc2lmICBTQ1IxX0NGR19SVjMyRUNfTUlOCiAgYGRlZmluZSBTQ1IxX1JWRV9FWFQKICBgZGVmaW5lIFNDUjFfUlZDX0VYVAogIHBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9NVFZFQ19CQVNFX1dSX0JJVFMgPSAwOwogIGBkZWZpbmUgU0NSMV9OT19ERUNfU1RBR0UKICBgZGVmaW5lIFNDUjFfTk9fRVhFX1NUQUdFCiAgYGRlZmluZSBTQ1IxX1RDTV9FTgoKYGVsc2UgLy8gYmVnaW4gY3VzdG9tIGNvbmZpZ3VyYXRpb24gc2VjdGlvbgoKCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi8vIENVU1RPTSBDT1JFIEFSQ0hJVEVDVFVSRSBDT05GSUdVUkFUSU9OCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovLyBUbyBmaW5lLXR1bmUgY3VzdG9tIGNvbmZpZ3VyYXRpb24sIHlvdSBjYW4gY2hhbmdlIHRoZSB2YWx1ZXMgaW4gdGhpcyBzZWN0aW9uLgovLyBNYWtlIHN1cmUgdGhhdCB0aGUgZGVmaW5lcyBvZiB0aGUgcmVjb21tZW5kZWQgY29uZmlndXJhdGlvbnMgYXJlIGNvbW1lbnRlZCwKLy8gb3RoZXJ3aXNlIHRoaXMgc2VjdGlvbiB3aWxsIGJlIGluYWN0aXZlLgoKLy8gUklTQy1WIElTQSBvcHRpb25zCi8vYGRlZmluZSBTQ1IxX1JWRV9FWFQgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQsIG90aGVyd2lzZSBSVjMySSB3aWxsIGJlIHVzZWQKYGRlZmluZSBTQ1IxX1JWTV9FWFQgICAgICAgICAgICAgICAgLy8gZW5hYmxlIHN0YW5kYXJkIGV4dGVuc2lvbiAiTSIgZm9yIGludGVnZXIgaGFyZHdhcmUgbXVsdGlwbGllciBhbmQgZGl2aWRlcgpgZGVmaW5lIFNDUjFfUlZDX0VYVCAgICAgICAgICAgICAgICAvLyBlbmFibGUgc3RhbmRhcmQgZXh0ZW5zaW9uICJDIiBmb3IgY29tcHJlc3NlZCBpbnN0cnVjdGlvbnMKcGFyYW1ldGVyIGludCB1bnNpZ25lZCBTQ1IxX01UVkVDX0JBU0VfV1JfQklUUyA9IDI2OyAgICAvLyBudW1iZXIgb2Ygd3JpdGFibGUgaGlnaC1vcmRlciBiaXRzIGluIE1UVkVDLmJhc2UgZmllbGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGVnYWwgdmFsdWVzIGFyZSAwIHRvIDI2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlYWQtb25seSBiaXRzIGFyZSBoYXJkd2lyZWQgdG8gcmVzZXQgdmFsdWUKYGRlZmluZSBTQ1IxX01UVkVDX01PREVfRU4gICAgICAgICAgLy8gZW5hYmxlIHdyaXRhYmxlIE1UVkVDLm1vZGUgZmllbGQgdG8gYWxsb3cgdmVjdG9yZWQgaXJxIG1vZGUsIG90aGVyd2lzZSBvbmx5IGRpcmVjdCBtb2RlIGlzIHBvc3NpYmxlCgpgaWZuZGVmIFNDUjFfUlZFX0VYVAogIGBkZWZpbmUgU0NSMV9SVklfRVhUIC8vIFJWMzJFIGJhc2UgaW50ZWdlciBpbnN0cnVjdGlvbiBzZXQgaWYgU0NSMV9SVkVfRVhUIGlzIG5vdCBlbmFibGVkCmBlbmRpZiAvLyB+U0NSMV9SVkVfRVhUCgovLyBDb3JlIHBpcGVsaW5lIG9wdGlvbnMgKHBvd2VyLXBlcmZvcm1hbmNlLWFyZWEgb3B0aW1pemF0aW9uKQpgZGVmaW5lIFNDUjFfTk9fREVDX1NUQUdFICAgICAgICAgICAvLyBkaXNhYmxlIHJlZ2lzdGVyIGJldHdlZW4gSUZVIGFuZCBJRFUKYGRlZmluZSBTQ1IxX05PX0VYRV9TVEFHRSAgICAgICAgICAgLy8gZGlzYWJsZSByZWdpc3RlciBiZXR3ZWVuIElEVSBhbmQgRVhVCmBkZWZpbmUgU0NSMV9ORVdfUENfUkVHICAgICAgICAgICAgIC8vIGVuYWJsZSByZWdpc3RlciBpbiBJRlUgZm9yIE5ld19QQyB2YWx1ZQpgZGVmaW5lIFNDUjFfRkFTVF9NVUwgICAgICAgICAgICAgICAvLyBlbmFibGUgZmFzdCBvbmUtY3ljbGUgbXVsdGlwbGljYXRpb24sIG90aGVyd2lzZSBtdWx0aXBsaWNhdGlvbiB0YWtlcyAzMiBjeWNsZXMKYGRlZmluZSBTQ1IxX0NMS0NUUkxfRU4gICAgICAgICAgICAgLy8gZW5hYmxlIGdsb2JhbCBjbG9jayBnYXRpbmcKYGRlZmluZSBTQ1IxX01QUkZfUlNUX0VOICAgICAgICAgICAgLy8gZW5hYmxlIHJlc2V0IGZvciBNUFJGCmBkZWZpbmUgU0NSMV9NQ09VTlRFTl9FTiAgICAgICAgICAgIC8vIGVuYWJsZSBjdXN0b20gTUNPVU5URU4gQ1NSIGZvciBjb3VudGVyIGNvbnRyb2wKCi8vIFVuY29yZSBvcHRpb25zCmBkZWZpbmUgU0NSMV9EQkdfRU4gICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBEZWJ1ZyBTdWJzeXN0ZW0gKFRBUEMsIERNLCBTQ1UsIEhEVSkKYGRlZmluZSBTQ1IxX1REVV9FTiAgICAgICAgICAgICAgICAgLy8gZW5hYmxlIFRyaWdnZXIgRGVidWcgVW5pdCAoaGFyZHdhcmUgYnJlYWtwb2ludHMpCnBhcmFtZXRlciBpbnQgdW5zaWduZWQgU0NSMV9URFVfVFJJR19OVU0gPSAyOyAgIC8vIG51bWJlciBvZiBoYXJkd2FyZSB0cmlnZ2VycwpgZGVmaW5lIFNDUjFfVERVX0lDT1VOVF9FTiAgICAgICAgICAvLyBlbmFibGUgaGFyZHdhcmUgdHJpZ2dlcnMgb24gaW5zdHJ1Y3Rpb24gY291bnRlcgpgZGVmaW5lIFNDUjFfSVBJQ19FTiAgICAgICAgICAgICAgICAvLyBlbmFibGUgSW50ZWdyYXRlZCBQcm9ncmFtbWFibGUgSW50ZXJydXB0IENvbnRyb2xsZXIKYGRlZmluZSBTQ1IxX0lQSUNfU1lOQ19FTiAgICAgICAgICAgLy8gZW5hYmxlIElQSUMgc3luY2hyb25pemVyCmBkZWZpbmUgU0NSMV9UQ01fRU4gICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBUaWdodGx5LUNvdXBsZWQgTWVtb3J5CgpgZW5kaWYgLy8gZW5kIGN1c3RvbSBjb25maWd1cmF0aW9uIHNlY3Rpb24KCgovLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQovLyBDT1JFIElOVEVHUkFUSU9OIE9QVElPTlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIEJ5cGFzc2VzIG9uIEFYSS9BSEIgYnJpZGdlIEkvTwpgZGVmaW5lIFNDUjFfSU1FTV9BSEJfSU5fQlAgICAgICAgICAvLyBieXBhc3MgaW5zdHJ1Y3Rpb24gbWVtb3J5IEFIQiBicmlkZ2UgaW5wdXQgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0lNRU1fQUhCX09VVF9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBSEIgYnJpZGdlIG91dHB1dCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfRE1FTV9BSEJfSU5fQlAgICAgICAgICAvLyBieXBhc3MgZGF0YSBtZW1vcnkgQUhCIGJyaWRnZSBpbnB1dCByZWdpc3RlcgpgZGVmaW5lIFNDUjFfRE1FTV9BSEJfT1VUX0JQICAgICAgICAvLyBieXBhc3MgZGF0YSBtZW1vcnkgQUhCIGJyaWRnZSBvdXRwdXQgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0lNRU1fQVhJX1JFUV9CUCAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlIHJlcXVlc3QgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0lNRU1fQVhJX1JFU1BfQlAgICAgICAgLy8gYnlwYXNzIGluc3RydWN0aW9uIG1lbW9yeSBBWEkgYnJpZGdlIHJlc3BvbnNlIHJlZ2lzdGVyCmBkZWZpbmUgU0NSMV9ETUVNX0FYSV9SRVFfQlAgICAgICAgIC8vIGJ5cGFzcyBkYXRhIG1lbW9yeSBBWEkgYnJpZGdlIHJlcXVlc3QgcmVnaXN0ZXIKYGRlZmluZSBTQ1IxX0RNRU1fQVhJX1JFU1BfQlAgICAgICAgLy8gYnlwYXNzIGRhdGEgbWVtb3J5IEFYSSBicmlkZ2UgcmVzcG9uc2UgcmVnaXN0ZXIKCmBpZm5kZWYgU0NSMV9BUkNIX0NVU1RPTQovLyBEZWZhdWx0IGFkZHJlc3MgY29uc3RhbnRzIChpZiBzY3IxX2FyY2hfY3VzdG9tLnN2aCBpcyBub3QgdXNlZCkKcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIFNDUjFfQVJDSF9SU1RfVkVDVE9SICAgICAgICA9ICdoMjAwOyAgICAgICAgICAgIC8vIFJlc2V0IHZlY3RvciB2YWx1ZSAoc3RhcnQgYWRkcmVzcyBhZnRlciByZXNldCkKcGFyYW1ldGVyIGJpdCBbYFNDUjFfWExFTi0xOjBdICAgICAgICAgIFNDUjFfQVJDSF9NVFZFQ19CQVNFICAgICAgICA9ICdoMUMwOyAgICAgICAgICAgIC8vIE1UVkVDLmJhc2UgZmllbGQgcmVzZXQgdmFsdWUsIG9yIGNvbnN0YW50IHZhbHVlIGZvciBNVFZFQy5iYXNlIGJpdHMgdGhhdCBhcmUgaGFyZHdpcmVkCgpwYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9UQ01fQUREUl9NQVNLICAgICAgICAgID0gJ2hGRkZGMDAwMDsgICAgICAgLy8gVENNIG1hc2sgYW5kIHNpemU7IHNpemUgaW4gYnl0ZXMgaXMgdHdvJ3MgY29tcGxlbWVudCBvZiB0aGUgbWFzayB2YWx1ZQpwYXJhbWV0ZXIgYml0IFtgU0NSMV9ETUVNX0FXSURUSC0xOjBdICAgU0NSMV9UQ01fQUREUl9QQVRURVJOICAgICAgID0gJ2gwMDQ4MDAwMDsgICAgICAgLy8gVENNIGFkZHJlc3MgbWF0Y2ggcGF0dGVybgoKcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVElNRVJfQUREUl9NQVNLICAgICAgICA9ICdoRkZGRkZGRTA7ICAgICAgIC8vIFRpbWVyIG1hc2sKcGFyYW1ldGVyIGJpdCBbYFNDUjFfRE1FTV9BV0lEVEgtMTowXSAgIFNDUjFfVElNRVJfQUREUl9QQVRURVJOICAgICA9ICdoMDA0OTAwMDA7ICAgICAgIC8vIFRpbWVyIGFkZHJlc3MgbWF0Y2ggcGF0dGVybgoKLy8gRGV2aWNlIGJ1aWxkIElECiBgZGVmaW5lIFNDUjFfQVJDSF9CVUlMRF9JRCAgICAgICAgICAgICBgU0NSMV9NSU1QSUQKCmBlbmRpZiAvLyBTQ1IxX0FSQ0hfQ1VTVE9NCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gVEFSR0VULVNQRUNJRklDIE9QVElPTlMKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi8vIFJBTS1iYXNlZCBNUFJGIGNhbiBiZSB1c2VkIGZvciBJbnRlbCBGUEdBcyBvbmx5CmBpZmRlZiBTQ1IxX1RSR1RfRlBHQV9JTlRFTAogIGBkZWZpbmUgU0NSMV9NUFJGX1JBTSAgICAgICAgICAgLy8gaW1wbGVtZW50cyBNUFJGIHdpdGggZGVkaWNhdGVkIFJBTSBibG9ja3MKYGVuZGlmCgovLyBFWFVfU1RBR0VfQllQQVNTIGFuZCBNUFJGX1JTVF9FTiBtdXN0IGJlIGRpc2FibGVkIGZvciBSQU0tYmFzZWQgTVBSRgpgaWZkZWYgU0NSMV9NUFJGX1JBTQogIGB1bmRlZiAgU0NSMV9OT19FWEVfU1RBR0UKICBgdW5kZWYgIFNDUjFfTVBSRl9SU1RfRU4KYGVuZGlmCgoKLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLy8gU0lNVUxBVElPTiBPUFRJT05TCi8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgovL2BkZWZpbmUgU0NSMV9UUkdUX1NJTVVMQVRJT04gICAgICAgICAgICAvLyBlbmFibGUgc2ltdWxhdGlvbiBjb2RlIChhdXRvbWF0aWNhbGx5IGRlZmluZWQgYnkgcm9vdCBtYWtlZmlsZSkKLy9gZGVmaW5lIFNDUjFfVFJBQ0VfTE9HX0VOICAgICAgICAgICAgICAgLy8gZW5hYmxlIHRyYWNlbG9nCi8vYGRlZmluZSBTQ1IxX1hQUk9QX0VOICAgICAgICAgICAgICAgICAgIC8vIGVuYWJsZSBYLXByb3BhZ2F0aW9uCgovLyBBZGRyZXNzZXMgdXNlZCBpbiB0ZXN0YmVuY2gKbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fRVhJVF9BRERSICAgICAgPSAzMidoMDAwMF8wMEY4Owpsb2NhbHBhcmFtIFtgU0NSMV9YTEVOLTE6MF0gICAgICBTQ1IxX1NJTV9QUklOVF9BRERSICAgICA9IDMyJ2hGMDAwXzAwMDA7CmxvY2FscGFyYW0gW2BTQ1IxX1hMRU4tMTowXSAgICAgIFNDUjFfU0lNX0VYVF9JUlFfQUREUiAgID0gMzInaEYwMDBfMDEwMDsKbG9jYWxwYXJhbSBbYFNDUjFfWExFTi0xOjBdICAgICAgU0NSMV9TSU1fU09GVF9JUlFfQUREUiAgPSAzMidoRjAwMF8wMjAwOwoKYGVuZGlmIC8vIFNDUjFfQVJDSF9ERVNDUklQVElPTl9TVkgK