PCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMCBUcmFuc2l0aW9uYWwvL0VOIiAiaHR0cDovL3d3dy53My5vcmcvVFIvUkVDLWh0bWw0MC9sb29zZS5kdGQiPgo8aHRtbD48aGVhZD48dGl0bGU+QysrIFN0YW5kYXJkIExpYnJhcnkgRGVmZWN0IFJlcG9ydCBMaXN0PC90aXRsZT48L2hlYWQ+Cgo8Ym9keSBiZ2NvbG9yPSIjZmZmZmZmIiB0ZXh0PSIjMDAwMDAwIj4KPHRhYmxlPgo8dGJvZHk+PHRyPgo8dGQgYWxpZ249ImxlZnQiPkRvYy4gbm8uPC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5OMTc2Mz0wNS0wMDIzPC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPkRhdGU6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij4yMDA1LTAzLTA0PC90ZD4KPC90cj4KPHRyPgo8dGQgYWxpZ249ImxlZnQiPlByb2plY3Q6PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5Qcm9ncmFtbWluZyBMYW5ndWFnZSBDKys8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBhbGlnbj0ibGVmdCI+UmVwbHkgdG86PC90ZD4KPHRkIGFsaWduPSJsZWZ0Ij5NYXR0IEF1c3Rlcm4gJmx0O2F1c3Rlcm5AZ29vZ2xlLmNvbSZndDs8L3RkPgo8L3RyPgo8L3Rib2R5PjwvdGFibGU+CjxoMT5DKysgU3RhbmRhcmQgTGlicmFyeSBEZWZlY3QgUmVwb3J0IExpc3QgKFJldmlzaW9uIDM1KTwvaDE+CiAgPHA+UmVmZXJlbmNlIElTTy9JRUMgSVMgMTQ4ODI6MTk5OChFKTwvcD4KICA8cD5BbHNvIHNlZTo8L3A+CiAgICA8dWw+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctdG9jLmh0bWwiPlRhYmxlIG9mIENvbnRlbnRzPC9hPiBmb3IgYWxsIGxpYnJhcnkgaXNzdWVzLjwvbGk+CiAgICAgIDxsaT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctaW5kZXguaHRtbCI+SW5kZXggYnkgU2VjdGlvbjwvYT4gZm9yIGFsbCBsaWJyYXJ5IGlzc3Vlcy48L2xpPgogICAgICA8bGk+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLXN0YXR1cy5odG1sIj5JbmRleCBieSBTdGF0dXM8L2E+IGZvciBhbGwgbGlicmFyeSBpc3N1ZXMuPC9saT4KICAgICAgPGxpPjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIj5MaWJyYXJ5IEFjdGl2ZSBJc3N1ZXMgTGlzdDwvYT48L2xpPgogICAgICA8bGk+PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwiPkxpYnJhcnkgQ2xvc2VkIElzc3VlcyBMaXN0PC9hPjwvbGk+CiAgICA8L3VsPgogIDxwPlRoaXMgZG9jdW1lbnQgY29udGFpbnMgb25seSBsaWJyYXJ5IGlzc3VlcyB3aGljaCBoYXZlIGJlZW4gY2xvc2VkCiAgYnkgdGhlIExpYnJhcnkgV29ya2luZyBHcm91cCAoTFdHKSBhZnRlciBiZWluZyBmb3VuZCB0byBiZSBkZWZlY3RzCiAgaW4gdGhlIHN0YW5kYXJkLiAgVGhhdCBpcywgaXNzdWVzIHdoaWNoIGhhdmUgYSBzdGF0dXMgb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiwgb3IgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjUlIiPlJSPC9hPi4gU2VlIHRoZQogIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIj5MaWJyYXJ5IENsb3NlZCBJc3N1ZXMgTGlzdDwvYT4gZm9yIGlzc3VlcyBjbG9zZWQgYXMgbm9uLWRlZmVjdHMuICBTZWUgdGhlCiAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwiPkxpYnJhcnkgQWN0aXZlIElzc3VlcyBMaXN0PC9hPiBmb3IgYWN0aXZlIGlzc3VlcyBhbmQgbW9yZSBpbmZvcm1hdGlvbi4gIFRoZQogIGludHJvZHVjdG9yeSBtYXRlcmlhbCBpbiB0aGF0IGRvY3VtZW50IGFsc28gYXBwbGllcyB0byB0aGlzCiAgZG9jdW1lbnQuPC9wPgo8aDI+UmV2aXNpb24gSGlzdG9yeTwvaDI+Cjx1bD4KPGxpPlIzNTogCjIwMDUtMDMgcHJlLUxpbGxlaGFtbWVyIG1haWxpbmcuCjwvbGk+CjxsaT5SMzQ6IAoyMDA1LTAxIG1pZC10ZXJtIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ4OCI+NDg4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0OTQiPjQ5NDwvYT4uCjwvbGk+CjxsaT5SMzM6IAoyMDA0LTExIHBvc3QtUmVkbW9uZCBtYWlsaW5nLiAgUmVmbGVjdGlvbnMgYWN0aW9ucyB0YWtlbiBpbiBSZWRtb25kLgo8L2xpPgo8bGk+UjMyOiAKMjAwNC0wOSBwcmUtUmVkbW9uZCBtYWlsaW5nOiByZWZsZWN0cyBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbnMgYW5kCm5ldyBpc3N1ZXMgcmVjZWl2ZWQgYWZ0ZXIgdGhlIDIwMDQtMDcgbWFpbGluZy4gIEFkZGVkCm5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDc5Ij40Nzk8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ4MSI+NDgxPC9hPi4KPC9saT4KPGxpPlIzMTogCjIwMDQtMDcgbWlkLXRlcm0gbWFpbGluZzogcmVmbGVjdHMgbmV3IHByb3Bvc2VkIHJlc29sdXRpb25zIGFuZApuZXcgaXNzdWVzIHJlY2VpdmVkIGFmdGVyIHRoZSBwb3N0LVN5ZG5leSBtYWlsaW5nLiAgQWRkZWQKbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NjMiPjQ2MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDc4Ij40Nzg8L2E+Lgo8L2xpPgo8bGk+UjMwOiAKUG9zdC1TeWRuZXkgbWFpbGluZzogcmVmbGVjdHMgZGVjaXNpb25zIG1hZGUgYXQgdGhlIFN5ZG5leSBtZWV0aW5nLgpWb3RlZCBhbGwgIlJlYWR5IiBpc3N1ZXMgZnJvbSBSMjkgaW50byB0aGUgd29ya2luZyBwYXBlci4KQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0NjAiPjQ2MDwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjNDYyIj40NjI8L2E+Lgo8L2xpPgo8bGk+UjI5OiAKUHJlLVN5ZG5leSBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDQxIj40NDE8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzQ1NyI+NDU3PC9hPi4KPC9saT4KPGxpPlIyODogClBvc3QtS29uYSBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgS29uYSBtZWV0aW5nLgpBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM0MzIiPjQzMjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNDQwIj40NDA8L2E+Lgo8L2xpPgo8bGk+UjI3OiAKUHJlLUtvbmEgbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQwNCI+NDA0PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCM0MzEiPjQzMTwvYT4uCjwvbGk+CjxsaT5SMjY6IApQb3N0LU94Zm9yZCBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgT3hmb3JkIG1lZXRpbmcuCkFsbCBpc3N1ZXMgaW4gUmVhZHkgc3RhdHVzIHdlcmUgdm90ZWQgaW50byBEUiBzdGF0dXMuICBBbGwgaXNzdWVzIGluCkRSIHN0YXR1cyB3ZXJlIHZvdGVkIGludG8gV1Agc3RhdHVzLgo8L2xpPgo8bGk+UjI1OiAKUHJlLU94Zm9yZCBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzOTAiPjM5MDwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzQwMiI+NDAyPC9hPi4KPC9saT4KPGxpPlIyNDogClBvc3QtU2FudGEgQ3J1eiBtYWlsaW5nOiByZWZsZWN0cyBkZWNpc2lvbnMgbWFkZSBhdCB0aGUgU2FudGEgQ3J1egptZWV0aW5nLiAgQWxsIFJlYWR5IGlzc3VlcyBmcm9tIFIyMyB3aXRoIHRoZSBleGNlcHRpb24gb2YgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1MyI+MjUzPC9hPiwgd2hpY2ggaGFzIGJlZW4gZ2l2ZW4gYSBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbiwgd2VyZQptb3ZlZCB0byBEUiBzdGF0dXMuICBBZGRlZCBuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODMiPjM4MzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4OSI+Mzg5PC9hPi4gIChJc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzg3Ij4zODc8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzODkiPjM4OTwvYT4gd2VyZSBkaXNjdXNzZWQKYXQgdGhlIG1lZXRpbmcuKSAgTWFkZSBwcm9ncmVzcyBvbiBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPjogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPiBoYXZlIGJlZW4gbW92ZWQgdG8gUmVhZHkgc3RhdHVzLCBhbmQgdGhlIG9ubHkgcmVtYWluaW5nCmNvbmNlcm5zIHdpdGggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiBpbnZvbHZlIHdvcmRpbmcuCjwvbGk+CjxsaT5SMjM6IApQcmUtU2FudGEgQ3J1eiBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzNjciPjM2NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzgyIj4zODI8L2E+LgpNb3ZlZCBpc3N1ZXMgaW4gdGhlIFRDIHRvIFRDIHN0YXR1cy4KPC9saT4KPGxpPlIyMjogClBvc3QtQ3VyYedhbyBtYWlsaW5nLiAgQWRkZWQgbmV3IGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMzNjIiPjM2MjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMzY2Ij4zNjY8L2E+Lgo8L2xpPgo8bGk+UjIxOiAKUHJlLUN1cmHnYW8gbWFpbGluZy4gIEFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUxIj4zNTE8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzM2MSI+MzYxPC9hPi4KPC9saT4KPGxpPlIyMDogClBvc3QtUmVkbW9uZCBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFJlZG1vbmQuICBBZGRlZApuZXcgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMzYiPjMzNjwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+LCBvZiB3aGljaCBpc3N1ZXMgCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzNDciPjM0NzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzUwIj4zNTA8L2E+IHdlcmUgYWRkZWQgc2luY2UgUmVkbW9uZCwgaGVuY2UKbm90IGRpc2N1c3NlZCBhdCB0aGUgbWVldGluZy4gIAoKQWxsIFJlYWR5IGlzc3VlcyB3ZXJlIG1vdmVkIHRvIERSIHN0YXR1cywgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg0Ij4yODQ8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjQxIj4yNDE8L2E+LCBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjY3Ij4yNjc8L2E+LgoKTm90ZXdvcnRoeSBpc3N1ZXMgZGlzY3Vzc2VkIGF0IFJlZG1vbmQgaW5jbHVkZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyMCI+MTIwPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjAyIj4yMDI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI2Ij4yMjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyMzMiPjIzMzwvYT4sIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcwIj4yNzA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMyNTQiPjI1NDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMyMyI+MzIzPC9hPi4KPC9saT4KPGxpPlIxOTogClByZS1SZWRtb25kIG1haWxpbmcuICBBZGRlZCBuZXcgaXNzdWVzIAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMjMiPjMyMzwvYT4tPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMzNSI+MzM1PC9hPi4KPC9saT4KPGxpPlIxODogClBvc3QtQ29wZW5oYWdlbiBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIENvcGVuaGFnZW4uCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMxMiI+MzEyPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzE3Ij4zMTc8L2E+LCBhbmQgZGlzY3Vzc2VkCm5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MSI+MjcxPC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMTQiPjMxNDwvYT4uCgpDaGFuZ2VkIHN0YXR1cyBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE4Ij4xMTg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzYiPjEzNjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE1MyI+MTUzPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTY1Ij4xNjU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzEiPjE3MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MyI+MTgzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg0Ij4xODQ8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODUiPjE4NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NiI+MTg2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjE0Ij4yMTQ8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjEiPjIyMTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNCI+MjM0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM3Ij4yMzc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDMiPjI0MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0OCI+MjQ4PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUxIj4yNTE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTIiPjI1MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI1NiI+MjU2PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYwIj4yNjA8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjEiPjI2MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2MiI+MjYyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjYzIj4yNjM8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjUiPjI2NTwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2OCI+MjY4PC9hPgp0byBEUi4KCkNoYW5nZWQgc3RhdHVzIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDkiPjQ5PC9hPiAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTE3Ij4xMTc8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxODIiPjE4MjwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMwIj4yMzA8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMzIiPjIzMjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIzNSI+MjM1PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM4Ij4yMzg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNDEiPjI0MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI0MiI+MjQyPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUwIj4yNTA8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTkiPjI1OTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NCI+MjY0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjY2Ij4yNjY8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI2NyI+MjY3PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjcxIj4yNzE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzIiPjI3MjwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3MyI+MjczPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjc1Ij4yNzU8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODEiPjI4MTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4NCI+Mjg0PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjg1Ij4yODU8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyODYiPjI4NjwvYT4KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI4OCI+Mjg4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjkyIj4yOTI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyOTUiPjI5NTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5NyI+Mjk3PC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjk4Ij4yOTg8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDEiPjMwMTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwMyI+MzAzPC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzA2Ij4zMDY8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMzMDciPjMwNzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMwOCI+MzA4PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEyIj4zMTI8L2E+CnRvIFJlYWR5LgoKQ2xvc2VkIGlzc3VlcyAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTExIj4xMTE8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI3NyI+Mjc3PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNzkiPjI3OTwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjg3Ij4yODc8L2E+CjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI4OSI+Mjg5PC9hPiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyOTMiPjI5MzwvYT4gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzAyIj4zMDI8L2E+IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzMxMyI+MzEzPC9hPgo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMzMTQiPjMxNDwvYT4KYXMgTkFELgoKPC9saT4KPGxpPlIxNzogClByZS1Db3BlbmhhZ2VuIG1haWxpbmcuICBDb252ZXJ0ZWQgaXNzdWVzIGxpc3QgdG8gWE1MLiAgQWRkZWQgcHJvcG9zZWQKcmVzb2x1dGlvbnMgZm9yIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNDkiPjQ5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzc2Ij43NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5MSI+OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjM1Ij4yMzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUwIj4yNTA8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNjciPjI2NzwvYT4uCkFkZGVkIG5ldyBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI3OCI+Mjc4PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzExIj4zMTE8L2E+Lgo8L2xpPgo8bGk+UjE2OiAgCnBvc3QtVG9yb250byBtYWlsaW5nOyByZWZsZWN0cyBhY3Rpb25zIHRha2VuIGluIFRvcm9udG8uIEFkZGVkIG5ldwppc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI2NSI+MjY1PC9hPi08YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyNzciPjI3NzwvYT4uICBDaGFuZ2VkIHN0YXR1cyBvZiBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzMiPjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOCI+ODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5Ij45PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5Ij4xOTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNiI+MjY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzEiPjMxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzYxIj42MTwvYT4sCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM2MyI+NjM8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODYiPjg2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOCI+MTA4PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMiI+MTEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNCI+MTE0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExNSI+MTE1PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyMiI+MTIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyNyI+MTI3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyOSI+MTI5PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNCI+MTM0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNyI+MTM3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0MiI+MTQyPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NCI+MTQ0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NiI+MTQ2PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE0NyI+MTQ3PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE1OSI+MTU5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE2NCI+MTY0PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3MCI+MTcwPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MSI+MTgxPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5OSI+MTk5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwOCI+MjA4PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIwOSI+MjA5PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMCI+MjEwPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMSI+MjExPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMiI+MjEyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxNyI+MjE3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMCI+MjIwPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMiI+MjIyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyMyI+MjIzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNCI+MjI0PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNyI+MjI3PC9hPiB0byAiRFIiLiAgUmVvcGVuZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjMiPjIzPC9hPi4gUmVvcGVuZWQKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4NyI+MTg3PC9hPi4gQ2hhbmdlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMiI+MjwvYT4gYW5kCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQiPjQ8L2E+IHRvIE5BRC4gRml4ZWQgYSB0eXBvIGluIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNyI+MTc8L2E+LiBGaXhlZAppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNzAiPjcwPC9hPjogc2lnbmF0dXJlIHNob3VsZCBiZSBjaGFuZ2VkIGJvdGggcGxhY2VzIGl0CmFwcGVhcnMuIEZpeGVkIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNjAiPjE2MDwvYT46IHByZXZpb3VzIHZlcnNpb24gZGlkbid0IGZpeAp0aGUgYnVnIGluIGVub3VnaCBwbGFjZXMuCjwvbGk+CjxsaT5SMTU6IApwcmUtVG9yb250byBtYWlsaW5nLiBBZGRlZCBpc3N1ZXMKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjMzIj4yMzM8L2E+LTxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNjQiPjI2NDwvYT4uIFNvbWUgc21hbGwgSFRNTCBmb3JtYXR0aW5nCmNoYW5nZXMgc28gdGhhdCB3ZSBwYXNzIFdlYmxpbnQgdGVzdHMuCjwvbGk+CjxsaT5SMTQ6IApwb3N0LVRva3lvIElJIG1haWxpbmc7IHJlZmxlY3RzIGNvbW1pdHRlZSBhY3Rpb25zIHRha2VuIGluClRva3lvLiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOCI+MjI4PC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjMyIj4yMzI8L2E+LiAoMDAtMDAxOVIxL04xMjQyKQo8L2xpPgo8bGk+UjEzOiAKcHJlLVRva3lvIElJIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjEyIj4yMTI8L2E+IHRvIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjciPjIyNzwvYT4uCjwvbGk+CjxsaT5SMTI6IApwcmUtVG9reW8gSUkgbWFpbGluZzogQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxOTkiPjE5OTwvYT4gdG8KPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIxMSI+MjExPC9hPi4gQWRkZWQgImFuZCBwYXJhZ3JhcGggNSIgdG8gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24Kb2YgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzI5Ij4yOTwvYT4uICBBZGQgZnVydGhlciByYXRpb25hbGUgdG8gaXNzdWUKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTc4Ij4xNzg8L2E+Lgo8L2xpPgo8bGk+UjExOiAKcG9zdC1Lb25hIG1haWxpbmc6IFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gS29uYSAoOTktMDA0OC9OMTIyNCkuIE5vdGUgY2hhbmdlZCByZXNvbHV0aW9uIG9mIGlzc3Vlcwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCM0Ij40PC9hPiBhbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzM4Ij4zODwvYT4uIEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxOTYiPjE5NjwvYT4KdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE5OCI+MTk4PC9hPi4gQ2xvc2VkIGlzc3VlcyBsaXN0IHNwbGl0IGludG8gImRlZmVjdHMiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICBDaGFuZ2VkIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG9mIGlzc3VlCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzQiPjQ8L2E+IHRvIE5BRCwgYW5kIGNoYW5nZWQgdGhlIHdvcmRpbmcgb2YgcHJvcG9zZWQgcmVzb2x1dGlvbgpvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzgiPjM4PC9hPi4KPC9saT4KPGxpPlIxMDogCnByZS1Lb25hIHVwZGF0ZWQuICBBZGRlZCBwcm9wb3NlZCByZXNvbHV0aW9ucyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODMiPjgzPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzg2Ij44NjwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5MSI+OTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjOTIiPjkyPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwOSI+MTA5PC9hPi4gQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE5MCI+MTkwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTk1Ij4xOTU8L2E+LiAoOTktMDAzMy9EMTIwOSwgMTQgT2N0IDk5KQo8L2xpPgo8bGk+Ujk6IApwcmUtS29uYSBtYWlsaW5nLiAgQWRkZWQgaXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE0MCI+MTQwPC9hPiB0bwo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTg5Ij4xODk8L2E+LiBJc3N1ZXMgbGlzdCBzcGxpdCBpbnRvIHNlcGFyYXRlICJhY3RpdmUiIGFuZAoiY2xvc2VkIiBkb2N1bWVudHMuICg5OS0wMDMwL04xMjA2LCAyNSBBdWcgOTkpCjwvbGk+CjxsaT5SODogCnBvc3QtRHVibGluIG1haWxpbmcuIFVwZGF0ZWQgdG8gcmVmbGVjdCBMV0cgYW5kIGZ1bGwgY29tbWl0dGVlIGFjdGlvbnMKaW4gRHVibGluLiAoOTktMDAxNi9OMTE5MywgMjEgQXByIDk5KQo8L2xpPgo8bGk+Ujc6IApwcmUtRHVibGluIHVwZGF0ZWQ6IEFkZGVkIGlzc3VlcyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCMxMzAiPjEzMDwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEzMSI+MTMxPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzMiI+MTMyPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzMyI+MTMzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEzNCI+MTM0PC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTM1Ij4xMzU8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM2Ij4xMzY8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTM3Ij4xMzc8L2E+LAo8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMzgiPjEzODwvYT4sIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMzkiPjEzOTwvYT4gKDMxIE1hciA5OSkKPC9saT4KPGxpPlI2OiAKcHJlLUR1YmxpbiBtYWlsaW5nLiBBZGRlZCBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyNyI+MTI3PC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTI4Ij4xMjg8L2E+LAphbmQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyOSI+MTI5PC9hPi4gICg5OS0wMDA3L04xMTk0LCAyMiBGZWIgOTkpCjwvbGk+CjxsaT5SNTogCnVwZGF0ZSBpc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMiI+MTEyPC9hPjsgYWRkZWQgaXNzdWVzCjxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMTQiPjExNDwvYT4gdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEyNiI+MTI2PC9hPi4gRm9ybWF0IHJldmlzaW9ucyB0byBwcmVwYXJlCmZvciBtYWtpbmcgbGlzdCBwdWJsaWMuICgzMCBEZWMgOTgpCjwvbGk+CjxsaT5SNDogCnBvc3QtU2FudGEgQ3J1eiBJSSB1cGRhdGVkOiBJc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExMCI+MTEwPC9hPiwKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTExIj4xMTE8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTEyIj4xMTI8L2E+LCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMxMTMiPjExMzwvYT4gYWRkZWQsIHNldmVyYWwKaXNzdWVzIGNvcnJlY3RlZC4gKDIyIE9jdCA5OCkKPC9saT4KPGxpPlIzOiAKcG9zdC1TYW50YSBDcnV6IElJOiBJc3N1ZXMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjOTQiPjk0PC9hPiB0byA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTA5Ij4xMDk8L2E+CmFkZGVkLCBtYW55IGlzc3VlcyB1cGRhdGVkIHRvIHJlZmxlY3QgTFdHIGNvbnNlbnN1cyAoMTIgT2N0IDk4KQo8L2xpPgo8bGk+UjI6IApwcmUtU2FudGEgQ3J1eiBJSTogSXNzdWVzIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzczIj43MzwvYT4gdG8gPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjOTMiPjkzPC9hPiBhZGRlZCwKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE3Ij4xNzwvYT4gdXBkYXRlZC4gKDI5IFNlcCA5OCkKPC9saT4KPGxpPlIxOiAKQ29ycmVjdGlvbiB0byBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNTUiPjU1PC9hPiByZXNvbHV0aW9uLCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjNjAiPjYwPC9hPiBjb2RlCmZvcm1hdCwgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzY0Ij42NDwvYT4gdGl0bGUuICgxNyBTZXAgOTgpCjwvbGk+CjwvdWw+CjxoMj5EZWZlY3QgUmVwb3J0czwvaDI+Cjxocj4KPGEgbmFtZT0iMSI+PGgzPjEuJm5ic3A7QyBsaWJyYXJ5IGxpbmthZ2UgZWRpdGluZyBvdmVyc2lnaHQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi51c2luZy5saW5rYWdlIj4gW2xpYi51c2luZy5saW5rYWdlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTYgTm92IDE5OTc8L3A+CjxwPlRoZSBjaGFuZ2Ugc3BlY2lmaWVkIGluIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGJlbG93IGRpZCBub3QgbWFrZQppdCBpbnRvIHRoZSBTdGFuZGFyZC4gVGhpcyBjaGFuZ2Ugd2FzIGFjY2VwdGVkIGluIHByaW5jaXBsZSBhdCB0aGUKTG9uZG9uIG1lZXRpbmcsIGFuZCB0aGUgZXhhY3Qgd29yZGluZyBiZWxvdyB3YXMgYWNjZXB0ZWQgYXQgdGhlCk1vcnJpc3Rvd24gbWVldGluZy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE3LjQuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnVzaW5nLmxpbmthZ2UiPiBbbGliLnVzaW5nLmxpbmthZ2VdPC9hPiBwYXJhZ3JhcGggMgpmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgYSBuYW1lIGZyb20gdGhlIFN0YW5kYXJkIEMgbGlicmFyeQogIGRlY2xhcmVkIHdpdGggZXh0ZXJuYWwgbGlua2FnZSBoYXMgZWl0aGVyIGV4dGVybiAiQyIgb3IKICBleHRlcm4gIkMrKyIgbGlua2FnZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPldoZXRoZXIgYSBuYW1lIGZyb20gdGhlIFN0YW5kYXJkIEMgbGlicmFyeSBkZWNsYXJlZCB3aXRoIGV4dGVybmFsCiAgbGlua2FnZSBoYXMgZXh0ZXJuICJDIiBvciBleHRlcm4gIkMrKyIgbGlua2FnZQogIGlzIGltcGxlbWVudGF0aW9uIGRlZmluZWQuIEl0IGlzIHJlY29tbWVuZGVkIHRoYXQgYW4gaW1wbGVtZW50YXRpb24KICB1c2UgZXh0ZXJuICJDKysiIGxpbmthZ2UgZm9yIHRoaXMgcHVycG9zZS48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIzIj48aDM+My4mbmJzcDtBdGV4aXQgcmVnaXN0cmF0aW9uIGR1cmluZyBhdGV4aXQoKSBjYWxsIGlzIG5vdCBkZXNjcmliZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuc3VwcG9ydC5zdGFydC50ZXJtIj4gW2xpYi5zdXBwb3J0LnN0YXJ0LnRlcm1dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIERlYyAxOTk3PC9wPgo8cD5XZSBhcHBlYXIgbm90IHRvIGhhdmUgY292ZXJlZCBhbGwgdGhlIHBvc3NpYmlsaXRpZXMgb2YKIGV4aXQgcHJvY2Vzc2luZyB3aXRoIHJlc3BlY3QgdG8KYXRleGl0IHJlZ2lzdHJhdGlvbi4gPGJyPgo8YnI+CkV4YW1wbGUgMTogKEMgYW5kIEMrKyk8L3A+Cgo8cHJlPiAgICAjaW5jbHVkZSAmbHQ7c3RkbGliLmgmZ3Q7CiAgICB2b2lkIGYxKCkgeyB9CiAgICB2b2lkIGYyKCkgeyBhdGV4aXQoZjEpOyB9CiAgICAKICAgIGludCBtYWluKCkKICAgIHsKICAgICAgICBhdGV4aXQoZjIpOyAvLyB0aGUgb25seSB1c2Ugb2YgZjIKICAgICAgICByZXR1cm4gMDsgLy8gZm9yIEMgY29tcGF0aWJpbGl0eQogICAgfTwvcHJlPgoKPHA+QXQgcHJvZ3JhbSBleGl0LCBmMiBnZXRzIGNhbGxlZCBkdWUgdG8gaXRzIHJlZ2lzdHJhdGlvbiBpbgptYWluLiBSdW5uaW5nIGYyIGNhdXNlcyBmMSB0byBiZSBuZXdseSByZWdpc3RlcmVkIGR1cmluZyB0aGUgZXhpdApwcm9jZXNzaW5nLiBJcyB0aGlzIGEgdmFsaWQgcHJvZ3JhbT8gSWYgc28sIHdoYXQgYXJlIGl0cwpzZW1hbnRpY3M/PC9wPgoKPHA+CkludGVyZXN0aW5nbHksIG5laXRoZXIgdGhlIEMgc3RhbmRhcmQsIG5vciB0aGUgQysrIGRyYWZ0IHN0YW5kYXJkIG5vcgp0aGUgZm9ydGhjb21pbmcgQzlYIENvbW1pdHRlZSBEcmFmdCBzYXlzIGRpcmVjdGx5IHdoZXRoZXIgeW91IGNhbgpyZWdpc3RlciBhIGZ1bmN0aW9uIHdpdGggYXRleGl0IGR1cmluZyBleGl0IHByb2Nlc3NpbmcuPC9wPgoKPHA+CkFsbCAzIHN0YW5kYXJkcyBzYXkgdGhhdCBmdW5jdGlvbnMgYXJlIHJ1biBpbiByZXZlcnNlIG9yZGVyIG9mIHRoZWlyCnJlZ2lzdHJhdGlvbi4gU2luY2UgZjEgaXMgcmVnaXN0ZXJlZCBsYXN0LCBpdCBvdWdodCB0byBiZSBydW4gZmlyc3QsCmJ1dCBieSB0aGUgdGltZSBpdCBpcyByZWdpc3RlcmVkLCBpdCBpcyB0b28gbGF0ZSB0byBiZSBmaXJzdC48L3A+Cgo8cD5JZiB0aGUgcHJvZ3JhbSBpcyB2YWxpZCwgdGhlIHN0YW5kYXJkcyBhcmUgc2VsZi1jb250cmFkaWN0b3J5IGFib3V0Cml0cyBzZW1hbnRpY3MuPC9wPgoKPHA+RXhhbXBsZSAyOiAoQysrIG9ubHkpPC9wPgoKPHByZT4gICAgCiAgICB2b2lkIEYoKSB7IHN0YXRpYyBUIHQ7IH0gLy8gdHlwZSBUIGhhcyBhIGRlc3RydWN0b3IKCiAgICBpbnQgbWFpbigpCiAgICB7CiAgICAgICAgYXRleGl0KEYpOyAvLyB0aGUgb25seSB1c2Ugb2YgRgogICAgfQo8L3ByZT4KCjxwPkZ1bmN0aW9uIEYgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBoYXMgYSBsb2NhbCBzdGF0aWMgdmFyaWFibGUgdCwKYW5kIEYgaXMgY2FsbGVkIGZvciB0aGUgZmlyc3QgdGltZSBkdXJpbmcgZXhpdCBwcm9jZXNzaW5nLiBBIGxvY2FsCnN0YXRpYyBvYmplY3QgaXMgaW5pdGlhbGl6ZWQgdGhlIGZpcnN0IHRpbWUgY29udHJvbCBmbG93IHBhc3Nlcwp0aHJvdWdoIGl0cyBkZWZpbml0aW9uLCBhbmQgYWxsIHN0YXRpYyBvYmplY3RzIGFyZSBkZXN0cm95ZWQgZHVyaW5nCmV4aXQgcHJvY2Vzc2luZy4gSXMgdGhlIGNvZGUgdmFsaWQ/IElmIHNvLCB3aGF0IGFyZSBpdHMgc2VtYW50aWNzPzwvcD4KCjxwPgpTZWN0aW9uIDE4LjMgIlN0YXJ0IGFuZCB0ZXJtaW5hdGlvbiIgc2F5cyB0aGF0IGlmIGEgZnVuY3Rpb24KRiBpcyByZWdpc3RlcmVkIHdpdGggYXRleGl0IGJlZm9yZSBhIHN0YXRpYyBvYmplY3QgdCBpcyBpbml0aWFsaXplZCwgRgp3aWxsIG5vdCBiZSBjYWxsZWQgdW50aWwgYWZ0ZXIgdCdzIGRlc3RydWN0b3IgY29tcGxldGVzLjwvcD4KCjxwPgpJbiBleGFtcGxlIDIsIGZ1bmN0aW9uIEYgaXMgcmVnaXN0ZXJlZCB3aXRoIGF0ZXhpdCBiZWZvcmUgaXRzIGxvY2FsCnN0YXRpYyBvYmplY3QgTyBjb3VsZCBwb3NzaWJseSBiZSBpbml0aWFsaXplZC4gT24gdGhhdCBiYXNpcywgaXQgbXVzdApub3QgYmUgY2FsbGVkIGJ5IGV4aXQgcHJvY2Vzc2luZyB1bnRpbCBhZnRlciBPJ3MgZGVzdHJ1Y3Rvcgpjb21wbGV0ZXMuIEJ1dCB0aGUgZGVzdHJ1Y3RvciBjYW5ub3QgYmUgcnVuIHVudGlsIGFmdGVyIEYgaXMgY2FsbGVkLApzaW5jZSBvdGhlcndpc2UgdGhlIG9iamVjdCBjb3VsZCBub3QgYmUgY29uc3RydWN0ZWQgaW4gdGhlIGZpcnN0CnBsYWNlLjwvcD4KCjxwPklmIHRoZSBwcm9ncmFtIGlzIHZhbGlkLCB0aGUgc3RhbmRhcmQgaXMgc2VsZi1jb250cmFkaWN0b3J5IGFib3V0Cml0cyBzZW1hbnRpY3MuPC9wPgoKPHA+SSBwbGFuIHRvIHN1Ym1pdCBFeGFtcGxlIDEgYXMgYSBwdWJsaWMgY29tbWVudCBvbiB0aGUgQzlYIENELCB3aXRoCmEgcmVjb21tZW5kYXRpb24gdGhhdCB0aGUgcmVzdWx0cyBiZSB1bmRlZmluZWQuIChBbHRlcm5hdGl2ZTogbWFrZSBpdAp1bnNwZWNpZmllZC4gSSBkb24ndCB0aGluayBpdCBpcyB3b3J0aHdoaWxlIHRvIHNwZWNpZnkgdGhlIGNhc2Ugd2hlcmUKZjEgaXRzZWxmIHJlZ2lzdGVycyBhZGRpdGlvbmFsIGZ1bmN0aW9ucywgZWFjaCBvZiB3aGljaCByZWdpc3RlcnMKc3RpbGwgbW9yZSBmdW5jdGlvbnMuKTwvcD4KCjxwPkkgdGhpbmsgd2Ugc2hvdWxkIHJlc29sdmUgdGhlIHNpdHVhdGlvbiBpbiB0aGUgd2hhdGV2ZXIgd2F5IHRoZSBDCmNvbW1pdHRlZSBkZWNpZGVzLiA8L3A+Cgo8cD5Gb3IgRXhhbXBsZSAyLCBJIHJlY29tbWVuZCB3ZSBkZWNsYXJlIHRoZSByZXN1bHRzIHVuZGVmaW5lZC48L3A+Cgo8cD48aT5bU2VlIHJlZmxlY3RvciBtZXNzYWdlIGxpYi02NTAwIGZvciBmdXJ0aGVyIGRpc2N1c3Npb24uXTwvaT48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBzZWN0aW9uIDE4LjMvOCBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgRmlyc3QsIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBhcmUgZGVzdHJveWVkIGFuZAogIGZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGNhbGxpbmcgYXRleGl0IGFyZSBjYWxsZWQuIE9iamVjdHMgd2l0aAogIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGFyZSBkZXN0cm95ZWQgaW4gdGhlIHJldmVyc2Ugb3JkZXIgb2YgdGhlCiAgY29tcGxldGlvbiBvZiB0aGVpciBjb25zdHJ1Y3Rvci4gIChBdXRvbWF0aWMgb2JqZWN0cyBhcmUgbm90CiAgZGVzdHJveWVkIGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcgZXhpdCgpLikgRnVuY3Rpb25zIHJlZ2lzdGVyZWQgd2l0aAogIGF0ZXhpdCBhcmUgY2FsbGVkIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIHRoZWlyIHJlZ2lzdHJhdGlvbi4gIEEKICBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0IGJlZm9yZSBhbiBvYmplY3Qgb2JqMSBvZiBzdGF0aWMKICBzdG9yYWdlIGR1cmF0aW9uIGlzIGluaXRpYWxpemVkIHdpbGwgbm90IGJlIGNhbGxlZCB1bnRpbCBvYmoxJ3MKICBkZXN0cnVjdGlvbiBoYXMgY29tcGxldGVkLiBBIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQgYWZ0ZXIKICBhbiBvYmplY3Qgb2JqMiBvZiBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBpcyBpbml0aWFsaXplZCB3aWxsIGJlCiAgY2FsbGVkIGJlZm9yZSBvYmoyJ3MgZGVzdHJ1Y3Rpb24gc3RhcnRzLgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgRmlyc3QsIG9iamVjdHMgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBhcmUgZGVzdHJveWVkIGFuZAogIGZ1bmN0aW9ucyByZWdpc3RlcmVkIGJ5IGNhbGxpbmcgYXRleGl0IGFyZSBjYWxsZWQuIE5vbi1sb2NhbCBvYmplY3RzCiAgd2l0aCBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBhcmUgZGVzdHJveWVkIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mCiAgdGhlIGNvbXBsZXRpb24gb2YgdGhlaXIgY29uc3RydWN0b3IuIChBdXRvbWF0aWMgb2JqZWN0cyBhcmUgbm90CiAgZGVzdHJveWVkIGFzIGEgcmVzdWx0IG9mIGNhbGxpbmcgZXhpdCgpLikgRnVuY3Rpb25zIHJlZ2lzdGVyZWQgd2l0aAogIGF0ZXhpdCBhcmUgY2FsbGVkIGluIHRoZSByZXZlcnNlIG9yZGVyIG9mIHRoZWlyIHJlZ2lzdHJhdGlvbiwgZXhjZXB0CiAgdGhhdCBhIGZ1bmN0aW9uIGlzIGNhbGxlZCBhZnRlciBhbnkgcHJldmlvdXNseSByZWdpc3RlcmVkIGZ1bmN0aW9ucwogIHRoYXQgaGFkIGFscmVhZHkgYmVlbiBjYWxsZWQgYXQgdGhlIHRpbWUgaXQgd2FzIHJlZ2lzdGVyZWQuIEEKICBmdW5jdGlvbiByZWdpc3RlcmVkIHdpdGggYXRleGl0IGJlZm9yZSBhIG5vbi1sb2NhbCBvYmplY3Qgb2JqMSBvZgogIHN0YXRpYyBzdG9yYWdlIGR1cmF0aW9uIGlzIGluaXRpYWxpemVkIHdpbGwgbm90IGJlIGNhbGxlZCB1bnRpbAogIG9iajEncyBkZXN0cnVjdGlvbiBoYXMgY29tcGxldGVkLiBBIGZ1bmN0aW9uIHJlZ2lzdGVyZWQgd2l0aCBhdGV4aXQKICBhZnRlciBhIG5vbi1sb2NhbCBvYmplY3Qgb2JqMiBvZiBzdGF0aWMgc3RvcmFnZSBkdXJhdGlvbiBpcwogIGluaXRpYWxpemVkIHdpbGwgYmUgY2FsbGVkIGJlZm9yZSBvYmoyJ3MgZGVzdHJ1Y3Rpb24gc3RhcnRzLiBBIGxvY2FsCiAgc3RhdGljIG9iamVjdCBvYmozIGlzIGRlc3Ryb3llZCBhdCB0aGUgc2FtZSB0aW1lIGl0IHdvdWxkIGJlIGlmIGEKICBmdW5jdGlvbiBjYWxsaW5nIHRoZSBvYmozIGRlc3RydWN0b3Igd2VyZSByZWdpc3RlcmVkIHdpdGggYXRleGl0IGF0CiAgdGhlIGNvbXBsZXRpb24gb2YgdGhlIG9iajMgY29uc3RydWN0b3IuCjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNlZSA5OS0wMDM5L04xMjE1LCBPY3RvYmVyIDIyLCAxOTk5LCBieSBTdGVwaGVuIEQuIENsYW1hZ2UgZm9yIHRoZSBhbmFseXNpcwpzdXBwb3J0aW5nIHRvIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uLjwvcD4KPGhyPgo8YSBuYW1lPSI1Ij48aDM+NS4mbmJzcDtTdHJpbmc6OmNvbXBhcmUgc3BlY2lmaWNhdGlvbiBxdWVzdGlvbmFibGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjYuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6Y29tcGFyZSI+IFtsaWIuc3RyaW5nOjpjb21wYXJlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SmFjayBSZWV2ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTEgRGVjIDE5OTc8L3A+CjxwPkF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgYmFzaWNfc3RyaW5nIGNsYXNzIGRlZmluaXRpb24gaXMgdGhlIHNpZ25hdHVyZTogaW50CmNvbXBhcmUoc2l6ZV90eXBlIHBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuMiA9IG5wb3MpIGNvbnN0OyBJbiB0aGUKZm9sbG93aW5nIHRleHQgdGhpcyBpcyBkZWZpbmVkIGFzOiByZXR1cm5zCmJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OygqdGhpcyxwb3MxLG4xKS5jb21wYXJlKApiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsocyxuMik7IDwvcD4KCjxwPlNpbmNlIHRoZSBjb25zdHJ1Y3RvciBiYXNpY19zdHJpbmcoY29uc3QgY2hhclQqIHMsIHNpemVfdHlwZSBuLCBjb25zdCBBbGxvY2F0b3ImYW1wOyBhCj0gQWxsb2NhdG9yKCkpIGNsZWFybHkgcmVxdWlyZXMgdGhhdCBzICE9IE5VTEwgYW5kIG4gJmx0OyBucG9zIGFuZCBmdXJ0aGVyIHN0YXRlcyB0aGF0IGl0CnRocm93cyBsZW5ndGhfZXJyb3IgaWYgbiA9PSBucG9zLCBpdCBhcHBlYXJzIHRoZSBjb21wYXJlKCkgc2lnbmF0dXJlIGFib3ZlIHNob3VsZCBhbHdheXMKdGhyb3cgbGVuZ3RoIGVycm9yIGlmIGludm9rZWQgbGlrZSBzbzogc3RyLmNvbXBhcmUoMSwgc3RyLnNpemUoKS0xLCBzKTsgd2hlcmUgJ3MnIGlzIHNvbWUKbnVsbCB0ZXJtaW5hdGVkIGNoYXJhY3RlciBhcnJheS4gPC9wPgoKPHA+VGhpcyBhcHBlYXJzIHRvIGJlIGEgdHlwbyBzaW5jZSB0aGUgb2J2aW91cyBpbnRlbnQgaXMgdG8gYWxsb3cgZWl0aGVyIHRoZSBjYWxsIGFib3ZlIG9yCnNvbWV0aGluZyBsaWtlOiBzdHIuY29tcGFyZSgxLCBzdHIuc2l6ZSgpLTEsIHMsIHN0cmxlbihzKS0xKTsgPC9wPgoKPHA+VGhpcyB3b3VsZCBpbXBseSB0aGF0IHdoYXQgd2FzIHJlYWxseSBpbnRlbmRlZCB3YXMgdHdvIHNpZ25hdHVyZXMgaW50IGNvbXBhcmUoc2l6ZV90eXBlCnBvczEsIHNpemVfdHlwZSBuMSwgY29uc3QgY2hhclQqIHMpIGNvbnN0IGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsIGNvbnN0CmNoYXJUKiBzLCBzaXplX3R5cGUgbjIpIGNvbnN0OyBlYWNoIGRlZmluZWQgaW4gdGVybXMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgY29uc3RydWN0b3IuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIHRoZSBjb21wYXJlIHNpZ25hdHVyZSBpbiAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPgooYXQgdGhlIHZlcnkgZW5kIG9mIHRoZSBiYXNpY19zdHJpbmcgc3lub3BzaXMpIHdoaWNoIHJlYWRzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5pbnQgY29tcGFyZShzaXplX3R5cGUgcG9zMSwgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQqIHMsCiAgc2l6ZV90eXBlIG4yID0gbnBvcykgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBjaGFyVCogcykgY29uc3Q7PGJyPgogIGludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBjaGFyVCogcywKICBzaXplX3R5cGUgbjIpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5SZXBsYWNlIHRoZSBwb3J0aW9uIG9mIDIxLjMuNi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjpjb21wYXJlIj4gW2xpYi5zdHJpbmc6OmNvbXBhcmVdPC9hPgpwYXJhZ3JhcGhzIDUgYW5kIDYgd2hpY2ggcmVhZDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY2hhclQgKiBzLCBzaXplX3R5cGUgbjIKICA9IG5wb3MpIGNvbnN0Ozxicj4KICA8L3R0PlJldHVybnM6PHR0Pjxicj4KICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMsIHBvcywgbjEpLmNvbXBhcmUoPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyggcywgbjIpKTwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD5pbnQgY29tcGFyZShzaXplX3R5cGUgcG9zLCBzaXplX3R5cGUgbjEsPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBjaGFyVCAqIHMpIGNvbnN0Ozxicj4KICA8L3R0PlJldHVybnM6PHR0Pjxicj4KICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMsIHBvcywgbjEpLmNvbXBhcmUoPGJyPgogICZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOwogIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyggcyApKTxicj4KICA8YnI+CiAgaW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLDxicj4KICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgY29uc3QgY2hhclQgKiBzLAogIHNpemVfdHlwZSBuMikgY29uc3Q7PGJyPgogIDwvdHQ+UmV0dXJuczo8dHQ+PGJyPgogIGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OygqdGhpcywgcG9zLCBuMSkuY29tcGFyZSg8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7CiAgYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCBzLCBuMikpPC90dD48L3A+CjwvYmxvY2txdW90ZT4KCjxwPkVkaXRvcnMgcGxlYXNlIG5vdGUgdGhhdCBpbiBhZGRpdGlvbiB0byBzcGxpdHRpbmcgdGhlIHNpZ25hdHVyZSwgdGhlIHRoaXJkIGFyZ3VtZW50CmJlY29tZXMgY29uc3QsIG1hdGNoaW5nIHRoZSBleGlzdGluZyBzeW5vcHNpcy48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XaGlsZSB0aGUgTFdHIGRpc2xpa2VzIGFkZGluZyBzaWduYXR1cmVzLCB0aGlzIGlzIGEgY2xlYXIgZGVmZWN0IGluCnRoZSBTdGFuZGFyZCB3aGljaCBtdXN0IGJlIGZpeGVkLiZuYnNwOyBUaGUgc2FtZSBwcm9ibGVtIHdhcyBhbHNvCmlkZW50aWZpZWQgaW4gaXNzdWVzIDcgKGl0ZW0gNSkgYW5kIDg3LjwvcD4KPGhyPgo8YSBuYW1lPSI3Ij48aDM+Ny4mbmJzcDtTdHJpbmcgY2xhdXNlIG1pbm9yIHByb2JsZW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmdzIj4gW2xpYi5zdHJpbmdzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IERlYyAxOTk3PC9wPgo8cD4oMSkgSW4gMjEuMy41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6Omluc2VydCI+IFtsaWIuc3RyaW5nOjppbnNlcnRdPC9hPiwgdGhlIGRlc2NyaXB0aW9uIG9mIHRlbXBsYXRlCiZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OyBpbnNlcnQoaXRlcmF0b3IsIElucHV0SXRlcmF0b3IsCklucHV0SXRlcmF0b3IpIG1ha2VzIG5vIHNlbnNlLiBJdCByZWZlcnMgdG8gYSBtZW1iZXIgZnVuY3Rpb24gdGhhdApkb2Vzbid0IGV4aXN0LiBJdCBhbHNvIHRhbGtzIGFib3V0IHRoZSByZXR1cm4gdmFsdWUgb2YgYSB2b2lkCmZ1bmN0aW9uLiA8L3A+Cgo8cD4oMikgU2V2ZXJhbCB2ZXJzaW9ucyBvZiBiYXNpY19zdHJpbmc6OnJlcGxhY2UgZG9uJ3QgYXBwZWFyIGluIHRoZQpjbGFzcyBzeW5vcHNpcy4gPC9wPgoKPHA+KDMpIGJhc2ljX3N0cmluZzo6cHVzaF9iYWNrIGFwcGVhcnMgaW4gdGhlIHN5bm9wc2lzLCBidXQgaXMgbmV2ZXIKZGVzY3JpYmVkIGVsc2V3aGVyZS4gIEluIHRoZSBzeW5vcHNpcyBpdHMgYXJndW1lbnQgaXMgY29uc3QgY2hhclQsCndoaWNoIGRvZXNuJ3QgbWFrZXMgbXVjaCBzZW5zZTsgaXQgc2hvdWxkIHByb2JhYmx5IGJlIGNoYXJULCBvcgpwb3NzaWJsZSBjb25zdCBjaGFyVCZhbXA7LiA8L3A+Cgo8cD4oNCkgYmFzaWNfc3RyaW5nOjpwb3BfYmFjayBpcyBtaXNzaW5nLiA8L3A+Cgo8cD4oNSkgaW50IGNvbXBhcmUoc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4xLCBjaGFyVCogcywgc2l6ZV90eXBlIG4yCj0gbnBvcykgbWFrZSBubyBzZW5zZS4gRmlyc3QsIGl0J3MgY29uc3QgY2hhclQqIGluIHRoZSBzeW5vcHNpcyBhbmQKY2hhclQqIGluIHRoZSBkZXNjcmlwdGlvbi4gU2Vjb25kLCBnaXZlbiB3aGF0IGl0IHNheXMgaW4gUkVUVVJOUywKbGVhdmluZyBvdXQgdGhlIGZpbmFsIGFyZ3VtZW50IHdpbGwgYWx3YXlzIHJlc3VsdCBpbiBhbiBleGNlcHRpb24KZ2V0dGluZyB0aHJvd24uIFRoaXMgaXMgcGFyYWdyYXBocyA1IGFuZCA2IG9mIAoyMS4zLjYuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6Y29tcGFyZSI+IFtsaWIuc3RyaW5nOjpjb21wYXJlXTwvYT48L3A+Cgo8cD4oNikgSW4gdGFibGUgMzcsIGluIHNlY3Rpb24gMjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMucmVxdWlyZSI+IFtsaWIuY2hhci50cmFpdHMucmVxdWlyZV08L2E+LAp0aGVyZSdzIGEgbm90ZSBmb3IgWDo6bW92ZShzLCBwLCBuKS4gSXQgc2F5cyAiQ29waWVzIGNvcnJlY3RseQpldmVuIHdoZXJlIHAgaXMgaW4gW3MsIHMrbikiLiBUaGlzIGlzIGNvcnJlY3QgYXMgZmFyIGFzIGl0IGdvZXMsCmJ1dCBpdCBkb2Vzbid0IGdvIGZhciBlbm91Z2g7IGl0IHNob3VsZCBhbHNvIGd1YXJhbnRlZSB0aGF0IHRoZSBjb3B5CmlzIGNvcnJlY3QgZXZlbiB3aGVyZSBzIGluIGluIFtwLCBwK24pLiBUaGVzZSBhcmUgdHdvIG9ydGhvZ29uYWwKZ3VhcmFudGVlcywgYW5kIG5laXRoZXIgb25lIGZvbGxvd3MgZnJvbSB0aGUgb3RoZXIuIEJvdGggZ3VhcmFudGVlcwphcmUgbmVjZXNzYXJ5IGlmIFg6Om1vdmUgaXMgc3VwcG9zZWQgdG8gaGF2ZSB0aGUgc2FtZSBzb3J0IG9mCnNlbWFudGljcyBhcyBtZW1tb3ZlICh3aGljaCB3YXMgY2xlYXJseSB0aGUgaW50ZW50KSwgYW5kIGJvdGgKZ3VhcmFudGVlcyBhcmUgbmVjZXNzYXJ5IGlmIFg6Om1vdmUgaXMgYWN0dWFsbHkgc3VwcG9zZWQgdG8gYmUKdXNlZnVsLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SVRFTSAxOiBJbiAyMS4zLjUuNCBbbGliLnN0cmluZzo6aW5zZXJ0XSwgY2hhbmdlIHBhcmFncmFwaCAxNiB0byA8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IEVGRkVDVFM6IEVxdWl2YWxlbnQgdG8gaW5zZXJ0KHAgLSBiZWdpbigpLCBiYXNpY19zdHJpbmcoZmlyc3QsIGxhc3QpKS48YnI+Cjxicj4KSVRFTSAyOiZuYnNwOyBOb3QgYSBkZWZlY3Q7IHRoZSBTdGFuZGFyZCBpcyBjbGVhci4uIFRoZXJlIGFyZSB0ZW4gdmVyc2lvbnMgb2YgcmVwbGFjZSgpIGluCnRoZSBzeW5vcHNpcywgYW5kIHRlbiB2ZXJzaW9ucyBpbiAyMS4zLjUuNiBbbGliLnN0cmluZzo6cmVwbGFjZV0uPGJyPgo8YnI+CklURU0gMzogQ2hhbmdlIHRoZSBkZWNsYXJhdGlvbiBvZiBwdXNoX2JhY2sgaW4gdGhlIHN0cmluZyBzeW5vcHNpcyAoMjEuMywKW2xpYi5iYXNpYy5zdHJpbmddKSBmcm9tOjwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIHB1c2hfYmFjayhjb25zdCBjaGFyVCk8YnI+Cjxicj4KdG88YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IHZvaWQgcHVzaF9iYWNrKGNoYXJUKTxicj4KPGJyPgpBZGQgdGhlIGZvbGxvd2luZyB0ZXh0IGltbWVkaWF0ZWx5IGFmdGVyIDIxLjMuNS4yIFtsaWIuc3RyaW5nOjphcHBlbmRdLCBwYXJhZ3JhcGggMTAuPGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB2b2lkIGJhc2ljX3N0cmluZzo6cHVzaF9iYWNrKGNoYXJUIGMpOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IEVGRkVDVFM6IEVxdWl2YWxlbnQgdG8gYXBwZW5kKHN0YXRpY19jYXN0Jmx0O3NpemVfdHlwZSZndDsoMSksIGMpOzxicj4KPGJyPgpJVEVNIDQ6IE5vdCBhIGRlZmVjdC4gVGhlIG9taXNzaW9uIGFwcGVhcnMgdG8gaGF2ZSBiZWVuIGRlbGliZXJhdGUuPGJyPgo8YnI+CklURU0gNTogRHVwbGljYXRlOyBzZWUgaXNzdWUgNSAoYW5kIDg3KS48YnI+Cjxicj4KSVRFTSA2OiBJbiB0YWJsZSAzNywgUmVwbGFjZTo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7ICJDb3BpZXMgY29ycmVjdGx5IGV2ZW4gd2hlcmUgcCBpcyBpbiBbcywgcytuKS4iPGJyPgo8YnI+CndpdGg6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAiQ29waWVzIGNvcnJlY3RseSBldmVuIHdoZXJlIHRoZSByYW5nZXMgW3AsIHArbikgYW5kIFtzLApzK24pIG92ZXJsYXAuIjwvcD4KPGhyPgo8YSBuYW1lPSI4Ij48aDM+OC4mbmJzcDtMb2NhbGU6Omdsb2JhbCBsYWNrcyBndWFyYW50ZWU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5zdGF0aWNzIj4gW2xpYi5sb2NhbGUuc3RhdGljc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBEZWMgMTk5NzwvcD4KPHA+SXQgYXBwZWFycyB0aGVyZSdzIGFuIGltcG9ydGFudCBndWFyYW50ZWUgbWlzc2luZyBmcm9tIGNsYXVzZQoyMi4gV2UncmUgdG9sZCB0aGF0IGludm9raW5nIGxvY2FsZTo6Z2xvYmFsKEwpIHNldHMgdGhlIEMgbG9jYWxlIGlmIEwKaGFzIGEgbmFtZS4gSG93ZXZlciwgd2UncmUgbm90IHRvbGQgd2hldGhlciBvciBub3QgaW52b2tpbmcKc2V0bG9jYWxlKHMpIHNldHMgdGhlIGdsb2JhbCBDKysgbG9jYWxlLiA8L3A+Cgo8cD5UaGUgaW50ZW50LCBJIHRoaW5rLCBpcyB0aGF0IGl0IHNob3VsZCBub3QsIGJ1dCBJIGNhbid0IGZpbmQgYW55CnN1Y2ggd29yZHMgYW55d2hlcmUuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBzZW50ZW5jZSBhdCB0aGUgZW5kIG9mIDIyLjEuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnN0YXRpY3MiPiBbbGliLmxvY2FsZS5zdGF0aWNzXTwvYT4sCnBhcmFncmFwaCAyOiZuYnNwOyA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5ObyBsaWJyYXJ5IGZ1bmN0aW9uIG90aGVyIHRoYW4gPHR0PmxvY2FsZTo6Z2xvYmFsKCk8L3R0PiBzaGFsbCBhZmZlY3QgCiAgdGhlIHZhbHVlIHJldHVybmVkIGJ5IDx0dD5sb2NhbGUoKTwvdHQ+LiA8L3A+Cgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iOSI+PGgzPjkuJm5ic3A7T3BlcmF0b3IgbmV3KDApIGNhbGxzIHNob3VsZCBub3QgeWllbGQgdGhlIHNhbWUgcG9pbnRlcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUiPiBbbGliLm5ldy5kZWxldGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzQgSmFuIDE5OTg8L3A+CjxwPlNjb3R0IE1leWVycywgaW4gYSBjb21wLnN0ZC5jKysgcG9zdGluZzogSSBqdXN0IG5vdGljZWQgdGhhdApzZWN0aW9uIDMuNy4zLjEgb2YgQ0QyIHNlZW1zIHRvIGFsbG93IGZvciB0aGUgcG9zc2liaWxpdHkgdGhhdCBhbGwKY2FsbHMgdG8gb3BlcmF0b3IgbmV3KDApIHlpZWxkIHRoZSBzYW1lIHBvaW50ZXIsIGFuIGltcGxlbWVudGF0aW9uCnRlY2huaXF1ZSBzcGVjaWZpY2FsbHkgcHJvaGliaXRlZCBieSBBUk0gNS4zLjMuV2FzIHRoaXMgcHJvaGliaXRpb24KcmVhbGx5IGxpZnRlZD8gRG9lcyB0aGUgRkRJUyBhZ3JlZSB3aXRoIENEMiBpbiB0aGUgcmVnYXJkPyBbSXNzdWVzCmxpc3QgbWFpbnRhaW5lcidzIG5vdGU6IHRoZSBJUyBpcyB0aGUgc2FtZS5dPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgbGFzdCBwYXJhZ3JhcGggb2YgMy43LjMgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkFueSBhbGxvY2F0aW9uIGFuZC9vciBkZWFsbG9jYXRpb24gZnVuY3Rpb25zIGRlZmluZWQgaW4gYSBDKysgcHJvZ3JhbSBzaGFsbAogIGNvbmZvcm0gdG8gdGhlIHNlbWFudGljcyBzcGVjaWZpZWQgaW4gMy43LjMuMSBhbmQgMy43LjMuMi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5BbnkgYWxsb2NhdGlvbiBhbmQvb3IgZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGEgQysrIHByb2dyYW0sCiAgaW5jbHVkaW5nIHRoZSBkZWZhdWx0IHZlcnNpb25zIGluIHRoZSBsaWJyYXJ5LCBzaGFsbCBjb25mb3JtIHRvIHRoZSBzZW1hbnRpY3MKICBzcGVjaWZpZWQgaW4gMy43LjMuMSBhbmQgMy43LjMuMi48L3A+CjwvYmxvY2txdW90ZT4KPHA+Q2hhbmdlIDMuNy4zLjEvMiwgbmV4dC10by1sYXN0IHNlbnRlbmNlLCBmcm9tIDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBzaXplIG9mIHRoZSBzcGFjZSByZXF1ZXN0ZWQgaXMgemVybywgdGhlIHZhbHVlIHJldHVybmVkIHNoYWxsIG5vdCBiZQogIGEgbnVsbCBwb2ludGVyIHZhbHVlICg0LjEwKS48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5FdmVuIGlmIHRoZSBzaXplIG9mIHRoZSBzcGFjZSByZXF1ZXN0ZWQgaXMgemVybywgdGhlIHJlcXVlc3QgY2FuIGZhaWwuIElmCiAgdGhlIHJlcXVlc3Qgc3VjY2VlZHMsIHRoZSB2YWx1ZSByZXR1cm5lZCBzaGFsbCBiZSBhIG5vbi1udWxsIHBvaW50ZXIgdmFsdWUKICAoNC4xMCkgcDAgZGlmZmVyZW50IGZyb20gYW55IHByZXZpb3VzbHkgcmV0dXJuZWQgdmFsdWUgcDEsIHVubGVzcyB0aGF0IHZhbHVlCiAgcDEgd2FzIHNpbmNlIHBhc3NlZCB0byBhbiBvcGVyYXRvciBkZWxldGUuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjUuMy40LzcgY3VycmVudGx5IHJlYWRzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+V2hlbiB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaW4gYSBkaXJlY3QtbmV3LWRlY2xhcmF0b3IgaXMgemVybywgdGhlCiAgYWxsb2NhdGlvbiBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gYWxsb2NhdGUgYW4gYXJyYXkgd2l0aCBubyBlbGVtZW50cy4gVGhlCiAgcG9pbnRlciByZXR1cm5lZCBieSB0aGUgbmV3LWV4cHJlc3Npb24gaXMgbm9uLW51bGwuIFtOb3RlOiBJZiB0aGUgbGlicmFyeQogIGFsbG9jYXRpb24gZnVuY3Rpb24gaXMgY2FsbGVkLCB0aGUgcG9pbnRlciByZXR1cm5lZCBpcyBkaXN0aW5jdCBmcm9tIHRoZQogIHBvaW50ZXIgdG8gYW55IG90aGVyIG9iamVjdC5dPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlJldGFpbiB0aGUgZmlyc3Qgc2VudGVuY2UsIGFuZCBkZWxldGUgdGhlIHJlbWFpbmRlci48L3A+CjxwPjE4LjQuMSBjdXJyZW50bHkgaGFzIG5vIHRleHQuIEFkZCB0aGUgZm9sbG93aW5nOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RXhjZXB0IHdoZXJlIG90aGVyd2lzZSBzcGVjaWZpZWQsIHRoZSBwcm92aXNpb25zIG9mIDMuNy4zIGFwcGx5IHRvIHRoZQogIGxpYnJhcnkgdmVyc2lvbnMgb2Ygb3BlcmF0b3IgbmV3IGFuZCBvcGVyYXRvciBkZWxldGUuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRvIDE4LjQuMS4zLCBhZGQgdGhlIGZvbGxvd2luZyB0ZXh0OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHByb3Zpc2lvbnMgb2YgMy43LjMgZG8gbm90IGFwcGx5IHRvIHRoZXNlIHJlc2VydmVkIHBsYWNlbWVudCBmb3JtcyBvZgogIG9wZXJhdG9yIG5ldyBhbmQgb3BlcmF0b3IgZGVsZXRlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2VlIDk5LTAwNDAvTjEyMTYsIE9jdG9iZXIgMjIsIDE5OTksIGJ5IFN0ZXBoZW4gRC4gQ2xhbWFnZSBmb3IgdGhlIGFuYWx5c2lzCnN1cHBvcnRpbmcgdG8gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uPC9wPgo8aHI+CjxhIG5hbWU9IjExIj48aDM+MTEuJm5ic3A7Qml0c2V0IG1pbm9yIHByb2JsZW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudGVtcGxhdGUuYml0c2V0Ij4gW2xpYi50ZW1wbGF0ZS5iaXRzZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjIgSmFuIDE5OTg8L3A+CjxwPigxKSBiaXRzZXQmbHQ7Jmd0Ozo6b3BlcmF0b3JbXSBpcyBtZW50aW9uZWQgaW4gdGhlIGNsYXNzIHN5bm9wc2lzICgyMy4zLjUpLCBidXQgaXQgaXMKbm90IGRvY3VtZW50ZWQgaW4gMjMuMy41LjIuIDwvcD4KCjxwPigyKSBUaGUgY2xhc3Mgc3lub3BzaXMgb25seSBnaXZlcyBhIHNpbmdsZSBzaWduYXR1cmUgZm9yIGJpdHNldCZsdDsmZ3Q7OjpvcGVyYXRvcltdLApyZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3QgcG9zKS4gVGhpcyBkb2Vzbid0IG1ha2UgbXVjaCBzZW5zZS4gSXQgb3VnaHQgdG8gYmUgb3ZlcmxvYWRlZApvbiBjb25zdC4gcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90IHBvcyk7IGJvb2wgb3BlcmF0b3JbXShzaXplX3QgcG9zKSBjb25zdC4gPC9wPgoKPHA+KDMpIEJpdHNldCdzIHN0cmVhbSBpbnB1dCBmdW5jdGlvbiAoMjMuMy41LjMpIG91Z2h0IHRvIHNraXAgYWxsIHdoaXRlc3BhY2UgYmVmb3JlCnRyeWluZyB0byBleHRyYWN0IDBzIGFuZCAxcy4gVGhlIHN0YW5kYXJkIGRvZXNuJ3QgZXhwbGljaXRseSBzYXkgdGhhdCwgdGhvdWdoLiBUaGlzIHNob3VsZApnbyBpbiB0aGUgRWZmZWN0cyBjbGF1c2UuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPklURU1TIDEgQU5EIDI6PGJyPgo8YnI+CkluIHRoZSBiaXRzZXQgc3lub3BzaXMgKDIzLjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnRlbXBsYXRlLmJpdHNldCI+IFtsaWIudGVtcGxhdGUuYml0c2V0XTwvYT4pLCAKcmVwbGFjZSB0aGUgbWVtYmVyIGZ1bmN0aW9uIDxicj4KPGJyPgo8dHQ+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOzxicj4KPC90dD48YnI+CndpdGggdGhlIHR3byBtZW1iZXIgZnVuY3Rpb25zPGJyPgo8YnI+Cjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgYm9vbCBvcGVyYXRvcltdKHNpemVfdCBwb3MpIGNvbnN0OyA8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyByZWZlcmVuY2Ugb3BlcmF0b3JbXShzaXplX3QgcG9zKTsgPGJyPgo8L3R0Pjxicj4KQWRkIHRoZSBmb2xsb3dpbmcgdGV4dCBhdCB0aGUgZW5kIG9mIDIzLjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYml0c2V0Lm1lbWJlcnMiPiBbbGliLmJpdHNldC5tZW1iZXJzXTwvYT4sIAppbW1lZGlhdGVseSBhZnRlciBwYXJhZ3JhcGggNDU6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PmJvb2wgb3BlcmF0b3JbXShzaXplX3QgcG9zKSBjb25zdDs8L3R0Pjxicj4KICBSZXF1aXJlczogcG9zIGlzIHZhbGlkPGJyPgogIFRocm93czogbm90aGluZzxicj4KICBSZXR1cm5zOiA8dHQ+dGVzdChwb3MpPC90dD48YnI+CiAgPGJyPgogIDx0dD5iaXRzZXQmbHQ7TiZndDs6OnJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdCBwb3MpOzwvdHQ+IDxicj4KICBSZXF1aXJlczogcG9zIGlzIHZhbGlkPGJyPgogIFRocm93czogbm90aGluZzxicj4KICBSZXR1cm5zOiBBbiBvYmplY3Qgb2YgdHlwZSA8dHQ+Yml0c2V0Jmx0O04mZ3Q7OjpyZWZlcmVuY2U8L3R0PiBzdWNoIHRoYXQgPHR0PigqdGhpcylbcG9zXQogID09IHRoaXMtJmd0O3Rlc3QocG9zKTwvdHQ+LCBhbmQgc3VjaCB0aGF0IDx0dD4oKnRoaXMpW3Bvc10gPSB2YWw8L3R0PiBpcyBlcXVpdmFsZW50IHRvIDx0dD50aGlzLSZndDtzZXQocG9zLAogIHZhbCk7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgSXRlbSAzIGlzIG5vdCBhIGRlZmVjdC4gIkZvcm1hdHRlZAppbnB1dCIgaW1wbGllcyB0aGUgZGVzaXJlZCBzZW1hbnRpY3MuIFNlZSAyNy42LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkXTwvYT4uCjwvcD4KPGhyPgo8YSBuYW1lPSIxMyI+PGgzPjEzLiZuYnNwO0VvcyByZWZ1c2VzIHRvIGRpZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OmV4dHJhY3RvcnMiPiBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtXaWxsaWFtIE0uIE1pbGxlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIE1hciAxOTk4PC9wPgo8cD5JbiAyNy42LjEuMi4zLCB0aGVyZSBpcyBhIHJlZmVyZW5jZSB0byAiZW9zIiwgd2hpY2ggaXMKdGhlIG9ubHkgb25lIGluIHRoZSB3aG9sZSBkcmFmdCAoYXQgbGVhc3QgdXNpbmcgQWNyb2JhdCBzZWFyY2gpLCBzbwppdCdzIHVuZGVmaW5lZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjYuMS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OmV4dHJhY3RvcnMiPiBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdPC9hPiwgcmVwbGFjZSAiZW9zIiB3aXRoCiJjaGFyVCgpIjwvcD4KPGhyPgo8YSBuYW1lPSIxNCI+PGgzPjE0LiZuYnNwO0xvY2FsZTo6Y29tYmluZSBzaG91bGQgYmUgY29uc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tZW1iZXJzIj4gW2xpYi5sb2NhbGUubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5sb2NhbGU6OmNvbWJpbmUgaXMgdGhlIG9ubHkgbWVtYmVyIGZ1bmN0aW9uIG9mIGxvY2FsZSAob3RoZXIgdGhhbiBjb25zdHJ1Y3RvcnMgYW5kCmRlc3RydWN0b3IpIHRoYXQgaXMgbm90IGNvbnN0LiBUaGVyZSBpcyBubyByZWFzb24gZm9yIGl0IG5vdCB0byBiZSBjb25zdCwgYW5kIGdvb2QgcmVhc29ucwp3aHkgaXQgc2hvdWxkIGhhdmUgYmVlbiBjb25zdC4gRnVydGhlcm1vcmUsIGxlYXZpbmcgaXQgbm9uLWNvbnN0IGNvbmZsaWN0cyB3aXRoIDIyLjEuMQpwYXJhZ3JhcGggNjogIkFuIGluc3RhbmNlIG9mIGEgbG9jYWxlIGlzIGltbXV0YWJsZS4iIDwvcD4KCjxwPkhpc3Rvcnk6IHRoaXMgbWVtYmVyIGZ1bmN0aW9uIG9yaWdpbmFsbHkgd2FzIGEgY29uc3RydWN0b3IuIGl0IGhhcHBlbmVkIHRoYXQgdGhlCmludGVyZmFjZSBpdCBzcGVjaWZpZWQgaGFkIG5vIGNvcnJlc3BvbmRpbmcgbGFuZ3VhZ2Ugc3ludGF4LCBzbyBpdCB3YXMgY2hhbmdlZCB0byBhIG1lbWJlcgpmdW5jdGlvbi4gQXMgY29uc3RydWN0b3JzIGFyZSBuZXZlciBjb25zdCwgdGhlcmUgd2FzIG5vICJjb25zdCIgaW4gdGhlIGludGVyZmFjZQp3aGljaCB3YXMgdHJhbnNmb3JtZWQgaW50byBtZW1iZXIgImNvbWJpbmUiLiBJdCBzaG91bGQgaGF2ZSBiZWVuIGFkZGVkIGF0IHRoYXQKdGltZSwgYnV0IHRoZSBvbWlzc2lvbiB3YXMgbm90IG5vdGljZWQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+IGFuZCBhbHNvIGluIDIyLjEuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm1lbWJlcnMiPiBbbGliLmxvY2FsZS5tZW1iZXJzXTwvYT4sIGFkZCAKImNvbnN0IiB0byB0aGUgZGVjbGFyYXRpb24gb2YgbWVtYmVyIGNvbWJpbmU6IDwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgRmFjZXQmZ3Q7IGxvY2FsZSBjb21iaW5lKGNvbnN0IGxvY2FsZSZhbXA7IG90aGVyKSBjb25zdDsgPC9wcmU+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNSI+PGgzPjE1LiZuYnNwO0xvY2FsZTo6bmFtZSByZXF1aXJlbWVudCBpbmNvbnNpc3RlbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5tZW1iZXJzIj4gW2xpYi5sb2NhbGUubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5sb2NhbGU6Om5hbWUoKSBpcyBkZXNjcmliZWQgYXMgcmV0dXJuaW5nIGEgc3RyaW5nIHRoYXQgY2FuIGJlIHBhc3NlZCB0byBhIGxvY2FsZQpjb25zdHJ1Y3RvciwgYnV0IHRoZXJlIGlzIG5vIG1hdGNoaW5nIGNvbnN0cnVjdG9yLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVtYmVycyI+IFtsaWIubG9jYWxlLm1lbWJlcnNdPC9hPiwgcGFyYWdyYXBoIDUsIHJlcGxhY2UKIjx0dD5sb2NhbGUobmFtZSgpKTwvdHQ+IiB3aXRoCiI8dHQ+bG9jYWxlKG5hbWUoKS5jX3N0cigpKTwvdHQ+Ii4KPC9wPgo8aHI+CjxhIG5hbWU9IjE2Ij48aDM+MTYuJm5ic3A7QmFkIGN0eXBlX2J5bmFtZSZsdDtjaGFyJmd0OyBkZWNsPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lLnNwZWNpYWwiPiBbbGliLmxvY2FsZS5jdHlwZS5ieW5hbWUuc3BlY2lhbF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5UaGUgbmV3IHZpcnR1YWwgbWVtYmVycyBjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDs6OmRvX3dpZGVuIGFuZCBkb19uYXJyb3cgZGlkIG5vdCBnZXQKZWRpdGVkIGluIHByb3Blcmx5LiBJbnN0ZWFkLCB0aGUgbWVtYmVyIGRvX3dpZGVuIGFwcGVhcnMgZm91ciB0aW1lcywgd2l0aCB3cm9uZyBhcmd1bWVudApsaXN0cy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlRoZSBjb3JyZWN0IGRlY2xhcmF0aW9ucyBmb3IgdGhlIG92ZXJsb2FkZWQgbWVtYmVycwo8dHQ+ZG9fbmFycm93PC90dD4gYW5kIDx0dD5kb193aWRlbjwvdHQ+IHNob3VsZCBiZSBjb3BpZWQgCmZyb20gMjIuMi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5jdHlwZS5zcGVjaWFsIj4gW2xpYi5mYWNldC5jdHlwZS5zcGVjaWFsXTwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjE3Ij48aDM+MTcuJm5ic3A7QmFkIGJvb2wgcGFyc2luZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoaXMgc2VjdGlvbiBkZXNjcmliZXMgdGhlIHByb2Nlc3Mgb2YgcGFyc2luZyBhIHRleHQgYm9vbGVhbiB2YWx1ZSBmcm9tIHRoZSBpbnB1dApzdHJlYW0uIEl0IGRvZXMgbm90IHNheSBpdCByZWNvZ25pemVzIGVpdGhlciBvZiB0aGUgc2VxdWVuY2VzICJ0cnVlIiBvcgoiZmFsc2UiIGFuZCByZXR1cm5zIHRoZSBjb3JyZXNwb25kaW5nIGJvb2wgdmFsdWU7IGluc3RlYWQsIGl0IHNheXMgaXQgcmVjb2duaXplcwpvbmx5IG9uZSBvZiB0aG9zZSBzZXF1ZW5jZXMsIGFuZCBjaG9vc2VzIHdoaWNoIGFjY29yZGluZyB0byB0aGUgcmVjZWl2ZWQgdmFsdWUgb2YgYQpyZWZlcmVuY2UgYXJndW1lbnQgaW50ZW5kZWQgZm9yIHJldHVybmluZyB0aGUgcmVzdWx0LCBhbmQgcmVwb3J0cyBhbiBlcnJvciBpZiB0aGUgb3RoZXIKc2VxdWVuY2UgaXMgZm91bmQuICghKSBGdXJ0aGVybW9yZSwgaXQgY2xhaW1zIHRvIGdldCB0aGUgbmFtZXMgZnJvbSB0aGUgY3R5cGUmbHQ7Jmd0OwpmYWNldCByYXRoZXIgdGhhbiB0aGUgbnVtcHVuY3QmbHQ7Jmd0OyBmYWNldCwgYW5kIGl0IGV4YW1pbmVzIHRoZSAiYm9vbGFscGhhIgpmbGFnIHdyb25nbHk7IGl0IGRvZXNuJ3QgZGVmaW5lIHRoZSB2YWx1ZSAibG9jIjsgYW5kIGZpbmFsbHksIGl0IGNvbXB1dGVzCndyb25nbHkgd2hldGhlciB0byB1c2UgbnVtZXJpYyBvciAiYWxwaGEiIHBhcnNpbmcuPGJyPgo8YnI+CkkgYmVsaWV2ZSB0aGUgY29ycmVjdCBhbGdvcml0aG0gaXMgImFzIGlmIjogPC9wPgoKPHByZT4gIC8vIGluLCBlcnIsIHZhbCwgYW5kIHN0ciBhcmUgYXJndW1lbnRzLgogIGVyciA9IDA7CiAgY29uc3QgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7JmFtcDsgbnAgPSB1c2VfZmFjZXQmbHQ7bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7ICZndDsoc3RyLmdldGxvYygpKTsKICBjb25zdCBzdHJpbmdfdHlwZSB0ID0gbnAudHJ1ZW5hbWUoKSwgZiA9IG5wLmZhbHNlbmFtZSgpOwogIGJvb2wgdG0gPSB0cnVlLCBmbSA9IHRydWU7CiAgc2l6ZV90IHBvcyA9IDA7CiAgd2hpbGUgKHRtICZhbXA7JmFtcDsgcG9zICZsdDsgdC5zaXplKCkgfHwgZm0gJmFtcDsmYW1wOyBwb3MgJmx0OyBmLnNpemUoKSkgewogICAgaWYgKGluID09IGVuZCkgeyBlcnIgPSBzdHIuZW9mYml0OyB9CiAgICBib29sIG1hdGNoZWQgPSBmYWxzZTsKICAgIGlmICh0bSAmYW1wOyZhbXA7IHBvcyAmbHQ7IHQuc2l6ZSgpKSB7CiAgICAgIGlmICghZXJyICZhbXA7JmFtcDsgdFtwb3NdID09ICppbikgbWF0Y2hlZCA9IHRydWU7CiAgICAgIGVsc2UgdG0gPSBmYWxzZTsKICAgIH0KICAgIGlmIChmbSAmYW1wOyZhbXA7IHBvcyAmbHQ7IGYuc2l6ZSgpKSB7CiAgICAgIGlmICghZXJyICZhbXA7JmFtcDsgZltwb3NdID09ICppbikgbWF0Y2hlZCA9IHRydWU7CiAgICAgIGVsc2UgZm0gPSBmYWxzZTsKICAgIH0KICAgIGlmIChtYXRjaGVkKSB7ICsraW47ICsrcG9zOyB9CiAgICBpZiAocG9zICZndDsgdC5zaXplKCkpIHRtID0gZmFsc2U7CiAgICBpZiAocG9zICZndDsgZi5zaXplKCkpIGZtID0gZmFsc2U7CiAgfQogIGlmICh0bSA9PSBmbSB8fCBwb3MgPT0gMCkgeyBlcnIgfD0gc3RyLmZhaWxiaXQ7IH0KICBlbHNlICAgICAgICAgICAgICAgICAgICAgIHsgdmFsID0gdG07IH0KICByZXR1cm4gaW47PC9wcmU+Cgo8cD5Ob3RpY2UgdGhpcyB3b3JrcyByZWFzb25hYmx5IHdoZW4gdGhlIGNhbmRpZGF0ZSBzdHJpbmdzIGFyZSBib3RoIGVtcHR5LCBvciBlcXVhbCwgb3IKd2hlbiBvbmUgaXMgYSBzdWJzdHJpbmcgb2YgdGhlIG90aGVyLiBUaGUgcHJvcG9zZWQgdGV4dCBiZWxvdyBjYXB0dXJlcyB0aGUgbG9naWMgb2YgdGhlCmNvZGUgYWJvdmUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzXTwvYT4sIGluIHRoZSBmaXJzdCBsaW5lIG9mIHBhcmFncmFwaCAxNCwKY2hhbmdlICImYW1wOyZhbXA7IiB0byAiJmFtcDsiLjwvcD4KCjxwPlRoZW4sIHJlcGxhY2UgcGFyYWdyYXBocyAxNSBhbmQgMTYgYXMgZm9sbG93czo8L3A+Cgo8YmxvY2txdW90ZT4KCiAgPHA+T3RoZXJ3aXNlIHRhcmdldCBzZXF1ZW5jZXMgYXJlIGRldGVybWluZWQgImFzIGlmIiBieQogIGNhbGxpbmcgdGhlIG1lbWJlcnMgPHR0PmZhbHNlbmFtZSgpPC90dD4gYW5kCiAgPHR0PnRydWVuYW1lKCk8L3R0PiBvZiB0aGUgZmFjZXQgb2J0YWluZWQgYnkKICA8dHQ+dXNlX2ZhY2V0Jmx0O251bXB1bmN0Jmx0O2NoYXJUJmd0OyZuYnNwOyZndDsoc3RyLmdldGxvYygpKTwvdHQ+LiAgCiAgU3VjY2Vzc2l2ZSBjaGFyYWN0ZXJzIGluIHRoZSByYW5nZSA8dHQ+W2luLGVuZCk8L3R0PiAoc2VlCiAgW2xpYi5zZXF1ZW5jZS5yZXFtdHNdKSBhcmUgb2J0YWluZWQgYW5kIG1hdGNoZWQgYWdhaW5zdAogIGNvcnJlc3BvbmRpbmcgcG9zaXRpb25zIGluIHRoZSB0YXJnZXQgc2VxdWVuY2VzIG9ubHkgYXMgbmVjZXNzYXJ5IHRvCiAgaWRlbnRpZnkgYSB1bmlxdWUgbWF0Y2guIFRoZSBpbnB1dCBpdGVyYXRvciA8dHQ+aW48L3R0PiBpcwogIGNvbXBhcmVkIHRvIDx0dD5lbmQ8L3R0PiBvbmx5IHdoZW4gbmVjZXNzYXJ5IHRvIG9idGFpbiBhCiAgY2hhcmFjdGVyLiBJZiBhbmQgb25seSBpZiBhIHRhcmdldCBzZXF1ZW5jZSBpcyB1bmlxdWVseSBtYXRjaGVkLAogIDx0dD52YWw8L3R0PiBpcyBzZXQgdG8gdGhlIGNvcnJlc3BvbmRpbmcgdmFsdWUuPC9wPgoKPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIDx0dD5pbjwvdHQ+IGl0ZXJhdG9yIGlzIGFsd2F5cyBsZWZ0IHBvaW50aW5nIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgY2hhcmFjdGVyCiAgc3VjY2Vzc2Z1bGx5IG1hdGNoZWQuIElmIDx0dD52YWw8L3R0PiBpcyBzZXQsIHRoZW4gZXJyIGlzIHNldCB0byA8dHQ+c3RyLmdvb2RiaXQ8L3R0Pjsgb3IgdG8KICA8dHQ+c3RyLmVvZmJpdDwvdHQ+IGlmLCB3aGVuIHNlZWtpbmcgYW5vdGhlciBjaGFyYWN0ZXIgdG8gbWF0Y2gsIGl0IGlzIGZvdW5kIHRoYXQKICA8dHQ+KGluPT1lbmQpPC90dD4uIElmIDx0dD52YWw8L3R0PiBpcyBub3Qgc2V0LCB0aGVuIDxpPmVycjwvaT4gaXMgc2V0IHRvIDx0dD5zdHIuZmFpbGJpdDwvdHQ+OyBvciB0bwogIDx0dD4oc3RyLmZhaWxiaXR8c3RyLmVvZmJpdCk8L3R0PmlmCiAgdGhlIHJlYXNvbiBmb3IgdGhlIGZhaWx1cmUgd2FzIHRoYXQgPHR0Pihpbj09ZW5kKTwvdHQ+LiBbRXhhbXBsZTogZm9yIHRhcmdldHMKICA8dHQ+dHJ1ZTwvdHQ+OiJhIiBhbmQgPHR0PmZhbHNlPC90dD46ImFiYiIsIHRoZSBpbnB1dCBzZXF1ZW5jZSAiYSIgeWllbGRzCiAgPHR0PnZhbD09dHJ1ZTwvdHQ+IGFuZCA8dHQ+ZXJyPT1zdHIuZW9mYml0PC90dD47IHRoZSBpbnB1dCBzZXF1ZW5jZSAiYWJjIiB5aWVsZHMKICA8dHQ+ZXJyPXN0ci5mYWlsYml0PC90dD4sIHdpdGggPHR0PmluPC90dD4gZW5kaW5nIGF0IHRoZSAnYycgZWxlbWVudC4gRm9yIHRhcmdldHMKICA8dHQ+dHJ1ZTwvdHQ+OiIxIgogIGFuZCA8dHQ+ZmFsc2U8L3R0PjoiMCIsIHRoZSBpbnB1dCBzZXF1ZW5jZSAiMSIgeWllbGRzIDx0dD52YWw9PXRydWU8L3R0PgogIGFuZCA8dHQ+ZXJyPXN0ci5nb29kYml0PC90dD4uIEZvciBlbXB0eSB0YXJnZXRzICgiIiksIGFueSBpbnB1dCBzZXF1ZW5jZSB5aWVsZHMKICA8dHQ+ZXJyPT1zdHIuZmFpbGJpdDwvdHQ+LiAtLWVuZCBleGFtcGxlXTwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE4Ij48aDM+MTguJm5ic3A7R2V0KC4uLmJvb2wmYW1wOykgb21pdHRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5nZXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5JbiB0aGUgbGlzdCBvZiBudW1fZ2V0Jmx0OyZndDsgbm9uLXZpcnR1YWwgbWVtYmVycyBvbiBwYWdlIDIyLTIzLCB0aGUgbWVtYmVyCnRoYXQgcGFyc2VzIGJvb2wgdmFsdWVzIHdhcyBvbWl0dGVkIGZyb20gdGhlIGxpc3Qgb2YgZGVmaW5pdGlvbnMgb2Ygbm9uLXZpcnR1YWwKbWVtYmVycywgdGhvdWdoIGl0IGlzIGxpc3RlZCBpbiB0aGUgY2xhc3MgZGVmaW5pdGlvbiBhbmQgdGhlIGNvcnJlc3BvbmRpbmcKdmlydHVhbCBpcyBsaXN0ZWQgZXZlcnl3aGVyZSBhcHByb3ByaWF0ZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhdCB0aGUgYmVnaW5uaW5nIG9mIDIyLjIuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5nZXQubWVtYmVyc108L2E+CmFub3RoZXIgZ2V0IG1lbWJlciBmb3IgYm9vbCZhbXA7LCBjb3BpZWQgZnJvbSB0aGUgZW50cnkgaW4gCjIyLjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm51bS5nZXQiPiBbbGliLmxvY2FsZS5udW0uZ2V0XTwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjE5Ij48aDM+MTkuJm5ic3A7Ik5vY29udiIgZGVmaW5pdGlvbiB0b28gdmFndWU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPgpJbiB0aGUgZGVmaW5pdGlvbnMgb2YgY29kZWN2dCZsdDsmZ3Q7Ojpkb19vdXQgYW5kIGRvX2luLCB0aGV5IGFyZQpzcGVjaWZpZWQgdG8gcmV0dXJuIG5vY29udiBpZiAibm8gY29udmVyc2lvbiBpcwpuZWVkZWQiLiBUaGlzIGRlZmluaXRpb24gaXMgdG9vIHZhZ3VlLCBhbmQgZG9lcyBub3Qgc2F5Cm5vcm1hdGl2ZWx5IHdoYXQgaXMgZG9uZSB3aXRoIHRoZSBidWZmZXJzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZW50cnkgZm9yIG5vY29udiBpbiB0aGUgdGFibGUgdW5kZXIgcGFyYWdyYXBoIDQgaW4gc2VjdGlvbiAKMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+IHRvIHJlYWQ6CjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0Pm5vY29udjwvdHQ+OiA8dHQ+aW50ZXJuVDwvdHQ+IGFuZCA8dHQ+ZXh0ZXJuVDwvdHQ+IGFyZSB0aGUgc2FtZSB0eXBlLAogIGFuZCBpbnB1dCBzZXF1ZW5jZSBpcyBpZGVudGljYWwgdG8gY29udmVydGVkIHNlcXVlbmNlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5DaGFuZ2UgdGhlIE5vdGUgaW4gcGFyYWdyYXBoIDIgdG8gbm9ybWF0aXZlIHRleHQgYXMgZm9sbG93czo8L3A+CjxibG9ja3F1b3RlPgogIDxwPklmIHJldHVybnMgPHR0Pm5vY29udjwvdHQ+LCA8dHQ+aW50ZXJuVDwvdHQ+IGFuZCA8dHQ+ZXh0ZXJuVDwvdHQ+IGFyZSB0aGUKICBzYW1lIHR5cGUgYW5kIHRoZSBjb252ZXJ0ZWQgc2VxdWVuY2UgaXMgaWRlbnRpY2FsIHRvIHRoZSBpbnB1dCBzZXF1ZW5jZSA8dHQ+W2Zyb20sZnJvbV9uZXh0KTwvdHQ+LgogIDx0dD50b19uZXh0PC90dD4gaXMgc2V0IGVxdWFsIHRvIDx0dD50bzwvdHQ+LCB0aGUgdmFsdWUgb2YgPHR0PnN0YXRlPC90dD4gaXMKICB1bmNoYW5nZWQsIGFuZCB0aGVyZSBhcmUgbm8gY2hhbmdlcyB0byB0aGUgdmFsdWVzIGluIDx0dD5bdG8sIHRvX2xpbWl0KTwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIwIj48aDM+MjAuJm5ic3A7VGhvdXNhbmRzX3NlcCByZXR1cm5zIHdyb25nIHR5cGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBzeW5vcHNpcyBmb3IgbnVtcHVuY3QmbHQ7Jmd0Ozo6ZG9fdGhvdXNhbmRzX3NlcCwgYW5kIHRoZQpkZWZpbml0aW9uIG9mIG51bXB1bmN0Jmx0OyZndDs6OnRob3VzYW5kc19zZXAgd2hpY2ggY2FsbHMgaXQsIHNwZWNpZnkKdGhhdCBpdCByZXR1cm5zIGEgdmFsdWUgb2YgdHlwZSBjaGFyX3R5cGUuIEhlcmUgaXQgaXMgZXJyb25lb3VzbHkKZGVzY3JpYmVkIGFzIHJldHVybmluZyBhICJzdHJpbmdfdHlwZSIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4sIGFib3ZlIHBhcmFncmFwaCAyLCBjaGFuZ2UgCiJzdHJpbmdfdHlwZSIgdG8gImNoYXJfdHlwZSIuIDwvcD4KPGhyPgo8YSBuYW1lPSIyMSI+PGgzPjIxLiZuYnNwO0NvZGVjdnRfYnluYW1lJmx0OyZndDsgaW5zdGFudGlhdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIHNlY29uZCB0YWJsZSBpbiB0aGUgc2VjdGlvbiwgY2FwdGlvbmVkICJSZXF1aXJlZAppbnN0YW50aWF0aW9ucyIsIHRoZSBpbnN0YW50aWF0aW9ucyBmb3IgY29kZWN2dF9ieW5hbWUmbHQ7Jmd0OwpoYXZlIGJlZW4gb21pdHRlZC4gVGhlc2UgYXJlIG5lY2Vzc2FyeSB0byBhbGxvdyB1c2VycyB0byBjb25zdHJ1Y3QgYQpsb2NhbGUgYnkgbmFtZSBmcm9tIGZhY2V0cy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBpbiAyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiB0byB0aGUgdGFibGUgY2FwdGlvbmVkCiJSZXF1aXJlZCBpbnN0YW50aWF0aW9ucyIsIGluIHRoZSBjYXRlZ29yeSAiY3R5cGUiCnRoZSBsaW5lcyA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmNvZGVjdnRfYnluYW1lJmx0O2NoYXIsY2hhcixtYnN0YXRlX3QmZ3Q7LApjb2RlY3Z0X2J5bmFtZSZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0OyA8L3ByZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIyIj48aDM+MjIuJm5ic3A7TWVtYmVyIG9wZW4gdnMuIGZsYWdzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlmc3RyZWFtLm1lbWJlcnMiPiBbbGliLmlmc3RyZWFtLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6b3BlbiBsZWF2ZXMgdW5hbnN3ZXJlZCBxdWVzdGlvbnMgYWJvdXQgaG93IGl0CnJlc3BvbmRzIHRvIG9yIGNoYW5nZXMgZmxhZ3MgaW4gdGhlIGVycm9yIHN0YXR1cyBmb3IgdGhlIHN0cmVhbS4gQSBzdHJpY3QgcmVhZGluZwppbmRpY2F0ZXMgdGhhdCBpdCBpZ25vcmVzIHRoZSBiaXRzIGFuZCBkb2VzIG5vdCBjaGFuZ2UgdGhlbSwgd2hpY2ggY29uZnVzZXMgdXNlcnMgd2hvIGRvCm5vdCBleHBlY3QgZW9mYml0IGFuZCBmYWlsYml0IHRvIHJlbWFpbiBzZXQgYWZ0ZXIgYSBzdWNjZXNzZnVsIG9wZW4uIFRoZXJlIGFyZSB0aHJlZQpyZWFzb25hYmxlIHJlc29sdXRpb25zOiAxKSBzdGF0dXMgcXVvIDIpIGZhaWwgaWYgZmFpbCgpLCBpZ25vcmUgZW9mYml0IDMpIGNsZWFyIGZhaWxiaXQKYW5kIGVvZmJpdCBvbiBjYWxsIHRvIG9wZW4oKS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjguMS43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pZnN0cmVhbS5tZW1iZXJzIj4gW2xpYi5pZnN0cmVhbS5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDMsIDxpPmFuZDwvaT4gaW4gMjcuOC4xLjEwIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vZnN0cmVhbS5tZW1iZXJzIj4gW2xpYi5vZnN0cmVhbS5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDMsIHVuZGVyIG9wZW4oKSBlZmZlY3RzLCBhZGQgYSBmb290bm90ZToKPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+QSBzdWNjZXNzZnVsIG9wZW4gZG9lcyBub3QgY2hhbmdlIHRoZSBlcnJvciBzdGF0ZS48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgbWF5IHNlZW0gc3VycHJpc2luZyB0byBzb21lIHVzZXJzLCBidXQgaXQncyBqdXN0IGFuIGluc3RhbmNlCm9mIGEgZ2VuZXJhbCBydWxlOiBlcnJvciBmbGFncyBhcmUgbmV2ZXIgY2xlYXJlZCBieSB0aGUKaW1wbGVtZW50YXRpb24uIFRoZSBvbmx5IHdheSBlcnJvciBmbGFncyBhcmUgYXJlIGV2ZXIgY2xlYXJlZCBpcyBpZgp0aGUgdXNlciBleHBsaWNpdGx5IGNsZWFycyB0aGVtIGJ5IGhhbmQuPC9wPgoKPHA+VGhlIExXRyBiZWxpZXZlZCB0aGF0IHByZXNlcnZpbmcgdGhpcyBnZW5lcmFsIHJ1bGUgd2FzCmltcG9ydGFudCBlbm91Z2ggc28gdGhhdCBhbiBleGNlcHRpb24gc2hvdWxkbid0IGJlIG1hZGUganVzdCBmb3IgdGhpcwpvbmUgY2FzZS4gIFRoZSByZXNvbHV0aW9uIG9mIHRoaXMgaXNzdWUgY2xhcmlmaWVzIHdoYXQgdGhlIExXRwpiZWxpZXZlcyB0byBoYXZlIGJlZW4gdGhlIG9yaWdpbmFsIGludGVudC48L3A+Cgo8aHI+CjxhIG5hbWU9IjI0Ij48aDM+MjQuJm5ic3A7ImRvX2NvbnZlcnQiIGRvZXNuJ3QgZXhpc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiBjb2RlY3Z0Jmx0OyZndDs6OmRvX291dCBhbmQgZG9faW4gbWVudGlvbnMgYQpzeW1ib2wgImRvX2NvbnZlcnQiIHdoaWNoIGlzIG5vdCBkZWZpbmVkIGluIHRoZQpzdGFuZGFyZC4gVGhpcyBpcyBhIGxlZnRvdmVyIGZyb20gYW4gZWRpdCwgYW5kIHNob3VsZCBiZSAiZG9faW4KYW5kIGRvX291dCIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0Ij4gW2xpYi5sb2NhbGUuY29kZWN2dF08L2E+LCBwYXJhZ3JhcGggMywgY2hhbmdlCiJkb19jb252ZXJ0IiB0byAiZG9faW4gb3IgZG9fb3V0Ii4gQWxzbywgaW4gMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+LCBjaGFuZ2UgImRvX2NvbnZlcnQoKSIgdG8gImRvX2luCm9yIGRvX291dCIuIDwvcD4KPGhyPgo8YSBuYW1lPSIyNSI+PGgzPjI1LiZuYnNwO1N0cmluZyBvcGVyYXRvciZsdDsmbHQ7IHVzZXMgd2lkdGgoKSB2YWx1ZSB3cm9uZzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIGRlc2NyaXB0aW9uIG9mIG9wZXJhdG9yJmx0OyZsdDsgYXBwbGllZCB0byBzdHJpbmdzLCB0aGUgc3RhbmRhcmQgc2F5cyB0aGF0IHVzZXMKdGhlIHNtYWxsZXIgb2Ygb3Mud2lkdGgoKSBhbmQgc3RyLnNpemUoKSwgdG8gcGFkICJhcyBkZXNjcmliZWQgaW4gc3RhZ2UgMyIKZWxzZXdoZXJlOyBidXQgdGhpcyBpcyBpbmNvbnNpc3RlbnQsIGFzIHRoaXMgYWxsb3dzIG5vIHBvc3NpYmlsaXR5IG9mIHNwYWNlIGZvciBwYWRkaW5nLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiAgcGFyYWdyYXBoIDQgZnJvbTo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7ICIuLi4gd2hlcmUgPHR0Pm48L3R0PiBpcyB0aGUgc21hbGxlciBvZiA8dHQ+b3Mud2lkdGgoKTwvdHQ+IGFuZCA8dHQ+c3RyLnNpemUoKTwvdHQ+OwouLi4iPGJyPgo8YnI+CnRvOiA8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7ICIuLi4gd2hlcmUgPHR0Pm48L3R0PiBpcyB0aGUgbGFyZ2VyIG9mIDx0dD5vcy53aWR0aCgpPC90dD4gYW5kIDx0dD5zdHIuc2l6ZSgpPC90dD47Ci4uLiI8L3A+Cjxocj4KPGEgbmFtZT0iMjYiPjxoMz4yNi4mbmJzcDtCYWQgc2VudHJ5IGV4YW1wbGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpzZW50cnkiPiBbbGliLmlzdHJlYW06OnNlbnRyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5JbiBwYXJhZ3JhcGggNiwgdGhlIGNvZGUgaW4gdGhlIGV4YW1wbGU6IDwvcD4KCjxwcmU+ICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyA9IGNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7OjpzZW50cnkoCiAgICAgICAgICAgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgaXMsIGJvb2wgbm9za2lwd3MgPSBmYWxzZSkgewogICAgICAuLi4KICAgICAgaW50X3R5cGUgYzsKICAgICAgdHlwZWRlZiBjdHlwZSZsdDtjaGFyVCZndDsgY3R5cGVfdHlwZTsKICAgICAgY29uc3QgY3R5cGVfdHlwZSZhbXA7IGN0eXBlID0gdXNlX2ZhY2V0Jmx0O2N0eXBlX3R5cGUmZ3Q7KGlzLmdldGxvYygpKTsKICAgICAgd2hpbGUgKChjID0gaXMucmRidWYoKS0mZ3Q7c25leHRjKCkpICE9IHRyYWl0czo6ZW9mKCkpIHsKICAgICAgICBpZiAoY3R5cGUuaXMoY3R5cGUuc3BhY2UsYyk9PTApIHsKICAgICAgICAgIGlzLnJkYnVmKCktJmd0O3NwdXRiYWNrYyAoYyk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgLi4uCiAgIH08L3ByZT4KCjxwPmZhaWxzIHRvIGRlbW9uc3RyYXRlIGNvcnJlY3QgdXNlIG9mIHRoZSBmYWNpbGl0aWVzIGRlc2NyaWJlZC4gSW4KcGFydGljdWxhciwgaXQgZmFpbHMgdG8gdXNlIHRyYWl0cyBvcGVyYXRvcnMsIGFuZCBzcGVjaWZpZXMgaW5jb3JyZWN0CnNlbWFudGljcy4gKEUuZy4gaXQgc3BlY2lmaWVzIHNraXBwaW5nIG92ZXIgdGhlIGZpcnN0IGNoYXJhY3RlciBpbiB0aGUKc2VxdWVuY2Ugd2l0aG91dCBleGFtaW5pbmcgaXQuKSA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIHRoZSBleGFtcGxlIGFib3ZlIGZyb20gMjcuNi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbTo6c2VudHJ5Ij4gW2xpYi5pc3RyZWFtOjpzZW50cnldPC9hPgpwYXJhZ3JhcGggNi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgb3JpZ2luYWxseSBwcm9wb3NlZCByZXBsYWNlbWVudCBjb2RlIGZvciB0aGUgZXhhbXBsZSB3YXMgbm90CmNvcnJlY3QuIFRoZSBMV0cgdHJpZWQgaW4gS29uYSBhbmQgYWdhaW4gaW4gVG9reW8gdG8gY29ycmVjdCBpdAp3aXRob3V0IHN1Y2Nlc3MuIEluIFRva3lvLCBhbiBpbXBsZW1lbnRvciByZXBvcnRlZCB0aGF0IGFjdHVhbCB3b3JraW5nCmNvZGUgcmFuIG92ZXIgb25lIHBhZ2UgaW4gbGVuZ3RoIGFuZCB3YXMgcXVpdGUgY29tcGxpY2F0ZWQuIFRoZSBMV0cKZGVjaWRlZCB0aGF0IGl0IHdvdWxkIGJlIGNvdW50ZXItcHJvZHVjdGl2ZSB0byBpbmNsdWRlIHN1Y2ggYSBsZW5ndGh5CmV4YW1wbGUsIHdoaWNoIG1pZ2h0IHdlbGwgc3RpbGwgY29udGFpbiBlcnJvcnMuPC9wPgo8aHI+CjxhIG5hbWU9IjI3Ij48aDM+MjcuJm5ic3A7U3RyaW5nOjplcmFzZShyYW5nZSkgeWllbGRzIHdyb25nIGl0ZXJhdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmVyYXNlIj4gW2xpYi5zdHJpbmc6OmVyYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBzdHJpbmc6OmVyYXNlKGl0ZXJhdG9yIGZpcnN0LCBpdGVyYXRvciBsYXN0KSBpcyBzcGVjaWZpZWQgdG8gcmV0dXJuIGFuIGVsZW1lbnQgb25lCnBsYWNlIGJleW9uZCB0aGUgbmV4dCBlbGVtZW50IGFmdGVyIHRoZSBsYXN0IG9uZSBlcmFzZWQuIEUuZy4gZm9yIHRoZSBzdHJpbmcKImFiY2RlIiwgZXJhc2luZyB0aGUgcmFuZ2UgWydiJy4uJ2QnKSB3b3VsZCB5aWVsZCBhbiBpdGVyYXRvciBmb3IgZWxlbWVudCAnZScsCndoaWxlICdkJyBoYXMgbm90IGJlZW4gZXJhc2VkLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjEuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmVyYXNlIj4gW2xpYi5zdHJpbmc6OmVyYXNlXTwvYT4sIHBhcmFncmFwaCAxMCwgY2hhbmdlOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5SZXR1cm5zOiBhbiBpdGVyYXRvciB3aGljaCBwb2ludHMgdG8gdGhlIGVsZW1lbnQgaW1tZWRpYXRlbHkgZm9sbG93aW5nIF9sYXN0XyBwcmlvciB0bwogIHRoZSBlbGVtZW50IGJlaW5nIGVyYXNlZC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50byByZWFkIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlJldHVybnM6IGFuIGl0ZXJhdG9yIHdoaWNoIHBvaW50cyB0byB0aGUgZWxlbWVudCBwb2ludGVkIHRvIGJ5IF9sYXN0XyBwcmlvciB0byB0aGUKICBvdGhlciBlbGVtZW50cyBiZWluZyBlcmFzZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjI4Ij48aDM+MjguJm5ic3A7Q3R5cGUmbHQ7Y2hhciZndDtpcyBhbWJpZ3VvdXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj4gW2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSB2ZWN0b3IgZm9ybSBvZiBjdHlwZSZsdDtjaGFyJmd0Ozo6aXMgY2FuIGJlIGludGVycHJldGVkIHRvIG1lYW4Kc29tZXRoaW5nIHZlcnkgZGlmZmVyZW50IGZyb20gd2hhdCB3YXMgaW50ZW5kZWQuIFBhcmFncmFwaCA0IHNheXMgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogVGhlIHNlY29uZCBmb3JtLCBmb3IgYWxsICpwIGluIHRoZSByYW5nZSBbbG93LCBoaWdoKSwgYXNzaWducyB2ZWNbcC1sb3ddIHRvCiAgdGFibGUoKVsodW5zaWduZWQgY2hhcikqcF0uIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+VGhpcyBpcyBpbnRlbmRlZCB0byBjb3B5IHRoZSB2YWx1ZSBpbmRleGVkIGZyb20gdGFibGUoKVtdIGludG8gdGhlIHBsYWNlIGlkZW50aWZpZWQgaW4KdmVjW10uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjIuMi4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVycyI+IFtsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzXTwvYT4sIHBhcmFncmFwaCA0LCB0byByZWFkIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IFRoZSBzZWNvbmQgZm9ybSwgZm9yIGFsbCAqcCBpbiB0aGUgcmFuZ2UgW2xvdywgaGlnaCksIGFzc2lnbnMgaW50byB2ZWNbcC1sb3ddCiAgdGhlIHZhbHVlIHRhYmxlKClbKHVuc2lnbmVkIGNoYXIpKnBdLiA8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyOSI+PGgzPjI5LiZuYnNwO0lvc19iYXNlOjppbml0IGRvZXNuJ3QgZXhpc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm5hcnJvdy5zdHJlYW0ub2JqZWN0cyI+IFtsaWIubmFycm93LnN0cmVhbS5vYmplY3RzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlNlY3Rpb25zIDI3LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIubmFycm93LnN0cmVhbS5vYmplY3RzIj4gW2xpYi5uYXJyb3cuc3RyZWFtLm9iamVjdHNdPC9hPiBhbmQgMjcuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi53aWRlLnN0cmVhbS5vYmplY3RzIj4gW2xpYi53aWRlLnN0cmVhbS5vYmplY3RzXTwvYT4gbWVudGlvbgphIGZ1bmN0aW9uIGlvc19iYXNlOjppbml0LCB3aGljaCBpcyBub3QgZGVmaW5lZC4gUHJvYmFibHkgdGhleSBtZWFuCmJhc2ljX2lvcyZsdDsmZ3Q7Ojppbml0LCBkZWZpbmVkIGluIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiwKcGFyYWdyYXBoIDMuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5bUjEyOiBtb2RpZmllZCB0byBpbmNsdWRlIHBhcmFncmFwaCA1Ll08L3A+Cgo8cD5JbiAyNy4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm5hcnJvdy5zdHJlYW0ub2JqZWN0cyI+IFtsaWIubmFycm93LnN0cmVhbS5vYmplY3RzXTwvYT4gcGFyYWdyYXBoIDIgYW5kIDUsIGNoYW5nZSA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5pb3NfYmFzZTo6aW5pdCA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvIDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPmJhc2ljX2lvcyZsdDtjaGFyJmd0Ozo6aW5pdCA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPkFsc28sIG1ha2UgYSBzaW1pbGFyIGNoYW5nZSBpbiAyNy4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLndpZGUuc3RyZWFtLm9iamVjdHMiPiBbbGliLndpZGUuc3RyZWFtLm9iamVjdHNdPC9hPiBleGNlcHQgaXQKc2hvdWxkIHJlYWQgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+YmFzaWNfaW9zJmx0O3djaGFyX3QmZ3Q7Ojppbml0IDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjMwIj48aDM+MzAuJm5ic3A7V3JvbmcgaGVhZGVyIGZvciBMQ18qPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlBhcmFncmFwaCAyIGltcGxpZXMgdGhhdCB0aGUgQyBtYWNyb3MgTENfQ1RZUEUgZXRjLiBhcmUgZGVmaW5lZCBpbiAmbHQ7Y2N0eXBlJmd0OywKd2hlcmUgdGhleSBhcmUgaW4gZmFjdCBkZWZpbmVkIGVsc2V3aGVyZSB0byBhcHBlYXIgaW4gJmx0O2Nsb2NhbGUmZ3Q7LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4sIHBhcmFncmFwaCAyLCBjaGFuZ2UKIiZsdDtjY3R5cGUmZ3Q7IiB0byByZWFkICImbHQ7Y2xvY2FsZSZndDsiLiA8L3A+Cjxocj4KPGEgbmFtZT0iMzEiPjxoMz4zMS4mbmJzcDtJbW11dGFibGUgbG9jYWxlIHZhbHVlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlBhcmFncmFwaCA2LCBzYXlzICJBbiBpbnN0YW5jZSBvZiA8dHQ+bG9jYWxlPC90dD4gaXMKPGk+aW1tdXRhYmxlPC9pPjsgb25jZSBhIGZhY2V0IHJlZmVyZW5jZSBpcyBvYnRhaW5lZCBmcm9tIGl0LAouLi4iLiBUaGlzIGhhcyBjYXVzZWQgc29tZSBjb25mdXNpb24sIGJlY2F1c2UgbG9jYWxlIHZhcmlhYmxlcwphcmUgbWFuaWZlc3RseSBhc3NpZ25hYmxlLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiByZXBsYWNlIHBhcmFncmFwaCA2PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+QW4gaW5zdGFuY2Ugb2YgPHR0PmxvY2FsZTwvdHQ+IGlzIGltbXV0YWJsZTsgb25jZSBhIGZhY2V0CiAgcmVmZXJlbmNlIGlzIG9idGFpbmVkIGZyb20gaXQsIHRoYXQgcmVmZXJlbmNlIHJlbWFpbnMgdXNhYmxlIGFzIGxvbmcKICBhcyB0aGUgbG9jYWxlIHZhbHVlIGl0c2VsZiBleGlzdHMuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+T25jZSBhIGZhY2V0IHJlZmVyZW5jZSBpcyBvYnRhaW5lZCBmcm9tIGEgbG9jYWxlIG9iamVjdCBieQogIGNhbGxpbmcgdXNlX2ZhY2V0Jmx0OyZndDssIHRoYXQgcmVmZXJlbmNlIHJlbWFpbnMgdXNhYmxlLCBhbmQgdGhlCiAgcmVzdWx0cyBmcm9tIG1lbWJlciBmdW5jdGlvbnMgb2YgaXQgbWF5IGJlIGNhY2hlZCBhbmQgcmUtdXNlZCwgYXMKICBsb25nIGFzIHNvbWUgbG9jYWxlIG9iamVjdCByZWZlcnMgdG8gdGhhdCBmYWNldC48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIzMiI+PGgzPjMyLiZuYnNwO1BiYWNrZmFpbCBkZXNjcmlwdGlvbiBpbmNvbnNpc3RlbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy41LjIuNC40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5wYmFjayI+IFtsaWIuc3RyZWFtYnVmLnZpcnQucGJhY2tdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZXF1aXJlZCBzdGF0ZSBiZWZvcmUgY2FsbGluZyB2aXJ0dWFsIG1lbWJlcgpiYXNpY19zdHJlYW1idWYmbHQ7Jmd0Ozo6cGJhY2tmYWlsIHJlcXVpcmVtZW50cyBpcyBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgY29uZGl0aW9ucwpkZXNjcmliZWQgaW4gMjcuNS4yLjIuNCBbbGliLnN0cmVhbWJ1Zi5wdWIucGJhY2tdIHdoZXJlIG1lbWJlciBzcHV0YmFja2MgY2FsbHMgaXQuClNwZWNpZmljYWxseSwgdGhlIGxhdHRlciBzYXlzIGl0IGNhbGxzIHBiYWNrZmFpbCBpZjogPC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IHRyYWl0czo6ZXEoYyxncHRyKClbLTFdKSBpcyBmYWxzZSA8L3A+Cgo8cD53aGVyZSBwYmFja2ZhaWwgY2xhaW1zIHRvIHJlcXVpcmU6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyB0cmFpdHM6OmVxKCpncHRyKCksdHJhaXRzOjp0b19jaGFyX3R5cGUoYykpIHJldHVybnMgZmFsc2UgPC9wPgoKPHA+SXQgYXBwZWFycyB0aGF0IHRoZSBwYmFja2ZhaWwgZGVzY3JpcHRpb24gaXMgd3JvbmcuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy41LjIuNC40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5wYmFjayI+IFtsaWIuc3RyZWFtYnVmLnZpcnQucGJhY2tdPC9hPiwgcGFyYWdyYXBoIDEsIGNoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4iPHR0PnRyYWl0czo6ZXEoKmdwdHIoKSx0cmFpdHM6OnRvX2NoYXJfdHlwZSggYykpPC90dD4iPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50byA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4iPHR0PnRyYWl0czo6ZXEodHJhaXRzOjp0b19jaGFyX3R5cGUoYyksZ3B0cigpWy0xXSk8L3R0PiIKICA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk5vdGUgZGVsaWJlcmF0ZSByZW9yZGVyaW5nIG9mIGFyZ3VtZW50cyBmb3IgY2xhcml0eSBpbiBhZGRpdGlvbiB0byB0aGUgY29ycmVjdGlvbiBvZgp0aGUgYXJndW1lbnQgdmFsdWUuPC9wPgo8aHI+CjxhIG5hbWU9IjMzIj48aDM+MzMuJm5ic3A7Q29kZWN2dCZsdDsmZ3Q7IG1lbnRpb25zIGZyb21fdHlwZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIHRhYmxlIGRlZmluaW5nIHRoZSByZXN1bHRzIGZyb20gZG9fb3V0IGFuZCBkb19pbiwgdGhlIHNwZWNpZmljYXRpb24gZm9yIHRoZQpyZXN1bHQgPGk+ZXJyb3I8L2k+IHNheXMgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+ZW5jb3VudGVyZWQgYSBmcm9tX3R5cGUgY2hhcmFjdGVyIGl0IGNvdWxkIG5vdCBjb252ZXJ0IDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+YnV0IGZyb21fdHlwZSBpcyBub3QgZGVmaW5lZC4gVGhpcyBjbGVhcmx5IGlzIGludGVuZGVkIHRvIGJlIGFuIGV4dGVyblQgZm9yIGRvX2luLCBvcgphbiBpbnRlcm5UIGZvciBkb19vdXQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXTwvYT4gcGFyYWdyYXBoIDQsIHJlcGxhY2UgdGhlIGRlZmluaXRpb24KaW4gdGhlIHRhYmxlIGZvciB0aGUgY2FzZSBvZiBfZXJyb3JfIHdpdGggPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+ZW5jb3VudGVyZWQgYSBjaGFyYWN0ZXIgaW4gPHR0Pltmcm9tLGZyb21fZW5kKTwvdHQ+IHRoYXQgaXQgY291bGQgbm90IGNvbnZlcnQuIDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM0Ij48aDM+MzQuJm5ic3A7VHJ1ZS9mYWxzZW5hbWUoKSBub3QgaW4gY3R5cGUmbHQ7Jmd0OzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIHBhcmFncmFwaCAxOSwgRWZmZWN0czosIG1lbWJlcnMgdHJ1ZW5hbWUoKSBhbmQgZmFsc2VuYW1lIGFyZSB1c2VkIGZyb20gZmFjZXQKY3R5cGUmbHQ7Y2hhclQmZ3Q7LCBidXQgaXQgaGFzIG5vIHN1Y2ggbWVtYmVycy4gTm90ZSB0aGF0IHRoaXMgaXMgYWxzbyBhIHByb2JsZW0gaW4KMjIuMi4yLjEuMiwgYWRkcmVzc2VkIGluICg0KS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCAxOSwgaW4gdGhlIEVmZmVjdHM6CmNsYXVzZSBmb3IgbWVtYmVyIHB1dCguLi4uLCBib29sKSwgcmVwbGFjZSB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlCnN0cmluZ190eXBlIHZhbHVlIHMgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5jb25zdCBudW1wdW5jdCZhbXA7IG5wID0gdXNlX2ZhY2V0Jmx0O251bXB1bmN0Jmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYyk7CnN0cmluZ190eXBlIHMgPSB2YWwgPyBucC50cnVlbmFtZSgpIDogbnAuZmFsc2VuYW1lKCk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMzUiPjxoMz4zNS4mbmJzcDtObyBtYW5pcHVsYXRvciB1bml0YnVmIGluIHN5bm9wc2lzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW1zLmJhc2UiPiBbbGliLmlvc3RyZWFtcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkluIDI3LjQuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mbXRmbGFncy5tYW5pcCI+IFtsaWIuZm10ZmxhZ3MubWFuaXBdPC9hPiwgd2UgaGF2ZSBhIGRlZmluaXRpb24gZm9yIGEgbWFuaXB1bGF0b3IKbmFtZWQgInVuaXRidWYiLiBVbmxpa2Ugb3RoZXIgbWFuaXB1bGF0b3JzLCBpdCdzIG5vdCBsaXN0ZWQKaW4gc3lub3BzaXMuIFNpbWlsYXJseSBmb3IgIm5vdW5pdGJ1ZiIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gdGhlIHN5bm9wc2lzIGZvciAmbHQ7aW9zJmd0OyBpbiAyNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbXMuYmFzZSI+IFtsaWIuaW9zdHJlYW1zLmJhc2VdPC9hPiwgYWZ0ZXIKdGhlIGVudHJ5IGZvciAibm91cHBlcmNhc2UiLCB0aGUgcHJvdG90eXBlczogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5pb3NfYmFzZSZhbXA7IHVuaXRidWYoaW9zX2Jhc2UmYW1wOyBzdHIpOwppb3NfYmFzZSZhbXA7IG5vdW5pdGJ1Zihpb3NfYmFzZSZhbXA7IHN0cik7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMzYiPjxoMz4zNi4mbmJzcDtJd29yZCAmYW1wOyBwd29yZCBzdG9yYWdlIGxpZmV0aW1lIG9taXR0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2Uuc3RvcmFnZSI+IFtsaWIuaW9zLmJhc2Uuc3RvcmFnZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5JbiB0aGUgZGVmaW5pdGlvbnMgZm9yIGlvc19iYXNlOjppd29yZCBhbmQgcHdvcmQsIHRoZSBsaWZldGltZSBvZiB0aGUgc3RvcmFnZSBpcwpzcGVjaWZpZWQgYmFkbHksIHNvIHRoYXQgYW4gaW1wbGVtZW50YXRpb24gd2hpY2ggb25seSBrZWVwcyB0aGUgbGFzdCB2YWx1ZSBzdG9yZWQgYXBwZWFycwp0byBjb25mb3JtLiBJbiBwYXJ0aWN1bGFyLCBpdCBzYXlzOiA8L3A+Cgo8cD5UaGUgcmVmZXJlbmNlIHJldHVybmVkIG1heSBiZWNvbWUgaW52YWxpZCBhZnRlciBhbm90aGVyIGNhbGwgdG8gdGhlIG9iamVjdCdzIGl3b3JkCm1lbWJlciB3aXRoIGEgZGlmZmVyZW50IGluZGV4IC4uLiA8L3A+Cgo8cD5UaGlzIGlzIG5vdCBpZGxlIHNwZWN1bGF0aW9uOyBhdCBsZWFzdCBvbmUgaW1wbGVtZW50YXRpb24gd2FzIGRvbmUgdGhpcyB3YXkuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgaW4gMjcuNC4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLnN0b3JhZ2UiPiBbbGliLmlvcy5iYXNlLnN0b3JhZ2VdPC9hPiwgaW4gYm90aCBwYXJhZ3JhcGggMiBhbmQgYWxzbyBpbgpwYXJhZ3JhcGggNCwgcmVwbGFjZSB0aGUgc2VudGVuY2U6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSByZWZlcmVuY2UgcmV0dXJuZWQgbWF5IGJlY29tZSBpbnZhbGlkIGFmdGVyIGFub3RoZXIgY2FsbCB0byB0aGUgb2JqZWN0J3MgaXdvcmQKICBbcHdvcmRdIG1lbWJlciB3aXRoIGEgZGlmZmVyZW50IGluZGV4LCBhZnRlciBhIGNhbGwgdG8gaXRzIGNvcHlmbXQgbWVtYmVyLCBvciB3aGVuIHRoZQogIG9iamVjdCBpcyBkZXN0cm95ZWQuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHJlZmVyZW5jZSByZXR1cm5lZCBpcyBpbnZhbGlkIGFmdGVyIGFueSBvdGhlciBvcGVyYXRpb25zIG9uIHRoZSBvYmplY3QuIEhvd2V2ZXIsCiAgdGhlIHZhbHVlIG9mIHRoZSBzdG9yYWdlIHJlZmVycmVkIHRvIGlzIHJldGFpbmVkLCBzbyB0aGF0IHVudGlsIHRoZSBuZXh0IGNhbGwgdG8gY29weWZtdCwKICBjYWxsaW5nIGl3b3JkIFtwd29yZF0gd2l0aCB0aGUgc2FtZSBpbmRleCB5aWVsZHMgYW5vdGhlciByZWZlcmVuY2UgdG8gdGhlIHNhbWUgdmFsdWUuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+c3Vic3RpdHV0aW5nICJpd29yZCIgb3IgInB3b3JkIiBhcyBhcHByb3ByaWF0ZS4gPC9wPgo8aHI+CjxhIG5hbWU9IjM3Ij48aDM+MzcuJm5ic3A7TGVmdG92ZXIgImdsb2JhbCIgcmVmZXJlbmNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+SW4gdGhlIG92ZXJ2aWV3IG9mIGxvY2FsZSBzZW1hbnRpY3MsIHBhcmFncmFwaCA0LCBpcyB0aGUgc2VudGVuY2UgPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SWYgRmFjZXQgaXMgbm90IHByZXNlbnQgaW4gYSBsb2NhbGUgKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwgbG9jYWxlKSwgaXQgdGhyb3dzCiAgdGhlIHN0YW5kYXJkIGV4Y2VwdGlvbiBiYWRfY2FzdC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRlZmluaXRpb24gb2YgdXNlX2ZhY2V0Jmx0OyZndDssIGFuZCByZXByZXNlbnRzIHNlbWFudGljcwpmcm9tIGFuIG9sZCBkcmFmdC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4sIHBhcmFncmFwaCA0LCBkZWxldGUgdGhlIHBhcmVudGhlc2l6ZWQKZXhwcmVzc2lvbiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD4ob3IsIGZhaWxpbmcgdGhhdCwgaW4gdGhlIGdsb2JhbCBsb2NhbGUpIDwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM4Ij48aDM+MzguJm5ic3A7RmFjZXQgZGVmaW5pdGlvbiBpbmNvbXBsZXRlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmdsb2JhbC50ZW1wbGF0ZXMiPiBbbGliLmxvY2FsZS5nbG9iYWwudGVtcGxhdGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmF0aGFuIE15ZXJzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPkl0IGhhcyBiZWVuIG5vdGljZWQgYnkgRXNhIFB1bGtraW5lbiB0aGF0IHRoZSBkZWZpbml0aW9uIG9mCiJmYWNldCIgaXMgaW5jb21wbGV0ZS4gSW4gcGFydGljdWxhciwgYSBjbGFzcyBkZXJpdmVkIGZyb20KYW5vdGhlciBmYWNldCwgYnV0IHdoaWNoIGRvZXMgbm90IGRlZmluZSBhIG1lbWJlciA8aT5pZDwvaT4sIGNhbm5vdApzYWZlbHkgc2VydmUgYXMgdGhlIGFyZ3VtZW50IDxpPkY8L2k+IHRvIHVzZV9mYWNldCZsdDtGJmd0Oyhsb2MpLApiZWNhdXNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZSB0aGF0IGEgcmVmZXJlbmNlIHRvIHRoZSBmYWNldCBpbnN0YW5jZQpzdG9yZWQgaW4gPGk+bG9jPC9pPiBpcyBzYWZlbHkgY29udmVydGlibGUgdG8gPGk+RjwvaT4uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgZGVmaW5pdGlvbiBvZiBzdGQ6OnVzZV9mYWNldCZsdDsmZ3Q7KCksIHJlcGxhY2UgdGhlIHRleHQgaW4gcGFyYWdyYXBoIDEgd2hpY2gKcmVhZHM6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkdldCBhIHJlZmVyZW5jZSB0byBhIGZhY2V0IG9mIGEgbG9jYWxlLiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVzOiA8dHQ+RmFjZXQ8L3R0PiBpcyBhIGZhY2V0IGNsYXNzIHdob3NlIGRlZmluaXRpb24KICBjb250YWlucyB0aGUgcHVibGljIHN0YXRpYyBtZW1iZXIgPHR0PmlkPC90dD4gYXMgZGVmaW5lZCBpbiAyMi4xLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmZhY2V0Ij4gW2xpYi5sb2NhbGUuZmFjZXRdPC9hPi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bCktvbmE6IHN0cmlrZSBhcyBvdmVyc3BlY2lmaWNhdGlvbiB0aGUgdGV4dCAiKG5vdCBpbmhlcml0cykiCmZyb20gdGhlIG9yaWdpbmFsIHJlc29sdXRpb24sIHdoaWNoIHJlYWQgIi4uLiB3aG9zZSBkZWZpbml0aW9uCmNvbnRhaW5zIChub3QgaW5oZXJpdHMpIHRoZSBwdWJsaWMgc3RhdGljIG1lbWJlcgo8dHQ+aWQ8L3R0Pi4uLiIKXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjM5Ij48aDM+MzkuJm5ic3A7aXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDsmZ3Q7OjpvcGVyYXRvcisrKGludCkgZGVmaW5pdGlvbiBnYXJibGVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNS4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKysiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKytdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+Rm9sbG93aW5nIHRoZSBkZWZpbml0aW9uIG9mIGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Jmd0Ozo6b3BlcmF0b3IrKyhpbnQpIGluIHBhcmFncmFwaAozLCB0aGUgc3RhbmRhcmQgY29udGFpbnMgdGhyZWUgbGluZXMgb2YgZ2FyYmFnZSB0ZXh0IGxlZnQgb3ZlciBmcm9tIGEgcHJldmlvdXMgZWRpdC4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5pc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgdG1wID0gKnRoaXM7CnNidWZfLSZndDtzYnVtcGMoKTsKcmV0dXJuKHRtcCk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuNS4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKysiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wKytdPC9hPiwgZGVsZXRlIHRoZSB0aHJlZSBsaW5lcyBvZiBjb2RlIGF0IHRoZQplbmQgb2YgcGFyYWdyYXBoIDMuIDwvcD4KPGhyPgo8YSBuYW1lPSI0MCI+PGgzPjQwLiZuYnNwO01lYW5pbmdsZXNzIG5vcm1hdGl2ZSBwYXJhZ3JhcGggaW4gZXhhbXBsZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldHMuZXhhbXBsZXMiPiBbbGliLmZhY2V0cy5leGFtcGxlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggMyBvZiB0aGUgbG9jYWxlIGV4YW1wbGVzIGlzIGEgZGVzY3JpcHRpb24gb2YgcGFydCBvZiBhbgppbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWUgdGhhdCBoYXMgbG9zdCBpdHMgcmVmZXJlbnQsIGFuZCBkb2Vzbid0IG1lYW4KYW55dGhpbmcuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5EZWxldGUgMjIuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXRzLmV4YW1wbGVzIj4gW2xpYi5mYWNldHMuZXhhbXBsZXNdPC9hPiBwYXJhZ3JhcGggMyB3aGljaCBiZWdpbnMgIlRoaXMKaW5pdGlhbGl6YXRpb24vaWRlbnRpZmljYXRpb24gc3lzdGVtIGRlcGVuZHMuLi4iLCBvciAoYXQgdGhlCmVkaXRvcidzIG9wdGlvbikgcmVwbGFjZSBpdCB3aXRoIGEgcGxhY2UtaG9sZGVyIHRvIGtlZXAgdGhlIHBhcmFncmFwaApudW1iZXJpbmcgdGhlIHNhbWUuIDwvcD4KPGhyPgo8YSBuYW1lPSI0MSI+PC9hPjxoMz48YSBuYW1lPSI0MSI+NDEuJm5ic3A7SW9zX2Jhc2UgbmVlZHMgY2xlYXIoKSwgZXhjZXB0aW9ucygpPC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIGRlc2NyaXB0aW9uIG9mIGlvc19iYXNlOjppd29yZCgpIGFuZCBwd29yZCgpIGluIDI3LjQuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MubWVtYmVycy5zdGF0aWMiPiBbbGliLmlvcy5tZW1iZXJzLnN0YXRpY108L2E+LCBzYXkgdGhhdCBpZiB0aGV5IGZhaWwsIHRoZXkgInNldCBiYWRiaXQsCndoaWNoIG1heSB0aHJvdyBhbiBleGNlcHRpb24iLiBIb3dldmVyLCBpb3NfYmFzZSBvZmZlcnMgbm8KaW50ZXJmYWNlIHRvIHNldCBvciB0byB0ZXN0IGJhZGJpdDsgdGhvc2UgaW50ZXJmYWNlcyBhcmUgZGVmaW5lZCBpbgpiYXNpY19pb3MmbHQ7Jmd0Oy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZGVzY3JpcHRpb24gaW4gMjcuNC4yLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLnN0b3JhZ2UiPiBbbGliLmlvcy5iYXNlLnN0b3JhZ2VdPC9hPiBpbgpwYXJhZ3JhcGggMiwgYW5kIGFsc28gaW4gcGFyYWdyYXBoIDQsIGFzIGZvbGxvd3MuIFJlcGxhY2U8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5JZiB0aGUgZnVuY3Rpb24gZmFpbHMgaXQgc2V0cyBiYWRiaXQsIHdoaWNoIG1heSB0aHJvdyBhbiBleGNlcHRpb24uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD53aXRoPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+SWYgdGhlIGZ1bmN0aW9uIGZhaWxzLCBhbmQgPHR0Pip0aGlzPC90dD4gaXMgYSBiYXNlIHN1Yi1vYmplY3Qgb2YKICBhIDx0dD5iYXNpY19pb3MmbHQ7Jmd0OzwvdHQ+IG9iamVjdCBvciBzdWItb2JqZWN0LCB0aGUgZWZmZWN0IGlzCiAgZXF1aXZhbGVudCB0byBjYWxsaW5nIDx0dD5iYXNpY19pb3MmbHQ7Jmd0Ozo6c2V0c3RhdGUoYmFkYml0KTwvdHQ+CiAgb24gdGhlIGRlcml2ZWQgb2JqZWN0ICh3aGljaCBtYXkgdGhyb3cgPHR0PmZhaWx1cmU8L3R0PikuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bS29uYTogTFdHIHJldmlld2VkIHdvcmRpbmc7IHNldHN0YXRlKGZhaWxiaXQpIGNoYW5nZWQgdG8Kc2V0c3RhdGUoYmFkYml0KS5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDIiPjxoMz40Mi4mbmJzcDtTdHJpbmcgY3RvcnMgc3BlY2lmeSB3cm9uZyBkZWZhdWx0IGFsbG9jYXRvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5UaGUgYmFzaWNfc3RyaW5nJmx0OyZndDsgY29weSBjb25zdHJ1Y3RvcjogPC9wPgoKPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcywgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSA9IEFsbG9jYXRvcigpKTsgPC9wcmU+Cgo8cD5zcGVjaWZpZXMgYW4gQWxsb2NhdG9yIGFyZ3VtZW50IGRlZmF1bHQgdmFsdWUgdGhhdCBpcwpjb3VudGVyLWludHVpdGl2ZS4gVGhlIG5hdHVyYWwgY2hvaWNlIGZvciBhIHRoZSBhbGxvY2F0b3IgdG8gY29weSBmcm9tCmlzIHN0ci5nZXRfYWxsb2NhdG9yKCkuIFRob3VnaCB0aGlzIGNhbm5vdCBiZSBleHByZXNzZWQgaW4KZGVmYXVsdC1hcmd1bWVudCBub3RhdGlvbiwgb3ZlcmxvYWRpbmcgc3VmZmljZXMuIDwvcD4KCjxwPkFsdGVybmF0aXZlbHksIHRoZSBvdGhlciBjb250YWluZXJzIGluIENsYXVzZSAyMyAoZGVxdWUsIGxpc3QsCnZlY3RvcikgZG8gbm90IGhhdmUgdGhpcyBmb3JtIG9mIGNvbnN0cnVjdG9yLCBzbyBpdCBpcyBpbmNvbnNpc3RlbnQsCmFuZCBhbiBldmlkZW50IHNvdXJjZSBvZiBjb25mdXNpb24sIGZvciBiYXNpY19zdHJpbmcmbHQ7Jmd0OyB0byBoYXZlCml0LCBzbyBpdCBtaWdodCBiZXR0ZXIgYmUgcmVtb3ZlZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiBJbiAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiwgcmVwbGFjZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGNvcHkKY29uc3RydWN0b3IgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyKTsKYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7IHN0ciwgc2l6ZV90eXBlIHBvcywgc2l6ZV90eXBlIG4gPSBucG9zLAogICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSA9IEFsbG9jYXRvcigpKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4sIHJlcGxhY2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24KYXMgYWJvdmUuIEFkZCB0byBwYXJhZ3JhcGggNSwgRWZmZWN0czo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5JbiB0aGUgZmlyc3QgZm9ybSwgdGhlIEFsbG9jYXRvciB2YWx1ZSB1c2VkIGlzIGNvcGllZCBmcm9tCiAgPHR0PnN0ci5nZXRfYWxsb2NhdG9yKCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhlIGNvbnN0cnVjdG9yIGlzIGFjdHVhbGx5IGJyb2tlbiwgcmF0aGVyIHRoYW4KanVzdCBhbiB1bmZvcnR1bmF0ZSBkZXNpZ24gY2hvaWNlLjwvcD4KCjxwPlRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3RoZXIgcG9zc2libGUgcmVzb2x1dGlvbnM6PC9wPgoKPHA+QS4gSW4gMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4sIHJlcGxhY2UgdGhlIGRlY2xhcmF0aW9uIG9mIHRoZSBjb3B5CmNvbnN0cnVjdG9yIGFzIGZvbGxvd3M6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcyk7CmJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIsIHNpemVfdHlwZSBwb3MsCiAgICAgICAgICAgICBzaXplX3R5cGUgbiwgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuY29ucyI+IFtsaWIuc3RyaW5nLmNvbnNdPC9hPiwgcmVwbGFjZSB0aGUgY29weSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbgphcyBhYm92ZS4gQWRkIHRvIHBhcmFncmFwaCA1LCBFZmZlY3RzOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5XaGVuIG5vIDx0dD5BbGxvY2F0b3I8L3R0PiBhcmd1bWVudCBpcyBwcm92aWRlZCwgdGhlIHN0cmluZyBpcyBjb25zdHJ1Y3RlZCB1c2luZyB0aGUKICB2YWx1ZSA8dHQ+c3RyLmdldF9hbGxvY2F0b3IoKTwvdHQ+LiA8L3A+CjwvYmxvY2txdW90ZT4KCjxwPkIuIEluIDIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+LCBhbmQgYWxzbyBpbiAyMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuY29ucyI+IFtsaWIuc3RyaW5nLmNvbnNdPC9hPiwgcmVwbGFjZQp0aGUgZGVjbGFyYXRpb24gb2YgdGhlIGNvcHkgY29uc3RydWN0b3IgYXMgZm9sbG93czogPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5iYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJmFtcDsgc3RyLCBzaXplX3R5cGUgcG9zID0gMCwKICAgICAgICAgICAgIHNpemVfdHlwZSBuID0gbnBvcyk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiByZWZsZWN0cyB0aGUgb3JpZ2luYWwgaW50ZW50IG9mIHRoZSBMV0cuIEl0CndhcyBhbHNvIG5vdGVkIGJ5IFBldGUgQmVja2VyIHRoYXQgdGhpcyBmaXggIndpbGwgY2F1c2UKYSBzbWFsbCBhbW91bnQgb2YgZXhpc3RpbmcgY29kZSB0byBub3cgd29yayBjb3JyZWN0bHkuIjwvcD4KCjxwPjxpPlsKS29uYTogaXNzdWUgZWRpdGluZyBzbmFmdSBmaXhlZCAtIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG5vdyBjb3JyZWN0bHkKcmVmbGVjdHMgdGhlIExXRyBjb25zZW5zdXMuCl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjQ0Ij48aDM+NDQuJm5ic3A7SW9zdHJlYW1zIHVzZSBvcGVyYXRvcj09IG9uIGludF90eXBlIHZhbHVlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pbnB1dC5vdXRwdXQiPiBbbGliLmlucHV0Lm91dHB1dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IEF1ZyAxOTk4PC9wPgo8cD5NYW55IG9mIHRoZSBzcGVjaWZpY2F0aW9ucyBmb3IgaW9zdHJlYW1zIHNwZWNpZnkgdGhhdCBjaGFyYWN0ZXIKdmFsdWVzIG9yIHRoZWlyIGludF90eXBlIGVxdWl2YWxlbnRzIGFyZSBjb21wYXJlZCB1c2luZyBvcGVyYXRvcnMgPT0Kb3IgIT0sIHRob3VnaCBpbiBvdGhlciBwbGFjZXMgdHJhaXRzOjplcSgpIG9yIHRyYWl0czo6ZXFfaW50X3R5cGUgaXMKc3BlY2lmaWVkIHRvIGJlIHVzZWQgdGhyb3VnaG91dC4gVGhpcyBpcyBhbiBpbmNvbnNpc3RlbmN5OyB3ZSBzaG91bGQKY2hhbmdlIHVzZXMgb2YgPT0gYW5kICE9IHRvIHVzZSB0aGUgdHJhaXRzIG1lbWJlcnMgaW5zdGVhZC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD48aT5bUHJlLUtvbmE6IERpZXRtYXIgc3VwcGxpZWQgd29yZGluZ108L2k+PC9wPgoKPHA+TGlzdCBvZiBjaGFuZ2VzIHRvIGNsYXVzZSAyNzo8L3A+CjxvbD4KPGxpPgogICBJbiBsaWIuYmFzaWMuaW9zLm1lbWJlcnMgcGFyYWdyYXBoIDEzIChwb3N0Y29uZGl0aW9uIGNsYXVzZSBmb3IKICAgJ2ZpbGwoY1QpJykgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBmaWxsY2ggPT0gZmlsbCgpCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxKGZpbGxjaCwgZmlsbCgpKQo8L2Jsb2NrcXVvdGU+CgoKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCBwYXJhZ3JhcGggNyAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgICdnZXQoY1Qsc3RyZWFtc2l6ZSxjVCknKSwgdGhpcmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPgogICAgIGMgPT0gZGVsaW0gZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShjLCBkZWxpbSkgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwogIDwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDEyIChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2dldChiYXNpY19zdHJlYW1idWYmbHQ7Y1QsVHImZ3Q7JmFtcDssY1QpJyksIHRoaXJkIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBjID09IGRlbGltIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYywgZGVsaW0pIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMKPC9ibG9ja3F1b3RlPgoKPC9saT4KPGxpPgogICBJbiBsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCBwYXJhZ3JhcGggMTcgKGVmZmVjdHMgY2xhdXNlIGZvcgogICAnZ2V0bGluZShjVCxzdHJlYW1zaXplLGNUKScpLCBzZWNvbmQgYnVsbGV0LCBjaGFuZ2UKCjxibG9ja3F1b3RlPgogICAgIGMgPT0gZGVsaW0gZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShjLCBkZWxpbSkgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYwogIDwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQgcGFyYWdyYXBoIDI0IChlZmZlY3RzIGNsYXVzZSBmb3IKICAgJ2lnbm9yZShpbnQsaW50X3R5cGUpJyksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYyA9PSBkZWxpbSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxX2ludF90eXBlKGMsIGRlbGltKSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0CiAgICAgY2hhcmFjdGVyIGMKPC9ibG9ja3F1b3RlPgogIAo8L2xpPgo8bGk+CiAgIEluIGxpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIHBhcmFncmFwaCAyNSAobm90ZXMgY2xhdXNlIGZvcgogICAnaWdub3JlKGludCxpbnRfdHlwZSknKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBUaGUgbGFzdCBjb25kaXRpb24gd2lsbCBuZXZlciBvY2N1ciBpZiBkZWxpbSA9PSB0cmFpdHM6OmVvZigpCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICBUaGUgbGFzdCBjb25kaXRpb24gd2lsbCBuZXZlciBvY2N1ciBpZgogICAgIHRyYWl0czo6ZXFfaW50X3R5cGUoZGVsaW0sIHRyYWl0czo6ZW9mKCkpLgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5pc3RyZWFtLnNlbnRyeSBwYXJhZ3JhcGggNiAoZXhhbXBsZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlCiAgIHNlbnRyeSBjb25zdHJ1Y3RvcikgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICB3aGlsZSAoKGMgPSBpcy5yZGJ1ZigpLSZndDtzbmV4dGMoKSkgIT0gdHJhaXRzOjplb2YoKSkgewo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgd2hpbGUgKCF0cmFpdHM6OmVxX2ludF90eXBlKGMgPSBpcy5yZGJ1ZigpLSZndDtzbmV4dGMoKSwgdHJhaXRzOjplb2YoKSkpIHsKPC9ibG9ja3F1b3RlPgoKPC9saT4KPC9vbD4KCjxwPkxpc3Qgb2YgY2hhbmdlcyB0byBDaGFwdGVyIDIxOjwvcD4KCjxvbD4KPGxpPgogICBJbiBsaWIuc3RyaW5nOjpmaW5kIHBhcmFncmFwaCAxIChlZmZlY3RzIGNsYXVzZSBmb3IgZmluZCgpKSwKICAgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShhdCh4cG9zK0kpLCBzdHIuYXQoSSkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLnN0cmluZzo6cmZpbmQgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvciByZmluZCgpKSwKICAgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShhdCh4cG9zK0kpLCBzdHIuYXQoSSkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLnN0cmluZzo6ZmluZC5maXJzdC5vZiBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgIGZpbmRfZmlyc3Rfb2YoKSksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8L2xpPgo8bGk+CiAgIEluIGxpYi5zdHJpbmc6OmZpbmQubGFzdC5vZiBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgIGZpbmRfbGFzdF9vZigpKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShhdCh4cG9zK0kpLCBzdHIuYXQoSSkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KCjwvbGk+CjxsaT4KICAgSW4gbGliLnN0cmluZzo6ZmluZC5maXJzdC5ub3Qub2YgcGFyYWdyYXBoIDEgKGVmZmVjdHMgY2xhdXNlIGZvcgogICBmaW5kX2ZpcnN0X25vdF9vZigpKSwgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBhdCh4cG9zK0kpID09IHN0ci5hdChJKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CgogICB0bwoKPGJsb2NrcXVvdGU+CiAgICAgdHJhaXRzOjplcShhdCh4cG9zK0kpLCBzdHIuYXQoSSkpIGZvciBhbGwgZWxlbWVudHMgLi4uCjwvYmxvY2txdW90ZT4KPC9saT4KCjxsaT4KICAgSW4gbGliLnN0cmluZzo6ZmluZC5sYXN0Lm5vdC5vZiBwYXJhZ3JhcGggMSAoZWZmZWN0cyBjbGF1c2UgZm9yCiAgIGZpbmRfbGFzdF9ub3Rfb2YoKSksIHNlY29uZCBidWxsZXQsIGNoYW5nZQoKPGJsb2NrcXVvdGU+CiAgICAgYXQoeHBvcytJKSA9PSBzdHIuYXQoSSkgZm9yIGFsbCBlbGVtZW50cyAuLi4KPC9ibG9ja3F1b3RlPgoKICAgdG8KCjxibG9ja3F1b3RlPgogICAgIHRyYWl0czo6ZXEoYXQoeHBvcytJKSwgc3RyLmF0KEkpKSBmb3IgYWxsIGVsZW1lbnRzIC4uLgo8L2Jsb2NrcXVvdGU+CjwvbGk+Cgo8bGk+CiAgIEluIGxpYi5zdHJpbmcuaW9zIHBhcmFncmFwaCA1IChlZmZlY3RzIGNsYXVzZSBmb3IgZ2V0bGluZSgpKSwKICAgc2Vjb25kIGJ1bGxldCwgY2hhbmdlCgo8YmxvY2txdW90ZT4KICAgICBjID09IGRlbGltIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMgCjwvYmxvY2txdW90ZT4KCiAgIHRvCgo8YmxvY2txdW90ZT4KICAgICB0cmFpdHM6OmVxKGMsIGRlbGltKSBmb3IgdGhlIG5leHQgYXZhaWxhYmxlIGlucHV0IGNoYXJhY3RlciBjIAo8L2Jsb2NrcXVvdGU+CjwvbGk+Cgo8L29sPgoKPHA+Tm90ZXM6PC9wPgo8dWw+CjxsaT4KICBGaXhpbmcgdGhpcyBpc3N1ZSBoaWdobGlnaHRzIGFub3RoZXIgc2xvcHB5bmVzcyBpbgogIGxpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIHBhcmFncmFwaCAyNDogdGhpcyBjbGF1c2UgbWVudGlvbnMgYSAiY2hhcmFjdGVyIgogIHdoaWNoIGlzIHRoZW4gY29tcGFyZWQgdG8gYW4gJ2ludF90eXBlJyAoc2VlIGl0ZW0gNS4gaW4gdGhlIGxpc3QKICBiZWxvdykuIEl0IGlzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMgcmVxdWlyZXMgZXhwbGljaXQgd29yZHMgYW5kCiAgaWYgc28gd2hhdCB0aGVzZSB3b3JkcyBhcmUgc3VwcG9zZWQgdG8gYmUuIEEgc2ltaWxhciBpc3N1ZSBleGlzdHMsCiAgQlRXLCBmb3Igb3BlcmF0b3IqKCkgb2YgaXN0cmVhbWJ1Zl9pdGVyYXRvciB3aGljaCByZXR1cm5zIHRoZSByZXN1bHQKICBvZiBzZ2V0YygpIGFzIGEgY2hhcmFjdGVyIHR5cGUgKHNlZSBsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6b3AqCiAgcGFyYWdyYXBoIDEpLCBhbmQgZm9yIG9wZXJhdG9yKysoKSBvZiBpc3RyZWFtYnVmX2l0ZXJhdG9yIHdoaWNoCiAgcGFzc2VzIHRoZSByZXN1bHQgb2Ygc2J1bXBjKCkgdG8gYSBjb25zdHJ1Y3RvciB0YWtpbmcgYSBjaGFyX3R5cGUKICAoc2VlIGxpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjpvcGVyYXRvcisrIHBhcmFncmFwaCAzKS4gU2ltaWxhcmlseSwgdGhlCiAgYXNzaWdubWVudCBvcGVyYXRvciBvc3RyZWFtYnVmX2l0ZXJhdG9yIHBhc3NlcyBhIGNoYXJfdHlwZSB0byBhIGZ1bmN0aW9uCiAgdGFraW5nIGFuIGludF90eXBlIChzZWUgbGliLm9zdHJlYW1idWYuaXRlci5vcHMgcGFyYWdyYXBoIDEpLgo8L2xpPgo8bGk+CiAgSXQgaXMgaW5jb25zaXN0ZW50IHRvIHVzZSBjb21wYXJpc29ucyB1c2luZyB0aGUgdHJhaXRzIGZ1bmN0aW9ucyBpbgogIENoYXB0ZXIgMjcgd2hpbGUgbm90IHVzaW5nIHRoZW0gaW4gQ2hhcHRlciAyMSwgZXNwZWNpYWxseSBhcyBzb21lCiAgb2YgdGhlIGluY29uc2lzdGVudCB1c2VzIGFjdHVhbGx5IGludm9sdmUgc3RyZWFtcyAoZWcuIGdldGxpbmUoKSBvbgogIHN0cmVhbXMpLiBUbyBhdm9pZCBsZWF2aW5nIHRoaXMgaXNzdWUgb3BlbiBzdGlsbCBsb25nZXIgZHVlIHRvIHRoaXMKICBpbmNvbnNpc3RlbmN5IChpdCBpcyBvcGVuIHNpbmNlIDE5OTgpLCBhIGxpc3Qgb2YgY2hhbmdlcyB0byBDaGFwdGVyCiAgMjEgaXMgYmVsb3cuCjwvbGk+CjxsaT4KICBJbiBDaGFwdGVyIDI0IHRoZXJlIGFyZSBzZXZlcmFsIHBsYWNlcyB3aXRoIHN0YXRlbWVudHMgbGlrZSAidGhlIGVuZAogIG9mIHN0cmVhbSBpcyByZWFjaGVkIChzdHJlYW1idWZfdHlwZTo6c2dldGMoKSByZXR1cm5zIHRyYWl0czo6ZW9mKCkpIgogIChsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvciBwYXJhZ3JhcGggMSwgbGliLm9zdHJlYW1idWYuaXRlci5vcHMKICBwYXJhZ3JhcGggNSkuIEl0IGlzIHVuY2xlYXIgd2hldGhlciB0aGVzZSBzaG91bGQgYmUgY2xhcmlmaWVkIHRvIHVzZQogIHRyYWl0czo6ZXFfaW50X3R5cGUoKSBmb3IgZGV0ZWN0aW5nIHRyYWl0czo6ZW9mKCkuCjwvbGk+CjwvdWw+Cgo8aHI+CjxhIG5hbWU9IjQ2Ij48aDM+NDYuJm5ic3A7TWlub3IgQW5uZXggRCBlcnJvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtELjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0ci5zdHJzdHJlYW1zIj4gW2RlcHIuc3RyLnN0cnN0cmVhbXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCcmVuZGFuIEtlaG9lJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOyAxIEp1biAxOTk4PC9wPgo8cD5TZWUgbGliLTY1MjIgYW5kIGVkaXQtODE0LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgRC43LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1ZiI+IFtkZXByLnN0cnN0cmVhbWJ1Zl08L2E+IChzaW5jZSBzdHJlYW1idWYgaXMgYSB0eXBlZGVmIG9mCmJhc2ljX3N0cmVhbWJ1ZiZsdDtjaGFyJmd0OykgZnJvbTo8L3A+Cgo8cHJlPiAgICAgICAgIHZpcnR1YWwgc3RyZWFtYnVmJmx0O2NoYXImZ3Q7KiBzZXRidWYoY2hhciogcywgc3RyZWFtc2l6ZSBuKTs8L3ByZT4KCjxwPnRvOjwvcD4KCjxwcmU+ICAgICAgICAgdmlydHVhbCBzdHJlYW1idWYqIHNldGJ1ZihjaGFyKiBzLCBzdHJlYW1zaXplIG4pOzwvcHJlPgoKPHA+SW4gRC43LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbSI+IFtkZXByLnN0cnN0cmVhbV08L2E+IGluc2VydCB0aGUgc2VtaWNvbG9uIG5vdyBtaXNzaW5nIGFmdGVyCmludF90eXBlOjwvcD4KCjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIHN0cnN0cmVhbQogICAgICAgICA6IHB1YmxpYyBiYXNpY19pb3N0cmVhbSZsdDtjaGFyJmd0OyB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIC8vIFR5cGVzCiAgICAgICAgIHR5cGVkZWYgY2hhciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhcl90eXBlOwogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7OjppbnRfdHlwZSBpbnRfdHlwZQogICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7Ojpwb3NfdHlwZSBwb3NfdHlwZTs8L3ByZT4KPGhyPgo8YSBuYW1lPSI0NyI+PGgzPjQ3LiZuYnNwO0ltYnVlKCkgYW5kIGdldGxvYygpIFJldHVybnMgY2xhdXNlcyBzd2FwcGVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLmxvY2FsZXMiPiBbbGliLmlvcy5iYXNlLmxvY2FsZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgSnVuIDE5OTg8L3A+CjxwPlNlY3Rpb24gMjcuNC4yLjMgc3BlY2lmaWVzIGhvdyBpbWJ1ZSgpIGFuZCBnZXRsb2MoKSB3b3JrLiBUaGF0CnNlY3Rpb24gaGFzIHR3byBSRVRVUk5TIGNsYXVzZXMsIGFuZCB0aGV5IG1ha2Ugbm8gc2Vuc2UgYXMKc3RhdGVkLiBUaGV5IG1ha2UgcGVyZmVjdCBzZW5zZSwgdGhvdWdoLCBpZiB5b3Ugc3dhcCB0aGVtLiBBbSBJCmNvcnJlY3QgaW4gdGhpbmtpbmcgdGhhdCBwYXJhZ3JhcGhzIDIgYW5kIDQganVzdCBnb3QgbWl4ZWQgdXAgYnkKYWNjaWRlbnQ/PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjQuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZS5sb2NhbGVzIj4gW2xpYi5pb3MuYmFzZS5sb2NhbGVzXTwvYT4gc3dhcCBwYXJhZ3JhcGhzIDIgYW5kIDQuPC9wPgo8aHI+CjxhIG5hbWU9IjQ4Ij48aDM+NDguJm5ic3A7VXNlIG9mIG5vbi1leGlzdGVudCBleGNlcHRpb24gY29uc3RydWN0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3M6OmZhaWx1cmUiPiBbbGliLmlvczo6ZmFpbHVyZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMSBKdW4gMTk5ODwvcD4KPHA+MjcuNC4yLjEuMSwgcGFyYWdyYXBoIDIsIHNheXMgdGhhdCBjbGFzcyBmYWlsdXJlIGluaXRpYWxpemVzIHRoZQpiYXNlIGNsYXNzLCBleGNlcHRpb24sIHdpdGggZXhjZXB0aW9uKG1zZykuIENsYXNzIGV4Y2VwdGlvbiAoc2VlCjE4LjYuMSkgaGFzIG5vIHN1Y2ggY29uc3RydWN0b3IuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgMjcuNC4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zOjpmYWlsdXJlIj4gW2xpYi5pb3M6OmZhaWx1cmVdPC9hPiwgcGFyYWdyYXBoIDIsIHdpdGg8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FRkZFQ1RTOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyA8dHQ+ZmFpbHVyZTwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjQ5Ij48aDM+NDkuJm5ic3A7VW5kZXJzcGVjaWZpY2F0aW9uIG9mIGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLm1lbWJlcnMuc3RhdGljIj4gW2xpYi5pb3MubWVtYmVycy5zdGF0aWNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgSnVuIDE5OTg8L3A+CjxwPlR3byBwcm9ibGVtczwvcD4KCjxwPigxKSAyNy40LjIuNCBkb2Vzbid0IHNheSB3aGF0IGlvc19iYXNlOjpzeW5jX3dpdGhfc3RkaW8oZikKcmV0dXJucy4gRG9lcyBpdCByZXR1cm4gZiwgb3IgZG9lcyBpdCByZXR1cm4gdGhlIHByZXZpb3VzCnN5bmNocm9uaXphdGlvbiBzdGF0ZT8gTXkgZ3Vlc3MgaXMgdGhlIGxhdHRlciwgYnV0IHRoZSBzdGFuZGFyZApkb2Vzbid0IHNheSBzby48L3A+Cgo8cD4oMikgMjcuNC4yLjQgZG9lc24ndCBzYXkgd2hhdCBpdCBtZWFucyBmb3Igc3RyZWFtcyB0byBiZQpzeW5jaHJvbml6ZWQgd2l0aCBzdGRpby4gIEFnYWluLCBvZiBjb3Vyc2UsIEkgY2FuIG1ha2Ugc29tZQpndWVzc2VzLiAoQW5kIEknbSB1bmhhcHB5IGFib3V0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UKZ3Vlc3NlcywgYnV0IHRoYXQncyBhbm90aGVyIG1hdHRlci4pPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZm9sbG93aW5nIHNlbnRlbmNlIGluIDI3LjQuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MubWVtYmVycy5zdGF0aWMiPiBbbGliLmlvcy5tZW1iZXJzLnN0YXRpY108L2E+CnJldHVybnMgY2xhdXNlIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnRydWU8L3R0PiBpZiB0aGUgc3RhbmRhcmQgaW9zdHJlYW0gb2JqZWN0cyAoMjcuMykgYXJlCiAgc3luY2hyb25pemVkIGFuZCBvdGhlcndpc2UgcmV0dXJucyA8dHQ+ZmFsc2U8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjx0dD50cnVlPC90dD4gaWYgdGhlIHByZXZpb3VzIHN0YXRlIG9mIHRoZSBzdGFuZGFyZCBpb3N0cmVhbQogIG9iamVjdHMgKDI3LjMpIHdhcyBzeW5jaHJvbml6ZWQgYW5kIG90aGVyd2lzZSByZXR1cm5zCiAgPHR0PmZhbHNlPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyBpbW1lZGlhdGVseSBhZnRlciAyNy40LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLm1lbWJlcnMuc3RhdGljIj4gW2xpYi5pb3MubWVtYmVycy5zdGF0aWNdPC9hPiwKcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPldoZW4gYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3Qgc3RyIGlzIDxpPnN5bmNocm9uaXplZDwvaT4gd2l0aCBhCnN0YW5kYXJkIHN0ZGlvIHN0cmVhbSBmLCB0aGUgZWZmZWN0IG9mIGluc2VydGluZyBhIGNoYXJhY3RlciBjIGJ5PC9wPgo8cHJlPiAgZnB1dGMoZiwgYyk7CjwvcHJlPgoKPHA+aXMgdGhlIHNhbWUgYXMgdGhlIGVmZmVjdCBvZjwvcD4KPHByZT4gIHN0ci5yZGJ1ZigpLSZndDtzcHV0YyhjKTsKPC9wcmU+Cgo8cD5mb3IgYW55IHNlcXVlbmNlIG9mIGNoYXJhY3RlcnM7IHRoZSBlZmZlY3Qgb2YgZXh0cmFjdGluZyBhCmNoYXJhY3RlciBjIGJ5PC9wPgo8cHJlPiAgYyA9IGZnZXRjKGYpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y6PC9wPgo8cHJlPiAgYyA9IHN0ci5yZGJ1ZigpLSZndDtzYnVtcGMoYyk7CjwvcHJlPgoKPHA+Zm9yIGFueSBzZXF1ZW5jZXMgb2YgY2hhcmFjdGVyczsgYW5kIHRoZSBlZmZlY3Qgb2YgcHVzaGluZwpiYWNrIGEgY2hhcmFjdGVyIGMgYnk8L3A+CjxwcmU+CiAgdW5nZXRjKGMsIGYpOwo8L3ByZT4KCjxwPmlzIHRoZSBzYW1lIGFzIHRoZSBlZmZlY3Qgb2Y8L3A+CjxwcmU+ICBzdHIucmRidWYoKS0mZ3Q7c3B1dGJhY2tjKGMpOwo8L3ByZT4KCjxwPmZvciBhbnkgc2VxdWVuY2Ugb2YgY2hhcmFjdGVycy4gIFs8aT5Gb290bm90ZTwvaT46IFRoaXMgaW1wbGllcwp0aGF0IG9wZXJhdGlvbnMgb24gYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5CndpdGggb3BlcmF0aW9ucyBvbiB0aGUgY29ycmVzcG9uZGluZyBzdGRpbyBzdHJlYW0uICBJbiBwcmFjdGljYWwKdGVybXMsIHN5bmNocm9uaXphdGlvbiB1c3VhbGx5IG1lYW5zIHRoYXQgYSBzdGFuZGFyZCBpb3N0cmVhbSBvYmplY3QKYW5kIGEgc3RhbmRhcmQgc3RkaW8gb2JqZWN0IHNoYXJlIGEgYnVmZmVyLiA8aT4tLUVuZCBGb290bm90ZTwvaT5dPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IFBKUCBhbmQgTWF0dCBjb250cmlidXRlZCB0aGUgZGVmaW5pdGlvbgpvZiAic3luY2hyb25pemF0aW9uIl08L2k+PC9wPgoKPHA+PGk+W3Bvc3QtQ29wZW5oYWdlbjogcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgcmV2aXNlZCBzbGlnaHRseToKdGV4dCB3YXMgYWRkZWQgaW4gdGhlIG5vbi1ub3JtYXRpdmUgZm9vdG5vdGUgdG8gc2F5IHRoYXQgb3BlcmF0aW9ucwpvbiB0aGUgdHdvIHN0cmVhbXMgY2FuIGJlIG1peGVkIGFyYml0cmFyaWx5Ll08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjUwIj48aDM+NTAuJm5ic3A7Q29weSBjb25zdHJ1Y3RvciBhbmQgYXNzaWdubWVudCBvcGVyYXRvciBvZiBpb3NfYmFzZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UiPiBbbGliLmlvcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1biAxOTk4PC9wPgo8cD5BcyB3cml0dGVuLCBpb3NfYmFzZSBoYXMgYSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBhbiBhc3NpZ25tZW50Cm9wZXJhdG9yLiAoTm90aGluZyBpbiB0aGUgc3RhbmRhcmQgc2F5cyBpdCBkb2Vzbid0IGhhdmUgb25lLCBhbmQgYWxsCmNsYXNzZXMgaGF2ZSBjb3B5IGNvbnN0cnVjdG9ycyBhbmQgYXNzaWdubWVudCBvcGVyYXRvcnMgdW5sZXNzIHlvdQp0YWtlIHNwZWNpZmljIHN0ZXBzIHRvIGF2b2lkIHRoZW0uKSBIb3dldmVyLCBub3RoaW5nIGluIDI3LjQuMiBzYXlzCndoYXQgdGhlIGNvcHkgY29uc3RydWN0b3IgYW5kIGFzc2lnbm1lbnQgb3BlcmF0b3IgZG8uIDwvcD4KCjxwPk15IGd1ZXNzIGlzIHRoYXQgdGhpcyB3YXMgYW4gb3ZlcnNpZ2h0LCB0aGF0IGlvc19iYXNlIGlzLCBsaWtlCmJhc2ljX2lvcywgbm90IHN1cHBvc2VkIHRvIGhhdmUgYSBjb3B5IGNvbnN0cnVjdG9yIG9yIGFuIGFzc2lnbm1lbnQKb3BlcmF0b3IuPC9wPgoKPHA+CkplcnJ5IFNjaHdhcnogY29tbWVudHM6IFllcywgaXRzIGFuIG92ZXJzaWdodCwgYnV0IGluIHRoZSBvcHBvc2l0ZQpzZW5zZSB0byB3aGF0IHlvdSdyZSBzdWdnZXN0aW5nLiBBdCBvbmUgcG9pbnQgdGhlcmUgd2FzIGEgZGVmaW5pdGUKaW50ZW50aW9uIHRoYXQgeW91IGNvdWxkIGNvcHkgaW9zX2Jhc2UuIEl0J3MgYW4gZWFzeSB3YXkgdG8gc2F2ZSB0aGUKZW50aXJlIHN0YXRlIG9mIGEgc3RyZWFtIGZvciBmdXR1cmUgdXNlLiBBcyB5b3Ugbm90ZSwgdG8gY2Fycnkgb3V0CnRoYXQgaW50ZW50aW9uIHdvdWxkIGhhdmUgcmVxdWlyZWQgYSBleHBsaWNpdCBkZXNjcmlwdGlvbiBvZiB0aGUKc2VtYW50aWNzIChlLmcuIHdoYXQgaGFwcGVucyB0byB0aGUgaWFycmF5IGFuZCBwYXJyYXkgc3R1ZmYpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiwgY2xhc3MgaW9zX2Jhc2UsIHNwZWNpZnkgdGhlIGNvcHkKY29uc3RydWN0b3IgYW5kIG9wZXJhdG9yPSBtZW1iZXJzIGFzIGJlaW5nIHByaXZhdGUuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBiZWxpZXZlcyB0aGUgZGlmZmljdWx0eSBvZiBzcGVjaWZ5aW5nIGNvcnJlY3Qgc2VtYW50aWNzCm91dHdlaWdocyBhbnkgYmVuZWZpdCBvZiBhbGxvd2luZyBpb3NfYmFzZSBvYmplY3RzIHRvIGJlIGNvcHlhYmxlLjwvcD4KPGhyPgo8YSBuYW1lPSI1MSI+PGgzPjUxLiZuYnNwO1JlcXVpcmVtZW50IHRvIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBtaXNzaW5nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZpZCBWYW5kZXZvb3JkZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdW4gMTk5ODwvcD4KPHA+VGhlIHN0ZDo6c29ydCBhbGdvcml0aG0gY2FuIGluIGdlbmVyYWwgb25seSBzb3J0IGEgZ2l2ZW4gc2VxdWVuY2UKYnkgbW92aW5nIGFyb3VuZCB2YWx1ZXMuIFRoZSBsaXN0Jmx0OyZndDs6OnNvcnQoKSBtZW1iZXIgb24gdGhlIG90aGVyCmhhbmQgY291bGQgbW92ZSBhcm91bmQgdmFsdWVzIG9yIGp1c3QgdXBkYXRlIGludGVybmFsIHBvaW50ZXJzLiBFaXRoZXIKbWV0aG9kIGNhbiBsZWF2ZSBpdGVyYXRvcnMgaW50byB0aGUgbGlzdCZsdDsmZ3Q7IGRlcmVmZXJlbmNhYmxlLCBidXQKdGhleSB3b3VsZCBwb2ludCB0byBkaWZmZXJlbnQgdGhpbmdzLiA8L3A+Cgo8cD5Eb2VzIHRoZSBGRElTIG1hbmRhdGUgYW55d2hlcmUgd2hpY2ggbWV0aG9kIHNob3VsZCBiZSB1c2VkIGZvcgpsaXN0Jmx0OyZndDs6OnNvcnQoKT88L3A+Cgo8cD5NYXR0IEF1c3Rlcm4gY29tbWVudHM6PC9wPgoKPHA+SSB0aGluayB5b3UndmUgZm91bmQgYW4gb21pc3Npb24gaW4gdGhlIHN0YW5kYXJkLiA8L3A+Cgo8cD5UaGUgbGlicmFyeSB3b3JraW5nIGdyb3VwIGRpc2N1c3NlZCB0aGlzIHBvaW50LCBhbmQgdGhlcmUgd2FzCnN1cHBvc2VkIHRvIGJlIGEgZ2VuZXJhbCByZXF1aXJlbWVudCBzYXlpbmcgdGhhdCBsaXN0LCBzZXQsIG1hcCwKbXVsdGlzZXQsIGFuZCBtdWx0aW1hcCBtYXkgbm90IGludmFsaWRhdGUgaXRlcmF0b3JzLCBvciBjaGFuZ2UgdGhlCnZhbHVlcyB0aGF0IGl0ZXJhdG9ycyBwb2ludCB0bywgZXhjZXB0IHdoZW4gYW4gb3BlcmF0aW9uIGRvZXMgaXQKZXhwbGljaXRseS4gU28sIGZvciBleGFtcGxlLCBpbnNlcnQoKSBkb2Vzbid0IGludmFsaWRhdGUgYW55IGl0ZXJhdG9ycwphbmQgZXJhc2UoKSBhbmQgcmVtb3ZlKCkgb25seSBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBwb2ludGluZyB0byB0aGUKZWxlbWVudHMgdGhhdCBhcmUgYmVpbmcgZXJhc2VkLiA8L3A+Cgo8cD5JIGxvb2tlZCBmb3IgdGhhdCBnZW5lcmFsIHJlcXVpcmVtZW50IGluIHRoZSBGRElTLCBhbmQsIHdoaWxlIEkKZm91bmQgYSBsaW1pdGVkIGZvcm0gb2YgaXQgZm9yIHRoZSBzb3J0ZWQgYXNzb2NpYXRpdmUgY29udGFpbmVycywgSQpkaWRuJ3QgZmluZCBpdCBmb3IgbGlzdC4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IGdvdCBvbWl0dGVkLiA8L3A+Cgo8cD5UaGUgaW50ZW50aW9uLCB0aG91Z2gsIGlzIHRoYXQgbGlzdCZsdDsmZ3Q7Ojpzb3J0IGRvZXMgbm90CmludmFsaWRhdGUgYW55IGl0ZXJhdG9ycyBhbmQgZG9lcyBub3QgY2hhbmdlIHRoZSB2YWx1ZXMgdGhhdCBhbnkKaXRlcmF0b3IgcG9pbnRzIHRvLiBUaGVyZSB3b3VsZCBiZSBubyByZWFzb24gdG8gaGF2ZSB0aGUgbWVtYmVyCmZ1bmN0aW9uIG90aGVyd2lzZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgbmV3IHBhcmFncmFwaCBhdCB0aGUgZW5kIG9mIDIzLjE6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgKGVpdGhlciBleHBsaWNpdGx5IG9yIGJ5IGRlZmluaW5nIGEgZnVuY3Rpb24gaW4gdGVybXMgb2YKICBvdGhlciBmdW5jdGlvbnMpLCBpbnZva2luZyBhIGNvbnRhaW5lciBtZW1iZXIgZnVuY3Rpb24gb3IgcGFzc2luZyBhIGNvbnRhaW5lciBhcyBhbgogIGFyZ3VtZW50IHRvIGEgbGlicmFyeSBmdW5jdGlvbiBzaGFsbCBub3QgaW52YWxpZGF0ZSBpdGVyYXRvcnMgdG8sIG9yIGNoYW5nZSB0aGUgdmFsdWVzIG9mLAogIG9iamVjdHMgd2l0aGluIHRoYXQgY29udGFpbmVyLiA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgd2FzIFVTIGlzc3VlIENEMi0yMy0wMTE7IGl0IHdhcyBhY2NlcHRlZCBpbiBMb25kb24gYnV0IHRoZQpjaGFuZ2Ugd2FzIG5vdCBtYWRlIGR1ZSB0byBhbiBlZGl0aW5nIG92ZXJzaWdodC4gVGhlIHdvcmRpbmcgaW4gdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gYmVsb3cgaXMgc29tZXdoYXQgdXBkYXRlZCBmcm9tIENEMi0yMy0wMTEsCnBhcnRpY3VsYXJseSB0aGUgYWRkaXRpb24gb2YgdGhlIHBocmFzZSAib3IgY2hhbmdlIHRoZSB2YWx1ZXMKb2YiPC9wPgo8aHI+CjxhIG5hbWU9IjUyIj48aDM+NTIuJm5ic3A7U21hbGwgSS9PIHByb2JsZW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3Mub3BlcmF0aW9ucyI+IFtsaWIuZnBvcy5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1biAxOTk4PC9wPgo8cD5GaXJzdCwgMjcuNC40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5jb25zIj4gW2xpYi5iYXNpYy5pb3MuY29uc108L2E+LCB0YWJsZSA4OS4gVGhpcyBpcyBwcmV0dHkgb2J2aW91czoKaXQgc2hvdWxkIGJlIHRpdGxlZCAiYmFzaWNfaW9zJmx0OyZndDsoKSBlZmZlY3RzIiwgbm90CiJpb3NfYmFzZSgpIGVmZmVjdHMiLiA8L3A+Cgo8cD5bVGhlIHNlY29uZCBpdGVtIGlzIGEgZHVwbGljYXRlOyBzZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNiI+NjwvYT4gZm9yCnJlc29sdXRpb24uXTwvcD4KCjxwPlNlY29uZCwgMjcuNC4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3Mub3BlcmF0aW9ucyI+IFtsaWIuZnBvcy5vcGVyYXRpb25zXTwvYT4gdGFibGUgODggLiBUaGVyZSBhcmUgYSBjb3VwbGUKZGlmZmVyZW50IHRoaW5ncyB3cm9uZyB3aXRoIGl0LCBzb21lIG9mIHdoaWNoIEkndmUgYWxyZWFkeSBkaXNjdXNzZWQKd2l0aCBKZXJyeSwgYnV0IHRoZSBtb3N0IG9idmlvdXMgbWVjaGFuaWNhbCBzb3J0IG9mIGVycm9yIGlzIHRoYXQgaXQKdXNlcyBleHByZXNzaW9ucyBsaWtlIFAoaSkgYW5kIHAoaSksIHdpdGhvdXQgZXZlciBkZWZpbmluZyB3aGF0IHNvcnQKb2YgdGhpbmcgImkiIGlzLgo8L3A+Cgo8cD4oVGhlIG90aGVyIHByb2JsZW0gaXMgdGhhdCBpdCByZXF1aXJlcyBzdXBwb3J0IGZvciBzdHJlYW1wb3MKYXJpdGhtZXRpYy4gVGhpcyBpcyBpbXBvc3NpYmxlIG9uIHNvbWUgc3lzdGVtcywgaS5lLiBvbmVzIHdoZXJlIGZpbGUKcG9zaXRpb24gaXMgYSBjb21wbGljYXRlZCBzdHJ1Y3R1cmUgcmF0aGVyIHRoYW4ganVzdCBhIG51bWJlci4gSmVycnkKdGVsbHMgbWUgdGhhdCB0aGUgaW50ZW50aW9uIHdhcyB0byByZXF1aXJlIHN5bnRhY3RpYyBzdXBwb3J0IGZvcgpzdHJlYW1wb3MgYXJpdGhtZXRpYywgYnV0IHRoYXQgaXQgd2Fzbid0IGFjdHVhbGx5IHN1cHBvc2VkIHRvIGRvCmFueXRoaW5nIG1lYW5pbmdmdWwgZXhjZXB0IG9uIHBsYXRmb3JtcywgbGlrZSBVbml4LCB3aGVyZSBnZW51aW5lCmFyaXRobWV0aWMgaXMgcG9zc2libGUuKSA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiB0YWJsZSA4OSB0aXRsZSBmcm9tCiJpb3NfYmFzZSgpIGVmZmVjdHMiIHRvICJiYXNpY19pb3MmbHQ7Jmd0OygpCmVmZmVjdHMiLiA8L3A+Cjxocj4KPGEgbmFtZT0iNTMiPjxoMz41My4mbmJzcDtCYXNpY19pb3MgZGVzdHJ1Y3RvciB1bnNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVuIDE5OTg8L3A+CjxwPlRoZXJlJ3Mgbm90aGluZyBpbiAyNy40LjQgc2F5aW5nIHdoYXQgYmFzaWNfaW9zJ3MgZGVzdHJ1Y3RvciBkb2VzLgpUaGUgaW1wb3J0YW50IHF1ZXN0aW9uIGlzIHdoZXRoZXIgYmFzaWNfaW9zOjp+YmFzaWNfaW9zKCkgZGVzdHJveXMKcmRidWYoKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGFmdGVyIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+dmlydHVhbCB+YmFzaWNfaW9zKCk7PC90dD48L3A+CiAgPHA+PGI+Tm90ZXM8L2I+OiBUaGUgZGVzdHJ1Y3RvciBkb2VzIG5vdCBkZXN0cm95IDx0dD5yZGJ1ZigpPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPiAKPHA+VGhlIExXRyByZXZpZXdlZCB0aGUgYWRkaXRpb25hbCBxdWVzdGlvbiBvZiB3aGV0aGVyIG9yIG5vdAo8dHQ+cmRidWYoMCk8L3R0PiBtYXkgc2V0IDx0dD5iYWRiaXQ8L3R0Pi4gIFRoZSBhbnN3ZXIgaXMKY2xlYXJseSB5ZXM7IGl0IG1heSBiZSBzZXQgdmlhIDx0dD5jbGVhcigpPC90dD4uICBTZWUgMjcuNC40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5tZW1iZXJzIj4gW2xpYi5iYXNpYy5pb3MubWVtYmVyc108L2E+LCBwYXJhZ3JhcGggNi4gIFRoaXMgaXNzdWUgd2FzIHJldmlld2VkIGF0IGxlbmd0aApieSB0aGUgTFdHLCB3aGljaCByZW1vdmVkIGZyb20gdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYQpmb290bm90ZSB3aGljaCBpbmNvcnJlY3RseSBzYWlkICI8dHQ+cmRidWYoMCk8L3R0PiBkb2VzIG5vdCBzZXQKPHR0PmJhZGJpdDwvdHQ+Ii48L3A+Cjxocj4KPGEgbmFtZT0iNTQiPjxoMz41NC4mbmJzcDtCYXNpY19zdHJlYW1idWYncyBkZXN0cnVjdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi5jb25zIj4gW2xpYi5zdHJlYW1idWYuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBKdW4gMTk5ODwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2lzIGZvciBiYXNpY19zdHJlYW1idWYgc2hvd3MgYSAodmlydHVhbCkKZGVzdHJ1Y3RvciwgYnV0IHRoZSBzdGFuZGFyZCBkb2Vzbid0IHNheSB3aGF0IHRoYXQgZGVzdHJ1Y3RvciBkb2VzLiBNeQphc3N1bXB0aW9uIGlzIHRoYXQgaXQgZG9lcyBub3RoaW5nLCBidXQgdGhlIHN0YW5kYXJkIHNob3VsZCBzYXkgc28KZXhwbGljaXRseS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhZnRlciAyNy41LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLmNvbnMiPiBbbGliLnN0cmVhbWJ1Zi5jb25zXTwvYT4gcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnZpcnR1YWwmbmJzcDsgfmJhc2ljX3N0cmVhbWJ1ZigpOzwvdHQ+PC9wPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBOb25lLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjU1Ij48aDM+NTUuJm5ic3A7SW52YWxpZCBzdHJlYW0gcG9zaXRpb24gaXMgdW5kZWZpbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI2IEp1biAxOTk4PC9wPgo8cD5TZXZlcmFsIG1lbWJlciBmdW5jdGlvbnMgaW4gY2xhdXNlIDI3IGFyZSBkZWZpbmVkIGluIGNlcnRhaW4KY2lyY3Vtc3RhbmNlcyB0byByZXR1cm4gYW4gImludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiwgYSB0ZXJtCnRoYXQgaXMgZGVmaW5lZCBub3doZXJlIGluIHRoZSBzdGFuZGFyZC4gVHdvIHBsYWNlcyAoMjcuNS4yLjQuMiwKcGFyYWdyYXBoIDQsIGFuZCAyNy44LjEuNCwgcGFyYWdyYXBoIDE1KSBjb250YWluIGEgY3Jvc3MtcmVmZXJlbmNlIHRvCmEgZGVmaW5pdGlvbiBpbiBfbGliLmlvc3RyZWFtcy5kZWZpbml0aW9uc18sIGEgbm9uZXhpc3RlbnQKc2VjdGlvbi4gPC9wPgoKPHA+SSBzdXNwZWN0IHRoYXQgdGhlIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uIGlzIGp1c3Qgc3VwcG9zZWQgdG8gYmUKcG9zX3R5cGUoLTEpLiAgUHJvYmFibHkgYmVzdCB0byBzYXkgZXhwbGljaXRseSBpbiAoZm9yIGV4YW1wbGUpCjI3LjUuMi40LjIgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGlzIHBvc190eXBlKC0xKSwgcmF0aGVyIHRoYW4gdG8gdXNlCnRoZSB0ZXJtICJpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiIsIGRlZmluZSB0aGF0IHRlcm0Kc29tZXdoZXJlLCBhbmQgdGhlbiBwdXQgaW4gYSBjcm9zcy1yZWZlcmVuY2UuIDwvcD4KCjxwPlRoZSBwaHJhc2UgImludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiBhcHBlYXJzIHRlbiB0aW1lcyBpbgp0aGUgQysrIFN0YW5kYXJkLiAgSW4gc2V2ZW4gcGxhY2VzIGl0IHJlZmVycyB0byBhIHJldHVybiB2YWx1ZSwgYW5kIGl0CnNob3VsZCBiZSBjaGFuZ2VkLiBJbiB0aHJlZSBwbGFjZXMgaXQgcmVmZXJzIHRvIGFuIGFyZ3VtZW50LCBhbmQgaXQKc2hvdWxkIG5vdCBiZSBjaGFuZ2VkLiBIZXJlIGFyZSB0aGUgdGhyZWUgcGxhY2VzIHdoZXJlICJpbnZhbGlkCnN0cmVhbSBwb3NpdGlvbiIgc2hvdWxkIG5vdCBiZSBjaGFuZ2VkOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTQ8YnI+CiAgMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDE0PGJyPgogIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTcKICA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy41LjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5idWZmZXIiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl08L2E+LCBwYXJhZ3JhcGggNCwgY2hhbmdlICJSZXR1cm5zIGFuCm9iamVjdCBvZiBjbGFzcyBwb3NfdHlwZSB0aGF0IHN0b3JlcyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbgooX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfKSIgdG8gIlJldHVybnMKPHR0PnBvc190eXBlKG9mZl90eXBlKC0xKSk8L3R0PiIuCjwvcD4KCjxwPkluIDI3LjUuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyXTwvYT4sIHBhcmFncmFwaCA2LCBjaGFuZ2UgIlJldHVybnMKYW4gb2JqZWN0IG9mIGNsYXNzIHBvc190eXBlIHRoYXQgc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtCnBvc2l0aW9uIiB0byAiUmV0dXJucyA8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii48L3A+Cgo8cD5JbiAyNy43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLnZpcnR1YWxzIj4gW2xpYi5zdHJpbmdidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDEzLCBjaGFuZ2UgInRoZSBvYmplY3QKc3RvcmVzIGFuIGludmFsaWQgc3RyZWFtIHBvc2l0aW9uIiB0byAidGhlIHJldHVybiB2YWx1ZSBpcwo8dHQ+cG9zX3R5cGUob2ZmX3R5cGUoLTEpKTwvdHQ+Ii4gPC9wPgoKPHA+SW4gMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDEzLCBjaGFuZ2UgInJldHVybnMgYW4KaW52YWxpZCBzdHJlYW0gcG9zaXRpb24gKDI3LjQuMykiIHRvICJyZXR1cm5zCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iIDwvcD4KCjxwPkluIDI3LjguMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLnZpcnR1YWxzIj4gW2xpYi5maWxlYnVmLnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCAxNSwgY2hhbmdlICJPdGhlcndpc2UKcmV0dXJucyBhbiBpbnZhbGlkIHN0cmVhbSBwb3NpdGlvbiAoX2xpYi5pb3N0cmVhbXMuZGVmaW5pdGlvbnNfKSIKdG8gIk90aGVyd2lzZSByZXR1cm5zIDx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iCjwvcD4KCjxwPkluIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTUsIGNoYW5nZSAidGhlIG9iamVjdApzdG9yZXMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iIHRvICJ0aGUgcmV0dXJuIHZhbHVlIGlzCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iIDwvcD4KCjxwPkluIEQuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+LCBwYXJhZ3JhcGggMTgsIGNoYW5nZSAidGhlIG9iamVjdApzdG9yZXMgYW4gaW52YWxpZCBzdHJlYW0gcG9zaXRpb24iIHRvICJ0aGUgcmV0dXJuIHZhbHVlIGlzCjx0dD5wb3NfdHlwZShvZmZfdHlwZSgtMSkpPC90dD4iPC9wPgo8aHI+CjxhIG5hbWU9IjU2Ij48aDM+NTYuJm5ic3A7U2hvd21hbnljJ3MgcmV0dXJuIHR5cGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1ZiI+IFtsaWIuc3RyZWFtYnVmXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IEp1biAxOTk4PC9wPgo8cD5UaGUgY2xhc3Mgc3VtbWFyeSBmb3IgYmFzaWNfc3RyZWFtYnVmJmx0OyZndDssIGluIDI3LjUuMiwgc2F5cyB0aGF0CnNob3dtYW55YyBoYXMgcmV0dXJuIHR5cGUgaW50LiBIb3dldmVyLCAyNy41LjIuNC4zIHNheXMgdGhhdCBpdHMKcmV0dXJuIHR5cGUgaXMgc3RyZWFtc2l6ZS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSA8dHQ+c2hvd21hbnljPC90dD4ncyByZXR1cm4gdHlwZSBpbiB0aGUKMjcuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYiPiBbbGliLnN0cmVhbWJ1Zl08L2E+IGNsYXNzIHN1bW1hcnkgdG8gPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+Cjxocj4KPGEgbmFtZT0iNTciPjxoMz41Ny4mbmJzcDtNaXN0YWtlIGluIGNoYXJfdHJhaXRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jaGFyLnRyYWl0cy5zcGVjaWFsaXphdGlvbnMud2NoYXIudCI+IFtsaWIuY2hhci50cmFpdHMuc3BlY2lhbGl6YXRpb25zLndjaGFyLnRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MSBKdWwgMTk5ODwvcD4KPHA+MjEuMS4zLjIsIHBhcmFncmFwaCAzLCBzYXlzICJUaGUgdHlwZXMgc3RyZWFtcG9zIGFuZAp3c3RyZWFtcG9zIG1heSBiZSBkaWZmZXJlbnQgaWYgdGhlIGltcGxlbWVudGF0aW9uIHN1cHBvcnRzIG5vIHNoaWZ0CmVuY29kaW5nIGluIG5hcnJvdy1vcmllbnRlZCBpb3N0cmVhbXMgYnV0IHN1cHBvcnRzIG9uZSBvciBtb3JlIHNoaWZ0CmVuY29kaW5ncyBpbiB3aWRlLW9yaWVudGVkIHN0cmVhbXMiLiA8L3A+Cgo8cD5UaGF0J3Mgd3Jvbmc6IHRoZSB0d28gYXJlIHRoZSBzYW1lIHR5cGUuIFRoZSAmbHQ7aW9zZndkJmd0OyBzdW1tYXJ5CmluIDI3LjIgc2F5cyB0aGF0IHN0cmVhbXBvcyBhbmQgd3N0cmVhbXBvcyBhcmUsIHJlc3BlY3RpdmVseSwgc3lub255bXMKZm9yIGZwb3MmbHQ7Y2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6OnN0YXRlX3R5cGUmZ3Q7IGFuZApmcG9zJmx0O2NoYXJfdHJhaXRzJmx0O3djaGFyX3QmZ3Q7OjpzdGF0ZV90eXBlJmd0OywgYW5kLCBmbGlwcGluZyBiYWNrCnRvIGNsYXVzZSAyMSwgd2Ugc2VlIGluIDIxLjEuMy4xIGFuZCAyMS4xLjMuMiB0aGF0CmNoYXJfdHJhaXRzJmx0O2NoYXImZ3Q7OjpzdGF0ZV90eXBlIGFuZApjaGFyX3RyYWl0cyZsdDt3Y2hhcl90Jmd0Ozo6c3RhdGVfdHlwZSBtdXN0IGJvdGggYmUgbWJzdGF0ZV90LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIHRoZSBzZW50ZW5jZSBpbiAyMS4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmNoYXIudHJhaXRzLnNwZWNpYWxpemF0aW9ucy53Y2hhci50Ij4gW2xpYi5jaGFyLnRyYWl0cy5zcGVjaWFsaXphdGlvbnMud2NoYXIudF08L2E+IHBhcmFncmFwaCAzIHdoaWNoCmJlZ2lucyAiVGhlIHR5cGVzIHN0cmVhbXBvcyBhbmQgd3N0cmVhbXBvcyBtYXkgYmUKZGlmZmVyZW50Li4uIiAuIDwvcD4KPGhyPgo8YSBuYW1lPSI1OSI+PGgzPjU5LiZuYnNwO0FtYmlndWl0eSBpbiBzcGVjaWZpY2F0aW9uIG9mIGdidW1wPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLmdldC5hcmVhIj4gW2xpYi5zdHJlYW1idWYuZ2V0LmFyZWFdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggSnVsIDE5OTg8L3A+CjxwPjI3LjUuMi4zLjEgc2F5cyB0aGF0IGJhc2ljX3N0cmVhbWJ1Zjo6Z2J1bXAoKSAiQWR2YW5jZXMgdGhlCm5leHQgcG9pbnRlciBmb3IgdGhlIGlucHV0IHNlcXVlbmNlIGJ5IG4uIiA8L3A+Cgo8cD5UaGUgc3RyYWlnaHRmb3J3YXJkIGludGVycHJldGF0aW9uIGlzIHRoYXQgaXQgaXMganVzdCBncHRyKCkgKz0Kbi4gQW4gYWx0ZXJuYXRpdmUgaW50ZXJwcmV0YXRpb24sIHRob3VnaCwgaXMgdGhhdCBpdCBiZWhhdmVzIGFzIGlmIGl0CmNhbGxzIHNidW1wYyBuIHRpbWVzLiAoVGhlIGlzc3VlLCBvZiBjb3Vyc2UsIGlzIHdoZXRoZXIgaXQgbWlnaHQgZXZlcgpjYWxsIHVuZGVyZmxvdy4pIFRoZXJlIGlzIGEgc2ltaWxhciBhbWJpZ3VpdHkgaW4gdGhlIGNhc2Ugb2YKcGJ1bXAuIDwvcD4KCjxwPihUaGUgImNsYXNzaWMiIEFUJmFtcDtUIGltcGxlbWVudGF0aW9uIHVzZWQgdGhlCmZvcm1lciBpbnRlcnByZXRhdGlvbi4pPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy41LjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYuZ2V0LmFyZWEiPiBbbGliLnN0cmVhbWJ1Zi5nZXQuYXJlYV08L2E+IHBhcmFncmFwaCA0IGdidW1wIGVmZmVjdHMgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBBZHZhbmNlcyB0aGUgbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UgYnkgbi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEFkZHMgPHR0Pm48L3R0PiB0byB0aGUgbmV4dCBwb2ludGVyIGZvciB0aGUgaW5wdXQgc2VxdWVuY2UuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5NYWtlIHRoZSBzYW1lIGNoYW5nZSB0byAyNy41LjIuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYucHV0LmFyZWEiPiBbbGliLnN0cmVhbWJ1Zi5wdXQuYXJlYV08L2E+IHBhcmFncmFwaCA0IHBidW1wCmVmZmVjdHMuPC9wPgo8aHI+CjxhIG5hbWU9IjYwIj48aDM+NjAuJm5ic3A7V2hhdCBpcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbj88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEF1ZyAxOTk4PC9wPgo8cD5QYXJhZ3JhcGggMSBvZiAyNy42LjEuMi4xIGNvbnRhaW5zIGdlbmVyYWwgcmVxdWlyZW1lbnRzIGZvciBhbGwKZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucy4gU29tZSBvZiB0aGUgZnVuY3Rpb25zIGRlZmluZWQgaW4gc2VjdGlvbgoyNy42LjEuMiBleHBsaWNpdGx5IHNheSB0aGF0IHRob3NlIHJlcXVpcmVtZW50cyBhcHBseSAoIkJlaGF2ZXMKbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIgKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKSIpLCBidXQKb3RoZXJzIGRvbid0LiBUaGUgcXVlc3Rpb246IGlzIDI3LjYuMS4yLjEgc3VwcG9zZWQgdG8gYXBwbHkgdG8KZXZlcnl0aGluZyBpbiAyNy42LjEuMiwgb3Igb25seSB0byB0aG9zZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQKZXhwbGljaXRseSBzYXkgImJlaGF2ZXMgbGlrZSBhIGZvcm1hdHRlZCBpbnB1dCBtZW1iZXIiPyBPcgp0byBwdXQgaXQgZGlmZmVyZW50bHk6IGFyZSB3ZSB0byBhc3N1bWUgdGhhdCBldmVyeXRoaW5nIHRoYXQgYXBwZWFycwppbiBhIHNlY3Rpb24gY2FsbGVkICJGb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIiByZWFsbHkgaXMgYQpmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24/IEkgYXNzdW1lIHRoYXQgMjcuNi4xLjIuMSBpcyBpbnRlbmRlZCB0bwphcHBseSB0byB0aGUgYXJpdGhtZXRpYyBleHRyYWN0b3JzICgyNy42LjEuMi4yKSwgYnV0IEkgYXNzdW1lIHRoYXQgaXQKaXMgbm90IGludGVuZGVkIHRvIGFwcGx5IHRvIGV4dHJhY3RvcnMgbGlrZSA8L3A+Cgo8cHJlPiAgICBiYXNpY19pc3RyZWFtJmFtcDsgb3BlcmF0b3ImZ3Q7Jmd0OyhiYXNpY19pc3RyZWFtJmFtcDsgKCpwZikoYmFzaWNfaXN0cmVhbSZhbXA7KSk7PC9wcmU+Cgo8cD5hbmQgPC9wPgoKPHByZT4gICAgYmFzaWNfaXN0cmVhbSZhbXA7IG9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtbWJ1ZiopOzwvcHJlPgoKPHA+VGhlcmUgaXMgYSBzaW1pbGFyIGFtYmlndWl0eSBmb3IgdW5mb3JtYXR0ZWQgaW5wdXQsIGZvcm1hdHRlZCBvdXRwdXQsIGFuZCB1bmZvcm1hdHRlZApvdXRwdXQuIDwvcD4KCjxwPkNvbW1lbnRzIGZyb20gSnVkeSBXYXJkOiBJdCBzZWVtcyBsaWtlIHRoZSBwcm9ibGVtIGlzIHRoYXQgdGhlCmJhc2ljX2lzdHJlYW0gYW5kIGJhc2ljX29zdHJlYW0gb3BlcmF0b3IgJmx0OyZsdDsoKSdzIHRoYXQgYXJlIHVzZWQKZm9yIHRoZSBtYW5pcHVsYXRvcnMgYW5kIHN0cmVhbWJ1ZiogYXJlIGluIHRoZSB3cm9uZyBzZWN0aW9uIGFuZApzaG91bGQgaGF2ZSB0aGVpciBvd24gc2VwYXJhdGUgc2VjdGlvbiBvciBiZSBtb2RpZmllZCB0byBtYWtlIGl0IGNsZWFyCnRoYXQgdGhlICJDb21tb24gcmVxdWlyZW1lbnRzIiBsaXN0ZWQgaW4gc2VjdGlvbiAyNy42LjEuMi4xCihmb3IgYmFzaWNfaXN0cmVhbSkgYW5kIHNlY3Rpb24gMjcuNi4yLjUuMSAoZm9yIGJhc2ljX29zdHJlYW0pIGRvIG5vdAphcHBseSB0byB0aGVtLiA8L3A+Cgo8cD5BZGRpdGlvbmFsIGNvbW1lbnRzIGZyb20gRGlldG1hciBL/GhsOiBJdCBhcHBlYXJzIHRvIGJlIHNvbWV3aGF0Cm5vbnNlbnNpY2FsIHRvIGNvbnNpZGVyIHRoZSBmdW5jdGlvbnMgZGVmaW5lZCBpbiAyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4gcGFyYWdyYXBocyAxIHRvIDUgdG8gYmUgIkZvcm1hdHRlZCBpbnB1dApmdW5jdGlvbiIgYnV0IHNpbmNlIHRoZXNlIGZ1bmN0aW9ucyBhcmUgZGVmaW5lZCBpbiBhIHNlY3Rpb24KbGFiZWxlZCAiRm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyIgaXQgaXMgdW5jbGVhciB0byBtZQp3aGV0aGVyIHRoZXNlIG9wZXJhdG9ycyBhcmUgY29uc2lkZXJlZCBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zIHdoaWNoCmhhdmUgdG8gY29uZm9ybSB0byB0aGUgImNvbW1vbiByZXF1aXJlbWVudHMiIGZyb20gMjcuNi4xLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPjogSWYgdGhpcyBpcyB0aGUgY2FzZSwgYWxsIG1hbmlwdWxhdG9ycywgbm90Cmp1c3QgPHR0PndzPC90dD4sIHdvdWxkIHNraXAgd2hpdGVzcGFjZSB1bmxlc3MgPHR0Pm5vc2tpcHdzPC90dD4gaXMKc2V0ICguLi4gYnV0IHNldHRpbmcgPHR0Pm5vc2tpcHdzPC90dD4gdXNpbmcgdGhlIG1hbmlwdWxhdG9yIHN5bnRheAp3b3VsZCBhbHNvIHNraXAgd2hpdGVzcGFjZSA6LSk8L3A+IDxwPkl0IGlzIG5vdCBjbGVhciB3aGljaCBmdW5jdGlvbnMKYXJlIHRvIGJlIGNvbnNpZGVyZWQgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb25zLiBBcyB3cml0dGVuLCBpdCBzZWVtcwp0aGF0IGFsbCBmdW5jdGlvbnMgaW4gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiBhcmUgdW5mb3JtYXR0ZWQgaW5wdXQKZnVuY3Rpb25zLiBIb3dldmVyLCBpdCBkb2VzIG5vdCByZWFsbHkgbWFrZSBtdWNoIHNlbnNlIHRvIGNvbnN0cnVjdCBhCnNlbnRyeSBvYmplY3QgZm9yIDx0dD5nY291bnQoKTwvdHQ+LCA8dHQ+c3luYygpPC90dD4sIC4uLiBBbHNvIGl0IGlzCnVuY2xlYXIgd2hhdCBoYXBwZW5zIHRvIHRoZSA8dHQ+Z2NvdW50KCk8L3R0PiBpZgplZy4gPHR0Pmdjb3VudCgpPC90dD4sIDx0dD5wdXRiYWNrKCk8L3R0PiwgPHR0PnVuZ2V0KCk8L3R0Piwgb3IKPHR0PnN5bmMoKTwvdHQ+IGlzIGNhbGxlZDogVGhlc2UgZnVuY3Rpb25zIGRvbid0IGV4dHJhY3QgY2hhcmFjdGVycywKc29tZSBvZiB0aGVtIGV2ZW4gInVuZXh0cmFjdCIgYSBjaGFyYWN0ZXIuIFNob3VsZCB0aGlzIHN0aWxsCmJlIHJlZmxlY3RlZCBpbiA8dHQ+Z2NvdW50KCk8L3R0Pj8gT2YgY291cnNlLCBpdCBjb3VsZCBiZSByZWFkIGFzIGlmCmFmdGVyIGEgY2FsbCB0byA8dHQ+Z2NvdW50KCk8L3R0PiA8dHQ+Z2NvdW50KCk8L3R0PiByZXR1cm4gPHR0PjA8L3R0PgoodGhlIGxhc3QgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24sIDx0dD5nY291bnQoKTwvdHQ+LCBkaWRuJ3QKZXh0cmFjdCBhbnkgY2hhcmFjdGVyKSBhbmQgYWZ0ZXIgYSBjYWxsIHRvIDx0dD5wdXRiYWNrKCk8L3R0Pgo8dHQ+Z2NvdW50KCk8L3R0PiByZXR1cm5zIDx0dD4tMTwvdHQ+ICh0aGUgbGFzdCB1bmZvcm1hdHRlZCBpbnB1dApmdW5jdGlvbiA8dHQ+cHV0YmFjaygpPC90dD4gZGlkICJleHRyYWN0IiBiYWNrIGludG8gdGhlCnN0cmVhbSkuIENvcnJlc3BvbmRpbmdseSBmb3IgPHR0PnVuZ2V0KCk8L3R0Pi4gSXMgdGhpcyB3aGF0IGlzCmludGVuZGVkPyAgSWYgc28sIHRoaXMgc2hvdWxkIGJlIGNsYXJpZmllZC4gT3RoZXJ3aXNlLCBhIGNvcnJlc3BvbmRpbmcKY2xhcmlmaWNhdGlvbiBzaG91bGQgYmUgdXNlZC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMS4yLjIgW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXSwgcGFyYWdyYXBoIDEuCkNoYW5nZSB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzZWNvbmQgc2VudGVuY2UgZnJvbSAiVGhlIGNvbnZlcnNpb24Kb2NjdXJzIiB0byAiVGhlc2UgZXh0cmFjdG9ycyBiZWhhdmUgYXMgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLiAgQWZ0ZXIgYSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLAp0aGUgY29udmVyc2lvbiBvY2N1cnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuCkFkZCBhbiBlZmZlY3RzIGNsYXVzZS4gICJFZmZlY3RzOiBOb25lLiAgVGhpcyBleHRyYWN0b3IgZG9lcwpub3QgYmVoYXZlIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4KMjcuNi4xLjIuMSkuCjwvcD4KCjxwPgpJbiAyNy42LjEuMi4zLCBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IENhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4yLjEpLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjIuMywgW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXSwgcGFyYWdyYXBoIDQuICBDaGFuZ2UgdGhlCmVmZmVjdHMgY2xhdXNlIHRvICJFZmZlY3RzOiBDYWxscyBwZigqdGhpcykuICBUaGlzIGV4dHJhY3RvciBkb2VzIG5vdApiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMi4xKS4KPC9wPgoKPHA+CkluIDI3LjYuMS4yLjMsIFtsaWIuaXN0cmVhbTo6ZXh0cmFjdG9yc10sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKZmlyc3QgdHdvIHNlbnRlbmNlcyBmcm9tICJJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwKd2hpY2ggbWF5IHRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBFeHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gKnRoaXMuLi4iIHRvICJCZWhhdmVzIGFzIGEgZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjIuMSkuICBJZiBzYiBpcyBudWxsLCBjYWxscyBzZXRzdGF0ZShmYWlsYml0KSwgd2hpY2ggbWF5CnRocm93IGlvc19iYXNlOjpmYWlsdXJlICgyNy40LjQuMykuICBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKY29uc3RydWN0ZWQsIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSAqdGhpcy4uLiIuCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyLiAgQWRkIGFuCmVmZmVjdHMgY2xhdXNlLiAgIkVmZmVjdHM6IG5vbmUuIFRoaXMgbWVtYmVyIGZ1bmN0aW9uIGRvZXMgbm90IGJlaGF2ZQphcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzLiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cyBhCmNoYXJhY3RlciIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMgYQpjaGFyYWN0ZXIiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDUuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzIGEKY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cyBhCmNoYXJhY3RlciIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNS4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxMCwgYmVjYXVzZSBpdCByZWZlcnMgdG8gcGFyYWdyYXBoIDcuXQo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAxMi4gIENoYW5nZSB0aGUKYmVnaW5uaW5nIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZWZmZWN0cyBjbGF1c2UgZnJvbSAiRXh0cmFjdHMKY2hhcmFjdGVycyIgdG8gIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZAppbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgZXh0cmFjdHMKY2hhcmFjdGVycyIKPC9wPgoKPHA+CltObyBjaGFuZ2UgbmVlZGVkIGluIHBhcmFncmFwaCAxNS5dCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDE3LiAgQ2hhbmdlIHRoZQpiZWdpbm5pbmcgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoZSBlZmZlY3RzIGNsYXVzZSBmcm9tICJFeHRyYWN0cwpjaGFyYWN0ZXJzIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkCmluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBleHRyYWN0cwpjaGFyYWN0ZXJzIgo8L3A+Cgo8cD4KW05vIGNoYW5nZSBuZWVkZWQgaW4gcGFyYWdyYXBoIDIzLl0KPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjQuICBDaGFuZ2UgdGhlCmJlZ2lubmluZyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIGVmZmVjdHMgY2xhdXNlIGZyb20gIkV4dHJhY3RzCmNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQKaW4gMjcuNi4xLjMsIHBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGV4dHJhY3RzCmNoYXJhY3RlcnMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgYmVmb3JlIHBhcmFncmFwaCAyNy4gIEFkZCBhbgpFZmZlY3RzIGNsYXVzZTogIkVmZmVjdHM6IEJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5Cm9iamVjdCwgcmVhZHMgYnV0IGRvZXMgbm90IGV4dHJhY3QgdGhlIGN1cnJlbnQgaW5wdXQgY2hhcmFjdGVyLiIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMjguICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzIiB0bwpCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDMwLiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIWdvb2QoKSBjYWxscyIgdG8KIkJlaGF2ZXMgYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywKcGFyYWdyYXBoIDEpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgIWdvb2QoKSBjYWxscyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMzIuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiAhZ29vZCgpIGNhbGxzLi4uIiB0bwoiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMS4zLApwYXJhZ3JhcGggMSkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiAhZ29vZCgpCmNhbGxzLi4uIiAgQWRkIGEgbmV3IHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgdGhlIEVmZmVjdHMgY2xhdXNlOgoiW05vdGU6IHRoaXMgZnVuY3Rpb24gZXh0cmFjdHMgbm8gY2hhcmFjdGVycywgc28gdGhlIHZhbHVlIHJldHVybmVkCmJ5IHRoZSBuZXh0IGNhbGwgdG8gZ2NvdW50KCkgaXMgMC5dIgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzNC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmICFnb29kKCkgY2FsbHMiIHRvCiJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsCnBhcmFncmFwaCAxKS4gIEFmdGVyIGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QsIGlmICFnb29kKCkgY2FsbHMiLgpBZGQgYSBuZXcgc2VudGVuY2UgdG8gdGhlIGVuZCBvZiB0aGUgRWZmZWN0cyBjbGF1c2U6ICJbTm90ZTogdGhpcwpmdW5jdGlvbiBleHRyYWN0cyBubyBjaGFyYWN0ZXJzLCBzbyB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgdGhlIG5leHQKY2FsbCB0byBnY291bnQoKSBpcyAwLl0iCjwvcD4KCjxwPgpJbiAyNy42LjEuMywgW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDM2LiAgQ2hhbmdlIHRoZQpmaXJzdCBzZW50ZW5jZSBvZiB0aGUgRWZmZWN0cyBjbGF1c2UgZnJvbSAiSWYgIXJkYnVmKCkgaXMiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgcmRidWYoKSBpcyIKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBiZWZvcmUgcGFyYWdyYXBoIDM3LiAgQWRkIGFuCkVmZmVjdHMgY2xhdXNlOiAiRWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMS4zLCBwYXJhZ3JhcGggMSksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGNvdW50IHRoZQpudW1iZXIgb2YgY2hhcmFjdGVycyBleHRyYWN0ZWQgYW5kIGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsdWUgcmV0dXJuZWQKYnkgc3Vic2VxdWVudCBjYWxscyB0byBnY291bnQoKS4iICBDaGFuZ2UgdGhlIGZpcnN0IHNlbnRlbmNlIG9mCnBhcmFncmFwaCAzNyBmcm9tICJpZiBmYWlsKCkiIHRvICJhZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LAppZiBmYWlsKCkiLgo8L3A+Cgo8cD4KSW4gMjcuNi4xLjMsIFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCAzOC4gIENoYW5nZSB0aGUKZmlyc3Qgc2VudGVuY2Ugb2YgdGhlIEVmZmVjdHMgY2xhdXNlIGZyb20gIklmIGZhaWwoKSIgdG8gIkJlaGF2ZXMKYXMgYW4gdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjEuMywgcGFyYWdyYXBoCjEpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXh0cmFjdGVkCmFuZCBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbHVlIHJldHVybmVkIGJ5IHN1YnNlcXVlbnQgY2FsbHMgdG8KZ2NvdW50KCkuICBBZnRlciBjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBpZiBmYWlsKCkKPC9wPgoKPHA+CkluIDI3LjYuMS4zLCBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggNDAuICBDaGFuZ2UgdGhlCmZpcnN0IHNlbnRlbmNlIG9mIHRoZSBFZmZlY3RzIGNsYXVzZSBmcm9tICJJZiBmYWlsKCkiIHRvICJCZWhhdmVzCmFzIGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4xLjMsIHBhcmFncmFwaAoxKSwgZXhjZXB0IHRoYXQgaXQgZG9lcyBub3QgY291bnQgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZAphbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBzdWJzZXF1ZW50IGNhbGxzIHRvCmdjb3VudCgpLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgZmFpbCgpCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4yIFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY10sIHBhcmFncmFwaCAxLiAgQ2hhbmdlCnRoZSBiZWdpbm5pbmcgb2YgdGhlIHRoaXJkIHNlbnRlbmNlIGZyb20gIlRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24iCnRvICJUaGVzZSBleHRyYWN0b3JzIGJlaGF2ZSBhcyBmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyAoYXMKZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiAgQWZ0ZXIgdGhlIHNlbnRyeSBvYmplY3QgaXMgY29uc3RydWN0ZWQsIHRoZQpjb252ZXJzaW9uIG9jY3VycyIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBiZWZvcmUgcGFyYWdyYXBoIDEuICBBZGQgYW4KZWZmZWN0cyBjbGF1c2U6ICJFZmZlY3RzOiBOb25lLiBEb2VzIG5vdCBiZWhhdmUgYXMgYSBmb3JtYXR0ZWQgb3V0cHV0CmZ1bmN0aW9uIChhcyBkZXNjcmliZWQgaW4gMjcuNi4yLjUuMSkuIi4KPC9wPgoKPHA+CkluIDI3LjYuMi41LjMgW2xpYi5vc3RyZWFtLmluc2VydGVyc10sIHBhcmFncmFwaCAyLiAgQ2hhbmdlIHRoZQplZmZlY3RzIGNsYXVzZSB0byAiRWZmZWN0czogY2FsbHMgcGYoKnRoaXMpLiAgVGhpcyBleHRyYWN0b3IgZG9lcyBub3QKYmVoYXZlIGFzIGEgZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi41LjEpLiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNS4zIFtsaWIub3N0cmVhbS5pbnNlcnRlcnNdLCBwYXJhZ3JhcGggNC4gIENoYW5nZSB0aGUKZWZmZWN0cyBjbGF1c2UgdG8gIkVmZmVjdHM6IGNhbGxzIHBmKCp0aGlzKS4gIFRoaXMgZXh0cmFjdG9yIGRvZXMgbm90CmJlaGF2ZSBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4iLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjUuMyBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzXSwgcGFyYWdyYXBoIDYuICBDaGFuZ2UgdGhlIGZpcnN0CnNlbnRlbmNlIGZyb20gIklmIHNiIiB0byAiQmVoYXZlcyBhcyBhIGZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gKGFzCmRlc2NyaWJlZCBpbiAyNy42LjIuNS4xKS4gIEFmdGVyIHRoZSBzZW50cnkgb2JqZWN0IGlzIGNvbnN0cnVjdGVkLCBpZgpzYiIuCjwvcD4KCjxwPgpJbiAyNy42LjIuNiBbbGliLm9zdHJlYW0udW5mb3JtYXR0ZWRdLCBwYXJhZ3JhcGggMi4gIENoYW5nZSB0aGUgZmlyc3QKc2VudGVuY2UgZnJvbSAiSW5zZXJ0cyB0aGUgY2hhcmFjdGVyIiB0byAiQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZApvdXRwdXQgZnVuY3Rpb24gKGFzIGRlc2NyaWJlZCBpbiAyNy42LjIuNiwgcGFyYWdyYXBoIDEpLiAgQWZ0ZXIKY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaW5zZXJ0cyB0aGUgY2hhcmFjdGVyIi4KPC9wPgoKPHA+CkluIDI3LjYuMi42IFtsaWIub3N0cmVhbS51bmZvcm1hdHRlZF0sIHBhcmFncmFwaCA1LiAgQ2hhbmdlIHRoZSBmaXJzdApzZW50ZW5jZSBmcm9tICJPYnRhaW5zIGNoYXJhY3RlcnMiIHRvICJCZWhhdmVzIGFzIGFuIHVuZm9ybWF0dGVkCm91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuICBBZnRlcgpjb25zdHJ1Y3RpbmcgYSBzZW50cnkgb2JqZWN0LCBvYnRhaW5zIGNoYXJhY3RlcnMiLgo8L3A+Cgo8cD4KSW4gMjcuNi4yLjYgW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXSwgcGFyYWdyYXBoIDcuICBBZGQgYSBuZXcKc2VudGVuY2UgYXQgdGhlIGVuZCBvZiB0aGUgcGFyYWdyYXBoOiAiRG9lcyBub3QgYmVoYXZlIGFzIGFuCnVuZm9ybWF0dGVkIG91dHB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluIDI3LjYuMi42LCBwYXJhZ3JhcGggMSkuIgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5TZWUgSjE2Lzk5LTAwNDM9PVdHMjEvTjEyMTksIFByb3Bvc2VkIFJlc29sdXRpb24gdG8gTGlicmFyeSBJc3N1ZSA2MCwKYnkgSnVkeSBXYXJkIGFuZCBNYXR0IEF1c3Rlcm4uICBUaGlzIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgc2VjdGlvbgpWSSBvZiB0aGF0IHBhcGVyLjwvcD4KPGhyPgo8YSBuYW1lPSI2MSI+PGgzPjYxLiZuYnNwO0FtYmlndWl0eSBpbiBpb3N0cmVhbXMgZXhjZXB0aW9uIHBvbGljeTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgQXVnIDE5OTg8L3A+CjxwPlRoZSBpbnRyb2R1Y3Rpb24gdG8gdGhlIHNlY3Rpb24gb24gdW5mb3JtYXR0ZWQgaW5wdXQgKDI3LjYuMS4zKQpzYXlzIHRoYXQgZXZlcnkgdW5mb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gY2F0Y2hlcyBhbGwgZXhjZXB0aW9ucyB0aGF0CndlcmUgdGhyb3duIGR1cmluZyBpbnB1dCwgc2V0cyBiYWRiaXQsIGFuZCB0aGVuIGNvbmRpdGlvbmFsbHkgcmV0aHJvd3MKdGhlIGV4Y2VwdGlvbi4gVGhhdCBzZWVtcyBjbGVhciBlbm91Z2guIFNldmVyYWwgb2YgdGhlIHNwZWNpZmljCmZ1bmN0aW9ucywgaG93ZXZlciwgc3VjaCBhcyBnZXQoKSBhbmQgcmVhZCgpLCBhcmUgZG9jdW1lbnRlZCBpbiBzb21lCmNpcmN1bXN0YW5jZXMgYXMgc2V0dGluZyBlb2ZiaXQgYW5kL29yIGZhaWxiaXQuIChUaGUgc3RhbmRhcmQgbm90ZXMsCmNvcnJlY3RseSwgdGhhdCBzZXR0aW5nIGVvZmJpdCBvciBmYWlsYml0IGNhbiBzb21ldGltZXMgcmVzdWx0IGluIGFuCmV4Y2VwdGlvbiBiZWluZyB0aHJvd24uKSBUaGUgcXVlc3Rpb246IGlmIG9uZSBvZiB0aGVzZSBmdW5jdGlvbnMKdGhyb3dzIGFuIGV4Y2VwdGlvbiB0cmlnZ2VyZWQgYnkgc2V0dGluZyBmYWlsYml0LCBpcyB0aGlzIGFuIGV4Y2VwdGlvbgoidGhyb3duIGR1cmluZyBpbnB1dCIgYW5kIGhlbmNlIGNvdmVyZWQgYnkgMjcuNi4xLjMsIG9yIGRvZXMKMjcuNi4xLjMgb25seSByZWZlciB0byBhIGxpbWl0ZWQgY2xhc3Mgb2YgZXhjZXB0aW9ucz8gSnVzdCB0byBtYWtlCnRoaXMgY29uY3JldGUsIHN1cHBvc2UgeW91IGhhdmUgdGhlIGZvbGxvd2luZyBzbmlwcGV0LiA8L3A+Cgo8cHJlPiAgCiAgY2hhciBidWZmZXJbTl07CiAgaXN0cmVhbSBpczsKICAuLi4KICBpcy5leGNlcHRpb25zKGlzdHJlYW06OmZhaWxiaXQpOyAvLyBUaHJvdyBvbiBmYWlsYml0IGJ1dCBub3Qgb24gYmFkYml0LgogIGlzLnJlYWQoYnVmZmVyLCBOKTs8L3ByZT4KCjxwPk5vdyBzdXBwb3NlIHdlIHJlYWNoIEVPRiBiZWZvcmUgd2UndmUgcmVhZCBOIGNoYXJhY3RlcnMuIFdoYXQKaW9zdGF0ZSBiaXRzIGNhbiB3ZSBleHBlY3QgdG8gYmUgc2V0LCBhbmQgd2hhdCBleGNlcHRpb24gKGlmIGFueSkgd2lsbApiZSB0aHJvd24/IDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNi4xLjMsIHBhcmFncmFwaCAxLCBhZnRlciB0aGUgc2VudGVuY2UgdGhhdCBiZWdpbnMKIklmIGFuIGV4Y2VwdGlvbiBpcyB0aHJvd24uLi4iLCBhZGQgdGhlIGZvbGxvd2luZwpwYXJlbnRoZXRpY2FsIGNvbW1lbnQ6ICIoRXhjZXB0aW9ucyB0aHJvd24gZnJvbSAKPHR0PmJhc2ljX2lvcyZsdDsmZ3Q7OjpjbGVhcigpPC90dD4gYXJlIG5vdCBjYXVnaHQgb3IgcmV0aHJvd24uKSIKPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIExXRyBsb29rZWQgdG8gdHdvIGFsdGVybmF0aXZlIHdvcmRpbmdzLCBhbmQgY2hvb3NlIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uIGFzIGJldHRlciBzdGFuZGFyZGVzZS48L3A+Cjxocj4KPGEgbmFtZT0iNjIiPjxoMz42Mi4mbmJzcDs8dHQ+U3luYzwvdHQ+J3MgcmV0dXJuIHZhbHVlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBBdWcgMTk5ODwvcD4KPHA+VGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzeW5jKCkgKDI3LjYuMS4zLCBwYXJhZ3JhcGggMzYpIHNheXMgdGhhdCBpdAoiY2FsbHMgcmRidWYoKS0mZ3Q7cHVic3luYygpIGFuZCwgaWYgdGhhdCBmdW5jdGlvbiByZXR1cm5zIC0xCi4uLiByZXR1cm5zIHRyYWl0czo6ZW9mKCkuIiA8L3A+Cgo8cD5UaGF0IGxvb2tzIHN1c3BpY2lvdXMsIGJlY2F1c2UgdHJhaXRzOjplb2YoKSBpcyBvZiB0eXBlCnRyYWl0czo6aW50X3R5cGUgd2hpbGUgdGhlIHJldHVybiB0eXBlIG9mIHN5bmMoKSBpcyBpbnQuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+LCBwYXJhZ3JhcGggMzYsIGNoYW5nZSAicmV0dXJucwo8dHQ+dHJhaXRzOjplb2YoKTwvdHQ+IiB0byAicmV0dXJucyA8dHQ+LTE8L3R0PiIuCjwvcD4KPGhyPgo8YSBuYW1lPSI2MyI+PGgzPjYzLiZuYnNwO0V4Y2VwdGlvbi1oYW5kbGluZyBwb2xpY3kgZm9yIHVuZm9ybWF0dGVkIG91dHB1dDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5vc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEF1ZyAxOTk4PC9wPgo8cD5DbGF1c2UgMjcgZGV0YWlscyBhbiBleGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGZvciBmb3JtYXR0ZWQgaW5wdXQsCnVuZm9ybWF0dGVkIGlucHV0LCBhbmQgZm9ybWF0dGVkIG91dHB1dC4gSXQgc2F5cyBub3RoaW5nIGZvcgp1bmZvcm1hdHRlZCBvdXRwdXQgKDI3LjYuMi42KS4gMjcuNi4yLjYgc2hvdWxkIGVpdGhlciBpbmNsdWRlIHRoZSBzYW1lCmtpbmQgb2YgZXhjZXB0aW9uLWhhbmRsaW5nIHBvbGljeSBhcyBpbiB0aGUgb3RoZXIgdGhyZWUgcGxhY2VzLCBvcgplbHNlIGl0IHNob3VsZCBoYXZlIGEgZm9vdG5vdGUgc2F5aW5nIHRoYXQgdGhlIG9taXNzaW9uIGlzCmRlbGliZXJhdGUuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjcuNi4yLjYsIHBhcmFncmFwaCAxLCByZXBsYWNlIHRoZSBsYXN0IHNlbnRlbmNlICgiSW4gYW55CmNhc2UsIHRoZSB1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gZW5kcyBieSBkZXN0cm95aW5nIHRoZSBzZW50cnkKb2JqZWN0LCB0aGVuIHJldHVybmluZyB0aGUgdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgZm9ybWF0dGVkIG91dHB1dApmdW5jdGlvbi4iKSB3aXRoIHRoZSBmb2xsb3dpbmcgdGV4dDoKPC9wPgo8YmxvY2txdW90ZT4KSWYgYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgb3V0cHV0LCB0aGVuIDx0dD5pb3M6OmJhZGJpdDwvdHQ+IGlzCnR1cm5lZCBvbiBbRm9vdG5vdGU6IHdpdGhvdXQgY2F1c2luZyBhbiA8dHQ+aW9zOjpmYWlsdXJlPC90dD4gdG8gYmUKdGhyb3duLl0gaW4gPHR0Pip0aGlzPC90dD4ncyBlcnJvciBzdGF0ZS4gSWYgPHR0PihleGNlcHRpb25zKCkgJmFtcDsKYmFkYml0KSAhPSAwPC90dD4gdGhlbiB0aGUgZXhjZXB0aW9uIGlzIHJldGhyb3duLiAgSW4gYW55IGNhc2UsIHRoZQp1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb24gZW5kcyBieSBkZXN0cm95aW5nIHRoZSBzZW50cnkgb2JqZWN0LAp0aGVuLCBpZiBubyBleGNlcHRpb24gd2FzIHRocm93biwgcmV0dXJuaW5nIHRoZSB2YWx1ZSBzcGVjaWZpZWQgZm9yCnRoZSBmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9uLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBleGNlcHRpb24taGFuZGxpbmcgcG9saWN5IGlzIGNvbnNpc3RlbnQgd2l0aCB0aGF0IG9mIGZvcm1hdHRlZAppbnB1dCwgdW5mb3JtYXR0ZWQgaW5wdXQsIGFuZCBmb3JtYXR0ZWQgb3V0cHV0Lgo8L3A+Cjxocj4KPGEgbmFtZT0iNjQiPjxoMz42NC4mbmJzcDtFeGNlcHRpb24gaGFuZGxpbmcgaW4gPHR0PmJhc2ljX2lzdHJlYW06Om9wZXJhdG9yJmd0OyZndDsoYmFzaWNfc3RyZWFtYnVmKik8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEF1ZyAxOTk4IDwvcD4KPHA+MjcuNi4xLjIuMywgcGFyYWdyYXBoIDEzLCBpcyBhbWJpZ3VvdXMuIEl0IGNhbiBiZSBpbnRlcnByZXRlZCB0d28KZGlmZmVyZW50IHdheXMsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBzZWNvbmQgc2VudGVuY2UgaXMgcmVhZCBhcyBhbgplbGFib3JhdGlvbiBvZiB0aGUgZmlyc3QuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIDI3LjYuMS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OmV4dHJhY3RvcnMiPiBbbGliLmlzdHJlYW06OmV4dHJhY3RvcnNdPC9hPiwgcGFyYWdyYXBoIDEzLCB3aGljaCBiZWdpbnMKIklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMgLi4uIiB3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPklmIHRoZSBmdW5jdGlvbiBpbnNlcnRzIG5vIGNoYXJhY3RlcnMsIGl0IGNhbGxzCiAgPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4sIHdoaWNoIG1heSB0aHJvdwogIDx0dD5pb3NfYmFzZTo6ZmFpbHVyZTwvdHQ+ICgyNy40LjQuMykuIElmIGl0IGluc2VydGVkIG5vIGNoYXJhY3RlcnMKICBiZWNhdXNlIGl0IGNhdWdodCBhbiBleGNlcHRpb24gdGhyb3duIHdoaWxlIGV4dHJhY3RpbmcgY2hhcmFjdGVycwogIGZyb20gPHR0PnNiPC90dD4gYW5kIDx0dD5mYWlsYml0PC90dD4gaXMgb24gaW4gPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+CiAgKDI3LjQuNC4zKSwgdGhlbiB0aGUgY2F1Z2h0IGV4Y2VwdGlvbiBpcyByZXRocm93bi4gPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNjYiPjxoMz42Ni4mbmJzcDtTdHJzdHJlYW1idWY6OnNldGJ1ZjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFscyI+IFtkZXByLnN0cnN0cmVhbWJ1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOCBBdWcgMTk5ODwvcD4KPHA+RC43LjEuMywgcGFyYWdyYXBoIDE5LCBzYXlzIHRoYXQgc3Ryc3RyZWFtYnVmOjpzZXRidWYKIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzIGRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcwpkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIi4gVGhpcyBpcyBvYnZpb3VzbHkgYW4gaW5jb3JyZWN0CmN1dC1hbmQtcGFzdGUgZnJvbSBiYXNpY19zdHJlYW1idWYuIFRoZXJlIGFyZSBubyBjbGFzc2VzIGRlcml2ZWQgZnJvbQpzdHJzdHJlYW1idWYuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5ELjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHMiPiBbZGVwci5zdHJzdHJlYW1idWYudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDE5LCByZXBsYWNlIHRoZSBzZXRidWYgZWZmZWN0cwpjbGF1c2Ugd2hpY2ggY3VycmVudGx5IHNheXMgIlBlcmZvcm1zIGFuIG9wZXJhdGlvbiB0aGF0IGlzCmRlZmluZWQgc2VwYXJhdGVseSBmb3IgZWFjaCBjbGFzcyBkZXJpdmVkIGZyb20gc3Ryc3RyZWFtYnVmIgp3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPjxiPkVmZmVjdHM8L2I+OiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLCBleGNlcHQgdGhhdAogIDx0dD5zZXRidWYoMCwwKTwvdHQ+IGhhcyBubyBlZmZlY3QuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNjgiPjxoMz42OC4mbmJzcDtFeHRyYWN0b3JzIGZvciBjaGFyKiBzaG91bGQgc3RvcmUgbnVsbCBhdCBlbmQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEp1bCAxOTk4PC9wPgo8cD5FeHRyYWN0b3JzIGZvciBjaGFyKiAoMjcuNi4xLjIuMykgZG8gbm90IHN0b3JlIGEgbnVsbCBjaGFyYWN0ZXIKYWZ0ZXIgdGhlIGV4dHJhY3RlZCBjaGFyYWN0ZXIgc2VxdWVuY2Ugd2hlcmVhcyB0aGUgdW5mb3JtYXR0ZWQKZnVuY3Rpb25zIGxpa2UgZ2V0KCkgZG8uIFdoeSBpcyB0aGlzPzwvcD4KCjxwPkNvbW1lbnQgZnJvbSBKZXJyeSBTY2h3YXJ6OiBUaGVyZSBpcyBhcHBhcmVudGx5IGFuIGVkaXRpbmcKZ2xpdGNoLiBZb3UnbGwgbm90aWNlIHRoYXQgdGhlIGxhc3QgaXRlbSBvZiB0aGUgbGlzdCBvZiB3aGF0IHN0b3BzCmV4dHJhY3Rpb24gZG9lc24ndCBtYWtlIGFueSBzZW5zZS4gSXQgd2FzIHN1cHBvc2VkIHRvIGJlIHRoZSBsaW5lIHRoYXQKc2FpZCBhIG51bGwgaXMgc3RvcmVkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4yNy42LjEuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzIj4gW2xpYi5pc3RyZWFtOjpleHRyYWN0b3JzXTwvYT4sIHBhcmFncmFwaCA3LCBjaGFuZ2UgdGhlIGxhc3QgbGlzdAppdGVtIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgQSBudWxsIGJ5dGUgKDx0dD5jaGFyVCgpPC90dD4pIGluIHRoZSBuZXh0IHBvc2l0aW9uLCB3aGljaCBtYXkgYmUKICB0aGUgZmlyc3QgcG9zaXRpb24gaWYgbm8gY2hhcmFjdGVycyB3ZXJlIGV4dHJhY3RlZC4KPC9ibG9ja3F1b3RlPgoKPHA+dG8gYmVjb21lIGEgbmV3IHBhcmFncmFwaCB3aGljaCByZWFkczo8L3A+Cgo8YmxvY2txdW90ZT4KICBPcGVyYXRvciZndDsmZ3Q7IHRoZW4gc3RvcmVzIGEgbnVsbCBieXRlICg8dHQ+Y2hhclQoKTwvdHQ+KSBpbiB0aGUKICBuZXh0IHBvc2l0aW9uLCB3aGljaCBtYXkgYmUgdGhlIGZpcnN0IHBvc2l0aW9uIGlmIG5vIGNoYXJhY3RlcnMgd2VyZQogIGV4dHJhY3RlZC4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjY5Ij48aDM+NjkuJm5ic3A7TXVzdCBlbGVtZW50cyBvZiBhIHZlY3RvciBiZSBjb250aWd1b3VzPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3RvciI+IFtsaWIudmVjdG9yXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBKdWwgMTk5ODwvcD4KPHA+VGhlIGlzc3VlIGlzIHRoaXM6IE11c3QgdGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIGJlIGluIGNvbnRpZ3VvdXMgbWVtb3J5PzwvcD4KCjxwPihQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgaXMgZW50aXJlbHkgc2VwYXJhdGUgZnJvbSB0aGUgcXVlc3Rpb24gb2YKd2hldGhlciBhIHZlY3RvciBpdGVyYXRvciBpcyByZXF1aXJlZCB0byBiZSBhIHBvaW50ZXI7IHRoZSBhbnN3ZXIgdG8KdGhhdCBxdWVzdGlvbiBpcyBjbGVhcmx5ICJubywiIGFzIGl0IHdvdWxkIHJ1bGUgb3V0CmRlYnVnZ2luZyBpbXBsZW1lbnRhdGlvbnMpPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgdG8gdGhlIGVuZCBvZiAyMy4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi52ZWN0b3IiPiBbbGliLnZlY3Rvcl08L2E+LApwYXJhZ3JhcGggMS4gPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+VGhlIGVsZW1lbnRzIG9mIGEgdmVjdG9yIGFyZSBzdG9yZWQgY29udGlndW91c2x5LCBtZWFuaW5nIHRoYXQgaWYKICB2IGlzIGEgPHR0PnZlY3RvciZsdDtULCBBbGxvY2F0b3ImZ3Q7PC90dD4gd2hlcmUgVCBpcyBzb21lIHR5cGUKICBvdGhlciB0aGFuIDx0dD5ib29sPC90dD4sIHRoZW4gaXQgb2JleXMgdGhlIGlkZW50aXR5IDx0dD4mYW1wO3Zbbl0KICA9PSAmYW1wO3ZbMF0gKyBuPC90dD4gZm9yIGFsbCA8dHQ+MCAmbHQ7PSBuICZsdDsgdi5zaXplKCk8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgZmVlbHMgdGhhdCBhcyBhIHByYWN0aWNhbCBtYXR0ZXIgdGhlIGFuc3dlciBpcyBjbGVhcmx5CiJ5ZXMiLiAgVGhlcmUgd2FzIGNvbnNpZGVyYWJsZSBkaXNjdXNzaW9uIGFzIHRvIHRoZSBiZXN0IHdheQp0byBleHByZXNzIHRoZSBjb25jZXB0IG9mICJjb250aWd1b3VzIiwgd2hpY2ggaXMgbm90CmRpcmVjdGx5IGRlZmluZWQgaW4gdGhlIHN0YW5kYXJkLiAgRGlzY3Vzc2lvbiBpbmNsdWRlZDo8L3A+Cgo8dWw+CiAgPGxpPkFuIG9wZXJhdGlvbmFsIGRlZmluaXRpb24gc2ltaWxhciB0byB0aGUgYWJvdmUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyAKICAgIGFscmVhZHkgdXNlZCBmb3IgdmFsYXJyYXkgKDI2LjMuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LmFjY2VzcyI+IFtsaWIudmFsYXJyYXkuYWNjZXNzXTwvYT4pLjwvbGk+CiAgPGxpPlRoZXJlIGlzIG5vIG5lZWQgdG8gZXhwbGljaXRseSBjb25zaWRlciBhIHVzZXItZGVmaW5lZCBvcGVyYXRvciZhbXA7IAogICAgYmVjYXVzZSBlbGVtZW50cyBtdXN0IGJlIGNvcHljb25zdHJ1Y3RpYmxlICgyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmEgMykgCiAgICBhbmQgY29weWNvbnN0cnVjdGlibGUgKDIwLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuY29weWNvbnN0cnVjdGlibGUiPiBbbGliLmNvcHljb25zdHJ1Y3RpYmxlXTwvYT4pIHNwZWNpZmllcwogICAgcmVxdWlyZW1lbnRzIGZvciBvcGVyYXRvciZhbXA7LjwvbGk+CiAgPGxpPlRoZXJlIGlzIG5vIGlzc3VlIG9mIG9uZS1wYXN0LXRoZS1lbmQgYmVjYXVzZSBvZiBsYW5ndWFnZSBydWxlcy48L2xpPgo8L3VsPgo8aHI+CjxhIG5hbWU9IjcwIj48aDM+NzAuJm5ic3A7VW5jYXVnaHRfZXhjZXB0aW9uKCkgbWlzc2luZyB0aHJvdygpIHNwZWNpZmljYXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuc3VwcG9ydC5leGNlcHRpb24iPiBbbGliLnN1cHBvcnQuZXhjZXB0aW9uXTwvYT4sIDE4LjYuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnVuY2F1Z2h0Ij4gW2xpYi51bmNhdWdodF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7VW5rbm93bjwvcD4KPHA+SW4gYXJ0aWNsZSAzRTA0QHByYXRpcXVlLmZyLCBWYWxlbnRpbiBCb25uYXJkIHdyaXRlczogPC9wPgoKPHA+dW5jYXVnaHRfZXhjZXB0aW9uKCkgZG9lc24ndCBoYXZlIGEgdGhyb3cgc3BlY2lmaWNhdGlvbi48L3A+Cgo8cD5JdCBpcyBpbnRlbnRpb25hbCA/IERvZXMgaXQgbWVhbnMgdGhhdCBvbmUgc2hvdWxkIGJlIHByZXBhcmVkIHRvCmhhbmRsZSBleGNlcHRpb25zIHRocm93biBmcm9tIHVuY2F1Z2h0X2V4Y2VwdGlvbigpID88L3A+Cgo8cD51bmNhdWdodF9leGNlcHRpb24oKSBpcyBjYWxsZWQgaW4gZXhjZXB0aW9uIGhhbmRsaW5nIGNvbnRleHRzIHdoZXJlCmV4Y2VwdGlvbiBzYWZldHkgaXMgdmVyeSBpbXBvcnRhbnQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDE1LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2V4Y2VwdC5odG1sI2V4Y2VwdC51bmNhdWdodCI+IFtleGNlcHQudW5jYXVnaHRdPC9hPiwgcGFyYWdyYXBoIDEsIDE4LjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5zdXBwb3J0LmV4Y2VwdGlvbiI+IFtsaWIuc3VwcG9ydC5leGNlcHRpb25dPC9hPiwgYW5kIDE4LjYuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnVuY2F1Z2h0Ij4gW2xpYi51bmNhdWdodF08L2E+LCBhZGQgInRocm93KCkiIHRvIHVuY2F1Z2h0X2V4Y2VwdGlvbigpLjwvcD4KPGhyPgo8YSBuYW1lPSI3MSI+PGgzPjcxLiZuYnNwO0RvX2dldF9tb250aG5hbWUgc3lub3BzaXMgbWlzc2luZyBhcmd1bWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnRpbWUuZ2V0Ij4gW2xpYi5sb2NhbGUudGltZS5nZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgQXVnIDE5OTg8L3A+CjxwPlRoZSBsb2NhbGUgZmFjZXQgbWVtYmVyIDx0dD50aW1lX2dldCZsdDsmZ3Q7Ojpkb19nZXRfbW9udGhuYW1lPC90dD4KaXMgZGVzY3JpYmVkIGluIDIyLjIuNS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5nZXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS50aW1lLmdldC52aXJ0dWFsc108L2E+IHdpdGggZml2ZSBhcmd1bWVudHMsCmNvbnNpc3RlbnQgd2l0aCBkb19nZXRfd2Vla2RheSBhbmQgd2l0aCBpdHMgc3BlY2lmaWVkIHVzZSBieSBtZW1iZXIKZ2V0X21vbnRobmFtZS4gSG93ZXZlciwgaW4gdGhlIHN5bm9wc2lzLCBpdCBpcyBzcGVjaWZpZWQgaW5zdGVhZCB3aXRoCmZvdXIgYXJndW1lbnRzLiBUaGUgbWlzc2luZyBhcmd1bWVudCBpcyB0aGUgImVuZCIgaXRlcmF0b3IKdmFsdWUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnRpbWUuZ2V0Ij4gW2xpYi5sb2NhbGUudGltZS5nZXRdPC9hPiwgYWRkIGFuICJlbmQiIGFyZ3VtZW50IHRvCnRoZSBkZWNsYXJhdGlvbiBvZiBtZW1iZXIgZG9fbW9udGhuYW1lIGFzIGZvbGxvd3M6PC9wPgoKPHByZT4gIHZpcnR1YWwgaXRlcl90eXBlIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIHMsIGl0ZXJfdHlwZSBlbmQsIGlvc19iYXNlJmFtcDssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSZhbXA7IGVyciwgdG0qIHQpIGNvbnN0OzwvcHJlPgo8aHI+CjxhIG5hbWU9Ijc0Ij48aDM+NzQuJm5ic3A7R2FyYmxlZCB0ZXh0IGZvciA8dHQ+Y29kZWN2dDo6ZG9fbWF4X2xlbmd0aDwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OCBTZXAgMTk5ODwvcD4KPHA+VGhlIHRleHQgb2YgPHR0PmNvZGVjdnQ6OmRvX21heF9sZW5ndGg8L3R0PidzICJSZXR1cm5zIgpjbGF1c2UgKDIyLjIuMS41LjIsIHBhcmFncmFwaCAxMSkgaXMgZ2FyYmxlZC4gSXQgaGFzIHVuYmFsYW5jZWQKcGFyZW50aGVzZXMgYW5kIGEgc3B1cmlvdXMgPGI+bjwvYj4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2UgMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+IHBhcmFncmFwaCAxMSB3aXRoIHRoZQpmb2xsb3dpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPGI+UmV0dXJuczwvYj46IFRoZSBtYXhpbXVtIHZhbHVlIHRoYXQKICA8dHQ+ZG9fbGVuZ3RoKHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgMSk8L3R0PiBjYW4gcmV0dXJuIGZvciBhbnkKICB2YWxpZCByYW5nZSA8dHQ+W2Zyb20sIGZyb21fZW5kKTwvdHQ+IGFuZCA8dHQ+c3RhdGVUPC90dD4gdmFsdWUKICA8dHQ+c3RhdGU8L3R0Pi4gVGhlIHNwZWNpYWxpemF0aW9uIDx0dD5jb2RlY3Z0Jmx0O2NoYXIsIGNoYXIsCiAgbWJzdGF0ZV90Jmd0Ozo6ZG9fbWF4X2xlbmd0aCgpPC90dD4gcmV0dXJucyAxLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iNzUiPjxoMz43NS4mbmJzcDtDb250cmFkaWN0aW9uIGluIDx0dD5jb2RlY3Z0OjpsZW5ndGg8L3R0PidzIGFyZ3VtZW50IHR5cGVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dCI+IFtsaWIubG9jYWxlLmNvZGVjdnRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDsgTWF0dApBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOyAxOCBTZXAgMTk5ODwvcD4KPHA+VGhlIGNsYXNzIHN5bm9wc2VzIGZvciBjbGFzc2VzIDx0dD5jb2RlY3Z0Jmx0OyZndDs8L3R0PiAoMjIuMi4xLjUpCmFuZCA8dHQ+Y29kZWN2dF9ieW5hbWUmbHQ7Jmd0OzwvdHQ+ICgyMi4yLjEuNikgc2F5IHRoYXQgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0aGUgbWVtYmVyIGZ1bmN0aW9ucyA8dHQ+bGVuZ3RoPC90dD4gYW5kCjx0dD5kb19sZW5ndGg8L3R0PiBpcyBvZiB0eXBlIDx0dD5jb25zdCBzdGF0ZVQmYW1wOzwvdHQ+LiBUaGUgbWVtYmVyCmZ1bmN0aW9uIGRlc2NyaXB0aW9ucywgaG93ZXZlciAoMjIuMi4xLjUuMSwgcGFyYWdyYXBoIDY7IDIyLjIuMS41LjIsCnBhcmFncmFwaCA5KSBzYXkgdGhhdCB0aGUgdHlwZSBpcyA8dHQ+c3RhdGVUJmFtcDs8L3R0Pi4gIEVpdGhlciB0aGUKc3lub3BzaXMgb3IgdGhlIHN1bW1hcnkgbXVzdCBiZSBjaGFuZ2VkLiA8L3A+Cgo8cD5JZiAoYXMgSSBiZWxpZXZlKSB0aGUgbWVtYmVyIGZ1bmN0aW9uIGRlc2NyaXB0aW9ucyBhcmUgY29ycmVjdCwKdGhlbiB3ZSBtdXN0IGFsc28gYWRkIHRleHQgc2F5aW5nIGhvdyA8dHQ+ZG9fbGVuZ3RoPC90dD4gY2hhbmdlcyBpdHMKPHR0PnN0YXRlVDwvdHQ+IGFyZ3VtZW50LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dCI+IFtsaWIubG9jYWxlLmNvZGVjdnRdPC9hPiwgYW5kIGFsc28gaW4gMjIuMi4xLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+LApjaGFuZ2UgdGhlIDx0dD5zdGF0ZVQ8L3R0PiBhcmd1bWVudCB0eXBlIG9uIGJvdGggbWVtYmVyCjx0dD5sZW5ndGgoKTwvdHQ+IGFuZCBtZW1iZXIgPHR0PmRvX2xlbmd0aCgpPC90dD4gZnJvbSA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+Y29uc3Qgc3RhdGVUJmFtcDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+c3RhdGVUJmFtcDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+LCBhZGQgdG8gdGhlIGRlZmluaXRpb24gZm9yIG1lbWJlcgo8dHQ+ZG9fbGVuZ3RoPC90dD4gYSBwYXJhZ3JhcGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogVGhlIGVmZmVjdCBvbiB0aGUgPHR0PnN0YXRlPC90dD4gYXJndW1lbnQgaXMgYGBhcyBpZicnCiAgaXQgY2FsbGVkIDx0dD5kb19pbihzdGF0ZSwgZnJvbSwgZnJvbV9lbmQsIGZyb20sIHRvLCB0byttYXgsCiAgdG8pPC90dD4gZm9yIDx0dD50bzwvdHQ+IHBvaW50aW5nIHRvIGEgYnVmZmVyIG9mIGF0IGxlYXN0CiAgPHR0Pm1heDwvdHQ+IGVsZW1lbnRzLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9Ijc2Ij48aDM+NzYuJm5ic3A7Q2FuIGEgPHR0PmNvZGVjdnQ8L3R0PiBmYWNldCBhbHdheXMgY29udmVydCBvbmUgaW50ZXJuYWwgY2hhcmFjdGVyIGF0IGEgdGltZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0Ij4gW2xpYi5sb2NhbGUuY29kZWN2dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNSBTZXAgMTk5ODwvcD4KPHA+VGhpcyBpc3N1ZSBjb25jZXJucyB0aGUgcmVxdWlyZW1lbnRzIG9uIGNsYXNzZXMgZGVyaXZlZCBmcm9tCjx0dD5jb2RlY3Z0PC90dD4sIGluY2x1ZGluZyB1c2VyLWRlZmluZWQgY2xhc3Nlcy4gV2hhdCBhcmUgdGhlCnJlc3RyaWN0aW9ucyBvbiB0aGUgY29udmVyc2lvbiBmcm9tIGV4dGVybmFsIGNoYXJhY3RlcnMKKGUuZy4gPHR0PmNoYXI8L3R0PikgdG8gaW50ZXJuYWwgY2hhcmFjdGVycyAoZS5nLiA8dHQ+d2NoYXJfdDwvdHQ+KT8KT3IsIGFsdGVybmF0aXZlbHksIHdoYXQgYXNzdW1wdGlvbnMgYWJvdXQgPHR0PmNvZGVjdnQ8L3R0PiBmYWNldHMgY2FuCnRoZSBJL08gbGlicmFyeSBtYWtlPyA8L3A+Cgo8cD5UaGUgcXVlc3Rpb24gaXMgd2hldGhlciBpdCdzIHBvc3NpYmxlIHRvIGNvbnZlcnQgZnJvbSBpbnRlcm5hbApjaGFyYWN0ZXJzIHRvIGV4dGVybmFsIGNoYXJhY3RlcnMgb25lIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWUsCmFuZCB3aGV0aGVyLCBnaXZlbiBhIHZhbGlkIHNlcXVlbmNlIG9mIGV4dGVybmFsIGNoYXJhY3RlcnMsIGl0J3MKcG9zc2libGUgdG8gcGljayBvZmYgaW50ZXJuYWwgY2hhcmFjdGVycyBvbmUgYXQgYSB0aW1lLiBPciwgdG8gcHV0IGl0CmRpZmZlcmVudGx5OiBnaXZlbiBhIHNlcXVlbmNlIG9mIGV4dGVybmFsIGNoYXJhY3RlcnMgYW5kIHRoZQpjb3JyZXNwb25kaW5nIHNlcXVlbmNlIG9mIGludGVybmFsIGNoYXJhY3RlcnMsIGRvZXMgYSBwb3NpdGlvbiBpbiB0aGUKaW50ZXJuYWwgc2VxdWVuY2UgY29ycmVzcG9uZCB0byBzb21lIHBvc2l0aW9uIGluIHRoZSBleHRlcm5hbApzZXF1ZW5jZT8gPC9wPgoKPHA+VG8gbWFrZSB0aGlzIGNvbmNyZXRlLCBzdXBwb3NlIHRoYXQgPHR0PltmaXJzdCwgbGFzdCk8L3R0PiBpcyBhCnNlcXVlbmNlIG9mIDxpPk08L2k+IGV4dGVybmFsIGNoYXJhY3RlcnMgYW5kIHRoYXQgPHR0PltpZmlyc3QsCmlsYXN0KTwvdHQ+IGlzIHRoZSBjb3JyZXNwb25kaW5nIHNlcXVlbmNlIG9mIDxpPk48L2k+IGludGVybmFsCmNoYXJhY3RlcnMsIHdoZXJlIDxpPk4gJmd0OyAxPC9pPi4gVGhhdCBpcywgPHR0Pm15X2VuY29kaW5nLmluKCk8L3R0PiwKYXBwbGllZCB0byA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+LCB5aWVsZHMgPHR0PltpZmlyc3QsCmlsYXN0KTwvdHQ+LiBOb3cgdGhlIHF1ZXN0aW9uOiBkb2VzIHRoZXJlIG5lY2Vzc2FyaWx5IGV4aXN0IGEKc3Vic2VxdWVuY2Ugb2YgZXh0ZXJuYWwgY2hhcmFjdGVycywgPHR0PltmaXJzdCwgbGFzdF8xKTwvdHQ+LCBzdWNoCnRoYXQgdGhlIGNvcnJlc3BvbmRpbmcgc2VxdWVuY2Ugb2YgaW50ZXJuYWwgY2hhcmFjdGVycyBpcyB0aGUgc2luZ2xlCmNoYXJhY3RlciA8dHQ+KmlmaXJzdDwvdHQ+Pwo8L3A+Cgo8cD4oV2hhdCBhICJubyIgYW5zd2VyIHdvdWxkIG1lYW4gaXMgdGhhdAo8dHQ+bXlfZW5jb2Rpbmc8L3R0PiB0cmFuc2xhdGVzIHNlcXVlbmNlcyBvbmx5IGFzIGJsb2Nrcy4gVGhlcmUncyBhCnNlcXVlbmNlIG9mIDxpPk08L2k+IGV4dGVybmFsIGNoYXJhY3RlcnMgdGhhdCBtYXBzIHRvIGEgc2VxdWVuY2Ugb2YKPGk+TjwvaT4gaW50ZXJuYWwgY2hhcmFjdGVycywgYnV0IHRoYXQgZXh0ZXJuYWwgc2VxdWVuY2UgaGFzIG5vCnN1YnNlcXVlbmNlIHRoYXQgbWFwcyB0byA8aT5OLTE8L2k+IGludGVybmFsIGNoYXJhY3RlcnMuKSA8L3A+Cgo8cD5Tb21lIG9mIHRoZSB3b3JkaW5nIGluIHRoZSBzdGFuZGFyZCwgc3VjaCBhcyB0aGUgZGVzY3JpcHRpb24gb2YKPHR0PmNvZGVjdnQ6OmRvX21heF9sZW5ndGg8L3R0PiAoMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+LApwYXJhZ3JhcGggMTEpIGFuZCA8dHQ+YmFzaWNfZmlsZWJ1Zjo6dW5kZXJmbG93PC90dD4gKDI3LjguMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLnZpcnR1YWxzIj4gW2xpYi5maWxlYnVmLnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCAzKSBzdWdnZXN0cyB0aGF0IGl0IG11c3QgYWx3YXlzIGJlCnBvc3NpYmxlIHRvIHBpY2sgb2ZmIGludGVybmFsIGNoYXJhY3RlcnMgb25lIGF0IGEgdGltZSBmcm9tIGEgc2VxdWVuY2UKb2YgZXh0ZXJuYWwgY2hhcmFjdGVycy4gSG93ZXZlciwgdGhpcyBpcyBuZXZlciBleHBsaWNpdGx5IHN0YXRlZCBvbmUKd2F5IG9yIHRoZSBvdGhlci4gPC9wPgoKPHA+VGhpcyBpc3N1ZSBzZWVtcyAoYW5kIGlzKSBxdWl0ZSB0ZWNobmljYWwsIGJ1dCBpdCBpcyBpbXBvcnRhbnQgaWYKd2UgZXhwZWN0IHVzZXJzIHRvIHByb3ZpZGUgdGhlaXIgb3duIGVuY29kaW5nIGZhY2V0cy4gVGhpcyBpcyBhbiBhcmVhCndoZXJlIHRoZSBzdGFuZGFyZCBsaWJyYXJ5IGNhbGxzIHVzZXItc3VwcGxpZWQgY29kZSwgc28gYSB3ZWxsLWRlZmluZWQKc2V0IG9mIHJlcXVpcmVtZW50cyBmb3IgdGhlIHVzZXItc3VwcGxpZWQgY29kZSBpcyBjcnVjaWFsLiBVc2VycyBtdXN0CmJlIGF3YXJlIG9mIHRoZSBhc3N1bXB0aW9ucyB0aGF0IHRoZSBsaWJyYXJ5IG1ha2VzLiBUaGlzIGlzc3VlIGFmZmVjdHMKcG9zaXRpb25pbmcgb3BlcmF0aW9ucyBvbiA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+LCB1bmJ1ZmZlcmVkIGlucHV0LAphbmQgc2V2ZXJhbCBvZiA8dHQ+Y29kZWN2dDwvdHQ+J3MgbWVtYmVyIGZ1bmN0aW9ucy4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0aGUgZm9sbG93aW5nIHRleHQgYXMgYSBuZXcgcGFyYWdyYXBoLCBmb2xsb3dpbmcgMjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+IHBhcmFncmFwaCAyOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5BIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgdGhhdCBpcyB1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4KKDI3LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGUuc3RyZWFtcyI+IFtsaWIuZmlsZS5zdHJlYW1zXTwvYT4pIG11c3QgaGF2ZSB0aGUgcHJvcGVydHkgdGhhdCBpZjwvcD4KPHByZT4gICAgZG9fb3V0KHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgZnJvbV9uZXh0LCB0bywgdG9fbGltLCB0b19uZXh0KQo8L3ByZT4Kd291bGQgcmV0dXJuIDx0dD5vazwvdHQ+LCB3aGVyZSA8dHQ+ZnJvbSAhPSBmcm9tX2VuZDwvdHQ+LCB0aGVuIAo8cHJlPiAgICBkb19vdXQoc3RhdGUsIGZyb20sIGZyb20gKyAxLCBmcm9tX25leHQsIHRvLCB0b19lbmQsIHRvX25leHQpCjwvcHJlPgptdXN0IGFsc28gcmV0dXJuIDx0dD5vazwvdHQ+LCBhbmQgdGhhdCBpZgo8cHJlPiAgICBkb19pbihzdGF0ZSwgZnJvbSwgZnJvbV9lbmQsIGZyb21fbmV4dCwgdG8sIHRvX2xpbSwgdG9fbmV4dCkKPC9wcmU+CndvdWxkIHJldHVybiA8dHQ+b2s8L3R0Piwgd2hlcmUgPHR0PnRvICE9IHRvX2xpbTwvdHQ+LCB0aGVuCjxwcmU+ICAgIGRvX2luKHN0YXRlLCBmcm9tLCBmcm9tX2VuZCwgZnJvbV9uZXh0LCB0bywgdG8gKyAxLCB0b19uZXh0KQo8L3ByZT4KPHA+bXVzdCBhbHNvIHJldHVybiA8dHQ+b2s8L3R0Pi4gIFs8aT5Gb290bm90ZTo8L2k+IEluZm9ybWFsbHksIHRoaXMKbWVhbnMgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IGFzc3VtZXMgdGhhdCB0aGUgbWFwcGluZyBmcm9tCmludGVybmFsIHRvIGV4dGVybmFsIGNoYXJhY3RlcnMgaXMgMSB0byBOOiBhIDx0dD5jb2RlY3Z0PC90dD4gdGhhdCBpcwp1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4gbXVzdCBiZSBhYmxlIHRvIHRyYW5zbGF0ZSBjaGFyYWN0ZXJzCm9uZSBpbnRlcm5hbCBjaGFyYWN0ZXIgYXQgYSB0aW1lLiAgPGk+LS1FbmQgRm9vdG5vdGU8L2k+XTwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IE1pbm9yIGNoYW5nZSBpbiBwcm9wb3NlZCByZXNvbHV0aW9uLiAgT3JpZ2luYWwKcHJvcG9zZWQgcmVzb2x1dGlvbiB0YWxrZWQgYWJvdXQgInN1Y2Nlc3MiLCB3aXRoIGEgcGFyZW50aGV0aWNhbApjb21tZW50IHRoYXQgc3VjY2VzcyBtZWFudCByZXR1cm5pbmcgPHR0Pm9rPC90dD4uICBOZXcgd29yZGluZwpyZW1vdmVzIGFsbCB0YWxrIGFib3V0ICJzdWNjZXNzIiwgYW5kIGp1c3QgdGFsa3MgYWJvdXQgdGhlCnJldHVybiB2YWx1ZS5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgoKICA8cD5UaGUgcHJvcG9zZWQgcmVzb2x1aW9uIHNheXMgdGhhdCBjb252ZXJzaW9ucyBjYW4gYmUgcGVyZm9ybWVkIG9uZQogIGludGVybmFsIGNoYXJhY3RlciBhdCBhIHRpbWUuICBUaGlzIHJ1bGVzIG91dCBzb21lIGVuY29kaW5ncyB0aGF0CiAgd291bGQgb3RoZXJ3aXNlIGJlIGxlZ2FsLiAgVGhlIGFsdGVybmF0aXZlIGFuc3dlciB3b3VsZCBtZWFuIHRoZXJlCiAgd291bGQgYmUgc29tZSBpbnRlcm5hbCBwb3NpdGlvbnMgdGhhdCBkbyBub3QgY29ycmVzcG9uZCB0byBhbnkKICBleHRlcm5hbCBmaWxlIHBvc2l0aW9uLjwvcD4KICA8cD4KICBBbiBleGFtcGxlIG9mIGFuIGVuY29kaW5nIHRoYXQgdGhpcyBydWxlcyBvdXQgaXMgb25lIHdoZXJlIHRoZQogIDx0dD5pbnRlcm5UPC90dD4gYW5kIDx0dD5leHRlcm5UPC90dD4gYXJlIG9mIHRoZSBzYW1lIHR5cGUsIGFuZAogIHdoZXJlIHRoZSBpbnRlcm5hbCBzZXF1ZW5jZSA8dHQ+YzEgYzI8L3R0PiBjb3JyZXNwb25kcyB0byB0aGUKICBleHRlcm5hbCBzZXF1ZW5jZSA8dHQ+YzIgYzE8L3R0Pi4KICA8L3A+CiAgPHA+SXQgd2FzIGdlbmVyYWxseSBhZ3JlZWQgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IHJlbGllcwogIG9uIHRoaXMgcHJvcGVydHk6IGl0IHdhcyBkZXNpZ25lZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0CiAgdGhlIGV4dGVybmFsLXRvLWludGVybmFsIG1hcHBpbmcgaXMgTi10by0xLCBhbmQgaXQgaXMgbm90IGNsZWFyCiAgdGhhdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IGlzIGltcGxlbWVudGFibGUgd2l0aG91dCB0aGF0IAogIHJlc3RyaWN0aW9uLgogIDwvcD4KICA8cD4KICBUaGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBleHByZXNzZWQgYXMgYSByZXN0cmljdGlvbiBvbgogIDx0dD5jb2RlY3Z0PC90dD4gd2hlbiB1c2VkIGJ5IDx0dD5iYXNpY19maWxlYnVmPC90dD4sIHJhdGhlcgogIHRoYW4gYSBibGFua2V0IHJlc3RyaWN0aW9uIG9uIGFsbCA8dHQ+Y29kZWN2dDwvdHQ+IGZhY2V0cywKICBiZWNhdXNlIDx0dD5iYXNpY19maWxlYnVmPC90dD4gaXMgdGhlIG9ubHkgb3RoZXIgcGFydCBvZiB0aGUgCiAgbGlicmFyeSB0aGF0IHVzZXMgPHR0PmNvZGVjdnQ8L3R0Pi4gIElmIGEgdXNlciB3YW50cyB0byBkZWZpbmUKICBhIDx0dD5jb2RlY3Z0PC90dD4gZmFjZXQgdGhhdCBpbXBsZW1lbnRzIGEgbW9yZSBnZW5lcmFsIE4tdG8tTQogIG1hcHBpbmcsIHRoZXJlIGlzIG5vIHJlYXNvbiB0byBwcm9oaWJpdCBpdCwgc28gbG9uZyBhcyB0aGUgdXNlcgogIGRvZXMgbm90IGV4cGVjdCA8dHQ+YmFzaWNfZmlsZWJ1ZjwvdHQ+IHRvIGJlIGFibGUgdG8gdXNlIGl0LgogIDwvcD4KPGhyPgo8YSBuYW1lPSI3OCI+PGgzPjc4LiZuYnNwO1R5cG86IGV2ZW50X2NhbGxfYmFjazwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UiPiBbbGliLmlvcy5iYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+dHlwbzogZXZlbnRfY2FsbF9iYWNrIHNob3VsZCBiZSBldmVudF9jYWxsYmFjayAmbmJzcDsgPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSAyNy40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlIj4gW2xpYi5pb3MuYmFzZV08L2E+IHN5bm9wc2lzIGNoYW5nZQoiZXZlbnRfY2FsbF9iYWNrIiB0byAiZXZlbnRfY2FsbGJhY2siLiA8L3A+Cjxocj4KPGEgbmFtZT0iNzkiPjxoMz43OS4mbmJzcDtJbmNvbnNpc3RlbnQgZGVjbGFyYXRpb24gb2YgcG9sYXIoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4LnN5bm9wc2lzIj4gW2xpYi5jb21wbGV4LnN5bm9wc2lzXTwvYT4sIDI2LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4LnZhbHVlLm9wcyI+IFtsaWIuY29tcGxleC52YWx1ZS5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5JbiAyNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5zeW5vcHNpcyI+IFtsaWIuY29tcGxleC5zeW5vcHNpc108L2E+IHBvbGFyIGlzIGRlY2xhcmVkIGFzIGZvbGxvd3M6PC9wPgo8cHJlPiAgIHRlbXBsYXRlJmx0O2NsYXNzIFQmZ3Q7IGNvbXBsZXgmbHQ7VCZndDsgcG9sYXIoY29uc3QgVCZhbXA7LCBjb25zdCBUJmFtcDspOyA8L3ByZT4KCjxwPkluIDI2LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4LnZhbHVlLm9wcyI+IFtsaWIuY29tcGxleC52YWx1ZS5vcHNdPC9hPiBpdCBpcyBkZWNsYXJlZCBhcyBmb2xsb3dzOjwvcD4KPHByZT4gICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBjb21wbGV4Jmx0O1QmZ3Q7IHBvbGFyKGNvbnN0IFQmYW1wOyByaG8sIGNvbnN0IFQmYW1wOyB0aGV0YSA9IDApOyA8L3ByZT4KCjxwPlRodXMgd2hldGhlciB0aGUgc2Vjb25kIHBhcmFtZXRlciBpcyBvcHRpb25hbCBpcyBub3QgY2xlYXIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29tcGxleC5zeW5vcHNpcyI+IFtsaWIuY29tcGxleC5zeW5vcHNpc108L2E+IGNoYW5nZTo8L3A+CjxwcmU+ICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgY29tcGxleCZsdDtUJmd0OyBwb2xhcihjb25zdCBUJmFtcDssIGNvbnN0IFQmYW1wOyk7PC9wcmU+Cgo8cD50bzo8L3A+CjxwcmU+ICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgY29tcGxleCZsdDtUJmd0OyBwb2xhcihjb25zdCBUJmFtcDsgcmhvLCBjb25zdCBUJmFtcDsgdGhldGEgPSAwKTsgPC9wcmU+Cjxocj4KPGEgbmFtZT0iODAiPjwvYT48aDM+PGEgbmFtZT0iODAiPjgwLiZuYnNwO0dsb2JhbCBPcGVyYXRvcnMgb2YgY29tcGxleCBkZWNsYXJlZCB0d2ljZTwvYT48L2gzPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4LnN5bm9wc2lzIj4gW2xpYi5jb21wbGV4LnN5bm9wc2lzXTwvYT4sIDI2LjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4Ij4gW2xpYi5jb21wbGV4XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+Qm90aCAyNi4yLjEgYW5kIDI2LjIuMiBjb250YWluIGRlY2xhcmF0aW9ucyBvZiBnbG9iYWwgb3BlcmF0b3JzIGZvcgpjbGFzcyBjb21wbGV4LiBUaGlzIHJlZHVuZGFuY3kgc2hvdWxkIGJlIHJlbW92ZWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlZHVjZSByZWR1bmRhbmN5IGFjY29yZGluZyB0byB0aGUgZ2VuZXJhbCBzdHlsZSBvZiB0aGUgc3RhbmRhcmQuIDwvcD4KPGhyPgo8YSBuYW1lPSI4MyI+PGgzPjgzLiZuYnNwO1N0cmluZzo6bnBvcyB2cy4gc3RyaW5nOjptYXhfc2l6ZSgpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+TWFueSBzdHJpbmcgbWVtYmVyIGZ1bmN0aW9ucyB0aHJvdyBpZiBzaXplIGlzIGdldHRpbmcgb3IgZXhjZWVkaW5nCm5wb3MuIEhvd2V2ZXIsIEkgd29uZGVyIHdoeSB0aGV5IGRvbid0IHRocm93IGlmIHNpemUgaXMgZ2V0dGluZyBvcgpleGNlZWRpbmcgbWF4X3NpemUoKSBpbnN0ZWFkIG9mIG5wb3MuICBNYXkgYmUgbnBvcyBpcyBrbm93biBhdCBjb21waWxlCnRpbWUsIHdoaWxlIG1heF9zaXplKCkgaXMga25vd24gYXQgcnVudGltZS4gSG93ZXZlciwgd2hhdCBoYXBwZW5zIGlmCnNpemUgZXhjZWVkcyBtYXhfc2l6ZSgpIGJ1dCBub3QgbnBvcywgdGhlbj8gSXQgc2VlbXMgdGhlIHN0YW5kYXJkCmxhY2tzIHNvbWUgY2xhcmlmaWNhdGlvbnMgaGVyZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWZ0ZXIgMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4gcGFyYWdyYXBoIDQgKCJUaGUgZnVuY3Rpb25zCmRlc2NyaWJlZCBpbiB0aGlzIGNsYXVzZS4uLiIpIGFkZCBhIG5ldyBwYXJhZ3JhcGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Rm9yIGFueSBzdHJpbmcgb3BlcmF0aW9uLCBpZiBhcyBhIHJlc3VsdCBvZiB0aGUgb3BlcmF0aW9uLCA8dHQ+IHNpemUoKTwvdHQ+IHdvdWxkIGV4Y2VlZAogIDx0dD4gbWF4X3NpemUoKTwvdHQ+IHRoZW4KICB0aGUgb3BlcmF0aW9uIHRocm93cyA8dHQ+bGVuZ3RoX2Vycm9yPC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGJlbGlldmVzIGxlbmd0aF9lcnJvciBpcyB0aGUgY29ycmVjdCBleGNlcHRpb24gdG8gdGhyb3cuPC9wPgo8aHI+CjxhIG5hbWU9Ijg2Ij48aDM+ODYuJm5ic3A7U3RyaW5nIGNvbnN0cnVjdG9ycyBkb24ndCBkZXNjcmliZSBleGNlcHRpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmNvbnMiPiBbbGliLnN0cmluZy5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+VGhlIGNvbnN0cnVjdG9yIGZyb20gYSByYW5nZTo8L3A+Cgo8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIElucHV0SXRlcmF0b3ImZ3Q7IAogICAgICAgICBiYXNpY19zdHJpbmcoSW5wdXRJdGVyYXRvciBiZWdpbiwgSW5wdXRJdGVyYXRvciBlbmQsIAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgQWxsb2NhdG9yJmFtcDsgYSA9IEFsbG9jYXRvcigpKTs8L3ByZT4KCjxwPmxhY2tzIGEgdGhyb3dzIGNsYXVzZS4gSG93ZXZlciwgSSB3b3VsZCBleHBlY3QgdGhhdCBpdCB0aHJvd3MKYWNjb3JkaW5nIHRvIHRoZSBvdGhlciBjb25zdHJ1Y3RvcnMgaWYgdGhlIG51bWJlcnMgb2YgY2hhcmFjdGVycyBpbgp0aGUgcmFuZ2UgZXF1YWxzIG5wb3MgKG9yIGV4Y2VlZHMgbWF4X3NpemUoKSwgc2VlIGFib3ZlKS4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5jb25zIj4gW2xpYi5zdHJpbmcuY29uc108L2E+LCBTdHJpa2UgdGhyb3dzIHBhcmFncmFwaHMgZm9yCmNvbnN0cnVjdG9ycyB3aGljaCBzYXkgIlRocm93czogbGVuZ3RoX2Vycm9yIGlmIG4gPT0KbnBvcy4iPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhyb3dzIGNsYXVzZXMgZm9yIGxlbmd0aF9lcnJvciBpZiBuID09IG5wb3MgYXJlIG5vIGxvbmdlciBuZWVkZWQKYmVjYXVzZSB0aGV5IGFyZSBzdWJzdW1lZCBieSB0aGUgZ2VuZXJhbCB3b3JkaW5nIGFkZGVkIGJ5IHRoZQpyZXNvbHV0aW9uIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjODMiPjgzPC9hPi48L3A+Cjxocj4KPGEgbmFtZT0iOTAiPjxoMz45MC4mbmJzcDtJbmNvcnJlY3QgZGVzY3JpcHRpb24gb2Ygb3BlcmF0b3IgJmd0OyZndDsgZm9yIHN0cmluZ3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOSBTZXAgMTk5ODwvcD4KPHA+VGhlIGVmZmVjdCBvZiBvcGVyYXRvciAmZ3Q7Jmd0OyBmb3Igc3RyaW5ncyBjb250YWluIHRoZSBmb2xsb3dpbmcgaXRlbTo8L3A+Cgo8cD4mbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlzc3BhY2UoYyxnZXRsb2MoKSk8L3R0PiBpcyB0cnVlIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQKY2hhcmFjdGVyIGMuPC9wPgoKPHA+SGVyZSA8dHQ+Z2V0bG9jKCk8L3R0PiBoYXMgdG8gYmUgcmVwbGFjZWQgYnkgPHR0PmlzLmdldGxvYygpPC90dD4uIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4gcGFyYWdyYXBoIDEgRWZmZWN0cyBjbGF1c2UgcmVwbGFjZTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD48dHQ+aXNzcGFjZShjLGdldGxvYygpKTwvdHQ+IGlzIHRydWUgZm9yIHRoZSBuZXh0IGF2YWlsYWJsZSBpbnB1dCBjaGFyYWN0ZXIgYy48L3A+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PHR0Pmlzc3BhY2UoYyxpcy5nZXRsb2MoKSk8L3R0PiBpcyB0cnVlIGZvciB0aGUgbmV4dCBhdmFpbGFibGUgaW5wdXQgY2hhcmFjdGVyIGMuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iOTEiPjxoMz45MS4mbmJzcDtEZXNjcmlwdGlvbiBvZiBvcGVyYXRvciZndDsmZ3Q7IGFuZCBnZXRsaW5lKCkgZm9yIHN0cmluZyZsdDsmZ3Q7IG1pZ2h0IGNhdXNlIGVuZGxlc3MgbG9vcDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOaWNvIEpvc3V0dGlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IFNlcCAxOTk4PC9wPgo8cD5PcGVyYXRvciAmZ3Q7Jmd0OyBhbmQgZ2V0bGluZSgpIGZvciBzdHJpbmdzIHJlYWQgdW50aWwgZW9mKCkKaW4gdGhlIGlucHV0IHN0cmVhbSBpcyB0cnVlLiBIb3dldmVyLCB0aGlzIG1pZ2h0IG5ldmVyIGhhcHBlbiwgaWYgdGhlCnN0cmVhbSBjYW4ndCByZWFkIGFueW1vcmUgd2l0aG91dCByZWFjaGluZyBFT0YuIFNvIHNob3VsZG4ndCBpdCBiZQpjaGFuZ2VkIGludG8gdGhhdCBpdCByZWFkcyB1bnRpbCAhZ29vZCgpID8gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiwgcGFyYWdyYXBoIDEsIHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBrIHdlcmUKY29uc3RydWN0ZWQgYnkgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7OjpzZW50cnkgayggaXMpLiBJZgpib29sKCBrKSBpcyB0cnVlLCBpdCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cyBjaGFyYWN0ZXJzCmZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZyBzdHIuYXBwZW5kKDEsIGMpLiBJZgppcy53aWR0aCgpIGlzIGdyZWF0ZXIgdGhhbiB6ZXJvLCB0aGUgbWF4aW11bSBudW1iZXIgbiBvZiBjaGFyYWN0ZXJzCmFwcGVuZGVkIGlzIGlzLndpZHRoKCk7IG90aGVyd2lzZSBuIGlzIHN0ci5tYXhfc2l6ZSgpLiBDaGFyYWN0ZXJzIGFyZQpleHRyYWN0ZWQgYW5kIGFwcGVuZGVkIHVudGlsIGFueSBvZiB0aGUgZm9sbG93aW5nIG9jY3VyczoKPC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KPGJsb2NrcXVvdGU+CkVmZmVjdHM6IEJlaGF2ZXMgYXMgYSBmb3JtYXR0ZWQgaW5wdXQgZnVuY3Rpb24gKDI3LjYuMS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4pLiAgQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgdGhlCnNlbnRyeSBjb252ZXJ0cyB0byB0cnVlLCBjYWxscyBzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cwpjaGFyYWN0ZXJzIGZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0byBzdHIgYXMgaWYgYnkgY2FsbGluZwpzdHIuYXBwZW5kKDEsYykuIElmIGlzLndpZHRoKCkgaXMgZ3JlYXRlciB0aGFuIHplcm8sIHRoZSBtYXhpbXVtCm51bWJlciBuIG9mIGNoYXJhY3RlcnMgYXBwZW5kZWQgaXMgaXMud2lkdGgoKTsgb3RoZXJ3aXNlIG4gaXMKc3RyLm1heF9zaXplKCkuIENoYXJhY3RlcnMgYXJlIGV4dHJhY3RlZCBhbmQgYXBwZW5kZWQgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4sIHBhcmFncmFwaCA2LCByZXBsYWNlPC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVnaW5zIGJ5IGNvbnN0cnVjdGluZyBhIHNlbnRyeSBvYmplY3QgayBhcyBpZiBieSB0eXBlbmFtZQpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDs6OnNlbnRyeSBrKCBpcywgdHJ1ZSkuIElmIGJvb2woIGspIGlzIHRydWUsCml0IGNhbGxzIHN0ci5lcmFzZSgpIGFuZCB0aGVuIGV4dHJhY3RzIGNoYXJhY3RlcnMgZnJvbSBpcyBhbmQgYXBwZW5kcwp0aGVtIHRvIHN0ciBhcyBpZiBieSBjYWxsaW5nIHN0ci5hcHBlbmQoMSwgYykgdW50aWwgYW55IG9mIHRoZQpmb2xsb3dpbmcgb2NjdXJzOgo8L2Jsb2NrcXVvdGU+CjxwPndpdGg6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIGV4Y2VwdCB0aGF0IGl0IGRvZXMgbm90IGFmZmVjdCB0aGUgdmFsdWUgcmV0dXJuZWQKYnkgc3Vic2VxdWVudCBjYWxscyB0byBiYXNpY19pc3RyZWFtJmx0OyZndDs6Omdjb3VudCgpLiAgQWZ0ZXIKY29uc3RydWN0aW5nIGEgc2VudHJ5IG9iamVjdCwgaWYgdGhlIHNlbnRyeSBjb252ZXJ0cyB0byB0cnVlLCBjYWxscwpzdHIuZXJhc2UoKSBhbmQgdGhlbiBleHRyYWN0cyBjaGFyYWN0ZXJzIGZyb20gaXMgYW5kIGFwcGVuZHMgdGhlbSB0bwpzdHIgYXMgaWYgYnkgY2FsbGluZyBzdHIuYXBwZW5kKDEsYykgdW50aWwgYW55IG9mIHRoZSBmb2xsb3dpbmcKb2NjdXJzOgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogTWFkZSBjaGFuZ2VzIGluIHByb3Bvc2VkIHJlc29sdXRpb24uICA8dHQ+b3BlcmF0b3ImZ3Q7Jmd0OzwvdHQ+CnNob3VsZCBiZSBhIGZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiwgbm90IGFuIHVuZm9ybWF0dGVkIGlucHV0IGZ1bmN0aW9uLgo8dHQ+Z2V0bGluZTwvdHQ+IHNob3VsZCBub3QgYmUgcmVxdWlyZWQgdG8gc2V0IDx0dD5nY291bnQ8L3R0Piwgc2luY2UKdGhlcmUgaXMgbm8gbWVjaGFuaXNtIGZvciA8dHQ+Z2NvdW50PC90dD4gdG8gYmUgc2V0IGV4Y2VwdCBieSBvbmUgb2YKPHR0PmJhc2ljX2lzdHJlYW08L3R0PidzIG1lbWJlciBmdW5jdGlvbnMuXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogTmljbyBhZ3JlZXMgd2l0aCBwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSByZWFsIGlzc3VlIGhlcmUgaXMgd2hldGhlciBvciBub3QgdGhlc2Ugc3RyaW5nIGlucHV0IGZ1bmN0aW9ucwpnZXQgdGhlaXIgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLCByYXRoZXIgdGhhbiBieSBjYWxsaW5nIGFuCmlzdHJlYW0ncyBtZW1iZXIgZnVuY3Rpb25zLCBhIHN0cmVhbWJ1ZiBzaWduYWxzIGZhaWx1cmUgZWl0aGVyIGJ5CnJldHVybmluZyBlb2Ygb3IgYnkgdGhyb3dpbmcgYW4gZXhjZXB0aW9uOyB0aGVyZSBhcmUgbm8gb3RoZXIKcG9zc2liaWxpdGllcy4gIFRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIG1ha2VzIGl0IGNsZWFyIHRoYXQgdGhlc2UgdHdvCmZ1bmN0aW9ucyBkbyBnZXQgY2hhcmFjdGVycyBmcm9tIGEgc3RyZWFtYnVmLjwvcD4KPGhyPgo8YSBuYW1lPSI5MiI+PGgzPjkyLiZuYnNwO0luY29tcGxldGUgQWxnb3JpdGhtIFJlcXVpcmVtZW50czwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05pY28gSm9zdXR0aXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjkgU2VwIDE5OTg8L3A+CjxwPlRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzdGF0ZSwgaG93IG9mdGVuIGEgZnVuY3Rpb24gb2JqZWN0IGlzIGNvcGllZCwKY2FsbGVkLCBvciB0aGUgb3JkZXIgb2YgY2FsbHMgaW5zaWRlIGFuIGFsZ29yaXRobS4gVGhpcyBtYXkgbGVhZCB0bwpzdXJwcmlzaW5nL2J1Z2d5IGJlaGF2aW9yLiBDb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6IDwvcD4KCjxwcmU+Y2xhc3MgTnRoIHsgICAgLy8gZnVuY3Rpb24gb2JqZWN0IHRoYXQgcmV0dXJucyB0cnVlIGZvciB0aGUgbnRoIGVsZW1lbnQgCiAgcHJpdmF0ZTogCiAgICBpbnQgbnRoOyAgICAgLy8gZWxlbWVudCB0byByZXR1cm4gdHJ1ZSBmb3IgCiAgICBpbnQgY291bnQ7ICAgLy8gZWxlbWVudCBjb3VudGVyIAogIHB1YmxpYzogCiAgICBOdGggKGludCBuKSA6IG50aChuKSwgY291bnQoMCkgeyAKICAgIH0gCiAgICBib29sIG9wZXJhdG9yKCkgKGludCkgeyAKICAgICAgICByZXR1cm4gKytjb3VudCA9PSBudGg7IAogICAgfSAKfTsgCi4uLi4gCi8vIHJlbW92ZSB0aGlyZCBlbGVtZW50IAogICAgbGlzdCZsdDtpbnQmZ3Q7OjppdGVyYXRvciBwb3M7IAogICAgcG9zID0gcmVtb3ZlX2lmKGNvbGwuYmVnaW4oKSxjb2xsLmVuZCgpLCAgLy8gcmFuZ2UgCiAgICAgICAgICAgICAgICAgICAgTnRoKDMpKSwgICAgICAgICAgICAgICAgICAvLyByZW1vdmUgY3JpdGVyaW9uIAogICAgY29sbC5lcmFzZShwb3MsY29sbC5lbmQoKSk7IDwvcHJlPgoKPHA+VGhpcyBjYWxsLCBpbiBmYWN0IHJlbW92ZXMgdGhlIDNyZCA8Yj5BTkQgdGhlIDZ0aDwvYj4gZWxlbWVudC4gVGhpcwpoYXBwZW5zIGJlY2F1c2UgdGhlIHVzdWFsIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhbGdvcml0aG0gY29waWVzIHRoZQpmdW5jdGlvbiBvYmplY3QgaW50ZXJuYWxseTogPC9wPgoKPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgRm9yd0l0ZXIsIGNsYXNzIFByZWRpY2F0ZSZndDsgCkZvcndJdGVyIHN0ZDo6cmVtb3ZlX2lmKEZvcndJdGVyIGJlZywgRm9yd0l0ZXIgZW5kLCBQcmVkaWNhdGUgb3ApIAp7IAogICAgYmVnID0gZmluZF9pZihiZWcsIGVuZCwgb3ApOyAKICAgIGlmIChiZWcgPT0gZW5kKSB7IAogICAgICAgIHJldHVybiBiZWc7IAogICAgfSAKICAgIGVsc2UgeyAKICAgICAgICBGb3J3SXRlciBuZXh0ID0gYmVnOyAKICAgICAgICByZXR1cm4gcmVtb3ZlX2NvcHlfaWYoKytuZXh0LCBlbmQsIGJlZywgb3ApOyAKICAgIH0gCn0gPC9wcmU+Cgo8cD5UaGUgYWxnb3JpdGhtIHVzZXMgZmluZF9pZigpIHRvIGZpbmQgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBzaG91bGQKYmUgcmVtb3ZlZC4gSG93ZXZlciwgaXQgdGhlbiB1c2VzIGEgY29weSBvZiB0aGUgcGFzc2VkIGZ1bmN0aW9uIG9iamVjdAp0byBwcm9jZXNzIHRoZSByZXN1bHRpbmcgZWxlbWVudHMgKGlmIGFueSkuIEhlcmUsIE50aCBpcyB1c2VkIGFnYWluCmFuZCByZW1vdmVzIGFsc28gdGhlIHNpeHRoIGVsZW1lbnQuIFRoaXMgYmVoYXZpb3IgY29tcHJvbWlzZXMgdGhlCmFkdmFudGFnZSBvZiBmdW5jdGlvbiBvYmplY3RzIGJlaW5nIGFibGUgdG8gaGF2ZSBhIHN0YXRlLiBXaXRob3V0IGFueQpjb3N0IGl0IGNvdWxkIGJlIGF2b2lkZWQgKGp1c3QgaW1wbGVtZW50IGl0IGRpcmVjdGx5IGluc3RlYWQgb2YKY2FsbGluZyBmaW5kX2lmKCkpLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggZm9sbG93aW5nIDI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+IHBhcmFncmFwaCA4OjwvcD4KPGJsb2NrcXVvdGU+CltOb3RlOiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgYWxnb3JpdGhtcyB0aGF0IHRha2UgZnVuY3Rpb24Kb2JqZWN0cyBhcyBhcmd1bWVudHMgYXJlIHBlcm1pdHRlZCB0byBjb3B5IHRob3NlIGZ1bmN0aW9uIG9iamVjdHMKZnJlZWx5LiAgUHJvZ3JhbW1lcnMgZm9yIHdob20gb2JqZWN0IGlkZW50aXR5IGlzIGltcG9ydGFudCBzaG91bGQKY29uc2lkZXIgdXNpbmcgYSB3cmFwcGVyIGNsYXNzIHRoYXQgcG9pbnRzIHRvIGEgbm9uY29waWVkCmltcGxlbWVudGF0aW9uIG9iamVjdCwgb3Igc29tZSBlcXVpdmFsZW50IHNvbHV0aW9uLl0KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0R1YmxpbjogUGV0ZSBCZWNrZXIgZmVsdCB0aGF0IHRoaXMgbWF5IG5vdCBiZSBhIGRlZmVjdCwKYnV0IHJhdGhlciBzb21ldGhpbmcgdGhhdCBwcm9ncmFtbWVycyBuZWVkIHRvIGJlIGVkdWNhdGVkIGFib3V0LgpUaGVyZSB3YXMgZGlzY3Vzc2lvbiBvZiBhZGRpbmcgd29yZGluZyB0byB0aGUgZWZmZWN0IHRoYXQgdGhlIG51bWJlcgphbmQgb3JkZXIgb2YgY2FsbHMgdG8gZnVuY3Rpb24gb2JqZWN0cywgaW5jbHVkaW5nIHByZWRpY2F0ZXMsIG5vdAphZmZlY3QgdGhlIGJlaGF2aW9yIG9mIHRoZSBmdW5jdGlvbiBvYmplY3QuXTwvaT48L3A+Cgo8cD48aT5bUHJlLUtvbmE6IE5pY28gY29tbWVudHM6IEl0IHNlZW1zIHRoZSBwcm9ibGVtIGlzIHRoYXQgd2UgZG9uJ3QKaGF2ZSBhIGNsZWFyIHN0YXRlbWVudCBvZiAicHJlZGljYXRlIiBpbiB0aGUKc3RhbmRhcmQuIFBlb3BsZSBpbmNsdWRpbmcgbWUgc2VlbWVkIHRvIHRoaW5rICJhIGZ1bmN0aW9uCnJldHVybmluZyBhIEJvb2xlYW4gdmFsdWUgYW5kIGJlaW5nIGFibGUgdG8gYmUgY2FsbGVkIGJ5IGFuIFNUTAphbGdvcml0aG0gb3IgYmUgdXNlZCBhcyBzb3J0aW5nIGNyaXRlcmlvbiBvciAuLi4gaXMgYQpwcmVkaWNhdGUiLiBCdXQgYSBwcmVkaWNhdGUgaGFzIG1vcmUgcmVxdWlyZW1lbnRzOiBJdCBzaG91bGQKbmV2ZXIgY2hhbmdlIGl0cyBiZWhhdmlvciBkdWUgdG8gYSBjYWxsIG9yIGJlaW5nIGNvcGllZC4gSU1ITyB3ZSBoYXZlCnRvIHN0YXRlIHRoaXMgaW4gdGhlIHN0YW5kYXJkLiBJZiB5b3UgbGlrZSwgc2VlIHNlY3Rpb24gOC4xLjQgb2YgbXkKbGlicmFyeSBib29rIGZvciBhIGRldGFpbGVkIGRpc2N1c3Npb24uXTwvaT48L3A+Cgo8cD48aT5bS29uYTogTmljbyB3aWxsIHByb3ZpZGUgd29yZGluZyB0byB0aGUgZWZmZWN0IHRoYXQgInVubGVzcwpvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBhbmQgY2FsbHMgdG8gZnVuY3Rpb24Kb2JqZWN0cyBieSBhbGdvcml0aG1zIGlzIHVuc3BlY2lmaWVkIi4mbmJzcDsgQ29uc2lkZXIgcGxhY2luZyBpbgoyNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZ29yaXRobXMiPiBbbGliLmFsZ29yaXRobXNdPC9hPiBhZnRlciBwYXJhZ3JhcGggOS5dPC9pPjwvcD4KCjxwPjxpPltTYW50YSBDcnV6OiBUaGUgc3RhbmRhcmQgZG9lc24ndCBjdXJyZW50bHkgZ3VhcmFudGVlIHRoYXQKICBmdW5jdGlvbnMgb2JqZWN0IHdvbid0IGJlIGNvcGllZCwgYW5kIHdoYXQgaXNuJ3QgZm9yYmlkZGVuIGlzCiAgYWxsb3dlZC4gIEl0IGlzIGJlbGlldmVkIChlc3BlY2lhbGx5IHNpbmNlIGltcGxlbWVudGF0aW9ucyB0aGF0IHdlcmUKICB3cml0dGVuIGluIGNvbmNlcnQgd2l0aCB0aGUgc3RhbmRhcmQgZG8gbWFrZSBjb3BpZXMgb2YgZnVuY3Rpb24KICBvYmplY3RzKSB0aGF0IHRoaXMgd2FzIGludGVudGlvbmFsLiAgVGh1cywgbm8gbm9ybWF0aXZlIGNoYW5nZSBpcwogIG5lZWRlZC4gIFdoYXQgd2Ugc2hvdWxkIHB1dCBpbiBpcyBhIG5vbi1ub3JtYXRpdmUgbm90ZSBzdWdnZXN0aW5nIHRvCiAgcHJvZ3JhbW1lcnMgdGhhdCBpZiB0aGV5IHdhbnQgdG8gZ3VhcmFudGVlIHRoZSBsYWNrIG9mIGNvcHlpbmcgdGhleQogIHNob3VsZCB1c2Ugc29tZXRoaW5nIGxpa2UgdGhlIDx0dD5yZWY8L3R0PiB3cmFwcGVyLl08L2k+PC9wPgoKPHA+PGk+W094Zm9yZDogTWF0dCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKCjxocj4KPGEgbmFtZT0iOTgiPjxoMz45OC4mbmJzcDtJbnB1dCBpdGVyYXRvciByZXF1aXJlbWVudHMgYXJlIGJhZGx5IHdyaXR0ZW48L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlucHV0Lml0ZXJhdG9ycyI+IFtsaWIuaW5wdXQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+VGFibGUgNzIgaW4gMjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pbnB1dC5pdGVyYXRvcnMiPiBbbGliLmlucHV0Lml0ZXJhdG9yc108L2E+IHNwZWNpZmllcyBzZW1hbnRpY3MgZm9yCjx0dD4qcisrPC90dD4gb2Y6PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7IDx0dD57IFQgdG1wID0gKnI7ICsrcjsgcmV0dXJuIHRtcDsgfTwvdHQ+PC9wPgoKPHA+VGhlcmUgYXJlIHR3byBwcm9ibGVtcyB3aXRoIHRoaXMuICBGaXJzdCwgdGhlIHJldHVybiB0eXBlIGlzCnNwZWNpZmllZCB0byBiZSAiVCIsIGFzIG9wcG9zZWQgdG8gc29tZXRoaW5nIGxpa2UgImNvbnZlcnRpYmxlIHRvIFQiLgpUaGlzIGlzIHRvbyBzcGVjaWZpYzogd2Ugd2FudCB0byBhbGxvdyAqcisrIHRvIHJldHVybiBhbiBsdmFsdWUuPC9wPgoKPHA+U2Vjb25kLCB3cml0aW5nIHRoZSBzZW1hbnRpY3MgaW4gdGVybXMgb2YgY29kZSBtaXNsZWFkaW5nbHkKc3VnZ2VzdHMgdGhhdCB0aGUgZWZmZWN0cyAqcisrIHNob3VsZCBwcmVjaXNlbHkgcmVwbGljYXRlIHRoZSBiZWhhdmlvcgpvZiB0aGlzIGNvZGUsIGluY2x1ZGluZyBzaWRlIGVmZmVjdHMuICAoRG9lcyB0aGlzIG1lYW4gdGhhdCAqcisrCnNob3VsZCBpbnZva2UgdGhlIGNvcHkgY29uc3RydWN0b3IgZXhhY3RseSBhcyBtYW55IHRpbWVzIGFzIHRoZSBzYW1wbGUKY29kZSBhYm92ZSB3b3VsZD8pIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzM0Ij4zMzQ8L2E+IGZvciBhIHNpbWlsYXIKcHJvYmxlbS48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CkluIFRhYmxlIDcyIGluIDI0LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaW5wdXQuaXRlcmF0b3JzIj4gW2xpYi5pbnB1dC5pdGVyYXRvcnNdPC9hPiwgY2hhbmdlIHRoZSByZXR1cm4gdHlwZQpmb3IgPHR0PipyKys8L3R0PiBmcm9tIDx0dD5UPC90dD4gdG8gImNvbnZlcnRpYmxlIHRvIFQiLgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpc3N1ZSBoYXMgdHdvIHBhcnRzOiB0aGUgcmV0dXJuIHR5cGUsIGFuZCB0aGUgbnVtYmVyIG9mIHRpbWVzCiAgdGhlIGNvcHkgY29uc3RydWN0b3IgaXMgaW52b2tlZC48L3A+Cgo8cD5UaGUgTFdHIGJlbGlldmVzIHRoZSB0aGUgZmlyc3QgcGFydCBpcyBhIHJlYWwgaXNzdWUuICBJdCdzCiAgaW5hcHByb3ByaWF0ZSBmb3IgdGhlIHJldHVybiB0eXBlIHRvIGJlIHNwZWNpZmllZCBzbyBtdWNoIG1vcmUKICBwcmVjaXNlbHkgZm9yICpyKysgdGhhbiBpdCBpcyBmb3IgKnIuICBJbiBwYXJ0aWN1bGFyLCBpZiByIGlzIG9mCiAgKHNheSkgdHlwZSA8dHQ+aW50KjwvdHQ+LCB0aGVuICpyKysgaXNuJ3QgPHR0PmludDwvdHQ+LAogIGJ1dCA8dHQ+aW50JmFtcDs8L3R0Pi48L3A+Cgo8cD5UaGUgTFdHIGRvZXMgbm90IGJlbGlldmUgdGhhdCB0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSBjb3B5CiAgY29uc3RydWN0b3IgaXMgaW52b2tlZCBpcyBhIHJlYWwgaXNzdWUuICBUaGlzIGNhbiB2YXJ5IGluIGFueSBjYXNlLAogIGJlY2F1c2Ugb2YgbGFuZ3VhZ2UgcnVsZXMgb24gY29weSBjb25zdHJ1Y3RvciBlbGlzaW9uLiAgVGhhdCdzIHRvbwogIG11Y2ggdG8gcmVhZCBpbnRvIHRoZXNlIHNlbWFudGljcyBjbGF1c2VzLjwvcD4KCjxwPkFkZGl0aW9uYWxseSwgYXMgRGF2ZSBBYnJhaGFtcyBwb2ludGVkIG91dCAoYysrc3RkLWxpYi0xMzcwMyk6IHNpbmNlIAogICB3ZSdyZSB0b2xkICgyNC4xLzMpIHRoYXQgZm9yd2FyZCBpdGVyYXRvcnMgc2F0aXNmeSBhbGwgdGhlIHJlcXVpcmVtZW50cwogICBvZiBpbnB1dCBpdGVyYXRvcnMsIHdlIGNhbid0IGltcG9zZSBhbnkgcmVxdWlyZW1lbnRzIGluIHRoZSBJbnB1dAogICBJdGVyYXRvciByZXF1aXJlbWVudHMgdGFibGUgdGhhdCBmb3J3YXJkIGl0ZXJhdG9ycyBkb24ndCBzYXRpc2Z5LjwvcD4KPGhyPgo8YSBuYW1lPSIxMDMiPjxoMz4xMDMuJm5ic3A7c2V0OjppdGVyYXRvciBpcyByZXF1aXJlZCB0byBiZSBtb2RpZmlhYmxlLCBidXQgdGhpcyBhbGxvd3MgbW9kaWZpY2F0aW9uIG9mIGtleXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FGTk9SJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgT2N0IDE5OTg8L3A+CjxwPlNldDo6aXRlcmF0b3IgaXMgZGVzY3JpYmVkIGFzIGltcGxlbWVudGF0aW9uLWRlZmluZWQgd2l0aCBhCnJlZmVyZW5jZSB0byB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50OyB0aGUgY29udGFpbmVyIHJlcXVpcmVtZW50IHNheXMKdGhhdCBjb25zdF9pdGVyYXRvciBpcyBhbiBpdGVyYXRvciBwb2ludGluZyB0byBjb25zdCBUIGFuZCBpdGVyYXRvciBhbgppdGVyYXRvciBwb2ludGluZyB0byBULjwvcD4KCjxwPjIzLjEuMiBwYXJhZ3JhcGggMiBpbXBsaWVzIHRoYXQgdGhlIGtleXMgc2hvdWxkIG5vdCBiZSBtb2RpZmllZCB0bwpicmVhayB0aGUgb3JkZXJpbmcgb2YgZWxlbWVudHMuIEJ1dCB0aGF0IGlzIG5vdCBjbGVhcmx5CnNwZWNpZmllZC4gRXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGF0IHRoZSBjdXJyZW50IHN0YW5kYXJkIHJlcXVpcmVzCnRoYXQgaXRlcmF0b3IgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgYmUgZGlmZmVyZW50IGZyb20KY29uc3RfaXRlcmF0b3IuIFNldCwgZm9yIGV4YW1wbGUsIGhhcyB0aGUgZm9sbG93aW5nOiA8L3A+Cgo8cD48dHQ+dHlwZWRlZiBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkIGl0ZXJhdG9yOzxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IC8vIFNlZSBfbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNfPC90dD48L3A+Cgo8cD4yMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IGFjdHVhbGx5IHJlcXVpcmVzIHRoYXQgaXRlcmF0b3IgdHlwZSBwb2ludGluZwp0byBUICh0YWJsZSA2NSkuIERpc2FsbG93aW5nIHVzZXIgbW9kaWZpY2F0aW9uIG9mIGtleXMgYnkgY2hhbmdpbmcgdGhlCnN0YW5kYXJkIHRvIHJlcXVpcmUgYW4gaXRlcmF0b3IgZm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lciB0byBiZSB0aGUKc2FtZSBhcyBjb25zdF9pdGVyYXRvciB3b3VsZCBiZSBvdmVya2lsbCBzaW5jZSB0aGF0IHdpbGwgdW5uZWNlc3NhcmlseQpzaWduaWZpY2FudGx5IHJlc3RyaWN0IHRoZSB1c2FnZSBvZiBhc3NvY2lhdGl2ZSBjb250YWluZXIuIEEgY2xhc3MgdG8KYmUgdXNlZCBhcyBlbGVtZW50cyBvZiBzZXQsIGZvciBleGFtcGxlLCBjYW4gbm8gbG9uZ2VyIGJlIG1vZGlmaWVkCmVhc2lseSB3aXRob3V0IGVpdGhlciByZWRlc2lnbmluZyB0aGUgY2xhc3MgKHVzaW5nIG11dGFibGUgb24gZmllbGRzCnRoYXQgaGF2ZSBub3RoaW5nIHRvIGRvIHdpdGggb3JkZXJpbmcpLCBvciB1c2luZyBjb25zdF9jYXN0LCB3aGljaApkZWZlYXRzIHJlcXVpcmluZyBpdGVyYXRvciB0byBiZSBjb25zdF9pdGVyYXRvci4gVGhlIHByb3Bvc2VkIHNvbHV0aW9uCmdvZXMgaW4gbGluZSB3aXRoIHRydXN0aW5nIHVzZXIga25vd3Mgd2hhdCBoZSBpcyBkb2luZy4gPC9wPgoKPHA+PGI+T3RoZXIgT3B0aW9ucyBFdmFsdWF0ZWQ6PC9iPiA8L3A+Cgo8cD5PcHRpb24gQS4mbmJzcDsmbmJzcDsgSW4gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiwgcGFyYWdyYXBoIDIsIGFmdGVyCmZpcnN0IHNlbnRlbmNlLCBhbmQgYmVmb3JlICJJbiBhZGRpdGlvbiwuLi4iLCBhZGQgb25lIGxpbmU6CjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPk1vZGlmaWNhdGlvbiBvZiBrZXlzIHNoYWxsIG5vdCBjaGFuZ2UgdGhlaXIgc3RyaWN0IHdlYWsgb3JkZXJpbmcuIDwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+T3B0aW9uIEIuJm5ic3A7QWRkIHRocmVlIG5ldyBzZW50ZW5jZXMgdG8gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCA1OiAiS2V5cyBpbiBhbiBhc3NvY2lhdGl2ZSBjb250YWluZXIKICBhcmUgaW1tdXRhYmxlLiIgQXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNjogIkZvcgogIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgd2hlcmUgdGhlIHZhbHVlIHR5cGUgaXMgdGhlIHNhbWUgYXMgdGhlIGtleQogIHR5cGUsIGJvdGggPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZQogIGNvbnN0YW50IGl0ZXJhdG9ycy4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBvciBub3QKICA8dHQ+aXRlcmF0b3I8L3R0PiBhbmQgPHR0PmNvbnN0X2l0ZXJhdG9yPC90dD4gYXJlIHRoZSBzYW1lCiAgdHlwZS4iPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5PcHRpb24gQy4mbmJzcDtUbyAyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+LCBwYXJhZ3JhcGggMywgd2hpY2gKY3VycmVudGx5IHJlYWRzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRoZSBwaHJhc2UgYGBlcXVpdmFsZW5jZSBvZiBrZXlzJycgbWVhbnMgdGhlIGVxdWl2YWxlbmNlIHJlbGF0aW9uIGltcG9zZWQgYnkgdGhlCiAgY29tcGFyaXNvbiBhbmQgbm90IHRoZSBvcGVyYXRvcj09IG9uIGtleXMuIFRoYXQgaXMsIHR3byBrZXlzIGsxIGFuZCBrMiBpbiB0aGUgc2FtZQogIGNvbnRhaW5lciBhcmUgY29uc2lkZXJlZCB0byBiZSBlcXVpdmFsZW50IGlmIGZvciB0aGUgY29tcGFyaXNvbiBvYmplY3QgY29tcCwgY29tcChrMSwgazIpCiAgPT0gZmFsc2UgJmFtcDsmYW1wOyBjb21wKGsyLCBrMSkgPT0gZmFsc2UuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4mbmJzcDsgYWRkIHRoZSBmb2xsb3dpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+Rm9yIGFueSB0d28ga2V5cyBrMSBhbmQgazIgaW4gdGhlIHNhbWUgY29udGFpbmVyLCBjb21wKGsxLCBrMikgc2hhbGwgcmV0dXJuIHRoZSBzYW1lCiAgdmFsdWUgd2hlbmV2ZXIgaXQgaXMgZXZhbHVhdGVkLiBbTm90ZTogSWYgazIgaXMgcmVtb3ZlZCBmcm9tIHRoZSBjb250YWluZXIgYW5kIGxhdGVyCiAgcmVpbnNlcnRlZCwgY29tcChrMSwgazIpIG11c3Qgc3RpbGwgcmV0dXJuIGEgY29uc2lzdGVudCB2YWx1ZSBidXQgdGhpcyB2YWx1ZSBtYXkgYmUKICBkaWZmZXJlbnQgdGhhbiBpdCB3YXMgdGhlIGZpcnN0IHRpbWUgazEgYW5kIGsyIHdlcmUgaW4gdGhlIHNhbWUgY29udGFpbmVyLiBUaGlzIGlzCiAgaW50ZW5kZWQgdG8gYWxsb3cgdXNhZ2UgbGlrZSBhIHN0cmluZyBrZXkgdGhhdCBjb250YWlucyBhIGZpbGVuYW1lLCB3aGVyZSBjb21wIGNvbXBhcmVzCiAgZmlsZSBjb250ZW50czsgaWYgazIgaXMgcmVtb3ZlZCwgdGhlIGZpbGUgaXMgY2hhbmdlZCwgYW5kIHRoZSBzYW1lIGsyIChmaWxlbmFtZSkgaXMKICByZWluc2VydGVkLCBjb21wKGsxLCBrMikgbXVzdCBhZ2FpbiByZXR1cm4gYSBjb25zaXN0ZW50IHZhbHVlIGJ1dCB0aGlzIHZhbHVlIG1heSBiZQogIGRpZmZlcmVudCB0aGFuIGl0IHdhcyB0aGUgcHJldmlvdXMgdGltZSBrMiB3YXMgaW4gdGhlIGNvbnRhaW5lci5dPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdG8gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBhdAp0aGUgaW5kaWNhdGVkIGxvY2F0aW9uOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkF0IHRoZSBlbmQgb2YgcGFyYWdyYXBoIDM6ICJGb3IgYW55IHR3byBrZXlzIGsxIGFuZCBrMiBpbiB0aGUgc2FtZSBjb250YWluZXIsCiAgY2FsbGluZyBjb21wKGsxLCBrMikgc2hhbGwgYWx3YXlzIHJldHVybiB0aGUgc2FtZQogIHZhbHVlLiI8L3A+CiAgPHA+QXQgdGhlIGVuZCBvZiBwYXJhZ3JhcGggNTogIktleXMgaW4gYW4gYXNzb2NpYXRpdmUgY29udGFpbmVyIGFyZSBpbW11dGFibGUuIjwvcD4KICA8cD5BdCB0aGUgZW5kIG9mIHBhcmFncmFwaCA2OiAiRm9yIGFzc29jaWF0aXZlIGNvbnRhaW5lcnMgd2hlcmUgdGhlIHZhbHVlIHR5cGUgaXMgdGhlCiAgc2FtZSBhcyB0aGUga2V5IHR5cGUsIGJvdGggPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZSBjb25zdGFudAogIGl0ZXJhdG9ycy4gSXQgaXMgdW5zcGVjaWZpZWQgd2hldGhlciBvciBub3QgPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+CiAgYXJlIHRoZSBzYW1lIHR5cGUuIjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2V2ZXJhbCBhcmd1bWVudHMgd2VyZSBhZHZhbmNlZCBmb3IgYW5kIGFnYWluc3QgYWxsb3dpbmcgc2V0IGVsZW1lbnRzIHRvIGJlCm11dGFibGUgYXMgbG9uZyBhcyB0aGUgb3JkZXJpbmcgd2FzIG5vdCBlZmZlY3RlZC4gVGhlIGFyZ3VtZW50IHdoaWNoIHN3YXllZCB0aGUKTFdHIHdhcyBvbmUgb2Ygc2FmZXR5OyBpZiBlbGVtZW50cyB3ZXJlIG11dGFibGUsIHRoZXJlIHdvdWxkIGJlIG5vIGNvbXBpbGUtdGltZQp3YXkgdG8gZGV0ZWN0IG9mIGEgc2ltcGxlIHVzZXIgb3ZlcnNpZ2h0IHdoaWNoIGNhdXNlZCBvcmRlcmluZyB0byBiZQptb2RpZmllZC4gIFRoZXJlIHdhcyBhIHJlcG9ydCB0aGF0IHRoaXMgaGFkIGFjdHVhbGx5IGhhcHBlbmVkIGluIHByYWN0aWNlLAphbmQgaGFkIGJlZW4gcGFpbmZ1bCB0byBkaWFnbm9zZS4gIElmIHVzZXJzIG5lZWQgdG8gbW9kaWZ5IGVsZW1lbnRzLAppdCBpcyBwb3NzaWJsZSB0byB1c2UgbXV0YWJsZSBtZW1iZXJzIG9yIGNvbnN0X2Nhc3QuPC9wPgoKPHA+U2ltcGx5IHJlcXVpcmluZyB0aGF0IGtleXMgYmUgaW1tdXRhYmxlIGlzIG5vdCBzdWZmaWNpZW50LCBiZWNhdXNlIHRoZSBjb21wYXJpc29uCm9iamVjdCBtYXkgaW5kaXJlY3RseSAodmlhIHBvaW50ZXJzKSBvcGVyYXRlIG9uIHZhbHVlcyBvdXRzaWRlIG9mIHRoZSBrZXlzLjwvcD4KCjxwPgpUaGUgdHlwZXMgPHR0Pml0ZXJhdG9yPC90dD4gYW5kIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+IGFyZSBwZXJtaXR0ZWQKdG8gYmUgZGlmZmVyZW50IHR5cGVzIHRvIGFsbG93IGZvciBwb3RlbnRpYWwgZnV0dXJlIHdvcmsgaW4gd2hpY2ggc29tZQptZW1iZXIgZnVuY3Rpb25zIG1pZ2h0IGJlIG92ZXJsb2FkZWQgYmV0d2VlbiB0aGUgdHdvIHR5cGVzLiAgTm8gc3VjaAptZW1iZXIgZnVuY3Rpb25zIGV4aXN0IG5vdywgYW5kIHRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB1c2VyIGZ1bmN0aW9uYWxpdHkKd2lsbCBub3QgYmUgaW1wYWlyZWQgYnkgcGVybWl0dGluZyB0aGUgdHdvIHR5cGVzIHRvIGJlIHRoZSBzYW1lLiAgQQpmdW5jdGlvbiB0aGF0IG9wZXJhdGVzIG9uIGJvdGggaXRlcmF0b3IgdHlwZXMgY2FuIGJlIGRlZmluZWQgZm9yIAo8dHQ+Y29uc3RfaXRlcmF0b3I8L3R0PiBhbG9uZSwgYW5kIGNhbiByZWx5IG9uIHRoZSBhdXRvbWF0aWMKY29udmVyc2lvbiBmcm9tIDx0dD5pdGVyYXRvcjwvdHQ+IHRvIDx0dD5jb25zdF9pdGVyYXRvcjwvdHQ+Lgo8L3A+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgY3JhZnRlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBhbmQgcmF0aW9uYWxlLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjEwNiI+PGgzPjEwNi4mbmJzcDtOdW1lcmljIGxpYnJhcnkgcHJpdmF0ZSBtZW1iZXJzIGFyZSBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5zbGljZS5hcnJheV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FGTk9SJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgT2N0IDE5OTg8L3A+CjxwPlRoaXMgaXMgdGhlIG9ubHkgcGxhY2UgaW4gdGhlIHdob2xlIHN0YW5kYXJkIHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBoYXMgdG8gZG9jdW1lbnQKc29tZXRoaW5nIHByaXZhdGUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpSZW1vdmUgdGhlIGNvbW1lbnQgd2hpY2ggc2F5cyAiLy8gcmVtYWluZGVyIGltcGxlbWVudGF0aW9uIGRlZmluZWQiIGZyb206CjwvcD4KCjx1bD4KICA8bGk+MjYuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5zbGljZS5hcnJheV08L2E+CjwvbGk+CiAgPGxpPjI2LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLmdzbGljZS5hcnJheV08L2E+CjwvbGk+CiAgPGxpPjI2LjMuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5XTwvYT4KPC9saT4KICA8bGk+MjYuMy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLmluZGlyZWN0LmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheV08L2E+CjwvbGk+CjwvdWw+Cjxocj4KPGEgbmFtZT0iMTA4Ij48aDM+MTA4LiZuYnNwO0xpZmV0aW1lIG9mIGV4Y2VwdGlvbjo6d2hhdCgpIHJldHVybiB1bnNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjYuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmV4Y2VwdGlvbiI+IFtsaWIuZXhjZXB0aW9uXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QUZOT1ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NyBPY3QgMTk5ODwvcD4KPHA+SW4gMTguNi4xLCBwYXJhZ3JhcGhzIDgtOSwgdGhlIGxpZmV0aW1lIG9mIHRoZSByZXR1cm4gdmFsdWUgb2YKZXhjZXB0aW9uOjp3aGF0KCkgaXMgbGVmdCB1bnNwZWNpZmllZC4gVGhpcyBpc3N1ZSBoYXMgaW1wbGljYXRpb25zCndpdGggZXhjZXB0aW9uIHNhZmV0eSBvZiBleGNlcHRpb24gaGFuZGxpbmc6IHNvbWUgZXhjZXB0aW9ucyBzaG91bGQKbm90IHRocm93IGJhZF9hbGxvYy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIDE4LjYuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmV4Y2VwdGlvbiI+IFtsaWIuZXhjZXB0aW9uXTwvYT4gcGFyYWdyYXBoIDkgKGV4Y2VwdGlvbjo6d2hhdCBub3RlcwpjbGF1c2UpIHRoZSBzZW50ZW5jZTo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5UaGUgcmV0dXJuIHZhbHVlIHJlbWFpbnMgdmFsaWQgdW50aWwgdGhlIGV4Y2VwdGlvbiBvYmplY3QgZnJvbSB3aGljaCBpdCBpcyBvYnRhaW5lZCBpcwogIGRlc3Ryb3llZCBvciBhIG5vbi1jb25zdCBtZW1iZXIgZnVuY3Rpb24gb2YgdGhlIGV4Y2VwdGlvbiBvYmplY3QgaXMgY2FsbGVkLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SWYgYW4gZXhjZXB0aW9uIG9iamVjdCBoYXMgbm9uLWNvbnN0IG1lbWJlcnMsIHRoZXkgbWF5IGJlIHVzZWQKdG8gc2V0IGludGVybmFsIHN0YXRlIHRoYXQgc2hvdWxkIGFmZmVjdCB0aGUgY29udGVudHMgb2YgdGhlIHN0cmluZwpyZXR1cm5lZCBieSA8dHQ+d2hhdCgpPC90dD4uCjwvcD4KPGhyPgo8YSBuYW1lPSIxMDkiPjxoMz4xMDkuJm5ic3A7TWlzc2luZyBiaW5kZXJzIGZvciBub24tY29uc3Qgc2VxdWVuY2UgZWxlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4zLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmJpbmRlcnMiPiBbbGliLmJpbmRlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCamFybmUgU3Ryb3VzdHJ1cCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IE9jdCAxOTk4PC9wPgoKPHA+VGhlcmUgYXJlIG5vIHZlcnNpb25zIG9mIGJpbmRlcnMgdGhhdCBhcHBseSB0byBub24tY29uc3QgZWxlbWVudHMKb2YgYSBzZXF1ZW5jZS4gVGhpcyBtYWtlcyBleGFtcGxlcyBsaWtlIGZvcl9lYWNoKCkgdXNpbmcgYmluZDJuZCgpIG9uCnBhZ2UgNTIxIG9mICJUaGUgQysrIFByb2dyYW1taW5nIExhbmd1YWdlICgzcmQpIgpub24tY29uZm9ybWluZy4gU3VpdGFibGUgdmVyc2lvbnMgb2YgdGhlIGJpbmRlcnMgbmVlZCB0byBiZSBhZGRlZC48L3A+Cgo8cD5GdXJ0aGVyIGRpc2N1c3Npb24gZnJvbSBOaWNvOjwvcD4KCjxwPldoYXQgaXMgcHJvYmFibHkgbWVhbnQgaGVyZSBpcyBzaG93biBpbiB0aGUgZm9sbG93aW5nIGV4YW1wbGU6PC9wPgoKPHByZT5jbGFzcyBFbGVtIHsgCiAgcHVibGljOiAKICAgIHZvaWQgcHJpbnQgKGludCBpKSBjb25zdCB7IH0gCiAgICB2b2lkIG1vZGlmeSAoaW50IGkpIHsgfSAKfTsgPC9wcmU+CjxwcmU+aW50IG1haW4oKSAKeyAKICAgIHZlY3RvciZsdDtFbGVtJmd0OyBjb2xsKDIpOyAKICAgIGZvcl9lYWNoIChjb2xsLmJlZ2luKCksIGNvbGwuZW5kKCksIGJpbmQybmQobWVtX2Z1bl9yZWYoJmFtcDtFbGVtOjpwcmludCksNDIpKTsgICAgLy8gT0sgCiAgICBmb3JfZWFjaCAoY29sbC5iZWdpbigpLCBjb2xsLmVuZCgpLCBiaW5kMm5kKG1lbV9mdW5fcmVmKCZhbXA7RWxlbTo6bW9kaWZ5KSw0MikpOyAgIC8vIEVSUk9SIAp9PC9wcmU+Cgo8cD5UaGUgZXJyb3IgcmVzdWx0cyBmcm9tIHRoZSBmYWN0IHRoYXQgYmluZDJuZCgpIHBhc3NlcyBpdHMgZmlyc3QKYXJndW1lbnQgKHRoZSBhcmd1bWVudCBvZiB0aGUgc2VxdWVuY2UpIGFzIGNvbnN0YW50IHJlZmVyZW5jZS4gU2VlIHRoZQpmb2xsb3dpbmcgdHlwaWNhbCBpbXBsZW1lbnRhdGlvbjo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBPcGVyYXRpb24mZ3Q7IApjbGFzcyBiaW5kZXIybmQgCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb24mbHQ7dHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlJmd0OyB7IApwcm90ZWN0ZWQ6IAogIE9wZXJhdGlvbiBvcDsgCiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2YWx1ZTsgCnB1YmxpYzogCiAgYmluZGVyMm5kKGNvbnN0IE9wZXJhdGlvbiZhbXA7IG8sIAogICAgICAgICAgICBjb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJmFtcDsgdikgCiAgICAgIDogb3AobyksIHZhbHVlKHYpIHt9IDwvcHJlPgogIDxwcmU+IHR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGUgCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmYW1wOyB4KSBjb25zdCB7IAogICAgcmV0dXJuIG9wKHgsIHZhbHVlKTsgCiAgfSAKfTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIHNvbHV0aW9uIGlzIHRvIG92ZXJsb2FkIG9wZXJhdG9yICgpIG9mIGJpbmQybmQgZm9yIG5vbi1jb25zdGFudCBhcmd1bWVudHM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgT3BlcmF0aW9uJmd0OyAKY2xhc3MgYmluZGVyMm5kIAogIDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uJmx0O3R5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSZndDsgeyAKcHJvdGVjdGVkOiAKICBPcGVyYXRpb24gb3A7IAogIHR5cGVuYW1lIE9wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUgdmFsdWU7IApwdWJsaWM6IAogIGJpbmRlcjJuZChjb25zdCBPcGVyYXRpb24mYW1wOyBvLCAKICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHYpIAogICAgICA6IG9wKG8pLCB2YWx1ZSh2KSB7fSA8L3ByZT4KICA8cHJlPiB0eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlIAogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3QgeyAKICAgIHJldHVybiBvcCh4LCB2YWx1ZSk7IAogIH0gCiAgdHlwZW5hbWUgT3BlcmF0aW9uOjpyZXN1bHRfdHlwZSAKICBvcGVyYXRvcigpKHR5cGVuYW1lIE9wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0IHsgCiAgICByZXR1cm4gb3AoeCwgdmFsdWUpOyAKICB9IAp9OzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjxiPkhvd2FyZCBiZWxpZXZlcyB0aGVyZSBpcyBhIGZsYXc8L2I+IGluIHRoaXMgcmVzb2x1dGlvbi4KU2VlIGMrK3N0ZC1saWItOTEyNy4gIFdlIG1heSBuZWVkIHRvIHJlb3BlbiB0aGlzIGlzc3VlLjwvcD4KCjxwPkluIDIwLjMuNi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5iaW5kZXIuMXN0Ij4gW2xpYi5iaW5kZXIuMXN0XTwvYT4gaW4gdGhlIGRlY2xhcmF0aW9uIG9mIGJpbmRlcjFzdCBhZnRlcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPmluc2VydDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkodHlwZW5hbWUgT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSZhbXA7IHgpIGNvbnN0OzwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkluIDIwLjMuNi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5iaW5kZXIuMm5kIj4gW2xpYi5iaW5kZXIuMm5kXTwvYT4gaW4gdGhlIGRlY2xhcmF0aW9uIG9mIGJpbmRlcjJuZCBhZnRlcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjx0dD50eXBlbmFtZSBPcGVyYXRpb246OnJlc3VsdF90eXBlPGJyPgogICZuYnNwO29wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJmFtcDsgeCkgY29uc3Q7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+aW5zZXJ0OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnR5cGVuYW1lIE9wZXJhdGlvbjo6cmVzdWx0X3R5cGU8YnI+CiAgJm5ic3A7b3BlcmF0b3IoKSh0eXBlbmFtZSBPcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmYW1wOyB4KSBjb25zdDs8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgZGlzY3Vzc2VkIHRoaXMgYXQgc29tZSBsZW5ndGguSXQgd2FzIGFncmVlZCB0aGF0CnRoaXMgaXMgYSBtaXN0YWtlIGluIHRoZSBkZXNpZ24sIGJ1dCB0aGVyZSB3YXMgbm8gY29uc2Vuc3VzIG9uIHdoZXRoZXIKaXQgd2FzIGEgZGVmZWN0IGluIHRoZSBTdGFuZGFyZC4gIFN0cmF3IHZvdGU6IE5BRCAtIDUuICBBY2NlcHQKcHJvcG9zZWQgcmVzb2x1dGlvbiAtIDMuICBMZWF2ZSBvcGVuIC0gNi5dPC9pPjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBJdCB3YXMgZ2VuZXJhbGx5IGFncmVlZCB0aGF0IHRoaXMgd2FzIGEgZGVmZWN0LgpTdHJhcCBwb2xsOiBOQUQgLSAwLiAgQWNjZXB0IHByb3Bvc2VkIHJlc29sdXRpb24gLSAxMC4gCkxlYXZlIG9wZW4gLSAxLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIxMTAiPjxoMz4xMTAuJm5ic3A7aXN0cmVhbWJ1Zl9pdGVyYXRvcjo6ZXF1YWwgbm90IGNvbnN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yIj4gW2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yXTwvYT4sIDI0LjUuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pc3RyZWFtYnVmLml0ZXJhdG9yOjplcXVhbCI+IFtsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWxdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtOYXRoYW4gTXllcnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgT2N0IDE5OTg8L3A+CjxwPk1lbWJlciBpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0OyZndDs6OmVxdWFsIGlzIG5vdCBkZWNsYXJlZAoiY29uc3QiLCB5ZXQgMjQuNS4zLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wPT0iPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6Om9wPT1dPC9hPiBzYXlzIHRoYXQgb3BlcmF0b3I9PSwKd2hpY2ggaXMgY29uc3QsIGNhbGxzIGl0LiBUaGlzIGlzIGNvbnRyYWRpY3RvcnkuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNC41LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW1idWYuaXRlcmF0b3IiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3JdPC9hPiBhbmQgYWxzbyBpbiAyNC41LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbWJ1Zi5pdGVyYXRvcjo6ZXF1YWwiPiBbbGliLmlzdHJlYW1idWYuaXRlcmF0b3I6OmVxdWFsXTwvYT4sCnJlcGxhY2U6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5ib29sIGVxdWFsKGlzdHJlYW1idWZfaXRlcmF0b3ImYW1wOyBiKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+d2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmJvb2wgZXF1YWwoY29uc3QgaXN0cmVhbWJ1Zl9pdGVyYXRvciZhbXA7IGIpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTEyIj48L2E+PGgzPjxhIG5hbWU9IjExMiI+MTEyLiZuYnNwO01pbm9yIHR5cG8gaW4gPHR0Pm9zdHJlYW1idWZfaXRlcmF0b3I8L3R0PiBjb25zdHJ1Y3RvcjwvYT48L2gzPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjUuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5vc3RyZWFtYnVmLml0ZXIuY29ucyI+IFtsaWIub3N0cmVhbWJ1Zi5pdGVyLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgT2N0IDE5OTg8L3A+CjxwPlRoZSA8Yj5yZXF1aXJlczwvYj4gY2xhdXNlIGZvciA8dHQ+b3N0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+J3MKY29uc3RydWN0b3IgZnJvbSBhbiA8dHQ+b3N0cmVhbV90eXBlPC90dD4gKDI0LjUuNC4xLCBwYXJhZ3JhcGggMSkKcmVhZHMgIjxpPnM8L2k+IGlzIG5vdCBudWxsIi4gSG93ZXZlciwgPGk+czwvaT4gaXMgYQpyZWZlcmVuY2UsIGFuZCByZWZlcmVuY2VzIGNhbid0IGJlIG51bGwuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNC41LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIub3N0cmVhbWJ1Zi5pdGVyLmNvbnMiPiBbbGliLm9zdHJlYW1idWYuaXRlci5jb25zXTwvYT46PC9wPgoKPHA+TW92ZSB0aGUgY3VycmVudCBwYXJhZ3JhcGggMSwgd2hpY2ggcmVhZHMgIlJlcXVpcmVzOiBzIGlzIG5vdApudWxsLiIsIGZyb20gdGhlIGZpcnN0IGNvbnN0cnVjdG9yIHRvIHRoZSBzZWNvbmQgY29uc3RydWN0b3IuPC9wPgoKPHA+SW5zZXJ0IGEgbmV3IHBhcmFncmFwaCAxIFJlcXVpcmVzIGNsYXVzZSBmb3IgdGhlIGZpcnN0IGNvbnN0cnVjdG9yCnJlYWRpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHA+PGI+UmVxdWlyZXM8L2I+OiA8dHQ+cy5yZGJ1ZigpPC90dD4gaXMgbm90IG51bGwuPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTE0Ij48aDM+MTE0LiZuYnNwO1BsYWNlbWVudCBmb3JtcyBleGFtcGxlIGluIGVycm9yIHR3aWNlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNC4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLnBsYWNlbWVudCI+IFtsaWIubmV3LmRlbGV0ZS5wbGFjZW1lbnRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtTdGV2ZSBDbGFtYWdlJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI4IE9jdCAxOTk4PC9wPgo8cD5TZWN0aW9uIDE4LjQuMS4zIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgZXhhbXBsZTogPC9wPgoKPHByZT5bRXhhbXBsZTogVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBjb25zdHJ1Y3RpbmcgYW4gb2JqZWN0IGF0IGEga25vd24gYWRkcmVzczoKICAgICAgICBjaGFyIHBsYWNlW3NpemVvZihTb21ldGhpbmcpXTsKICAgICAgICBTb21ldGhpbmcqIHAgPSBuZXcgKHBsYWNlKSBTb21ldGhpbmcoKTsKIC1lbmQgZXhhbXBsZV08L3ByZT4KCjxwPkZpcnN0IGNvZGUgbGluZTogInBsYWNlIiBuZWVkIG5vdCBoYXZlIGFueSBzcGVjaWFsIGFsaWdubWVudCwgYW5kIHRoZQpmb2xsb3dpbmcgY29uc3RydWN0b3IgY291bGQgZmFpbCBkdWUgdG8gbWlzYWxpZ25lZCBkYXRhLjwvcD4KCjxwPlNlY29uZCBjb2RlIGxpbmU6IEFyZW4ndCB0aGUgcGFyZW5zIG9uIFNvbWV0aGluZygpIGluY29ycmVjdD8mbmJzcDsgW0R1YmxpbjogdGhlIExXRwpiZWxpZXZlcyB0aGUgKCkgYXJlIGNvcnJlY3QuXTwvcD4KCjxwPkV4YW1wbGVzIGFyZSBub3Qgbm9ybWF0aXZlLCBidXQgbmV2ZXJ0aGVsZXNzIHNob3VsZCBub3Qgc2hvdyBjb2RlIHRoYXQgaXMgaW52YWxpZCBvcgpsaWtlbHkgdG8gZmFpbC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgPHU+IGZpcnN0IGxpbmUgb2YgY29kZTwvdT4gaW4gdGhlIGV4YW1wbGUgaW4gCjE4LjQuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5wbGFjZW1lbnQiPiBbbGliLm5ldy5kZWxldGUucGxhY2VtZW50XTwvYT4gd2l0aDoKPC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT52b2lkKiBwbGFjZSA9IG9wZXJhdG9yIG5ldyhzaXplb2YoU29tZXRoaW5nKSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxMTUiPjxoMz4xMTUuJm5ic3A7VHlwbyBpbiBzdHJzdHJlYW0gY29uc3RydWN0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7RC43LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuc3Ryc3RyZWFtLmNvbnMiPiBbZGVwci5zdHJzdHJlYW0uY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MiBOb3YgMTk5ODwvcD4KPHA+RC43LjQuMSBzdHJzdHJlYW0gY29uc3RydWN0b3JzIHBhcmFncmFwaCAyIHNheXM6IDwvcD4KCjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IENvbnN0cnVjdHMgYW4gb2JqZWN0IG9mIGNsYXNzIHN0cnN0cmVhbSwgaW5pdGlhbGl6aW5nIHRoZSBiYXNlIGNsYXNzIHdpdGgKICBpb3N0cmVhbSgmYW1wOyBzYikgYW5kIGluaXRpYWxpemluZyBzYiB3aXRoIG9uZSBvZiB0aGUgdHdvIGNvbnN0cnVjdG9yczogPC9wPgogIDxwPi0gSWYgbW9kZSZhbXA7YXBwPT0wLCB0aGVuIHMgc2hhbGwgZGVzaWduYXRlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5IG9mIG4KICBlbGVtZW50cy4gVGhlIGNvbnN0cnVjdG9yIGlzIHN0cnN0cmVhbWJ1ZihzLCBuLCBzKS4gPC9wPgogIDxwPi0gSWYgbW9kZSZhbXA7YXBwPT0wLCB0aGVuIHMgc2hhbGwgZGVzaWduYXRlIHRoZSBmaXJzdCBlbGVtZW50IG9mIGFuIGFycmF5IG9mIG4KICBlbGVtZW50cyB0aGF0IGNvbnRhaW5zIGFuIE5UQlMgd2hvc2UgZmlyc3QgZWxlbWVudCBpcyBkZXNpZ25hdGVkIGJ5IHMuIFRoZSBjb25zdHJ1Y3RvciBpcwogIHN0cnN0cmVhbWJ1ZihzLCBuLCBzK3N0ZDo6c3RybGVuKHMpKS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPk5vdGljZSB0aGUgc2Vjb25kIGNvbmRpdGlvbiBpcyB0aGUgc2FtZSBhcyB0aGUgZmlyc3QuIEkgdGhpbmsgdGhlIHNlY29uZCBjb25kaXRpb24Kc2hvdWxkIGJlICJJZiBtb2RlJmFtcDthcHA9PWFwcCIsIG9yICJtb2RlJmFtcDthcHAhPTAiLCBtZWFuaW5nIHRoYXQKdGhlIGFwcGVuZCBiaXQgaXMgc2V0LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBELjcuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5vc3Ryc3RyZWFtLmNvbnMiPiBbZGVwci5vc3Ryc3RyZWFtLmNvbnNdPC9hPiBwYXJhZ3JhcGggMiBhbmQgRC43LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuc3Ryc3RyZWFtLmNvbnMiPiBbZGVwci5zdHJzdHJlYW0uY29uc108L2E+CnBhcmFncmFwaCAyLCBjaGFuZ2UgdGhlIGZpcnN0IGNvbmRpdGlvbiB0byA8dHQ+KG1vZGUmYW1wO2FwcCk9PTA8L3R0PgphbmQgdGhlIHNlY29uZCBjb25kaXRpb24gdG8gPHR0Pihtb2RlJmFtcDthcHApIT0wPC90dD4uPC9wPgo8aHI+CjxhIG5hbWU9IjExNyI+PGgzPjExNy4mbmJzcDs8dHQ+YmFzaWNfb3N0cmVhbTwvdHQ+IHVzZXMgbm9uZXhpc3RlbnQgPHR0Pm51bV9wdXQ8L3R0PiBtZW1iZXIgZnVuY3Rpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpYyI+IFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuYXJpdGhtZXRpY108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBOb3YgMTk5ODwvcD4KPHA+VGhlIDxiPmVmZmVjdHM8L2I+IGNsYXVzZSBmb3IgbnVtZXJpYyBpbnNlcnRlcnMgc2F5cyB0aGF0Cmluc2VydGlvbiBvZiBhIHZhbHVlIDx0dD54PC90dD4sIHdob3NlIHR5cGUgaXMgZWl0aGVyIDx0dD5ib29sPC90dD4sCjx0dD5zaG9ydDwvdHQ+LCA8dHQ+dW5zaWduZWQgc2hvcnQ8L3R0PiwgPHR0PmludDwvdHQ+LCA8dHQ+dW5zaWduZWQKaW50PC90dD4sIDx0dD5sb25nPC90dD4sIDx0dD51bnNpZ25lZCBsb25nPC90dD4sIDx0dD5mbG9hdDwvdHQ+LAo8dHQ+ZG91YmxlPC90dD4sIDx0dD5sb25nIGRvdWJsZTwvdHQ+LCBvciA8dHQ+Y29uc3Qgdm9pZCo8L3R0PiwgaXMKZGVsZWdhdGVkIHRvIDx0dD5udW1fcHV0PC90dD4sIGFuZCB0aGF0IGluc2VydGlvbiBpcyBwZXJmb3JtZWQgYXMgaWYKdGhyb3VnaCB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6IDwvcD4KCjxwcmU+Ym9vbCBmYWlsZWQgPSB1c2VfZmFjZXQmbHQ7CiAgIG51bV9wdXQmbHQ7Y2hhclQsb3N0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsgCiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwgdmFsKS4gZmFpbGVkKCk7PC9wcmU+Cgo8cD5UaGlzIGRvZXNuJ3Qgd29yaywgYmVjYXVzZSA8dHQ+bnVtX3B1dCZsdDsmZ3Q7PC90dD46OnB1dCBpcyBvbmx5Cm92ZXJsb2FkZWQgZm9yIHRoZSB0eXBlcyA8dHQ+Ym9vbDwvdHQ+LCA8dHQ+bG9uZzwvdHQ+LCA8dHQ+dW5zaWduZWQKbG9uZzwvdHQ+LCA8dHQ+ZG91YmxlPC90dD4sIDx0dD5sb25nIGRvdWJsZTwvdHQ+LCBhbmQgPHR0PmNvbnN0CnZvaWQqPC90dD4uIFRoYXQgaXMsIHRoZSBjb2RlIGZyYWdtZW50IGluIHRoZSBzdGFuZGFyZCBpcyBpbmNvcnJlY3QKKGl0IGlzIGRpYWdub3NlZCBhcyBhbWJpZ3VvdXMgYXQgY29tcGlsZSB0aW1lKSBmb3IgdGhlIHR5cGVzCjx0dD5zaG9ydDwvdHQ+LCA8dHQ+dW5zaWduZWQgc2hvcnQ8L3R0PiwgPHR0PmludDwvdHQ+LCA8dHQ+dW5zaWduZWQKaW50PC90dD4sIGFuZCA8dHQ+ZmxvYXQ8L3R0Pi4gPC9wPgoKPHA+V2UgbXVzdCBlaXRoZXIgYWRkIG5ldyBtZW1iZXIgZnVuY3Rpb25zIHRvIDx0dD5udW1fcHV0PC90dD4sIG9yCmVsc2UgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBpbiA8dHQ+b3N0cmVhbTwvdHQ+IHNvIHRoYXQgaXQgb25seSBjYWxscwpmdW5jdGlvbnMgdGhhdCBhcmUgYWN0dWFsbHkgdGhlcmUuIEkgcHJlZmVyIHRoZSBsYXR0ZXIuIDwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZXBsYWNlIDI3LjYuMi41LjIsIHBhcmFncmFwaCAxIHdpdGggdGhlIGZvbGxvd2luZzogPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgpUaGUgY2xhc3NlcyBudW1fZ2V0Jmx0OyZndDsgYW5kIG51bV9wdXQmbHQ7Jmd0OyBoYW5kbGUgbG9jYWxlrWRlcGVuZGVudCBudW1lcmljCmZvcm1hdHRpbmcgYW5kIHBhcnNpbmcuICBUaGVzZSBpbnNlcnRlciBmdW5jdGlvbnMgdXNlIHRoZSBpbWJ1ZWQKbG9jYWxlIHZhbHVlIHRvIHBlcmZvcm0gbnVtZXJpYyBmb3JtYXR0aW5nLiAgV2hlbiB2YWwgaXMgb2YgdHlwZSBib29sLApsb25nLCB1bnNpZ25lZCBsb25nLCBkb3VibGUsIGxvbmcgZG91YmxlLCBvciBjb25zdCB2b2lkKiwgdGhlCmZvcm1hdHRpbmcgY29udmVyc2lvbiBvY2N1cnMgYXMgaWYgaXQgcGVyZm9ybWVkIHRoZSBmb2xsb3dpbmcgY29kZQpmcmFnbWVudDoKPC9wPgoKPHByZT5ib29sIGZhaWxlZCA9IHVzZV9mYWNldCZsdDsKICAgbnVtX3B1dCZsdDtjaGFyVCxvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OwogICAmZ3Q7KGdldGxvYygpKS5wdXQoKnRoaXMsICp0aGlzLCBmaWxsKCksIHZhbCkuIGZhaWxlZCgpOwo8L3ByZT4KCjxwPgpXaGVuIHZhbCBpcyBvZiB0eXBlIHNob3J0IHRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIGl0CnBlcmZvcm1lZCB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6CjwvcD4KCjxwcmU+aW9zX2Jhc2U6OmZtdGZsYWdzIGJhc2VmbGFncyA9IGlvc19iYXNlOjpmbGFncygpICZhbXA7IGlvc19iYXNlOjpiYXNlZmllbGQ7CmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7CiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwKICAgICAgYmFzZWZsYWdzID09IGlvc19iYXNlOjpvY3QgfHwgYmFzZWZsYWdzID09IGlvc19iYXNlOjpoZXgKICAgICAgICAgPyBzdGF0aWNfY2FzdCZsdDtsb25nJmd0OyhzdGF0aWNfY2FzdCZsdDt1bnNpZ25lZCBzaG9ydCZndDsodmFsKSkKICAgICAgICAgOiBzdGF0aWNfY2FzdCZsdDtsb25nJmd0Oyh2YWwpKS4gZmFpbGVkKCk7CjwvcHJlPgoKPHA+CldoZW4gdmFsIGlzIG9mIHR5cGUgaW50IHRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIGl0IHBlcmZvcm1lZAp0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6CjwvcD4KCjxwcmU+aW9zX2Jhc2U6OmZtdGZsYWdzIGJhc2VmbGFncyA9IGlvc19iYXNlOjpmbGFncygpICZhbXA7IGlvc19iYXNlOjpiYXNlZmllbGQ7CmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7CiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwKICAgICAgYmFzZWZsYWdzID09IGlvc19iYXNlOjpvY3QgfHwgYmFzZWZsYWdzID09IGlvc19iYXNlOjpoZXgKICAgICAgICAgPyBzdGF0aWNfY2FzdCZsdDtsb25nJmd0OyhzdGF0aWNfY2FzdCZsdDt1bnNpZ25lZCBpbnQmZ3Q7KHZhbCkpCiAgICAgICAgIDogc3RhdGljX2Nhc3QmbHQ7bG9uZyZndDsodmFsKSkuIGZhaWxlZCgpOwo8L3ByZT4KCjxwPgpXaGVuIHZhbCBpcyBvZiB0eXBlIHVuc2lnbmVkIHNob3J0IG9yIHVuc2lnbmVkIGludCB0aGUgZm9ybWF0dGluZyBjb252ZXJzaW9uCm9jY3VycyBhcyBpZiBpdCBwZXJmb3JtZWQgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50Ogo8L3A+Cgo8cHJlPmJvb2wgZmFpbGVkID0gdXNlX2ZhY2V0Jmx0OwogICBudW1fcHV0Jmx0O2NoYXJULG9zdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQsdHJhaXRzJmd0OyAmZ3Q7CiAgICZndDsoZ2V0bG9jKCkpLnB1dCgqdGhpcywgKnRoaXMsIGZpbGwoKSwgc3RhdGljX2Nhc3QmbHQ7dW5zaWduZWQgbG9uZyZndDsodmFsKSkuCmZhaWxlZCgpOwo8L3ByZT4KCjxwPgpXaGVuIHZhbCBpcyBvZiB0eXBlIGZsb2F0IHRoZSBmb3JtYXR0aW5nIGNvbnZlcnNpb24gb2NjdXJzIGFzIGlmIGl0CnBlcmZvcm1lZCB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6CjwvcD4KCjxwcmU+Ym9vbCBmYWlsZWQgPSB1c2VfZmFjZXQmbHQ7CiAgIG51bV9wdXQmbHQ7Y2hhclQsb3N0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsKICAgJmd0OyhnZXRsb2MoKSkucHV0KCp0aGlzLCAqdGhpcywgZmlsbCgpLCBzdGF0aWNfY2FzdCZsdDtkb3VibGUmZ3Q7KHZhbCkpLgpmYWlsZWQoKTsKPC9wcmU+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1Ub3JvbnRvOiBUaGlzIGRpZmZlcnMgZnJvbSB0aGUgcHJldmlvdXMgcHJvcG9zZWQKcmVzb2x1dGlvbjsgUEpQIHByb3ZpZGVkIHRoZSBuZXcgd29yZGluZy4gIFRoZSBkaWZmZXJlbmNlcyBhcmUgaW4Kc2lnbmVkIHNob3J0IGFuZCBpbnQgb3V0cHV0Ll08L2k+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gd2FzIHRvIGNhc3QgaW50IGFuZCBzaG9ydCB0byBsb25nLAp1bnNpZ25lZCBpbnQgYW5kIHVuc2lnbmVkIHNob3J0IHRvIHVuc2lnbmVkIGxvbmcsIGFuZCBmbG9hdCB0byBkb3VibGUsCnRodXMgZW5zdXJpbmcgdGhhdCB3ZSBkb24ndCB0cnkgdG8gdXNlIG5vbmV4aXN0ZW50IG51bV9wdXQmbHQ7Jmd0OwptZW1iZXIgZnVuY3Rpb25zLiAgVGhlIGN1cnJlbnQgcHJvcG9zZWQgcmVzb2x1dGlvbiBpcyBtb3JlCmNvbXBsaWNhdGVkLCBidXQgZ2l2ZXMgbW9yZSBleHBlY3RlZCByZXN1bHRzIGZvciBoZXggYW5kIG9jdGFsIG91dHB1dApvZiBzaWduZWQgc2hvcnQgYW5kIHNpZ25lZCBpbnQuICAoT24gYSBzeXN0ZW0gd2l0aCAxNi1iaXQgc2hvcnQsIGZvcgpleGFtcGxlLCBwcmludGluZyBzaG9ydCgtMSkgaW4gaGV4IGZvcm1hdCBzaG91bGQgeWllbGQgMHhmZmZmLik8L3A+Cjxocj4KPGEgbmFtZT0iMTE4Ij48aDM+MTE4LiZuYnNwOzx0dD5iYXNpY19pc3RyZWFtPC90dD4gdXNlcyBub25leGlzdGVudCA8dHQ+bnVtX2dldDwvdHQ+IG1lbWJlciBmdW5jdGlvbnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE5vdiAxOTk4PC9wPgo8cD5Gb3JtYXR0ZWQgaW5wdXQgaXMgZGVmaW5lZCBmb3IgdGhlIHR5cGVzIDx0dD5zaG9ydDwvdHQ+LCA8dHQ+dW5zaWduZWQgc2hvcnQ8L3R0PiwgPHR0PmludDwvdHQ+LAo8dHQ+dW5zaWduZWQgaW50PC90dD4sIDx0dD5sb25nPC90dD4sIDx0dD51bnNpZ25lZCBsb25nPC90dD4sIDx0dD5mbG9hdDwvdHQ+LCA8dHQ+ZG91YmxlPC90dD4sCjx0dD5sb25nIGRvdWJsZTwvdHQ+LCA8dHQ+Ym9vbDwvdHQ+LCBhbmQgPHR0PnZvaWQqPC90dD4uIEFjY29yZGluZyB0byBzZWN0aW9uIDI3LjYuMS4yLjIsCmZvcm1hdHRlZCBpbnB1dCBvZiBhIHZhbHVlIDx0dD54PC90dD4gaXMgZG9uZSBhcyBpZiBieSB0aGUgZm9sbG93aW5nIGNvZGUgZnJhZ21lbnQ6IDwvcD4KCjxwcmU+dHlwZWRlZiBudW1fZ2V0Jmx0OyBjaGFyVCxpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyBudW1nZXQ7IAppb3N0YXRlIGVyciA9IDA7IAp1c2VfZmFjZXQmbHQ7IG51bWdldCAmZ3Q7KGxvYykuZ2V0KCp0aGlzLCAwLCAqdGhpcywgZXJyLCB2YWwpOyAKc2V0c3RhdGUoZXJyKTs8L3ByZT4KCjxwPkFjY29yZGluZyB0byBzZWN0aW9uIDIyLjIuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5nZXQubWVtYmVyc108L2E+LCBob3dldmVyLAo8dHQ+bnVtX2dldCZsdDsmZ3Q7OjpnZXQoKTwvdHQ+IGlzIG9ubHkgb3ZlcmxvYWRlZCBmb3IgdGhlIHR5cGVzCjx0dD5ib29sPC90dD4sIDx0dD5sb25nPC90dD4sIDx0dD51bnNpZ25lZCBzaG9ydDwvdHQ+LCA8dHQ+dW5zaWduZWQKaW50PC90dD4sIDx0dD51bnNpZ25lZCBsb25nPC90dD4sIDx0dD51bnNpZ25lZCBsb25nPC90dD4sCjx0dD5mbG9hdDwvdHQ+LCA8dHQ+ZG91YmxlPC90dD4sIDx0dD5sb25nIGRvdWJsZTwvdHQ+LCBhbmQKPHR0PnZvaWQqPC90dD4uIENvbXBhcmluZyB0aGUgbGlzdHMgZnJvbSB0aGUgdHdvIHNlY3Rpb25zLCB3ZSBmaW5kCnRoYXQgMjcuNi4xLjIuMiBpcyB1c2luZyBhIG5vbmV4aXN0ZW50IGZ1bmN0aW9uIGZvciB0eXBlcwo8dHQ+c2hvcnQ8L3R0PiBhbmQgPHR0PmludDwvdHQ+LiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNi4xLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpYyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQuYXJpdGhtZXRpY108L2E+IEFyaXRobWV0aWMgRXh0cmFjdG9ycywgcmVtb3ZlIHRoZQp0d28gbGluZXMgKDFzdCBhbmQgM3JkKSB3aGljaCByZWFkOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5vcGVyYXRvciZndDsmZ3Q7KHNob3J0JmFtcDsgdmFsKTsKLi4uCm9wZXJhdG9yJmd0OyZndDsoaW50JmFtcDsgdmFsKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+QW5kIGFkZCB0aGUgZm9sbG93aW5nIGF0IHRoZSBlbmQgb2YgdGhhdCBzZWN0aW9uICgyNy42LjEuMi4yKSA6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT5vcGVyYXRvciZndDsmZ3Q7KHNob3J0JmFtcDsgdmFsKTs8L3ByZT4KICA8cD5UaGUgY29udmVyc2lvbiBvY2N1cnMgYXMgaWYgcGVyZm9ybWVkIGJ5IHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudCAodXNpbmcKICB0aGUgc2FtZSBub3RhdGlvbiBhcyBmb3IgdGhlIHByZWNlZGluZyBjb2RlIGZyYWdtZW50KTo8L3A+CiAgPHByZT4gIHR5cGVkZWYgbnVtX2dldCZsdDsgY2hhclQsaXN0cmVhbWJ1Zl9pdGVyYXRvciZsdDtjaGFyVCx0cmFpdHMmZ3Q7ICZndDsgbnVtZ2V0OwogIGlvc3RhdGUgZXJyID0gMDsKICBsb25nIGx2YWw7CiAgdXNlX2ZhY2V0Jmx0OyBudW1nZXQgJmd0Oyhsb2MpLmdldCgqdGhpcywgMCwgKnRoaXMsIGVyciwgbHZhbCk7CiAgICAgICAgaWYgKGVyciA9PSAwCiAgICAgICAgICAgICAgICAmYW1wOyZhbXA7IChsdmFsICZsdDsgbnVtZXJpY19saW1pdHMmbHQ7c2hvcnQmZ3Q7OjptaW4oKSB8fCBudW1lcmljX2xpbWl0cyZsdDtzaG9ydCZndDs6Om1heCgpICZsdDsgbHZhbCkpCiAgICAgICAgICAgICAgICBlcnIgPSBpb3NfYmFzZTo6ZmFpbGJpdDsKICBzZXRzdGF0ZShlcnIpOzwvcHJlPgogIDxwcmU+b3BlcmF0b3ImZ3Q7Jmd0OyhpbnQmYW1wOyB2YWwpOzwvcHJlPgogIDxwPlRoZSBjb252ZXJzaW9uIG9jY3VycyBhcyBpZiBwZXJmb3JtZWQgYnkgdGhlIGZvbGxvd2luZyBjb2RlIGZyYWdtZW50ICh1c2luZwogIHRoZSBzYW1lIG5vdGF0aW9uIGFzIGZvciB0aGUgcHJlY2VkaW5nIGNvZGUgZnJhZ21lbnQpOjwvcD4KICA8cHJlPiAgdHlwZWRlZiBudW1fZ2V0Jmx0OyBjaGFyVCxpc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJULHRyYWl0cyZndDsgJmd0OyBudW1nZXQ7CiAgaW9zdGF0ZSBlcnIgPSAwOwogIGxvbmcgbHZhbDsKICB1c2VfZmFjZXQmbHQ7IG51bWdldCAmZ3Q7KGxvYykuZ2V0KCp0aGlzLCAwLCAqdGhpcywgZXJyLCBsdmFsKTsKICAgICAgICBpZiAoZXJyID09IDAKICAgICAgICAgICAgICAgICZhbXA7JmFtcDsgKGx2YWwgJmx0OyBudW1lcmljX2xpbWl0cyZsdDtpbnQmZ3Q7OjptaW4oKSB8fCBudW1lcmljX2xpbWl0cyZsdDtpbnQmZ3Q7OjptYXgoKSAmbHQ7IGx2YWwpKQogICAgICAgICAgICAgICAgZXJyID0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgc2V0c3RhdGUoZXJyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtVG9reW86IFBKUCBwcm92aWRlZCB0aGUgYWJvdmUgd29yZGluZy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxMTkiPjwvYT48aDM+PGEgbmFtZT0iMTE5Ij4xMTkuJm5ic3A7U2hvdWxkIHZpcnR1YWwgZnVuY3Rpb25zIGJlIGFsbG93ZWQgdG8gc3RyZW5ndGhlbiB0aGUgZXhjZXB0aW9uIHNwZWNpZmljYXRpb24/PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC40LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZyI+IFtsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5ODwvcD4KPHA+U2VjdGlvbiAxNy40LjQuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXMub24uZXhjZXB0aW9uLmhhbmRsaW5nIj4gW2xpYi5yZXMub24uZXhjZXB0aW9uLmhhbmRsaW5nXTwvYT4gc3RhdGVzOiA8L3A+Cgo8cD4iQW4gaW1wbGVtZW50YXRpb24gbWF5IHN0cmVuZ3RoZW4gdGhlIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uCmZvciBhIGZ1bmN0aW9uIGJ5IHJlbW92aW5nIGxpc3RlZCBleGNlcHRpb25zLiIgPC9wPgoKPHA+VGhlIHByb2JsZW0gaXMgdGhhdCBpZiBhbiBpbXBsZW1lbnRhdGlvbiBpcyBhbGxvd2VkIHRvIGRvIHRoaXMgZm9yCnZpcnR1YWwgZnVuY3Rpb25zLCB0aGVuIGEgbGlicmFyeSB1c2VyIGNhbm5vdCB3cml0ZSBhIGNsYXNzIHRoYXQKcG9ydGFibHkgZGVyaXZlcyBmcm9tIHRoYXQgY2xhc3MuIDwvcD4KCjxwPkZvciBleGFtcGxlLCB0aGlzIHdvdWxkIG5vdCBjb21waWxlIGlmIGlvc19iYXNlOjpmYWlsdXJlOjp+ZmFpbHVyZQpoYWQgYW4gZW1wdHkgZXhjZXB0aW9uIHNwZWNpZmljYXRpb246IDwvcD4KCjxwcmU+I2luY2x1ZGUgJmx0O2lvcyZndDsKI2luY2x1ZGUgJmx0O3N0cmluZyZndDsKCmNsYXNzIEQgOiBwdWJsaWMgc3RkOjppb3NfYmFzZTo6ZmFpbHVyZSB7CnB1YmxpYzoKICAgICAgICBEKGNvbnN0IHN0ZDo6c3RyaW5nJmFtcDspOwogICAgICAgIH5EKCk7IC8vIGVycm9yIC0gZXhjZXB0aW9uIHNwZWNpZmljYXRpb24gbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggCiAgICAgICAgICAgICAgLy8gb3ZlcnJpZGRlbiB2aXJ0dWFsIGZ1bmN0aW9uIGlvc19iYXNlOjpmYWlsdXJlOjp+ZmFpbHVyZSgpCn07PC9wcmU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIFNlY3Rpb24gMTcuNC40LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZyI+IFtsaWIucmVzLm9uLmV4Y2VwdGlvbi5oYW5kbGluZ108L2E+IGZyb206PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICJtYXkgc3RyZW5ndGhlbiB0aGUKZXhjZXB0aW9uLXNwZWNpZmljYXRpb24gZm9yIGEgZnVuY3Rpb24iPC9wPgoKPHA+dG86PC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7ICJtYXkgc3RyZW5ndGhlbiB0aGUKZXhjZXB0aW9uLXNwZWNpZmljYXRpb24gZm9yIGEgbm9uLXZpcnR1YWwgZnVuY3Rpb24iLiA8L3A+Cjxocj4KPGEgbmFtZT0iMTIwIj48aDM+MTIwLiZuYnNwO0NhbiBhbiBpbXBsZW1lbnRvciBhZGQgc3BlY2lhbGl6YXRpb25zPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlc2VydmVkLm5hbWVzIj4gW2xpYi5yZXNlcnZlZC5uYW1lc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5ODwvcD4KCjxwPlRoZSBvcmlnaW5hbCBpc3N1ZSBhc2tlZCB3aGV0aGVyIGEgbGlicmFyeSBpbXBsZW1lbnRvciBjb3VsZApzcGVjaWFsaXplIHN0YW5kYXJkIGxpYnJhcnkgdGVtcGxhdGVzIGZvciBidWlsdC1pbiB0eXBlcy4gIChUaGlzIHdhcwphbiBpc3N1ZSBiZWNhdXNlIHVzZXJzIGFyZSBwZXJtaXR0ZWQgdG8gZXhwbGljaXRseSBpbnN0YW50aWF0ZQpzdGFuZGFyZCBsaWJyYXJ5IHRlbXBsYXRlcy4pPC9wPgoKPHA+U3BlY2lhbGl6YXRpb25zIGFyZSBubyBsb25nZXIgYSBwcm9ibGVtLCBiZWNhdXNlIG9mIHRoZSByZXNvbHV0aW9uCnRvIGNvcmUgaXNzdWUgMjU5LiAgVW5kZXIgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24sIGl0IHdpbGwgYmUgbGVnYWwKZm9yIGEgdHJhbnNsYXRpb24gdW5pdCB0byBjb250YWluIGJvdGggYSBzcGVjaWFsaXphdGlvbiBhbmQgYW4KZXhwbGljaXQgaW5zdGFudGlhdGlvbiBvZiB0aGUgc2FtZSB0ZW1wbGF0ZSwgcHJvdmlkZWQgdGhhdCB0aGUKc3BlY2lhbGl6YXRpb24gY29tZXMgZmlyc3QuICBJbiBzdWNoIGEgY2FzZSwgdGhlIGV4cGxpY2l0Cmluc3RhbnRpYXRpb24gd2lsbCBiZSBpZ25vcmVkLiAgRnVydGhlciBkaXNjdXNzaW9uIG9mIGxpYnJhcnkgaXNzdWUKMTIwIGFzc3VtZXMgdGhhdCB0aGUgY29yZSAyNTkgcmVzb2x1dGlvbiB3aWxsIGJlIGFkb3B0ZWQuPC9wPgoKPHA+SG93ZXZlciwgYXMgbm90ZWQgaW4gbGliLTcwNDcsIG9uZSBwaWVjZSBvZiB0aGlzIGlzc3VlIHN0aWxsCnJlbWFpbnM6IHdoYXQgaGFwcGVucyBpZiBhIHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50b3IgZXhwbGljaXRseQppbnN0YW50aWF0ZXMgYSBzdGFuZGFyZCBsaWJyYXJ5IHRlbXBsYXRlcz8gIEl0J3MgaWxsZWdhbCBmb3IgYSBwcm9ncmFtCnRvIGNvbnRhaW4gdHdvIGRpZmZlcmVudCBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBvZiB0aGUgc2FtZSB0ZW1wbGF0ZQpmb3IgdGhlIHNhbWUgdHlwZSBpbiB0d28gZGlmZmVyZW50IHRyYW5zbGF0aW9uIHVuaXRzIChPRFIgdmlvbGF0aW9uKSwKYW5kIHRoZSBjb3JlIHdvcmtpbmcgZ3JvdXAgZG9lc24ndCBiZWxpZXZlIGl0IGlzIHByYWN0aWNhbCB0byByZWxheAp0aGF0IHJlc3RyaWN0aW9uLjwvcD4KCjxwPlRoZSBpc3N1ZSwgdGhlbiwgaXM6IGFyZSB1c2VycyBhbGxvd2VkIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUKc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXMgZm9yIG5vbi11c2VyIGRlZmluZWQgdHlwZXM/ICBUaGUgc3RhdHVzIHF1bwphbnN3ZXIgaXMgJ3llcycuICBDaGFuZ2luZyBpdCB0byAnbm8nIHdvdWxkIGdpdmUgbGlicmFyeSBpbXBsZW1lbnRvcnMKbW9yZSBmcmVlZG9tLjwvcD4KCjxwPlRoaXMgaXMgYW4gaXNzdWUgYmVjYXVzZSwgZm9yIHBlcmZvcm1hbmNlIHJlYXNvbnMsIGxpYnJhcnkKaW1wbGVtZW50b3JzIG9mdGVuIG5lZWQgdG8gZXhwbGljaXRseSBpbnN0YW50aWF0ZSBzdGFuZGFyZCBsaWJyYXJ5CnRlbXBsYXRlcy4gIChmb3IgZXhhbXBsZSwgc3RkOjpiYXNpY19zdHJpbmcmbHQ7Y2hhciZndDspICBEb2VzIGdpdmluZwp1c2VycyBmcmVlZG9tIHRvIGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgc3RhbmRhcmQgbGlicmFyeSB0ZW1wbGF0ZXMgZm9yCm5vbi11c2VyIGRlZmluZWQgdHlwZXMgbWFrZSBpdCBpbXBvc3NpYmxlIG9yIHBhaW5mdWxseSBkaWZmaWN1bHQgZm9yCmxpYnJhcnkgaW1wbGVtZW50b3JzIHRvIGRvIHRoaXM/PC9wPgoKPHA+Sm9obiBTcGljZXIgc3VnZ2VzdHMsIGluIGxpYi04OTU3LCB0aGF0IGxpYnJhcnkgaW1wbGVtZW50b3JzIGhhdmUgYQptZWNoYW5pc20gdGhleSBjYW4gdXNlIGZvciBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyB0aGF0IGRvZXNuJ3QKcHJldmVudCB1c2VycyBmcm9tIHBlcmZvcm1pbmcgdGhlaXIgb3duIGV4cGxpY2l0IGluc3RhbnRpYXRpb25zOiBwdXQKZWFjaCBleHBsaWNpdCBpbnN0YW50aWF0aW9uIGluIGl0cyBvd24gb2JqZWN0IGZpbGUuICAoRGlmZmVyZW50CnNvbHV0aW9ucyBtaWdodCBiZSBuZWNlc3NhcnkgZm9yIFVuaXggRFNPcyBvciBNUy1XaW5kb3dzIERMTHMuKSAgT24Kc29tZSBwbGF0Zm9ybXMsIGxpYnJhcnkgaW1wbGVtZW50b3JzIG1pZ2h0IG5vdCBuZWVkIHRvIGRvIGFueXRoaW5nCnNwZWNpYWw6IHRoZSAidW5kZWZpbmVkIGJlaGF2aW9yIiB0aGF0IHJlc3VsdHMgZnJvbSBoYXZpbmcgdHdvCmRpZmZlcmVudCBleHBsaWNpdCBpbnN0YW50aWF0aW9ucyBtaWdodCBiZSBoYXJtbGVzcy48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CiAgPHA+QXBwZW5kIHRvIDE3LjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlc2VydmVkLm5hbWVzIj4gW2xpYi5yZXNlcnZlZC5uYW1lc108L2E+IHBhcmFncmFwaCAxOiA8L3A+CiAgPGJsb2NrcXVvdGU+CiAgICBBIHByb2dyYW0gbWF5IGV4cGxpY2l0bHkgaW5zdGFudGlhdGUgYW55IHRlbXBsYXRlcyBpbiB0aGUgc3RhbmRhcmQKICAgIGxpYnJhcnkgb25seSBpZiB0aGUgZGVjbGFyYXRpb24gZGVwZW5kcyBvbiB0aGUgbmFtZSBvZiBhIHVzZXItZGVmaW5lZAogICAgdHlwZSBvZiBleHRlcm5hbCBsaW5rYWdlIGFuZCB0aGUgaW5zdGFudGlhdGlvbiBtZWV0cyB0aGUgc3RhbmRhcmQgbGlicmFyeQogICAgcmVxdWlyZW1lbnRzIGZvciB0aGUgb3JpZ2luYWwgdGVtcGxhdGUuCiAgPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IGNoYW5nZWQgdGhlIHdvcmRpbmcgZnJvbSAiYSB1c2VyLWRlZmluZWQgbmFtZSIgdG8gInRoZSBuYW1lIG9mCiAgYSB1c2VyLWRlZmluZWQgdHlwZSJdPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQgYW5vdGhlciBwb3NzaWJsZSByZXNvbHV0aW9uOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gbGlnaHQgb2YgdGhlIHJlc29sdXRpb24gdG8gY29yZSBpc3N1ZSAyNTksIG5vIG5vcm1hdGl2ZSBjaGFuZ2VzCiAgaW4gdGhlIGxpYnJhcnkgY2xhdXNlcyBhcmUgbmVjZXNzYXJ5LiAgQWRkIHRoZSBmb2xsb3dpbmcgbm9uLW5vcm1hdGl2ZQogIG5vdGUgdG8gdGhlIGVuZCBvZiAxNy40LjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXNlcnZlZC5uYW1lcyI+IFtsaWIucmVzZXJ2ZWQubmFtZXNdPC9hPiBwYXJhZ3JhcGggMTo8L3A+CiAgPGJsb2NrcXVvdGU+CiAgICBbPGk+Tm90ZTo8L2k+IEEgcHJvZ3JhbSBtYXkgZXhwbGljaXRseSBpbnN0YW50aWF0ZSBzdGFuZGFyZCBsaWJyYXJ5CiAgICB0ZW1wbGF0ZXMsIGV2ZW4gd2hlbiBhbiBleHBsaWNpdCBpbnN0YW50aWF0aW9uIGRvZXMgbm90IGRlcGVuZCBvbgogICAgYSB1c2VyLWRlZmluZWQgbmFtZS4gPGk+LS1lbmQgbm90ZTwvaT5dCiAgPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGUgTFdHIHJlamVjdGVkIHRoaXMgYmVjYXVzZSBpdCB3YXMgYmVsaWV2ZWQgdGhhdCBpdCB3b3VsZCBtYWtlCiAgaXQgdW5uZWNlc3NhcmlseSBkaWZmaWN1bHQgZm9yIGxpYnJhcnkgaW1wbGVtZW50b3JzIHRvIHdyaXRlCiAgaGlnaC1xdWFsaXR5IGltcGxlbWVudGF0aW9ucy4gIEEgcHJvZ3JhbSBtYXkgbm90IGluY2x1ZGUgYW4KICBleHBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIHRoZSBzYW1lIHRlbXBsYXRlLCBmb3IgdGhlIHNhbWUgdGVtcGxhdGUKICBhcmd1bWVudHMsIGluIHR3byBkaWZmZXJlbnQgdHJhbnNsYXRpb24gdW5pdHMuICBJZiB1c2VycyBhcmUKICBhbGxvd2VkIHRvIHByb3ZpZGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgb2YgU3RhbmRhcmQgTGlicmFyeQogIHRlbXBsYXRlcyBmb3IgYnVpbHQtaW4gdHlwZXMsIHRoZW4gbGlicmFyeSBpbXBsZW1lbnRvcnMgYXJlbid0LAogIGF0IGxlYXN0IG5vdCB3aXRob3V0IG5vbnBvcnRhYmxlIHRyaWNrcy48L3A+Cgo8cD5UaGUgbW9zdCBzZXJpb3VzIHByb2JsZW0gaXMgYSBjbGFzcyB0ZW1wbGF0ZSB0aGF0IGhhcyB3cml0ZWFibGUKICBzdGF0aWMgbWVtYmVyIHZhcmlhYmxlcy4gIFVuZm9ydHVuYXRlbHksIHN1Y2ggY2xhc3MgdGVtcGxhdGVzIGFyZQogIGltcG9ydGFudCBhbmQsIGluIGV4aXN0aW5nIFN0YW5kYXJkIExpYnJhcnkgaW1wbGVtZW50YXRpb25zLCBhcmUKICBvZnRlbiBleHBsaWNpdGx5IHNwZWNpYWxpemVkIGJ5IGxpYnJhcnkgaW1wbGVtZW50b3JzOiBsb2NhbGUgZmFjZXRzLAogIHdoaWNoIGhhdmUgYSB3cml0ZWFibGUgc3RhdGljIG1lbWJlciB2YXJpYWJsZSA8dHQ+aWQ8L3R0Pi4gIElmIGEKICB1c2VyJ3MgZXhwbGljaXQgaW5zdGFudGlhdGlvbiBjb2xsaWRlZCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbnMKICBleHBsaWNpdCBpbnN0YW50aWF0aW9uLCBpb3N0cmVhbSBpbml0aWFsaXphdGlvbiBjb3VsZCBjYXVzZSBsb2NhbGVzCiAgdG8gYmUgY29uc3RydWN0ZWQgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlLjwvcD4KCjxwPk9uZSBwcm9wb3NlZCBpbXBsZW1lbnRhdGlvbiB0ZWNobmlxdWUgd2FzIGZvciBTdGFuZGFyZCBMaWJyYXJ5CiAgaW1wbGVtZW50b3JzIHRvIHByb3ZpZGUgZXhwbGljaXQgaW5zdGFudGlhdGlvbnMgaW4gc2VwYXJhdGUgb2JqZWN0CiAgZmlsZXMsIHNvIHRoYXQgdGhleSB3b3VsZCBub3QgYmUgcGlja2VkIHVwIGJ5IHRoZSBsaW5rZXIgd2hlbiB0aGUKICB1c2VyIGFsc28gcHJvdmlkZXMgYW4gZXhwbGljaXQgaW5zdGFudGlhdGlvbi4gIEhvd2V2ZXIsIHRoaXMKICB0ZWNobmlxdWUgb25seSBhcHBsaWVzIGZvciBTdGFuZGFyZCBMaWJyYXJ5IGltcGxlbWVudGF0aW9ucyB0aGF0CiAgYXJlIHBhY2thZ2VkIGFzIHN0YXRpYyBhcmNoaXZlcy4gIE1vc3QgU3RhbmRhcmQgTGlicmFyeQogIGltcGxlbWVudGF0aW9ucyBub3dhZGF5cyBhcmUgcGFja2FnZWQgYXMgZHluYW1pYyBsaWJyYXJpZXMsIHNvIHRoaXMKICB0ZWNobmlxdWUgd291bGQgbm90IGFwcGx5LjwvcD4KCjxwPlRoZSBDb21taXR0ZWUgaXMgbm93IGNvbnNpZGVyaW5nIHN0YW5kYXJkaXphdGlvbiBvZiBkeW5hbWljCiAgbGlua2luZy4gIElmIHRoZXJlIGFyZSBzdWNoIGNoYW5nZXMgaW4gdGhlIGZ1dHVyZSwgaXQgbWF5IGJlCiAgYXBwcm9wcmlhdGUgdG8gcmV2aXNpdCB0aGlzIGlzc3VlIGxhdGVyLjwvcD4KPGhyPgo8YSBuYW1lPSIxMjIiPjxoMz4xMjIuJm5ic3A7c3RyZWFtYnVmL3dzdHJlYW1idWYgZGVzY3JpcHRpb24gc2hvdWxkIG5vdCBzYXkgdGhleSBhcmUgc3BlY2lhbGl6YXRpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYiPiBbbGliLnN0cmVhbWJ1Zl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5ODwvcD4KPHA+U2VjdGlvbiAyNy41LjIgZGVzY3JpYmVzIHRoZSBzdHJlYW1idWYgY2xhc3NlcyB0aGlzIHdheTogPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD5UaGUgY2xhc3Mgc3RyZWFtYnVmIGlzIGEgc3BlY2lhbGl6YXRpb24gb2YgdGhlIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZgpzcGVjaWFsaXplZCBmb3IgdGhlIHR5cGUgY2hhci4gPC9wPgoKPHA+VGhlIGNsYXNzIHdzdHJlYW1idWYgaXMgYSBzcGVjaWFsaXphdGlvbiBvZiB0aGUgdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyZWFtYnVmCnNwZWNpYWxpemVkIGZvciB0aGUgdHlwZSB3Y2hhcl90LiA8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGltcGxpZXMgdGhhdCB0aGVzZSBjbGFzc2VzIG11c3QgYmUgdGVtcGxhdGUgc3BlY2lhbGl6YXRpb25zLCBub3QgdHlwZWRlZnMuIDwvcD4KCjxwPkl0IGRvZXNuJ3Qgc2VlbSB0aGlzIHdhcyBpbnRlbmRlZCwgc2luY2UgU2VjdGlvbiAyNy41IGhhcyB0aGVtIGRlY2xhcmVkIGFzIHR5cGVkZWZzLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIDI3LjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmIj4gW2xpYi5zdHJlYW1idWZdPC9hPiBwYXJhZ3JhcGhzIDIgYW5kIDMgKHRoZSBhYm92ZSB0d28Kc2VudGVuY2VzKS4gPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIDx0dD5zdHJlYW1idWY8L3R0PiAgc3lub3BzaXMgYWxyZWFkeSBoYXMgYSBkZWNsYXJhdGlvbiBmb3IgdGhlCnR5cGVkZWZzIGFuZCB0aGF0IGlzIHN1ZmZpY2llbnQuIDwvcD4KPGhyPgo8YSBuYW1lPSIxMjMiPjxoMz4xMjMuJm5ic3A7U2hvdWxkIHZhbGFycmF5IGhlbHBlciBhcnJheXMgZmlsbCBmdW5jdGlvbnMgYmUgY29uc3Q/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuc2xpY2UuYXJyLmZpbGwiPiBbbGliLnNsaWNlLmFyci5maWxsXTwvYT4sIDI2LjMuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5maWxsIj4gW2xpYi5nc2xpY2UuYXJyYXkuZmlsbF08L2E+LCAyNi4zLjguNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5tYXNrLmFycmF5LmZpbGwiPiBbbGliLm1hc2suYXJyYXkuZmlsbF08L2E+LCAyNi4zLjkuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5pbmRpcmVjdC5hcnJheS5maWxsIj4gW2xpYi5pbmRpcmVjdC5hcnJheS5maWxsXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IERlYyAxOTk4IDwvcD4KPHA+T25lIG9mIHRoZSBvcGVyYXRvcj0gaW4gdGhlIHZhbGFycmF5IGhlbHBlciBhcnJheXMgaXMgY29uc3QgYW5kIG9uZQppcyBub3QuIEZvciBleGFtcGxlLCBsb29rIGF0IHNsaWNlX2FycmF5LiBUaGlzIG9wZXJhdG9yPSBpbiBTZWN0aW9uCjI2LjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnNsaWNlLmFyci5hc3NpZ24iPiBbbGliLnNsaWNlLmFyci5hc3NpZ25dPC9hPiBpcyBjb25zdDogPC9wPgoKPHA+Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD52b2lkIG9wZXJhdG9yPShjb25zdCB2YWxhcnJheSZsdDtUJmd0OyZhbXA7KSBjb25zdDs8L3R0PiA8L3A+Cgo8cD5idXQgdGhpcyBvbmUgaW4gU2VjdGlvbiAyNi4zLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5zbGljZS5hcnIuZmlsbCI+IFtsaWIuc2xpY2UuYXJyLmZpbGxdPC9hPiBpcyBub3Q6IDwvcD4KCjxwPiZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+dm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsgPC90dD48L3A+Cgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIHNlbWFudGljcyBmb3IgdGhlc2UgdHdvIGZ1bmN0aW9ucyBpcyBzaW1pbGFyLiA8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPjI2LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5zbGljZS5hcnJheSI+IFtsaWIudGVtcGxhdGUuc2xpY2UuYXJyYXldPC9hPiBUZW1wbGF0ZSBjbGFzcyBzbGljZV9hcnJheTwvcD4KPGJsb2NrcXVvdGU+CgogICA8cD5JbiB0aGUgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBmb3Igc2xpY2VfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnNsaWNlLmFyci5maWxsIj4gW2xpYi5zbGljZS5hcnIuZmlsbF08L2E+IHNsaWNlX2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuZ3NsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXldPC9hPiBUZW1wbGF0ZSBjbGFzcyBnc2xpY2VfYXJyYXk8L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+SW4gdGhlIGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gZm9yIGdzbGljZV9hcnJheSwgcmVwbGFjZSB0aGUgbWVtYmVyCiAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspOwogICAgPC9wcmU+CiAgIDxwPndpdGg8L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuMy43LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuZ3NsaWNlLmFycmF5LmZpbGwiPiBbbGliLmdzbGljZS5hcnJheS5maWxsXTwvYT4gZ3NsaWNlX2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNi4zLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUubWFzay5hcnJheSI+IFtsaWIudGVtcGxhdGUubWFzay5hcnJheV08L2E+IFRlbXBsYXRlIGNsYXNzIG1hc2tfYXJyYXk8L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+SW4gdGhlIGNsYXNzIHRlbXBsYXRlIGRlZmluaXRpb24gZm9yIG1hc2tfYXJyYXksIHJlcGxhY2UgdGhlIG1lbWJlcgogICBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD53aXRoPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspIGNvbnN0OwogICAgPC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjI2LjMuOC40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm1hc2suYXJyYXkuZmlsbCI+IFtsaWIubWFzay5hcnJheS5maWxsXTwvYT4gbWFza19hcnJheSBmaWxsIGZ1bmN0aW9uPC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkNoYW5nZSB0aGUgZnVuY3Rpb24gZGVjbGFyYXRpb248L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOyk7CiAgICA8L3ByZT4KICAgPHA+dG88L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuMy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLmluZGlyZWN0LmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheV08L2E+IFRlbXBsYXRlIGNsYXNzIGluZGlyZWN0X2FycmF5PC9wPgo8YmxvY2txdW90ZT4KCiAgIDxwPkluIHRoZSBjbGFzcyB0ZW1wbGF0ZSBkZWZpbml0aW9uIGZvciBpbmRpcmVjdF9hcnJheSwgcmVwbGFjZSB0aGUgbWVtYmVyCiAgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uPC9wPgogICAgPHByZT4gICAgICB2b2lkIG9wZXJhdG9yPShjb25zdCBUJmFtcDspOwogICAgPC9wcmU+CiAgIDxwPndpdGg8L3A+CiAgICA8cHJlPiAgICAgIHZvaWQgb3BlcmF0b3I9KGNvbnN0IFQmYW1wOykgY29uc3Q7CiAgICA8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+MjYuMy45LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuaW5kaXJlY3QuYXJyYXkuZmlsbCI+IFtsaWIuaW5kaXJlY3QuYXJyYXkuZmlsbF08L2E+IGluZGlyZWN0X2FycmF5IGZpbGwgZnVuY3Rpb248L3A+CjxibG9ja3F1b3RlPgoKICAgPHA+Q2hhbmdlIHRoZSBmdW5jdGlvbiBkZWNsYXJhdGlvbjwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KTsKICAgIDwvcHJlPgogICA8cD50bzwvcD4KICAgIDxwcmU+ICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgVCZhbXA7KSBjb25zdDsKICAgIDwvcHJlPgo8L2Jsb2NrcXVvdGU+CgoKPHA+PGk+W1JlZG1vbmQ6IFJvYmVydCBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlJ3Mgbm8gZ29vZCByZWFzb24gZm9yIG9uZSB2ZXJzaW9uIG9mIG9wZXJhdG9yPSBiZWluZyBjb25zdCBhbmQKYW5vdGhlciBvbmUgbm90LiAgQmVjYXVzZSBvZiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjUzIj4yNTM8L2E+LCB0aGlzIG5vdwptYXR0ZXJzOiB0aGVzZSBmdW5jdGlvbnMgYXJlIG5vdyBjYWxsYWJsZSBpbiBtb3JlIGNpcmN1bXN0YW5jZXMuICBJbgptYW55IGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucywgYm90aCB2ZXJzaW9ucyBhcmUgYWxyZWFkeSBjb25zdC48L3A+Cjxocj4KPGEgbmFtZT0iMTI0Ij48aDM+MTI0LiZuYnNwO2N0eXBlX2J5bmFtZSZsdDtjaGFyVCZndDs6OmRvX3NjYW5faXMgJmFtcDsgZG9fc2Nhbl9ub3QgcmV0dXJuIHR5cGUgc2hvdWxkIGJlIGNvbnN0IGNoYXJUKjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZSI+IFtsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMTk5ODwvcD4KPHA+SW4gU2VjdGlvbiAyMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jdHlwZS5ieW5hbWVdPC9hPgpjdHlwZV9ieW5hbWUmbHQ7Y2hhclQmZ3Q7Ojpkb19zY2FuX2lzKCkgYW5kIGRvX3NjYW5fbm90KCkgYXJlIGRlY2xhcmVkCnRvIHJldHVybiBhIGNvbnN0IGNoYXIqIG5vdCBhIGNvbnN0IGNoYXJUKi4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBTZWN0aW9uIDIyLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZSI+IFtsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZV08L2E+IDx0dD5kb19zY2FuX2lzKCk8L3R0PiBhbmQKPHR0PmRvX3NjYW5fbm90KCk8L3R0PiB0byByZXR1cm4gYSA8dHQ+IGNvbnN0CmNoYXJUKjwvdHQ+LiA8L3A+Cjxocj4KPGEgbmFtZT0iMTI1Ij48aDM+MTI1LiZuYnNwO3ZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvciEoKSByZXR1cm4gdHlwZSBpcyBpbmNvbnNpc3RlbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUudmFsYXJyYXkiPiBbbGliLnRlbXBsYXRlLnZhbGFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IERlYyAxOTk4PC9wPgo8cD5JbiBTZWN0aW9uIDI2LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS52YWxhcnJheSI+IFtsaWIudGVtcGxhdGUudmFsYXJyYXldPC9hPiB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3IhKCkgaXMKZGVjbGFyZWQgdG8gcmV0dXJuIGEgdmFsYXJyYXkmbHQ7VCZndDssIGJ1dCBpbiBTZWN0aW9uIDI2LjMuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LnVuYXJ5Ij4gW2xpYi52YWxhcnJheS51bmFyeV08L2E+IGl0IGlzIGRlY2xhcmVkIHRvIHJldHVybiBhIHZhbGFycmF5Jmx0O2Jvb2wmZ3Q7LiBUaGUKbGF0dGVyIGFwcGVhcnMgdG8gYmUgY29ycmVjdC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBpbiBTZWN0aW9uIDI2LjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS52YWxhcnJheSI+IFtsaWIudGVtcGxhdGUudmFsYXJyYXldPC9hPiB0aGUgZGVjbGFyYXRpb24gb2YKPHR0Pm9wZXJhdG9yISgpPC90dD4gc28gdGhhdCB0aGUgcmV0dXJuIHR5cGUgaXMKPHR0PnZhbGFycmF5Jmx0O2Jvb2wmZ3Q7PC90dD4uIDwvcD4KPGhyPgo8YSBuYW1lPSIxMjYiPjxoMz4xMjYuJm5ic3A7dHlwb3MgaW4gRWZmZWN0cyBjbGF1c2Ugb2YgY3R5cGU6OmRvX25hcnJvdygpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IERlYyAxOTk4PC9wPgo8cD5UeXBvcyBpbiAyMi4yLjEuMS4yIG5lZWQgdG8gYmUgZml4ZWQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIFNlY3Rpb24gMjIuMi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzXTwvYT4gY2hhbmdlOiA8L3A+Cgo8cHJlPiAgIGRvX3dpZGVuKGRvX25hcnJvdyhjKSwwKSA9PSBjPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgIGRvX3dpZGVuKGRvX25hcnJvdyhjLDApKSA9PSBjPC9wcmU+Cgo8cD5hbmQgY2hhbmdlOjwvcD4KCjxwcmU+ICAgKGlzKE0sYykgfHwgIWN0Yy5pcyhNLCBkb19uYXJyb3coYyksZGZhdWx0KSApPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgIChpcyhNLGMpIHx8ICFjdGMuaXMoTSwgZG9fbmFycm93KGMsZGZhdWx0KSkgKTwvcHJlPgo8aHI+CjxhIG5hbWU9IjEyNyI+PGgzPjEyNy4mbmJzcDthdXRvX3B0ciZsdDsmZ3Q7IGNvbnZlcnNpb24gaXNzdWVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNC41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hdXRvLnB0ciI+IFtsaWIuYXV0by5wdHJdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHcmVnIENvbHZpbiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBGZWIgMTk5OTwvcD4KPHA+VGhlcmUgYXJlIHR3byBwcm9ibGVtcyB3aXRoIHRoZSBjdXJyZW50IDx0dD5hdXRvX3B0cjwvdHQ+IHdvcmRpbmcKaW4gdGhlIHN0YW5kYXJkOiA8L3A+Cgo8cD5GaXJzdCwgdGhlIDx0dD5hdXRvX3B0cl9yZWY8L3R0PiBkZWZpbml0aW9uIGNhbm5vdCBiZSBuZXN0ZWQKYmVjYXVzZSA8dHQ+YXV0b19wdHImbHQ7RGVyaXZlZCZndDs6OmF1dG9fcHRyX3JlZjwvdHQ+IGlzIHVucmVsYXRlZCB0bwo8dHQ+YXV0b19wdHImbHQ7QmFzZSZndDs6OmF1dG9fcHRyX3JlZjwvdHQ+LiAgPGk+QWxzbyBzdWJtaXR0ZWQgYnkKTmF0aGFuIE15ZXJzLCB3aXRoIHRoZSBzYW1lIHByb3Bvc2VkIHJlc29sdXRpb24uPC9pPjwvcD4KCjxwPlNlY29uZCwgdGhlcmUgaXMgbm8gPHR0PmF1dG9fcHRyPC90dD4gYXNzaWdubWVudCBvcGVyYXRvciB0YWtpbmcgYW4KPHR0PmF1dG9fcHRyX3JlZjwvdHQ+IGFyZ3VtZW50LiA8L3A+Cgo8cD5JIGhhdmUgZGlzY3Vzc2VkIHRoZXNlIHByb2JsZW1zIHdpdGggbXkgcHJvcG9zYWwgY29hdXRob3IsIEJpbGwKR2liYm9ucywgYW5kIHdpdGggc29tZSBjb21waWxlciBhbmQgbGlicmFyeSBpbXBsZW1lbnRvcnMsIGFuZCB3ZQpiZWxpZXZlIHRoYXQgdGhlc2UgcHJvYmxlbXMgYXJlIG5vdCBkZXNpcmVkIG9yIGRlc2lyYWJsZSBpbXBsaWNhdGlvbnMKb2YgdGhlIHN0YW5kYXJkLiA8L3A+Cgo8cD4yNSBBdWcgMTk5OTogVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gbm93IHJlZmxlY3RzIGNoYW5nZXMgc3VnZ2VzdGVkCmJ5IERhdmUgQWJyYWhhbXMsIHdpdGggR3JlZyBDb2x2aW4ncyBjb25jdXJyZW5jZTsgMSkgY2hhbmdlZAoiYXNzaWdubWVudCBvcGVyYXRvciIgdG8gInB1YmxpYyBhc3NpZ25tZW50Cm9wZXJhdG9yIiwgMikgY2hhbmdlZCBlZmZlY3RzIHRvIHNwZWNpZnkgdXNlIG9mIHJlbGVhc2UoKSwgMykKbWFkZSB0aGUgY29udmVyc2lvbiB0byBhdXRvX3B0cl9yZWYgY29uc3QuIDwvcD4KCjxwPjIgRmViIDIwMDA6IExpc2EgTGlwcGluY290dCBjb21tZW50czogW1RoZSByZXNvbHV0aW9uIG9mXSB0aGlzIGlzc3VlCnN0YXRlcyB0aGF0IHRoZSBjb252ZXJzaW9uIGZyb20gYXV0b19wdHIgdG8gYXV0b19wdHJfcmVmIHNob3VsZApiZSBjb25zdC4gIFRoaXMgaXMgbm90IGFjY2VwdGFibGUsIGJlY2F1c2UgaXQgd291bGQgYWxsb3cKaW5pdGlhbGl6YXRpb24gYW5kIGFzc2lnbm1lbnQgZnJvbSBfYW55XyBjb25zdCBhdXRvX3B0ciEgIEl0IGFsc28KaW50cm9kdWNlcyBhbiBpbXBsZW1lbnRhdGlvbiBkaWZmaWN1bHR5IGluIHdyaXRpbmcgdGhpcyBjb252ZXJzaW9uCmZ1bmN0aW9uIC0tIG5hbWVseSwgc29tZXdoZXJlIGFsb25nIHRoZSBsaW5lLCBhIGNvbnN0X2Nhc3Qgd2lsbCBiZQpuZWNlc3NhcnkgdG8gcmVtb3ZlIHRoYXQgY29uc3Qgc28gdGhhdCByZWxlYXNlKCkgbWF5IGJlIGNhbGxlZC4gIFRoaXMKbWF5IHJlc3VsdCBpbiB1bmRlZmluZWQgYmVoYXZpb3IgWzcuMS41LjEvNF0uIFRoZSBjb252ZXJzaW9uCm9wZXJhdG9yIGRvZXMgbm90IGhhdmUgdG8gYmUgY29uc3QsIGJlY2F1c2UgYSBub24tY29uc3QgaW1wbGljaXQKb2JqZWN0IHBhcmFtZXRlciBtYXkgYmUgYm91bmQgdG8gYW4gcnZhbHVlIFsxMy4zLjMuMS40LzNdClsxMy4zLjEvNV0uIDwvcD4KCiAgPHA+VG9reW86IFRoZSBMV0cgcmVtb3ZlZCB0aGUgZm9sbG93aW5nIGZyb20gdGhlIHByb3Bvc2VkIHJlc29sdXRpb246PC9wPgoKICA8cD5JbiAyMC40LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmF1dG8ucHRyIj4gW2xpYi5hdXRvLnB0cl08L2E+LCBwYXJhZ3JhcGggMiwgYW5kIDIwLjQuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hdXRvLnB0ci5jb252Ij4gW2xpYi5hdXRvLnB0ci5jb252XTwvYT4sIAogIHBhcmFncmFwaCAyLCBtYWtlIHRoZSBjb252ZXJzaW9uIHRvIGF1dG9fcHRyX3JlZiBjb25zdDo8L3A+CiAgPGJsb2NrcXVvdGU+CiAgICA8cHJlPnRlbXBsYXRlJmx0O2NsYXNzIFkmZ3Q7IG9wZXJhdG9yIGF1dG9fcHRyX3JlZiZsdDtZJmd0OygpIGNvbnN0IHRocm93KCk7PC9wcmU+CiAgPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIwLjQuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYXV0by5wdHIiPiBbbGliLmF1dG8ucHRyXTwvYT4sIHBhcmFncmFwaCAyLCBtb3ZlCnRoZSA8dHQ+YXV0b19wdHJfcmVmPC90dD4gZGVmaW5pdGlvbiB0byBuYW1lc3BhY2Ugc2NvcGUuPC9wPgoKPHA+SW4gMjAuNC41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hdXRvLnB0ciI+IFtsaWIuYXV0by5wdHJdPC9hPiwgcGFyYWdyYXBoIDIsIGFkZAphIHB1YmxpYyBhc3NpZ25tZW50IG9wZXJhdG9yIHRvIHRoZSA8dHQ+YXV0b19wdHI8L3R0PiBkZWZpbml0aW9uOiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmF1dG9fcHRyJmFtcDsgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZiZsdDtYJmd0OyByKSB0aHJvdygpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5BbHNvIGFkZCB0aGUgYXNzaWdubWVudCBvcGVyYXRvciB0byAyMC40LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYXV0by5wdHIuY29udiI+IFtsaWIuYXV0by5wdHIuY29udl08L2E+OiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPmF1dG9fcHRyJmFtcDsgb3BlcmF0b3I9KGF1dG9fcHRyX3JlZiZsdDtYJmd0OyByKSB0aHJvdygpPC9wcmU+CgogIDxiPkVmZmVjdHM6PC9iPiBDYWxscyA8dHQ+cmVzZXQocC5yZWxlYXNlKCkpPC90dD4gZm9yIHRoZSA8dHQ+YXV0b19wdHIKICBwPC90dD4gdGhhdCA8dHQ+cjwvdHQ+IGhvbGRzIGEgcmVmZXJlbmNlIHRvLjxicj4KICA8Yj5SZXR1cm5zOiA8L2I+PHR0Pip0aGlzPC90dD4uCgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTI5Ij48aDM+MTI5LiZuYnNwO05lZWQgZXJyb3IgaW5kaWNhdGlvbiBmcm9tIHNlZWtwKCkgYW5kIHNlZWtnKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS51bmZvcm1hdHRlZF08L2E+LCAyNy42LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5zZWVrcyI+IFtsaWIub3N0cmVhbS5zZWVrc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMiBGZWIgMTk5OTwvcD4KPHA+Q3VycmVudGx5LCB0aGUgc3RhbmRhcmQgZG9lcyBub3Qgc3BlY2lmeSBob3cgc2Vla2coKSBhbmQgc2Vla3AoKQppbmRpY2F0ZSBmYWlsdXJlLiBUaGV5IGFyZSBub3QgcmVxdWlyZWQgdG8gc2V0IGZhaWxiaXQsIGFuZCB0aGV5IGNhbid0CnJldHVybiBhbiBlcnJvciBpbmRpY2F0aW9uIGJlY2F1c2UgdGhleSBtdXN0IHJldHVybiAqdGhpcywgaS5lLiB0aGUKc3RyZWFtLiBIZW5jZSwgaXQgaXMgdW5kZWZpbmVkIHdoYXQgaGFwcGVucyBpZiB0aGV5IGZhaWwuIEFuZCB0aGV5CjxpPmNhbjwvaT4gZmFpbCwgZm9yIGluc3RhbmNlLCB3aGVuIGEgZmlsZSBzdHJlYW0gaXMgZGlzY29ubmVjdGVkIGZyb20gdGhlCnVuZGVybHlpbmcgZmlsZSAoaXNfb3BlbigpPT1mYWxzZSkgb3Igd2hlbiBhIHdpZGUgY2hhcmFjdGVyIGZpbGUKc3RyZWFtIG11c3QgcGVyZm9ybSBhIHN0YXRlLWRlcGVuZGVudCBjb2RlIGNvbnZlcnNpb24sIGV0Yy4gPC9wPgoKPHA+VGhlIHN0cmVhbSBmdW5jdGlvbnMgc2Vla2coKSBhbmQgc2Vla3AoKSBzaG91bGQgc2V0IGZhaWxiaXQgaW4gdGhlCnN0cmVhbSBzdGF0ZSBpbiBjYXNlIG9mIGZhaWx1cmUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCB0byB0aGUgRWZmZWN0czogY2xhdXNlIG9mJm5ic3A7IHNlZWtnKCkgaW4gCjI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4gYW5kIHRvIHRoZSBFZmZlY3RzOiBjbGF1c2Ugb2Ygc2Vla3AoKSBpbgoyNy42LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5zZWVrcyI+IFtsaWIub3N0cmVhbS5zZWVrc108L2E+OiA8L3A+Cgo8YmxvY2txdW90ZT4KICA8cD5JbiBjYXNlIG9mIGZhaWx1cmUsIHRoZSBmdW5jdGlvbiBjYWxscyA8dHQ+c2V0c3RhdGUoZmFpbGJpdCk8L3R0PiAod2hpY2ggbWF5IHRocm93IDx0dD5pb3NfYmFzZTo6ZmFpbHVyZTwvdHQ+KS4KICA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlNldHRpbmcgZmFpbGJpdCBpcyB0aGUgdXN1YWwgZXJyb3IgcmVwb3J0aW5nIG1lY2hhbmlzbSBmb3Igc3RyZWFtczwvcD4KPGhyPgo8YSBuYW1lPSIxMzIiPjxoMz4xMzIuJm5ic3A7bGlzdDo6cmVzaXplIGRlc2NyaXB0aW9uIHVzZXMgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3QuY2FwYWNpdHkiPiBbbGliLmxpc3QuY2FwYWNpdHldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE1hciAxOTk5PC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gcmVhZHM6PC9wPgoKPHA+LTEtIEVmZmVjdHM6PC9wPgoKPHByZT4gICAgICAgICBpZiAoc3ogJmd0OyBzaXplKCkpCiAgICAgICAgICAgaW5zZXJ0KGVuZCgpLCBzei1zaXplKCksIGMpOwogICAgICAgICBlbHNlIGlmIChzeiAmbHQ7IHNpemUoKSkKICAgICAgICAgICBlcmFzZShiZWdpbigpK3N6LCBlbmQoKSk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gIGRvIG5vdGhpbmc8L3ByZT4KCjxwPk9idmlvdXNseSBsaXN0OjpyZXNpemUgc2hvdWxkIG5vdCBiZSBzcGVjaWZpZWQgaW4gdGVybXMgb2YgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMy4yLjIuMiBwYXJhZ3JhcGggMSB0bzo8L3A+Cgo8cD5FZmZlY3RzOjwvcD4KCjxwcmU+ICAgICAgICAgaWYgKHN6ICZndDsgc2l6ZSgpKQogICAgICAgICAgIGluc2VydChlbmQoKSwgc3otc2l6ZSgpLCBjKTsKICAgICAgICAgZWxzZSBpZiAoc3ogJmx0OyBzaXplKCkpCiAgICAgICAgIHsKICAgICAgICAgICBpdGVyYXRvciBpID0gYmVnaW4oKTsKICAgICAgICAgICBhZHZhbmNlKGksIHN6KTsKICAgICAgICAgICBlcmFzZShpLCBlbmQoKSk7CiAgICAgICAgIH08L3ByZT4KCjxwPjxpPltEdWJsaW46IFRoZSBMV0cgYXNrZWQgSG93YXJkIHRvIGRpc2N1c3MgZXhjZXB0aW9uIHNhZmV0eSBvZmZsaW5lCndpdGggRGF2aWQgQWJyYWhhbXMuIFRoZXkgaGFkIGEgZGlzY3Vzc2lvbiBhbmQgYmVsaWV2ZSB0aGVyZSBpcwpubyBpc3N1ZSBvZiBleGNlcHRpb24gc2FmZXR5IHdpdGggdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTMzIj48aDM+MTMzLiZuYnNwO21hcCBtaXNzaW5nIGdldF9hbGxvY2F0b3IoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLm1hcCI+IFtsaWIubWFwXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBNYXIgMTk5OTwvcD4KPHA+VGhlIHRpdGxlIHNheXMgaXQgYWxsLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbnNlcnQgaW4gMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiwgcGFyYWdyYXBoIDIsCmFmdGVyIG9wZXJhdG9yPSBpbiB0aGUgbWFwIGRlY2xhcmF0aW9uOjwvcD4KCjxwcmU+ICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdDs8L3ByZT4KPGhyPgo8YSBuYW1lPSIxMzQiPjxoMz4xMzQuJm5ic3A7dmVjdG9yIGNvbnN0cnVjdG9ycyBvdmVyIHNwZWNpZmllZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudmVjdG9yLmNvbnMiPiBbbGliLnZlY3Rvci5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBNYXIgMTk5OTwvcD4KPHA+VGhlIGNvbXBsZXhpdHkgZGVzY3JpcHRpb24gc2F5czogIkl0IGRvZXMgYXQgbW9zdCAyTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvcgpvZiBUIGFuZCBsb2dOIHJlYWxsb2NhdGlvbnMgaWYgdGhleSBhcmUganVzdCBpbnB1dCBpdGVyYXRvcnMgLi4uIi48L3A+Cgo8cD5UaGlzIGFwcGVhcnMgdG8gYmUgb3Zlcmx5IHJlc3RyaWN0aXZlLCBkaWN0YXRpbmcgdGhlIHByZWNpc2UgbWVtb3J5L3BlcmZvcm1hbmNlCnRyYWRlb2ZmIGZvciB0aGUgaW1wbGVtZW50b3IuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMy4yLjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5jb25zIj4gW2xpYi52ZWN0b3IuY29uc108L2E+LCBwYXJhZ3JhcGggMSB0bzo8L3A+Cgo8cD4tMS0gQ29tcGxleGl0eTogVGhlIGNvbnN0cnVjdG9yIHRlbXBsYXRlICZsdDtjbGFzcwpJbnB1dEl0ZXJhdG9yJmd0OyB2ZWN0b3IoSW5wdXRJdGVyYXRvciBmaXJzdCwgSW5wdXRJdGVyYXRvciBsYXN0KQptYWtlcyBvbmx5IE4gY2FsbHMgdG8gdGhlIGNvcHkgY29uc3RydWN0b3Igb2YgVCAod2hlcmUgTiBpcyB0aGUKZGlzdGFuY2UgYmV0d2VlbiBmaXJzdCBhbmQgbGFzdCkgYW5kIG5vIHJlYWxsb2NhdGlvbnMgaWYgaXRlcmF0b3JzCmZpcnN0IGFuZCBsYXN0IGFyZSBvZiBmb3J3YXJkLCBiaWRpcmVjdGlvbmFsLCBvciByYW5kb20gYWNjZXNzCmNhdGVnb3JpZXMuIEl0IG1ha2VzIG9yZGVyIE4gY2FsbHMgdG8gdGhlIGNvcHkgY29uc3RydWN0b3Igb2YgVCBhbmQKb3JkZXIgbG9nTiByZWFsbG9jYXRpb25zIGlmIHRoZXkgYXJlIGp1c3QgaW5wdXQgaXRlcmF0b3JzLgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4iYXQgbW9zdCAyTiBjYWxscyIgaXMgY29ycmVjdCBvbmx5IGlmIHRoZSBncm93dGggZmFjdG9yCmlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byAyLgo8L3A+Cjxocj4KPGEgbmFtZT0iMTM2Ij48aDM+MTM2LiZuYnNwO3NlZWtwLCBzZWVrZyBzZXR0aW5nIHdyb25nIHN0cmVhbXM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IE1hciAxOTk5PC9wPgo8cD5JIG1heSBiZSBtaXN1bmRlcnN0YW5kaW5nIHRoZSBpbnRlbnQsIGJ1dCBzaG91bGQgbm90IHNlZWtnIHNldCBvbmx5CnRoZSBpbnB1dCBzdHJlYW0gYW5kIHNlZWtwIHNldCBvbmx5IHRoZSBvdXRwdXQgc3RyZWFtPyBUaGUgZGVzY3JpcHRpb24Kc2VlbXMgdG8gc2F5IHRoYXQgZWFjaCBzaG91bGQgc2V0IGJvdGggaW5wdXQgYW5kIG91dHB1dCBzdHJlYW1zLiBJZgp0aGF0J3MgcmVhbGx5IHRoZSBpbnRlbnQsIEkgd2l0aGRyYXcgdGhpcyBwcm9wb3NhbC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gc2VjdGlvbiAyNy42LjEuMyBjaGFuZ2U6PC9wPgoKPHByZT5iYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBzZWVrZyhwb3NfdHlwZSBwb3MpOwpFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla3Bvcyhwb3MpLiA8L3ByZT4KCjxwPlRvOjwvcD4KCjxwcmU+YmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgc2Vla2cocG9zX3R5cGUgcG9zKTsKRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtwb3MocG9zLCBpb3NfYmFzZTo6aW4pLiA8L3ByZT4KCjxwPkluIHNlY3Rpb24gMjcuNi4xLjMgY2hhbmdlOjwvcD4KCjxwcmU+YmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgc2Vla2cob2ZmX3R5cGUmYW1wOyBvZmYsIGlvc19iYXNlOjpzZWVrZGlyIGRpcik7CkVmZmVjdHM6IElmIGZhaWwoKSAhPSB0cnVlLCBleGVjdXRlcyByZGJ1ZigpLSZndDtwdWJzZWVrb2ZmKG9mZiwgZGlyKS4gPC9wcmU+Cgo8cD5Ubzo8L3A+Cgo8cHJlPmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHNlZWtnKG9mZl90eXBlJmFtcDsgb2ZmLCBpb3NfYmFzZTo6c2Vla2RpciBkaXIpOwpFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla29mZihvZmYsIGRpciwgaW9zX2Jhc2U6OmluKS4gPC9wcmU+Cgo8cD5JbiBzZWN0aW9uIDI3LjYuMi40LCBwYXJhZ3JhcGggMiBjaGFuZ2U6PC9wPgoKPHByZT4tMi0gRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtwb3MocG9zKS4gPC9wcmU+Cgo8cD5Ubzo8L3A+Cgo8cHJlPi0yLSBFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla3Bvcyhwb3MsIGlvc19iYXNlOjpvdXQpLiA8L3ByZT4KCjxwPkluIHNlY3Rpb24gMjcuNi4yLjQsIHBhcmFncmFwaCA0IGNoYW5nZTo8L3A+Cgo8cHJlPi00LSBFZmZlY3RzOiBJZiBmYWlsKCkgIT0gdHJ1ZSwgZXhlY3V0ZXMgcmRidWYoKS0mZ3Q7cHVic2Vla29mZihvZmYsIGRpcikuIDwvcHJlPgoKPHA+VG86PC9wPgoKPHByZT4tNC0gRWZmZWN0czogSWYgZmFpbCgpICE9IHRydWUsIGV4ZWN1dGVzIHJkYnVmKCktJmd0O3B1YnNlZWtvZmYob2ZmLCBkaXIsIGlvc19iYXNlOjpvdXQpLiA8L3ByZT4KCjxwPjxpPltEdWJsaW46IERpZXRtYXIgS/xobCB0aGlua3MgdGhpcyBpcyBwcm9iYWJseSBjb3JyZWN0LCBidXQgd291bGQKbGlrZSB0aGUgb3BpbmlvbiBvZiBtb3JlIGlvc3RyZWFtIGV4cGVydHMgYmVmb3JlIHRha2luZyBhY3Rpb24uXTwvaT48L3A+Cgo8cD48aT5bVG9reW86IFJldmlld2VkIGJ5IHRoZSBMV0cuIFBKUCBub3RlZCB0aGF0IGFsdGhvdWdoIGhpcyBkb2NzIGFyZQppbmNvcnJlY3QsIGhpcyBpbXBsZW1lbnRhdGlvbiBhbHJlYWR5IGltcGxlbWVudHMgdGhlIFByb3Bvc2VkClJlc29sdXRpb24uXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogTWF0dCBBdXN0ZXJuIGNvbW1lbnRzOjxicj4KSXMgaXQgYSBwcm9ibGVtIHdpdGggYmFzaWNfaXN0cmVhbSBhbmQgYmFzaWNfb3N0cmVhbSwgb3IgaXMgaXQgYSBwcm9ibGVtCndpdGggYmFzaWNfc3RyaW5nYnVmPwpXZSBjb3VsZCByZXNvbHZlIHRoZSBpc3N1ZSBlaXRoZXIgYnkgY2hhbmdpbmcgYmFzaWNfaXN0cmVhbSBhbmQKYmFzaWNfb3N0cmVhbSwgb3IgYnkgY2hhbmdpbmcgYmFzaWNfc3RyaW5nYnVmLiBJIHByZWZlciB0aGUgbGF0dGVyCmNoYW5nZSAob3IgbWF5YmUgYm90aCBjaGFuZ2VzKTogSSBkb24ndCBzZWUgYW55IHJlYXNvbiBmb3IgdGhlIHN0YW5kYXJkIHRvCnJlcXVpcmUgdGhhdCBzdGQ6OnN0cmluZ2J1ZiBzKHN0ZDo6c3RyaW5nKCJmb28iKSwgc3RkOjppb3NfYmFzZTo6aW4pOwpzLnB1YnNlZWtvZmYoMCwgc3RkOjppb3NfYmFzZTo6YmVnKTsgbXVzdCBmYWlsLjxicj4KVGhpcyByZXF1aXJlbWVudCBpcyBhIGJpdCB3ZWlyZC4gVGhlcmUncyBubyBzaW1pbGFyIHJlcXVpcmVtZW50CmZvciBiYXNpY19zdHJlYW1idWYmbHQ7Jmd0Ozo6c2Vla3Bvcywgb3IgZm9yIGJhc2ljX2ZpbGVidWYmbHQ7Jmd0Ozo6c2Vla29mZiBvcgpiYXNpY19maWxlYnVmJmx0OyZndDs6OnNlZWtwb3MuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTM3Ij48aDM+MTM3LiZuYnNwO0RvIHVzZV9mYWNldCBhbmQgaGFzX2ZhY2V0IGxvb2sgaW4gdGhlIGdsb2JhbCBsb2NhbGU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTWFyIDE5OTk8L3A+CjxwPlNlY3Rpb24gMjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlIj4gW2xpYi5sb2NhbGVdPC9hPiBzYXlzOjwvcD4KCjxwPi00LSBJbiB0aGUgY2FsbCB0byB1c2VfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYyksIHRoZSB0eXBlIGFyZ3VtZW50CmNob29zZXMgYSBmYWNldCwgbWFraW5nIGF2YWlsYWJsZSBhbGwgbWVtYmVycyBvZiB0aGUgbmFtZWQgdHlwZS4gSWYKRmFjZXQgaXMgbm90IHByZXNlbnQgaW4gYSBsb2NhbGUgKG9yLCBmYWlsaW5nIHRoYXQsIGluIHRoZSBnbG9iYWwKbG9jYWxlKSwgaXQgdGhyb3dzIHRoZSBzdGFuZGFyZCBleGNlcHRpb24gYmFkX2Nhc3QuIEEgQysrIHByb2dyYW0gY2FuCmNoZWNrIGlmIGEgbG9jYWxlIGltcGxlbWVudHMgYSBwYXJ0aWN1bGFyIGZhY2V0IHdpdGggdGhlIHRlbXBsYXRlCmZ1bmN0aW9uIGhhc19mYWNldCZsdDtGYWNldCZndDsoKS4gPC9wPgoKPHA+VGhpcyBjb250cmFkaWN0cyB0aGUgc3BlY2lmaWNhdGlvbiBnaXZlbiBpbiBzZWN0aW9uIAoyMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuZ2xvYmFsLnRlbXBsYXRlcyI+IFtsaWIubG9jYWxlLmdsb2JhbC50ZW1wbGF0ZXNdPC9hPjoKPGJyPjxicj4KdGVtcGxhdGUgJmx0O2NsYXNzJm5ic3A7IEZhY2V0Jmd0OyBjb25zdCZuYnNwOyBGYWNldCZhbXA7IHVzZV9mYWNldChjb25zdApsb2NhbGUmYW1wOyZuYnNwOyBsb2MpOyA8YnI+Cjxicj4KLTEtIEdldCBhIHJlZmVyZW5jZSB0byBhIGZhY2V0IG9mIGEgbG9jYWxlLiA8YnI+Ci0yLSBSZXR1cm5zOiBhIHJlZmVyZW5jZSB0byB0aGUgY29ycmVzcG9uZGluZyBmYWNldCBvZiBsb2MsIGlmIHByZXNlbnQuIDxicj4KLTMtIFRocm93czogYmFkX2Nhc3QgaWYgaGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpIGlzIGZhbHNlLiA8YnI+Ci00LSBOb3RlczogVGhlIHJlZmVyZW5jZSByZXR1cm5lZCByZW1haW5zIHZhbGlkIGF0IGxlYXN0IGFzIGxvbmcgYXMgYW55IGNvcHkgb2YgbG9jIGV4aXN0cwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIHRoZSBwaHJhc2UgIihvciwgZmFpbGluZyB0aGF0LCBpbiB0aGUgZ2xvYmFsIGxvY2FsZSkiCmZyb20gc2VjdGlvbiAyMi4xLjEuIDwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPk5lZWRlZCBmb3IgY29uc2lzdGVuY3kgd2l0aCB0aGUgd2F5IGxvY2FsZXMgYXJlIGhhbmRsZWQgZWxzZXdoZXJlCmluIHRoZSBzdGFuZGFyZC48L3A+Cjxocj4KPGEgbmFtZT0iMTM5Ij48aDM+MTM5LiZuYnNwO09wdGlvbmFsIHNlcXVlbmNlIG9wZXJhdGlvbiB0YWJsZSBkZXNjcmlwdGlvbiB1bmNsZWFyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2VxdWVuY2UucmVxbXRzIj4gW2xpYi5zZXF1ZW5jZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIE1hciAxOTk5PC9wPgo8cD5UaGUgc2VudGVuY2UgaW50cm9kdWNpbmcgdGhlIE9wdGlvbmFsIHNlcXVlbmNlIG9wZXJhdGlvbiB0YWJsZQooMjMuMS4xIHBhcmFncmFwaCAxMikgaGFzIHR3byBwcm9ibGVtczo8L3A+Cgo8cD5BLiBJdCBzYXlzIGBgVGhlIG9wZXJhdGlvbnMgaW4gdGFibGUgNjggYXJlIHByb3ZpZGVkIG9ubHkgZm9yIHRoZSBjb250YWluZXJzIGZvciB3aGljaAp0aGV5IHRha2UgY29uc3RhbnQgdGltZS4nJzxicj4KPGJyPgpUaGF0IGNvdWxkIGJlIGludGVycHJldGVkIGluIHR3byB3YXlzLCBvbmUgb2YgdGhlbSBiZWluZyBgYEV2ZW4gdGhvdWdoIHRhYmxlIDY4IHNob3dzCnBhcnRpY3VsYXIgb3BlcmF0aW9ucyBhcyBiZWluZyBwcm92aWRlZCwgaW1wbGVtZW50YXRpb25zIGFyZSBmcmVlIHRvIG9taXQgdGhlbSBpZiB0aGV5CmNhbm5vdCBpbXBsZW1lbnQgdGhlbSBpbiBjb25zdGFudCB0aW1lLicnPGJyPgo8YnI+CkIuIFRoYXQgcGFyYWdyYXBoIHNheXMgbm90aGluZyBhYm91dCBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZSwgYW5kIGl0IHNob3VsZC4mbmJzcDs8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgd29yZGluZyBpbiAyMy4xLjEgcGFyYWdyYXBoIDEyJm5ic3A7IHdoaWNoIGJlZ2lucyBgYFRoZSBvcGVyYXRpb25zIGluIHRhYmxlIDY4IGFyZSBwcm92aWRlZCBvbmx5Li4uIgp3aXRoOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPlRhYmxlIDY4IGxpc3RzIHNlcXVlbmNlIG9wZXJhdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIHNvbWUgdHlwZXMgb2Ygc2VxdWVudGlhbAogIGNvbnRhaW5lcnMgYnV0IG5vdCBvdGhlcnMuIEFuIGltcGxlbWVudGF0aW9uIHNoYWxsIHByb3ZpZGUgdGhlc2Ugb3BlcmF0aW9ucyBmb3IgYWxsCiAgY29udGFpbmVyIHR5cGVzIHNob3duIGluIHRoZSBgYGNvbnRhaW5lcicnIGNvbHVtbiwgYW5kIHNoYWxsIGltcGxlbWVudCB0aGVtIHNvIGFzIHRvIHRha2UKICBhbW9ydGl6ZWQgY29uc3RhbnQgdGltZS48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNDEiPjxoMz4xNDEuJm5ic3A7YmFzaWNfc3RyaW5nOjpmaW5kX2xhc3Rfb2YsIGZpbmRfbGFzdF9ub3Rfb2Ygc2F5IHBvcyBpbnN0ZWFkIG9mIHhwb3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjYuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6ZmluZC5sYXN0Lm9mIj4gW2xpYi5zdHJpbmc6OmZpbmQubGFzdC5vZl08L2E+LCAyMS4zLjYuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZzo6ZmluZC5sYXN0Lm5vdC5vZiI+IFtsaWIuc3RyaW5nOjpmaW5kLmxhc3Qubm90Lm9mXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QXJjaCBSb2Jpc29uJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI4IEFwciAxOTk5PC9wPgo8cD5TZWN0aW9ucyAyMS4zLjYuNCBwYXJhZ3JhcGggMSBhbmQgMjEuMy42LjYgcGFyYWdyYXBoIDEgc3VyZWx5IGhhdmUgbWlzcHJpbnRzIHdoZXJlIHRoZXkKc2F5Ojxicj4KPGJyPgomIzgyMTI7IDx0dD54cG9zICZsdDs9IHBvczwvdHQ+IGFuZCA8dHQ+cG9zICZsdDsgc2l6ZSgpOzwvdHQ+PC9wPgoKPHA+U3VyZWx5IHRoZSBkb2N1bWVudCBtZWFudCB0byBzYXkgYGA8dHQ+eHBvcyAmbHQ7IHNpemUoKTwvdHQ+JycgaW4gYm90aCBwbGFjZXMuPC9wPgoKPHA+PGk+W0p1ZHkgV2FyZCBhbHNvIHNlbnQgaW4gdGhpcyBpc3N1ZSBmb3IgMjEuMy42LjQgd2l0aCB0aGUgc2FtZQpwcm9wb3NlZCByZXNvbHV0aW9uLl08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSBTZWN0aW9ucyAyMS4zLjYuNCBwYXJhZ3JhcGggMSBhbmQgMjEuMy42LjYgcGFyYWdyYXBoIDEsIHRoZSBsaW5lIHdoaWNoIHNheXM6PGJyPgo8YnI+CiYjODIxMjsgPHR0Pnhwb3MgJmx0Oz0gcG9zPC90dD4gYW5kIDx0dD5wb3MgJmx0OyBzaXplKCk7PGJyPgo8YnI+CjwvdHQ+dG86PGJyPgo8dHQ+PGJyPgo8L3R0PiYjODIxMjsgPHR0Pnhwb3MgJmx0Oz0gcG9zPC90dD4gYW5kIDx0dD54cG9zICZsdDsgc2l6ZSgpOzwvdHQ+PC9wPgo8aHI+CjxhIG5hbWU9IjE0MiI+PGgzPjE0Mi4mbmJzcDtsZXhpY29ncmFwaGljYWxfY29tcGFyZSBjb21wbGV4aXR5IHdyb25nPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmxleC5jb21wYXJpc29uIj4gW2xpYi5hbGcubGV4LmNvbXBhcmlzb25dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIb3dhcmQgSGlubmFudCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdW4gMTk5OTwvcD4KPHA+VGhlIGxleGljb2dyYXBoaWNhbF9jb21wYXJlIGNvbXBsZXhpdHkgaXMgc3BlY2lmaWVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgIkF0IG1vc3QgbWluKChsYXN0MSAtIGZpcnN0MSksIChsYXN0MiAtIGZpcnN0MikpCmFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21wYXJpc29uLiI8YnI+Cjxicj4KVGhlIGJlc3QgSSBjYW4gZG8gaXMgdHdpY2UgdGhhdCBleHBlbnNpdmUuPC9wPgoKPHA+Tmljb2xhaSBKb3N1dHRpcyBjb21tZW50cyBpbiBsaWItNjg2MjogWW91IG1lYW4sIHRvIGNoZWNrIGZvcgplcXVhbGl0eSB5b3UgaGF2ZSB0byBjaGVjayBib3RoICZsdDsgYW5kICZndDs/IFllcywgSU1PIHlvdSBhcmUKcmlnaHQhIChhbmQgTWF0dCBzdGF0ZXMgdGhpcyBjb21wbGV4aXR5IGluIGhpcyBib29rKTwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjMuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5sZXguY29tcGFyaXNvbiI+IFtsaWIuYWxnLmxleC5jb21wYXJpc29uXTwvYT4gY29tcGxleGl0eSB0bzo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgIEF0IG1vc3QgPHR0PjIqbWluKChsYXN0MSAtIGZpcnN0MSksIChsYXN0MiAtIGZpcnN0MikpPC90dD4KICAgIGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZyBjb21wYXJpc29uLgogICAgPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIHRoZSBleGFtcGxlIGF0IHRoZSBlbmQgb2YgcGFyYWdyYXBoIDMgdG8gcmVhZDo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgIFtFeGFtcGxlOjxicj4KICAgIDxicj4KICAgICZuYnNwOyZuYnNwOyZuYnNwOyBmb3IgKCA7IGZpcnN0MSAhPSBsYXN0MSAmYW1wOyZhbXA7IGZpcnN0MiAhPSBsYXN0MiA7CiAgICArK2ZpcnN0MSwgKytmaXJzdDIpIHs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKCpmaXJzdDEgJmx0OyAqZmlyc3QyKSByZXR1cm4gdHJ1ZTs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgaWYgKCpmaXJzdDIgJmx0OyAqZmlyc3QxKSByZXR1cm4gZmFsc2U7PGJyPgogICAgJm5ic3A7Jm5ic3A7Jm5ic3A7IH08YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDsgcmV0dXJuIGZpcnN0MSA9PSBsYXN0MSAmYW1wOyZhbXA7IGZpcnN0MiAhPSBsYXN0Mjs8YnI+CiAgICAmbmJzcDsmbmJzcDsmbmJzcDs8YnI+CiAgICAtLWVuZCBleGFtcGxlXQogICAgPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE0NCI+PGgzPjE0NC4mbmJzcDtEZXF1ZSBjb25zdHJ1Y3RvciBjb21wbGV4aXR5IHdyb25nIDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuZGVxdWUuY29ucyI+IFtsaWIuZGVxdWUuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hlcmIgU3V0dGVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzkgTWF5IDE5OTk8L3A+CjxwPkluIDIzLjIuMS4xIHBhcmFncmFwaCA2LCB0aGUgZGVxdWUgY3RvciB0aGF0IHRha2VzIGFuIGl0ZXJhdG9yIHJhbmdlIGFwcGVhcnMKdG8gaGF2ZSBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyB3aGljaCBhcmUgaW5jb3JyZWN0LCBhbmQgd2hpY2ggY29udHJhZGljdCB0aGUKY29tcGxleGl0eSByZXF1aXJlbWVudHMgZm9yIGluc2VydCgpLiBJIHN1c3BlY3QgdGhhdCB0aGUgdGV4dCBpbiBxdWVzdGlvbiwKYmVsb3csIHdhcyB0YWtlbiBmcm9tIHZlY3Rvcjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkNvbXBsZXhpdHk6IElmIHRoZSBpdGVyYXRvcnMgZmlyc3QgYW5kIGxhc3QgYXJlIGZvcndhcmQgaXRlcmF0b3JzLAogIGJpZGlyZWN0aW9uYWwgaXRlcmF0b3JzLCBvciByYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyB0aGUgY29uc3RydWN0b3IgbWFrZXMgb25seQogIE4gY2FsbHMgdG8gdGhlIGNvcHkgY29uc3RydWN0b3IsIGFuZCBwZXJmb3JtcyBubyByZWFsbG9jYXRpb25zLCB3aGVyZSBOIGlzCiAgbGFzdCAtIGZpcnN0LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgd29yZCAicmVhbGxvY2F0aW9ucyIgZG9lcyBub3QgcmVhbGx5IGFwcGx5IHRvIGRlcXVlLiBGdXJ0aGVyLAphbGwgb2YgdGhlIGZvbGxvd2luZyBhcHBlYXJzIHRvIGJlIHNwdXJpb3VzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SXQgbWFrZXMgYXQgbW9zdCAyTiBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBUIGFuZCBsb2cgTgogIHJlYWxsb2NhdGlvbnMgaWYgdGhleSBhcmUgaW5wdXQgaXRlcmF0b3JzLjEpPC9wPgogIDxwPjEpIFRoZSBjb21wbGV4aXR5IGlzIGdyZWF0ZXIgaW4gdGhlIGNhc2Ugb2YgaW5wdXQgaXRlcmF0b3JzIGJlY2F1c2UgZWFjaAogIGVsZW1lbnQgbXVzdCBiZSBhZGRlZCBpbmRpdmlkdWFsbHk6IGl0IGlzIGltcG9zc2libGUgdG8gZGV0ZXJtaW5lIHRoZSBkaXN0YW5jZQogIGJldHdlZW4gZmlyc3QgYWJkIGxhc3QgYmVmb3JlIGRvaW5nIHRoZSBjb3B5aW5nLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5UaGlzIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIHZlY3RvciwgYnV0IG5vdCBmb3IgZGVxdWUuIFdoeSBzaG91bGQgZGVxdWUgZ2FpbgphbiBlZmZpY2llbmN5IGFkdmFudGFnZSBmcm9tIGtub3dpbmcgaW4gYWR2YW5jZSB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIHRvCmluc2VydD88L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjMuMi4xLjEgcGFyYWdyYXBoIDYsIHJlcGxhY2UgdGhlIENvbXBsZXhpdHkgZGVzY3JpcHRpb24sIGluY2x1ZGluZyB0aGUKZm9vdG5vdGUsIHdpdGggdGhlIGZvbGxvd2luZyB0ZXh0ICh3aGljaCBhbHNvIGNvcnJlY3RzIHRoZSAiYWJkIgp0eXBvKTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkNvbXBsZXhpdHk6IE1ha2VzIGxhc3QgLSBmaXJzdCBjYWxscyB0byB0aGUgY29weSBjb25zdHJ1Y3RvciBvZiBULjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE0NiI+PGgzPjE0Ni4mbmJzcDtjb21wbGV4Jmx0O1QmZ3Q7IEluc2VydGVyIGFuZCBFeHRyYWN0b3IgbmVlZCBzZW50cmllczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjIuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jb21wbGV4Lm9wcyI+IFtsaWIuY29tcGxleC5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgTWF5IDE5OTk8L3A+CjxwPlRoZSA8dT4gZXh0cmFjdG9yPC91PiBmb3IgY29tcGxleCBudW1iZXJzIGlzIHNwZWNpZmllZCBhczombmJzcDs8L3A+Cgo8YmxvY2txdW90ZT4KCjxwPiAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsmbmJzcDs8YnI+CiAgICAgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7Jm5ic3A7PGJyPgogICAgIG9wZXJhdG9yJmd0OyZndDsoYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7ICBpcywgY29tcGxleCZsdDtUJmd0OyZhbXA7ICB4KTs8YnI+CiZuYnNwOzxicj4KRWZmZWN0czogRXh0cmFjdHMgYSBjb21wbGV4IG51bWJlciB4IG9mIHRoZSBmb3JtOiB1LCAodSksIG9yICh1LHYpLAp3aGVyZSB1IGlzIHRoZSByZWFsIHBhcnQgYW5kIHYgaXMgdGhlIGltYWdpbmFyeSBwYXJ0CihsaWIuaXN0cmVhbS5mb3JtYXR0ZWQpLiZuYnNwOzxicj4KUmVxdWlyZXM6IFRoZSBpbnB1dCB2YWx1ZXMgYmUgY29udmVydGlibGUgdG8gVC4gSWYgYmFkIGlucHV0IGlzCmVuY291bnRlcmVkLCBjYWxscyBpcy5zZXRzdGF0ZShpb3M6OmZhaWxiaXQpICh3aGljaCBtYXkgdGhyb3cKaW9zOjpmYWlsdXJlIChsaWIuaW9zdGF0ZS5mbGFncykuJm5ic3A7PGJyPgpSZXR1cm5zOiBpcyAuPC9wPgoKPC9ibG9ja3F1b3RlPgo8cD5JcyBpdCBpbnRlbmRlZCB0aGF0IHRoZSBleHRyYWN0b3IgZm9yIGNvbXBsZXggbnVtYmVycyBkb2VzIG5vdCBza2lwCndoaXRlc3BhY2UsIHVubGlrZSBhbGwgb3RoZXIgZXh0cmFjdG9ycyBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBkbz8KU2hvdWxkbid0IGEgc2VudHJ5IGJlIHVzZWQ/Jm5ic3A7PGJyPgo8YnI+ClRoZSA8dT5pbnNlcnRlcjwvdT4gZm9yIGNvbXBsZXggbnVtYmVycyBpcyBzcGVjaWZpZWQgYXM6PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4gICAgIHRlbXBsYXRlJmx0O2NsYXNzIFQsIGNsYXNzIGNoYXJULCBjbGFzcyB0cmFpdHMmZ3Q7Jm5ic3A7PGJyPgogICAgIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyZuYnNwOzxicj4KICAgICBvcGVyYXRvciZsdDsmbHQ7KGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyAgbywgY29uc3QgY29tcGxleCZsdDtUJmd0OyZhbXA7ICB4KTs8YnI+Cjxicj4KRWZmZWN0czogaW5zZXJ0cyB0aGUgY29tcGxleCBudW1iZXIgeCBvbnRvIHRoZSBzdHJlYW0gbyBhcyBpZiBpdCB3ZXJlIGltcGxlbWVudGVkIGFzIGZvbGxvd3M6PGJyPgo8YnI+CiAgICAgdGVtcGxhdGUmbHQ7Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cyZndDsmbmJzcDs8YnI+CiAgICAgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7Jm5ic3A7PGJyPgogICAgIG9wZXJhdG9yJmx0OyZsdDsoYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyZhbXA7IG8sIGNvbnN0IGNvbXBsZXgmbHQ7VCZndDsmYW1wOyB4KSZuYnNwOzxicj4KICAgICB7Jm5ic3A7PGJyPgogICAgICAgICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbSZsdDtjaGFyVCwgdHJhaXRzJmd0OyBzOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMuZmxhZ3Moby5mbGFncygpKTsmbmJzcDs8YnI+CiAgICAgICAgICAgICBzLmltYnVlKG8uZ2V0bG9jKCkpOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMucHJlY2lzaW9uKG8ucHJlY2lzaW9uKCkpOyZuYnNwOzxicj4KICAgICAgICAgICAgIHMgJmx0OyZsdDsgJygnICZsdDsmbHQ7IHgucmVhbCgpICZsdDsmbHQ7ICIsIiAmbHQ7Jmx0OyB4LmltYWcoKSAmbHQ7Jmx0OyAnKSc7Jm5ic3A7PGJyPgogICAgICAgICAgICAgcmV0dXJuIG8gJmx0OyZsdDsgcy5zdHIoKTsmbmJzcDs8YnI+CiAgICAgfTwvcD4KCjwvYmxvY2txdW90ZT4KCjxwPklzIGl0IGludGVuZGVkIHRoYXQgdGhlIGluc2VydGVyIGZvciBjb21wbGV4IG51bWJlcnMgaWdub3JlcyB0aGUKZmllbGQgd2lkdGggYW5kIGRvZXMgbm90IGRvIGFueSBwYWRkaW5nPyBJZiwgd2l0aCB0aGUgc3VnZ2VzdGVkCmltcGxlbWVudGF0aW9uIGFib3ZlLCB0aGUgZmllbGQgd2lkdGggd2VyZSBzZXQgaW4gdGhlIHN0cmVhbSB0aGVuIHRoZQpvcGVuaW5nIHBhcmVudGhlc2VzIHdvdWxkIGJlIGFkanVzdGVkLCBidXQgdGhlIHJlc3Qgbm90LCBiZWNhdXNlIHRoZQpmaWVsZCB3aWR0aCBpcyByZXNldCB0byB6ZXJvIGFmdGVyIGVhY2ggaW5zZXJ0aW9uLjwvcD4KCjxwPkkgdGhpbmsgdGhhdCBib3RoIG9wZXJhdGlvbnMgc2hvdWxkIHVzZSBzZW50cmllcywgZm9yIHNha2Ugb2YKY29uc2lzdGVuY3kgd2l0aCB0aGUgb3RoZXIgaW5zZXJ0ZXJzIGFuZCBleHRyYWN0b3JzIGluIHRoZQpsaWJyYXJ5LiBSZWdhcmRpbmcgdGhlIGlzc3VlIG9mIHBhZGRpbmcgaW4gdGhlIGluc2VydGVyLCBJIGRvbid0IGtub3cKd2hhdCB0aGUgaW50ZW50IHdhcy4mbmJzcDs8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWZ0ZXIgMjYuMi42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmNvbXBsZXgub3BzIj4gW2xpYi5jb21wbGV4Lm9wc108L2E+IHBhcmFncmFwaCAxNCAob3BlcmF0b3ImZ3Q7Jmd0OyksIGFkZCBhCk5vdGVzIGNsYXVzZTo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwPk5vdGVzOiBUaGlzIGV4dHJhY3Rpb24gaXMgcGVyZm9ybWVkIGFzIGEgc2VyaWVzIG9mIHNpbXBsZXIKZXh0cmFjdGlvbnMuIFRoZXJlZm9yZSwgdGhlIHNraXBwaW5nIG9mIHdoaXRlc3BhY2UgaXMgc3BlY2lmaWVkIHRvIGJlIHRoZQpzYW1lIGZvciBlYWNoIG9mIHRoZSBzaW1wbGVyIGV4dHJhY3Rpb25zLjwvcD4KCjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZvciBleHRyYWN0b3JzLCB0aGUgbm90ZSBpcyBhZGRlZCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgc2tpcHBpbmcgd2hpdGVzcGFjZQpmb2xsb3dzIGFuICJhbGwtb3Itbm9uZSIgcnVsZS48L3A+Cgo8cD5Gb3IgaW5zZXJ0ZXJzLCB0aGUgTFdHIGJlbGlldmVzIHRoZXJlIGlzIG5vIGRlZmVjdDsgdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QKYXMgd3JpdHRlbi48L3A+Cjxocj4KPGEgbmFtZT0iMTQ3Ij48aDM+MTQ3LiZuYnNwO0xpYnJhcnkgSW50cm8gcmVmZXJzIHRvIGdsb2JhbCBmdW5jdGlvbnMgdGhhdCBhcmVuJ3QgZ2xvYmFsPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuZ2xvYmFsLmZ1bmN0aW9ucyI+IFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0xvaXMgR29sZHRod2FpdGUmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NCBKdW4gMTk5OTwvcD4KPHA+VGhlIGxpYnJhcnkgaGFkIG1hbnkgZ2xvYmFsIGZ1bmN0aW9ucyB1bnRpbCAxNy40LjEuMSBbbGliLmNvbnRlbnRzXQpwYXJhZ3JhcGggMiB3YXMgYWRkZWQ6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+QWxsIGxpYnJhcnkgZW50aXRpZXMgZXhjZXB0IG1hY3Jvcywgb3BlcmF0b3IgbmV3IGFuZCBvcGVyYXRvcgpkZWxldGUgYXJlIGRlZmluZWQgd2l0aGluIHRoZSBuYW1lc3BhY2Ugc3RkIG9yIG5hbWVzcGFjZXMgbmVzdGVkCndpdGhpbiBuYW1lc3BhY2Ugc3RkLiA8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD5JdCBhcHBlYXJzICJnbG9iYWwgZnVuY3Rpb24iIHdhcyBuZXZlciB1cGRhdGVkIGluIHRoZSBmb2xsb3dpbmc6IDwvcD4KCjxibG9ja3F1b3RlPgoKPHA+MTcuNC40LjMgLSBHbG9iYWwgZnVuY3Rpb25zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc108YnI+Cjxicj4KLTEtIEl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgYW55IGdsb2JhbCBmdW5jdGlvbnMgaW4gdGhlIEMrKyBTdGFuZGFyZApMaWJyYXJ5IGFyZSBkZWZpbmVkIGFzIGlubGluZSAoZGNsLmZjdC5zcGVjKS48YnI+Cjxicj4KLTItIEEgY2FsbCB0byBhIGdsb2JhbCBmdW5jdGlvbiBzaWduYXR1cmUgZGVzY3JpYmVkIGluIENsYXVzZXMKbGliLmxhbmd1YWdlLnN1cHBvcnQgdGhyb3VnaCBsaWIuaW5wdXQub3V0cHV0IGJlaGF2ZXMgdGhlIHNhbWUgYXMgaWYKdGhlIGltcGxlbWVudGF0aW9uIGRlY2xhcmVzIG5vIGFkZGl0aW9uYWwgZ2xvYmFsIGZ1bmN0aW9uCnNpZ25hdHVyZXMuKjxicj4KPGJyPgogICAgW0Zvb3Rub3RlOiBBIHZhbGlkIEMrKyBwcm9ncmFtIGFsd2F5cyBjYWxscyB0aGUgZXhwZWN0ZWQgbGlicmFyeQogICAgZ2xvYmFsIGZ1bmN0aW9uLiBBbiBpbXBsZW1lbnRhdGlvbiBtYXkgYWxzbyBkZWZpbmUgYWRkaXRpb25hbAogICAgZ2xvYmFsIGZ1bmN0aW9ucyB0aGF0IHdvdWxkIG90aGVyd2lzZSBub3QgYmUgY2FsbGVkIGJ5IGEgdmFsaWQgQysrCiAgICBwcm9ncmFtLiAtLS0gZW5kIGZvb3Rub3RlXTxicj4KPGJyPgotMy0gQSBnbG9iYWwgZnVuY3Rpb24gY2Fubm90IGJlIGRlY2xhcmVkIGJ5IHRoZSBpbXBsZW1lbnRhdGlvbiBhcwp0YWtpbmcgYWRkaXRpb25hbCBkZWZhdWx0IGFyZ3VtZW50cy4mbmJzcDs8YnI+Cjxicj4KMTcuNC40LjQgLSBNZW1iZXIgZnVuY3Rpb25zIFtsaWIubWVtYmVyLmZ1bmN0aW9uc108YnI+Cjxicj4KLTItIEFuIGltcGxlbWVudGF0aW9uIGNhbiBkZWNsYXJlIGFkZGl0aW9uYWwgbm9uLXZpcnR1YWwgbWVtYmVyCmZ1bmN0aW9uIHNpZ25hdHVyZXMgd2l0aGluIGEgY2xhc3M6IDwvcD4KCiAgPGJsb2NrcXVvdGU+Cgo8cD4tLSBieSBhZGRpbmcgYXJndW1lbnRzIHdpdGggZGVmYXVsdCB2YWx1ZXMgdG8gYSBtZW1iZXIgZnVuY3Rpb24Kc2lnbmF0dXJlOyBUaGUgc2FtZSBsYXRpdHVkZSBkb2VzIG5vdCBleHRlbmQgdG8gdGhlIGltcGxlbWVudGF0aW9uIG9mCnZpcnR1YWwgb3IgZ2xvYmFsIGZ1bmN0aW9ucywgaG93ZXZlci4gPC9wPgoKICA8L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4gICAgIENoYW5nZSAiZ2xvYmFsIiB0byAiZ2xvYmFsIG9yIG5vbi1tZW1iZXIiIGluOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MTcuNC40LjMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXSBzZWN0aW9uIHRpdGxlLDxicj4KICAxNy40LjQuMyBbbGliLmdsb2JhbC5mdW5jdGlvbnNdIHBhcmEgMSw8YnI+CiAgMTcuNC40LjMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXSBwYXJhIDIgaW4gMiBwbGFjZXMgcGx1cyAyIAogICAgICAgICAgIHBsYWNlcyBpbiB0aGUgZm9vdG5vdGUsPGJyPgogIDE3LjQuNC4zIFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc10gcGFyYSAzLDxicj4KICAxNy40LjQuNCBbbGliLm1lbWJlci5mdW5jdGlvbnNdIHBhcmEgMjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+CkJlY2F1c2Ugb3BlcmF0b3IgbmV3IGFuZCBkZWxldGUgYXJlIGdsb2JhbCwgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24Kd2FzIGNoYW5nZWQgZnJvbSAibm9uLW1lbWJlciIgdG8gImdsb2JhbCBvciBub24tbWVtYmVyLgo8L3A+Cjxocj4KPGEgbmFtZT0iMTQ4Ij48aDM+MTQ4LiZuYnNwO0Z1bmN0aW9ucyBpbiB0aGUgZXhhbXBsZSBmYWNldCBCb29sTmFtZXMgc2hvdWxkIGJlIGNvbnN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXRzLmV4YW1wbGVzIj4gW2xpYi5mYWNldHMuZXhhbXBsZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKZXJlbXkgU2llayZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1biAxOTk5PC9wPgo8cD5JbiAyMi4yLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldHMuZXhhbXBsZXMiPiBbbGliLmZhY2V0cy5leGFtcGxlc108L2E+IHBhcmFncmFwaCAxMywgdGhlIGRvX3RydWVuYW1lKCkgYW5kCmRvX2ZhbHNlbmFtZSgpIGZ1bmN0aW9ucyBpbiB0aGUgZXhhbXBsZSBmYWNldCBCb29sTmFtZXMgc2hvdWxkIGJlCmNvbnN0LiBUaGUgZnVuY3Rpb25zIHRoZXkgYXJlIG92ZXJyaWRpbmcgaW4KbnVtcHVuY3RfYnluYW1lJmx0O2NoYXImZ3Q7IGFyZSBjb25zdC4gPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0cy5leGFtcGxlcyI+IFtsaWIuZmFjZXRzLmV4YW1wbGVzXTwvYT4gcGFyYWdyYXBoIDEzLCBpbnNlcnQgImNvbnN0IiBpbgp0d28gcGxhY2VzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+PHR0PnN0cmluZyBkb190cnVlbmFtZSgpIGNvbnN0IHsgcmV0dXJuICJPdWkgT3VpISI7IH08YnI+CiAgc3RyaW5nIGRvX2ZhbHNlbmFtZSgpIGNvbnN0IHsgcmV0dXJuICJNYWlzIE5vbiEiOyB9PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNTAiPjxoMz4xNTAuJm5ic3A7RmluZF9maXJzdF9vZiBzYXlzIGludGVnZXIgaW5zdGVhZCBvZiBpdGVyYXRvciA8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuZmluZC5maXJzdC5vZiI+IFtsaWIuYWxnLmZpbmQuZmlyc3Qub2ZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IE1jQ2x1cmUmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MzAgSnVuIDE5OTk8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5maW5kLmZpcnN0Lm9mIj4gW2xpYi5hbGcuZmluZC5maXJzdC5vZl08L2E+IHBhcmFncmFwaCAyIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CjxwPlJldHVybnM6IFRoZSBmaXJzdCBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QxLCBsYXN0MSkgc3VjaAp0aGF0IGZvciBzb21lIDx1PmludGVnZXI8L3U+IGogaW4gdGhlIHJhbmdlIFtmaXJzdDIsIGxhc3QyKSAuLi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBUaGUgZmlyc3QgaXRlcmF0b3IgaSBpbiB0aGUgcmFuZ2UgW2ZpcnN0MSwgbGFzdDEpIHN1Y2gKdGhhdCBmb3Igc29tZSBpdGVyYXRvciBqIGluIHRoZSByYW5nZSBbZmlyc3QyLCBsYXN0MikgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTUxIj48aDM+MTUxLiZuYnNwO0Nhbid0IGN1cnJlbnRseSBjbGVhcigpIGVtcHR5IGNvbnRhaW5lcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnNlcXVlbmNlLnJlcW10cyI+IFtsaWIuc2VxdWVuY2UucmVxbXRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RWQgQnJleSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMSBKdW4gMTk5OTwvcD4KPHA+Rm9yIGJvdGggc2VxdWVuY2VzIGFuZCBhc3NvY2lhdGl2ZSBjb250YWluZXJzLCBhLmNsZWFyKCkgaGFzIHRoZQpzZW1hbnRpY3Mgb2YgZXJhc2UoYS5iZWdpbigpLGEuZW5kKCkpLCB3aGljaCBpcyB1bmRlZmluZWQgZm9yIGFuIGVtcHR5CmNvbnRhaW5lciBzaW5jZSBlcmFzZShxMSxxMikgcmVxdWlyZXMgdGhhdCBxMSBiZSBkZXJlZmVyZW5jZWFibGUKKDIzLjEuMSwzIGFuZCAyMy4xLjIsNykuICBXaGVuIHRoZSBjb250YWluZXIgaXMgZW1wdHksIGEuYmVnaW4oKSBpcwpub3QgZGVyZWZlcmVuY2VhYmxlLjxicj4KPGJyPgpUaGUgcmVxdWlyZW1lbnQgdGhhdCBxMSBiZSB1bmNvbmRpdGlvbmFsbHkgZGVyZWZlcmVuY2VhYmxlIGNhdXNlcyBtYW55Cm9wZXJhdGlvbnMgdG8gYmUgaW50dWl0aXZlbHkgdW5kZWZpbmVkLCBvZiB3aGljaCBjbGVhcmluZyBhbiBlbXB0eQpjb250YWluZXIgaXMgcHJvYmFibHkgdGhlIG1vc3QgZGlyZS48YnI+Cjxicj4KU2luY2UgcTEgYW5kIHEyIGFyZSBvbmx5IHJlZmVyZW5jZWQgaW4gdGhlIHJhbmdlIFtxMSwgcTIpLCBhbmQgW3ExLApxMikgaXMgcmVxdWlyZWQgdG8gYmUgYSB2YWxpZCByYW5nZSwgc3RhdGluZyB0aGF0IHExIGFuZCBxMiBtdXN0IGJlCml0ZXJhdG9ycyBvciBjZXJ0YWluIGtpbmRzIG9mIGl0ZXJhdG9ycyBpcyB1bm5lY2Vzc2FyeS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIzLjEuMSwgcGFyYWdyYXBoIDMsIGNoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPnAgYW5kIHEyIGRlbm90ZSB2YWxpZCBpdGVyYXRvcnMgdG8gYSwgcSA8dT4gYW5kIHExPC91PiBkZW5vdGUgdmFsaWQgZGVyZWZlcmVuY2VhYmxlIGl0ZXJhdG9ycyB0byBhLCBbcTEsIHEyKSBkZW5vdGVzIGEgdmFsaWQgcmFuZ2U8L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wIGRlbm90ZXMgYSB2YWxpZCBpdGVyYXRvciB0byBhLCBxIGRlbm90ZXMgYSB2YWxpZCBkZXJlZmVyZW5jZWFibGUgaXRlcmF0b3IgdG8gYSwgW3ExLCBxMikgZGVub3RlcyBhIHZhbGlkIHJhbmdlPHU+CiAgaW4gYTwvdT48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gMjMuMS4yLCBwYXJhZ3JhcGggNywgY2hhbmdlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+cCBhbmQgcTIgYXJlIHZhbGlkIGl0ZXJhdG9ycyB0byBhLCBxIDx1PiBhbmQgcTE8L3U+IGFyZSB2YWxpZCBkZXJlZmVyZW5jZWFibGUKICBpdGVyYXRvcnMgdG8gYSwgW3ExLCBxMikgaXMgYSB2YWxpZCByYW5nZTwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+cCBpcyBhIHZhbGlkIGl0ZXJhdG9yIHRvIGEsIHEgaXMgYSB2YWxpZCBkZXJlZmVyZW5jZWFibGUgaXRlcmF0b3IgdG8gYSwgW3ExLCBxMikgaXMgYSB2YWxpZCByYW5nZQogIDx1PmludG8gYTwvdT48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNTIiPjxoMz4xNTIuJm5ic3A7VHlwbyBpbiA8dHQ+c2Nhbl9pcygpPC90dD4gc2VtYW50aWNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgc2VtYW50aWNzIG9mIDx0dD5zY2FuX2lzKCk8L3R0PiAocGFyYWdyYXBocyA0IGFuZCA2KSBpcyBub3QgZXhhY3RseSBkZXNjcmliZWQKYmVjYXVzZSB0aGVyZSBpcyBubyBmdW5jdGlvbiA8dHQ+aXMoKTwvdHQ+IHdoaWNoIG9ubHkgdGFrZXMgYSBjaGFyYWN0ZXIgYXMKYXJndW1lbnQuIEFsc28sIGluIHRoZSBlZmZlY3RzIGNsYXVzZSAocGFyYWdyYXBoIDMpLCB0aGUgc2VtYW50aWMgaXMgYWxzbyBrZXB0CnZhZ3VlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiBwYXJhZ3JhcGhzIDQgYW5kIDYsIGNoYW5nZSB0aGUgcmV0dXJucwpjbGF1c2UgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiIuLi4gc3VjaCB0aGF0IDx0dD5pcygqcCk8L3R0Pgp3b3VsZC4uLiI8L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86Jm5ic3A7ICIuLi4gc3VjaCB0aGF0IDx0dD5pcyhtLCAqcCk8L3R0Pgogd291bGQuLi4uIjwvcD4KPGhyPgo8YSBuYW1lPSIxNTMiPjxoMz4xNTMuJm5ic3A7VHlwbyBpbiA8dHQ+bmFycm93KCk8L3R0PiBzZW1hbnRpY3M8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj4gW2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYXJyYXkgdmVyc2lvbiBvZiA8dHQ+bmFycm93KCk8L3R0PiAoaW4KcGFyYWdyYXBoIDExKSBpcyBmbGF3ZWQ6IFRoZXJlIGlzIG5vIG1lbWJlciA8dHQ+ZG9fbmFycm93KCk8L3R0PiB3aGljaAp0YWtlcyBvbmx5IHRocmVlIGFyZ3VtZW50cyBiZWNhdXNlIGluIGFkZGl0aW9uIHRvIHRoZSByYW5nZSBhIGRlZmF1bHQKY2hhcmFjdGVyIGlzIG5lZWRlZC48L3A+Cgo8cD5BZGRpdGlvbmFsbHksIGZvciBib3RoIDx0dD53aWRlbjwvdHQ+IGFuZCA8dHQ+bmFycm93PC90dD4gd2UgaGF2ZQp0d28gc2lnbmF0dXJlcyBmb2xsb3dlZCBieSBhIDxiPlJldHVybnM8L2I+IGNsYXVzZSB0aGF0IG9ubHkgYWRkcmVzc2VzCm9uZSBvZiB0aGVtLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSByZXR1cm5zIGNsYXVzZSBpbiAyMi4yLjEuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzIj4gW2xpYi5mYWNldC5jdHlwZS5jaGFyLm1lbWJlcnNdPC9hPgpwYXJhZ3JhcGggMTAgZnJvbTo8L3A+CjxwPiZuYnNwOyZuYnNwOyZuYnNwOyBSZXR1cm5zOiBkb193aWRlbihsb3csIGhpZ2gsIHRvKS48L3A+Cgo8cD50bzo8L3A+CjxwPiZuYnNwOyZuYnNwOyZuYnNwOyBSZXR1cm5zOiBkb193aWRlbihjKSBvciBkb193aWRlbihsb3csIGhpZ2gsIHRvKSwgCnJlc3BlY3RpdmVseS48L3A+Cgo8cD5DaGFuZ2UgMjIuMi4xLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0LmN0eXBlLmNoYXIubWVtYmVycyI+IFtsaWIuZmFjZXQuY3R5cGUuY2hhci5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDEwIGFuZCAxMSBmcm9tOjwvcD4KPHByZT4gICAgICAgIGNoYXIgICAgICAgIG5hcnJvdyhjaGFyIGMsIGNoYXIgLypkZmF1bHQqLykgY29uc3Q7CiAgICAgICAgY29uc3QgY2hhciogbmFycm93KGNvbnN0IGNoYXIqIGxvdywgY29uc3QgY2hhciogaGlnaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAvKmRmYXVsdCovLCBjaGFyKiB0bykgY29uc3Q7PC9wcmU+CjxwcmU+ICAgICAgICBSZXR1cm5zOiBkb19uYXJyb3cobG93LCBoaWdoLCB0bykuPC9wcmU+CjxwPnRvOjwvcD4KPHByZT4gICAgICAgIGNoYXIgICAgICAgIG5hcnJvdyhjaGFyIGMsIGNoYXIgZGZhdWx0KSBjb25zdDsKICAgICAgICBjb25zdCBjaGFyKiBuYXJyb3coY29uc3QgY2hhciogbG93LCBjb25zdCBjaGFyKiBoaWdoLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyIGRmYXVsdCwgY2hhciogdG8pIGNvbnN0OzwvcHJlPgo8cHJlPiAgICAgICAgUmV0dXJuczogZG9fbmFycm93KGMsIGRmYXVsdCkgb3IKICAgICAgICAgICAgICAgICBkb19uYXJyb3cobG93LCBoaWdoLCBkZmF1bHQsIHRvKSwgcmVzcGVjdGl2ZWx5LjwvcHJlPgoKPHA+PGk+W0tvbmE6IDEpIHRoZSBwcm9ibGVtIG9jY3VycyBpbiBhZGRpdGlvbmFsIHBsYWNlcywgMikgYSB1c2VyCmRlZmluZWQgdmVyc2lvbiBjb3VsZCBiZSBkaWZmZXJlbnQuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogRGlldG1hciBwcm92aWRlZCB0aGUgYWJvdmUgd29yZGluZyBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHLiBIZSBjb3VsZCBmaW5kIG5vIG90aGVyIHBsYWNlcyB0aGUgcHJvYmxlbSBvY2N1cnJlZC4gSGUKYXNrcyBmb3IgY2xhcmlmaWNhdGlvbiBvZiB0aGUgS29uYSAiYSB1c2VyIGRlZmluZWQKdmVyc2lvbi4uLiIgY29tbWVudCBhYm92ZS4gIFBlcmhhcHMgaXQgd2FzIGEgY2lyY3VpdG91cyB3YXkgb2YKc2F5aW5nICJkZmF1bHQiIG5lZWRlZCB0byBiZSB1bmNvbW1lbnRlZD9dPC9pPjwvcD4KCjxwPjxpPltQb3N0LVRvcm9udG86IHRoZSBpc3N1ZXMgbGlzdCBtYWludGFpbmVyIGhhcyBtZXJnZWQgaW4gdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gZnJvbSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyMDciPjIwNzwvYT4sIHdoaWNoIGFkZHJlc3NlcyB0aGUKc2FtZSBwYXJhZ3JhcGhzLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjE1NCI+PGgzPjE1NC4mbmJzcDtNaXNzaW5nIDx0dD5kb3VibGU8L3R0PiBzcGVjaWZpZXIgZm9yIDx0dD5kb19nZXQoKTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgdGFibGUgaW4gcGFyYWdyYXBoIDcgZm9yIHRoZSBsZW5ndGggbW9kaWZpZXIgZG9lcyBub3QgbGlzdCB0aGUgbGVuZ3RoCm1vZGlmaWVyIDx0dD5sPC90dD4gdG8gYmUgYXBwbGllZCBpZiB0aGUgdHlwZSBpcyA8dHQ+ZG91YmxlPC90dD4uIFRodXMsIHRoZQpzdGFuZGFyZCBhc2tzIHRoZSBpbXBsZW1lbnRhdGlvbiB0byBkbyB1bmRlZmluZWQgdGhpbmdzIHdoZW4gdXNpbmcgPHR0PnNjYW5mKCk8L3R0PgoodGhlIG1pc3NpbmcgbGVuZ3RoIG1vZGlmaWVyIGZvciA8dHQ+c2NhbmYoKTwvdHQ+IHdoZW4gc2Nhbm5pbmcgPHR0PmRvdWJsZTwvdHQ+cwppcyBhY3R1YWxseSBhIHByb2JsZW0gSSBmb3VuZCBxdWl0ZSBvZnRlbiBpbiBwcm9kdWN0aW9uIGNvZGUsIHRvbykuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzXTwvYT4sIHBhcmFncmFwaCA3LCBhZGQgYSByb3cgaW4gdGhlIExlbmd0aApNb2RpZmllciB0YWJsZSB0byBzYXkgdGhhdCBmb3IgPHR0PmRvdWJsZTwvdHQ+IGEgbGVuZ3RoIG1vZGlmaWVyCjx0dD5sPC90dD4gaXMgdG8gYmUgdXNlZC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgbWFrZXMgYW4gZW1iYXJyYXNzaW5nIGJlZ2lubmVyJ3MgbWlzdGFrZS48L3A+Cjxocj4KPGEgbmFtZT0iMTU1Ij48aDM+MTU1LiZuYnNwO1R5cG8gaW4gbmFtaW5nIHRoZSBjbGFzcyBkZWZpbmluZyB0aGUgY2xhc3MgPHR0PkluaXQ8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0cmVhbS5vYmplY3RzIj4gW2xpYi5pb3N0cmVhbS5vYmplY3RzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGVyZSBhcmUgY29uZmxpY3Rpbmcgc3RhdGVtZW50cyBhYm91dCB3aGVyZSB0aGUgY2xhc3MKPHR0PkluaXQ8L3R0PiBpcyBkZWZpbmVkLiBBY2NvcmRpbmcgdG8gMjcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW0ub2JqZWN0cyI+IFtsaWIuaW9zdHJlYW0ub2JqZWN0c108L2E+IHBhcmFncmFwaCAyCml0IGlzIGRlZmluZWQgYXMgPHR0PmJhc2ljX2lvczo6SW5pdDwvdHQ+LCBhY2NvcmRpbmcgdG8gMjcuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZSI+IFtsaWIuaW9zLmJhc2VdPC9hPiBpdCBpcyBkZWZpbmVkIGFzIDx0dD5pb3NfYmFzZTo6SW5pdDwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW0ub2JqZWN0cyI+IFtsaWIuaW9zdHJlYW0ub2JqZWN0c108L2E+IHBhcmFncmFwaCAyIGZyb20KIjx0dD5iYXNpY19pb3M6OkluaXQiPC90dD4gdG8KIjx0dD5pb3NfYmFzZTo6SW5pdCI8L3R0Pi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BbHRob3VnaCBub3Qgc3RyaWN0bHkgd3JvbmcsIHRoZSBzdGFuZGFyZCB3YXMgbWlzbGVhZGluZyBlbm91Z2ggdG8gd2FycmFudAp0aGUgY2hhbmdlLjwvcD4KPGhyPgo8YSBuYW1lPSIxNTYiPjxoMz4xNTYuJm5ic3A7VHlwbyBpbiA8dHQ+aW1idWUoKTwvdHQ+IGRlc2NyaXB0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvcy5iYXNlLmxvY2FsZXMiPiBbbGliLmlvcy5iYXNlLmxvY2FsZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZXJlIGlzIGEgc21hbGwgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGUgZGVjbGFyYXRpb25zIG9mCjx0dD5pbWJ1ZSgpPC90dD46IGluIDI3LjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UiPiBbbGliLmlvcy5iYXNlXTwvYT4gdGhlIGFyZ3VtZW50IGlzIHBhc3NlZCBhcwo8dHQ+bG9jYWxlIGNvbnN0JmFtcDs8L3R0PiAoY29ycmVjdCksIGluIDI3LjQuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3MuYmFzZS5sb2NhbGVzIj4gW2xpYi5pb3MuYmFzZS5sb2NhbGVzXTwvYT4gaXQKaXMgcGFzc2VkIGFzIDx0dD5sb2NhbGUgY29uc3Q8L3R0PiAod3JvbmcpLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy40LjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UubG9jYWxlcyI+IFtsaWIuaW9zLmJhc2UubG9jYWxlc108L2E+IGNoYW5nZSB0aGUgPHR0PmltYnVlPC90dD4gYXJndW1lbnQKZnJvbSAiPHR0PmxvY2FsZSBjb25zdCIgdG8gImxvY2FsZQpjb25zdCZhbXA7Ii48L3R0PjwvcD4KPGhyPgo8YSBuYW1lPSIxNTgiPjxoMz4xNTguJm5ic3A7VW5kZXJzcGVjaWZpZWQgc2VtYW50aWNzIGZvciA8dHQ+c2V0YnVmKCk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy41LjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5idWZmZXIiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIGRlZmF1bHQgYmVoYXZpb3Igb2YgPHR0PnNldGJ1ZigpPC90dD4gaXMgZGVzY3JpYmVkIG9ubHkgZm9yIHRoZQpzaXR1YXRpb24gdGhhdCA8dHQ+Z3B0cigpICE9IDAgJmFtcDsmYW1wOyBncHRyKCkgIT0gZWdwdHIoKTwvdHQ+OgpuYW1lbHkgdG8gZG8gbm90aGluZy4gIFdoYXQgaGFzIHRvIGJlIGRvbmUgaW4gb3RoZXIgc2l0dWF0aW9ucyZuYnNwOwppcyBub3QgZGVzY3JpYmVkIGFsdGhvdWdoIHRoZXJlIGlzIGFjdHVhbGx5IG9ubHkgb25lIHJlYXNvbmFibGUKYXBwcm9hY2gsIG5hbWVseSB0byBkbyBub3RoaW5nLCB0b28uPC9wPiAKCjxwPlNpbmNlIGNoYW5naW5nIHRoZSBidWZmZXIgd291bGQgYWxtb3N0IGNlcnRhaW5seSBtZXNzIHVwIG1vc3QKYnVmZmVyIG1hbmFnZW1lbnQgb2YgZGVyaXZlZCBjbGFzc2VzIHVubGVzcyB0aGVzZSBjbGFzc2VzIGRvIGl0CnRoZW1zZWx2ZXMsIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIDx0dD5zZXRidWYoKTwvdHQ+IHNob3VsZCBhbHdheXMgYmUKdG8gZG8gbm90aGluZy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjUuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyXTwvYT4sIHBhcmFncmFwaCAzLCBEZWZhdWx0IGJlaGF2aW9yLAp0bzogIkRlZmF1bHQgYmVoYXZpb3I6IERvZXMgbm90aGluZy4gUmV0dXJucyB0aGlzLiI8L3A+Cjxocj4KPGEgbmFtZT0iMTU5Ij48aDM+MTU5LiZuYnNwO1N0cmFuZ2UgdXNlIG9mIDx0dD51bmRlcmZsb3coKTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjUuMi40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmdldCI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuZ2V0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEp1bCAxOTk5PC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIG1lYW5pbmcgb2YgdGhlIHJlc3VsdCBvZgo8dHQ+c2hvd21hbnljKCk8L3R0PiBzZWVtcyB0byBiZSByYXRoZXIgc3RyYW5nZTogSXQgdXNlcyBjYWxscyB0bwo8dHQ+dW5kZXJmbG93KCk8L3R0Pi4gVXNpbmcgPHR0PnVuZGVyZmxvdygpPC90dD4gaXMgc3RyYW5nZSBiZWNhdXNlCnRoaXMgZnVuY3Rpb24gb25seSByZWFkcyB0aGUgY3VycmVudCBjaGFyYWN0ZXIgYnV0IGRvZXMgbm90IGV4dHJhY3QKaXQsIDx0dD51ZmxvdygpPC90dD4gd291bGQgZXh0cmFjdCB0aGUgY3VycmVudCBjaGFyYWN0ZXIuIFRoaXMgc2hvdWxkCmJlIGZpeGVkIHRvIHVzZSA8dHQ+c2J1bXBjKCk8L3R0PiBpbnN0ZWFkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjcuNS4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyZWFtYnVmLnZpcnQuZ2V0Ij4gW2xpYi5zdHJlYW1idWYudmlydC5nZXRdPC9hPiBwYXJhZ3JhcGggMSwKPHR0PnNob3dtYW55YygpPC90dD5yZXR1cm5zIGNsYXVzZSwgYnkgcmVwbGFjaW5nIHRoZSB3b3JkCiJzdXBwbGllZCIgd2l0aCB0aGUgd29yZHMgImV4dHJhY3RlZCBmcm9tIHRoZQpzdHJlYW0iLjwvcD4KPGhyPgo8YSBuYW1lPSIxNjAiPjxoMz4xNjAuJm5ic3A7VHlwbzogVXNlIG9mIG5vbi1leGlzdGluZyBmdW5jdGlvbiA8dHQ+ZXhjZXB0aW9uKCk8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbSI+IFtsaWIuaXN0cmVhbV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIHBhcmFncmFwaCA0IHJlZmVycyB0byB0aGUgZnVuY3Rpb24gPHR0PmV4Y2VwdGlvbigpPC90dD4gd2hpY2gKaXMgbm90IGRlZmluZWQuIFByb2JhYmx5LCB0aGUgcmVmZXJyZWQgZnVuY3Rpb24gaXMKPHR0PmJhc2ljX2lvcyZsdDsmZ3Q7OjpleGNlcHRpb25zKCk8L3R0Pi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0iPiBbbGliLmlzdHJlYW1dPC9hPiwgMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiwgcGFyYWdyYXBoIDEsCjI3LjYuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtIj4gW2xpYi5vc3RyZWFtXTwvYT4sIHBhcmFncmFwaCAzLCBhbmQgMjcuNi4yLjUuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzIj4gW2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHNdPC9hPiwKcGFyYWdyYXBoIDEsIGNoYW5nZSAiPHR0PmV4Y2VwdGlvbigpIiB0bwoiZXhjZXB0aW9ucygpIjwvdHQ+LjwvcD4KCjxwPjxpPltOb3RlIHRvIEVkaXRvcjogImV4Y2VwdGlvbnMiIHdpdGggYW4gInMiCmlzIHRoZSBjb3JyZWN0IHNwZWxsaW5nLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjE2MSI+PGgzPjE2MS4mbmJzcDtUeXBvOiA8dHQ+aXN0cmVhbV9pdGVyYXRvcjwvdHQ+IHZzLiA8dHQ+aXN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLmFyaXRobWV0aWNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSBub3RlIGluIHRoZSBzZWNvbmQgcGFyYWdyYXBoIHByZXRlbmRzIHRoYXQgdGhlIGZpcnN0IGFyZ3VtZW50CmlzIGFuIG9iamVjdCBvZiB0eXBlIDx0dD5pc3RyZWFtX2l0ZXJhdG9yPC90dD4uIFRoaXMgaXMgd3Jvbmc6IEl0IGlzCmFuIG9iamVjdCBvZiB0eXBlIDx0dD5pc3RyZWFtYnVmX2l0ZXJhdG9yPC90dD4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNy42LjEuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljIj4gW2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5hcml0aG1ldGljXTwvYT4gZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlcyBhbiBvYmplY3Qgb2YgdGhlIGlzdHJlYW1faXRlcmF0b3IgY2xhc3MuLi48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG88L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBmaXJzdCBhcmd1bWVudCBwcm92aWRlcyBhbiBvYmplY3Qgb2YgdGhlIGlzdHJlYW1idWZfaXRlcmF0b3IgY2xhc3MuLi48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNjQiPjxoMz4xNjQuJm5ic3A7ZG9fcHV0KCkgaGFzIGFwcGFyZW50bHkgdW51c2VkIGZpbGwgYXJndW1lbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjUuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnRpbWUucHV0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUudGltZS5wdXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVsIDE5OTk8L3A+CjxwPkluIDIyLjIuNS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5wdXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS50aW1lLnB1dC52aXJ0dWFsc108L2E+IHRoZSBkb19wdXQoKSBmdW5jdGlvbiBpcyBzcGVjaWZpZWQKYXMgdGFraW5nIGEgZmlsbCBjaGFyYWN0ZXIgYXMgYW4gYXJndW1lbnQsIGJ1dCB0aGUgZGVzY3JpcHRpb24gb2YgdGhlCmZ1bmN0aW9uIGRvZXMgbm90IHNheSB3aGV0aGVyIHRoZSBjaGFyYWN0ZXIgaXMgdXNlZCBhdCBhbGwgYW5kLCBpZiBzbywKaW4gd2hpY2ggd2F5LiBUaGUgc2FtZSBob2xkcyBmb3IgYW55IGZvcm1hdCBjb250cm9sIHBhcmFtZXRlcnMgdGhhdAphcmUgYWNjZXNzaWJsZSB0aHJvdWdoIHRoZSBpb3NfYmFzZSZhbXA7IGFyZ3VtZW50LCBzdWNoIGFzIHRoZQphZGp1c3RtZW50IG9yIHRoZSBmaWVsZCB3aWR0aC4gSXMgc3RyZnRpbWUoKSBzdXBwb3NlZCB0byB1c2UgdGhlIGZpbGwKY2hhcmFjdGVyIGluIGFueSB3YXk/IEluIGFueSBjYXNlLCB0aGUgc3BlY2lmaWNhdGlvbiBvZgp0aW1lX3B1dC5kb19wdXQoKSBsb29rcyBpbmNvbnNpc3RlbnQgdG8gbWUuPGJyPiA8YnI+IElzIHRoZQpzaWduYXR1cmUgb2YgZG9fcHV0KCkgd3JvbmcsIG9yIGlzIHRoZSBlZmZlY3RzIGNsYXVzZSBpbmNvbXBsZXRlPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdGhlIGZvbGxvd2luZyBub3RlIGFmdGVyIDIyLjIuNS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudGltZS5wdXQudmlydHVhbHMiPiBbbGliLmxvY2FsZS50aW1lLnB1dC52aXJ0dWFsc108L2E+CnBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+ICBbTm90ZTogdGhlIDx0dD5maWxsPC90dD4gYXJndW1lbnQgbWF5IGJlIHVzZWQgaW4gdGhlIGltcGxlbWVudGF0aW9uLWRlZmluZWQgIGZvcm1hdHMsIG9yIGJ5IGRlcml2YXRpb25zLiAgQSBzcGFjZSBjaGFyYWN0ZXIgaXMgYSByZWFzb25hYmxlIGRlZmF1bHQKICBmb3IgdGhpcyBhcmd1bWVudC4gLS1lbmQgTm90ZV08L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgZmVsdCB0aGF0IHdoaWxlIHRoZSBub3JtYXRpdmUgdGV4dCB3YXMgY29ycmVjdCwKdXNlcnMgbmVlZCBzb21lIGd1aWRhbmNlIG9uIHdoYXQgdG8gcGFzcyBmb3IgdGhlIDx0dD5maWxsPC90dD4KYXJndW1lbnQgc2luY2UgdGhlIHN0YW5kYXJkIGRvZXNuJ3Qgc2F5IGhvdyBpdCdzIHVzZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjE2NSI+PGgzPjE2NS4mbmJzcDs8dHQ+eHNwdXRuKCk8L3R0PiwgPHR0PnB1YnN5bmMoKTwvdHQ+IG5ldmVyIGNhbGxlZCBieSA8dHQ+YmFzaWNfb3N0cmVhbTwvdHQ+IG1lbWJlcnM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0iPiBbbGliLm9zdHJlYW1dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlBhcmFncmFwaCAyIGV4cGxpY2l0bHkgc3RhdGVzIHRoYXQgbm9uZSBvZiB0aGUgPHR0PmJhc2ljX29zdHJlYW08L3R0PgpmdW5jdGlvbnMgZmFsbGluZyBpbnRvIG9uZSBvZiB0aGUgZ3JvdXBzICJmb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucyIKYW5kICJ1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIiBjYWxscyBhbnkgc3RyZWFtIGJ1ZmZlciBmdW5jdGlvbgp3aGljaCBtaWdodCBjYWxsIGEgdmlydHVhbCBmdW5jdGlvbiBvdGhlciB0aGFuIDx0dD5vdmVyZmxvdygpPC90dD4uIEJhc2ljYWxseQp0aGlzIGlzIGZpbmUgYnV0IHRoaXMgaW1wbGllcyB0aGF0IDx0dD5zcHV0bigpPC90dD4gKHRoaXMgZnVuY3Rpb24gd291bGQgY2FsbAp0aGUgdmlydHVhbCBmdW5jdGlvbiA8dHQ+eHNwdXRuKCk8L3R0PikgaXMgbmV2ZXIgY2FsbGVkIGJ5IGFueSBvZiB0aGUgc3RhbmRhcmQKb3V0cHV0IGZ1bmN0aW9ucy4gSXMgdGhpcyByZWFsbHkgaW50ZW5kZWQ/IEF0IG1pbmltdW0gaXQgd291bGQgYmUgY29udmVuaWVudCB0bwpjYWxsIDx0dD54c3B1dG4oKTwvdHQ+IGZvciBzdHJpbmdzLi4uIEFsc28sIHRoZSBzdGF0ZW1lbnQgdGhhdCA8dHQ+b3ZlcmZsb3coKTwvdHQ+CmlzIHRoZSBvbmx5IHZpcnR1YWwgbWVtYmVyIG9mIDx0dD5iYXNpY19zdHJlYW1idWY8L3R0PiBjYWxsZWQgaXMgaW4gY29uZmxpY3QKd2l0aCB0aGUgZGVmaW5pdGlvbiBvZiA8dHQ+Zmx1c2goKTwvdHQ+IHdoaWNoIGNhbGxzIDx0dD5yZGJ1ZigpLSZndDtwdWJzeW5jKCk8L3R0PgphbmQgdGhlcmVieSB0aGUgdmlydHVhbCBmdW5jdGlvbiA8dHQ+c3luYygpPC90dD4gKDx0dD5mbHVzaCgpPC90dD4gaXMgbGlzdGVkCnVuZGVyICJ1bmZvcm1hdHRlZCBvdXRwdXQgZnVuY3Rpb25zIikuPC9wPgo8cD5JbiBhZGRpdGlvbiwgSSBndWVzcyB0aGF0IHRoZSBzZW50ZW5jZSBzdGFydGluZyB3aXRoICJUaGV5IG1heSB1c2Ugb3RoZXIKcHVibGljIG1lbWJlcnMgb2YgPHR0PmJhc2ljX29zdHJlYW08L3R0PiAuLi4iIHByb2JhYmx5IHdhcyBpbnRlbmRlZCB0bwpzdGFydCB3aXRoICJUaGV5IG1heSB1c2Ugb3RoZXIgcHVibGljIG1lbWJlcnMgb2YgPHR0PmJhc2ljX3N0cmVhbXVmPC90dD4uLi4iCmFsdGhvdWdoIHRoZSBwcm9ibGVtIHdpdGggdGhlIHZpcnR1YWwgbWVtYmVycyBleGlzdHMgaW4gYm90aCBjYXNlcy48L3A+CjxwPkkgc2VlIHR3byBvYnZpb3VzIHJlc29sdXRpb25zOjwvcD4KPG9sPgogIDxsaT5zdGF0ZSBpbiBhIGZvb3Rub3RlIHRoYXQgdGhpcyBtZWFucyB0aGF0IDx0dD54c3B1dG4oKTwvdHQ+IHdpbGwgbmV2ZXIgYmUKICAgIGNhbGxlZCBieSBhbnkgb3N0cmVhbSBtZW1iZXIgYW5kIHRoYXQgdGhpcyBpcyBpbnRlbmRlZC48L2xpPgogIDxsaT5yZWxheCB0aGUgcmVzdHJpY3Rpb24gYW5kIGFsbG93IGNhbGxpbmcgPHR0Pm92ZXJmbG93KCk8L3R0PiBhbmQgPHR0PnhzcHV0bigpPC90dD4uCiAgICBPZiBjb3Vyc2UsIHRoZSBwcm9ibGVtIHdpdGggPHR0PmZsdXNoKCk8L3R0PiBoYXMgdG8gYmUgcmVzb2x2ZWQgaW4gc29tZSB3YXkuPC9saT4KPC9vbD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGxhc3Qgc2VudGVuY2Ugb2YgMjcuNi4yLjEgKGxpYi5vc3RyZWFtKSBwYXJhZ3JhcGggMiBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhleSBtYXkgdXNlIG90aGVyIHB1YmxpYyBtZW1iZXJzIG9mIGJhc2ljX29zdHJlYW0gZXhjZXB0IHRoYXQgdGhleSBkbyBub3QKICBpbnZva2UgYW55IHZpcnR1YWwgbWVtYmVycyBvZiByZGJ1ZigpIGV4Y2VwdCBvdmVyZmxvdygpLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZXkgbWF5IHVzZSBvdGhlciBwdWJsaWMgbWVtYmVycyBvZiBiYXNpY19vc3RyZWFtIGV4Y2VwdCB0aGF0IHRoZXkgc2hhbGwKICBub3QgaW52b2tlIGFueSB2aXJ0dWFsIG1lbWJlcnMgb2YgcmRidWYoKSBleGNlcHQgb3ZlcmZsb3coKSwgeHNwdXRuKCksIGFuZAogIHN5bmMoKS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiB0aGUgTFdHIGJlbGlldmVzIHRoaXMgaXMgYSBwcm9ibGVtLiBXaXNoIHRvIGFzayBKZXJyeSBvcgpQSlAgd2h5IHRoZSBzdGFuZGFyZCBpcyB3cml0dGVuIHRoaXMgd2F5Ll08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgc3VwcGxpZWQgd29yZGluZyBhdCB0aGUgcmVxdWVzdCBvZiB0aGUKTFdHLiBIZSBjb21tZW50czogVGhlIHJ1bGVzIGNhbiBiZSBtYWRlIGEgbGl0dGxlIGJpdCBtb3JlIHNwZWNpZmljIGlmCm5lY2Vzc2FyeSBiZSBleHBsaWNpdGx5IHNwZWxsaW5nIG91dCB3aGF0IHZpcnR1YWxzIGFyZSBhbGxvd2VkIHRvIGJlCmNhbGxlZCBmcm9tIHdoYXQgZnVuY3Rpb25zIGFuZCBlZyB0byBzdGF0ZSBzcGVjaWZpY2FsbHkgdGhhdCBmbHVzaCgpCmlzIGFsbG93ZWQgdG8gY2FsbCBzeW5jKCkgd2hpbGUgb3RoZXIgZnVuY3Rpb25zIGFyZSBub3QuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTY3Ij48aDM+MTY3LiZuYnNwO0ltcHJvcGVyIHVzZSBvZiA8dHQ+dHJhaXRzX3R5cGU6Omxlbmd0aCgpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyIj4gW2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXJdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlBhcmFncmFwaCA0IHN0YXRlcyB0aGF0IHRoZSBsZW5ndGggaXMgZGV0ZXJtaW5lZCB1c2luZwo8dHQ+dHJhaXRzOjpsZW5ndGgocyk8L3R0Pi4gIFVuZm9ydHVuYXRlbHksIHRoaXMgZnVuY3Rpb24gaXMgbm90CmRlZmluZWQgZm9yIGV4YW1wbGUgaWYgdGhlIGNoYXJhY3RlciB0eXBlIGlzIDx0dD53Y2hhcl90PC90dD4gYW5kIHRoZQp0eXBlIG9mIDx0dD5zPC90dD4gaXMgPHR0PmNoYXIgY29uc3QqPC90dD4uIFNpbWlsYXIgcHJvYmxlbXMgZXhpc3QgaWYKdGhlIGNoYXJhY3RlciB0eXBlIGlzIDx0dD5jaGFyPC90dD4gYW5kIHRoZSB0eXBlIG9mIDx0dD5zPC90dD4gaXMKZWl0aGVyIDx0dD5zaWduZWQgY2hhciBjb25zdCo8L3R0PiBvciA8dHQ+dW5zaWduZWQgY2hhcgpjb25zdCo8L3R0Pi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI3LjYuMi41LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3RlciI+IFtsaWIub3N0cmVhbS5pbnNlcnRlcnMuY2hhcmFjdGVyXTwvYT4gcGFyYWdyYXBoIDQgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEJlaGF2ZXMgbGlrZSBhbiBmb3JtYXR0ZWQgaW5zZXJ0ZXIgKGFzIGRlc2NyaWJlZCBpbgogIGxpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMpIG9mIG91dC4gQWZ0ZXIgYSBzZW50cnkgb2JqZWN0IGlzCiAgY29uc3RydWN0ZWQgaXQgaW5zZXJ0cyBjaGFyYWN0ZXJzLiBUaGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgc3RhcnRpbmcKICBhdCBzIHRvIGJlIGluc2VydGVkIGlzIHRyYWl0czo6bGVuZ3RoKHMpLiBQYWRkaW5nIGlzIGRldGVybWluZWQgYXMKICBkZXNjcmliZWQgaW4gbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMuIFRoZSB0cmFpdHM6Omxlbmd0aChzKQogIGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgcyBhcmUgd2lkZW5lZCB1c2luZyBvdXQud2lkZW4KICAobGliLmJhc2ljLmlvcy5tZW1iZXJzKS4gVGhlIHdpZGVuZWQgY2hhcmFjdGVycyBhbmQgYW55IHJlcXVpcmVkCiAgcGFkZGluZyBhcmUgaW5zZXJ0ZWQgaW50byBvdXQuIENhbGxzIHdpZHRoKDApLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEJlaGF2ZXMgbGlrZSBhIGZvcm1hdHRlZCBpbnNlcnRlciAoYXMgZGVzY3JpYmVkIGluCiAgbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10cykgb2Ygb3V0LiBBZnRlciBhIHNlbnRyeSBvYmplY3QgaXMKICBjb25zdHJ1Y3RlZCBpdCBpbnNlcnRzIDxpPm48L2k+IGNoYXJhY3RlcnMgc3RhcnRpbmcgYXQgPGk+czwvaT4sCiAgd2hlcmUgPGk+bjwvaT4gaXMgdGhlIG51bWJlciB0aGF0IHdvdWxkIGJlIGNvbXB1dGVkIGFzIGlmIGJ5OjwvcD4KICA8dWw+CiAgPGxpPnRyYWl0czo6bGVuZ3RoKHMpIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mCiAgICB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDsmYW1wOyBhbmQgdGhlIHNlY29uZCBpcwogICAgb2YgdHlwZSBjb25zdCBjaGFyVCosIGFuZCBhbHNvIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0CiAgICBhcmd1bWVudCBpcyBvZiB0eXBlIGJhc2ljX29zdHJlYW0mbHQ7Y2hhciwgdHJhaXRzJmd0OyZhbXA7IGFuZAogICAgdGhlIHNlY29uZCBpcyBvZiB0eXBlIGNvbnN0IGNoYXIqLjwvbGk+CiAgPGxpPnN0ZDo6Y2hhcl90cmFpdHMmbHQ7Y2hhciZndDs6Omxlbmd0aChzKSAKICAgIGZvciB0aGUgb3ZlcmxvYWQgd2hlcmUgdGhlIGZpcnN0IGFyZ3VtZW50IGlzIG9mIHR5cGUgCiAgICBiYXNpY19vc3RyZWFtJmx0O2NoYXJULCB0cmFpdHMmZ3Q7JmFtcDsgYW5kIHRoZSBzZWNvbmQgaXMgb2YgdHlwZQogICAgY29uc3QgY2hhciouPC9saT4KICA8bGk+dHJhaXRzOjpsZW5ndGgocmVpbnRlcnByZXRfY2FzdCZsdDtjb25zdCBjaGFyKiZndDsocykpIAogICAgZm9yIHRoZSBvdGhlciB0d28gb3ZlcmxvYWRzLjwvbGk+CiAgPC91bD4KICA8cD5QYWRkaW5nIGlzIGRldGVybWluZWQgYXMgZGVzY3JpYmVkIGluCiAgbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMuIFRoZSA8aT5uPC9pPiBjaGFyYWN0ZXJzIHN0YXJ0aW5nIGF0CiAgPGk+czwvaT4gYXJlIHdpZGVuZWQgdXNpbmcgb3V0LndpZGVuIChsaWIuYmFzaWMuaW9zLm1lbWJlcnMpLiAgVGhlCiAgd2lkZW5lZCBjaGFyYWN0ZXJzIGFuZCBhbnkgcmVxdWlyZWQgcGFkZGluZyBhcmUgaW5zZXJ0ZWQgaW50bwogIG91dC4gQ2FsbHMgd2lkdGgoMCkuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bU2FudGEgQ3J1ejogTWF0dCBzdXBwbGllZCBuZXcgd29yZGluZ108L2k+PC9wPgoKPHA+PGk+W0tvbmE6IGNoYW5nZWQgIndoZXJlIDxpPm48L2k+IGlzIiB0byAiIHdoZXJlIDxpPm48L2k+IGlzIHRoZQogIG51bWJlciB0aGF0IHdvdWxkIGJlIGNvbXB1dGVkIGFzIGlmIGJ5Il08L2k+PC9wPiAKCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBoYXZlIGZpdmUgc2VwYXJhdGUgY2FzZXMuICBJbiB0d28gb2YgdGhlbSB3ZSBjYW4gdXNlIHRoZQp1c2VyLXN1cHBsaWVkIHRyYWl0cyBjbGFzcyB3aXRob3V0IGFueSBmdXNzLiAgSW4gdGhlIG90aGVyIHRocmVlIHdlCnRyeSB0byB1c2Ugc29tZXRoaW5nIGFzIGNsb3NlIHRvIHRoYXQgdXNlci1zdXBwbGllZCBjbGFzcyBhcyBwb3NzaWJsZS4KSW4gdHdvIGNhc2VzIHdlJ3ZlIGdvdCBhIHRyYWl0cyBjbGFzcyB0aGF0J3MgYXBwcm9wcmlhdGUgZm9yCmNoYXIgYW5kIHdoYXQgd2UndmUgZ290IGlzIGEgY29uc3Qgc2lnbmVkIGNoYXIqIG9yIGEgY29uc3QKdW5zaWduZWQgY2hhcio7IHRoYXQncyBjbG9zZSBlbm91Z2ggc28gd2UgY2FuIGp1c3QgdXNlIGEgcmVpbnRlcnByZXQKY2FzdCwgYW5kIGNvbnRpbnVlIHRvIHVzZSB0aGUgdXNlci1zdXBwbGllZCB0cmFpdHMgY2xhc3MuICBGaW5hbGx5LAp0aGVyZSdzIG9uZSBjYXNlIHdoZXJlIHdlIGp1c3QgaGF2ZSB0byBnaXZlIHVwOiB3aGVyZSB3ZSd2ZSBnb3QgYQp0cmFpdHMgY2xhc3MgZm9yIHNvbWUgYXJiaXRyYXJ5IGNoYXJUIHR5cGUsIGFuZCB3ZSBzb21laG93IGhhdmUgdG8KZGVhbCB3aXRoIGEgY29uc3QgY2hhciouICBUaGVyZSdzIG5vdGhpbmcgYmV0dGVyIHRvIGRvIGJ1dCBmYWxsIGJhY2sKdG8gY2hhcl90cmFpdHMmbHQ7Y2hhciZndDs8L3A+Cjxocj4KPGEgbmFtZT0iMTY4Ij48aDM+MTY4LiZuYnNwO1R5cG86IGZvcm1hdHRlZCB2cy4gdW5mb3JtYXR0ZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIub3N0cmVhbS51bmZvcm1hdHRlZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+VGhlIGZpcnN0IHBhcmFncmFwaCBiZWdpbnMgd2l0aCBhIGRlc2NyaXB0aW9ucyB3aGF0IGhhcyB0byBiZSBkb25lCmluIDxpPmZvcm1hdHRlZDwvaT4gb3V0cHV0IGZ1bmN0aW9ucy4gUHJvYmFibHkgdGhpcyBpcyBhIHR5cG8gYW5kIHRoZQpwYXJhZ3JhcGggcmVhbGx5IHdhbnQgdG8gZGVzY3JpYmUgdW5mb3JtYXR0ZWQgb3V0cHV0IGZ1bmN0aW9ucy4uLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNy42LjIuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS51bmZvcm1hdHRlZCI+IFtsaWIub3N0cmVhbS51bmZvcm1hdHRlZF08L2E+IHBhcmFncmFwaCAxLCB0aGUgZmlyc3QgYW5kIGxhc3QKc2VudGVuY2VzLCBjaGFuZ2UgdGhlIHdvcmQgImZvcm1hdHRlZCIgdG8KInVuZm9ybWF0dGVkIjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiJFYWNoIDxiPnVuZm9ybWF0dGVkIDwvYj4gb3V0cHV0IGZ1bmN0aW9uIGJlZ2lucyAuLi4iPGJyPgogICIuLi4gdmFsdWUgc3BlY2lmaWVkIGZvciB0aGUgPGI+dW5mb3JtYXR0ZWQgPC9iPiAgb3V0cHV0IAogIGZ1bmN0aW9uLiI8L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIxNjkiPjxoMz4xNjkuJm5ic3A7QmFkIGVmZmljaWVuY3kgb2YgPHR0Pm92ZXJmbG93KCk8L3R0PiBtYW5kYXRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMCBKdWwgMTk5OTwvcD4KPHA+UGFyYWdyYXBoIDgsIE5vdGVzLCBvZiB0aGlzIHNlY3Rpb24gc2VlbXMgdG8gbWFuZGF0ZSBhbiBleHRyZW1lbHkKaW5lZmZpY2llbnQgd2F5IG9mIGJ1ZmZlciBoYW5kbGluZyBmb3IgPHR0PmJhc2ljX3N0cmluZ2J1ZjwvdHQ+LAplc3BlY2lhbGx5IGluIHZpZXcgb2YgdGhlIHJlc3RyaWN0aW9uIHRoYXQgPHR0PmJhc2ljX29zdHJlYW08L3R0PgptZW1iZXIgZnVuY3Rpb25zIGFyZSBub3QgYWxsb3dlZCB0byB1c2UgPHR0PnhzcHV0bigpPC90dD4gKHNlZSAyNy42LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbSI+IFtsaWIub3N0cmVhbV08L2E+KTogRm9yIGVhY2ggY2hhcmFjdGVyIHRvIGJlIGluc2VydGVkLCBhIG5ldyBidWZmZXIKaXMgdG8gYmUgY3JlYXRlZC48L3A+IAo8cD5PZiBjb3Vyc2UsIHRoZSByZXNvbHV0aW9uIGJlbG93IHJlcXVpcmVzIHNvbWUgaGFuZGxpbmcgb2YKc2ltdWx0YW5lb3VzIGlucHV0IGFuZCBvdXRwdXQgc2luY2UgaXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHVwZGF0ZQo8dHQ+ZWdwdHIoKTwvdHQ+IHdoZW5ldmVyIDx0dD5lcHB0cigpPC90dD4gaXMgY2hhbmdlZC4gQSBwb3NzaWJsZQpzb2x1dGlvbiBpcyB0byBoYW5kbGUgdGhpcyBpbiA8dHQ+dW5kZXJmbG93KCk8L3R0Pi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi52aXJ0dWFscyI+IFtsaWIuc3RyaW5nYnVmLnZpcnR1YWxzXTwvYT4gcGFyYWdyYXBoIDgsIE5vdGVzLCBpbnNlcnQgdGhlIHdvcmRzCiJhdCBsZWFzdCIgYXMgaW4gdGhlIGZvbGxvd2luZzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRvIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUsIHRoZSBmdW5jdGlvbiByZWFsbG9jYXRlcyAob3IgaW5pdGlhbGx5CiAgYWxsb2NhdGVzKSBhbiBhcnJheSBvYmplY3Qgd2l0aCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGhvbGQgdGhlCiAgY3VycmVudCBhcnJheSBvYmplY3QgKGlmIGFueSksIHBsdXMgPGI+YXQgbGVhc3Q8L2I+IG9uZSBhZGRpdGlvbmFsIHdyaXRlCiAgcG9zaXRpb24uPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTcwIj48aDM+MTcwLiZuYnNwO0luY29uc2lzdGVudCBkZWZpbml0aW9uIG9mIDx0dD50cmFpdHNfdHlwZTwvdHQ+CjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nc3RyZWFtIj4gW2xpYi5zdHJpbmdzdHJlYW1dPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPlRoZSBjbGFzc2VzIDx0dD5iYXNpY19zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdzdHJlYW0iPiBbbGliLnN0cmluZ3N0cmVhbV08L2E+KSwKPHR0PmJhc2ljX2lzdHJpbmdzdHJlYW08L3R0PiAoMjcuNy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyaW5nc3RyZWFtIj4gW2xpYi5pc3RyaW5nc3RyZWFtXTwvYT4pLCBhbmQKPHR0PmJhc2ljX29zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyaW5nc3RyZWFtIj4gW2xpYi5vc3RyaW5nc3RyZWFtXTwvYT4pIGFyZSBpbmNvbnNpc3RlbnQKaW4gdGhlaXIgZGVmaW5pdGlvbiBvZiB0aGUgdHlwZSA8dHQ+dHJhaXRzX3R5cGU8L3R0PjogRm9yCjx0dD5pc3RyaW5nc3RyZWFtPC90dD4sIHRoaXMgdHlwZSBpcyBkZWZpbmVkLCBmb3IgdGhlIG90aGVyIHR3byBpdCBpcwpub3QuIFRoaXMgc2hvdWxkIGJlIGNvbnNpc3RlbnQuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4gPHA+VG8gdGhlIGRlY2xhcmF0aW9ucyBvZgo8dHQ+YmFzaWNfb3N0cmluZ3N0cmVhbTwvdHQ+ICgyNy43LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJpbmdzdHJlYW0iPiBbbGliLm9zdHJpbmdzdHJlYW1dPC9hPikgYW5kCjx0dD5iYXNpY19zdHJpbmdzdHJlYW08L3R0PiAoMjcuNy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdzdHJlYW0iPiBbbGliLnN0cmluZ3N0cmVhbV08L2E+KSBhZGQ6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50eXBlZGVmIHRyYWl0cyB0cmFpdHNfdHlwZTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE3MSI+PGgzPjE3MS4mbmJzcDtTdHJhbmdlIDx0dD5zZWVrcG9zKCk8L3R0PiBzZW1hbnRpY3MgZHVlIHRvIGpvaW50IHBvc2l0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjAgSnVsIDE5OTk8L3A+CjxwPk92ZXJyaWRkZW4gdmlydHVhbCBmdW5jdGlvbnMsIHNlZWtwb3MoKTwvcD4gPHA+SW4gMjcuOC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYiPiBbbGliLmZpbGVidWZdPC9hPiBwYXJhZ3JhcGggMywgaXQgaXMgc3RhdGVkIHRoYXQgYSBqb2ludCBpbnB1dCBhbmQKb3V0cHV0IHBvc2l0aW9uIGlzIG1haW50YWluZWQgYnkgPHR0PmJhc2ljX2ZpbGVidWY8L3R0Pi4gU3RpbGwsIHRoZQpkZXNjcmlwdGlvbiBvZiA8dHQ+c2Vla3BvcygpPC90dD4gc2VlbXMgdG8gdGFsayBhYm91dCBkaWZmZXJlbnQgZmlsZQpwb3NpdGlvbnMuIEluIHBhcnRpY3VsYXIsIGl0IGlzIHVuY2xlYXIgKGF0IGxlYXN0IHRvIG1lKSB3aGF0IGlzCnN1cHBvc2VkIHRvIGhhcHBlbiB0byB0aGUgb3V0cHV0IGJ1ZmZlciAoaWYgdGhlcmUgaXMgb25lKSBpZiBvbmx5IHRoZQppbnB1dCBwb3NpdGlvbiBpcyBjaGFuZ2VkLiBUaGUgc3RhbmRhcmQgc2VlbXMgdG8gbWFuZGF0ZSB0aGF0IHRoZQpvdXRwdXQgYnVmZmVyIGlzIGtlcHQgYW5kIHByb2Nlc3NlZCBhcyBpZiB0aGVyZSB3YXMgbm8gcG9zaXRpb25pbmcgb2YKdGhlIG91dHB1dCBwb3NpdGlvbiAoYnkgY2hhbmdpbmcgdGhlIGlucHV0IHBvc2l0aW9uKS4gT2YgY291cnNlLCB0aGlzCmNhbiBiZSBleGFjdGx5IHdoYXQgeW91IHdhbnQgaWYgdGhlIGZsYWcgPHR0Pmlvc19iYXNlOjphdGU8L3R0PiBpcwpzZXQuIEhvd2V2ZXIsIEkgdGhpbmssIHRoZSBzdGFuZGFyZCBzaG91bGQgc2F5IHNvbWV0aGluZyBsaWtlCnRoaXM6PC9wPgo8dWw+CiAgPGxpPklmIDx0dD4od2hpY2ggJmFtcDsgbW9kZSkgPT0gMDwvdHQ+IG5laXRoZXIgcmVhZCBub3Igd3JpdGUgcG9zaXRpb24gaXMKICAgIGNoYW5nZWQgYW5kIHRoZSBjYWxsIGZhaWxzLiBPdGhlcndpc2UsIHRoZSBqb2ludCByZWFkIGFuZCB3cml0ZSBwb3NpdGlvbiBpcwogICAgYWx0ZXJlZCB0byBjb3JyZXNwb25kIHRvIDx0dD5zcDwvdHQ+LjwvbGk+CiAgPGxpPklmIHRoZXJlIGlzIGFuIG91dHB1dCBidWZmZXIsIHRoZSBvdXRwdXQgc2VxdWVuY2VzIGlzIHVwZGF0ZWQgYW5kIGFueQogICAgdW5zaGlmdCBzZXF1ZW5jZSBpcyB3cml0dGVuIGJlZm9yZSB0aGUgcG9zaXRpb24gaXMgYWx0ZXJlZC48L2xpPgogIDxsaT5JZiB0aGVyZSBpcyBhbiBpbnB1dCBidWZmZXIsIHRoZSBpbnB1dCBzZXF1ZW5jZSBpcyB1cGRhdGVkIGFmdGVyIHRoZQogICAgcG9zaXRpb24gaXMgYWx0ZXJlZC48L2xpPgo8L3VsPgo8cD5QbHVzIHRoZSBhcHByb3ByaWF0ZSBlcnJvciBoYW5kbGluZywgdGhhdCBpcy4uLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIHVubnVtYmVyZWQgcGFyYWdyYXBoIGluIDI3LjguMS40IChsaWIuZmlsZWJ1Zi52aXJ0dWFscykgYmVmb3JlCnBhcmFncmFwaCAxNCBmcm9tOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+cG9zX3R5cGUgc2Vla3Bvcyhwb3NfdHlwZSBzcCwgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwKICBpb3NfYmFzZTo6b3V0KTs8L3A+CiAgPHA+QWx0ZXJzIHRoZSBmaWxlIHBvc2l0aW9uLCBpZiBwb3NzaWJsZSwgdG8gY29ycmVzcG9uZCB0byB0aGUgcG9zaXRpb24gc3RvcmVkCiAgaW4gc3AgKGFzIGRlc2NyaWJlZCBiZWxvdykuPC9wPgogIDxwPi0gaWYgKHdoaWNoJmFtcDtpb3NfYmFzZTo6aW4pIT0wLCBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gc3AsIHRoZW4gdXBkYXRlCiAgdGhlIGlucHV0IHNlcXVlbmNlPC9wPgogIDxwPi0gaWYgKHdoaWNoJmFtcDtpb3NfYmFzZTo6b3V0KSE9MCwgdGhlbiB1cGRhdGUgdGhlIG91dHB1dCBzZXF1ZW5jZSwgd3JpdGUKICBhbnkgdW5zaGlmdCBzZXF1ZW5jZSwgYW5kIHNldCB0aGUgZmlsZSBwb3NpdGlvbiB0byBzcC48L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5wb3NfdHlwZSBzZWVrcG9zKHBvc190eXBlIHNwLCBpb3NfYmFzZTo6b3Blbm1vZGUgPSBpb3NfYmFzZTo6aW4gfAogIGlvc19iYXNlOjpvdXQpOzwvcD4KICA8cD5BbHRlcnMgdGhlIGZpbGUgcG9zaXRpb24sIGlmIHBvc3NpYmxlLCB0byBjb3JyZXNwb25kIHRvIHRoZSBwb3NpdGlvbiBzdG9yZWQKICBpbiBzcCAoYXMgZGVzY3JpYmVkIGJlbG93KS4gQWx0ZXJpbmcgdGhlIGZpbGUgcG9zaXRpb24gcGVyZm9ybXMgYXMgZm9sbG93czo8L3A+CiAgPHA+MS4gaWYgKG9tICZhbXA7IGlvc19iYXNlOjpvdXQpIT0wLCB0aGVuIHVwZGF0ZSB0aGUgb3V0cHV0IHNlcXVlbmNlIGFuZAogIHdyaXRlIGFueSB1bnNoaWZ0IHNlcXVlbmNlOzwvcD4KICA8cD4yLiBzZXQgdGhlIGZpbGUgcG9zaXRpb24gdG8gc3A7PC9wPgogIDxwPjMuIGlmIChvbSAmYW1wOyBpb3NfYmFzZTo6aW4pIT0wLCB0aGVuIHVwZGF0ZSB0aGUgaW5wdXQgc2VxdWVuY2U7PC9wPgogIDxwPndoZXJlIG9tIGlzIHRoZSBvcGVuIG1vZGUgcGFzc2VkIHRvIHRoZSBsYXN0IGNhbGwgdG8gb3BlbigpLiBUaGUgb3BlcmF0aW9uCiAgZmFpbHMgaWYgaXNfb3BlbigpIHJldHVybnMgZmFsc2UuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bS29uYTogRGlldG1hciBpcyB3b3JraW5nIG9uIGEgcHJvcG9zZWQgcmVzb2x1dGlvbi5dPC9pPjwvcD4KPHA+PGk+W1Bvc3QtVG9reW86IERpZXRtYXIgc3VwcGxpZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTcyIj48aDM+MTcyLiZuYnNwO0luY29uc2lzdGVudCB0eXBlcyBmb3IgPHR0PmJhc2ljX2lzdHJlYW06Omlnbm9yZSgpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHcmVnIENvbWVhdSwgRGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1bCAxOTk5PC9wPgo8cD5JbiAyNy42LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbSI+IFtsaWIuaXN0cmVhbV08L2E+IHRoZSBmdW5jdGlvbgo8dHQ+aWdub3JlKCk8L3R0PiBnZXRzIGFuIG9iamVjdCBvZiB0eXBlIDx0dD5zdHJlYW1zaXplPC90dD4gYXMgZmlyc3QKYXJndW1lbnQuIEhvd2V2ZXIsIGluIDI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4KcGFyYWdyYXBoIDIzIHRoZSBmaXJzdCBhcmd1bWVudCBpcyBvZiB0eXBlIDx0dD5pbnQuPC90dD48L3A+Cgo8cD5BcyBmYXIgYXMgSSBjYW4gc2VlIHRoaXMgaXMgbm90IHJlYWxseSBhIGNvbnRyYWRpY3Rpb24gYmVjYXVzZQpldmVyeXRoaW5nIGlzIGNvbnNpc3RlbnQgaWYgPHR0PnN0cmVhbXNpemU8L3R0PiBpcyB0eXBlZGVmIHRvIGJlCjx0dD5pbnQ8L3R0Pi4gSG93ZXZlciwgdGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IG5vdCB3aGF0IHdhcwppbnRlbmRlZC4gVGhlIHNhbWUgdGhpbmcgaGFwcGVuZWQgdG8gPHR0PmJhc2ljX2ZpbGVidWY6OnNldGJ1ZigpPC90dD4sCmFzIGRlc2NyaWJlZCBpbiBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMTczIj4xNzM8L2E+LjwvcD4KCjxwPkRhcmluIEFkbGVyIGFsc28Kc3VibWl0dGVkIHRoaXMgaXNzdWUsIGNvbW1lbnRpbmc6IEVpdGhlciAyNy42LjEuMSBzaG91bGQgYmUgbW9kaWZpZWQKdG8gc2hvdyBhIGZpcnN0IHBhcmFtZXRlciBvZiB0eXBlIGludCwgb3IgMjcuNi4xLjMgc2hvdWxkIGJlIG1vZGlmaWVkCnRvIHNob3cgYSBmaXJzdCBwYXJhbWV0ZXIgb2YgdHlwZSBzdHJlYW1zaXplIGFuZCB1c2UKbnVtZXJpY19saW1pdHMmbHQ7c3RyZWFtc2l6ZSZndDs6Om1heC48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiBwYXJhZ3JhcGggMjMgYW5kIDI0LCBjaGFuZ2UgYm90aCB1c2VzCm9mIDx0dD5pbnQ8L3R0PiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPHR0Pmlnbm9yZSgpPC90dD4gdG8KPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+Cjxocj4KPGEgbmFtZT0iMTczIj48aDM+MTczLiZuYnNwO0luY29uc2lzdGVudCB0eXBlcyBmb3IgPHR0PmJhc2ljX2ZpbGVidWY6OnNldGJ1ZigpPC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHcmVnIENvbWVhdSwgRGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1bCAxOTk5PC9wPgoKPHA+CkluIDI3LjguMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmIj4gW2xpYi5maWxlYnVmXTwvYT4gdGhlIGZ1bmN0aW9uIDx0dD5zZXRidWYoKTwvdHQ+IGdldHMgYW4Kb2JqZWN0IG9mIHR5cGUgPHR0PnN0cmVhbXNpemU8L3R0PiBhcyBzZWNvbmQgYXJndW1lbnQuIEhvd2V2ZXIsIGluCjI3LjguMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLnZpcnR1YWxzIj4gW2xpYi5maWxlYnVmLnZpcnR1YWxzXTwvYT4gcGFyYWdyYXBoIDkgdGhlIHNlY29uZCBhcmd1bWVudCBpcyBvZiB0eXBlCjx0dD5pbnQ8L3R0Pi4KPC9wPgoKPHA+CkFzIGZhciBhcyBJIGNhbiBzZWUgdGhpcyBpcyBub3QgcmVhbGx5IGEgY29udHJhZGljdGlvbiBiZWNhdXNlCmV2ZXJ5dGhpbmcgaXMgY29uc2lzdGVudCBpZiA8dHQ+c3RyZWFtc2l6ZTwvdHQ+IGlzIHR5cGVkZWYgdG8gYmUKPHR0PmludDwvdHQ+LiBIb3dldmVyLCB0aGlzIGlzIGFsbW9zdCBjZXJ0YWlubHkgbm90IHdoYXQgd2FzCmludGVuZGVkLiBUaGUgc2FtZSB0aGluZyBoYXBwZW5lZCB0byA8dHQ+YmFzaWNfaXN0cmVhbTo6aWdub3JlKCk8L3R0PiwKYXMgZGVzY3JpYmVkIGluIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxNzIiPjE3MjwvYT4uCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuOC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGVidWYudmlydHVhbHMiPiBbbGliLmZpbGVidWYudmlydHVhbHNdPC9hPiBwYXJhZ3JhcGggOSwgY2hhbmdlIGFsbCB1c2VzIG9mCjx0dD5pbnQ8L3R0PiBpbiB0aGUgZGVzY3JpcHRpb24gb2YgPHR0PnNldGJ1ZigpPC90dD4gdG8KPHR0PnN0cmVhbXNpemU8L3R0Pi48L3A+Cjxocj4KPGEgbmFtZT0iMTc0Ij48aDM+MTc0LiZuYnNwO1R5cG86IDx0dD5PRkZfVDwvdHQ+IHZzLiA8dHQ+UE9TX1Q8L3R0Pgo8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDtELjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmlvcy5tZW1iZXJzIj4gW2RlcHIuaW9zLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSnVsIDE5OTk8L3A+CjxwPkFjY29yZGluZyB0byBwYXJhZ3JhcGggMSBvZiB0aGlzIHNlY3Rpb24sIDx0dD5zdHJlYW1wb3M8L3R0PiBpcyB0aGUKdHlwZSA8dHQ+T0ZGX1Q8L3R0PiwgdGhlIHNhbWUgdHlwZSBhcyA8dHQ+c3RyZWFtb2ZmPC90dD4uIEhvd2V2ZXIsIGluCnBhcmFncmFwaCA2IHRoZSA8dHQ+c3RyZWFtcG9zPC90dD4gZ2V0cyB0aGUgdHlwZSA8dHQ+UE9TX1Q8L3R0PjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgRC42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZnV0dXJlLmh0bWwjZGVwci5pb3MubWVtYmVycyI+IFtkZXByLmlvcy5tZW1iZXJzXTwvYT4gcGFyYWdyYXBoIDEgZnJvbSAiPHR0PnR5cGVkZWYKT0ZGX1Qgc3RyZWFtcG9zOzwvdHQ+IiB0byAiPHR0PnR5cGVkZWYgUE9TX1QKc3RyZWFtcG9zOzwvdHQ+IjwvcD4KPGhyPgo8YSBuYW1lPSIxNzUiPjxoMz4xNzUuJm5ic3A7QW1iaWd1aXR5IGZvciA8dHQ+YmFzaWNfc3RyZWFtYnVmOjpwdWJzZWVrcG9zKCk8L3R0PiBhbmQgYSBmZXcgb3RoZXIgZnVuY3Rpb25zLjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPiBbZGVwci5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdWwgMTk5OTwvcD4KPHA+QWNjb3JkaW5nIHRvIHBhcmFncmFwaCA4IG9mIHRoaXMgc2VjdGlvbiwgdGhlIG1ldGhvZHMKPHR0PmJhc2ljX3N0cmVhbWJ1Zjo6cHVic2Vla3BvcygpPC90dD4sCjx0dD5iYXNpY19pZnN0cmVhbTo6b3BlbigpPC90dD4sIGFuZCA8dHQ+YmFzaWNfb2ZzdHJlYW06Om9wZW48L3R0PgoibWF5IiBiZSBvdmVybG9hZGVkIGJ5IGEgdmVyc2lvbiBvZiB0aGlzIGZ1bmN0aW9uIHRha2luZyB0aGUKdHlwZSA8dHQ+aW9zX2Jhc2U6Om9wZW5fbW9kZTwvdHQ+IGFzIGxhc3QgYXJndW1lbnQgYXJndW1lbnQgaW5zdGVhZCBvZgo8dHQ+aW9zX2Jhc2U6Om9wZW5tb2RlPC90dD4gKDx0dD5pb3NfYmFzZTo6b3Blbl9tb2RlPC90dD4gaXMgZGVmaW5lZAppbiB0aGlzIHNlY3Rpb24gdG8gYmUgYW4gYWxpYXMgZm9yIG9uZSBvZiB0aGUgaW50ZWdyYWwgdHlwZXMpLiBUaGUKY2xhdXNlIHNwZWNpZmllcywgdGhhdCB0aGUgbGFzdCBhcmd1bWVudCBoYXMgYSBkZWZhdWx0IGFyZ3VtZW50IGluCnRocmVlIGNhc2VzLiAgSG93ZXZlciwgdGhpcyBnZW5lcmF0ZXMgYW4gYW1iaWd1aXR5IHdpdGggdGhlIG92ZXJsb2FkZWQKdmVyc2lvbiBiZWNhdXNlIG5vdyB0aGUgYXJndW1lbnRzIGFyZSBhYnNvbHV0ZWx5IGlkZW50aWNhbCBpZiB0aGUgbGFzdAphcmd1bWVudCBpcyBub3Qgc3BlY2lmaWVkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBELjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmlvcy5tZW1iZXJzIj4gW2RlcHIuaW9zLm1lbWJlcnNdPC9hPiBwYXJhZ3JhcGggOCwgcmVtb3ZlIHRoZSBkZWZhdWx0IGFyZ3VtZW50cyBmb3IKPHR0PmJhc2ljX3N0cmVhbWJ1Zjo6cHVic2Vla3BvcygpPC90dD4sCjx0dD5iYXNpY19pZnN0cmVhbTo6b3BlbigpPC90dD4sIGFuZAo8dHQ+YmFzaWNfb2ZzdHJlYW06Om9wZW4oKS48L3R0PjwvcD4KPGhyPgo8YSBuYW1lPSIxNzYiPjxoMz4xNzYuJm5ic3A7PHR0PmV4Y2VwdGlvbnMoKTwvdHQ+IGluIDx0dD5pb3NfYmFzZTwvdHQ+Li4uPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwO0QuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Z1dHVyZS5odG1sI2RlcHIuaW9zLm1lbWJlcnMiPiBbZGVwci5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBKdWwgMTk5OTwvcD4KPHA+VGhlICJvdmVybG9hZCIgZm9yIHRoZSBmdW5jdGlvbiA8dHQ+ZXhjZXB0aW9ucygpPC90dD4gaW4KcGFyYWdyYXBoIDggZ2l2ZXMgdGhlIGltcHJlc3Npb24gdGhhdCB0aGVyZSBpcyBhbm90aGVyIGZ1bmN0aW9uIG9mCnRoaXMgZnVuY3Rpb24gZGVmaW5lZCBpbiBjbGFzcyA8dHQ+aW9zX2Jhc2U8L3R0Pi4gSG93ZXZlciwgdGhpcyBpcyBub3QKdGhlIGNhc2UuIFRodXMsIGl0IGlzIGhhcmQgdG8gdGVsbCBob3cgdGhlIHNlbWFudGljcyAocGFyYWdyYXBoIDkpIGNhbgpiZSBpbXBsZW1lbnRlZDogIkNhbGwgdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVyIGZ1bmN0aW9uIHNwZWNpZmllZAppbiBjbGF1c2UgMjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4uIjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBELjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9mdXR1cmUuaHRtbCNkZXByLmlvcy5tZW1iZXJzIj4gW2RlcHIuaW9zLm1lbWJlcnNdPC9hPiBwYXJhZ3JhcGggOCwgbW92ZSB0aGUgZGVjbGFyYXRpb24gb2YgdGhlCmZ1bmN0aW9uIDx0dD5leGNlcHRpb25zKCk8L3R0PmludG8gY2xhc3MgPHR0PmJhc2ljX2lvczwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIxNzkiPjxoMz4xNzkuJm5ic3A7Q29tcGFyaXNvbiBvZiBjb25zdF9pdGVyYXRvcnMgdG8gaXRlcmF0b3JzIGRvZXNuJ3Qgd29yazwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgSnVsIDE5OTg8L3A+CjxwPkN1cnJlbnRseSB0aGUgZm9sbG93aW5nIHdpbGwgbm90IGNvbXBpbGUgb24gdHdvIHdlbGwta25vd24gc3RhbmRhcmQKbGlicmFyeSBpbXBsZW1lbnRhdGlvbnM6PC9wPgoKPGJsb2NrcXVvdGU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7c2V0Jmd0Owp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBmKGNvbnN0IHNldCZsdDtpbnQmZ3Q7ICZhbXA7cykKewogIHNldCZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpOwogIGlmIChpPT1zLmVuZCgpKTsgLy8gcy5lbmQoKSByZXR1cm5zIGEgY29uc3RfaXRlcmF0b3IKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIHJlYXNvbiB0aGlzIGRvZXNuJ3QgY29tcGlsZSBpcyBiZWNhdXNlIG9wZXJhdG9yPT0gd2FzIGltcGxlbWVudGVkCmFzIGEgbWVtYmVyIGZ1bmN0aW9uIG9mIHRoZSBuZXN0ZWQgY2xhc3NlcyBzZXQ6aXRlcmF0b3IgYW5kCnNldDo6Y29uc3RfaXRlcmF0b3IsIGFuZCB0aGVyZSBpcyBubyBjb252ZXJzaW9uIGZyb20gY29uc3RfaXRlcmF0b3IgdG8KaXRlcmF0b3IuIFN1cnByaXNpbmdseSwgKHMuZW5kKCkgPT0gaSkgZG9lcyB3b3JrLCB0aG91Z2gsIGJlY2F1c2Ugb2YKdGhlIGNvbnZlcnNpb24gZnJvbSBpdGVyYXRvciB0byBjb25zdF9pdGVyYXRvci4KPC9wPgoKPHA+CkkgZG9uJ3Qgc2VlIGEgcmVxdWlyZW1lbnQgYW55d2hlcmUgaW4gdGhlIHN0YW5kYXJkIHRoYXQgdGhpcyBtdXN0CndvcmsuIFNob3VsZCB0aGVyZSBiZSBvbmU/ICBJZiBzbywgSSB0aGluayB0aGUgcmVxdWlyZW1lbnQgd291bGQgbmVlZAp0byBiZSBhZGRlZCB0byB0aGUgdGFibGVzIGluIHNlY3Rpb24gMjQuMS4xLiBJJ20gbm90IHN1cmUgYWJvdXQgdGhlCndvcmRpbmcuICBJZiB0aGlzIHJlcXVpcmVtZW50IGV4aXN0ZWQgaW4gdGhlIHN0YW5kYXJkLCBJIHdvdWxkIHRoaW5rCnRoYXQgaW1wbGVtZW50b3JzIHdvdWxkIGhhdmUgdG8gbWFrZSB0aGUgY29tcGFyaXNvbiBvcGVyYXRvcnMKbm9uLW1lbWJlciBmdW5jdGlvbnMuPC9wPgoKPHA+VGhpcyBpc3N1ZXMgd2FzIGFsc28gcmFpc2VkIG9uIGNvbXAuc3RkLmMrKyBieSBEYXJpbgpBZGxlci4mbmJzcDsgVGhlIGV4YW1wbGUgZ2l2ZW4gd2FzOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwcmU+Ym9vbCBjaGVja19lcXVhbChzdGQ6OmRlcXVlJmx0O2ludCZndDs6Oml0ZXJhdG9yIGksCnN0ZDo6ZGVxdWUmbHQ7aW50Jmd0Ozo6Y29uc3RfaXRlcmF0b3IgY2kpCnsKcmV0dXJuIGkgPT0gY2k7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+Q29tbWVudCBmcm9tIEpvaG4gUG90dGVyOjwvcD4KPGJsb2NrcXVvdGU+CiAgICA8cD4KICAgIEluIGNhc2Ugbm9ib2R5IGhhcyBub3RpY2VkLCBhY2NlcHRpbmcgaXQgd2lsbCBicmVhayByZXZlcnNlX2l0ZXJhdG9yLgogICAgPC9wPgoKICAgIDxwPgogICAgVGhlIGZpeCBpcyB0byBtYWtlIHRoZSBjb21wYXJpc29uIG9wZXJhdG9ycyB0ZW1wbGF0ZWQgb24gdHdvIHR5cGVzLgogICAgPC9wPgoKICAgIDxwcmU+ICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJdGVyYXRvcjEsIGNsYXNzIEl0ZXJhdG9yMiZndDsKICAgIGJvb2wgb3BlcmF0b3I9PSAocmV2ZXJzZV9pdGVyYXRvciZsdDtJdGVyYXRvcjEmZ3Q7IGNvbnN0JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgcmV2ZXJzZV9pdGVyYXRvciZsdDtJdGVyYXRvcjImZ3Q7IGNvbnN0JmFtcDsgeSk7CiAgICA8L3ByZT4KCiAgICA8cD4KICAgIE9idmlvdXNseTogIHJldHVybiB4LmJhc2UoKSA9PSB5LmJhc2UoKTsKICAgIDwvcD4KCiAgICA8cD4KICAgIEN1cnJlbnRseSwgbm8gcmV2ZXJzZV9pdGVyYXRvciB0byBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIGNvbXBhcmVzIGFyZQogICAgdmFsaWQuCiAgICA8L3A+CgogICAgPHA+CiAgICBCVFcsIEkgdGhpbmsgdGhlIGlzc3VlIGlzIGluIHN1cHBvcnQgb2YgYmFkIGNvZGUuICBDb21wYXJlcyBzaG91bGQgYmUKICAgIGJldHdlZW4gdHdvIGl0ZXJhdG9ycyBvZiB0aGUgc2FtZSB0eXBlLiAgQWxsIHN0ZDo6YWxnb3JpdGhtcyByZXF1aXJlCiAgICB0aGUgYmVnaW4gYW5kIGVuZCBpdGVyYXRvcnMgdG8gYmUgb2YgdGhlIHNhbWUgdHlwZS4gCiAgICA8L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbnNlcnQgdGhpcyBwYXJhZ3JhcGggYWZ0ZXIgMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggNzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkluIHRoZSBleHByZXNzaW9uczwvcD4KICA8cHJlPiAgICBpID09IGoKICAgIGkgIT0gagogICAgaSAmbHQ7IGoKICAgIGkgJmx0Oz0gagogICAgaSAmZ3Q7PSBqCiAgICBpICZndDsgagogICAgaSAtIGoKICA8L3ByZT4KICA8cD5XaGVyZSBpIGFuZCBqIGRlbm90ZSBvYmplY3RzIG9mIGEgY29udGFpbmVyJ3MgaXRlcmF0b3IgdHlwZSwKICBlaXRoZXIgb3IgYm90aCBtYXkgYmUgcmVwbGFjZWQgYnkgYW4gb2JqZWN0IG9mIHRoZSBjb250YWluZXIncwogIGNvbnN0X2l0ZXJhdG9yIHR5cGUgcmVmZXJyaW5nIHRvIHRoZSBzYW1lIGVsZW1lbnQgd2l0aCBubwogIGNoYW5nZSBpbiBzZW1hbnRpY3MuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1Ub3JvbnRvOiBKdWR5IHN1cHBsaWVkIGEgcHJvcG9zZWQgcmVzb2x1dGlvbiBzYXlpbmcgdGhhdAo8dHQ+aXRlcmF0b3I8L3R0PiBhbmQgPHR0PmNvbnN0X2l0ZXJhdG9yPC90dD4gY291bGQgYmUgZnJlZWx5IG1peGVkIGluCml0ZXJhdG9yIGNvbXBhcmlzb24gYW5kIGRpZmZlcmVuY2Ugb3BlcmF0aW9ucy5dPC9pPjwvcD4KCjxwPjxpPltSZWRtb25kOiBEYXZlIGFuZCBIb3dhcmQgc3VwcGxpZWQgYSBuZXcgcHJvcG9zZWQgcmVzb2x1dGlvbiB3aGljaApleHBsaWNpdGx5IGxpc3RlZCBleHByZXNzaW9uczsgdGhlcmUgd2FzIGNvbmNlcm4gdGhhdCB0aGUgcHJldmlvdXMKcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMgdG9vIGluZm9ybWFsLl08L2k+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBMV0cgYmVsaWV2ZXMgaXQgaXMgY2xlYXIgdGhhdCB0aGUgYWJvdmUgd29yZGluZyBhcHBsaWVzIG9ubHkgdG8KdGhlIG5lc3RlZCB0eXBlcyA8dHQ+WDo6aXRlcmF0b3I8L3R0PiBhbmQgPHR0Plg6OmNvbnN0X2l0ZXJhdG9yPC90dD4sCndoZXJlIDx0dD5YPC90dD4gaXMgYSBjb250YWluZXIuICBUaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0Cjx0dD5YOjpyZXZlcnNlX2l0ZXJhdG9yPC90dD4gYW5kIDx0dD5YOjpjb25zdF9yZXZlcnNlX2l0ZXJhdG9yPC90dD4KY2FuIGJlIG1peGVkLiAgSWYgbWl4aW5nIHRoZW0gaXMgY29uc2lkZXJlZCBpbXBvcnRhbnQsIHRoYXQncyBhCnNlcGFyYXRlIGlzc3VlLiAgKElzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzI4MCI+MjgwPC9hPi4pCjwvcD4KPGhyPgo8YSBuYW1lPSIxODEiPjxoMz4xODEuJm5ic3A7bWFrZV9wYWlyKCkgdW5pbnRlbmRlZCBiZWhhdmlvcjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIucGFpcnMiPiBbbGliLnBhaXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmV3IEtvZW5pZyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEF1ZyAxOTk5PC9wPgo8cD5UaGUgY2xhaW0gaGFzIHN1cmZhY2VkIGluIFVzZW5ldCB0aGF0IGV4cHJlc3Npb25zIHN1Y2ggYXM8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5tYWtlX3BhaXIoImFiYyIsIDMpPC90dD48YnI+Cjxicj4KYXJlIGlsbGVnYWwsIG5vdHdpdGhzdGFuZGluZyB0aGVpciB1c2UgaW4gZXhhbXBsZXMsIGJlY2F1c2UgdGVtcGxhdGUgaW5zdGFudGlhdGlvbiB0cmllcyB0byBiaW5kIHRoZSBmaXJzdCB0ZW1wbGF0ZQpwYXJhbWV0ZXIgdG8gPHR0PiBjb25zdCBjaGFyICgmYW1wOylbNF08L3R0Piwgd2hpY2ggdHlwZSBpcyB1bmNvcHlhYmxlLjxicj4KPGJyPgpJIGRvdWJ0IGFueW9uZSBpbnRlbmRlZCB0aGF0IGJlaGF2aW9yLi4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi51dGlsaXR5Ij4gW2xpYi51dGlsaXR5XTwvYT4sIHBhcmFncmFwaCAxIGNoYW5nZSB0aGUgZm9sbG93aW5nCmRlY2xhcmF0aW9uIG9mIG1ha2VfcGFpcigpOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OyBwYWlyJmx0O1QxLFQyJmd0OyBtYWtlX3BhaXIoY29uc3QgVDEmYW1wOywgY29uc3QgVDImYW1wOyk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7IHBhaXImbHQ7VDEsVDImZ3Q7IG1ha2VfcGFpcihUMSwgVDIpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPiAgSW4gMjAuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5wYWlycyI+IFtsaWIucGFpcnNdPC9hPiBwYXJhZ3JhcGggNyBhbmQgdGhlIGxpbmUgYmVmb3JlLCBjaGFuZ2U6PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgVDEsIGNsYXNzIFQyJmd0OwpwYWlyJmx0O1QxLCBUMiZndDsgbWFrZV9wYWlyKGNvbnN0IFQxJmFtcDsgeCwgY29uc3QgVDImYW1wOyB5KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPnRlbXBsYXRlICZsdDtjbGFzcyBUMSwgY2xhc3MgVDImZ3Q7CnBhaXImbHQ7VDEsIFQyJmd0OyBtYWtlX3BhaXIoVDEgeCwgVDIgeSk7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+YW5kIGFkZCB0aGUgZm9sbG93aW5nIGZvb3Rub3RlIHRvIHRoZSBlZmZlY3RzIGNsYXVzZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiBBY2NvcmRpbmcgdG8gMTIuOCBbY2xhc3MuY29weV0sIGFuIGltcGxlbWVudGF0aW9uIGlzIHBlcm1pdHRlZAogIHRvIG5vdCBwZXJmb3JtIGEgY29weSBvZiBhbiBhcmd1bWVudCwgdGh1cyBhdm9pZGluZyB1bm5lY2Vzc2FyeQogIGNvcGllcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlR3byBwb3RlbnRpYWwgZml4ZXMgd2VyZSBzdWdnZXN0ZWQgYnkgTWF0dCBBdXN0ZXJuIGFuZCBEaWV0bWFyCkv8aGwsIHJlc3BlY3RpdmVseSwgMSkgb3ZlcmxvYWRpbmcgd2l0aCBhcnJheSBhcmd1bWVudHMsIGFuZCAyKSB1c2Ugb2YKYSByZWZlcmVuY2VfdHJhaXRzIGNsYXNzIHdpdGggYSBzcGVjaWFsaXphdGlvbiBmb3IgYXJyYXlzLiAgQW5keQpLb2VuaWcgc3VnZ2VzdGVkIGNoYW5naW5nIHRvIHBhc3MgYnkgdmFsdWUuIEluIGRpc2N1c3Npb24sIGl0IGFwcGVhcmVkCnRoYXQgdGhpcyB3YXMgYSBtdWNoIHNtYWxsZXIgY2hhbmdlIHRvIHRoZSBzdGFuZGFyZCB0aGF0IHRoZSBvdGhlciB0d28Kc3VnZ2VzdGlvbnMsIGFuZCBhbnkgZWZmaWNpZW5jeSBjb25jZXJucyB3ZXJlIG1vcmUgdGhhbiBvZmZzZXQgYnkgdGhlCmFkdmFudGFnZXMgb2YgdGhlIHNvbHV0aW9uLiBUd28gaW1wbGVtZW50b3JzIHJlcG9ydGVkIHRoYXQgdGhlCnByb3Bvc2VkIHJlc29sdXRpb24gcGFzc2VkIHRoZWlyIHRlc3Qgc3VpdGVzLjwvcD4KPGhyPgo8YSBuYW1lPSIxODIiPjxoMz4xODIuJm5ic3A7QW1iaWd1b3VzIHJlZmVyZW5jZXMgdG8gc2l6ZV90PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIubGlicmFyeSI+IFtsaWIubGlicmFyeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FsIFN0ZXZlbnMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgQXVnIDE5OTk8L3A+CjxwPk1hbnkgcmVmZXJlbmNlcyB0byA8dHQ+IHNpemVfdDwvdHQ+IHRocm91Z2hvdXQgdGhlIGRvY3VtZW50Cm9taXQgdGhlIDx0dD4gc3RkOjo8L3R0PiBuYW1lc3BhY2UgcXVhbGlmaWNhdGlvbi48L3A+IDxwPkZvcgpleGFtcGxlLCAxNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+IHBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+JiM4MjEyOyBvcGVyYXRvciBuZXcoc2l6ZV90KQomIzgyMTI7IG9wZXJhdG9yIG5ldyhzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspCiYjODIxMjsgb3BlcmF0b3IgbmV3W10oc2l6ZV90KQomIzgyMTI7IG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiAgIEluIDE3LjQuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9ucyI+IFtsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zXTwvYT4gcGFyYWdyYXBoIDI6IHJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KPHA+PHR0PiAgICAgLSBvcGVyYXRvciBuZXcoc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ldyhzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPGJyPgogICAgIC0gb3BlcmF0b3IgbmV3W10oc2l6ZV90KTxicj4KICAgICAtIG9wZXJhdG9yIG5ld1tdKHNpemVfdCwgY29uc3Qgc3RkOjpub3Rocm93X3QmYW1wOyk8L3R0PjwvcD4KPC9ibG9ja3F1b3RlPgo8cD4gICAgYnk6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4tIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkKLSBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpCi0gb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JmFtcDspPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzXSAyMC4xLjUsIHBhcmFncmFwaCA0OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+VGhlIHR5cGVkZWYgbWVtYmVycyBwb2ludGVyLCBjb25zdF9wb2ludGVyLCBzaXplX3R5cGUsIGFuZCBkaWZmZXJlbmNlX3R5cGUKICBhcmUgcmVxdWlyZWQgdG8gYmUgVCosIFQgY29uc3QqLCBzaXplX3QsIGFuZCBwdHJkaWZmX3QsIHJlc3BlY3RpdmVseS48L3A+CjwvYmxvY2txdW90ZT4KPHA+Jm5ic3A7Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgdHlwZWRlZiBtZW1iZXJzIHBvaW50ZXIsIGNvbnN0X3BvaW50ZXIsIHNpemVfdHlwZSwgYW5kIGRpZmZlcmVuY2VfdHlwZQogIGFyZSByZXF1aXJlZCB0byBiZSBUKiwgVCBjb25zdCosIHN0ZDo6c2l6ZV90LCBhbmQgc3RkOjpwdHJkaWZmX3QsCiAgcmVzcGVjdGl2ZWx5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXSAyMC40LjEuMSwgcGFyYWdyYXBocyAzIGFuZCA2OiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+MyBOb3RlczogVXNlcyA6Om9wZXJhdG9yIG5ldyhzaXplX3QpICgxOC40LjEpLjwvcD4KICA8cD42IE5vdGU6IHRoZSBzdG9yYWdlIGlzIG9idGFpbmVkIGJ5IGNhbGxpbmcgOjpvcGVyYXRvciBuZXcoc2l6ZV90KSwgYnV0IGl0CiAgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludCBpcwogIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+Ynk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4zIE5vdGVzOiBVc2VzIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSAoMTguNC4xKS48L3A+CiAgPHA+NiBOb3RlOiB0aGUgc3RvcmFnZSBpcyBvYnRhaW5lZCBieSBjYWxsaW5nIDo6b3BlcmF0b3IgbmV3KHN0ZDo6c2l6ZV90KSwgYnV0CiAgaXQgaXMgdW5zcGVjaWZpZWQgd2hlbiBvciBob3cgb2Z0ZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIFRoZSB1c2Ugb2YgaGludAogIGlzIHVuc3BlY2lmaWVkLCBidXQgaW50ZW5kZWQgYXMgYW4gYWlkIHRvIGxvY2FsaXR5IGlmIGFuIGltcGxlbWVudGF0aW9uIHNvCiAgZGVzaXJlcy48L3A+CjwvYmxvY2txdW90ZT4KPHA+SW4gW2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlXSAyMS4xLjEsIHBhcmFncmFwaCAxOiByZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+SW4gVGFibGUgMzcsIFggZGVub3RlcyBhIFRyYWl0cyBjbGFzcyBkZWZpbmluZyB0eXBlcyBhbmQgZnVuY3Rpb25zIGZvciB0aGUKICBjaGFyYWN0ZXIgY29udGFpbmVyIHR5cGUgQ2hhclQ7IGMgYW5kIGQgZGVub3RlIHZhbHVlcyBvZiB0eXBlIENoYXJUOyBwIGFuZCBxCiAgZGVub3RlIHZhbHVlcyBvZiB0eXBlIGNvbnN0IENoYXJUKjsgcyBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBDaGFyVCo7IG4sIGkgYW5kCiAgaiBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgc2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsgcG9zCiAgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5ieTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkluIFRhYmxlIDM3LCBYIGRlbm90ZXMgYSBUcmFpdHMgY2xhc3MgZGVmaW5pbmcgdHlwZXMgYW5kIGZ1bmN0aW9ucyBmb3IgdGhlCiAgY2hhcmFjdGVyIGNvbnRhaW5lciB0eXBlIENoYXJUOyBjIGFuZCBkIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBDaGFyVDsgcCBhbmQgcQogIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBDaGFyVCo7IHMgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgQ2hhclQqOyBuLCBpIGFuZAogIGogZGVub3RlIHZhbHVlcyBvZiB0eXBlIHN0ZDo6c2l6ZV90OyBlIGFuZCBmIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBYOjppbnRfdHlwZTsKICBwb3MgZGVub3RlcyBhIHZhbHVlIG9mIHR5cGUgWDo6cG9zX3R5cGU7IGFuZCBzdGF0ZSBkZW5vdGVzIGEgdmFsdWUgb2YgdHlwZSBYOjpzdGF0ZV90eXBlLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5JbiBbbGliLmNoYXIudHJhaXRzLnJlcXVpcmVdIDIxLjEuMSwgdGFibGUgMzc6IHJlcGxhY2UgdGhlIHJldHVybiB0eXBlIG9mClg6Omxlbmd0aChwKTogInNpemVfdCIgYnkgInN0ZDo6c2l6ZV90Ii48L3A+CjxwPiAgIEluIFtsaWIuc3RkLml0ZXJhdG9yLnRhZ3NdIDI0LjMuMywgcGFyYWdyYXBoIDI6ICAgIHJlcGxhY2U6PGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzxicj4KICAgIGJ5Ojxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHR5cGVkZWYgc3RkOjpwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOzwvcD4KPHA+IEluIFtsaWIubG9jYWxlLmN0eXBlXSAyMi4yLjEuMSBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZQpkZWNsYXJhdGlvbiBvZiB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7IGNsYXNzIGN0eXBlLjxicj4KPGJyPgogICBJbiBbbGliLml0ZXJhdG9yLnRyYWl0c10gMjQuMy4xLCBwYXJhZ3JhcGggMiAgICBwdXQgbmFtZXNwYWNlIHN0ZCB7IC4uLn0gYXJvdW5kIHRoZSBkZWNsYXJhdGlvbiBvZjo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IHRlbXBsYXRlJmx0O2NsYXNzIEl0ZXJhdG9yJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGJyPgombmJzcDsmbmJzcDsmbmJzcDsgdGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgc3RydWN0IGl0ZXJhdG9yX3RyYWl0cyZsdDtUKiZndDs8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzJmx0O2NvbnN0IFQqJmd0OzwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgY29ycmVjdGluZyBuYW1lcyBsaWtlIDx0dD5zaXplX3Q8L3R0PiBhbmQKPHR0PnB0cmRpZmZfdDwvdHQ+IHRvIDx0dD5zdGQ6OnNpemVfdDwvdHQ+IGFuZCA8dHQ+c3RkOjpwdHJkaWZmX3Q8L3R0Pgp0byBiZSBlc3NlbnRpYWxseSBlZGl0b3JpYWwuICBUaGVyZSB0aGVyZSBjYW4ndCBiZSBhbm90aGVyIHNpemVfdCBvcgpwdHJkaWZmX3QgbWVhbnQgYW55d2F5IGJlY2F1c2UsIGFjY29yZGluZyB0byAxNy40LjMuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmV4dGVybi50eXBlcyI+IFtsaWIuZXh0ZXJuLnR5cGVzXTwvYT4sPC9wPgoKPGJsb2NrcXVvdGU+CkZvciBlYWNoIHR5cGUgVCBmcm9tIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnksIHRoZSB0eXBlcyA6OlQgYW5kIHN0ZDo6VAphcmUgcmVzZXJ2ZWQgdG8gdGhlIGltcGxlbWVudGF0aW9uIGFuZCwgd2hlbiBkZWZpbmVkLCA6OlQgc2hhbGwgYmUKaWRlbnRpY2FsIHRvIHN0ZDo6VC4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIGlzc3VlIGlzIHRyZWF0ZWQgYXMgYSBEZWZlY3QgUmVwb3J0IHRvIG1ha2UgZXhwbGljaXQgdGhlIFByb2plY3QKRWRpdG9yJ3MgYXV0aG9yaXR5IHRvIG1ha2UgdGhpcyBjaGFuZ2UuPC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86IE5pY28gSm9zdXR0aXMgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcgYXQgdGhlCnJlcXVlc3Qgb2YgdGhlIExXRy5dPC9pPjwvcD4KCjxwPjxpPltUb3JvbnRvOiBUaGlzIGlzIHRhbmdlbnRpYWxseSByZWxhdGVkIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjkiPjIyOTwvYT4sIGJ1dCBvbmx5IHRhbmdlbnRpYWxseTogdGhlIGludGVudCBvZiB0aGlzIGlzc3VlIGlzIHRvCmFkZHJlc3MgdXNlIG9mIHRoZSBuYW1lIDx0dD5zaXplX3Q8L3R0PiBpbiBjb250ZXh0cyBvdXRzaWRlIG9mCm5hbWVzcGFjZSBzdGQsIHN1Y2ggYXMgaW4gdGhlIGRlc2NyaXB0aW9uIG9mIDx0dD46Om9wZXJhdG9yIG5ldzwvdHQ+LgpUaGUgcHJvcG9zZWQgY2hhbmdlcyBzaG91bGQgYmUgcmV2aWV3ZWQgdG8gbWFrZSBzdXJlIHRoZXkgYXJlCmNvcnJlY3QuXTwvaT48L3A+Cgo8cD48aT5bcHJlLUNvcGVuaGFnZW46IE5pY28gaGFzIHJldmlld2VkIHRoZSBjaGFuZ2VzIGFuZCBiZWxpZXZlcwp0aGVtIHRvIGJlIGNvcnJlY3QuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjE4MyI+PGgzPjE4My4mbmJzcDtJL08gc3RyZWFtIG1hbmlwdWxhdG9ycyBkb24ndCB3b3JrIGZvciB3aWRlIGNoYXJhY3RlciBzdHJlYW1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdGQubWFuaXAiPiBbbGliLnN0ZC5tYW5pcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgSnVsIDE5OTk8L3A+CjxwPjI3LjYuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RkLm1hbmlwIj4gW2xpYi5zdGQubWFuaXBdPC9hPiBwYXJhZ3JhcGggMyBzYXlzIChjbGF1c2UgbnVtYmVyaW5nIGFkZGVkIGZvcgpleHBvc2l0aW9uKTo8L3A+CjxibG9ja3F1b3RlPgo8cD5SZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBbMV0gb3V0IGlzIGFuIChpbnN0YW5jZQpvZikgYmFzaWNfb3N0cmVhbSB0aGVuIHRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBiZWhhdmVzIGFzIGlmIGYocykgd2VyZQpjYWxsZWQsIGFuZCBpZiBbMl0gaW4gaXMgYW4gKGluc3RhbmNlIG9mKSBiYXNpY19pc3RyZWFtIHRoZW4gdGhlIGV4cHJlc3Npb24KaW4mZ3Q7Jmd0O3MgYmVoYXZlcyBhcyBpZiBmKHMpIHdlcmUgY2FsbGVkLiBXaGVyZSBmIGNhbiBiZSBkZWZpbmVkIGFzOiBpb3NfYmFzZSZhbXA7CmYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKSB7IC8vIHJlc2V0IHNwZWNpZmllZCBmbGFncwpzdHIuc2V0Zihpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIG1hc2spOyByZXR1cm4gc3RyOyB9IFszXSBUaGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgb3N0cmVhbSZhbXA7IGFuZCB2YWx1ZSBvdXQuIFs0XSBUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpoYXMgdHlwZSBpc3RyZWFtJmFtcDsgYW5kIHZhbHVlIGluLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5HaXZlbiB0aGUgZGVmaW5pdGlvbnMgWzFdIGFuZCBbMl0gZm9yIG91dCBhbmQgaW4sIHN1cmVseSBbM10gc2hvdWxkIHJlYWQ6CiJUaGUgZXhwcmVzc2lvbiBvdXQgJmx0OyZsdDsgcyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmFtcDsgLi4uIiBhbmQKWzRdIHNob3VsZCByZWFkOiAiVGhlIGV4cHJlc3Npb24gaW4gJmd0OyZndDsgcyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmFtcDsKLi4uIjwvcD4KPHA+SWYgdGhlIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkIGlzIGNvcnJlY3QsIEkgY2FuIHNlZSBubyB3YXkgb2YgaW1wbGVtZW50aW5nCmFueSBvZiB0aGUgbWFuaXB1bGF0b3JzIHNvIHRoYXQgdGhleSB3aWxsIHdvcmsgd2l0aCB3aWRlIGNoYXJhY3RlciBzdHJlYW1zLjwvcD4KPHA+ZS5nLiB3Y291dCAmbHQ7Jmx0OyBzZXRiYXNlKCAxNiApOzwvcD4KPHA+TXVzdCBoYXZlIHZhbHVlICd3Y291dCcgKHdoaWNoIG1ha2VzIHNlbnNlKSBhbmQgdHlwZSAnb3N0cmVhbSZhbXA7JyAod2hpY2gKZG9lc24ndCkuPC9wPgo8cD5UaGUgc2FtZSAiY3V0J24ncGFzdGUiIHR5cGUgYWxzbyBzZWVtcyB0byBvY2N1ciBpbiBQYXJhcyA0LDUsNyBhbmQKOC4gSW4gYWRkaXRpb24sIFBhcmEgNiBbc2V0ZmlsbF0gaGFzIGEgc2ltaWxhciBlcnJvciwgYnV0IHJlbGF0ZXMgb25seSB0bwpvc3RyZWFtcy48L3A+CjxwPkknZCBiZSBoYXBwaWVyIGlmIHRoZXJlIHdhcyBhIGJldHRlciB3YXkgb2Ygc2F5aW5nIHRoaXMsIHRvIG1ha2UgaXQgY2xlYXIKdGhhdCB0aGUgdmFsdWUgb2YgdGhlIGV4cHJlc3Npb24gaXMgInRoZSBzYW1lIHNwZWNpYWxpemF0aW9uIG9mCmJhc2ljX29zdHJlYW0gYXMgb3V0IiZhbXA7PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlcGxhY2Ugc2VjdGlvbiAyNy42LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0ZC5tYW5pcCI+IFtsaWIuc3RkLm1hbmlwXTwvYT4gZXhjZXB0IHBhcmFncmFwaCAxIHdpdGggdGhlCmZvbGxvd2luZzo8L3A+CjxibG9ja3F1b3RlPgo8cD4yLSBUaGUgdHlwZSBkZXNpZ25hdGVkIHNtYW5pcCBpbiBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb24KZGVzY3JpcHRpb25zIGlzIGltcGxlbWVudGF0aW9uLXNwZWNpZmllZCBhbmQgbWF5IGJlIGRpZmZlcmVudCBmb3IgZWFjaApmdW5jdGlvbi48YnI+Cjxicj4KPHR0PnNtYW5pcCByZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTs8L3R0Pjxicj4KPGJyPgotMy0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIGFuCmluc3RhbmNlIG9mIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uCm91dCZsdDsmbHQ7cyBiZWhhdmVzCmFzIGlmIGYocywgbWFzaykgd2VyZSBjYWxsZWQsIG9yIGlmIGluIGlzIGFuIGluc3RhbmNlIG9mCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzCmJlaGF2ZXMgYXMgaWYKZihzLCBtYXNrKSB3ZXJlIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIGYgY2FuIGJlIGRlZmluZWQgYXM6Kjxicj4KPGJyPgpbRm9vdG5vdGU6IFRoZSBleHByZXNzaW9uIGNpbiAmZ3Q7Jmd0OyByZXNldGlvc2ZsYWdzKGlvc19iYXNlOjpza2lwd3MpCmNsZWFycyBpb3NfYmFzZTo6c2tpcHdzIGluIHRoZSBmb3JtYXQgZmxhZ3Mgc3RvcmVkIGluIHRoZQpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgb2JqZWN0IGNpbiAodGhlIHNhbWUgYXMgY2luICZndDsmZ3Q7Cm5vc2tpcHdzKSwgYW5kIHRoZSBleHByZXNzaW9uIGNvdXQgJmx0OyZsdDsKcmVzZXRpb3NmbGFncyhpb3NfYmFzZTo6c2hvd2Jhc2UpIGNsZWFycwppb3NfYmFzZTo6c2hvd2Jhc2UgaW4gdGhlIGZvcm1hdCBmbGFncyBzdG9yZWQgaW4gdGhlCmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyBvYmplY3QgY291dCAodGhlIHNhbWUgYXMgY291dAombHQ7Jmx0Owpub3Nob3diYXNlKS4gLS0tIGVuZCBmb290bm90ZV08YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgcmVzZXQgc3BlY2lmaWVkIGZsYWdzPGJyPgombmJzcDsmbmJzcDsgc3RyLnNldGYoaW9zX2Jhc2U6OmZtdGZsYWdzKDApLCBtYXNrKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluLjxicj4KPGJyPgombmJzcDs8dHQ+c21hbmlwIHNldGlvc2ZsYWdzKGlvc19iYXNlOjpmbXRmbGFncyBtYXNrKTs8L3R0Pjxicj4KPGJyPgotNC0gUmV0dXJuczogQW4gb2JqZWN0IHMgb2YgdW5zcGVjaWZpZWQgdHlwZSBzdWNoIHRoYXQgaWYgb3V0IGlzIGFuCmluc3RhbmNlIG9mIGJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uCm91dCZsdDsmbHQ7cyBiZWhhdmVzCmFzIGlmIGYocywgbWFzaykgd2VyZSBjYWxsZWQsIG9yIGlmIGluIGlzIGFuIGluc3RhbmNlIG9mCmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyB0aGVuIHRoZSBleHByZXNzaW9uIGluJmd0OyZndDtzCmJlaGF2ZXMgYXMgaWYgZihzLAptYXNrKSB3ZXJlIGNhbGxlZC4gVGhlIGZ1bmN0aW9uIGYgY2FuIGJlIGRlZmluZWQgYXM6PGJyPgo8YnI+CiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA8dHQ+aW9zX2Jhc2UmYW1wOyBmKGlvc19iYXNlJmFtcDsgc3RyLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgbWFzayk8YnI+CiZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsgLy8gIHNldCBzcGVjaWZpZWQgZmxhZ3M8YnI+CiZuYnNwOyZuYnNwOyBzdHIuc2V0ZihtYXNrKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluLjxicj4KPGJyPgo8dHQ+c21hbmlwIHNldGJhc2UoaW50IGJhc2UpOzwvdHQ+PGJyPgo8YnI+Ci01LSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBiYXNlKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZiBmKHMsCmJhc2UpIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGludCBiYXNlKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0ICBiYXNlZmllbGQ8YnI+CiZuYnNwOyZuYnNwOyBzdHIuc2V0ZihiYXNlID09ICA4ID8gaW9zX2Jhc2U6Om9jdCA6PGJyPgombmJzcDsmbmJzcDsgYmFzZSA9PSAxMCA/IGlvc19iYXNlOjpkZWMgOjxicj4KJm5ic3A7Jm5ic3A7IGJhc2UgPT0gMTYgPyBpb3NfYmFzZTo6aGV4IDo8YnI+CiZuYnNwOyZuYnNwOyBpb3NfYmFzZTo6Zm10ZmxhZ3MoMCksIGlvc19iYXNlOjpiYXNlZmllbGQpOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LgpUaGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cyBoYXMgdHlwZSBiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgaW4uPGJyPgo8YnI+Cjx0dD5zbWFuaXAgc2V0ZmlsbChjaGFyX3R5cGUgYyk7PGJyPgo8L3R0Pjxicj4KLTYtIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyAob3IgaXMKZGVyaXZlZCBmcm9tKSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgYW5kIGMgaGFzIHR5cGUgY2hhclQKdGhlbiB0aGUKZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgYmVoYXZlcyBhcyBpZiBmKHMsIGMpIHdlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24KZiBjYW4gYmUKZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD50ZW1wbGF0ZSZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzJmd0Ozxicj4KJm5ic3A7Jm5ic3A7IGJhc2ljX2lvcyZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgZihiYXNpY19pb3MmbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IHN0ciwgY2hhclQgYyk8YnI+CiZuYnNwOyZuYnNwOyB7PGJyPgombmJzcDsmbmJzcDsgLy8gIHNldCBmaWxsIGNoYXJhY3Rlcjxicj4KJm5ic3A7Jm5ic3A7IHN0ci5maWxsKGMpOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZSBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0Ljxicj4KPGJyPgo8dHQ+c21hbmlwIHNldHByZWNpc2lvbihpbnQgbik7PC90dD48YnI+Cjxicj4KLTctIFJldHVybnM6IEFuIG9iamVjdCBzIG9mIHVuc3BlY2lmaWVkIHR5cGUgc3VjaCB0aGF0IGlmIG91dCBpcyBhbgppbnN0YW5jZSBvZiBiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbgpvdXQmbHQ7Jmx0O3MgYmVoYXZlcwphcyBpZiBmKHMsIG4pIHdlcmUgY2FsbGVkLCBvciBpZiBpbiBpcyBhbiBpbnN0YW5jZSBvZgpiYXNpY19pc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsgdGhlbiB0aGUgZXhwcmVzc2lvbiBpbiZndDsmZ3Q7cwpiZWhhdmVzIGFzIGlmIGYocywgbikKd2VyZSBjYWxsZWQuIFRoZSBmdW5jdGlvbiBmIGNhbiBiZSBkZWZpbmVkIGFzOjxicj4KPGJyPgombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgPHR0Pmlvc19iYXNlJmFtcDsgZihpb3NfYmFzZSZhbXA7IHN0ciwgaW50IG4pPGJyPgombmJzcDsmbmJzcDsgezxicj4KJm5ic3A7Jm5ic3A7IC8vICBzZXQgcHJlY2lzaW9uPGJyPgombmJzcDsmbmJzcDsgc3RyLnByZWNpc2lvbihuKTs8YnI+CiZuYnNwOyZuYnNwOyByZXR1cm4gc3RyOzxicj4KJm5ic3A7Jm5ic3A7IH08YnI+CjwvdHQ+PGJyPgpUaGUgZXhwcmVzc2lvbiBvdXQmbHQ7Jmx0O3MgaGFzIHR5cGUgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIG91dC4KVGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlIGluPGJyPgouPGJyPgo8dHQ+c21hbmlwIHNldHcoaW50IG4pOzxicj4KPC90dD48YnI+Ci04LSBSZXR1cm5zOiBBbiBvYmplY3QgcyBvZiB1bnNwZWNpZmllZCB0eXBlIHN1Y2ggdGhhdCBpZiBvdXQgaXMgYW4KaW5zdGFuY2Ugb2YgYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24Kb3V0Jmx0OyZsdDtzIGJlaGF2ZXMKYXMgaWYgZihzLCBuKSB3ZXJlIGNhbGxlZCwgb3IgaWYgaW4gaXMgYW4gaW5zdGFuY2Ugb2YKYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7IHRoZW4gdGhlIGV4cHJlc3Npb24gaW4mZ3Q7Jmd0O3MKYmVoYXZlcyBhcyBpZiBmKHMsIG4pCndlcmUgY2FsbGVkLiBUaGUgZnVuY3Rpb24gZiBjYW4gYmUgZGVmaW5lZCBhczo8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5pb3NfYmFzZSZhbXA7IGYoaW9zX2Jhc2UmYW1wOyBzdHIsIGludCBuKTxicj4KJm5ic3A7Jm5ic3A7IHs8YnI+CiZuYnNwOyZuYnNwOyAvLyAgc2V0IHdpZHRoPGJyPgombmJzcDsmbmJzcDsgc3RyLndpZHRoKG4pOzxicj4KJm5ic3A7Jm5ic3A7IHJldHVybiBzdHI7PGJyPgombmJzcDsmbmJzcDsgfTxicj4KPC90dD48YnI+ClRoZSBleHByZXNzaW9uIG91dCZsdDsmbHQ7cyBoYXMgdHlwZQpiYXNpY19vc3RyZWFtJmx0O2NoYXJULHRyYWl0cyZndDsmYW1wOyBhbmQgdmFsdWUgb3V0LiAgVGhlIGV4cHJlc3Npb24KaW4mZ3Q7Jmd0O3MgaGFzIHR5cGUgYmFzaWNfaXN0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7JmFtcDsgYW5kIHZhbHVlCmluLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltLb25hOiBBbmR5IFNhd3llciBhbmQgQmVtYW4gRGF3ZXMgd2lsbCB3b3JrIHRvIGltcHJvdmUgdGhlIHdvcmRpbmcgb2YKdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cgo8cD48aT5bVG9reW8gLSBUaGUgTFdHIG5vdGVkIHRoYXQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMjE2Ij4yMTY8L2E+IGludm9sdmVzCnRoZSBzYW1lIHBhcmFncmFwaHMuXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogVGhlIGlzc3VlcyBsaXN0IG1haW50YWluZXIgY29tYmluZWQgdGhlIHByb3Bvc2VkCnJlc29sdXRpb24gb2YgdGhpcyBpc3N1ZSB3aXRoIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1jbG9zZWQuaHRtbCMyMTYiPjIxNjwvYT4gYXMgdGhleSBib3RoIGludm9sdmVkIHRoZSBzYW1lIHBhcmFncmFwaHMsIGFuZCB3ZXJlIHNvCmludGVydHdpbmVkIHRoYXQgZGVhbGluZyB3aXRoIHRoZW0gc2VwYXJhdGVseSBhcHBlYXIgZnJhdWdodCB3aXRoCmVycm9yLiAgVGhlIGZ1bGwgdGV4dCB3YXMgc3VwcGxpZWQgYnkgQmlsbCBQbGF1Z2VyOyBpdCB3YXMgY3Jvc3MKY2hlY2tlZCBhZ2FpbnN0IGNoYW5nZXMgc3VwcGxpZWQgYnkgQW5keSBTYXd5ZXIuIEl0IHNob3VsZCBiZSBmdXJ0aGVyCmNoZWNrZWQgYnkgdGhlIExXRy5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIxODQiPjxoMz4xODQuJm5ic3A7bnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgd29yZGluZyBwcm9ibGVtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjIuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubnVtZXJpYy5zcGVjaWFsIj4gW2xpYi5udW1lcmljLnNwZWNpYWxdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtHYWJyaWVsIERvcyBSZWlzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIEp1bCAxOTk5PC9wPgo8cD5ib29scyBhcmUgZGVmaW5lZCBieSB0aGUgc3RhbmRhcmQgdG8gYmUgb2YgaW50ZWdlciB0eXBlcywgYXMgcGVyCjMuOS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvYmFzaWMuaHRtbCNiYXNpYy5mdW5kYW1lbnRhbCI+IFtiYXNpYy5mdW5kYW1lbnRhbF08L2E+IHBhcmFncmFwaCA3LiAgSG93ZXZlciAiaW50ZWdlciB0eXBlcyIKc2VlbXMgdG8gaGF2ZSBhIHNwZWNpYWwgbWVhbmluZyBmb3IgdGhlIGF1dGhvciBvZiAxOC4yLiBUaGUgbmV0IGVmZmVjdAppcyBhbiB1bmNsZWFyIGFuZCBjb25mdXNpbmcgc3BlY2lmaWNhdGlvbiBmb3IKbnVtZXJpY19saW1pdHMmbHQ7Ym9vbCZndDsgYXMgZXZpZGVuY2VkIGJlbG93LjwvcD4KCjxwPjE4LjIuMS4yLzcgc2F5cyBudW1lcmljX2xpbWl0cyZsdDsmZ3Q7OjpkaWdpdHMgaXMsIGZvciBidWlsdC1pbiBpbnRlZ2VyCnR5cGVzLCB0aGUgbnVtYmVyIG9mIG5vbi1zaWduIGJpdHMgaW4gdGhlIHJlcHJlc2VudGF0aW9uLjwvcD4KCjxwPjQuNS80IHN0YXRlcyB0aGF0IGEgYm9vbCBwcm9tb3RlcyB0byBpbnQgOyB3aGVyZWFzIDQuMTIvMSBzYXlzIGFueSBub24gemVybwphcml0aG1ldGljYWwgdmFsdWUgY29udmVydHMgdG8gdHJ1ZS48L3A+Cgo8cD5JIGRvbid0IHRoaW5rIGl0IG1ha2VzIHNlbnNlIGF0IGFsbCB0byByZXF1aXJlCm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7OjpkaWdpdHMgYW5kIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7OjpkaWdpdHMxMCB0bwpiZSBtZWFuaW5nZnVsLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBkZWZpbmVzIHdoYXQgY29uc3RpdHV0ZXMgYSBzaWduZWQgKHJlc3AuIHVuc2lnbmVkKSBpbnRlZ2VyCnR5cGVzLiBJdCBkb2Vzbid0IGNhdGVnb3JpemUgYm9vbCBhcyBiZWluZyBzaWduZWQgb3IgdW5zaWduZWQuIEFuZCB0aGUgc2V0IG9mCnZhbHVlcyBvZiBib29sIHR5cGUgaGFzIG9ubHkgdHdvIGVsZW1lbnRzLjwvcD4KCjxwPkkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gcmVxdWlyZSBudW1lcmljX2xpbWl0cyZsdDtib29sJmd0Ozo6aXNfc2lnbmVkCnRvIGJlIG1lYW5pbmdmdWwuPC9wPgoKPHA+MTguMi4xLjIvMTggZm9yIG51bWVyaWNfbGltaXRzJmx0O2ludGVnZXJfdHlwZSZndDs6OnJhZGl4Jm5ic3A7IHNheXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5Gb3IgaW50ZWdlciB0eXBlcywgc3BlY2lmaWVzIHRoZSBiYXNlIG9mIHRoZSByZXByZXNlbnRhdGlvbi4xODYpPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGRpc3Bvc2l0aW9uIGlzIGF0IGJlc3QgbWlzbGVhZGluZyBhbmQgY29uZnVzaW5nIGZvciB0aGUgc3RhbmRhcmQKcmVxdWlyZXMgYSAicHVyZSBiaW5hcnkgbnVtZXJhdGlvbiBzeXN0ZW0iIGZvciBpbnRlZ2VyIHR5cGVzIGFzIHBlcgozLjkuMS83PC9wPgoKPHA+VGhlIGZvb3Rub3RlIDE4Nikgc2F5czogIkRpc3Rpbmd1aXNoZXMgdHlwZXMgd2l0aCBiYXNlIG90aGVyIHRoYW4gMiAoZS5nCkJDRCkuIiZuYnNwOyBUaGlzIGFsc28gZXJyb25lb3VzIGFzIHRoZSBzdGFuZGFyZCBuZXZlciBkZWZpbmVzIGFueSBpbnRlZ2VyCnR5cGVzIHdpdGggYmFzZSByZXByZXNlbnRhdGlvbiBvdGhlciB0aGFuIDIuPC9wPgoKPHA+RnVydGhlcm1vcmUsIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7Ojppc19tb2R1bG8gYW5kCm51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7Ojppc19zaWduZWQgaGF2ZSBzaW1pbGFyIHByb2JsZW1zLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BcHBlbmQgdG8gdGhlIGVuZCBvZiAxOC4yLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm51bWVyaWMuc3BlY2lhbCI+IFtsaWIubnVtZXJpYy5zcGVjaWFsXTwvYT46PC9wPgo8YmxvY2txdW90ZT4KICA8cD5UaGUgc3BlY2lhbGl6YXRpb24gZm9yIGJvb2wgc2hhbGwgYmUgcHJvdmlkZWQgYXMgZm9sbG93czo8L3A+CiAgPHByZT4gICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSZsdDsmZ3Q7IGNsYXNzIG51bWVyaWNfbGltaXRzJmx0O2Jvb2wmZ3Q7IHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwogICAgICAgICBzdGF0aWMgYm9vbCBtaW4oKSB0aHJvdygpIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkgeyByZXR1cm4gdHJ1ZTsgfQoKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzID0gMTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgZGlnaXRzMTAgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCAgcmFkaXggPSAyOwogICAgICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CiAgICAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CgogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQgPSAwOwogICAgICAgICBzdGF0aWMgY29uc3QgaW50ICBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudCA9IDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgIG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwogICAgICAgICBzdGF0aWMgYm9vbCBpbmZpbml0eSgpIHRocm93KCkgeyByZXR1cm4gMDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpIHsgcmV0dXJuIDA7IH0KICAgICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gMDsgfQogICAgICAgICBzdGF0aWMgYm9vbCBkZW5vcm1fbWluKCkgdGhyb3coKSB7IHJldHVybiAwOyB9CgogICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgICAgfTsKICAgICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltUb2t5bzombmJzcDsgVGhlIExXRyBkZXNpcmVzIHdvcmRpbmcgdGhhdCBzcGVjaWZpZXMgZXhhY3QgdmFsdWVzCnJhdGhlciB0aGFuIG1vcmUgZ2VuZXJhbCB3b3JkaW5nIGluIHRoZSBvcmlnaW5hbCBwcm9wb3NlZApyZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtVG9reW86Jm5ic3A7IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0cgaW4gVG9reW8sIE5pY28KSm9zdXR0aXMgcHJvdmlkZWQgdGhlIGFib3ZlIHdvcmRpbmcuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTg1Ij48aDM+MTg1LiZuYnNwO1F1ZXN0aW9uYWJsZSB1c2Ugb2YgdGVybSAiaW5saW5lIjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmZ1bmN0aW9uLm9iamVjdHMiPiBbbGliLmZ1bmN0aW9uLm9iamVjdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtVSyBQYW5lbCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNiBKdWwgMTk5OTwvcD4KPHA+UGFyYWdyYXBoIDQgb2YgMjAuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZnVuY3Rpb24ub2JqZWN0cyI+IFtsaWIuZnVuY3Rpb24ub2JqZWN0c108L2E+IHNheXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD4mbmJzcDtbRXhhbXBsZTogVG8gbmVnYXRlIGV2ZXJ5IGVsZW1lbnQgb2YgYTogdHJhbnNmb3JtKGEuYmVnaW4oKSwgYS5lbmQoKSwKICBhLmJlZ2luKCksIG5lZ2F0ZSZsdDtkb3VibGUmZ3Q7KCkpOyBUaGUgY29ycmVzcG9uZGluZyBmdW5jdGlvbnMgd2lsbCBpbmxpbmUKICB0aGUgYWRkaXRpb24gYW5kIHRoZSBuZWdhdGlvbi4gZW5kIGV4YW1wbGVdPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPihOb3RlOiBUaGUgImFkZGl0aW9uIiByZWZlcnJlZCB0byBpbiB0aGUgYWJvdmUgaXMgaW4gcGFyYSAzKSB3ZSBjYW4KZmluZCBubyBvdGhlciB3b3JkaW5nLCBleGNlcHQgdGhpcyAobm9uLW5vcm1hdGl2ZSkgZXhhbXBsZSB3aGljaCBzdWdnZXN0cyB0aGF0CmFueSAiaW5saW5pbmciIHdpbGwgdGFrZSBwbGFjZSBpbiB0aGlzIGNhc2UuPC9wPgo8cD5JbmRlZWQgYm90aDo8L3A+CjxibG9ja3F1b3RlPgogIDxwPjE3LjQuNC4zIEdsb2JhbCBGdW5jdGlvbnMgW2xpYi5nbG9iYWwuZnVuY3Rpb25zXSAxIEl0IGlzCiAgdW5zcGVjaWZpZWQgd2hldGhlciBhbnkgZ2xvYmFsIGZ1bmN0aW9ucyBpbiB0aGUgQysrIFN0YW5kYXJkIExpYnJhcnkKICBhcmUgZGVmaW5lZCBhcyBpbmxpbmUgKDcuMS4yKS48L3A+CjwvYmxvY2txdW90ZT4KPHA+YW5kPC9wPgo8YmxvY2txdW90ZT4KICA8cD4xNy40LjQuNCBNZW1iZXIgRnVuY3Rpb25zIFtsaWIubWVtYmVyLmZ1bmN0aW9uc10gMSBJdCBpcwogIHVuc3BlY2lmaWVkIHdoZXRoZXIgYW55IG1lbWJlciBmdW5jdGlvbnMgaW4gdGhlIEMrKyBTdGFuZGFyZCBMaWJyYXJ5CiAgYXJlIGRlZmluZWQgYXMgaW5saW5lICg3LjEuMikuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRha2UgY2FyZSB0byBzdGF0ZSB0aGF0IHRoaXMgbWF5IGluZGVlZCBOT1QgYmUgdGhlIGNhc2UuPC9wPgo8cD5UaHVzIHRoZSBleGFtcGxlICJtYW5kYXRlcyIgYmVoYXZpb3IgdGhhdCBpcyBleHBsaWNpdGx5Cm5vdCByZXF1aXJlZCBlbHNld2hlcmUuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmZ1bmN0aW9uLm9iamVjdHMiPiBbbGliLmZ1bmN0aW9uLm9iamVjdHNdPC9hPiBwYXJhZ3JhcGggMSwgcmVtb3ZlIHRoZSBzZW50ZW5jZTo8L3A+CjxibG9ja3F1b3RlPgo8cD5UaGV5IGFyZSBpbXBvcnRhbnQgZm9yIHRoZSBlZmZlY3RpdmUgdXNlIG9mIHRoZSBsaWJyYXJ5LjwvcD4KPC9ibG9ja3F1b3RlPgo8cD5SZW1vdmUgMjAuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZnVuY3Rpb24ub2JqZWN0cyI+IFtsaWIuZnVuY3Rpb24ub2JqZWN0c108L2E+IHBhcmFncmFwaCAyLCB3aGljaCByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiBVc2luZyBmdW5jdGlvbiBvYmplY3RzIHRvZ2V0aGVyIHdpdGggZnVuY3Rpb24gdGVtcGxhdGVzCiAgaW5jcmVhc2VzIHRoZSBleHByZXNzaXZlIHBvd2VyIG9mIHRoZSBsaWJyYXJ5IGFzIHdlbGwgYXMgbWFraW5nIHRoZQogIHJlc3VsdGluZyBjb2RlIG11Y2ggbW9yZSBlZmZpY2llbnQuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkluIDIwLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmZ1bmN0aW9uLm9iamVjdHMiPiBbbGliLmZ1bmN0aW9uLm9iamVjdHNdPC9hPiBwYXJhZ3JhcGggNCwgcmVtb3ZlIHRoZSBzZW50ZW5jZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRoZSBjb3JyZXNwb25kaW5nIGZ1bmN0aW9ucyB3aWxsIGlubGluZSB0aGUgYWRkaXRpb24gYW5kIHRoZQogIG5lZ2F0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgYWdyZWVkIHRoZXJlIHdhcyBhIGRlZmVjdC5dPC9pPjwvcD4KPHA+PGk+W1Rva3lvOiBUaGUgTFdHIGNyYWZ0ZWQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMTg2Ij48aDM+MTg2LiZuYnNwO2JpdHNldDo6c2V0KCkgc2Vjb25kIHBhcmFtZXRlciBzaG91bGQgYmUgYm9vbDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYml0c2V0Lm1lbWJlcnMiPiBbbGliLmJpdHNldC5tZW1iZXJzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGFyaW4gQWRsZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgQXVnIDE5OTk8L3A+CjxwPkluIHNlY3Rpb24gMjMuMy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5iaXRzZXQubWVtYmVycyI+IFtsaWIuYml0c2V0Lm1lbWJlcnNdPC9hPiwgcGFyYWdyYXBoIDEzIGRlZmluZXMgdGhlCmJpdHNldDo6c2V0IG9wZXJhdGlvbiB0byB0YWtlIGEgc2Vjb25kIHBhcmFtZXRlciBvZiB0eXBlIGludC4gVGhlCmZ1bmN0aW9uIHRlc3RzIHdoZXRoZXIgdGhpcyB2YWx1ZSBpcyBub24temVybyB0byBkZXRlcm1pbmUgd2hldGhlciB0bwpzZXQgdGhlIGJpdCB0byB0cnVlIG9yIGZhbHNlLiBUaGUgdHlwZSBvZiB0aGlzIHNlY29uZCBwYXJhbWV0ZXIgc2hvdWxkCmJlIGJvb2wuIEZvciBvbmUgdGhpbmcsIHRoZSBpbnRlbnQgaXMgdG8gc3BlY2lmeSBhIEJvb2xlYW4gdmFsdWUuIEZvcgphbm90aGVyLCB0aGUgcmVzdWx0IHR5cGUgZnJvbSB0ZXN0KCkgaXMgYm9vbC4gSW4gYWRkaXRpb24sIGl0J3MKcG9zc2libGUgdG8gc2xpY2UgYW4gaW50ZWdlciB0aGF0J3MgbGFyZ2VyIHRoYW4gYW4gaW50LiBUaGlzIGNhbid0CmhhcHBlbiB3aXRoIGJvb2wsIHNpbmNlIGNvbnZlcnNpb24gdG8gYm9vbCBoYXMgdGhlIHNlbWFudGljIG9mCnRyYW5zbGF0aW5nIDAgdG8gZmFsc2UgYW5kIGFueSBub24temVybyB2YWx1ZSB0byB0cnVlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi50ZW1wbGF0ZS5iaXRzZXQiPiBbbGliLnRlbXBsYXRlLmJpdHNldF08L2E+IFBhcmEgMSBSZXBsYWNlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+Yml0c2V0Jmx0O04mZ3Q7JmFtcDsgc2V0KHNpemVfdCBwb3MsIGludCB2YWwgPSB0cnVlICk7IDwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPldpdGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBib29sIHZhbCA9IHRydWUgKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JbiAyMy4zLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5tZW1iZXJzIj4gW2xpYi5iaXRzZXQubWVtYmVyc108L2E+IFBhcmEgMTIoLjUpIFJlcGxhY2U6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBpbnQgdmFsID0gMSApOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPldpdGg6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPmJpdHNldCZsdDtOJmd0OyZhbXA7IHNldChzaXplX3QgcG9zLCBib29sIHZhbCA9IHRydWUgKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgYWdyZWVzIHdpdGggdGhlIGRlc2NyaXB0aW9uLiZuYnNwOyBBbmR5IFNhd3llciB3aWxsIHdvcmsKb24gYmV0dGVyIFAvUiB3b3JkaW5nLl08L2k+PC9wPgo8cD48aT5bUG9zdC1Ub2t5bzogQW5keSBwcm92aWRlZCB0aGUgYWJvdmUgd29yZGluZy5dPC9pPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPjx0dD5ib29sPC90dD4gaXMgYSBiZXR0ZXIgY2hvaWNlLiAgSXQgaXMgYmVsaWV2ZWQgdGhhdCBiaW5hcnkKY29tcGF0aWJpbGl0eSBpcyBub3QgYW4gaXNzdWUsIGJlY2F1c2UgdGhpcyBtZW1iZXIgZnVuY3Rpb24gaXMKdXN1YWxseSBpbXBsZW1lbnRlZCBhcyA8dHQ+aW5saW5lPC90dD4sIGFuZCBiZWNhdXNlIGl0IGlzIGFscmVhZHkKdGhlIGNhc2UgdGhhdCB1c2VycyBjYW5ub3QgcmVseSBvbiB0aGUgdHlwZSBvZiBhIHBvaW50ZXIgdG8gYQpub252aXJ0dWFsIG1lbWJlciBvZiBhIHN0YW5kYXJkIGxpYnJhcnkgY2xhc3MuPC9wPgo8aHI+CjxhIG5hbWU9IjE4NyI+PGgzPjE4Ny4mbmJzcDtpdGVyX3N3YXAgdW5kZXJzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuc3dhcCI+IFtsaWIuYWxnLnN3YXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEF1ZyAxOTk5PC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgaXRlcl9zd2FwIGluIDI1LjIuMiBwYXJhZ3JhcGggNyxzYXlzIHRoYXQgaXQKYGBleGNoYW5nZXMgdGhlIHZhbHVlcycnIG9mIHRoZSBvYmplY3RzIHRvIHdoaWNoIHR3byBpdGVyYXRvcnMKcmVmZXIuPGJyPiA8YnI+IFdoYXQgaXQgZG9lc24ndCBzYXkgaXMgd2hldGhlciBpdCBkb2VzIHNvIHVzaW5nIHN3YXAKb3IgdXNpbmcgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgYW5kIGNvcHkgY29uc3RydWN0b3IuPGJyPiA8YnI+IFRoaXMKcXVlc3Rpb24gaXMgYW4gaW1wb3J0YW50IG9uZSB0byBhbnN3ZXIsIGJlY2F1c2Ugc3dhcCBpcyBzcGVjaWFsaXplZCB0bwp3b3JrIGVmZmljaWVudGx5IGZvciBzdGFuZGFyZCBjb250YWluZXJzLjxicj4gRm9yIGV4YW1wbGU6PC9wPgo8YmxvY2txdW90ZT4KPHByZT52ZWN0b3ImbHQ7aW50Jmd0OyB2MSwgdjI7Cml0ZXJfc3dhcCgmYW1wO3YxLCAmYW1wO3YyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JcyB0aGlzIGNhbGwgdG8gaXRlcl9zd2FwIGVxdWl2YWxlbnQgdG8gY2FsbGluZyBzd2FwKHYxLCB2Mik/Jm5ic3A7Ck9yIGlzIGl0IGVxdWl2YWxlbnQgdG88L3A+CjxibG9ja3F1b3RlPgo8cHJlPnsKdmVjdG9yJmx0O2ludCZndDsgdGVtcCA9IHYxOwp2MSA9IHYyOwp2MiA9IHRlbXA7Cn08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5UaGUgZmlyc3QgYWx0ZXJuYXRpdmUgaXMgTygxKTsgdGhlIHNlY29uZCBpcyBPKG4pLjwvcD4KPHA+QSBMV0cgbWVtYmVyLCBEYXZlIEFicmFoYW1zLCBjb21tZW50czo8L3A+CjxibG9ja3F1b3RlPgo8cD5Ob3QgYW4gb2JqZWN0aW9uIG5lY2Vzc2FyaWx5LCBidXQgSSB3YW50IHRvIHBvaW50IG91dCB0aGUgY29zdCBvZgp0aGF0IHJlcXVpcmVtZW50OjwvcD4KICA8YmxvY2txdW90ZT4KPHA+PHR0Pml0ZXJfc3dhcChsaXN0Jmx0O1QmZ3Q7OjppdGVyYXRvciwgbGlzdCZsdDtUJmd0Ozo6aXRlcmF0b3IpPC90dD48L3A+CiAgPC9ibG9ja3F1b3RlPgo8cD5jYW4gY3VycmVudGx5IGJlIHNwZWNpYWxpemVkIHRvIGJlIG1vcmUgZWZmaWNpZW50IHRoYW4KaXRlcl9zd2FwKFQqLFQqKSBmb3IgbWFueSBUIChieSB1c2luZyBzcGxpY2luZykuIFlvdXIgcHJvcG9zYWwgd291bGQKbWFrZSB0aGF0IG9wdGltaXphdGlvbiBpbGxlZ2FsLiZuYnNwOzwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0tvbmE6IFRoZSBMV0cgbm90ZXMgdGhlIG9yaWdpbmFsIG5lZWQgZm9yIGl0ZXJfc3dhcCB3YXMgcHJveHkgaXRlcmF0b3JzCndoaWNoIGFyZSBubyBsb25nZXIgcGVybWl0dGVkLl08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZWZmZWN0IGNsYXVzZSBvZiBpdGVyX3N3YXAgaW4gMjUuMi4yIHBhcmFncmFwaCA3IGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+RXhjaGFuZ2VzIHRoZSB2YWx1ZXMgcG9pbnRlZCB0byBieSB0aGUgdHdvIGl0ZXJhdG9ycyBhIGFuZCBiLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CjxwPjx0dD5zd2FwKCphLCAqYik8L3R0Pi48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCdzIHVzZWZ1bCB0byBzYXkganVzdCB3aGF0IDx0dD5pdGVyX3N3YXA8L3R0PiBkb2VzLiAgVGhlcmUgbWF5IGJlCiAgc29tZSBpdGVyYXRvcnMgZm9yIHdoaWNoIHdlIHdhbnQgdG8gc3BlY2lhbGl6ZSA8dHQ+aXRlcl9zd2FwPC90dD4sCiAgYnV0IHRoZSBmdWxseSBnZW5lcmFsIHZlcnNpb24gc2hvdWxkIGhhdmUgYSBnZW5lcmFsIHNwZWNpZmljYXRpb24uPC9wPgoKPHA+Tm90ZSB0aGF0IGluIHRoZSBzcGVjaWZpYyBjYXNlIG9mIDx0dD5saXN0Jmx0O1QmZ3Q7OjppdGVyYXRvcjwvdHQ+LAppdGVyX3N3YXAgc2hvdWxkIG5vdCBiZSBzcGVjaWFsaXplZCBhcyBzdWdnZXN0ZWQgYWJvdmUuICBUaGF0IHdvdWxkIGRvCm11Y2ggbW9yZSB0aGFuIGV4Y2hhbmdpbmcgdGhlIHR3byBpdGVyYXRvcnMnIHZhbHVlczogaXQgd291bGQgY2hhbmdlCnByZWRlY2Vzc29yL3N1Y2Nlc3NvciByZWxhdGlvbnNoaXBzLCBwb3NzaWJseSBtb3ZpbmcgdGhlIGl0ZXJhdG9yIGZyb20Kb25lIGxpc3QgdG8gYW5vdGhlci4gIFRoYXQgd291bGQgc3VyZWx5IGJlIGluYXBwcm9wcmlhdGUuPC9wPgo8aHI+CjxhIG5hbWU9IjE4OSI+PGgzPjE4OS4mbmJzcDtzZXRwcmVjaXNpb24oKSBub3Qgc3BlY2lmaWVkIGNvcnJlY3RseTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mbXRmbGFncy5zdGF0ZSI+IFtsaWIuZm10ZmxhZ3Muc3RhdGVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmRyZXcgS29lbmlnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI1IEF1ZyAxOTk5PC9wPgo8cD4yNy40LjIuMiBwYXJhZ3JhcGggOSBjbGFpbXMgdGhhdCBzZXRwcmVjaXNpb24oKSBzZXRzIHRoZSBwcmVjaXNpb24sCmFuZCBpbmNsdWRlcyBhIHBhcmVudGhldGljYWwgbm90ZSBzYXlpbmcgdGhhdCBpdCBpcyB0aGUgbnVtYmVyIG9mCmRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludC48YnI+Cjxicj4KVGhpcyBjbGFpbSBpcyBub3Qgc3RyaWN0bHkgY29ycmVjdC4gIEZvciBleGFtcGxlLCBpbiB0aGUgZGVmYXVsdApmbG9hdGluZy1wb2ludCBvdXRwdXQgZm9ybWF0LCBzZXRwcmVjaXNpb24gc2V0cyB0aGUgbnVtYmVyIG9mCnNpZ25pZmljYW50IGRpZ2l0cyBwcmludGVkLCBub3QgdGhlIG51bWJlciBvZiBkaWdpdHMgYWZ0ZXIgdGhlIGRlY2ltYWwKcG9pbnQuPGJyPgo8YnI+Ckkgd291bGQgbGlrZSB0aGUgY29tbWl0dGVlIHRvIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gY2FyZWZ1bGx5IGFuZApjb3JyZWN0IHRoZSBzdGF0ZW1lbnQgaW4gMjcuNC4yLjI8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIGZyb20gMjcuNC4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZtdGZsYWdzLnN0YXRlIj4gW2xpYi5mbXRmbGFncy5zdGF0ZV08L2E+LCBwYXJhZ3JhcGggOSwgdGhlIHRleHQKIihudW1iZXIgb2YgZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50KSIuPC9wPgo8aHI+CjxhIG5hbWU9IjE5MyI+PGgzPjE5My4mbmJzcDtIZWFwIG9wZXJhdGlvbnMgZGVzY3JpcHRpb24gaW5jb3JyZWN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy42IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmhlYXAub3BlcmF0aW9ucyI+IFtsaWIuYWxnLmhlYXAub3BlcmF0aW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcmt1cyBNYXVoYXJ0Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IFNlcCAxOTk5PC9wPgo8cD4yNS4zLjYgW2xpYi5hbGcuaGVhcC5vcGVyYXRpb25zXSBzdGF0ZXMgdHdvIGtleSBwcm9wZXJ0aWVzIG9mIGEgaGVhcCBbYSxiKSwgdGhlIGZpcnN0IG9mIHRoZW0KaXM8YnI+Cjxicj4KJm5ic3A7Jm5ic3A7Jm5ic3A7IGAiKDEpICphIGlzIHRoZSBsYXJnZXN0IGVsZW1lbnQiPGJyPgo8YnI+CkkgdGhpbmsgdGhpcyBpcyBpbmNvcnJlY3QgYW5kIHNob3VsZCBiZSBjaGFuZ2VkIHRvIHRoZSB3b3JkaW5nIGluIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uLjwvcD4KPHA+QWN0dWFsbHkgdGhlcmUgYXJlIHR3byBpbmRlcGVuZGVudCBjaGFuZ2VzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+QS0icGFydCBvZiBsYXJnZXN0IGVxdWl2YWxlbmNlIGNsYXNzIiBpbnN0ZWFkIG9mICJsYXJnZXN0IiwgY2F1c2UgMjUuMwogIFtsaWIuYWxnLnNvcnRpbmddIGFzc2VydHMgInN0cmljdCB3ZWFrIG9yZGVyaW5nIiBmb3IgYWxsIGl0cyBzdWIgY2xhdXNlcy48L3A+CiAgPHA+Qi1UYWtlCidhbiBvbGRlc3QnIGZyb20gdGhhdCBlcXVpdmFsZW5jZSBjbGFzcywgb3RoZXJ3aXNlIHRoZSBoZWFwIGZ1bmN0aW9ucwpjb3VsZCBub3QgYmUgdXNlZCBmb3IgYSBwcmlvcml0eSBxdWV1ZSBhcyBleHBsYWluZWQgaW4gMjMuMi4zLjIuMgpbbGliLnByaXF1ZXVlLm1lbWJlcnNdICh3aGVyZSBJIGFzc3VtZSB0aGF0IGEgInByaW9yaXR5IHF1ZXVlIiByZXNwZWN0cwpwcmlvcml0eSBBTkQgdGltZSkuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjMuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5oZWFwLm9wZXJhdGlvbnMiPiBbbGliLmFsZy5oZWFwLm9wZXJhdGlvbnNdPC9hPiBwcm9wZXJ0eSAoMSkgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPigxKSAqYSBpcyB0aGUgbGFyZ2VzdCBlbGVtZW50PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+KDEpIFRoZXJlIGlzIG5vIGVsZW1lbnQgZ3JlYXRlciB0aGFuIDx0dD4qYTwvdHQ+PC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMTk1Ij48aDM+MTk1LiZuYnNwO1Nob3VsZCA8dHQ+YmFzaWNfaXN0cmVhbTo6c2VudHJ5PC90dD4ncyBjb25zdHJ1Y3RvciBldmVyIHNldCBlb2ZiaXQ/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaXN0cmVhbTo6c2VudHJ5Ij4gW2xpYi5pc3RyZWFtOjpzZW50cnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgT2N0IDE5OTk8L3A+CjxwPlN1cHBvc2UgdGhhdCA8dHQ+aXMuZmxhZ3MoKSAmYW1wOyBpb3NfYmFzZTo6c2tpcHdzPC90dD4gaXMgbm9uemVyby4KV2hhdCBzaG91bGQgPHR0PmJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6c2VudHJ5PC90dD4ncyBjb25zdHJ1Y3RvciBkbyBpZiBpdApyZWFjaGVzIGVvZiB3aGlsZSBza2lwcGluZyB3aGl0ZXNwYWNlPyAgMjcuNi4xLjEuMi81IHN1Z2dlc3RzIGl0CnNob3VsZCBzZXQgZmFpbGJpdC4gU2hvdWxkIGl0IHNldCBlb2ZiaXQgYXMgd2VsbD8gIFRoZSBzdGFuZGFyZApkb2Vzbid0IHNlZW0gdG8gYW5zd2VyIHRoYXQgcXVlc3Rpb24uPC9wPgoKPHA+T24gdGhlIG9uZSBoYW5kLCBub3RoaW5nIGluIDI3LjYuMS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW06OnNlbnRyeSI+IFtsaWIuaXN0cmVhbTo6c2VudHJ5XTwvYT4gc2F5cyB0aGF0Cjx0dD5iYXNpY19pc3RyZWFtJmx0OyZndDs6OnNlbnRyeTwvdHQ+IHNob3VsZCBldmVyIHNldCBlb2ZiaXQuICBPbiB0aGUKb3RoZXIgaGFuZCwgMjcuNi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0iPiBbbGliLmlzdHJlYW1dPC9hPiBwYXJhZ3JhcGggNCBzYXlzIHRoYXQgaWYKZXh0cmFjdGlvbiBmcm9tIGEgPHR0PnN0cmVhbWJ1ZjwvdHQ+ICJyZXR1cm5zCjx0dD50cmFpdHM6OmVvZigpPC90dD4sIHRoZW4gdGhlIGlucHV0IGZ1bmN0aW9uLCBleGNlcHQgYXMgZXhwbGljaXRseQpub3RlZCBvdGhlcndpc2UsIGNvbXBsZXRlcyBpdHMgYWN0aW9ucyBhbmQgZG9lcwo8dHQ+c2V0c3RhdGUoZW9mYml0KSI8L3R0Pi4gIFNvIHRoZSBxdWVzdGlvbiBjb21lcyBkb3duIHRvCndoZXRoZXIgPHR0PmJhc2ljX2lzdHJlYW0mbHQ7Jmd0Ozo6c2VudHJ5PC90dD4ncyBjb25zdHJ1Y3RvciBpcyBhbgppbnB1dCBmdW5jdGlvbi48L3A+Cgo8cD5Db21tZW50cyBmcm9tIEplcnJ5IFNjaHdhcno6PC9wPgo8YmxvY2txdW90ZT4KPHA+SXQgd2FzIGFsd2F5cyBteSBpbnRlbnRpb24gdGhhdCBlb2ZiaXQgc2hvdWxkIGJlIHNldCBhbnkgdGltZSB0aGF0IGEKdmlydHVhbCByZXR1cm5lZCBzb21ldGhpbmcgdG8gaW5kaWNhdGUgZW9mLCBubyBtYXR0ZXIgd2hhdCByZWFzb24KaW9zdHJlYW0gY29kZSBoYWQgZm9yIGNhbGxpbmcgdGhlIHZpcnR1YWwuPC9wPgo8cD4KVGhlIG1vdGl2YXRpb24gZm9yIHRoaXMgaXMgdGhhdCBJIGRpZCBub3Qgd2FudCB0byByZXF1aXJlIHN0cmVhbWJ1ZnMKdG8gYmVoYXZlIGNvbnNpc3RlbnRseSBpZiB0aGVpciB2aXJ0dWFscyBhcmUgY2FsbGVkIGFmdGVyIHRoZXkgaGF2ZQpzaWduYWxlZCBlb2YuPC9wPgo8cD4KVGhlIGNsYXNzaWMgY2FzZSBpcyBhIHN0cmVhbWJ1ZiByZWFkaW5nIGZyb20gYSBVTklYIGZpbGUuICBFT0YgaXNuJ3QKcmVhbGx5IGEgc3RhdGUgZm9yIFVOSVggZmlsZSBkZXNjcmlwdG9ycy4gIFRoZSBjb252ZW50aW9uIGlzIHRoYXQgYQpyZWFkIG9uIFVOSVggcmV0dXJucyAwIGJ5dGVzIHRvIGluZGljYXRlICJFT0YiLCBidXQgdGhlIGZpbGUKZGVzY3JpcHRvciBpc24ndCBzaHV0IGRvd24gaW4gYW55IHdheSBhbmQgZnV0dXJlIHJlYWRzIGRvIG5vdApuZWNlc3NhcmlseSBhbHNvIHJldHVybiAwIGJ5dGVzLiAgSW4gcGFydGljdWxhciwgeW91IGNhbiByZWFkIGZyb20KdHR5J3Mgb24gVU5JWCBldmVuIGFmdGVyIHRoZXkgaGF2ZSBzaWduYWxlZCAiRU9GIi4gIChJdAppc24ndCBhbHdheXMgdW5kZXJzdG9vZCB0aGF0IGEgXkQgb24gVU5JWCBpcyBub3QgYW4gRU9GIGluZGljYXRvciwgYnV0CmFuIEVPTCBpbmRpY2F0b3IuICBCeSB0eXBpbmcgYSAibGluZSIgY29uc2lzdGluZyBzb2xlbHkgb2YKXkQgeW91IGNhdXNlIGEgcmVhZCB0byByZXR1cm4gMCBieXRlcywgYW5kIGJ5IGNvbnZlbnRpb24gdGhpcyBpcwppbnRlcnByZXRlZCBhcyBlbmQgb2YgZmlsZS4pPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIGEgc2VudGVuY2UgdG8gdGhlIGVuZCBvZiAyNy42LjEuMS4yIHBhcmFncmFwaCAyOjwvcD4KPGJsb2NrcXVvdGU+CjxwPklmIDx0dD5pcy5yZGJ1ZigpLSZndDtzYnVtcGMoKTwvdHQ+IG9yIDx0dD5pcy5yZGJ1ZigpLSZndDtzZ2V0YygpPC90dD4KcmV0dXJucyA8dHQ+dHJhaXRzOjplb2YoKTwvdHQ+LCB0aGUgZnVuY3Rpb24gY2FsbHMKPHR0PnNldHN0YXRlKGZhaWxiaXQgfCBlb2ZiaXQpPC90dD4gKHdoaWNoIG1heSB0aHJvdwo8dHQ+aW9zX2Jhc2U6OmZhaWx1cmU8L3R0PikuCjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjE5OCI+PGgzPjE5OC4mbmJzcDtWYWxpZGl0eSBvZiBwb2ludGVycyBhbmQgcmVmZXJlbmNlcyB1bnNwZWNpZmllZCBhZnRlciBpdGVyYXRvciBkZXN0cnVjdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MyBOb3YgMTk5OTwvcD4KPHA+CklzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBhbiBpdGVyYXRvciBzdGlsbCB2YWxpZCBhZnRlcgpkZXN0cnVjdGlvbiBvZiB0aGUgaXRlcmF0b3I/CjwvcD4KPHA+CklzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBhbiBpdGVyYXRvciBzdGlsbCB2YWxpZCBhZnRlciB0aGUgdmFsdWUKb2YgdGhlIGl0ZXJhdG9yIGNoYW5nZXM/CjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+I2luY2x1ZGUgJmx0O2lvc3RyZWFtJmd0OwojaW5jbHVkZSAmbHQ7dmVjdG9yJmd0OwojaW5jbHVkZSAmbHQ7aXRlcmF0b3ImZ3Q7CgppbnQgbWFpbigpCnsKICAgIHR5cGVkZWYgc3RkOjp2ZWN0b3ImbHQ7aW50Jmd0OyB2ZWNfdDsKICAgIHZlY190IHY7CiAgICB2LnB1c2hfYmFjayggMSApOwoKICAgIC8vIElzIGEgcG9pbnRlciBvciByZWZlcmVuY2Ugb2J0YWluZWQgZnJvbSBhbiBpdGVyYXRvciBzdGlsbAogICAgLy8gdmFsaWQgYWZ0ZXIgZGVzdHJ1Y3Rpb24gb2YgdGhlIGl0ZXJhdG9yPwogICAgaW50ICogcCA9ICZhbXA7KnYuYmVnaW4oKTsKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyAqcCAmbHQ7Jmx0OyAnXG4nOyAgLy8gT0s/CgogICAgLy8gSXMgYSBwb2ludGVyIG9yIHJlZmVyZW5jZSBvYnRhaW5lZCBmcm9tIGFuIGl0ZXJhdG9yIHN0aWxsCiAgICAvLyB2YWxpZCBhZnRlciB0aGUgdmFsdWUgb2YgdGhlIGl0ZXJhdG9yIGNoYW5nZXM/CiAgICB2ZWNfdDo6aXRlcmF0b3IgaXRlciggdi5iZWdpbigpICk7CiAgICBwID0gJmFtcDsqaXRlcisrOwogICAgc3RkOjpjb3V0ICZsdDsmbHQ7ICpwICZsdDsmbHQ7ICdcbic7ICAvLyBPSz8KCiAgICByZXR1cm4gMDsKfQo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+VGhlIHN0YW5kYXJkIGRvZXNuJ3QgYXBwZWFyIHRvIGRpcmVjdGx5IGFkZHJlc3MgdGhlc2UKcXVlc3Rpb25zLiBUaGUgc3RhbmRhcmQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLiBBdCBsZWFzdCB0d28gcmVhbC13b3JsZApjYXNlcyBoYXZlIGJlZW4gcmVwb3J0ZWQgd2hlcmUgbGlicmFyeSBpbXBsZW1lbnRvcnMgd2FzdGVkCmNvbnNpZGVyYWJsZSBlZmZvcnQgYmVjYXVzZSBvZiB0aGUgbGFjayBvZiBjbGFyaXR5IGluIHRoZQpzdGFuZGFyZC4gVGhlIHF1ZXN0aW9uIGlzIGltcG9ydGFudCBiZWNhdXNlIHJlcXVpcmluZyBwb2ludGVycyBhbmQKcmVmZXJlbmNlcyB0byByZW1haW4gdmFsaWQgaGFzIHRoZSBlZmZlY3QgZm9yIHByYWN0aWNhbCBwdXJwb3NlcyBvZgpwcm9oaWJpdGluZyBpdGVyYXRvcnMgZnJvbSBwb2ludGluZyB0byBjYWNoZWQgcmF0aGVyIHRoYW4gYWN0dWFsCmVsZW1lbnRzIG9mIGNvbnRhaW5lcnMuPC9wPgoKPHA+VGhlIHN0YW5kYXJkIGl0c2VsZiBhc3N1bWVzIHRoYXQgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgb2J0YWluZWQKZnJvbSBhbiBpdGVyYXRvciBhcmUgc3RpbGwgdmFsaWQgYWZ0ZXIgaXRlcmF0b3IgZGVzdHJ1Y3Rpb24gb3IKY2hhbmdlLiBUaGUgZGVmaW5pdGlvbiBvZiByZXZlcnNlX2l0ZXJhdG9yOjpvcGVyYXRvciooKSwgMjQuNC4xLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmV2ZXJzZS5pdGVyLm9wLnN0YXIiPiBbbGliLnJldmVyc2UuaXRlci5vcC5zdGFyXTwvYT4sIHdoaWNoIHJldHVybnMgYSByZWZlcmVuY2UsIGRlZmluZXMKZWZmZWN0czo8L3A+Cgo8YmxvY2txdW90ZT4KICA8cHJlPkl0ZXJhdG9yIHRtcCA9IGN1cnJlbnQ7CnJldHVybiAqLS10bXA7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+VGhlIGRlZmluaXRpb24gb2YgcmV2ZXJzZV9pdGVyYXRvcjo6b3BlcmF0b3ItJmd0OygpLCAyNC40LjEuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5yZXZlcnNlLml0ZXIub3ByZWYiPiBbbGliLnJldmVyc2UuaXRlci5vcHJlZl08L2E+LCB3aGljaCByZXR1cm5zIGEgcG9pbnRlciwgZGVmaW5lcyBlZmZlY3RzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5yZXR1cm4gJmFtcDsob3BlcmF0b3IqKCkpOzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5CZWNhdXNlIHRoZSBzdGFuZGFyZCBpdHNlbGYgYXNzdW1lcyBwb2ludGVycyBhbmQgcmVmZXJlbmNlcyByZW1haW4KdmFsaWQgYWZ0ZXIgaXRlcmF0b3IgZGVzdHJ1Y3Rpb24gb3IgY2hhbmdlLCB0aGUgc3RhbmRhcmQgc2hvdWxkIHNheSBzbwpleHBsaWNpdGx5LiBUaGlzIHdpbGwgYWxzbyByZWR1Y2UgdGhlIGNoYW5jZSBvZiB1c2VyIGNvZGUgYnJlYWtpbmcKdW5leHBlY3RlZGx5IHdoZW4gcG9ydGluZyB0byBhIGRpZmZlcmVudCBzdGFuZGFyZCBsaWJyYXJ5CmltcGxlbWVudGF0aW9uLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgYSBuZXcgcGFyYWdyYXBoIHRvIDI0LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzXTwvYT46PC9wPgo8YmxvY2txdW90ZT4KRGVzdHJ1Y3Rpb24gb2YgYW4gaXRlcmF0b3IgbWF5IGludmFsaWRhdGUgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMKcHJldmlvdXNseSBvYnRhaW5lZCBmcm9tIHRoYXQgaXRlcmF0b3IuCjwvYmxvY2txdW90ZT4KCjxwPlJlcGxhY2UgcGFyYWdyYXBoIDEgb2YgMjQuNC4xLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmV2ZXJzZS5pdGVyLm9wLnN0YXIiPiBbbGliLnJldmVyc2UuaXRlci5vcC5zdGFyXTwvYT4gd2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+PGI+RWZmZWN0czo8L2I+PC9wPgo8cHJlPiAgdGhpcy0mZ3Q7dG1wID0gY3VycmVudDsKICAtLXRoaXMtJmd0O3RtcDsKICByZXR1cm4gKnRoaXMtJmd0O3RtcDsKPC9wcmU+Cgo8cD4KWzxpPk5vdGU6PC9pPiBUaGlzIG9wZXJhdGlvbiBtdXN0IHVzZSBhbiBhdXhpbGlhcnkgbWVtYmVyIHZhcmlhYmxlLApyYXRoZXIgdGhhbiBhIHRlbXBvcmFyeSB2YXJpYWJsZSwgdG8gYXZvaWQgcmV0dXJuaW5nIGEgcmVmZXJlbmNlIHRoYXQKcGVyc2lzdHMgYmV5b25kIHRoZSBsaWZldGltZSBvZiBpdHMgYXNzb2NpYXRlZCBpdGVyYXRvci4gIChTZWUKMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPi4pICBUaGUgbmFtZSBvZiB0aGlzIG1lbWJlciB2YXJpYWJsZSBpcyBzaG93biBmb3IKZXhwb3NpdGlvbiBvbmx5LiAgPGk+LS1lbmQgbm90ZTwvaT5dCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtVG9reW86IFRoZSBpc3N1ZSBoYXMgYmVlbiByZWZvcm11bGF0ZWQgcHVyZWx5CmluIHRlcm1zIG9mIGl0ZXJhdG9ycy5dPC9pPjwvcD4KCjxwPjxpPltQcmUtVG9yb250bzogU3RldmUgQ2xlYXJ5IHBvaW50ZWQgb3V0IHRoZSBuby1pbnZhbGlkYXRpb24KYXNzdW1wdGlvbiBieSByZXZlcnNlX2l0ZXJhdG9yLiBUaGUgaXNzdWUgYW5kIHByb3Bvc2VkIHJlc29sdXRpb24gd2FzCnJlZm9ybXVsYXRlZCB5ZXQgYWdhaW4gdG8gcmVmbGVjdCB0aGlzIHJlYWxpdHkuXTwvaT48L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogU3RldmUgQ2xlYXJ5IHBvaW50ZWQgb3V0IHRoYXQgcmV2ZXJzZV9pdGVyYXRvcgphc3N1bWVzIGl0cyB1bmRlcmx5aW5nIGl0ZXJhdG9yIGhhcyBwZXJzaXN0ZW50IHBvaW50ZXJzIGFuZApyZWZlcmVuY2VzLiAgQW5keSBLb2VuaWcgcG9pbnRlZCBvdXQgdGhhdCBpdCBpcyBwb3NzaWJsZSB0byByZXdyaXRlCnJldmVyc2VfaXRlcmF0b3Igc28gdGhhdCBpdCBubyBsb25nZXIgbWFrZXMgc3VjaCBhbiBhc3N1cG1wdGlvbi4KSG93ZXZlciwgdGhpcyBpc3N1ZSBpcyByZWxhdGVkIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzI5OSI+Mjk5PC9hPi4gIElmIHdlCmRlY2lkZSBpdCBpcyBpbnRlbnRpb25hbCB0aGF0IDx0dD5wW25dPC90dD4gbWF5IHJldHVybiBieSB2YWx1ZQppbnN0ZWFkIG9mIHJlZmVyZW5jZSB3aGVuIDx0dD5wPC90dD4gaXMgYSBSYW5kb20gQWNjZXNzIEl0ZXJhdG9yLApvdGhlciBjaGFuZ2VzIGluIHJldmVyc2VfaXRlcmF0b3Igd2lsbCBiZSBuZWNlc3NhcnkuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIGlzc3VlIGhhcyBiZWVuIGRpc2N1c3NlZCBleHRlbnNpdmVseS4gIE5vdGUgdGhhdCBpdCBpcwo8aT5ub3Q8L2k+IGFuIGlzc3VlIGFib3V0IHRoZSBiZWhhdmlvciBvZiBwcmVkZWZpbmVkIGl0ZXJhdG9ycy4gIEl0IGlzCmFza2luZyB3aGV0aGVyIG9yIG5vdCB1c2VyLWRlZmluZWQgaXRlcmF0b3JzIGFyZSBwZXJtaXR0ZWQgdG8gaGF2ZQp0cmFuc2llbnQgcG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMuICBTZXZlcmFsIHBlb3BsZSBwcmVzZW50ZWQgZXhhbXBsZXMKb2YgdXNlZnVsIHVzZXItZGVmaW5lZCBpdGVyYXRvcnMgdGhhdCBoYXZlIHN1Y2ggYSBwcm9wZXJ0eTsgZXhhbXBsZXMKaW5jbHVkZSBhIEItdHJlZSBpdGVyYXRvciwgYW5kIGFuICJpb3RhIGl0ZXJhdG9yIiB0aGF0IGRvZXNuJ3QgcG9pbnQKdG8gbWVtb3J5LiAgTGlicmFyeSBpbXBsZW1lbnRvcnMgYWxyZWFkeSBzZWVtIHRvIGJlIGFibGUgdG8gY29wZSB3aXRoCnN1Y2ggaXRlcmF0b3JzOiB0aGV5IHRha2UgcGFpbnMgdG8gYXZvaWQgZm9ybWluZyByZWZlcmVuY2VzIHRvIG1lbW9yeQp0aGF0IGdldHMgaXRlcmF0ZWQgcGFzdC4gIFRoZSBvbmx5IHBsYWNlIHdoZXJlIHRoaXMgaXMgYSBwcm9ibGVtIGlzCjx0dD5yZXZlcnNlX2l0ZXJhdG9yPC90dD4sIHNvIHRoaXMgaXNzdWUgY2hhbmdlcwo8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+IHRvIG1ha2UgaXQgd29yay48L3A+Cgo8cD5UaGlzIHJlc29sdXRpb24gZG9lcyBub3Qgd2Vha2VuIGFueSBndWFyYW50ZWVzIHByb3ZpZGVkIGJ5CnByZWRlZmluZWQgaXRlcmF0b3JzIGxpa2UgPHR0Pmxpc3QmbHQ7aW50Jmd0Ozo6aXRlcmF0b3I8L3R0Pi4KQ2xhdXNlIDIzIHNob3VsZCBiZSByZXZpZXdlZCB0byBtYWtlIHN1cmUgdGhhdCBndWFyYW50ZWVzIGZvcgpwcmVkZWZpbmVkIGl0ZXJhdG9ycyBhcmUgYXMgc3Ryb25nIGFzIHVzZXJzIGV4cGVjdC48L3A+Cgo8aHI+CjxhIG5hbWU9IjE5OSI+PGgzPjE5OS4mbmJzcDtXaGF0IGRvZXMgPHR0PmFsbG9jYXRlKDApPC90dD4gcmV0dXJuPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOSBOb3YgMTk5OTwvcD4KPHA+ClN1cHBvc2UgdGhhdCA8dHQ+QTwvdHQ+IGlzIGEgY2xhc3MgdGhhdCBjb25mb3JtcyB0byB0aGUKQWxsb2NhdG9yIHJlcXVpcmVtZW50cyBvZiBUYWJsZSAzMiwgYW5kIDx0dD5hPC90dD4gaXMgYW4Kb2JqZWN0IG9mIGNsYXNzIDx0dD5BPC90dD4gIFdoYXQgc2hvdWxkIGJlIHRoZSByZXR1cm4KdmFsdWUgb2YgPHR0PmEuYWxsb2NhdGUoMCk8L3R0Pj8gIFRocmVlIHJlYXNvbmFibGUKcG9zc2liaWxpdGllczogZm9yYmlkIHRoZSBhcmd1bWVudCA8dHQ+MDwvdHQ+LCByZXR1cm4KYSBudWxsIHBvaW50ZXIsIG9yIHJlcXVpcmUgdGhhdCB0aGUgcmV0dXJuIHZhbHVlIGJlIGEKdW5pcXVlIG5vbi1udWxsIHBvaW50ZXIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbm90ZSB0byB0aGUgPHR0PmFsbG9jYXRlPC90dD4gcm93IG9mIFRhYmxlIDMyOgoiWzxpPk5vdGU6PC9pPiBJZiA8dHQ+biA9PSAwPC90dD4sIHRoZSByZXR1cm4gdmFsdWUgaXMgdW5zcGVjaWZpZWQuIDxpPi0tZW5kIG5vdGU8L2k+XSI8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5BIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoaXMgaXNzdWUgaXMgdGhhdCB0aGUgdWx0aW1hdGUgdXNlIG9mCmFsbG9jYXRlKCkgaXMgdG8gY29uc3RydWN0IGFuIGl0ZXJhdG9yLCBhbmQgdGhhdCBpdGVyYXRvciBmb3IgemVybwpsZW5ndGggc2VxdWVuY2VzIG11c3QgYmUgdGhlIGNvbnRhaW5lcidzIHBhc3QtdGhlLWVuZApyZXByZXNlbnRhdGlvbi4gIFNpbmNlIHRoaXMgYWxyZWFkeSBpbXBsaWVzIHNwZWNpYWwgY2FzZSBjb2RlLCBpdAp3b3VsZCBiZSBvdmVyLXNwZWNpZmljYXRpb24gdG8gbWFuZGF0ZSB0aGUgcmV0dXJuIHZhbHVlLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjAwIj48aDM+MjAwLiZuYnNwO0ZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzIGRvbid0IGFsbG93IGNvbnN0YW50IGl0ZXJhdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuZm9yd2FyZC5pdGVyYXRvcnMiPiBbbGliLmZvcndhcmQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE5IE5vdiAxOTk5PC9wPgo8cD4KSW4gdGFibGUgNzQsIHRoZSByZXR1cm4gdHlwZSBvZiB0aGUgZXhwcmVzc2lvbiA8dHQ+KmE8L3R0PiBpcyBnaXZlbgphcyA8dHQ+VCZhbXA7PC90dD4sIHdoZXJlIDx0dD5UPC90dD4gaXMgdGhlIGl0ZXJhdG9yJ3MgdmFsdWUgdHlwZS4KRm9yIGNvbnN0YW50IGl0ZXJhdG9ycywgaG93ZXZlciwgdGhpcyBpcyB3cm9uZy4gICgiVmFsdWUgdHlwZSIKaXMgbmV2ZXIgZGVmaW5lZCB2ZXJ5IHByZWNpc2VseSwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgdGhlIHZhbHVlIHR5cGUKb2YsIHNheSwgPHR0PnN0ZDo6bGlzdCZsdDtpbnQmZ3Q7Ojpjb25zdF9pdGVyYXRvcjwvdHQ+IGlzIHN1cHBvc2VkIHRvIGJlCjx0dD5pbnQ8L3R0Piwgbm90IDx0dD5jb25zdCBpbnQ8L3R0Pi4pCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gdGFibGUgNzQsIGluIHRoZSA8dHQ+KmE8L3R0PiBhbmQgPHR0PipyKys8L3R0PiByb3dzLCBjaGFuZ2UgdGhlCnJldHVybiB0eXBlIGZyb20gIjx0dD5UJmFtcDs8L3R0PiIgdG8gIjx0dD5UJmFtcDs8L3R0PgppZiA8dHQ+WDwvdHQ+IGlzIG11dGFibGUsIG90aGVyd2lzZSA8dHQ+Y29uc3QgVCZhbXA7PC90dD4iLgpJbiB0aGUgPHR0PmEtJmd0O208L3R0PiByb3csIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgZnJvbQoiPHR0PlUmYW1wOzwvdHQ+IiB0byAiPHR0PlUmYW1wOzwvdHQ+IGlmIDx0dD5YPC90dD4gaXMgbXV0YWJsZSwKb3RoZXJ3aXNlIDx0dD5jb25zdCBVJmFtcDs8L3R0PiIuCjwvcD4KCjxwPjxpPltUb2t5bzogVGhlIExXRyBiZWxpZXZlcyB0aGlzIGlzIHRoZSB0aXAgb2YgYSBsYXJnZXIgaWNlYmVyZzsKdGhlcmUgYXJlIG11bHRpcGxlIGNvbnN0IHByb2JsZW1zIHdpdGggdGhlIFNUTCBwb3J0aW9uIG9mIHRoZSBsaWJyYXJ5CmFuZCB0aGF0IHRoZXNlIHNob3VsZCBiZSBhZGRyZXNzZWQgYXMgYSBzaW5nbGUgcGFja2FnZS4mbmJzcDsgTm90ZQp0aGF0IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzE4MCI+MTgwPC9hPiBoYXMgYWxyZWFkeSBiZWVuIGRlY2xhcmVkIE5BRCBGdXR1cmUgZm9yCnRoYXQgdmVyeSByZWFzb24uXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogdGhlIExXRyB0aGlua3MgdGhpcyBpcyBzZXBhcmFibGUgZnJvbSBvdGhlciBjb25zdG5lc3MKaXNzdWVzLiAgVGhpcyBpc3N1ZSBpcyBqdXN0IGNsZWFudXA7IGl0IGNsYXJpZmllcyBsYW5ndWFnZSB0aGF0IHdhcwp3cml0dGVuIGJlZm9yZSB3ZSBoYWQgaXRlcmF0b3JfdHJhaXRzLiAgUHJvcG9zZWQgcmVzb2x1dGlvbiB3YXMKbW9kaWZpZWQ6IHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9ubHkgZGlzY3Vzc2VkICphLiAgSXQgd2FzIHBvaW50ZWQgb3V0CnRoYXQgd2UgYWxzbyBuZWVkIHRvIHdvcnJ5IGFib3V0ICpyKysgYW5kIGEtJmd0O20uXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjIwMiI+PGgzPjIwMi4mbmJzcDt1bmlxdWUoKSBlZmZlY3RzIHVuY2xlYXIgd2hlbiBwcmVkaWNhdGUgbm90IGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHJldyBLb2VuaWcmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgSmFuIDIwMDA8L3A+CjxwPgpXaGF0IHNob3VsZCB1bmlxdWUoKSBkbyBpZiB5b3UgZ2l2ZSBpdCBhIHByZWRpY2F0ZSB0aGF0IGlzIG5vdCBhbgplcXVpdmFsZW5jZSByZWxhdGlvbj8gIFRoZXJlIGFyZSBhdCBsZWFzdCB0d28gcGxhdXNpYmxlIGFuc3dlcnM6CjwvcD4KCjxibG9ja3F1b3RlPgoKPHA+CiAgIDEuIFlvdSBjYW4ndCwgYmVjYXVzZSAyNS4yLjggc2F5cyB0aGF0IGl0IGl0ICJlbGltaW5hdGVzIGFsbCBidXQKICAgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZSBncm91cCBvZiBlcXVhbAogICBlbGVtZW50cy4uLiIgYW5kIGl0IHdvdWxkbid0IG1ha2Ugc2Vuc2UgdG8gaW50ZXJwcmV0ICJlcXVhbCIgYXMKICAgbWVhbmluZyBhbnl0aGluZyBidXQgYW4gZXF1aXZhbGVuY2UgcmVsYXRpb24uICBbSXQgYWxzbyBkb2Vzbid0CiAgIG1ha2Ugc2Vuc2UgdG8gaW50ZXJwcmV0ICJlcXVhbCIgYXMgbWVhbmluZyA9PSwgYmVjYXVzZSB0aGVuIHRoZXJlCiAgIHdvdWxkIG5ldmVyIGJlIGFueSBzZW5zZSBpbiBnaXZpbmcgYSBwcmVkaWNhdGUgYXMgYW4gYXJndW1lbnQgYXQKICAgYWxsLl0KPC9wPgoKPHA+CiAgIDIuIFRoZSB3b3JkICJlcXVhbCIgc2hvdWxkIGJlIGludGVycHJldGVkIHRvIG1lYW4gd2hhdGV2ZXIgdGhlCiAgIHByZWRpY2F0ZSBzYXlzLCBldmVuIGlmIGl0IGlzIG5vdCBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbgogICAoYW5kIGluIHBhcnRpY3VsYXIsIGV2ZW4gaWYgaXQgaXMgbm90IHRyYW5zaXRpdmUpLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhlIGV4YW1wbGUgdGhhdCByYWlzZWQgdGhpcyBxdWVzdGlvbiBpcyBmcm9tIFVzZW5ldDoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPmludCBmW10gPSB7IDEsIDMsIDcsIDEsIDIgfTsKaW50KiB6ID0gdW5pcXVlKGYsIGYrNSwgZ3JlYXRlciZsdDtpbnQmZ3Q7KCkpOzwvcHJlPgoKPC9ibG9ja3F1b3RlPgoKPHA+CklmIG9uZSBibGluZGx5IGFwcGxpZXMgdGhlIGRlZmluaXRpb24gdXNpbmcgdGhlIHByZWRpY2F0ZQpncmVhdGVyJmx0O2ludCZndDssIGFuZCBpZ25vcmUgdGhlIHdvcmQgImVxdWFsIiwgeW91IGdldDoKPC9wPgoKPGJsb2NrcXVvdGU+Cgo8cD4KICAgIEVsaW1pbmF0ZXMgYWxsIGJ1dCB0aGUgZmlyc3QgZWxlbWVudCBmcm9tIGV2ZXJ5IGNvbnNlY3V0aXZlIGdyb3VwICAgIAogICAgb2YgZWxlbWVudHMgcmVmZXJyZWQgdG8gYnkgdGhlIGl0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkgICAgCiAgICBmb3Igd2hpY2ggKmkgJmd0OyAqKGkgLSAxKS4KPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBmaXJzdCBzdXJwcmlzZSBpcyB0aGUgb3JkZXIgb2YgdGhlIGNvbXBhcmlzb24uICBJZiB3ZSB3YW50ZWQgdG8KYWxsb3cgZm9yIHRoZSBwcmVkaWNhdGUgbm90IGJlaW5nIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLCB0aGVuIHdlCnNob3VsZCBzdXJlbHkgY29tcGFyZSBlbGVtZW50cyB0aGUgb3RoZXIgd2F5OiBwcmVkKCooaSAtIDEpLCAqaSkuICBJZgp3ZSBkbyB0aGF0LCB0aGVuIHRoZSBkZXNjcmlwdGlvbiB3b3VsZCBzZWVtIHRvIHNheTogIkJyZWFrIHRoZQpzZXF1ZW5jZSBpbnRvIHN1YnNlcXVlbmNlcyB3aG9zZSBlbGVtZW50cyBhcmUgaW4gc3RyaWN0bHkgaW5jcmVhc2luZwpvcmRlciwgYW5kIGtlZXAgb25seSB0aGUgZmlyc3QgZWxlbWVudCBvZiBlYWNoIHN1YnNlcXVlbmNlIi4gIFNvIHRoZQpyZXN1bHQgd291bGQgYmUgMSwgMSwgMi4gIElmIHdlIHRha2UgdGhlIGRlc2NyaXB0aW9uIGF0IGl0cyB3b3JkLCBpdAp3b3VsZCBzZWVtIHRvIGNhbGwgZm9yIHN0cmljdGx5IERFY3JlYXNpbmcgb3JkZXIsIGluIHdoaWNoIGNhc2UgdGhlCnJlc3VsdCBzaG91bGQgYmUgMSwgMywgNywgMi48YnI+Cjxicj4KSW4gZmFjdCwgdGhlIFNHSSBpbXBsZW1lbnRhdGlvbiBvZiB1bmlxdWUoKSBkb2VzIG5laXRoZXI6IEl0IHlpZWxkcyAxLAozLCA3Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiBwYXJhZ3JhcGggMSB0bzo8L3A+CjxibG9ja3F1b3RlPgpGb3IgYSBub25lbXB0eSByYW5nZSwgZWxpbWluYXRlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkKY29uc2VjdXRpdmUgZ3JvdXAgb2YgZXF1aXZhbGVudCBlbGVtZW50cyByZWZlcnJlZCB0byBieSB0aGUgaXRlcmF0b3IKPHR0Pmk8L3R0PiBpbiB0aGUgcmFuZ2UgW2ZpcnN0KzEsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nCmNvbmRpdGlvbnMgaG9sZDogPHR0PiooaS0xKSA9PSAqaTwvdHQ+IG9yIDx0dD5wcmVkKCooaS0xKSwgKmkpICE9CmZhbHNlPC90dD4uCjwvYmxvY2txdW90ZT4KCjxwPgpBbHNvIGluc2VydCBhIG5ldyBwYXJhZ3JhcGgsIHBhcmFncmFwaCAyYSwgdGhhdCByZWFkczogIlJlcXVpcmVzOiBUaGUKY29tcGFyaXNvbiBmdW5jdGlvbiBtdXN0IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKPHA+PGk+W1JlZG1vbmQ6IGRpc2N1c3NlZCBhcmd1bWVudHMgZm9yIGFuZCBhZ2FpbnN0IHJlcXVpcmluZyB0aGUKY29tcGFyaXNvbiBmdW5jdGlvbiB0byBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFN0cmF3IHBvbGw6CjE0LTItNS4gIEZpcnN0IG51bWJlciBpcyB0byByZXF1aXJlIHRoYXQgaXQgYmUgYW4gZXF1aXZhbGVuY2UKcmVsYXRpb24sIHNlY29uZCBudW1iZXIgaXMgdG8gZXhwbGljaXRseSBub3QgcmVxdWlyZSB0aGF0IGl0IGJlIGFuCmVxdWl2YWxlbmNlIHJlbGF0aW9uLCB0aGlyZCBudW1iZXIgaXMgcGVvcGxlIHdobyBiZWxpZXZlIHRoZXkgbmVlZAptb3JlIHRpbWUgdG8gY29uc2lkZXIgdGhlIGlzc3VlLiAgQSBzZXBhcmF0ZSBpc3N1ZTogQW5keSBTYXd5ZXIKcG9pbnRlZCBvdXQgdGhhdCAiaS0xIiBpcyBpbmNvcnJlY3QsIHNpbmNlICJpIiBjYW4gcmVmZXIgdG8gdGhlIGZpcnN0Cml0ZXJhdG9yIGluIHRoZSByYW5nZS4gIE1hdHQgcHJvdmlkZWQgd29yZGluZyB0byBhZGRyZXNzIHRoaXMKcHJvYmxlbS5dPC9pPjwvcD4KCjxwPjxpPltDdXJh52FvOiBUaGUgTFdHIGNoYW5nZWQgIi4uLiB0aGUgcmFuZ2UgKGZpcnN0LApsYXN0KS4uLiIgdG8gIi4uLiAgdGhlIHJhbmdlIFtmaXJzdCsxLCBsYXN0KS4uLiIgZm9yCmNsYXJpdHkuIFRoZXkgY29uc2lkZXJlZCB0aGlzIGNoYW5nZSBjbG9zZSBlbm91Z2ggdG8gZWRpdG9yaWFsIHRvIG5vdApyZXF1aXJlIGFub3RoZXIgcm91bmQgb2YgcmV2aWV3Ll08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYWxzbyBjb25zaWRlcmVkIGFuIGFsdGVybmF0aXZlIHJlc29sdXRpb246IGNoYW5nZSAKMjUuMi44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLnVuaXF1ZSI+IFtsaWIuYWxnLnVuaXF1ZV08L2E+IHBhcmFncmFwaCAxIHRvOjwvcD4KCjxibG9ja3F1b3RlPgpGb3IgYSBub25lbXB0eSByYW5nZSwgZWxpbWluYXRlcyBhbGwgYnV0IHRoZSBmaXJzdCBlbGVtZW50IGZyb20gZXZlcnkKY29uc2VjdXRpdmUgZ3JvdXAgb2YgZWxlbWVudHMgcmVmZXJyZWQgdG8gYnkgdGhlIGl0ZXJhdG9yCjx0dD5pPC90dD4gaW4gdGhlIHJhbmdlIChmaXJzdCwgbGFzdCkgZm9yIHdoaWNoIHRoZSBmb2xsb3dpbmcKY29uZGl0aW9ucyBob2xkOiA8dHQ+KihpLTEpID09ICppPC90dD4gb3IgPHR0PnByZWQoKihpLTEpLCAqaSkgIT0KZmFsc2U8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+CkFsc28gaW5zZXJ0IGEgbmV3IHBhcmFncmFwaCwgcGFyYWdyYXBoIDFhLCB0aGF0IHJlYWRzOiAiTm90ZXM6IFRoZQpjb21wYXJpc29uIGZ1bmN0aW9uIG5lZWQgbm90IGJlIGFuIGVxdWl2YWxlbmNlIHJlbGF0aW9uLiIKPC9wPgoKCjxwPkluZm9ybWFsbHk6IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGltcG9zZXMgYW4gZXhwbGljaXQgcmVxdWlyZW1lbnQKdGhhdCB0aGUgY29tcGFyaXNvbiBmdW5jdGlvbiBiZSBhbiBlcXVpdmFsZW5jZSByZWxhdGlvbi4gIFRoZQphbHRlcm5hdGl2ZSByZXNvbHV0aW9uIGRvZXMgbm90LCBhbmQgaXQgZ2l2ZXMgZW5vdWdoIGluZm9ybWF0aW9uIHNvCnRoYXQgdGhlIGJlaGF2aW9yIG9mIHVuaXF1ZSgpIGZvciBhIG5vbi1lcXVpdmFsZW5jZSByZWxhdGlvbiBpcwpzcGVjaWZpZWQuICBCb3RoIHJlc29sdXRpb25zIGFyZSBjb25zaXN0ZW50IHdpdGggdGhlIGJlaGF2aW9yIG9mCmV4aXN0aW5nIGltcGxlbWVudGF0aW9ucy48L3A+Cjxocj4KPGEgbmFtZT0iMjA4Ij48aDM+MjA4LiZuYnNwO1VubmVjZXNzYXJ5IHJlc3RyaWN0aW9uIG9uIHBhc3QtdGhlLWVuZCBpdGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXBoZW4gQ2xlYXJ5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIEZlYiAyMDAwPC9wPgo8cD5JbiAyNC4xIHBhcmFncmFwaCA1LCBpdCBpcyBzdGF0ZWQgIi4gLiAuIERlcmVmZXJlbmNlYWJsZSBhbmQKcGFzdC10aGUtZW5kIHZhbHVlcyBhcmUgYWx3YXlzIG5vbi1zaW5ndWxhci4iPC9wPgo8cD5UaGlzIHBsYWNlcyBhbiB1bm5lY2Vzc2FyeSByZXN0cmljdGlvbiBvbiBwYXN0LXRoZS1lbmQgaXRlcmF0b3JzIGZvcgpjb250YWluZXJzIHdpdGggZm9yd2FyZCBpdGVyYXRvcnMgKGZvciBleGFtcGxlLCBhIHNpbmdseS1saW5rZWQgbGlzdCkuIElmIHRoZQpwYXN0LXRoZS1lbmQgdmFsdWUgb24gc3VjaCBhIGNvbnRhaW5lciB3YXMgYSB3ZWxsLWtub3duIHNpbmd1bGFyIHZhbHVlLCBpdCB3b3VsZApzdGlsbCBzYXRpc2Z5IGFsbCBmb3J3YXJkIGl0ZXJhdG9yIHJlcXVpcmVtZW50cy48L3A+CjxwPlJlbW92aW5nIHRoaXMgcmVzdHJpY3Rpb24gd291bGQgYWxsb3csIGZvciBleGFtcGxlLCBhIHNpbmdseS1saW5rZWQgbGlzdAp3aXRob3V0IGEgImZvb3RlciIgbm9kZS48L3A+CjxwPlRoaXMgd291bGQgaGF2ZSBhbiBpbXBhY3Qgb24gZXhpc3RpbmcgY29kZSB0aGF0IGV4cGVjdHMgcGFzdC10aGUtZW5kCml0ZXJhdG9ycyBvYnRhaW5lZCBmcm9tIGRpZmZlcmVudCAoZ2VuZXJpYykgY29udGFpbmVycyBiZWluZyBub3QgZXF1YWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCA1LCB0aGUgbGFzdCBzZW50ZW5jZSwgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgo8cD5EZXJlZmVyZW5jZWFibGUgYW5kIHBhc3QtdGhlLWVuZCB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CjxwPkRlcmVmZXJlbmNlYWJsZSB2YWx1ZXMgYXJlIGFsd2F5cyBub24tc2luZ3VsYXIuJm5ic3A7PC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5Gb3Igc29tZSBraW5kcyBvZiBjb250YWluZXJzLCBpbmNsdWRpbmcgc2luZ2x5IGxpbmtlZCBsaXN0cyBhbmQKemVyby1sZW5ndGggdmVjdG9ycywgbnVsbCBwb2ludGVycyBhcmUgcGVyZmVjdGx5IHJlYXNvbmFibGUgcGFzdC10aGUtZW5kCml0ZXJhdG9ycy4gIE51bGwgcG9pbnRlcnMgYXJlIHNpbmd1bGFyLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjA5Ij48aDM+MjA5LiZuYnNwO2Jhc2ljX3N0cmluZyBkZWNsYXJhdGlvbnMgaW5jb25zaXN0ZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SWdvciBTdGF1ZGVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzExIEZlYiAyMDAwPC9wPgo8cD5JbiBTZWN0aW9uIDIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+IHRoZSBiYXNpY19zdHJpbmcgbWVtYmVyIGZ1bmN0aW9uCmRlY2xhcmF0aW9ucyB1c2UgYSBjb25zaXN0ZW50IHN0eWxlIGV4Y2VwdCBmb3IgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnZvaWQgcHVzaF9iYWNrKGNvbnN0IGNoYXJUKTsKYmFzaWNfc3RyaW5nJmFtcDsgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyZhbXA7KTsKdm9pZCBzd2FwKGJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyZhbXA7KTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4tIHB1c2hfYmFjaywgYXNzaWduLCBzd2FwOiBtaXNzaW5nIGFyZ3VtZW50IG5hbWUmbmJzcDs8YnI+Ci0gcHVzaF9iYWNrOiB1c2Ugb2YgY29uc3Qgd2l0aCBjaGFyVCAoaS5lLiBQT0QgdHlwZSBwYXNzZWQgYnkgdmFsdWUKbm90IGJ5IHJlZmVyZW5jZSAtIHNob3VsZCBiZSBjaGFyVCBvciBjb25zdCBjaGFyVCZhbXA7ICk8YnI+Ci0gc3dhcDogcmVkdW5kYW50IHVzZSBvZiB0ZW1wbGF0ZSBwYXJhbWV0ZXJzIGluIGFyZ3VtZW50CmJhc2ljX3N0cmluZyZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyZhbXA7PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIFNlY3Rpb24gMjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLmJhc2ljLnN0cmluZyI+IFtsaWIuYmFzaWMuc3RyaW5nXTwvYT4gY2hhbmdlIHRoZSBiYXNpY19zdHJpbmcgbWVtYmVyCmZ1bmN0aW9uIGRlY2xhcmF0aW9ucyBwdXNoX2JhY2ssIGFzc2lnbiwgYW5kIHN3YXAgdG86PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnZvaWQgcHVzaF9iYWNrKGNoYXJUIGMpOyAKCmJhc2ljX3N0cmluZyZhbXA7IGFzc2lnbihjb25zdCBiYXNpY19zdHJpbmcmYW1wOyBzdHIpOwp2b2lkIHN3YXAoYmFzaWNfc3RyaW5nJmFtcDsgc3RyKTs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWx0aG91Z2ggdGhlIHN0YW5kYXJkIGlzIGluIGdlbmVyYWwgbm90IGNvbnNpc3RlbnQgaW4gZGVjbGFyYXRpb24Kc3R5bGUsIHRoZSBiYXNpY19zdHJpbmcgZGVjbGFyYXRpb25zIGFyZSBjb25zaXN0ZW50IG90aGVyIHRoYW4gdGhlCmFib3ZlLiAgVGhlIExXRyBmZWx0IHRoYXQgdGhpcyB3YXMgc3VmZmljaWVudCByZWFzb24gdG8gbWVyaXQgdGhlCmNoYW5nZS4KPC9wPgo8aHI+CjxhIG5hbWU9IjIxMCI+PGgzPjIxMC4mbmJzcDtkaXN0YW5jZSBmaXJzdCBhbmQgbGFzdCBjb25mdXNlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnb3JpdGhtcyI+IFtsaWIuYWxnb3JpdGhtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0xpc2EgTGlwcGluY290dCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBGZWIgMjAwMDwvcD4KPHA+SW4gcGFyYWdyYXBoIDkgb2Ygc2VjdGlvbiAyNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZ29yaXRobXMiPiBbbGliLmFsZ29yaXRobXNdPC9hPiwgaXQgaXMgd3JpdHRlbjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPiAgICAgIEluIHRoZSBkZXNjcmlwdGlvbiBvZiB0aGUgYWxnb3JpdGhtcyBvcGVyYXRvcnMgKyBhbmQgLSBhcmUgdXNlZAogICAgICAgICAgIGZvciBzb21lIG9mIHRoZSBpdGVyYXRvciBjYXRlZ29yaWVzIGZvciB3aGljaCB0aGV5IGRvIG5vdCBoYXZlIHRvCiAgICAgICAgICAgYmUgZGVmaW5lZC4gSW4gdGhlc2UgY2FzZXMgdGhlIHNlbWFudGljcyBvZiBbLi4uXSBhLWIgaXMgdGhlIHNhbWUKICAgICAgICAgICBhcyBvZjxicj4KICA8YnI+CiAgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IDx0dD5yZXR1cm4gZGlzdGFuY2UoYSwgYik7PC90dD48L3A+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5PbiB0aGUgbGFzdCBsaW5lIG9mIHBhcmFncmFwaCA5IG9mIHNlY3Rpb24gMjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGdvcml0aG1zIj4gW2xpYi5hbGdvcml0aG1zXTwvYT4gY2hhbmdlCjx0dD4iYS1iIjwvdHQ+IHRvIDx0dD4iYi1hIi48L3R0PjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZXJlIGFyZSB0d28gd2F5cyB0byBmaXggdGhlIGRlZmVjdDsgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiB0byBiLWEKb3IgY2hhbmdlIHRoZSByZXR1cm4gdG8gZGlzdGFuY2UoYixhKS4gIFRoZSBMV0cgcHJlZmVycmVkIHRoZQpmb3JtZXIgZm9yIGNvbnNpc3RlbmN5LjwvcD4KPGhyPgo8YSBuYW1lPSIyMTEiPjxoMz4yMTEuJm5ic3A7b3BlcmF0b3ImZ3Q7Jmd0Oyhpc3RyZWFtJmFtcDssIHN0cmluZyZhbXA7KSBkb2Vzbid0IHNldCBmYWlsYml0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy43LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuaW8iPiBbbGliLnN0cmluZy5pb108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Njb3R0IFNueWRlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs0IEZlYiAyMDAwPC9wPgo8cD5UaGUgZGVzY3JpcHRpb24gb2YgdGhlIHN0cmVhbSBleHRyYWN0aW9uIG9wZXJhdG9yIGZvciBzdGQ6OnN0cmluZyAoc2VjdGlvbgoyMS4zLjcuOSBbbGliLnN0cmluZy5pb10pIGRvZXMgbm90IGNvbnRhaW4gYSByZXF1aXJlbWVudCB0aGF0IGZhaWxiaXQgYmUgc2V0IGluCnRoZSBjYXNlIHRoYXQgdGhlIG9wZXJhdG9yIGZhaWxzIHRvIGV4dHJhY3QgYW55IGNoYXJhY3RlcnMgZnJvbSB0aGUgaW5wdXQKc3RyZWFtLjwvcD4KPHA+VGhpcyBpbXBsaWVzIHRoYXQgdGhlIHR5cGljYWwgY29uc3RydWN0aW9uPC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnN0ZDo6aXN0cmVhbSBpczsKc3RkOjpzdHJpbmcgc3RyOwouLi4Kd2hpbGUgKGlzICZndDsmZ3Q7IHN0cikgLi4uIDs8L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD4od2hpY2ggdGVzdHMgZmFpbGJpdCkgaXMgbm90IHJlcXVpcmVkIHRvIHRlcm1pbmF0ZSBhdCBFT0YuPC9wPgo8cD5GdXJ0aGVybW9yZSwgdGhpcyBpcyBpbmNvbnNpc3RlbnQgd2l0aCBvdGhlciBleHRyYWN0aW9uIG9wZXJhdG9ycywKd2hpY2ggZG8gaW5jbHVkZSB0aGlzIHJlcXVpcmVtZW50LiAoU2VlIHNlY3Rpb25zIDI3LjYuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZCI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWRdPC9hPiBhbmQgMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIHdoZXJlIHRoaXMKcmVxdWlyZW1lbnQgaXMgcHJlc2VudCwgZWl0aGVyIGV4cGxpY2l0bHkgb3IgaW1wbGljaXRseSwgZm9yIHRoZQpleHRyYWN0aW9uIG9wZXJhdG9ycy4gSXQgaXMgYWxzbyBwcmVzZW50IGV4cGxpY2l0bHkgaW4gdGhlIGRlc2NyaXB0aW9uCm9mIGdldGxpbmUgKGlzdHJlYW0mYW1wOywgc3RyaW5nJmFtcDssIGNoYXJUKSBpbiBzZWN0aW9uIDIxLjMuNy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nLmlvIj4gW2xpYi5zdHJpbmcuaW9dPC9hPiBwYXJhZ3JhcGggOC4pPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluc2VydCBuZXcgcGFyYWdyYXBoIGFmdGVyIHBhcmFncmFwaCAyIGluIHNlY3Rpb24gMjEuMy43LjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuaW8iPiBbbGliLnN0cmluZy5pb108L2E+OjwvcD4KPGJsb2NrcXVvdGU+Cgo8cD5JZiB0aGUgZnVuY3Rpb24gZXh0cmFjdHMgbm8gY2hhcmFjdGVycywgaXQgY2FsbHMKaXMuc2V0c3RhdGUoaW9zOjpmYWlsYml0KSB3aGljaCBtYXkgdGhyb3cgaW9zX2Jhc2U6OmZhaWx1cmUKKDI3LjQuNC4zKS48L3A+CjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyMTIiPjxoMz4yMTIuJm5ic3A7RW1wdHkgcmFuZ2UgYmVoYXZpb3IgdW5jbGVhciBmb3Igc2V2ZXJhbCBhbGdvcml0aG1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLm1pbi5tYXgiPiBbbGliLmFsZy5taW4ubWF4XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TmljbyBKb3N1dHRpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNiBGZWIgMjAwMDwvcD4KPHA+VGhlIHN0YW5kYXJkIGRvZXNuJ3Qgc3BlY2lmeSB3aGF0IG1pbl9lbGVtZW50KCkgYW5kIG1heF9lbGVtZW50KCkgc2hhbGwKcmV0dXJuIGlmIHRoZSByYW5nZSBpcyBlbXB0eSAoZmlyc3QgZXF1YWxzIGxhc3QpLiBUaGUgdXN1YWwgaW1wbGVtZW50YXRpb25zCnJldHVybiBsYXN0LiBUaGlzIHByb2JsZW0gc2VlbXMgYWxzbyBhcHBseSB0byBwYXJ0aXRpb24oKSwgc3RhYmxlX3BhcnRpdGlvbigpLApuZXh0X3Blcm11dGF0aW9uKCksIGFuZCBwcmV2X3Blcm11dGF0aW9uKCkuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5taW4ubWF4Ij4gW2xpYi5hbGcubWluLm1heF08L2E+IC0gTWluaW11bSBhbmQgbWF4aW11bSwgcGFyYWdyYXBocyA3IGFuZAo5LCBhcHBlbmQ6IFJldHVybnMgbGFzdCBpZiBmaXJzdD09bGFzdC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGxvb2tlZCBpbiBzb21lIGRldGFpbCBhdCBhbGwgb2YgdGhlIGFib3ZlIG1lbnRpb25lZAphbGdvcml0aG1zLCBidXQgYmVsaWV2ZXMgdGhhdCBleGNlcHQgZm9yIG1pbl9lbGVtZW50KCkgYW5kCm1heF9lbGVtZW50KCkgaXQgaXMgYWxyZWFkeSBjbGVhciB0aGF0IGxhc3QgaXMgcmV0dXJuZWQgaWYgZmlyc3QgPT0KbGFzdC48L3A+Cjxocj4KPGEgbmFtZT0iMjE0Ij48aDM+MjE0LiZuYnNwO3NldDo6ZmluZCgpIG1pc3NpbmcgY29uc3Qgb3ZlcmxvYWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXQiPiBbbGliLnNldF08L2E+LCAyMy4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tdWx0aXNldCI+IFtsaWIubXVsdGlzZXRdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKdWR5IFdhcmQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggRmViIDIwMDA8L3A+CjxwPlRoZSBzcGVjaWZpY2F0aW9uIGZvciB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cyBpbgpUYWJsZSA2OSBzdGF0ZSB0aGF0IHRoZSBmaW5kIG1lbWJlciBmdW5jdGlvbiBzaG91bGQgInJldHVybgppdGVyYXRvcjsgY29uc3RfaXRlcmF0b3IgZm9yIGNvbnN0YW50IGEiLiBUaGUgbWFwIGFuZCBtdWx0aW1hcApjb250YWluZXIgZGVzY3JpcHRpb25zIGhhdmUgdHdvIG92ZXJsb2FkZWQgdmVyc2lvbnMgb2YgZmluZCwgYnV0IHNldAphbmQgbXVsdGlzZXQgZG8gbm90LCBhbGwgdGhleSBoYXZlIGlzOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT5pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSBwcm90b3R5cGVzIGZvciBmaW5kKCksIGxvd2VyX2JvdW5kKCksIHVwcGVyX2JvdW5kKCksIGFuZAplcXVhbF9yYW5nZSgpIGluIHNlY3Rpb24gMjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuc2V0Ij4gW2xpYi5zZXRdPC9hPiBhbmQgc2VjdGlvbiAyMy4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tdWx0aXNldCI+IFtsaWIubXVsdGlzZXRdPC9hPiB0byBlYWNoIGhhdmUgdHdvIG92ZXJsb2Fkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+aXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPml0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlICZhbXA7IHgpOwpjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSAmYW1wOyB4KSBjb25zdDs8L3ByZT4KICA8cHJlPnBhaXImbHQ7aXRlcmF0b3IsIGl0ZXJhdG9yJmd0OyBlcXVhbF9yYW5nZShjb25zdCBrZXlfdHlwZSAmYW1wOyB4KTsKcGFpciZsdDtjb25zdF9pdGVyYXRvciwgY29uc3RfaXRlcmF0b3ImZ3Q7IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlICZhbXA7IHgpIGNvbnN0OzwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9reW86IEF0IHRoZSByZXF1ZXN0IG9mIHRoZSBMV0csIEp1ZHkgV2FyZCBwcm92aWRlZCB3b3JkaW5nCmV4dGVuZGluZyB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB0byBsb3dlcl9ib3VuZCwgdXBwZXJfYm91bmQsIGFuZAplcXVhbF9yYW5nZS5dPC9pPjwvcD4KPGhyPgo8YSBuYW1lPSIyMTciPjxoMz4yMTcuJm5ic3A7RmFjZXRzIGV4YW1wbGUgKENsYXNzaWZ5aW5nIEphcGFuZXNlIGNoYXJhY3RlcnMpIGNvbnRhaW5zIGVycm9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0cy5leGFtcGxlcyI+IFtsaWIuZmFjZXRzLmV4YW1wbGVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IEZlYiAyMDAwPC9wPgo8cD5UaGUgZXhhbXBsZSBpbiAyMi4yLjgsIHBhcmFncmFwaCAxMSBjb250YWlucyB0aGUgZm9sbG93aW5nIGVycm9yczo8L3A+CjxwPjEpIFRoZSBtZW1iZXIgZnVuY3Rpb24gYE15OjpKQ3R5cGU6OmlzX2thbmppKCknIGlzIG5vbi1jb25zdDsgdGhlIGZ1bmN0aW9uCm11c3QgYmUgY29uc3QgaW4gb3JkZXIgZm9yIGl0IHRvIGJlIGNhbGxhYmxlIG9uIGEgY29uc3Qgb2JqZWN0IChhIHJlZmVyZW5jZSB0bwp3aGljaCB3aGljaCBpcyB3aGF0IHN0ZDo6dXNlX2ZhY2V0Jmx0OyZndDsoKSByZXR1cm5zKS48L3A+CjxwPjIpIEluIGZpbGUgZmlsdC5DLCB0aGUgZGVmaW5pdGlvbiBvZiBgSkN0eXBlOjppZCcgbXVzdCBiZSBxdWFsaWZpZWQgd2l0aCB0aGUKbmFtZSBvZiB0aGUgbmFtZXNwYWNlIGBNeScuPC9wPgo8cD4zKSBJbiB0aGUgZGVmaW5pdGlvbiBvZiBgbG9jJyBhbmQgc3Vic2VxdWVudGx5IGluIHRoZSBjYWxsIHRvIHVzZV9mYWNldCZsdDsmZ3Q7KCkKaW4gbWFpbigpLCB0aGUgbmFtZSBvZiB0aGUgZmFjZXQgaXMgbWlzc3BlbGxlZDogaXQgc2hvdWxkIHJlYWQgYE15OjpKQ3R5cGUnCnJhdGhlciB0aGFuIGBNeTo6SkNUeXBlJy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgIkNsYXNzaWZ5aW5nIEphcGFuZXNlIGNoYXJhY3RlcnMiIGV4YW1wbGUgaW4gMjIuMi44LApwYXJhZ3JhcGggMTEgd2l0aCB0aGUgZm9sbG93aW5nOjwvcD4KPHByZT4jaW5jbHVkZSAmbHQ7bG9jYWxlJmd0OzwvcHJlPgo8cHJlPm5hbWVzcGFjZSBNeSB7CiAgICB1c2luZyBuYW1lc3BhY2Ugc3RkOwogICAgY2xhc3MgSkN0eXBlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQgewogICAgcHVibGljOgogICAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOyAgICAgLy8gIHJlcXVpcmVkIGZvciB1c2UgYXMgYSBuZXcgbG9jYWxlIGZhY2V0CiAgICAgICAgYm9vbCBpc19rYW5qaSAod2NoYXJfdCBjKSBjb25zdDsKICAgICAgICBKQ3R5cGUoKSB7fQogICAgcHJvdGVjdGVkOgogICAgICAgIH5KQ3R5cGUoKSB7fQogICAgfTsKfTwvcHJlPgo8cHJlPi8vICBmaWxlOiAgZmlsdC5DCiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKI2luY2x1ZGUgJmx0O2xvY2FsZSZndDsKI2luY2x1ZGUgImpjdHlwZSIgICAgICAgICAgICAgICAgIC8vICBhYm92ZQpzdGQ6OmxvY2FsZTo6aWQgTXk6OkpDdHlwZTo6aWQ7ICAgLy8gIHRoZSBzdGF0aWMgIEpDdHlwZSAgbWVtYmVyCmRlY2xhcmVkIGFib3ZlLjwvcHJlPgo8cHJlPmludCBtYWluKCkKewogICAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKICAgIHR5cGVkZWYgY3R5cGUmbHQ7d2NoYXJfdCZndDsgd2N0eXBlOwogICAgbG9jYWxlIGxvYyhsb2NhbGUoIiIpLCAgICAgICAgICAgICAgLy8gIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxvY2FsZS4uLgogICAgICAgICAgICAgICBuZXcgTXk6OkpDdHlwZSk7ICAgICAgICAgLy8gIGFuZCBhIG5ldyBmZWF0dXJlIC4uLgogICAgd2NoYXJfdCBjID0gdXNlX2ZhY2V0Jmx0O3djdHlwZSZndDsobG9jKS53aWRlbignIScpOwogICAgaWYgKCF1c2VfZmFjZXQmbHQ7TXk6OkpDdHlwZSZndDsobG9jKS5pc19rYW5qaShjKSkKICAgICAgICBjb3V0ICZsdDsmbHQ7ICJubyBpdCBpc24ndCEiICZsdDsmbHQ7IGVuZGw7CiAgICByZXR1cm4gMDsKfTwvcHJlPgo8aHI+CjxhIG5hbWU9IjIyMCI+PC9hPjxoMz48YSBuYW1lPSIyMjAiPjIyMC4mbmJzcDt+aW9zX2Jhc2UoKSB1c2FnZSB2YWxpZD88L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zLmJhc2UuY29ucyI+IFtsaWIuaW9zLmJhc2UuY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0pvbmF0aGFuIFNjaGlsbGluZywgSG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgTWFyIDIwMDA8L3A+CjxwPlRoZSBwcmUtY29uZGl0aW9ucyBmb3IgdGhlIGlvc19iYXNlIGRlc3RydWN0b3IgYXJlIGRlc2NyaWJlZCBpbiAyNy40LjIuNwpwYXJhZ3JhcGggMjo8L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IERlc3Ryb3lzIGFuIG9iamVjdCBvZiBjbGFzcyBpb3NfYmFzZS4gQ2FsbHMgZWFjaCByZWdpc3RlcmVkCiAgY2FsbGJhY2sgcGFpciAoZm4saW5kZXgpICgyNy40LjIuNikgYXMgKCpmbikoZXJhc2VfZXZlbnQsKnRoaXMsaW5kZXgpIGF0IHN1Y2gKICB0aW1lIHRoYXQgYW55IGlvc19iYXNlIG1lbWJlciBmdW5jdGlvbiBjYWxsZWQgZnJvbSB3aXRoaW4gZm4gaGFzIHdlbGwgZGVmaW5lZAogIHJlc3VsdHMuPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPkJ1dCB3aGF0IGlzIG5vdCBjbGVhciBpczogSWYgbm8gY2FsbGJhY2sgZnVuY3Rpb25zIHdlcmUgZXZlciByZWdpc3RlcmVkLCBkb2VzCml0IG1hdHRlciB3aGV0aGVyIHRoZSBpb3NfYmFzZSBtZW1iZXJzIHdlcmUgZXZlciBpbml0aWFsaXplZD88L3A+CjxwPkZvciBpbnN0YW5jZSwgZG9lcyB0aGlzIHByb2dyYW0gaGF2ZSBkZWZpbmVkIGJlaGF2aW9yOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7aW9zJmd0OzwvcHJlPgogIDxwcmU+Y2xhc3MgRCA6IHB1YmxpYyBzdGQ6Omlvc19iYXNlIHsgfTs8L3ByZT4KICA8cHJlPmludCBtYWluKCkgeyBEIGQ7IH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JdCBzZWVtcyB0aGF0IHJlZ2lzdHJhdGlvbiBvZiBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdvdWxkIHN1cmVseSBhZmZlY3QgdGhlCnN0YXRlIG9mIGFuIGlvc19iYXNlLiBUaGF0IGlzLCB3aGVuIHlvdSByZWdpc3RlciBhIGNhbGxiYWNrIGZ1bmN0aW9uIHdpdGggYW4KaW9zX2Jhc2UsIHRoZSBpb3NfYmFzZSBtdXN0IHJlY29yZCB0aGF0IGZhY3Qgc29tZWhvdy48L3A+CjxwPkJ1dCBpZiBhZnRlciBjb25zdHJ1Y3Rpb24gdGhlIGlvc19iYXNlIGlzIGluIGFuIGluZGV0ZXJtaW5hdGUgc3RhdGUsIGFuZCB0aGF0CnN0YXRlIGlzIG5vdCBtYWRlIGRldGVybWluYXRlIGJlZm9yZSB0aGUgZGVzdHJ1Y3RvciBpcyBjYWxsZWQsIHRoZW4gaG93IHdvdWxkCnRoZSBkZXN0cnVjdG9yIGtub3cgaWYgYW55IGNhbGxiYWNrcyBoYWQgaW5kZWVkIGJlZW4gcmVnaXN0ZXJlZD8gQW5kIGlmIHRoZQpudW1iZXIgb2YgY2FsbGJhY2tzIHRoYXQgaGFkIGJlZW4gcmVnaXN0ZXJlZCBpcyBpbmRldGVybWluYXRlLCB0aGVuIGlzIG5vdCB0aGUKYmVoYXZpb3Igb2YgdGhlIGRlc3RydWN0b3IgdW5kZWZpbmVkPzwvcD4KPHA+QnkgY29tcGFyaXNvbiwgdGhlIGJhc2ljX2lvcyBjbGFzcyBkZXNjcmlwdGlvbiBpbiAyNy40LjQuMSBwYXJhZ3JhcGggMiBtYWtlcwppdCBleHBsaWNpdCB0aGF0IGRlc3RydWN0aW9uIGJlZm9yZSBpbml0aWFsaXphdGlvbiByZXN1bHRzIGluIHVuZGVmaW5lZApiZWhhdmlvci48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+TW9kaWZ5IDI3LjQuMi43IHBhcmFncmFwaCAxIGZyb208L3A+CjxibG9ja3F1b3RlPgogIDxwPkVmZmVjdHM6IEVhY2ggaW9zX2Jhc2UgbWVtYmVyIGhhcyBhbiBpbmRldGVybWluYXRlIHZhbHVlIGFmdGVyCiAgY29uc3RydWN0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+RWZmZWN0czogRWFjaCBpb3NfYmFzZSBtZW1iZXIgaGFzIGFuIGluZGV0ZXJtaW5hdGUKdmFsdWUgYWZ0ZXIgY29uc3RydWN0aW9uLiBUaGVzZSBtZW1iZXJzIG11c3QgYmUgaW5pdGlhbGl6ZWQgYnkgY2FsbGluZwpiYXNpY19pb3M6OmluaXQuIElmIGFuIGlvc19iYXNlIG9iamVjdCBpcyBkZXN0cm95ZWQgYmVmb3JlIHRoZXNlCmluaXRpYWxpemF0aW9ucyBoYXZlIHRha2VuIHBsYWNlLCB0aGUgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLjwvcD4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIyMSI+PGgzPjIyMS4mbmJzcDtudW1fZ2V0Jmx0OyZndDs6OmRvX2dldCBzdGFnZSAyIHByb2Nlc3NpbmcgYnJva2VuPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTQgTWFyIDIwMDA8L3A+CjxwPlN0YWdlIDIgcHJvY2Vzc2luZyBvZiBudW1lcmljIGNvbnZlcnNpb24gaXMgYnJva2VuLjwvcD4KCjxwPlRhYmxlIDU1IGluIDIyLjIuMi4xLjIgc2F5cyB0aGF0IHdoZW4gYmFzZWZpZWxkIGlzIDAgdGhlIGludGVncmFsCmNvbnZlcnNpb24gc3BlY2lmaWVyIGlzICVpLiBBICVpIHNwZWNpZmllciBkZXRlcm1pbmVzIGEgbnVtYmVyJ3MgYmFzZQpieSBpdHMgcHJlZml4ICgwIGZvciBvY3RhbCwgMHggZm9yIGhleCksIHNvIHRoZSBpbnRlbnRpb24gaXMgY2xlYXJseQp0aGF0IGEgMHggcHJlZml4IGlzIGFsbG93ZWQuICBQYXJhZ3JhcGggOCBpbiB0aGUgc2FtZSBzZWN0aW9uLApob3dldmVyLCBkZXNjcmliZXMgdmVyeSBwcmVjaXNlbHkgaG93IGNoYXJhY3RlcnMgYXJlIHByb2Nlc3NlZC4gKEl0Cm11c3QgYmUgZG9uZSAiYXMgaWYiIGJ5IGEgc3BlY2lmaWVkIGNvZGUgZnJhZ21lbnQuKSBUaGF0CmRlc2NyaXB0aW9uIGRvZXMgbm90IGFsbG93IGEgMHggcHJlZml4IHRvIGJlIHJlY29nbml6ZWQuPC9wPgoKPHA+VmVyeSByb3VnaGx5LCBzdGFnZSAyIHByb2Nlc3NpbmcgcmVhZHMgYSBjaGFyX3R5cGUgY3QuIEl0IGNvbnZlcnRzCmN0IHRvIGEgY2hhciwgbm90IGJ5IHVzaW5nIG5hcnJvdyBidXQgYnkgbG9va2luZyBpdCB1cCBpbiBhCnRyYW5zbGF0aW9uIHRhYmxlIHRoYXQgd2FzIGNyZWF0ZWQgYnkgd2lkZW5pbmcgdGhlIHN0cmluZyBsaXRlcmFsCiIwMTIzNDU2Nzg5YWJjZGVmQUJDREVGKy0iLiBUaGUgY2hhcmFjdGVyICJ4IiBpcwpub3QgZm91bmQgaW4gdGhhdCB0YWJsZSwgc28gaXQgY2FuJ3QgYmUgcmVjb2duaXplZCBieSBzdGFnZSAyCnByb2Nlc3NpbmcuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDIyLjIuMi4xLjIgcGFyYWdyYXBoIDgsIHJlcGxhY2UgdGhlIGxpbmU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPnN0YXRpYyBjb25zdCBjaGFyIHNyY1tdID0gIjAxMjM0NTY3ODlhYmNkZWZBQkNERUYrLSI7PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+d2l0aCB0aGUgbGluZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+c3RhdGljIGNvbnN0IGNoYXIgc3JjW10gPSAiMDEyMzQ1Njc4OWFiY2RlZnhBQkNERUZYKy0iOzwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JZiB3ZSdyZSB1c2luZyB0aGUgdGVjaG5pcXVlIG9mIHdpZGVuaW5nIGEgc3RyaW5nIGxpdGVyYWwsIHRoZQpzdHJpbmcgbGl0ZXJhbCBtdXN0IGNvbnRhaW4gZXZlcnkgY2hhcmFjdGVyIHdlIHdpc2ggdG8gcmVjb2duaXplLgpUaGlzIHRlY2huaXF1ZSBoYXMgdGhlIGNvbnNlcXVlbmNlIHRoYXQgYWx0ZXJuYXRlIHJlcHJlc2VudGF0aW9ucwpvZiBkaWdpdHMgd2lsbCBub3QgYmUgcmVjb2duaXplZC4gIFRoaXMgZGVzaWduIGRlY2lzaW9uIHdhcyBtYWRlCmRlbGliZXJhdGVseSwgd2l0aCBmdWxsIGtub3dsZWRnZSBvZiB0aGF0IGxpbWl0YXRpb24uPC9wPgo8aHI+CjxhIG5hbWU9IjIyMiI+PGgzPjIyMi4mbmJzcDtBcmUgdGhyb3cgY2xhdXNlcyBuZWNlc3NhcnkgaWYgYSB0aHJvdyBpcyBhbHJlYWR5IGltcGxpZWQgYnkgdGhlIGVmZmVjdHMgY2xhdXNlPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjMuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9ucyI+IFtsaWIuc3RydWN0dXJlLnNwZWNpZmljYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNUQyI+VEM8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IE1hciAyMDAwPC9wPgo8cD5TZWN0aW9uIDIxLjMuNi44IGRlc2NyaWJlcyB0aGUgYmFzaWNfc3RyaW5nOjpjb21wYXJlIGZ1bmN0aW9uIHRoaXMgd2F5OjwvcD4KPGJsb2NrcXVvdGU+CiAgPHByZT4yMS4zLjYuOCAtIGJhc2ljX3N0cmluZzo6Y29tcGFyZSBbbGliLnN0cmluZzo6Y29tcGFyZV0KCmludCBjb21wYXJlKHNpemVfdHlwZSBwb3MxLCBzaXplX3R5cGUgbjEsCiAgICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsmYW1wOyAgc3RyICwKICAgICAgICAgICAgICAgIHNpemVfdHlwZSAgcG9zMiAsIHNpemVfdHlwZSAgbjIgKSBjb25zdDsKCi00LSBSZXR1cm5zOiAKCiAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoKnRoaXMscG9zMSxuMSkuY29tcGFyZSgKICAgICAgICAgICAgICAgICBiYXNpY19zdHJpbmcmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsoc3RyLHBvczIsbjIpKSAuPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+YW5kIHRoZSBjb25zdHJ1Y3RvciB0aGF0J3MgaW1wbGljaXRseSBjYWxsZWQgYnkgdGhlIGFib3ZlIGlzCmRlZmluZWQgdG8gdGhyb3cgYW4gb3V0LW9mLXJhbmdlIGV4Y2VwdGlvbiBpZiBwb3MgJmd0OyBzdHIuc2l6ZSgpLiBTZWUKc2VjdGlvbiAyMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuY29ucyI+IFtsaWIuc3RyaW5nLmNvbnNdPC9hPiBwYXJhZ3JhcGggNC48L3A+Cgo8cD5PbiB0aGUgb3RoZXIgaGFuZCwgdGhlIGNvbXBhcmUgZnVuY3Rpb24gZGVzY3JpcHRpb25zIHRoZW1zZWx2ZXMgZG9uJ3QgaGF2ZQoiVGhyb3dzOiAiIGNsYXVzZXMgYW5kIGFjY29yZGluZyB0byAxNy4zLjEuMywgcGFyYWdyYXBoIDMsIGVsZW1lbnRzCnRoYXQgZG8gbm90IGFwcGx5IHRvIGEgZnVuY3Rpb24gYXJlIG9taXR0ZWQuPC9wPgo8cD5TbyBpdCBzZWVtcyB0aGVyZSBpcyBhbiBpbmNvbnNpc3RlbmN5IGluIHRoZSBzdGFuZGFyZCAtLSBhcmUgdGhlCiJFZmZlY3RzIiBjbGF1c2VzIGNvcnJlY3QsIG9yIGFyZSB0aGUgIlRocm93cyIgY2xhdXNlcwptaXNzaW5nPzwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAxNy4zLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnMiPiBbbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc108L2E+IHBhcmFncmFwaCAzLCB0aGUgZm9vdG5vdGUgMTQ4IGF0dGFjaGVkIHRvCnRoZSBzZW50ZW5jZSAiRGVzY3JpcHRpb25zIG9mIGZ1bmN0aW9uIHNlbWFudGljcyBjb250YWluIHRoZQpmb2xsb3dpbmcgZWxlbWVudHMgKGFzIGFwcHJvcHJpYXRlKToiLCBpbnNlcnQgdGhlIHdvcmQKImZ1cnRoZXIiIHNvIHRoYXQgdGhlIGZvb3Qgbm90ZSByZWFkczo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlRvIHNhdmUgc3BhY2UsIGl0ZW1zIHRoYXQgZG8gbm90IGFwcGx5IHRvIGEgZnVuY3Rpb24gYXJlCiAgb21pdHRlZC4gRm9yIGV4YW1wbGUsIGlmIGEgZnVuY3Rpb24gZG9lcyBub3Qgc3BlY2lmeSBhbnkgZnVydGhlcgogIHByZWNvbmRpdGlvbnMsIHRoZXJlIHdpbGwgYmUgbm8gIlJlcXVpcmVzIiBwYXJhZ3JhcGguPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgc3RhbmRhcmQgaXMgc29tZXdoYXQgaW5jb25zaXN0ZW50LCBidXQgYSBmYWlsdXJlIHRvIG5vdGUgYQp0aHJvdyBjb25kaXRpb24gaW4gYSB0aHJvd3MgY2xhdXNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gbm90IHRvCnRocm93LiAgVGhlIGluY29uc2lzdGVudCB3b3JkaW5nIGlzIGluIGEgZm9vdG5vdGUsIGFuZCB0aHVzCm5vbi1ub3JtYXRpdmUuIFRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGZyb20gdGhlIExXRyBjbGFyaWZpZXMgdGhlCmZvb3Rub3RlLjwvcD4KPGhyPgo8YSBuYW1lPSIyMjMiPjxoMz4yMjMuJm5ic3A7cmV2ZXJzZSBhbGdvcml0aG0gc2hvdWxkIHVzZSBpdGVyX3N3YXAgcmF0aGVyIHRoYW4gc3dhcDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXZlcnNlIj4gW2xpYi5hbGcucmV2ZXJzZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgTWFyIDIwMDA8L3A+CjxwPlNob3VsZG4ndCB0aGUgZWZmZWN0cyBzYXkgImFwcGxpZXMgaXRlcl9zd2FwIHRvIGFsbCBwYWlycy4uLiI/PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI1LjIuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXZlcnNlIj4gW2xpYi5hbGcucmV2ZXJzZV08L2E+LCByZXBsYWNlOjwvcD4KICA8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBGb3IgZWFjaCBub24tbmVnYXRpdmUgaW50ZWdlciBpICZsdDs9IChsYXN0IC0gZmlyc3QpLzIsIAogIGFwcGxpZXMgc3dhcCB0byBhbGwgcGFpcnMgb2YgaXRlcmF0b3JzIGZpcnN0ICsgaSwgKGxhc3QgLSBpKSAtIDEuCiAgPC9ibG9ja3F1b3RlPgo8cD53aXRoOjwvcD4KICA8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBGb3IgZWFjaCBub24tbmVnYXRpdmUgaW50ZWdlciBpICZsdDs9IChsYXN0IC0gZmlyc3QpLzIsIAogIGFwcGxpZXMgaXRlcl9zd2FwIHRvIGFsbCBwYWlycyBvZiBpdGVyYXRvcnMgZmlyc3QgKyBpLCAobGFzdCAtIGkpIC0gMS4KICA8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjI0Ij48aDM+MjI0LiZuYnNwO2NsZWFyKCkgY29tcGxleGl0eSBmb3IgYXNzb2NpYXRpdmUgY29udGFpbmVycyByZWZlcnMgdG8gdW5kZWZpbmVkIE48L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHMiPiBbbGliLmFzc29jaWF0aXZlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjVEMiPlRDPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0VkIEJyZXkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgTWFyIDIwMDA8L3A+CjxwPkluIHRoZSBhc3NvY2lhdGl2ZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHRhYmxlIGluIDIzLjEuMiBwYXJhZ3JhcGggNywKYS5jbGVhcigpIGhhcyBjb21wbGV4aXR5ICJsb2coc2l6ZSgpKSArIE4iLiBIb3dldmVyLCB0aGUgbWVhbmluZyBvZiBOCmlzIG5vdCBkZWZpbmVkLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiB0aGUgYXNzb2NpYXRpdmUgY29udGFpbmVyIHJlcXVpcmVtZW50cyB0YWJsZSBpbiAyMy4xLjIgcGFyYWdyYXBoCjcsIHRoZSBjb21wbGV4aXR5IG9mIGEuY2xlYXIoKSwgY2hhbmdlICJsb2coc2l6ZSgpKSArIE4iIHRvCiJsaW5lYXIgaW4gPHR0PnNpemUoKTwvdHQ+Ii48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCdzIHRoZSAibG9nKHNpemUoKSkiLCBub3QgdGhlICJOIiwgdGhhdCBpcyBpbgplcnJvcjogdGhlcmUncyBubyBkaWZmZXJlbmNlIGJldHdlZW4gPGk+TyhOKTwvaT4gYW5kIDxpPk8oTiArCmxvZyhOKSk8L2k+LiAgVGhlIHRleHQgaW4gdGhlIHN0YW5kYXJkIGlzIHByb2JhYmx5IGFuIGluY29ycmVjdApjdXQtYW5kLXBhc3RlIGZyb20gdGhlIHJhbmdlIHZlcnNpb24gb2YgPHR0PmVyYXNlPC90dD4uPC9wPgo8aHI+CjxhIG5hbWU9IjIyNSI+PGgzPjIyNS4mbmJzcDtzdGQ6OiBhbGdvcml0aG1zIHVzZSBvZiBvdGhlciB1bnF1YWxpZmllZCBhbGdvcml0aG1zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuZ2xvYmFsLmZ1bmN0aW9ucyI+IFtsaWIuZ2xvYmFsLmZ1bmN0aW9uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RhdmUgQWJyYWhhbXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDEgQXByIDIwMDA8L3A+CjxwPkFyZSBhbGdvcml0aG1zIGluIHN0ZDo6IGFsbG93ZWQgdG8gdXNlIG90aGVyIGFsZ29yaXRobXMgd2l0aG91dCBxdWFsaWZpY2F0aW9uLCBzbyBmdW5jdGlvbnMgaW4KdXNlciBuYW1lc3BhY2VzIG1pZ2h0IGJlIGZvdW5kIHRocm91Z2ggS29lbmlnIGxvb2t1cD88L3A+CjxwPkZvciBleGFtcGxlLCBhIHBvcHVsYXIgc3RhbmRhcmQgbGlicmFyeSBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlcyB0aGlzCmltcGxlbWVudGF0aW9uIG9mIHN0ZDo6dW5pcXVlOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+bmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgX0ZvcndhcmRJdGVyJmd0OwogICAgX0ZvcndhcmRJdGVyIHVuaXF1ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkgewogICAgICBfX2ZpcnN0ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICByZXR1cm4gdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIH0KICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5JbWFnaW5lIHR3byB1c2VycyBvbiBvcHBvc2l0ZSBzaWRlcyBvZiB0b3duLCBlYWNoIHVzaW5nIHVuaXF1ZSBvbiBoaXMgb3duCnNlcXVlbmNlcyBib3VuZGVkIGJ5IG15X2l0ZXJhdG9ycyAuIFVzZXIxIGxvb2tzIGF0IGhpcyBzdGFuZGFyZCBsaWJyYXJ5CmltcGxlbWVudGF0aW9uIGFuZCBzYXlzLCAiSSBrbm93IGhvdyB0byBpbXBsZW1lbnQgYSBtb3JlIGVmZmljaWVudAp1bmlxdWVfY29weSBmb3IgbXlfaXRlcmF0b3JzIiwgYW5kIHdyaXRlczo8L3A+CjxibG9ja3F1b3RlPgo8cHJlPm5hbWVzcGFjZSB1c2VyMSB7CiAgICBjbGFzcyBteV9pdGVyYXRvcjsKICAgIC8vIGZhc3RlciB2ZXJzaW9uIGZvciBteV9pdGVyYXRvcgogICAgbXlfaXRlcmF0b3IgdW5pcXVlX2NvcHkobXlfaXRlcmF0b3IsIG15X2l0ZXJhdG9yLCBteV9pdGVyYXRvcik7CiAgICB9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dXNlcjE6OnVuaXF1ZV9jb3B5KCkgaXMgc2VsZWN0ZWQgYnkgS29lbmlnIGxvb2t1cCwgYXMgaGUgaW50ZW5kZWQuPC9wPgo8cD5Vc2VyMiBoYXMgb3RoZXIgbmVlZHMsIGFuZCB3cml0ZXM6PC9wPgo8YmxvY2txdW90ZT4KPHByZT5uYW1lc3BhY2UgdXNlcjIgewogICAgY2xhc3MgbXlfaXRlcmF0b3I7CiAgICAvLyBSZXR1cm5zIHRydWUgaWZmICpjIGlzIGEgdW5pcXVlIGNvcHkgb2YgKmEgYW5kICpiLgogICAgYm9vbCB1bmlxdWVfY29weShteV9pdGVyYXRvciBhLCBteV9pdGVyYXRvciBiLCBteV9pdGVyYXRvciBjKTsKICAgIH08L3ByZT4KPC9ibG9ja3F1b3RlPgo8cD5Vc2VyMiBpcyBzaG9ja2VkIHRvIGZpbmQgbGF0ZXIgdGhhdCBoaXMgZnVsbHktcXVhbGlmaWVkIHVzZSBvZgpzdGQ6OnVuaXF1ZSh1c2VyMjo6bXlfaXRlcmF0b3IsIHVzZXIyOjpteV9pdGVyYXRvciwgdXNlcjI6Om15X2l0ZXJhdG9yKSBmYWlscyB0bwpjb21waWxlIChpZiBoZSdzIGx1Y2t5KS4gTG9va2luZyBpbiB0aGUgc3RhbmRhcmQsIGhlIHNlZXMgdGhlIGZvbGxvd2luZyBFZmZlY3RzCmNsYXVzZSBmb3IgdW5pcXVlKCk6PC9wPgo8YmxvY2txdW90ZT4KICA8cD5FZmZlY3RzOiBFbGltaW5hdGVzIGFsbCBidXQgdGhlIGZpcnN0IGVsZW1lbnQgZnJvbSBldmVyeSBjb25zZWN1dGl2ZSBncm91cAogIG9mIGVxdWFsIGVsZW1lbnRzIHJlZmVycmVkIHRvIGJ5IHRoZSBpdGVyYXRvciBpIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvcgogIHdoaWNoIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZGluZyBjb25kaXRpb25zIGhvbGQ6ICppID09ICooaSAtIDEpIG9yIHByZWQoKmksCiAgKihpIC0gMSkpICE9IGZhbHNlPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPlRoZSBzdGFuZGFyZCBnaXZlcyB1c2VyMiBhYnNvbHV0ZWx5IG5vIHJlYXNvbiB0byB0aGluayBoZSBjYW4gaW50ZXJmZXJlIHdpdGgKc3RkOjp1bmlxdWUgYnkgZGVmaW5pbmcgbmFtZXMgaW4gbmFtZXNwYWNlIHVzZXIyLiBIaXMgc3RhbmRhcmQgbGlicmFyeSBoYXMgYmVlbgpidWlsdCB3aXRoIHRoZSB0ZW1wbGF0ZSBleHBvcnQgZmVhdHVyZSwgc28gaGUgaXMgdW5hYmxlIHRvIGluc3BlY3QgdGhlCmltcGxlbWVudGF0aW9uLiBVc2VyMSBldmVudHVhbGx5IGNvbXBpbGVzIGhpcyBjb2RlIHdpdGggYW5vdGhlciBjb21waWxlciwgYW5kCmhpcyB2ZXJzaW9uIG9mIHVuaXF1ZV9jb3B5IHNpbGVudGx5IHN0b3BzIGJlaW5nIGNhbGxlZC4gRXZlbnR1YWxseSwgaGUgcmVhbGl6ZXMKdGhhdCBoZSB3YXMgZGVwZW5kaW5nIG9uIGFuIGltcGxlbWVudGF0aW9uIGRldGFpbCBvZiBoaXMgbGlicmFyeSBhbmQgaGFkIG5vCnJpZ2h0IHRvIGV4cGVjdCBoaXMgdW5pcXVlX2NvcHkoKSB0byBiZSBjYWxsZWQgcG9ydGFibHkuPC9wPgo8cD5PbiB0aGUgZmFjZSBvZiBpdCwgYW5kIGdpdmVuIGFib3ZlIHNjZW5hcmlvLCBpdCBtYXkgc2VlbSBvYnZpb3VzIHRoYXQgdGhlCmltcGxlbWVudGF0aW9uIG9mIHVuaXF1ZSgpIHNob3duIGlzIG5vbi1jb25mb3JtaW5nIGJlY2F1c2UgaXQgdXNlcyB1bmlxdWVfY29weSgpCnJhdGhlciB0aGFuIDo6c3RkOjp1bmlxdWVfY29weSgpLiBNb3N0IHN0YW5kYXJkIGxpYnJhcnkgaW1wbGVtZW50YXRpb25zLApob3dldmVyLCBzZWVtIHRvIGRpc2FncmVlIHdpdGggdGhpcyBub3Rpb24uPC9wPgo8cD4gPGk+W1Rva3lvOiZuYnNwOyBTdGV2ZSBBZGFtY3p5ayBmcm9tCnRoZSBjb3JlIHdvcmtpbmcgZ3JvdXAgaW5kaWNhdGVzIHRoYXQgInN0ZDo6IiBpcyBzdWZmaWNpZW50OyZuYnNwOwpsZWFkaW5nICI6OiIgcXVhbGlmaWNhdGlvbiBpcyBub3QgcmVxdWlyZWQgYmVjYXVzZSBhbnkgbmFtZXNwYWNlCnF1YWxpZmljYXRpb24gaXMgc3VmZmljaWVudCB0byBzdXBwcmVzcyBLb2VuaWcgbG9va3VwLl08L2k+PC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIHBhcmFncmFwaCBhbmQgYSBub3RlIGF0IHRoZSBlbmQgb2YgCjE3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmdsb2JhbC5mdW5jdGlvbnMiPiBbbGliLmdsb2JhbC5mdW5jdGlvbnNdPC9hPjo8L3A+CjxibG9ja3F1b3RlPgoKPHA+VW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQsIG5vIGdsb2JhbCBvciBub24tbWVtYmVyIGZ1bmN0aW9uIGluIHRoZQpzdGFuZGFyZCBsaWJyYXJ5IHNoYWxsIHVzZSBhIGZ1bmN0aW9uIGZyb20gYW5vdGhlciBuYW1lc3BhY2Ugd2hpY2ggaXMKZm91bmQgdGhyb3VnaCA8aT5hcmd1bWVudC1kZXBlbmRlbnQgbmFtZSBsb29rdXA8L2k+ICgzLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2Jhc2ljLmh0bWwjYmFzaWMubG9va3VwLmtvZW5pZyI+IFtiYXNpYy5sb29rdXAua29lbmlnXTwvYT4pLjwvcD4KCjxwPltOb3RlOiB0aGUgcGhyYXNlICJ1bmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCIgaXMgaW50ZW5kZWQgdG8KYWxsb3cgS29lbmlnIGxvb2t1cCBpbiBjYXNlcyBsaWtlIHRoYXQgb2Ygb3N0cmVhbV9pdGVyYXRvcnM6PGJyPgoKPGJyPgogIEVmZmVjdHM6PC9wPgogIDxibG9ja3F1b3RlPgo8cD4qb3V0X3N0cmVhbSAmbHQ7Jmx0OyB2YWx1ZTs8YnI+CiAgICAgIGlmKGRlbGltICE9IDApICpvdXRfc3RyZWFtICZsdDsmbHQ7IGRlbGltOzxicj4KICAgICAgcmV0dXJuICgqdGhpcyk7PC9wPgogICAgPHA+LS1lbmQgbm90ZV08L3A+CiAgPC9ibG9ja3F1b3RlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9reW86IFRoZSBMV0cgYWdyZWVzIHRoYXQgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUgc3RhbmRhcmQsIGJ1dAppcyBhcyB5ZXQgdW5zdXJlIGlmIHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIHRoZSBiZXN0CnNvbHV0aW9uLiBGdXJ0aGVybW9yZSwgdGhlIExXRyBiZWxpZXZlcyB0aGF0IHRoZSBzYW1lIHByb2JsZW0gb2YKdW5xdWFsaWZpZWQgbGlicmFyeSBuYW1lcyBhcHBsaWVzIHRvIHdvcmRpbmcgaW4gdGhlIHN0YW5kYXJkIGl0c2VsZiwKYW5kIGhhcyBvcGVuZWQgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyOSI+MjI5PC9hPiBhY2NvcmRpbmdseS4gQW55IHJlc29sdXRpb24gb2YKaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPiBzaG91bGQgYmUgY29vcmRpbmF0ZWQgd2l0aCB0aGUgcmVzb2x1dGlvbiBvZgppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjI5Ij4yMjk8L2E+Ll08L2k+PC9wPgoKPHA+PGk+W1Rvcm9udG86IFRoZSBMV0cgaXMgbm90IHN1cmUgaWYgdGhpcyBpcyBhIGRlZmVjdCBpbiB0aGUKc3RhbmRhcmQuICBNb3N0IExXRyBtZW1iZXJzIGJlbGlldmUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiBvZgo8dHQ+c3RkOjp1bmlxdWU8L3R0PiBsaWtlIHRoZSBvbmUgcXVvdGVkIGluIHRoaXMgaXNzdWUgaXMgYWxyZWFkeQppbGxlZ2FsLCBzaW5jZSwgdW5kZXIgY2VydGFpbiBjaXJjdW1zdGFuY2VzLCBpdHMgc2VtYW50aWNzIGFyZSBub3QKdGhvc2Ugc3BlY2lmaWVkIGluIHRoZSBzdGFuZGFyZC4gIFRoZSBzdGFuZGFyZCdzIGRlc2NyaXB0aW9uIG9mCjx0dD51bmlxdWU8L3R0PiBkb2VzIG5vdCBzYXkgdGhhdCBvdmVybG9hZGluZyA8dHQ+YWRqYWNlbnRfZmluZDwvdHQ+CnNob3VsZCBoYXZlIGFueSBlZmZlY3QuXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogQW4gTFdHLXN1Ymdyb3VwIHNwZW50IGFuIGFmdGVybm9vbiB3b3JraW5nIG9uIGlzc3VlcwoyMjUsIDIyNiwgYW5kIDIyOS4gIFRoZWlyIGNvbmNsdXNpb24gd2FzIHRoYXQgdGhlIGlzc3VlcyBzaG91bGQgYmUKc2VwYXJhdGVkIGludG8gYW4gTFdHIHBvcnRpb24gKEhvd2FyZCdzIHBhcGVyLCBOMTM4Nz0wMi0wMDQ1KSwgYW5kIGEKRVdHIHBvcnRpb24gKERhdmUgd2lsbCB3cml0ZSBhIHByb3Bvc2FsKS4gVGhlIExXRyBhbmQgRVdHIGhhZAooc2VwYXJhdGUpIGRpc2N1c3Npb25zIG9mIHRoaXMgcGxhbiB0aGUgbmV4dCBkYXkuICBUaGUgcHJvcG9zZWQKcmVzb2x1dGlvbiBmb3IgdGhpcyBpc3N1ZSBpcyBpbiBhY2NvcmRhbmNlIHdpdGggSG93YXJkJ3MgcGFwZXIuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SXQgY291bGQgYmUgYXJndWVkIHRoYXQgdGhpcyBwcm9wb3NlZCBpc24ndCBzdHJpY3RseSBuZWNlc3NhcnksCiAgdGhhdCB0aGUgU3RhbmRhcmQgZG9lc24ndCBncmFudCBpbXBsZW1lbnRvcnMgbGljZW5zZSB0byB3cml0ZSBhCiAgc3RhbmRhcmQgZnVuY3Rpb24gdGhhdCBiZWhhdmVzIGRpZmZlcmVudGx5IHRoYW4gc3BlY2lmaWVkIGluIHRoZQogIFN0YW5kYXJkIGp1c3QgYmVjYXVzZSBvZiBhbiB1bnJlbGF0ZWQgdXNlci1kZWZpbmVkIG5hbWUgaW4gc29tZQogIG90aGVyIG5hbWVzcGFjZS4gIEhvd2V2ZXIsIHRoaXMgaXMgYXQgd29yc3QgYSBjbGFyaWZpY2F0aW9uLiAgSXQgaXMKICBzdXJlbHkgcmlnaHQgdGhhdCBhbGdvcml0aHNtIHNob3VsZG4ndCBwaWNrIHVwIHJhbmRvbSBuYW1lcywgdGhhdAogIHVzZXItZGVmaW5lZCBuYW1lcyBzaG91bGQgaGF2ZSBubyBlZmZlY3QgdW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQuCiAgSXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNiI+MjI2PC9hPiBkZWFscyB3aXRoIHRoZSBxdWVzdGlvbiBvZiB3aGVuIGl0IGlzCiAgYXBwcm9wcmlhdGUgZm9yIHRoZSBzdGFuZGFyZCB0byBleHBsaWNpdGx5IHNwZWNpZnkgb3RoZXJ3aXNlLjwvcD4KPGhyPgo8YSBuYW1lPSIyMjYiPjxoMz4yMjYuJm5ic3A7VXNlciBzdXBwbGllZCBzcGVjaWFsaXphdGlvbnMgb3Igb3ZlcmxvYWRzIG9mIG5hbWVzcGFjZSBzdGQgZnVuY3Rpb24gdGVtcGxhdGVzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzZXJ2ZWQubmFtZXMiPiBbbGliLnJlc2VydmVkLm5hbWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMSBBcHIgMjAwMDwvcD4KPHA+VGhlIGlzc3VlcyBhcmU6Jm5ic3A7PC9wPgo8cD4xLiBIb3cgY2FuIGEgM3JkIHBhcnR5IGxpYnJhcnkgaW1wbGVtZW50b3IgKGxpYjEpIHdyaXRlIGEgdmVyc2lvbiBvZiBhIHN0YW5kYXJkCmFsZ29yaXRobSB3aGljaCBpcyBzcGVjaWFsaXplZCB0byB3b3JrIHdpdGggaGlzIG93biBjbGFzcyB0ZW1wbGF0ZT8mbmJzcDs8L3A+CjxwPjIuIEhvdyBjYW4gYW5vdGhlciBsaWJyYXJ5IGltcGxlbWVudG9yIChsaWIyKSB3cml0ZSBhIGdlbmVyaWMgYWxnb3JpdGhtIHdoaWNoIAp3aWxsIHRha2UgYWR2YW50YWdlIG9mIHRoZSBzcGVjaWFsaXplZCBhbGdvcml0aG0gaW4gbGliMT88L3A+CjxwPlRoaXMgYXBwZWFycyB0byBiZSB0aGUgb25seSB2aWFibGUgYW5zd2VyIHVuZGVyIGN1cnJlbnQgbGFuZ3VhZ2UgcnVsZXM6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPm5hbWVzcGFjZSBsaWIxCnsKICAgIC8vIGFyYml0cmFyeS1wcmVjaXNpb24gbnVtYmVycyB1c2luZyBUIGFzIGEgYmFzaWMgdW5pdAogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICBjbGFzcyBiaWdfbnVtIHsgLy8uLi4KICAgIH07CiAgICA8L3ByZT4KICA8cHJlPiAgICAvLyBkZWZpbmluZyB0aGlzIGluIG5hbWVzcGFjZSBzdGQgaXMgaWxsZWdhbCAoaXQgd291bGQgYmUgYW4KICAgIC8vIG92ZXJsb2FkKSwgc28gd2UgaG9wZSB1c2VycyB3aWxsIHJlbHkgb24gS29lbmlnIGxvb2t1cAogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICB2b2lkIHN3YXAoYmlnX2ludCZsdDtUJmd0OyZhbXA7LCBiaWdfaW50Jmx0O1QmZ3Q7JmFtcDspOwp9PC9wcmU+CiAgPHByZT4jaW5jbHVkZSAmbHQ7YWxnb3JpdGhtJmd0OwpuYW1lc3BhY2UgbGliMgp7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgIHZvaWQgZ2VuZXJpY19zb3J0KFQqIHN0YXJ0LCBUKiBlbmQpCiAgICB7CiAgICAgICAgICAgIC4uLgogICAgICAgIC8vIHVzaW5nLWRlY2xhcmF0aW9uIHJlcXVpcmVkIHNvIHdlIGNhbiB3b3JrIG9uIGJ1aWx0LWluIHR5cGVzCiAgICAgICAgdXNpbmcgc3RkOjpzd2FwOwogICAgICAgIC8vIHVzZSBLb2VuaWcgbG9va3VwIHRvIGZpbmQgc3BlY2lhbGl6ZWQgYWxnb3JpdGhtIGlmIGF2YWlsYWJsZQogICAgICAgIHN3YXAoKngsICp5KTsKICAgIH0KfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPlRoaXMgYW5zd2VyIGhhcyBzb21lIGRyYXdiYWNrcy4gRmlyc3Qgb2YgYWxsLCBpdCBtYWtlcyB3cml0aW5nIGxpYjIgZGlmZmljdWx0CmFuZCBzb21ld2hhdCBzbGlwcGVyeS4gVGhlIGltcGxlbWVudG9yIG5lZWRzIHRvIHJlbWVtYmVyIHRvIHdyaXRlIHRoZQp1c2luZy1kZWNsYXJhdGlvbiwgb3IgZ2VuZXJpY19zb3J0IHdpbGwgZmFpbCB0byBjb21waWxlIHdoZW4gVCBpcyBhIGJ1aWx0LWluCnR5cGUuIFRoZSBzZWNvbmQgZHJhd2JhY2sgaXMgdGhhdCB0aGUgdXNlIG9mIHRoaXMgc3R5bGUgaW4gbGliMiBlZmZlY3RpdmVseQoicmVzZXJ2ZXMiIG5hbWVzIGluIGFueSBuYW1lc3BhY2Ugd2hpY2ggZGVmaW5lcyB0eXBlcyB3aGljaCBtYXkKZXZlbnR1YWxseSBiZSB1c2VkIHdpdGggbGliMi4gVGhpcyBtYXkgc2VlbSBpbm5vY3VvdXMgYXQgZmlyc3Qgd2hlbiBhcHBsaWVkIHRvCm5hbWVzIGxpa2Ugc3dhcCwgYnV0IGNvbnNpZGVyIG1vcmUgYW1iaWd1b3VzIG5hbWVzIGxpa2UgdW5pcXVlX2NvcHkoKSBpbnN0ZWFkLgpJdCBpcyBlYXN5IHRvIGltYWdpbmUgdGhlIHVzZXIgd2FudGluZyB0byBkZWZpbmUgdGhlc2UgbmFtZXMgZGlmZmVyZW50bHkgaW4gaGlzCm93biBuYW1lc3BhY2UuIEEgZGVmaW5pdGlvbiB3aXRoIHNlbWFudGljcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgc3RhbmRhcmQKbGlicmFyeSBjb3VsZCBjYXVzZSBzZXJpb3VzIHByb2JsZW1zIChzZWUgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPikuPC9wPgo8cD5XaHksIHlvdSBtYXkgYXNrLCBjYW4ndCB3ZSBqdXN0IHBhcnRpYWxseSBzcGVjaWFsaXplIHN0ZDo6c3dhcCgpPyBJdCdzCmJlY2F1c2UgdGhlIGxhbmd1YWdlIGRvZXNuJ3QgYWxsb3cgZm9yIHBhcnRpYWwgc3BlY2lhbGl6YXRpb24gb2YgZnVuY3Rpb24KdGVtcGxhdGVzLiBJZiB5b3Ugd3JpdGU6PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPm5hbWVzcGFjZSBzdGQKewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICB2b2lkIHN3YXAobGliMTo6YmlnX2ludCZsdDtUJmd0OyZhbXA7LCBsaWIxOjpiaWdfaW50Jmx0O1QmZ3Q7JmFtcDspOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+WW91IGhhdmUganVzdCBvdmVybG9hZGVkIHN0ZDo6c3dhcCwgd2hpY2ggaXMgaWxsZWdhbCB1bmRlciB0aGUgY3VycmVudApsYW5ndWFnZSBydWxlcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBmb2xsb3dpbmcgZnVsbCBzcGVjaWFsaXphdGlvbiBpcyBsZWdhbDo8L3A+CjxibG9ja3F1b3RlPgogIDxwcmU+bmFtZXNwYWNlIHN0ZAp7CiAgICB0ZW1wbGF0ZSAmbHQ7Jmd0OwogICAgdm9pZCBzd2FwKGxpYjE6Om90aGVyX3R5cGUmYW1wOywgbGliMTo6b3RoZXJfdHlwZSZhbXA7KTsKfTwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UaGlzIGlzc3VlIHJlZmxlY3RzIGNvbmNlcm5zIHJhaXNlZCBieSB0aGUgIk5hbWVzcGFjZSBpc3N1ZQp3aXRoIHNwZWNpYWxpemVkIHN3YXAiIHRocmVhZCBvbiBjb21wLmxhbmcuYysrLm1vZGVyYXRlZC4gQQpzaW1pbGFyIHNldCBvZiBjb25jZXJucyB3YXMgZWFybGllciByYWlzZWQgb24gdGhlIGJvb3N0Lm9yZyBtYWlsaW5nCmxpc3QgYW5kIHRoZSBBQ0NVLWdlbmVyYWwgbWFpbGluZyBsaXN0LiAgQWxzbyBzZWUgbGlicmFyeSByZWZsZWN0b3IKbWVzc2FnZSBjKytzdGQtbGliLTczNTQuPC9wPgoKPHA+CkouIEMuIHZhbiBXaW5rZWwgcG9pbnRzIG91dCAoaW4gYysrc3RkLWxpYi05NTY1KSBhbm90aGVyIHVuZXhwZWN0ZWQKZmFjdDogaXQncyBpbXBvc3NpYmxlIHRvIG91dHB1dCBhIGNvbnRhaW5lciBvZiBzdGQ6OnBhaXIncyB1c2luZyBjb3B5CmFuZCBhbiBvc3RyZWFtX2l0ZXJhdG9yLCBhcyBsb25nIGFzIGJvdGggcGFpci1tZW1iZXJzIGFyZSBidWlsdC1pbiBvcgpzdGQ6OiB0eXBlcy4gIFRoYXQncyBiZWNhdXNlIGEgdXNlci1kZWZpbmVkIG9wZXJhdG9yJmx0OyZsdDsgZm9yIChmb3IKZXhhbXBsZSkgc3RkOjpwYWlyJmx0O2NvbnN0IHN0ZDo6c3RyaW5nLCBpbnQmZ3Q7IHdpbGwgbm90IGJlIGZvdW5kOgpsb29rdXAgZm9yIG9wZXJhdG9yJmx0OyZsdDsgd2lsbCBiZSBwZXJmb3JtZWQgb25seSBpbiBuYW1lc3BhY2Ugc3RkLgpPcGluaW9ucyBkaWZmZXJlZCBvbiB3aGV0aGVyIG9yIG5vdCB0aGlzIHdhcyBhIGRlZmVjdCwgYW5kLCBpZiBzbywKd2hldGhlciB0aGUgZGVmZWN0IGlzIHRoYXQgc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdXNlci1kZWZpbmVkCmZ1bmN0aW9uYWxpdHkgYW5kIHN0ZCwgb3Igd2hldGhlciBpdCdzIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgZG9lcwpub3QgcHJvdmlkZSBhbiBvcGVyYXRvciZsdDsmbHQ7IGZvciBzdGQ6OnBhaXImbHQ7Jmd0Oy4KPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+QWRvcHQgdGhlIHdvcmRpbmcgcHJvcG9zZWQgaW4gSG93YXJkIEhpbm5hbnQncyBwYXBlcgogIE4xNTIzPTAzLTAxMDYsICJQcm9wb3NlZCBSZXNvbHV0aW9uIFRvIExXRyBpc3N1ZXMgMjI1LCAyMjYsIDIyOSIuPC9wPgoKCjxwPjxpPltUb2t5bzogU3VtbWFyeSwgIlRoZXJlIGlzIG5vIGNvbmZvcm1pbmcgd2F5IHRvIGV4dGVuZApzdGQ6OnN3YXAgZm9yIHVzZXIgZGVmaW5lZCB0ZW1wbGF0ZXMuIiZuYnNwOyBUaGUgTFdHIGFncmVlcyB0aGF0CnRoZXJlIGlzIGEgcHJvYmxlbS4gIFdvdWxkIGxpa2UgbW9yZSBpbmZvcm1hdGlvbiBiZWZvcmUKcHJvY2VlZGluZy4gVGhpcyBtYXkgYmUgYSBjb3JlIGlzc3VlLiAgQ29yZSBpc3N1ZSAyMjkgaGFzIGJlZW4gb3BlbmVkCnRvIGRpc2N1c3MgdGhlIGNvcmUgYXNwZWN0cyBvZiB0aGlzIHByb2JsZW0uIEl0IHdhcyBhbHNvIG5vdGVkIHRoYXQKc3VibWlzc2lvbnMgcmVnYXJkaW5nIHRoaXMgaXNzdWUgaGF2ZSBiZWVuIHJlY2VpdmVkIGZyb20gc2V2ZXJhbApzb3VyY2VzLCBidXQgdG9vIGxhdGUgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBpc3N1ZXMgbGlzdC4KXTwvaT48L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogQSBwYXBlciB3aXRoIHNldmVyYWwgcHJvcG9zZWQgcmVzb2x1dGlvbnMsCkoxNi8wMC0wMDI5PT1XRzIxL04xMjUyLCAiU2hhZGVzIG9mIG5hbWVzcGFjZSBzdGQgZnVuY3Rpb25zCiIgYnkgQWxhbiBHcmlmZml0aHMsIGlzIGluIHRoZSBQb3N0LVRva3lvIG1haWxpbmcuIEl0CnNob3VsZCBiZSBjb25zaWRlcmVkIGEgcGFydCBvZiB0aGlzIGlzc3VlLl08L2k+PC9wPgoKPHA+PGk+W1Rvcm9udG86IERhdmUgQWJyYWhhbXMgYW5kIFBldGVyIERpbW92IGhhdmUgcHJvcG9zZWQgYQpyZXNvbHV0aW9uIHRoYXQgaW52b2x2ZXMgY29yZSBjaGFuZ2VzOiBpdCB3b3VsZCBhZGQgcGFydGlhbApzcGVjaWFsaXphdGlvbiBvZiBmdW5jdGlvbiB0ZW1wbGF0ZS4gIFRoZSBDb3JlIFdvcmtpbmcgR3JvdXAgaXMKcmVsdWN0YW50IHRvIGFkZCBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIEl0IGlzCnZpZXdlZCBhcyBhIGxhcmdlIGNoYW5nZSwgQ1dHIGJlbGlldmVzIHRoYXQgcHJvcG9zYWwgcHJlc2VudGVkIGxlYXZlcwpzb21lIHN5bnRhY3RpYyBpc3N1ZXMgdW5hbnN3ZXJlZDsgaWYgdGhlIENXRyBkb2VzIGFkZCBwYXJ0aWFsCnNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcywgaXQgd2lzaGVzIHRvIGRldmVsb3AgaXRzIG93bgpwcm9wb3NhbC4gIFRoZSBMV0cgY29udGludWVzIHRvIGJlbGlldmUgdGhhdCB0aGVyZSBpcyBhIHNlcmlvdXMKcHJvYmxlbTogdGhlcmUgaXMgbm8gZ29vZCB3YXkgZm9yIHVzZXJzIHRvIGZvcmNlIHRoZSBsaWJyYXJ5IHRvIHVzZQp1c2VyIHNwZWNpYWxpemF0aW9ucyBvZiBnZW5lcmljIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb25zLCBhbmQgaW4KY2VydGFpbiBjYXNlcyAoZS5nLiB0cmFuc2NlbmRlbnRhbCBmdW5jdGlvbnMgY2FsbGVkIGJ5Cjx0dD52YWxhcnJheTwvdHQ+IGFuZCA8dHQ+Y29tcGxleDwvdHQ+KSB0aGlzIGlzIGltcG9ydGFudC4gIEtvZW5pZwpsb29rdXAgaXNuJ3QgYWRlcXVhdGUsIHNpbmNlIG5hbWVzIHdpdGhpbiB0aGUgbGlicmFyeSBtdXN0IGJlCnF1YWxpZmllZCB3aXRoIDx0dD5zdGQ8L3R0PiAoc2VlIGlzc3VlIDIyNSksIHNwZWNpYWxpemF0aW9uIGRvZXNuJ3QKd29yayAod2UgZG9uJ3QgaGF2ZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcyksIGFuZAp1c2VycyBhcmVuJ3QgcGVybWl0dGVkIHRvIGFkZCBvdmVybG9hZHMgd2l0aGluIG5hbWVzcGFjZSBzdGQuCl08L2k+PC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IERpc2N1c3NlZCBhdCBsZW5ndGgsIHdpdGggbm8gY29uc2Vuc3VzLiAgUmVsZXZhbnQKcGFwZXJzIGluIHRoZSBwcmUtQ29wZW5oYWdlbiBtYWlsaW5nOiBOMTI4OSwgTjEyOTUsIE4xMjk2LiAgRGlzY3Vzc2lvbgpmb2N1c2VkIG9uIGZvdXIgb3B0aW9ucy4gKDEpIFJlbGF4IHJlc3RyaWN0aW9ucyBvbiBvdmVybG9hZHMgd2l0aGluCm5hbWVzcGFjZSBzdGQuICgyKSBNYW5kYXRlIHRoYXQgdGhlIHN0YW5kYXJkIGxpYnJhcnkgdXNlIHVucXVhbGlmaWVkCmNhbGxzIGZvciA8dHQ+c3dhcDwvdHQ+IGFuZCBwb3NzaWJseSBvdGhlciBmdW5jdGlvbnMuICAoMykgSW50cm9kdWNlCmhlbHBlciBjbGFzcyB0ZW1wbGF0ZXMgZm9yIDx0dD5zd2FwPC90dD4gYW5kIHBvc3NpYmx5IG90aGVyIGZ1bmN0aW9ucy4KKDQpIEludHJvZHVjZSBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uIG9mIGZ1bmN0aW9uIHRlbXBsYXRlcy4gIEV2ZXJ5Cm9wdGlvbiBoYWQgYm90aCBzdXBwb3J0IGFuZCBvcHBvc2l0aW9uLiAgU3RyYXcgcG9sbCAoZmlyc3QgbnVtYmVyIGlzCnN1cHBvcnQsIHNlY29uZCBpcyBzdHJvbmdseSBvcHBvc2VkKTogKDEpIDYsIDQ7ICgyKSA2LCA3OyAoMykgMywgODsKKDQpIDQsIDQuXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogRGlzY3Vzc2VkLCBhZ2FpbiBubyBjb25zZW5zdXMuICBIZXJiIHByZXNlbnRlZCBhbgphcmd1bWVudCB0aGF0IGEgdXNlciB3aG8gaXMgZGVmaW5pbmcgYSB0eXBlIDx0dD5UPC90dD4gd2l0aCBhbgphc3NvY2lhdGVkIDx0dD5zd2FwPC90dD4gc2hvdWxkIG5vdCBiZSBleHBlY3RlZCB0byBwdXQgdGhhdAo8dHQ+c3dhcDwvdHQ+IGluIG5hbWVzcGFjZSBzdGQsIGVpdGhlciBieSBvdmVybG9hZGluZyBvciBieSBwYXJ0aWFsCnNwZWNpYWxpemF0aW9uLiAgVGhlIGFyZ3VtZW50IGlzIHRoYXQgPHR0PnN3YXA8L3R0PiBpcyBwYXJ0IG9mCjx0dD5UPC90dD4ncyBpbnRlcmZhY2UsIGFuZCB0aHVzIHNob3VsZCB0byBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMKPHR0PlQ8L3R0PiBhbmQgb25seSBpbiB0aGF0IG5hbWVzcGFjZS4gIElmIHdlIGFjY2VwdCB0aGlzIGFyZ3VtZW50LAp0aGUgY29uc2VxdWVuY2UgaXMgdGhhdCBzdGFuZGFyZCBsaWJyYXJ5IGZ1bmN0aW9ucyBzaG91bGQgdXNlCnVucXVhbGlmaWVkIGNhbGwgb2YgPHR0PnN3YXA8L3R0Pi4gIChBbmQgd2hpY2ggb3RoZXIgZnVuY3Rpb25zPyBBbnk/KQpBIHNtYWxsIGdyb3VwIChOYXRoYW4sIEhvd2FyZCwgSmVyZW15LCBEYXZlLCBNYXR0LCBXYWx0ZXIsIE1hcmMpIHdpbGwKdHJ5IHRvIHB1dCB0b2dldGhlciBhIHByb3Bvc2FsIGJlZm9yZSB0aGUgbmV4dCBtZWV0aW5nLl08L2k+PC9wPgoKPHA+PGk+W0N1cmHnYW86IEFuIExXRy1zdWJncm91cCBzcGVudCBhbiBhZnRlcm5vb24gd29ya2luZyBvbiBpc3N1ZXMKMjI1LCAyMjYsIGFuZCAyMjkuICBUaGVpciBjb25jbHVzaW9uIHdhcyB0aGF0IHRoZSBpc3N1ZXMgc2hvdWxkIGJlCnNlcGFyYXRlZCBpbnRvIGFuIExXRyBwb3J0aW9uIChIb3dhcmQncyBwYXBlciwgTjEzODc9MDItMDA0NSksIGFuZCBhCkVXRyBwb3J0aW9uIChEYXZlIHdpbGwgd3JpdGUgYSBwcm9wb3NhbCkuIFRoZSBMV0cgYW5kIEVXRyBoYWQKKHNlcGFyYXRlKSBkaXNjdXNzaW9ucyBvZiB0aGlzIHBsYW4gdGhlIG5leHQgZGF5LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gaXMgdGhlIG9uZSBwcm9wb3NlZCBieSBIb3dhcmQuXTwvaT48L3A+Cgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIExXRyBhZ3JlZWQgd2l0aCB0aGUgZ2VuZXJhbCBkaXJlY3Rpb24gb2YKICBIb3dhcmQncyBwYXBlciwgTjEzODcuICAoUm91Z2hseTogS29lbmlnIGxvb2t1cCBpcyBkaXNhYmxlZCB1bmxlc3MKICB3ZSBzYXkgb3RoZXJ3aXNlOyB0aGlzIGlzc3VlIGlzIGFib3V0IHdoZW4gd2UgZG8gc2F5IG90aGVyd2lzZS4pCiAgSG93ZXZlciwgdGhlcmUgd2VyZSBjb25jZXJucyBhYm91dCB3b3JkaW5nLiAgSG93YXJkIHdpbGwgcHJvdmlkZSBuZXcKICB3b3JkaW5nLiAgQmlsbCBhbmQgSmVyZW15IHdpbGwgcmV2aWV3IGl0Ll08L2k+PC9wPgoKPHA+PGk+W0tvbmE6IEhvd2FyZCBwcm9wb3NlZCB0aGUgbmV3IHdvcmRpbmcuICBUaGUgTFdHIGFjY2VwdGVkIGhpcwogIHByb3Bvc2VkIHJlc29sdXRpb24uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5mb3JtYWxseTogaW50cm9kdWNlIGEgU3dhcHBhYmxlIGNvbmNlcHQsIGFuZCBzcGVjaWZ5IHRoYXQgdGhlCiAgdmFsdWUgdHlwZXMgb2YgdGhlIGl0ZXJhdG9ycyBwYXNzZWQgdG8gY2VydGFpbiBzdGFuZGFyZCBhbGdvcml0aG1zCiAgKHN1Y2ggYXMgaXRlcl9zd2FwLCBzd2FwX3JhbmdlcywgcmV2ZXJzZSwgcm90YXRlLCBhbmQgc29ydCkgY29uZm9ybQogIHRvIHRoYXQgY29uY2VwdC4gIFRoZSBTd2FwcGFibGUgY29uY2VwdCB3aWxsIG1ha2UgaXQgY2xlYXIgdGhhdAogIHRoZXNlIGFsZ29yaXRobXMgdXNlIHVucXVhbGlmaWVkIGxvb2t1cCBmb3IgdGhlIGNhbGxzCiAgdG8gPHR0PnN3YXA8L3R0Pi4gIEFsc28sIGluIDI2LjMuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnZhbGFycmF5LnRyYW5zY2VuZCI+IFtsaWIudmFsYXJyYXkudHJhbnNjZW5kXTwvYT4gcGFyYWdyYXBoIDEsCiAgc3RhdGUgdGhhdCB0aGUgdmFsYXJyYXkgdHJhbnNjZW5kZW50YWxzIHVzZSB1bnF1YWxpZmllZCBsb29rdXAuPC9wPgo8aHI+CjxhIG5hbWU9IjIyNyI+PGgzPjIyNy4mbmJzcDtzdGQ6OnN3YXAoKSBzaG91bGQgcmVxdWlyZSBDb3B5Q29uc3RydWN0aWJsZSBvciBEZWZhdWx0Q29uc3RydWN0aWJsZSBhcmd1bWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuc3dhcCI+IFtsaWIuYWxnLnN3YXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1RDIj5UQzwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEYXZlIEFicmFoYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA5IEFwciAyMDAwPC9wPgo8cD4yNS4yLjIgcmVhZHM6PC9wPgo8YmxvY2txdW90ZT4KICA8cD48dHQ+ICB0ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyB2b2lkIHN3YXAoVCZhbXA7IGEsIFQmYW1wOyBiKTs8L3R0Pjxicj4KICA8YnI+CiAgUmVxdWlyZXM6ICAgIFR5cGUgVCBpcyBBc3NpZ25hYmxlIChfbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNfKS48YnI+CiAgRWZmZWN0czogICAgRXhjaGFuZ2VzIHZhbHVlcyBzdG9yZWQgaW4gdHdvIGxvY2F0aW9ucy48L3A+CjwvYmxvY2txdW90ZT4KPHA+VGhlIG9ubHkgcmVhc29uYWJsZSoqIGdlbmVyaWMgaW1wbGVtZW50YXRpb24gb2Ygc3dhcCByZXF1aXJlcyBjb25zdHJ1Y3Rpb24gb2YgYSAKICAgbmV3IHRlbXBvcmFyeSBjb3B5IG9mIG9uZSBvZiBpdHMgYXJndW1lbnRzOjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+dGVtcGxhdGUmbHQ7Y2xhc3MgVCZndDsgdm9pZCBzd2FwKFQmYW1wOyBhLCBUJmFtcDsgYik7CiAgewogICAgICBUIHRtcChhKTsKICAgICAgYSA9IGI7CiAgICAgIGIgPSB0bXA7CiAgfTwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPkJ1dCBhIHR5cGUgd2hpY2ggaXMgb25seSBBc3NpZ25hYmxlIGNhbm5vdCBiZSBzd2FwcGVkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb24uPC9wPgo8cD4qKlllcywgdGhlcmUncyBhbHNvIGFuIHVucmVhc29uYWJsZSBpbXBsZW1lbnRhdGlvbiB3aGljaCB3b3VsZCByZXF1aXJlIFQgdG8gYmUgCiAgIERlZmF1bHRDb25zdHJ1Y3RpYmxlIGluc3RlYWQgb2YgQ29weUNvbnN0cnVjdGlibGUuIEkgZG9uJ3QgdGhpbmsgdGhpcyBpcyB3b3J0aHkgCiAgIG9mIGNvbnNpZGVyYXRpb246PC9wPgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyB2b2lkIHN3YXAoVCZhbXA7IGEsIFQmYW1wOyBiKTsKewogICAgVCB0bXA7CiAgICB0bXAgPSBhOwogICAgYSA9IGI7CiAgICBiID0gdG1wOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjUuMi4yIHBhcmFncmFwaCAxIGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+ICBSZXF1aXJlczogVHlwZSBUIGlzIEFzc2lnbmFibGUgKDIzLjEpLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgo8cD4gIFJlcXVpcmVzOiBUeXBlIFQgaXMgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMykgYW5kIEFzc2lnbmFibGUgKDIzLjEpPC9wPgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjI4Ij48aDM+MjI4LiZuYnNwO0luY29ycmVjdCBzcGVjaWZpY2F0aW9uIG9mICIuLi5fYnluYW1lIiBmYWNldHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3JpZXMiPiBbbGliLmxvY2FsZS5jYXRlZ29yaWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIEFwciAyMDAwPC9wPgo8cD5UaGUgc2VjdGlvbnMgMjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lIj4gW2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lXTwvYT4sIDIyLjIuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZS5zcGVjaWFsIj4gW2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lLnNwZWNpYWxdPC9hPiwKMjIuMi4xLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZV08L2E+LCAyMi4yLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5udW1wdW5jdC5ieW5hbWUiPiBbbGliLmxvY2FsZS5udW1wdW5jdC5ieW5hbWVdPC9hPiwgMjIuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29sbGF0ZS5ieW5hbWUiPiBbbGliLmxvY2FsZS5jb2xsYXRlLmJ5bmFtZV08L2E+LCAyMi4yLjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWUiPiBbbGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWVdPC9hPiwgMjIuMi42LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXlwdW5jdC5ieW5hbWUiPiBbbGliLmxvY2FsZS5tb25leXB1bmN0LmJ5bmFtZV08L2E+LCBhbmQgMjIuMi43LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lIj4gW2xpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lXTwvYT4gb3ZlcnNwZWNpZnkgdGhlCmRlZmluaXRpb25zIG9mIHRoZSAiLi4uX2J5bmFtZSIgY2xhc3NlcyBieSBsaXN0aW5nIGEgYnVuY2gKb2YgdmlydHVhbCBmdW5jdGlvbnMuIEF0IHRoZSBzYW1lIHRpbWUsIG5vIHNlbWFudGljcyBvZiB0aGVzZQpmdW5jdGlvbnMgYXJlIGRlZmluZWQuIFJlYWwgaW1wbGVtZW50YXRpb25zIGRvIG5vdCBkZWZpbmUgdGhlc2UKZnVuY3Rpb25zIGJlY2F1c2UgdGhlIGZ1bmN0aW9uYWwgcGFydCBvZiB0aGUgZmFjZXRzIGlzIGFjdHVhbGx5CmltcGxlbWVudGVkIGluIHRoZSBjb3JyZXNwb25kaW5nIGJhc2UgY2xhc3NlcyBhbmQgdGhlIGNvbnN0cnVjdG9yIG9mCnRoZSAiLi4uX2J5bmFtZSIgdmVyc2lvbiBqdXN0IHByb3ZpZGVzIHN1aXRhYmxlIGRhdGUgdXNlZCBieQp0aGVzZSBpbXBsZW1lbnRhdGlvbnMuIEZvciBleGFtcGxlLCB0aGUgJ251bXB1bmN0JyBtZXRob2RzIGp1c3QgcmV0dXJuCnZhbHVlcyBmcm9tIGEgc3RydWN0LiBUaGUgYmFzZSBjbGFzcyB1c2VzIGEgc3RhdGljYWxseSBpbml0aWFsaXplZApzdHJ1Y3Qgd2hpbGUgdGhlIGRlcml2ZWQgdmVyc2lvbiByZWFkcyB0aGUgY29udGVudHMgb2YgdGhpcyBzdHJ1Y3QKZnJvbSBhIHRhYmxlLiAgSG93ZXZlciwgbm8gdmlydHVhbCBmdW5jdGlvbiBpcyBkZWZpbmVkIGluCidudW1wdW5jdF9ieW5hbWUnLjwvcD4KCjxwPkZvciBtb3N0IGNsYXNzZXMgdGhpcyBkb2VzIG5vdCBpbXBvc2UgYSBwcm9ibGVtIGJ1dCBzcGVjaWZpY2FsbHkKZm9yICdjdHlwZScgaXQgZG9lczogVGhlIHNwZWNpYWxpemF0aW9uIGZvciAnY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7JwppcyByZXF1aXJlZCBiZWNhdXNlIG90aGVyd2lzZSB0aGUgc2VtYW50aWNzIHdvdWxkIGNoYW5nZSBkdWUgdG8gdGhlCnZpcnR1YWwgZnVuY3Rpb25zIGRlZmluZWQgaW4gdGhlIGdlbmVyYWwgdmVyc2lvbiBmb3IgJ2N0eXBlX2J5bmFtZSc6CkluICdjdHlwZSZsdDtjaGFyJmd0OycgdGhlIG1ldGhvZCAnZG9faXMoKScgaXMgbm90IHZpcnR1YWwgYnV0IGl0IGlzCm1hZGUgdmlydHVhbCBpbiBib3RoICdjdHlwZSZsdDtjVCZndDsnIGFuZCAnY3R5cGVfYnluYW1lJmx0O2NUJmd0OycuClRodXMsIGEgY2xhc3MgZGVyaXZlZCBmcm9tICdjdHlwZV9ieW5hbWUmbHQ7Y2hhciZndDsnIGNhbiB0ZWxsIHdoZXRoZXIKdGhpcyBjbGFzcyBpcyBzcGVjaWFsaXplZCBvciBub3QgdW5kZXIgdGhlIGN1cnJlbnQgc3BlY2lmaWNhdGlvbjoKV2l0aG91dCB0aGUgc3BlY2lhbGl6YXRpb24sICdkb19pcygpJyBpcyB2aXJ0dWFsIHdoaWxlIHdpdGgKc3BlY2lhbGl6YXRpb24gaXQgaXMgbm90IHZpcnR1YWwuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuMiAobGliLmxvY2FsZS5jdHlwZS5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCZndDsKICAgICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1YmxpYyBjdHlwZSZsdDtjaGFyVCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGN0eXBlJmx0O2NoYXJUJmd0Ozo6bWFzayBtYXNrOwogICAgICAgICBleHBsaWNpdCBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmN0eXBlX2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjEuNiAobGliLmxvY2FsZS5jb2RlY3Z0LmJ5bmFtZSkgdG8gYmVjb21lOjwvcD4KPHByZT4gICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBpbnRlcm5ULCBjbGFzcyBleHRlcm5ULCBjbGFzcyBzdGF0ZVQmZ3Q7CiAgICAgIGNsYXNzIGNvZGVjdnRfYnluYW1lIDogcHVibGljIGNvZGVjdnQmbHQ7aW50ZXJuVCwgZXh0ZXJuVCwgc3RhdGVUJmd0OyB7CiAgICAgIHB1YmxpYzoKICAgICAgIGV4cGxpY2l0IGNvZGVjdnRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2RlY3Z0X2J5bmFtZSgpOyAgICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9CjwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi4zLjIgKGxpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBudW1wdW5jdF9ieW5hbWUgOiBwdWJsaWMgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7IHsKICAgICAvLyAgdGhpcyBjbGFzcyBpcyBzcGVjaWFsaXplZCBmb3IgIGNoYXIgIGFuZCAgd2NoYXJfdC4KICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBjaGFyVCAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgc3RyaW5nX3R5cGU7CiAgICAgICAgIGV4cGxpY2l0IG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMgPSAwKTsKICAgICAgIHByb3RlY3RlZDoKICAgICAgICB+bnVtcHVuY3RfYnluYW1lKCk7ICAgICAgICAgIC8vICB2aXJ0dWFsCiAgICAgICB9OwogICAgIH08L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNC4yIChsaWIubG9jYWxlLmNvbGxhdGUuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBjb2xsYXRlX2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlJmx0O2NoYXJUJmd0OyB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyBzdHJpbmdfdHlwZTsKICAgICAgICAgZXhwbGljaXQgY29sbGF0ZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfmNvbGxhdGVfYnluYW1lKCk7ICAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuMiAobGliLmxvY2FsZS50aW1lLmdldC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgSW5wdXRJdGVyYXRvciA9IGlzdHJlYW1idWZfaXRlcmF0b3ImbHQ7Y2hhclQmZ3Q7ICZndDsKICAgICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX2dldCZsdDtjaGFyVCwgSW5wdXRJdGVyYXRvciZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIHRpbWVfYmFzZTo6ZGF0ZW9yZGVyIGRhdGVvcmRlcjsKICAgICAgICAgdHlwZWRlZiBJbnB1dEl0ZXJhdG9yICAgICAgICBpdGVyX3R5cGU8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfnRpbWVfZ2V0X2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPiZuYnNwOyBDaGFuZ2Ugc2VjdGlvbiAyMi4yLjUuNCAobGliLmxvY2FsZS50aW1lLnB1dC5ieW5hbWUpIHRvIGJlY29tZTo8L3A+CjxwcmU+ICAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBjaGFyVCwgY2xhc3MgT3V0cHV0SXRlcmF0b3IgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yJmx0O2NoYXJUJmd0OyAmZ3Q7CiAgICAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQmbHQ7Y2hhclQsIE91dHB1dEl0ZXJhdG9yJmd0OwogICAgICAgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIGNoYXJUICAgICAgICAgIGNoYXJfdHlwZTsKICAgICAgICAgdHlwZWRlZiBPdXRwdXRJdGVyYXRvciBpdGVyX3R5cGU7PC9wcmU+CjxwcmU+ICAgICAgICAgZXhwbGljaXQgdGltZV9wdXRfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH50aW1lX3B1dF9ieW5hbWUoKTsgICAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfSI8L3ByZT4KPHA+Jm5ic3A7IENoYW5nZSBzZWN0aW9uIDIyLjIuNi40IChsaWIubG9jYWxlLm1vbmV5cHVuY3QuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQsIGJvb2wgSW50bCA9IGZhbHNlJmd0OwogICAgICAgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWUgOiBwdWJsaWMgbW9uZXlwdW5jdCZsdDtjaGFyVCwgSW50bCZndDsgewogICAgICAgcHVibGljOgogICAgICAgICB0eXBlZGVmIG1vbmV5X2Jhc2U6OnBhdHRlcm4gcGF0dGVybjsKICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmcmbHQ7Y2hhclQmZ3Q7IHN0cmluZ190eXBlOzwvcHJlPgo8cHJlPiAgICAgICAgIGV4cGxpY2l0IG1vbmV5cHVuY3RfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyA9IDApOwogICAgICAgcHJvdGVjdGVkOgogICAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpOyAgICAgICAgLy8gIHZpcnR1YWwKICAgICAgIH07CiAgICAgfTwvcHJlPgo8cD4mbmJzcDsgQ2hhbmdlIHNlY3Rpb24gMjIuMi43LjIgKGxpYi5sb2NhbGUubWVzc2FnZXMuYnluYW1lKSB0byBiZWNvbWU6PC9wPgo8cHJlPiAgICAgbmFtZXNwYWNlIHN0ZCB7CiAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVzc2FnZXMmbHQ7Y2hhclQmZ3Q7IHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgdHlwZWRlZiBtZXNzYWdlc19iYXNlOjpjYXRhbG9nIGNhdGFsb2c7CiAgICAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nJmx0O2NoYXJUJmd0OyAgICBzdHJpbmdfdHlwZTs8L3ByZT4KPHByZT4gICAgICAgICBleHBsaWNpdCBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCByZWZzID0gMCk7CiAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgfm1lc3NhZ2VzX2J5bmFtZSgpOyAgICAgICAgICAvLyAgdmlydHVhbAogICAgICAgfTsKICAgICB9PC9wcmU+CjxwPlJlbW92ZSBzZWN0aW9uIDIyLjIuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLmJ5bmFtZS5zcGVjaWFsIj4gW2xpYi5sb2NhbGUuY3R5cGUuYnluYW1lLnNwZWNpYWxdPC9hPiBjb21wbGV0ZWx5IChiZWNhdXNlIGluCnRoaXMgY2FzZSBvbmx5IHRob3NlIG1lbWJlcnMgYXJlIGRlZmluZWQgdG8gYmUgdmlydHVhbCB3aGljaCBhcmUKZGVmaW5lZCB0byBiZSB2aXJ0dWFsIGluICdjdHlwZSZsdDtjVCZndDsnLik8L3A+Cgo8cD48aT5bUG9zdC1Ub2t5bzogRGlldG1hciBL/GhsIHN1Ym1pdHRlZCB0aGlzIGlzc3VlIGF0IHRoZSByZXF1ZXN0IG9mCnRoZSBMV0cgdG8gc29sdmUgdGhlIHVuZGVybHlpbmcgcHJvYmxlbXMgcmFpc2VkIGJ5IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEzOCI+MTM4PC9hPi5dPC9pPjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyByZXZpc2VkIHNsaWdodGx5LCB0byByZW1vdmUKdGhyZWUgbGFzdCB2aXJ0dWFsIGZ1bmN0aW9ucyBmcm9tIDx0dD5tZXNzYWdlc19ieW5hbWU8L3R0Pi5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMjI5Ij48aDM+MjI5LiZuYnNwO1VucXVhbGlmaWVkIHJlZmVyZW5jZXMgb2Ygb3RoZXIgbGlicmFyeSBlbnRpdGllczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmNvbnRlbnRzIj4gW2xpYi5jb250ZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTkgQXByIDIwMDA8L3A+CjxwPlRocm91Z2hvdXQgdGhlIGxpYnJhcnkgY2hhcHRlcnMsIHRoZSBkZXNjcmlwdGlvbnMgb2YgbGlicmFyeSBlbnRpdGllcyByZWZlcgp0byBvdGhlciBsaWJyYXJ5IGVudGl0aWVzIHdpdGhvdXQgbmVjZXNzYXJpbHkgcXVhbGlmeWluZyB0aGUgbmFtZXMuPC9wPgoKPHA+Rm9yIGV4YW1wbGUsIHNlY3Rpb24gMjUuMi4yICJTd2FwIiBkZXNjcmliZXMgdGhlIGVmZmVjdCBvZgpzd2FwX3JhbmdlcyBpbiB0ZXJtcyBvZiB0aGUgdW5xdWFsaWZpZWQgbmFtZSAic3dhcCIuIFRoaXMgc2VjdGlvbgpjb3VsZCByZWFzb25hYmx5IGJlIGludGVycHJldGVkIHRvIG1lYW4gdGhhdCB0aGUgbGlicmFyeSBtdXN0IGJlIGltcGxlbWVudGVkIHNvCmFzIHRvIGRvIGEgbG9va3VwIG9mIHRoZSB1bnF1YWxpZmllZCBuYW1lICJzd2FwIiwgYWxsb3dpbmcgdXNlcnMgdG8Kb3ZlcnJpZGUgYW55IDo6c3RkOjpzd2FwIGZ1bmN0aW9uIHdoZW4gS29lbmlnIGxvb2t1cCBhcHBsaWVzLjwvcD4KCjxwPkFsdGhvdWdoIGl0IHdvdWxkIGhhdmUgYmVlbiBiZXN0IHRvIHVzZSBleHBsaWNpdCBxdWFsaWZpY2F0aW9uIHdpdGgKIjo6c3RkOjoiIHRocm91Z2hvdXQsIHRvbyBtYW55IGxpbmVzIGluIHRoZSBzdGFuZGFyZCB3b3VsZCBoYXZlIHRvIGJlCmFkanVzdGVkIHRvIG1ha2UgdGhhdCBjaGFuZ2UgaW4gYSBUZWNobmljYWwgQ29ycmlnZW5kdW0uPC9wPgoKPHA+SXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzE4MiI+MTgyPC9hPiwgd2hpY2ggYWRkcmVzc2VzIHF1YWxpZmljYXRpb24gb2YKPHR0PnNpemVfdDwvdHQ+LCBpcyBhIHNwZWNpYWwgY2FzZSBvZiB0aGlzLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+VG8gc2VjdGlvbiAxNy40LjEuMSAiTGlicmFyeSBjb250ZW50cyIgQWRkIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBoOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+V2hlbmV2ZXIgYSBuYW1lIHggZGVmaW5lZCBpbiB0aGUgc3RhbmRhcmQgbGlicmFyeSBpcyBtZW50aW9uZWQsIHRoZSBuYW1lIHgKICBpcyBhc3N1bWVkIHRvIGJlIGZ1bGx5IHF1YWxpZmllZCBhcyA6OnN0ZDo6eCwgdW5sZXNzIGV4cGxpY2l0bHkgZGVzY3JpYmVkCiAgb3RoZXJ3aXNlLiBGb3IgZXhhbXBsZSwgaWYgdGhlIEVmZmVjdHMgc2VjdGlvbiBmb3IgbGlicmFyeSBmdW5jdGlvbiBGIGlzCiAgZGVzY3JpYmVkIGFzIGNhbGxpbmcgbGlicmFyeSBmdW5jdGlvbiBHLCB0aGUgZnVuY3Rpb24gOjpzdGQ6OkcgaXMgbWVhbnQuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUG9zdC1Ub2t5bzogU3RldmUgQ2xhbWFnZSBzdWJtaXR0ZWQgdGhpcyBpc3N1ZSBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHIHRvIHNvbHZlIGEgcHJvYmxlbSBpbiB0aGUgc3RhbmRhcmQgaXRzZWxmIHNpbWlsYXIgdG8gdGhlCnByb2JsZW0gd2l0aGluIGltcGxlbWVudGF0aW9ucyBvZiBsaWJyYXJ5IGlkZW50aWZpZWQgYnkgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzIyNSI+MjI1PC9hPi4gIEFueSByZXNvbHV0aW9uIG9mIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjUiPjIyNTwvYT4gc2hvdWxkIGJlCmNvb3JkaW5hdGVkIHdpdGggdGhlIHJlc29sdXRpb24gb2YgdGhpcyBpc3N1ZS5dPC9pPjwvcD4KCjxwPjxpPltwb3N0LVRvcm9udG86IEhvd2FyZCBpcyB1bmRlY2lkZWQgYWJvdXQgd2hldGhlciBpdCBpcwphcHByb3ByaWF0ZSBmb3IgYWxsIHN0YW5kYXJkIGxpYnJhcnkgZnVuY3Rpb24gbmFtZXMgcmVmZXJyZWQgdG8gaW4Kb3RoZXIgc3RhbmRhcmQgbGlicmFyeSBmdW5jdGlvbnMgdG8gYmUgZXhwbGljaXRseSBxdWFsaWZpZWQgYnkKPHR0PnN0ZDwvdHQ+OiBpdCBpcyBjb21tb24gYWR2aWNlIHRoYXQgdXNlcnMgc2hvdWxkIGRlZmluZSBnbG9iYWwKZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiB0aGVpciBjbGFzcyBpbiB0aGUgc2FtZSBuYW1lc3BhY2UgYXMgdGhlIApjbGFzcywgYW5kIHRoaXMgcmVxdWlyZXMgYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cCBpZiB0aG9zZSBmdW5jdGlvbnMKYXJlIGludGVuZGVkIHRvIGJlIGNhbGxlZCBieSBsaWJyYXJ5IGNvZGUuICBTZXZlcmFsIExXRyBtZW1iZXJzIGFyZQpjb25jZXJuZWQgdGhhdCB2YWxhcnJheSBhcHBlYXJzIHRvIHJlcXVpcmUgYXJndW1lbnQtZGVwZW5kZW50IGxvb2t1cCwKYnV0IHRoYXQgdGhlIHdvcmRpbmcgbWF5IG5vdCBiZSBjbGVhciBlbm91Z2ggdG8gZmFsbCB1bmRlcgoidW5sZXNzIGV4cGxpY2l0bHkgZGVzY3JpYmVkIG90aGVyd2lzZSIuXTwvaT48L3A+Cgo8cD48aT5bQ3VyYedhbzogQW4gTFdHLXN1Ymdyb3VwIHNwZW50IGFuIGFmdGVybm9vbiB3b3JraW5nIG9uIGlzc3VlcwoyMjUsIDIyNiwgYW5kIDIyOS4gIFRoZWlyIGNvbmNsdXNpb24gd2FzIHRoYXQgdGhlIGlzc3VlcyBzaG91bGQgYmUKc2VwYXJhdGVkIGludG8gYW4gTFdHIHBvcnRpb24gKEhvd2FyZCdzIHBhcGVyLCBOMTM4Nz0wMi0wMDQ1KSwgYW5kIGEKRVdHIHBvcnRpb24gKERhdmUgd2lsbCB3cml0ZSBhIHByb3Bvc2FsKS4gVGhlIExXRyBhbmQgRVdHIGhhZAooc2VwYXJhdGUpIGRpc2N1c3Npb25zIG9mIHRoaXMgcGxhbiB0aGUgbmV4dCBkYXkuICBUaGlzIHBhcGVyIHJlc29sdmVzCmlzc3VlcyAyMjUgYW5kIDIyNi4gIEluIGxpZ2h0IG9mIHRoYXQgcmVzb2x1dGlvbiwgdGhlIHByb3Bvc2VkCnJlc29sdXRpb24gZm9yIHRoZSBjdXJyZW50IGlzc3VlIG1ha2VzIHNlbnNlLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyMzAiPjxoMz4yMzAuJm5ic3A7QXNzaWduYWJsZSBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcgQ29weUNvbnN0cnVjdGlibGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5saWJyYXJ5Ij4gW2xpYi5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjYgQXByIDIwMDA8L3A+CjxwPklzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjciPjIyNzwvYT4gaWRlbnRpZmllZCBhbiBpbnN0YW5jZSAoc3RkOjpzd2FwKSB3aGVyZQpBc3NpZ25hYmxlIHdhcyBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcKQ29weUNvbnN0cnVjdGlibGUuIFRoZSBMV0cgYXNrZWQgdGhhdCB0aGUgc3RhbmRhcmQgYmUgc2VhcmNoZWQgdG8KZGV0ZXJtaW5lIGlmIHRoZSBzYW1lIGRlZmVjdCBleGlzdGVkIGVsc2V3aGVyZS48L3A+Cgo8cD5UaGVyZSBhcmUgYSBudW1iZXIgb2YgcGxhY2VzIChzZWUgcHJvcG9zZWQgcmVzb2x1dGlvbiBiZWxvdykgd2hlcmUKQXNzaWduYWJsZSBpcyBzcGVjaWZpZWQgd2l0aG91dCBhbHNvIHNwZWNpZnlpbmcKQ29weUNvbnN0cnVjdGlibGUuIFRoZXJlIGFyZSBhbHNvIHNldmVyYWwgY2FzZXMgd2hlcmUgYm90aCBhcmUKc3BlY2lmaWVkLiBGb3IgZXhhbXBsZSwgMjYuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmFjY3VtdWxhdGUiPiBbbGliLmFjY3VtdWxhdGVdPC9hPi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gIDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gdGFibGUgNjUgZm9yIHZhbHVlX3R5cGU6CmNoYW5nZSAiVCBpcyBBc3NpZ25hYmxlIiB0byAiVCBpcyBDb3B5Q29uc3RydWN0aWJsZSBhbmQKQXNzaWduYWJsZSIKPC9wPgoKPHA+SW4gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiB0YWJsZSA2OSBYOjprZXlfdHlwZTsgY2hhbmdlCiJLZXkgaXMgQXNzaWduYWJsZSIgdG8gIktleSBpcwpDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZSI8YnI+CjwvcD4KCjxwPkluIDI0LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIub3V0cHV0Lml0ZXJhdG9ycyI+IFtsaWIub3V0cHV0Lml0ZXJhdG9yc108L2E+IHBhcmFncmFwaCAxLCBjaGFuZ2U6CjwvcD4KPGJsb2NrcXVvdGU+CjxwPiBBIGNsYXNzIG9yIGEgYnVpbHQtaW4gdHlwZSBYIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIGFuCm91dHB1dCBpdGVyYXRvciBpZiBYIGlzIGFuIEFzc2lnbmFibGUgdHlwZSAoMjMuMSkgYW5kIGFsc28gdGhlCmZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgdmFsaWQsIGFzIHNob3duIGluIFRhYmxlIDczOgo8L3A+CjwvYmxvY2txdW90ZT4KPHA+dG86CjwvcD4KPGJsb2NrcXVvdGU+CjxwPiBBIGNsYXNzIG9yIGEgYnVpbHQtaW4gdHlwZSBYIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnRzIG9mIGFuCm91dHB1dCBpdGVyYXRvciBpZiBYIGlzIGEgQ29weUNvbnN0cnVjdGlibGUgKDIwLjEuMykgYW5kIEFzc2lnbmFibGUKdHlwZSAoMjMuMSkgYW5kIGFsc28gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBhcmUgdmFsaWQsIGFzIHNob3duIGluClRhYmxlIDczOgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltQb3N0LVRva3lvOiBCZW1hbiBEYXdlcyBzdWJtaXR0ZWQgdGhpcyBpc3N1ZSBhdCB0aGUgcmVxdWVzdCBvZgp0aGUgTFdHLiAgSGUgYXNrcyB0aGF0IHRoZSAyNS4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVwbGFjZSI+IFtsaWIuYWxnLnJlcGxhY2VdPC9hPiBhbmQgMjUuMi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmZpbGwiPiBbbGliLmFsZy5maWxsXTwvYT4gY2hhbmdlcyBiZSBzdHVkaWVkIGNhcmVmdWxseSwgYXMgaXQgaXMgbm90IGNsZWFyIHRoYXQKQ29weUNvbnN0cnVjdGlibGUgaXMgcmVhbGx5IGEgcmVxdWlyZW1lbnQgYW5kIG1heSBiZQpvdmVyc3BlY2lmaWNhdGlvbi5dPC9pPjwvcD4KCjxwPjxpPltQb3J0aW9ucyBvZiB0aGUgcmVzb2x1dGlvbiBmb3IgaXNzdWUgMjMwIGhhdmUgYmVlbiBzdXBlcmNlZGVkIGJ5CnRoZSByZXNvbHV0aW9uIG9mIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNzYiPjI3NjwvYT4uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gYWxzbyBpbmNsdWRlZCBjaGFuZ2VzIHRvIGlucHV0Cml0ZXJhdG9yLCBmaWxsLCBhbmQgcmVwbGFjZS4gIFRoZSBMV0cgYmVsaWV2ZXMgdGhhdCB0aG9zZSBjaGFuZ2VzIGFyZQpub3QgbmVjZXNzYXJ5LiAgVGhlIExXRyBjb25zaWRlcmVkIHNvbWUgYmxhbmtldCBzdGF0ZW1lbnQsIHdoZXJlIGFuCkFzc2lnbmFibGUgdHlwZSB3YXMgYWxzbyByZXF1aXJlZCB0byBiZSBDb3B5IENvbnN0cnVjdGlibGUsIGJ1dApkZWNpZGVkIGFnYWluc3QgdGhpcyBiZWNhdXNlIGZpbGwgYW5kIHJlcGxhY2UgcmVhbGx5IGRvbid0IHJlcXVpcmUgdGhlCkNvcHkgQ29uc3RydWN0aWJsZSBwcm9wZXJ0eS48L3A+Cjxocj4KPGEgbmFtZT0iMjMxIj48aDM+MjMxLiZuYnNwO1ByZWNpc2lvbiBpbiBpb3N0cmVhbT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0phbWVzIEthbnplLCBTdGVwaGVuIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7IDI1IEFwciAyMDAwPC9wPgo8cD5XaGF0IGlzIHRoZSBmb2xsb3dpbmcgcHJvZ3JhbSBzdXBwb3NlZCB0byBvdXRwdXQ/PC9wPgo8cHJlPiNpbmNsdWRlICZsdDtpb3N0cmVhbSZndDsKCiAgICBpbnQKICAgIG1haW4oKQogICAgewogICAgICAgIHN0ZDo6Y291dC5zZXRmKCBzdGQ6Omlvczo6c2NpZW50aWZpYyAsIHN0ZDo6aW9zOjpmbG9hdGZpZWxkICkgOwogICAgICAgIHN0ZDo6Y291dC5wcmVjaXNpb24oIDAgKSA7CiAgICAgICAgc3RkOjpjb3V0ICZsdDsmbHQ7IDEuMDAgJmx0OyZsdDsgJ1xuJyA7CiAgICAgICAgcmV0dXJuIDAgOwogICAgfTwvcHJlPgo8cD5Gcm9tIG15IEMgZXhwZXJpZW5jZSwgSSB3b3VsZCBleHBlY3QgIjFlKzAwIjsgdGhpcyBpcyB3aGF0IAo8dHQ+cHJpbnRmKCIlLjBlIiAsIDEuMDAgKTs8L3R0PiBkb2VzLiBHKysgb3V0cHV0cyAKIjEuMDAwMDAwZSswMCIuPC9wPgoKPHA+VGhlIG9ubHkgaW5kaWNhdGlvbiBJIGNhbiBmaW5kIGluIHRoZSBzdGFuZGFyZCBpcyAyMi4yLjIuMi4yLzExLAp3aGVyZSBpdCBzYXlzICJGb3IgY29udmVyc2lvbiBmcm9tIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwgaWYKKGZsYWdzICZhbXA7IGZpeGVkKSAhPSAwIG9yIGlmIHN0ci5wcmVjaXNpb24oKSAmZ3Q7IDAsIHRoZW4Kc3RyLnByZWNpc2lvbigpIGlzIHNwZWNpZmllZCBpbiB0aGUgY29udmVyc2lvbiBzcGVjaWZpY2F0aW9uLiIKVGhpcyBpcyBhbiBvYnZpb3VzIGVycm9yLCBob3dldmVyLCBmaXhlZCBpcyBub3QgYSBtYXNrIGZvciBhIGZpZWxkLApidXQgYSB2YWx1ZSB0aGF0IGEgbXVsdGktYml0IGZpZWxkIG1heSB0YWtlIC0tIHRoZSByZXN1bHRzIG9mIGFuZCdpbmcKZm10ZmxhZ3Mgd2l0aCBpb3M6OmZpeGVkIGFyZSBub3QgZGVmaW5lZCwgYXQgbGVhc3Qgbm90IGlmCmlvczo6c2NpZW50aWZpYyBoYXMgYmVlbiBzZXQuIEcrKydzIGJlaGF2aW9yIGNvcnJlc3BvbmRzIHRvIHdoYXQgbWlnaHQKaGFwcGVuIGlmIHlvdSBkbyB1c2UgKGZsYWdzICZhbXA7IGZpeGVkKSAhPSAwIHdpdGggYSB0eXBpY2FsCmltcGxlbWVudGF0aW9uIChmbG9hdGZpZWxkID09IDMgJmx0OyZsdDsgc29tZXRoaW5nLCBmaXhlZCA9PSAxCiZsdDsmbHQ7IHNvbWV0aGluZywgYW5kIHNjaWVudGlmaWMgPT0gMiAmbHQ7Jmx0OyBzb21ldGhpbmcpLjwvcD4KCjxwPlByZXN1bWFibHksIHRoZSBpbnRlbnQgaXMgZWl0aGVyIChmbGFncyAmYW1wOyBmbG9hdGZpZWxkKSAhPSAwLCBvcgooZmxhZ3MgJmFtcDsgZmxvYXRmaWVsZCkgPT0gZml4ZWQ7IHRoZSBmaXJzdCBnaXZlcyBzb21ldGhpbmcgbW9yZSBvcgpsZXNzIGxpa2UgdGhlIGVmZmVjdCBvZiBwcmVjaXNpb24gaW4gYSBwcmludGYgZmxvYXRpbmcgcG9pbnQKY29udmVyc2lvbi4gT25seSBtb3JlIG9yIGxlc3MsIG9mIGNvdXJzZS4gSW4gb3JkZXIgdG8gaW1wbGVtZW50IHByaW50Zgpmb3JtYXR0aW5nIGNvcnJlY3RseSwgeW91IG11c3Qga25vdyB3aGV0aGVyIHRoZSBwcmVjaXNpb24gd2FzCmV4cGxpY2l0bHkgc2V0IG9yIG5vdC4gU2F5IGJ5IGluaXRpYWxpemluZyBpdCB0byAtMSwgaW5zdGVhZCBvZiA2LCBhbmQKc3RhdGluZyB0aGF0IGZvciBmbG9hdGluZyBwb2ludCBjb252ZXJzaW9ucywgaWYgcHJlY2lzaW9uICZsdDsgLTEsIDYKd2lsbCBiZSB1c2VkLCBmb3IgZml4ZWQgcG9pbnQsIGlmIHByZWNpc2lvbiAmbHQ7IC0xLCAxIHdpbGwgYmUgdXNlZCwKZXRjLiBQbHVzLCBvZiBjb3Vyc2UsIGlmIHByZWNpc2lvbiA9PSAwIGFuZCBmbGFncyAmYW1wOyBmbG9hdGZpZWxkID09CjAsIDEgc2hvdWxkIGJlID0gdXNlZC4gQnV0IGl0IHByb2JhYmx5IGlzbid0IG5lY2Vzc2FyeSB0byBlbXVsYXRlIGFsbApvZiB0aGUgYW5vbWFsaWVzIG9mIHByaW50ZjotKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgMjIuMi4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHNdPC9hPiwgcGFyYWdyYXBoIDExLCB3aXRoIHRoZSBmb2xsb3dpbmcgCnNlbnRlbmNlOgo8L3A+CjxibG9ja3F1b3RlPgpGb3IgY29udmVyc2lvbiBmcm9tIGEgZmxvYXRpbmctcG9pbnQgdHlwZSwKPHR0PjxpPnN0cjwvaT4ucHJlY2lzaW9uKCk8L3R0PiBpcyBzcGVjaWZpZWQgaW4gdGhlIGNvbnZlcnNpb24Kc3BlY2lmaWNhdGlvbi4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGZsb2F0ZmllbGQgZGV0ZXJtaW5lcyB3aGV0aGVyIG51bWJlcnMgYXJlIGZvcm1hdHRlZCBhcyBpZgp3aXRoICVmLCAlZSwgb3IgJWcuICBJZiB0aGUgPHR0PmZpeGVkPC90dD4gYml0IGlzIHNldCwgaXQncyAlZiwKaWYgPHR0PnNjaWVudGlmaWM8L3R0PiBpdCdzICVlLCBhbmQgaWYgYm90aCBiaXRzIGFyZSBzZXQsIG9yIApuZWl0aGVyLCBpdCdzICVnLjwvcD4KPHA+VHVybmluZyB0byB0aGUgQyBzdGFuZGFyZCwgYSBwcmVjaXNpb24gb2YgMCBpcyBtZWFuaW5nZnVsCmZvciAlZiBhbmQgJWUuICBGb3IgJWcsIHByZWNpc2lvbiAwIGlzIHRha2VuIHRvIGJlIHRoZSBzYW1lIGFzIApwcmVjaXNpb24gMS48L3A+CjxwPlRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGhhcyB0aGUgZWZmZWN0IHRoYXQgaWYgbmVpdGhlcgo8dHQ+Zml4ZWQ8L3R0PiBub3IgPHR0PnNjaWVudGlmaWM8L3R0PiBpcyBzZXQgd2UnbGwgYmUKc3BlY2lmeWluZyBhIHByZWNpc2lvbiBvZiAwLCB3aGljaCB3aWxsIGJlIGludGVybmFsbHkKdHVybmVkIGludG8gMS4gIFRoZXJlJ3Mgbm8gbmVlZCB0byBjYWxsIGl0IG91dCBhcyBhIHNwZWNpYWwKY2FzZS48L3A+CjxwPlRoZSBvdXRwdXQgb2YgdGhlIGFib3ZlIHByb2dyYW0gd2lsbCBiZSAiMWUrMDAiLjwvcD4KCjxwPjxpPltQb3N0LUN1cmHnYW86IEhvd2FyZCBwcm92aWRlZCBpbXByb3ZlZCB3b3JkaW5nIGNvdmVyaW5nIHRoZSBjYXNlCndoZXJlIHByZWNpc2lvbiBpcyAwIGFuZCBtb2RlIGlzICVnLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyMzIiPjxoMz4yMzIuJm5ic3A7ImRlcGVuZHMiIHBvb3JseSBkZWZpbmVkIGluIDE3LjQuMy4xPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzZXJ2ZWQubmFtZXMiPiBbbGliLnJlc2VydmVkLm5hbWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UGV0ZXIgRGltb3YmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggQXByIDIwMDA8L3A+CjxwPjE3LjQuMy4xLzEgdXNlcyB0aGUgdGVybSAiZGVwZW5kcyIgdG8gbGltaXQgdGhlIHNldCBvZiBhbGxvd2VkCnNwZWNpYWxpemF0aW9ucyBvZiBzdGFuZGFyZCB0ZW1wbGF0ZXMgdG8gdGhvc2UgdGhhdCAiZGVwZW5kIG9uIGEKdXNlci1kZWZpbmVkIG5hbWUgb2YgZXh0ZXJuYWwgbGlua2FnZS4iPC9wPgo8cD5UaGlzIHRlcm0sIGhvd2V2ZXIsIGlzIG5vdCBhZGVxdWF0ZWx5IGRlZmluZWQsIG1ha2luZyBpdCBwb3NzaWJsZSB0bwpjb25zdHJ1Y3QgYSBzcGVjaWFsaXphdGlvbiB0aGF0IGlzLCBJIGJlbGlldmUsIHRlY2huaWNhbGx5IGxlZ2FsIGFjY29yZGluZyB0bwoxNy40LjMuMS8xLCBidXQgdGhhdCBzcGVjaWFsaXplcyBhIHN0YW5kYXJkIHRlbXBsYXRlIGZvciBhIGJ1aWx0LWluIHR5cGUgc3VjaCBhcwonaW50Jy48L3A+CjxwPlRoZSBmb2xsb3dpbmcgY29kZSBkZW1vbnN0cmF0ZXMgdGhlIHByb2JsZW06PC9wPgo8YmxvY2txdW90ZT4KICA8cHJlPiNpbmNsdWRlICZsdDthbGdvcml0aG0mZ3Q7PC9wcmU+CiAgPHByZT50ZW1wbGF0ZSZsdDtjbGFzcyBUJmd0OyBzdHJ1Y3QgWAp7CiB0eXBlZGVmIFQgdHlwZTsKfTs8L3ByZT4KICA8cHJlPm5hbWVzcGFjZSBzdGQKewogdGVtcGxhdGUmbHQ7Jmd0OyB2b2lkIHN3YXAoOjpYJmx0O2ludCZndDs6OnR5cGUmYW1wOyBpLCA6OlgmbHQ7aW50Jmd0Ozo6dHlwZSZhbXA7IGopOwp9PC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgInVzZXItZGVmaW5lZCBuYW1lIiB0byAidXNlci1kZWZpbmVkCnR5cGUiLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgdGVybWlub2xvZ3kgaXMgdXNlZCBpbiBzZWN0aW9uIDIuNS4yIGFuZCA0LjEuMSBvZiA8aT5UaGUgQysrClByb2dyYW1taW5nIExhbmd1YWdlPC9pPi4gIEl0IGRpc2FsbG93cyB0aGUgZXhhbXBsZSBpbiB0aGUgaXNzdWUsCnNpbmNlIHRoZSB1bmRlcmx5aW5nIHR5cGUgaXRzZWxmIGlzIG5vdCB1c2VyLWRlZmluZWQuICBUaGUgb25seQpwb3NzaWJsZSBwcm9ibGVtIEkgY2FuIHNlZSBpcyBmb3Igbm9uLXR5cGUgdGVtcGxhdGVzLCBidXQgdGhlcmUncyBubwpwb3NzaWJsZSB3YXkgZm9yIGEgdXNlciB0byBjb21lIHVwIHdpdGggYSBzcGVjaWFsaXphdGlvbiBmb3IgYml0c2V0LApmb3IgZXhhbXBsZSwgdGhhdCBtaWdodCBub3QgaGF2ZSBhbHJlYWR5IGJlZW4gc3BlY2lhbGl6ZWQgYnkgdGhlCmltcGxlbWVudG9yPzwvcD4KCjxwPjxpPltUb3JvbnRvOiB0aGlzIG1heSBiZSByZWxhdGVkIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMxMjAiPjEyMDwvYT4uXTwvaT48L3A+Cgo8cD48aT5bcG9zdC1Ub3JvbnRvOiBKdWR5IHByb3ZpZGVkIHRoZSBhYm92ZSBwcm9wb3NlZCByZXNvbHV0aW9uIGFuZApyYXRpb25hbGUuXTwvaT48L3A+Cjxocj4KPGEgbmFtZT0iMjM0Ij48aDM+MjM0LiZuYnNwO1R5cG9zIGluIGFsbG9jYXRvciBkZWZpbml0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5tZW1iZXJzIj4gW2xpYi5hbGxvY2F0b3IubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0RpZXRtYXIgS/xobCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBBcHIgMjAwMDwvcD4KPHA+SW4gcGFyYWdyYXBocyAxMiBhbmQgMTMgdGhlIGVmZmVjdHMgb2YgPHR0PmNvbnN0cnVjdCgpPC90dD4gYW5kCjx0dD5kZXN0cnVjdCgpPC90dD4gYXJlIGRlc2NyaWJlZCBhcyByZXR1cm5zIGJ1dCB0aGUgZnVuY3Rpb25zIGFjdHVhbGx5CnJldHVybiA8dHQ+dm9pZDwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5TdWJzdGl0dXRlICJSZXR1cm5zIiBieSAiRWZmZWN0Ii48L3A+Cjxocj4KPGEgbmFtZT0iMjM1Ij48aDM+MjM1LiZuYnNwO05vIHNwZWNpZmljYXRpb24gb2YgZGVmYXVsdCBjdG9yIGZvciByZXZlcnNlX2l0ZXJhdG9yPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlcmF0b3IiPiBbbGliLnJldmVyc2UuaXRlcmF0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgQXByIDIwMDA8L3A+CjxwPlRoZSBkZWNsYXJhdGlvbiBvZiA8dHQ+cmV2ZXJzZV9pdGVyYXRvcjwvdHQ+IGxpc3RzIGEgZGVmYXVsdApjb25zdHJ1Y3Rvci4gIEhvd2V2ZXIsIG5vIHNwZWNpZmljYXRpb24gaXMgZ2l2ZW4gd2hhdCB0aGlzIGNvbnN0cnVjdG9yCnNob3VsZCBkby48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5JbiBzZWN0aW9uIDI0LjQuMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLnJldmVyc2UuaXRlci5jb25zIj4gW2xpYi5yZXZlcnNlLml0ZXIuY29uc108L2E+IGFkZCB0aGUgZm9sbG93aW5nCiAgcGFyYWdyYXBoOjwvcD4KICAgICAgPGJsb2NrcXVvdGU+CiAgICAgIDxwPjx0dD5yZXZlcnNlX2l0ZXJhdG9yKCk8L3R0PjwvcD4KCiAgICAgIDxwPkRlZmF1bHQgaW5pdGlhbGl6ZXMgPHR0PmN1cnJlbnQ8L3R0Pi4gSXRlcmF0b3Igb3BlcmF0aW9ucwogICAgICBhcHBsaWVkIHRvIHRoZSByZXN1bHRpbmcgaXRlcmF0b3IgaGF2ZSBkZWZpbmVkIGJlaGF2aW9yIGlmIGFuZAogICAgICBvbmx5IGlmIHRoZSBjb3JyZXNwb25kaW5nIG9wZXJhdGlvbnMgYXJlIGRlZmluZWQgb24gYSBkZWZhdWx0CiAgICAgIGNvbnN0cnVjdGVkIGl0ZXJhdG9yIG9mIHR5cGUgPHR0Pkl0ZXJhdG9yPC90dD4uPC9wPgogICAgICA8L2Jsb2NrcXVvdGU+CiAgPHA+PGk+W3ByZS1Db3BlbmhhZ2VuOiBEaWV0bWFyIHByb3ZpZGUgd29yZGluZyBmb3IgcHJvcG9zZWQKICByZXNvbHV0aW9uLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjIzNyI+PGgzPjIzNy4mbmJzcDtVbmRlZmluZWQgZXhwcmVzc2lvbiBpbiBjb21wbGV4aXR5IHNwZWNpZmljYXRpb248L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3QuY29ucyI+IFtsaWIubGlzdC5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGlldG1hciBL/GhsJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IEFwciAyMDAwPC9wPgo8cD5UaGUgY29tcGxleGl0eSBzcGVjaWZpY2F0aW9uIGluIHBhcmFncmFwaCA2IHNheXMgdGhhdCB0aGUgY29tcGxleGl0eQppcyBsaW5lYXIgaW4gPHR0PmZpcnN0IC0gbGFzdDwvdHQ+LiBFdmVuIGlmIDx0dD5vcGVyYXRvci0oKTwvdHQ+IGlzCmRlZmluZWQgb24gaXRlcmF0b3JzIHRoaXMgdGVybSBpcyBpbiBnZW5lcmFsIHVuZGVmaW5lZCBiZWNhdXNlIGl0CndvdWxkIGhhdmUgdG8gYmUgPHR0Pmxhc3QgLSBmaXJzdDwvdHQ+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgogIDxwPkNoYW5nZSBwYXJhZ3JhcGggNiBmcm9tPC9wPgogICAgIDxibG9ja3F1b3RlPkxpbmVhciBpbiA8aT5maXJzdCAtIGxhc3Q8L2k+LjwvYmxvY2txdW90ZT4KICA8cD50byBiZWNvbWU8L3A+CiAgICAgPGJsb2NrcXVvdGU+TGluZWFyIGluIDxpPmRpc3RhbmNlKGZpcnN0LCBsYXN0KTwvaT4uPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjIzOCI+PGgzPjIzOC4mbmJzcDtDb250cmFkaWN0b3J5IHJlc3VsdHMgb2Ygc3RyaW5nYnVmIGluaXRpYWxpemF0aW9uLjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYuY29ucyI+IFtsaWIuc3RyaW5nYnVmLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEaWV0bWFyIEv8aGwmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTEgTWF5IDIwMDA8L3A+CjxwPkluIDI3LjcuMS4xIHBhcmFncmFwaCA0IHRoZSByZXN1bHRzIG9mIGNhbGxpbmcgdGhlIGNvbnN0cnVjdG9yIG9mCidiYXNpY19zdHJpbmdidWYnIGFyZSBzYWlkIHRvIGJlIDx0dD5zdHIoKSA9PSBzdHI8L3R0Pi4gVGhpcyBpcyBmaW5lCnRoYXQgZmFyIGJ1dCBjb25zaWRlciB0aGlzIGNvZGU6PC9wPgoKPHByZT4gIHN0ZDo6YmFzaWNfc3RyaW5nYnVmJmx0O2NoYXImZ3Q7IHNidWYoImhlbGxvLCB3b3JsZCIsIHN0ZDo6aW9zX2Jhc2U6Om9wZW5tb2RlKDApKTsKICBzdGQ6OmNvdXQgJmx0OyZsdDsgIiciICZsdDsmbHQ7IHNidWYuc3RyKCkgJmx0OyZsdDsgIidcbiI7CjwvcHJlPgoKPHA+UGFyYWdyYXBoIDMgb2YgMjcuNy4xLjEgYmFzaWNhbGx5IHNheXMgdGhhdCBpbiB0aGlzIGNhc2UgbmVpdGhlcgp0aGUgb3V0cHV0IHNlcXVlbmNlIG5vciB0aGUgaW5wdXQgc2VxdWVuY2UgaXMgaW5pdGlhbGl6ZWQgYW5kCnBhcmFncmFwaCAyIG9mIDI3LjcuMS4yIGJhc2ljYWxseSBzYXlzIHRoYXQgPHR0PnN0cigpPC90dD4gZWl0aGVyCnJldHVybnMgdGhlIGlucHV0IG9yIHRoZSBvdXRwdXQgc2VxdWVuY2UuIE5vbmUgb2YgdGhlbSBpcyBpbml0aWFsaXplZCwKaWUuIGJvdGggYXJlIGVtcHR5LCBpbiB3aGljaCBjYXNlIHRoZSByZXR1cm4gZnJvbSA8dHQ+c3RyKCk8L3R0PiBpcwpkZWZpbmVkIHRvIGJlIDx0dD5iYXNpY19zdHJpbmcmbHQ7Y1QmZ3Q7KCk8L3R0Pi48L3A+Cgo8cD5Ib3dldmVyLCBwcm9iYWJseSBvbmx5IHRlc3QgY2FzZXMgaW4gc29tZSB0ZXN0c3VpdGVzIHdpbGwgZGV0ZWN0IHRoaXMKInByb2JsZW0iLi4uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlJlbW92ZSAyNy43LjEuMSBwYXJhZ3JhcGggNC48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBjb3VsZCBmaXggMjcuNy4xLjEgcGFyYWdyYXBoIDQsIGJ1dCB0aGVyZSB3b3VsZCBiZSBubyBwb2ludC4gIElmCndlIGZpeGVkIGl0LCBpdCB3b3VsZCBzYXkganVzdCB0aGUgc2FtZSB0aGluZyBhcyB0ZXh0IHRoYXQncyBhbHJlYWR5CmluIHRoZSBzdGFuZGFyZC48L3A+Cjxocj4KPGEgbmFtZT0iMjM5Ij48aDM+MjM5LiZuYnNwO0NvbXBsZXhpdHkgb2YgdW5pcXVlKCkgYW5kL29yIHVuaXF1ZV9jb3B5IGluY29ycmVjdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7TWF5IDE1IDIwMDA8L3A+CjxwPlRoZSBjb21wbGV4aXR5IG9mIHVuaXF1ZSBhbmQgdW5pcXVlX2NvcHkgYXJlIGluY29uc2lzdGVudCB3aXRoIGVhY2gKb3RoZXIgYW5kIGluY29uc2lzdGVudCB3aXRoIHRoZSBpbXBsZW1lbnRhdGlvbnMuJm5ic3A7IFRoZSBzdGFuZGFyZApzcGVjaWZpZXM6PC9wPgoKPHA+Zm9yIHVuaXF1ZSgpOjwvcD4KCjxibG9ja3F1b3RlPi0zLSBDb21wbGV4aXR5OiBJZiB0aGUgcmFuZ2UgKGxhc3QgLSBmaXJzdCkgaXMgbm90IGVtcHR5LCBleGFjdGx5CihsYXN0IC0gZmlyc3QpIC0gMSBhcHBsaWNhdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLCBvdGhlcndpc2UKbm8gYXBwbGljYXRpb25zIG9mIHRoZSBwcmVkaWNhdGUuPC9ibG9ja3F1b3RlPgoKPHA+Zm9yIHVuaXF1ZV9jb3B5KCk6PC9wPgoKPGJsb2NrcXVvdGU+LTctIENvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IGFwcGxpY2F0aW9ucyBvZiB0aGUgY29ycmVzcG9uZGluZwpwcmVkaWNhdGUuPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBpbXBsZW1lbnRhdGlvbnMgZG8gaXQgdGhlIG90aGVyIHdheSByb3VuZDogdW5pcXVlKCkgYXBwbGllcyB0aGUKcHJlZGljYXRlIGxhc3QtZmlyc3QgdGltZXMgYW5kIHVuaXF1ZV9jb3B5KCkgYXBwbGllcyBpdCBsYXN0LWZpcnN0LTEKdGltZXMuPC9wPgoKPHA+QXMgYm90aCBhbGdvcml0aG1zIHVzZSB0aGUgcHJlZGljYXRlIGZvciBwYWlyLXdpc2UgY29tcGFyaXNvbiBvZgpzZXF1ZW5jZSBlbGVtZW50cyBJIGRvbid0IHNlZSBhIGp1c3RpZmljYXRpb24gZm9yIHVuaXF1ZV9jb3B5KCkKYXBwbHlpbmcgdGhlIHByZWRpY2F0ZSBsYXN0LWZpcnN0IHRpbWVzLCBlc3BlY2lhbGx5IHNpbmNlIGl0IGlzIG5vdApzcGVjaWZpZWQgdG8gd2hpY2ggcGFpciBpbiB0aGUgc2VxdWVuY2UgdGhlIHByZWRpY2F0ZSBpcyBhcHBsaWVkCnR3aWNlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgYm90aCBjb21wbGV4aXR5IHNlY3Rpb25zIGluIDI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiB0bzo8L3A+Cgo8YmxvY2txdW90ZT5Db21wbGV4aXR5OiBGb3Igbm9uZW1wdHkgcmFuZ2VzLCBleGFjdGx5IGxhc3QgLSBmaXJzdCAtIDEKYXBwbGljYXRpb25zIG9mIHRoZSBjb3JyZXNwb25kaW5nIHByZWRpY2F0ZS48L2Jsb2NrcXVvdGU+Cgo8aHI+CjxhIG5hbWU9IjI0MCI+PGgzPjI0MC4mbmJzcDtDb21wbGV4aXR5IG9mIGFkamFjZW50X2ZpbmQoKSBpcyBtZWFuaW5nbGVzczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5hZGphY2VudC5maW5kIj4gW2xpYi5hbGcuYWRqYWNlbnQuZmluZF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZ2VsaWthIExhbmdlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDtNYXkgMTUgMjAwMDwvcD4KPHA+VGhlIGNvbXBsZXhpdHkgc2VjdGlvbiBvZiBhZGphY2VudF9maW5kIGlzIGRlZmVjdGl2ZTo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT50ZW1wbGF0ZSAmbHQ7Y2xhc3MgRm9yd2FyZEl0ZXJhdG9yJmd0OwpGb3J3YXJkSXRlcmF0b3IgYWRqYWNlbnRfZmluZChGb3J3YXJkSXRlcmF0b3IgZmlyc3QsIEZvcndhcmRJdGVyYXRvciBsYXN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJpbmFyeVByZWRpY2F0ZSBwcmVkKTsKPC9wcmU+Cgo8cD4tMS0gUmV0dXJuczogVGhlIGZpcnN0IGl0ZXJhdG9yIGkgc3VjaCB0aGF0IGJvdGggaSBhbmQgaSArIDEgYXJlIGluCnRoZSByYW5nZSBbZmlyc3QsIGxhc3QpIGZvciB3aGljaCB0aGUgZm9sbG93aW5nIGNvcnJlc3BvbmRpbmcKY29uZGl0aW9ucyBob2xkOiAqaSA9PSAqKGkgKyAxKSwgcHJlZCgqaSwgKihpICsgMSkpICE9IGZhbHNlLiBSZXR1cm5zCmxhc3QgaWYgbm8gc3VjaCBpdGVyYXRvciBpcyBmb3VuZC48L3A+Cgo8cD4tMi0gQ29tcGxleGl0eTogRXhhY3RseSBmaW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSkgLSBmaXJzdCBhcHBsaWNhdGlvbnMKb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPkluIHRoZSBDb21wbGV4aXR5IHNlY3Rpb24sIGl0IGlzIG5vdCBkZWZpbmVkIHdoYXQgInZhbHVlIgppcyBzdXBwb3NlZCB0byBtZWFuLiBNeSBiZXN0IGd1ZXNzIGlzIHRoYXQgInZhbHVlIiBtZWFucyBhbgpvYmplY3QgZm9yIHdoaWNoIG9uZSBvZiB0aGUgY29uZGl0aW9ucyBwcmVkKCppLHZhbHVlKSBvcgpwcmVkKHZhbHVlLCppKSBpcyB0cnVlLCB3aGVyZSBpIGlzIHRoZSBpdGVyYXRvciBkZWZpbmVkIGluIHRoZSBSZXR1cm5zCnNlY3Rpb24uIEhvd2V2ZXIsIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpbnB1dCBzZXF1ZW5jZSBuZWVkIG5vdCBiZQplcXVhbGl0eS1jb21wYXJhYmxlIGFuZCBmb3IgdGhpcyByZWFzb24gdGhlIHRlcm0gZmluZChmaXJzdCwgbGFzdCwKdmFsdWUpIC0gZmlyc3QgaXMgbWVhbmluZ2xlc3MuPC9wPgoKPHA+QSB0ZXJtIHN1Y2ggYXMgZmluZF9pZihmaXJzdCwgbGFzdCwgYmluZDJuZChwcmVkLCppKSkgLSBmaXJzdCBvcgpmaW5kX2lmKGZpcnN0LCBsYXN0LCBiaW5kMXN0KHByZWQsKmkpKSAtIGZpcnN0IG1pZ2h0IGNvbWUgY2xvc2VyIHRvCnRoZSBpbnRlbmRlZCBzcGVjaWZpY2F0aW9uLiAgQmluZGVycyBjYW4gb25seSBiZSBhcHBsaWVkIHRvIGZ1bmN0aW9uCm9iamVjdHMgdGhhdCBoYXZlIHRoZSBmdW5jdGlvbiBjYWxsIG9wZXJhdG9yIGRlY2xhcmVkIGNvbnN0LCB3aGljaCBpcwpub3QgcmVxdWlyZWQgb2YgcHJlZGljYXRlcyBiZWNhdXNlIHRoZXkgY2FuIGhhdmUgbm9uLWNvbnN0IGRhdGEKbWVtYmVycy4gRm9yIHRoaXMgcmVhc29uLCBhIHNwZWNpZmljYXRpb24gdXNpbmcgYSBiaW5kZXIgY291bGQgb25seSBiZQphbiAiYXMtaWYiIHNwZWNpZmljYXRpb24uPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgY29tcGxleGl0eSBzZWN0aW9uIGluIDI1LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5hZGphY2VudC5maW5kIj4gW2xpYi5hbGcuYWRqYWNlbnQuZmluZF08L2E+IHRvOjwvcD4KPGJsb2NrcXVvdGU+CkZvciBhIG5vbmVtcHR5IHJhbmdlLCBleGFjdGx5IDx0dD5taW4oKDxpPmk8L2k+IC0gPGk+Zmlyc3Q8L2k+KSArIDEsCig8aT5sYXN0PC9pPiAtIDxpPmZpcnN0PC9pPikgLSAxKTwvdHQ+IGFwcGxpY2F0aW9ucyBvZiB0aGUKY29ycmVzcG9uZGluZyBwcmVkaWNhdGUsIHdoZXJlIDxpPmk8L2k+IGlzIDx0dD5hZGphY2VudF9maW5kPC90dD4ncwpyZXR1cm4gdmFsdWUuCjwvYmxvY2txdW90ZT4KCjxwPjxpPltDb3BlbmhhZ2VuOiB0aGUgb3JpZ2luYWwgcmVzb2x1dGlvbiBzcGVjaWZpZWQgYW4gdXBwZXIKYm91bmQuICBUaGUgTFdHIHByZWZlcnJlZCBhbiBleGFjdCBjb3VudC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMjQxIj48aDM+MjQxLiZuYnNwO0RvZXMgdW5pcXVlX2NvcHkoKSByZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy51bmlxdWUiPiBbbGliLmFsZy51bmlxdWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmdlbGlrYSBMYW5nZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7TWF5IDE1IDIwMDA8L3A+Cgo8cD5Tb21lIHBvcHVsYXIgaW1wbGVtZW50YXRpb25zIG9mIHVuaXF1ZV9jb3B5KCkgY3JlYXRlIHRlbXBvcmFyeQpjb3BpZXMgb2YgdmFsdWVzIGluIHRoZSBpbnB1dCBzZXF1ZW5jZSwgYXQgbGVhc3QgaWYgdGhlIGlucHV0IGl0ZXJhdG9yCmlzIGEgcG9pbnRlci4gIFN1Y2ggYW4gaW1wbGVtZW50YXRpb24gaXMgYnVpbHQgb24gdGhlIGFzc3VtcHRpb24gdGhhdAp0aGUgdmFsdWUgdHlwZSBpcyBDb3B5Q29uc3RydWN0aWJsZSBhbmQgQXNzaWduYWJsZS48L3A+Cgo8cD5JdCBpcyBjb21tb24gcHJhY3RpY2UgaW4gdGhlIHN0YW5kYXJkIHRoYXQgYWxnb3JpdGhtcyBleHBsaWNpdGx5CnNwZWNpZnkgYW55IGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIHRoYXQgdGhleSBpbXBvc2Ugb24gYW55IG9mIHRoZQp0eXBlcyB1c2VkIGJ5IHRoZSBhbGdvcml0aG0uIEFuIGV4YW1wbGUgb2YgYW4gYWxnb3JpdGhtIHRoYXQgY3JlYXRlcwp0ZW1wb3JhcnkgY29waWVzIGFuZCBjb3JyZWN0bHkgc3BlY2lmaWVzIHRoZSBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cwppcyBhY2N1bXVsYXRlKCksIDI2LjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5hY2N1bXVsYXRlIj4gW2xpYi5hY2N1bXVsYXRlXTwvYT4uPC9wPgoKPHA+U2luY2UgdGhlIHNwZWNpZmljYXRpb25zIG9mIHVuaXF1ZSgpIGFuZCB1bmlxdWVfY29weSgpIGRvIG5vdApyZXF1aXJlIENvcHlDb25zdHJ1Y3RpYmxlIGFuZCBBc3NpZ25hYmxlIG9mIHRoZSBJbnB1dEl0ZXJhdG9yJ3MgdmFsdWUKdHlwZSB0aGUgYWJvdmUgbWVudGlvbmVkIGltcGxlbWVudGF0aW9ucyBhcmUgbm90IHN0YW5kYXJkLWNvbXBsaWFudC4gSQpjYW5ub3QganVkZ2Ugd2hldGhlciB0aGlzIGlzIGEgZGVmZWN0IGluIHRoZSBzdGFuZGFyZCBvciBhIGRlZmVjdCBpbgp0aGUgaW1wbGVtZW50YXRpb25zLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyNS4yLjggY2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgotNC0gUmVxdWlyZXM6IFRoZSByYW5nZXMgW2ZpcnN0LCBsYXN0KSBhbmQgW3Jlc3VsdCwgcmVzdWx0KyhsYXN0LWZpcnN0KSkKc2hhbGwgbm90IG92ZXJsYXAuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIDxwPi00LSBSZXF1aXJlczogVGhlIHJhbmdlcyBbZmlyc3QsIGxhc3QpIGFuZCBbcmVzdWx0LAogIHJlc3VsdCsobGFzdC1maXJzdCkpIHNoYWxsIG5vdCBvdmVybGFwLiBUaGUgZXhwcmVzc2lvbiAqcmVzdWx0ID0KICAqZmlyc3QgbXVzdCBiZSB2YWxpZC4gSWYgbmVpdGhlciBJbnB1dEl0ZXJhdG9yIG5vciBPdXRwdXRJdGVyYXRvcgogIG1lZXRzIHRoZSByZXF1aXJlbWVudHMgb2YgZm9yd2FyZCBpdGVyYXRvciB0aGVuIHRoZSB2YWx1ZSB0eXBlIG9mCiAgSW5wdXRJdGVyYXRvciBtdXN0IGJlIGNvcHkgY29uc3RydWN0aWJsZS4gT3RoZXJ3aXNlIGNvcHkKICBjb25zdHJ1Y3RpYmxlIGlzIG5vdCByZXF1aXJlZC4gPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bUmVkbW9uZDogdGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gZGlkbid0IGltcG9zZSBhbgpleHBsaWNpdCByZXF1aXJlbWVudCB0aGF0IHRoZSBpdGVyYXRvcidzIHZhbHVlIHR5cGUgbXVzdCBiZSBjb3B5CmNvbnN0cnVjdGlibGUsIG9uIHRoZSBncm91bmRzIHRoYXQgYW4gaW5wdXQgaXRlcmF0b3IncyB2YWx1ZSB0eXBlIG11c3QKYWx3YXlzIGJlIGNvcHkgY29uc3RydWN0aWJsZS4gIE5vdCBldmVyeW9uZSBpbiB0aGUgTFdHIHRob3VnaHQgdGhhdAp0aGlzIHJlcXVpcmVtZW50IHdhcyBjbGVhciBmcm9tIHRhYmxlIDcyLiAgSXQgaGFzIGJlZW4gc3VnZ2VzdGVkIHRoYXQKaXQgbWlnaHQgYmUgcG9zc2libGUgdG8gaW1wbGVtZW50IDx0dD51bmlxdWVfY29weTwvdHQ+IHdpdGhvdXQKcmVxdWlyaW5nIGFzc2lnbmFiaWxpdHksIGFsdGhvdWdoIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIGRvIGltcG9zZQp0aGF0IHJlcXVpcmVtZW50LiAgSG93YXJkIHByb3ZpZGVkIG5ldyB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGk+WwpDdXJh52FvOiBUaGUgTFdHIGNoYW5nZWQgdGhlIFBSIGVkaXRvcmlhbGx5IHRvIHNwZWNpZnkKIm5laXRoZXIuLi5ub3IuLi5tZWV0Li4uIiBhcyBjbGVhcmVyIHRoYW4KImJvdGguLi5hbmQuLi5kbyBub3QgbWVldC4uLiIuIENoYW5nZSBiZWxpZXZlZCB0byBiZSBzbwptaW5vciBhcyBub3QgdG8gcmVxdWlyZSByZS1yZXZpZXcuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyNDIiPjxoMz4yNDIuJm5ic3A7U2lkZSBlZmZlY3RzIG9mIGZ1bmN0aW9uIG9iamVjdHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcudHJhbnNmb3JtIj4gW2xpYi5hbGcudHJhbnNmb3JtXTwvYT4sIDI2LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIubnVtZXJpYy5vcHMiPiBbbGliLm51bWVyaWMub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5nZWxpa2EgTGFuZ2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwO01heSAxNSAyMDAwPC9wPgo8cD5UaGUgYWxnb3JpdGhtcyB0cmFuc2Zvcm0oKSwgYWNjdW11bGF0ZSgpLCBpbm5lcl9wcm9kdWN0KCksCnBhcnRpYWxfc3VtKCksIGFuZCBhZGphY2VudF9kaWZmZXJlbmNlKCkgcmVxdWlyZSB0aGF0IHRoZSBmdW5jdGlvbgpvYmplY3Qgc3VwcGxpZWQgdG8gdGhlbSBzaGFsbCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLjwvcD4KCjxwPlRoZSBzdGFuZGFyZCBkZWZpbmVzIGEgc2lkZSBlZmZlY3QgaW4gMS45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvaW50cm8uaHRtbCNpbnRyby5leGVjdXRpb24iPiBbaW50cm8uZXhlY3V0aW9uXTwvYT4gYXM6PC9wPgo8YmxvY2txdW90ZT4tNy0gQWNjZXNzaW5nIGFuIG9iamVjdCBkZXNpZ25hdGVkIGJ5IGEgdm9sYXRpbGUgbHZhbHVlIChiYXNpYy5sdmFsKSwKbW9kaWZ5aW5nIGFuIG9iamVjdCwgY2FsbGluZyBhIGxpYnJhcnkgSS9PIGZ1bmN0aW9uLCBvciBjYWxsaW5nIGEgZnVuY3Rpb24KdGhhdCBkb2VzIGFueSBvZiB0aG9zZSBvcGVyYXRpb25zIGFyZSBhbGwgc2lkZSBlZmZlY3RzLCB3aGljaCBhcmUgY2hhbmdlcwppbiB0aGUgc3RhdGUgb2YgdGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudC48L2Jsb2NrcXVvdGU+Cgo8cD5BcyBhIGNvbnNlcXVlbmNlLCB0aGUgZnVuY3Rpb24gY2FsbCBvcGVyYXRvciBvZiBhIGZ1bmN0aW9uIG9iamVjdCBzdXBwbGllZAp0byBhbnkgb2YgdGhlIGFsZ29yaXRobXMgbGlzdGVkIGFib3ZlIGNhbm5vdCBtb2RpZnkgZGF0YSBtZW1iZXJzLCBjYW5ub3QKaW52b2tlIGFueSBmdW5jdGlvbiB0aGF0IGhhcyBhIHNpZGUgZWZmZWN0LCBhbmQgY2Fubm90IGV2ZW4gY3JlYXRlIGFuZAptb2RpZnkgdGVtcG9yYXJ5IG9iamVjdHMuJm5ic3A7IEl0IGlzIGRpZmZpY3VsdCB0byBpbWFnaW5lIGEgZnVuY3Rpb24gb2JqZWN0CnRoYXQgaXMgc3RpbGwgdXNlZnVsIHVuZGVyIHRoZXNlIHNldmVyZSBsaW1pdGF0aW9ucy4gRm9yIGluc3RhbmNlLCBhbnkKbm9uLXRyaXZpYWwgdHJhbnNmb3JtYXRvciBzdXBwbGllZCB0byB0cmFuc2Zvcm0oKSBtaWdodCBpbnZvbHZlIGNyZWF0aW9uCmFuZCBtb2RpZmljYXRpb24gb2YgdGVtcG9yYXJpZXMsIHdoaWNoIGlzIHByb2hpYml0ZWQgYWNjb3JkaW5nIHRvIHRoZSBjdXJyZW50CndvcmRpbmcgb2YgdGhlIHN0YW5kYXJkLjwvcD4KCjxwPk9uIHRoZSBvdGhlciBoYW5kLCBwb3B1bGFyIGltcGxlbWVudGF0aW9ucyBvZiB0aGVzZSBhbGdvcml0aG1zIGV4aGliaXQKdW5pZm9ybSBhbmQgcHJlZGljdGFibGUgYmVoYXZpb3Igd2hlbiBpbnZva2VkIHdpdGggYSBzaWRlLWVmZmVjdC1wcm9kdWNpbmcKZnVuY3Rpb24gb2JqZWN0cy4gSXQgbG9va3MgbGlrZSB0aGUgc3Ryb25nIHJlcXVpcmVtZW50IGlzIG5vdCBuZWVkZWQgZm9yCmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBhbGdvcml0aG1zLjwvcD4KCjxwPlRoZSByZXF1aXJlbWVudCBvZiZuYnNwOyBzaWRlLWVmZmVjdC1mcmVlIGZ1bmN0aW9uIG9iamVjdHMgY291bGQgYmUKcmVwbGFjZWQgYnkgYSBtb3JlIHJlbGF4ZWQgYmFzaWMgcmVxdWlyZW1lbnQgKHdoaWNoIHdvdWxkIGhvbGQgZm9yIGFsbApmdW5jdGlvbiBvYmplY3RzIHN1cHBsaWVkIHRvIGFueSBhbGdvcml0aG0gaW4gdGhlIHN0YW5kYXJkIGxpYnJhcnkpOjwvcD4KPGJsb2NrcXVvdGU+QSBmdW5jdGlvbiBvYmplY3RzIHN1cHBsaWVkIHRvIGFuIGFsZ29yaXRobSBzaGFsbCBub3QgaW52YWxpZGF0ZQphbnkgaXRlcmF0b3Igb3Igc2VxdWVuY2UgdGhhdCBpcyB1c2VkIGJ5IHRoZSBhbGdvcml0aG0uIEludmFsaWRhdGlvbiBvZgp0aGUgc2VxdWVuY2UgaW5jbHVkZXMgZGVzdHJ1Y3Rpb24gb2YgdGhlIHNvcnRpbmcgb3JkZXIgaWYgdGhlIGFsZ29yaXRobQpyZWxpZXMgb24gdGhlIHNvcnRpbmcgb3JkZXIgKHNlZSBzZWN0aW9uIDI1LjMgLSBTb3J0aW5nIGFuZCByZWxhdGVkIG9wZXJhdGlvbnMKW2xpYi5hbGcuc29ydGluZ10pLjwvYmxvY2txdW90ZT4KCjxwPkkgY2FuJ3QganVkZ2Ugd2hldGhlciBpdCBpcyBpbnRlbmRlZCB0aGF0IHRoZSBmdW5jdGlvbiBvYmplY3RzIHN1cHBsaWVkCnRvIHRyYW5zZm9ybSgpLCBhY2N1bXVsYXRlKCksIGlubmVyX3Byb2R1Y3QoKSwgcGFydGlhbF9zdW0oKSwgb3IgYWRqYWNlbnRfZGlmZmVyZW5jZSgpCnNoYWxsIG5vdCBtb2RpZnkgc2VxdWVuY2UgZWxlbWVudHMgdGhyb3VnaCBkZXJlZmVyZW5jZWQgaXRlcmF0b3JzLjwvcD4KCjxwPkl0IGlzIGRlYmF0YWJsZSB3aGV0aGVyIHRoaXMgaXNzdWUgaXMgYSBkZWZlY3Qgb3IgYSBjaGFuZ2UgcmVxdWVzdC4KU2luY2UgdGhlIGNvbnNlcXVlbmNlcyBmb3IgdXNlci1zdXBwbGllZCBmdW5jdGlvbiBvYmplY3RzIGFyZSBkcmFzdGljIGFuZApsaW1pdCB0aGUgdXNlZnVsbmVzcyBvZiB0aGUgYWxnb3JpdGhtcyBzaWduaWZpY2FudGx5IEkgd291bGQgY29uc2lkZXIgaXQKYSBkZWZlY3QuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD48aT5UaGluZ3MgdG8gbm90aWNlIGFib3V0IHRoZXNlIGNoYW5nZXM6PC9pPjwvcD4KCjxvbD4KPGxpPiA8aT5UaGUgZnVsbHktY2xvc2VkICgiW10iIGFzIG9wcG9zZWQgdG8gaGFsZi1jbG9zZWQgIlspIiByYW5nZXMKICAgICBhcmUgaW50ZW50aW9uYWwuIHdlIHdhbnQgdG8gcHJldmVudCBzaWRlLWVmZmVjdHMgZnJvbQogICAgIGludmFsaWRhdGluZyB0aGUgZW5kIGl0ZXJhdG9ycy48L2k+CjwvbGk+Cgo8bGk+IDxpPlRoYXQgaGFzIHRoZSB1bmludGVudGlvbmFsIHNpZGUtZWZmZWN0IG9mIHByb2hpYml0aW5nCiAgICAgbW9kaWZpY2F0aW9uIG9mIHRoZSBlbmQgZWxlbWVudCBhcyBhIHNpZGUtZWZmZWN0LiBUaGlzIGNvdWxkCiAgICAgY29uY2VpdmFibHkgYmUgc2lnbmlmaWNhbnQgaW4gc29tZSBjYXNlcy48L2k+CjwvbGk+Cgo8bGk+IDxpPlRoZSB3b3JkaW5nIGFsc28gcHJldmVudHMgc2lkZS1lZmZlY3RzIGZyb20gbW9kaWZ5aW5nIGVsZW1lbnRzCiAgICAgb2YgdGhlIG91dHB1dCBzZXF1ZW5jZS4gSSBjYW4ndCBpbWFnaW5lIHdoeSBhbnlvbmUgd291bGQgd2FudAogICAgIHRvIGRvIHRoaXMsIGJ1dCBpdCBpcyBhcmd1YWJseSBhIHJlc3RyaWN0aW9uIHRoYXQgaW1wbGVtZW50b3JzCiAgICAgZG9uJ3QgbmVlZCB0byBwbGFjZSBvbiB1c2Vycy48L2k+CjwvbGk+Cgo8bGk+IDxpPkxpZnRpbmcgdGhlIHJlc3RyaWN0aW9ucyBpbXBvc2VkIGluICMyIGFuZCAjMyBhYm92ZSBpcyBwb3NzaWJsZQogICAgIGFuZCBzaW1wbGUsIGJ1dCB3b3VsZCByZXF1aXJlIG1vcmUgdmVyYmlhZ2UuPC9pPgo8L2xpPgo8L29sPgoKPHA+Q2hhbmdlIDI1LjIuMy8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0yLSBSZXF1aXJlczogb3AgYW5kIGJpbmFyeV9vcCBzaGFsbCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAtMi0gUmVxdWlyZXM6IGluIHRoZSByYW5nZXMgW2ZpcnN0MSwgbGFzdDFdLCBbZmlyc3QyLCBmaXJzdDIgKwogIChsYXN0MSAtIGZpcnN0MSldIGFuZCBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEtIGZpcnN0MSldLCBvcCBhbmQKICBiaW5hcnlfb3Agc2hhbGwgbmVpdGhlciBtb2RpZnkgZWxlbWVudHMgbm9yIGludmFsaWRhdGUgaXRlcmF0b3JzIG9yCiAgc3VicmFuZ2VzLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBmdWxseSBjbG9zZWQgcmFuZ2VzIGlzIGludGVudGlvbmFsIC0tZW5kIGZvb3Rub3RlXQo8L2Jsb2NrcXVvdGU+CgoKPHA+Q2hhbmdlIDI1LjIuMy8yIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0yLSBSZXF1aXJlczogb3AgYW5kIGJpbmFyeV9vcCBzaGFsbCBub3QgaGF2ZSBhbnkgc2lkZSBlZmZlY3RzLiAKPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBvcCBhbmQgYmluYXJ5X29wIHNoYWxsIG5vdCBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvcgogICBzdWJyYW5nZXMsIG9yIG1vZGlmeSBlbGVtZW50cyBpbiB0aGUgcmFuZ2VzIFtmaXJzdDEsIGxhc3QxXSwKICAgW2ZpcnN0MiwgZmlyc3QyICsgKGxhc3QxIC0gZmlyc3QxKV0sIGFuZCBbcmVzdWx0LCByZXN1bHQgKyAobGFzdDEKICAgLSBmaXJzdDEpXS4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgZnVsbHkgY2xvc2VkIHJhbmdlcyBpcyBpbnRlbnRpb25hbCAtLWVuZCBmb290bm90ZV0KPC9ibG9ja3F1b3RlPgoKCjxwPkNoYW5nZSAyNi40LjEvMiBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogVCBtdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBDb3B5Q29uc3RydWN0aWJsZQogICAobGliLmNvcHljb25zdHJ1Y3RpYmxlKSBhbmQgQXNzaWduYWJsZSAobGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpCiAgIHR5cGVzLiBiaW5hcnlfb3Agc2hhbGwgbm90IGNhdXNlIHNpZGUgZWZmZWN0cy4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTItIFJlcXVpcmVzOiBUIG11c3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mIENvcHlDb25zdHJ1Y3RpYmxlCiAgIChsaWIuY29weWNvbnN0cnVjdGlibGUpIGFuZCBBc3NpZ25hYmxlCiAgIChsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykgdHlwZXMuIEluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3RdLAogICBiaW5hcnlfb3Agc2hhbGwgbmVpdGhlciBtb2RpZnkgZWxlbWVudHMgbm9yIGludmFsaWRhdGUgaXRlcmF0b3JzCiAgIG9yIHN1YnJhbmdlcy4KICBbRm9vdG5vdGU6IFRoZSB1c2Ugb2YgYSBmdWxseSBjbG9zZWQgcmFuZ2UgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNi40LjIvMiBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogVCBtdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBDb3B5Q29uc3RydWN0aWJsZQogICAobGliLmNvcHljb25zdHJ1Y3RpYmxlKSBhbmQgQXNzaWduYWJsZSAobGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpCiAgIHR5cGVzLiBiaW5hcnlfb3AxIGFuZCBiaW5hcnlfb3AyIHNoYWxsIG5vdCBjYXVzZSBzaWRlIGVmZmVjdHMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogVCBtdXN0IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBDb3B5Q29uc3RydWN0aWJsZQogICAobGliLmNvcHljb25zdHJ1Y3RpYmxlKSBhbmQgQXNzaWduYWJsZSAobGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMpCiAgIHR5cGVzLiBJbiB0aGUgcmFuZ2VzIFtmaXJzdCwgbGFzdF0gYW5kIFtmaXJzdDIsIGZpcnN0MiArIChsYXN0IC0KICAgZmlyc3QpXSwgYmluYXJ5X29wMSBhbmQgYmluYXJ5X29wMiBzaGFsbCBuZWl0aGVyIG1vZGlmeSBlbGVtZW50cwogICBub3IgaW52YWxpZGF0ZSBpdGVyYXRvcnMgb3Igc3VicmFuZ2VzLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBmdWxseSBjbG9zZWQgcmFuZ2VzIGlzIGludGVudGlvbmFsIC0tZW5kIGZvb3Rub3RlXQo8L2Jsb2NrcXVvdGU+CgoKPHA+Q2hhbmdlIDI2LjQuMy80IGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTQtIFJlcXVpcmVzOiBiaW5hcnlfb3AgaXMgZXhwZWN0ZWQgbm90IHRvIGhhdmUgYW55IHNpZGUgZWZmZWN0cy4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CiAgLTQtIFJlcXVpcmVzOiBJbiB0aGUgcmFuZ2VzIFtmaXJzdCwgbGFzdF0gYW5kIFtyZXN1bHQsIHJlc3VsdCArCiAgIChsYXN0IC0gZmlyc3QpXSwgYmluYXJ5X29wIHNoYWxsIG5laXRoZXIgbW9kaWZ5IGVsZW1lbnRzIG5vcgogICBpbnZhbGlkYXRlIGl0ZXJhdG9ycyBvciBzdWJyYW5nZXMuCiAgW0Zvb3Rub3RlOiBUaGUgdXNlIG9mIGZ1bGx5IGNsb3NlZCByYW5nZXMgaXMgaW50ZW50aW9uYWwgLS1lbmQgZm9vdG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNi40LjQvMiBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogYmluYXJ5X29wIHNoYWxsIG5vdCBoYXZlIGFueSBzaWRlIGVmZmVjdHMuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogIC0yLSBSZXF1aXJlczogSW4gdGhlIHJhbmdlcyBbZmlyc3QsIGxhc3RdIGFuZCBbcmVzdWx0LCByZXN1bHQgKwogICAobGFzdCAtIGZpcnN0KV0sIGJpbmFyeV9vcCBzaGFsbCBuZWl0aGVyIG1vZGlmeSBlbGVtZW50cyBub3IKICAgaW52YWxpZGF0ZSBpdGVyYXRvcnMgb3Igc3VicmFuZ2VzLgogIFtGb290bm90ZTogVGhlIHVzZSBvZiBmdWxseSBjbG9zZWQgcmFuZ2VzIGlzIGludGVudGlvbmFsIC0tZW5kIGZvb3Rub3RlXQo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bVG9yb250bzogRGF2ZSBBYnJhaGFtcyBzdXBwbGllZCB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IFByb3Bvc2VkIHJlc29sdXRpb24gd2FzIG1vZGlmaWVkIHNsaWdodGx5LiBNYXR0CmFkZGVkIGZvb3Rub3RlcyBwb2ludGluZyBvdXQgdGhhdCB0aGUgdXNlIG9mIGNsb3NlZCByYW5nZXMgd2FzCmludGVudGlvbmFsLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyNDMiPjxoMz4yNDMuJm5ic3A7PHR0PmdldDwvdHQ+IGFuZCA8dHQ+Z2V0bGluZTwvdHQ+IHdoZW4gc2VudHJ5IHJlcG9ydHMgZmFpbHVyZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwO01heSAxNSAyMDAwPC9wPgo8cD5iYXNpY19pc3RyZWFtJmx0OyZndDs6OmdldCgpLCBhbmQgYmFzaWNfaXN0cmVhbSZsdDsmZ3Q7OjpnZXRsaW5lKCksCmFyZSB1bmNsZWFyIHdpdGggcmVzcGVjdCB0byB0aGUgYmVoYXZpb3IgYW5kIHNpZGUtZWZmZWN0cyBvZiB0aGUgbmFtZWQKZnVuY3Rpb25zIGluIGNhc2Ugb2YgYW4gZXJyb3IuPC9wPgoKPHA+MjcuNi4xLjMsIHAxIHN0YXRlcyB0aGF0ICIuLi4gSWYgdGhlIHNlbnRyeSBvYmplY3QgcmV0dXJucwp0cnVlLCB3aGVuIGNvbnZlcnRlZCB0byBhIHZhbHVlIG9mIHR5cGUgYm9vbCwgdGhlIGZ1bmN0aW9uIGVuZGVhdm9ycwp0byBvYnRhaW4gdGhlIHJlcXVlc3RlZCBpbnB1dC4uLiIgSXQgaXMgbm90IGNsZWFyIGZyb20gdGhpcyAob3IKdGhlIHJlc3Qgb2YgdGhlIHBhcmFncmFwaCkgd2hhdCBwcmVjaXNlbHkgdGhlIGJlaGF2aW9yIHNob3VsZCBiZSB3aGVuCnRoZSBzZW50cnkgY3RvciBleGl0cyBieSB0aHJvd2luZyBhbiBleGNlcHRpb24gb3Igd2hlbiB0aGUgc2VudHJ5Cm9iamVjdCByZXR1cm5zIGZhbHNlLiAgSW4gcGFydGljdWxhciwgd2hhdCBpcyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMKZXh0cmFjdGVkIHRoYXQgZ2NvdW50KCkgcmV0dXJucyBzdXBwb3NlZCB0byBiZT88L3A+Cgo8cD4yNy42LjEuMyBwOCBhbmQgcDE5IHNheSBhYm91dCB0aGUgZWZmZWN0cyBvZiBnZXQoKSBhbmQgZ2V0bGluZSgpOgoiLi4uICBJbiBhbnkgY2FzZSwgaXQgdGhlbiBzdG9yZXMgYSBudWxsIGNoYXJhY3RlciAodXNpbmcKY2hhclQoKSkgaW50byB0aGUgbmV4dCBzdWNjZXNzaXZlIGxvY2F0aW9uIG9mIHRoZSBhcnJheS4iIElzIG5vdApjbGVhciB3aGV0aGVyIHRoaXMgc2VudGVuY2UgYXBwbGllcyBpZiBlaXRoZXIgb2YgdGhlIGNvbmRpdGlvbnMgYWJvdmUKaG9sZHMgKGkuZS4sIHdoZW4gc2VudHJ5IGZhaWxzKS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRvIDI3LjYuMS4zLCBwMSBhZnRlciB0aGUgc2VudGVuY2U8L3A+Cgo8YmxvY2txdW90ZT4KIi4uLiBJZiB0aGUgc2VudHJ5IG9iamVjdCByZXR1cm5zIHRydWUsIHdoZW4gY29udmVydGVkIHRvIGEgdmFsdWUgb2YKdHlwZSBib29sLCB0aGUgZnVuY3Rpb24gZW5kZWF2b3JzIHRvIG9idGFpbiB0aGUgcmVxdWVzdGVkIGlucHV0LiIKPC9ibG9ja3F1b3RlPgoKPHA+dGhlIGZvbGxvd2luZzwvcD4KCgo8YmxvY2txdW90ZT4KIk90aGVyd2lzZSwgaWYgdGhlIHNlbnRyeSBjb25zdHJ1Y3RvciBleGl0cyBieSB0aHJvd2luZyBhbiBleGNlcHRpb24gb3IKaWYgdGhlIHNlbnRyeSBvYmplY3QgcmV0dXJucyBmYWxzZSwgd2hlbiBjb252ZXJ0ZWQgdG8gYSB2YWx1ZSBvZiB0eXBlCmJvb2wsIHRoZSBmdW5jdGlvbiByZXR1cm5zIHdpdGhvdXQgYXR0ZW1wdGluZyB0byBvYnRhaW4gYW55IGlucHV0LiBJbgplaXRoZXIgY2FzZSB0aGUgbnVtYmVyIG9mIGV4dHJhY3RlZCBjaGFyYWN0ZXJzIGlzIHNldCB0byAwOyB1bmZvcm1hdHRlZAppbnB1dCBmdW5jdGlvbnMgdGFraW5nIGEgY2hhcmFjdGVyIGFycmF5IG9mIG5vbi16ZXJvIHNpemUgYXMgYW4gYXJndW1lbnQKc2hhbGwgYWxzbyBzdG9yZSBhIG51bGwgY2hhcmFjdGVyICh1c2luZyBjaGFyVCgpKSBpbiB0aGUgZmlyc3QgbG9jYXRpb24Kb2YgdGhlIGFycmF5LiIKPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWx0aG91Z2ggdGhlIGdlbmVyYWwgcGhpbG9zb3BoeSBvZiB0aGUgaW5wdXQgZnVuY3Rpb25zIGlzIHRoYXQgdGhlCmFyZ3VtZW50IHNob3VsZCBub3QgYmUgbW9kaWZpZWQgdXBvbiBmYWlsdXJlLCA8dHQ+Z2V0bGluZTwvdHQ+Cmhpc3RvcmljYWxseSBhZGRlZCBhIHRlcm1pbmF0aW5nIG51bGwgdW5jb25kaXRpb25hbGx5LiAgTW9zdAppbXBsZW1lbnRhdGlvbnMgc3RpbGwgZG8gdGhhdC4gIEVhcmxpZXIgdmVyc2lvbnMgb2YgdGhlIGRyYWZ0IHN0YW5kYXJkCmhhZCBsYW5ndWFnZSB0aGF0IG1hZGUgdGhpcyBhbiB1bmFtYmlndW91cyByZXF1aXJlbWVudDsgdGhvc2Ugd29yZHMKd2VyZSBtb3ZlZCB0byBhIHBsYWNlIHdoZXJlIHRoZWlyIGNvbnRleHQgbWFkZSB0aGVtIGxlc3MgY2xlYXIuICBTZWUKSmVycnkgU2Nod2FyeidzIG1lc3NhZ2UgYysrc3RkLWxpYi03NjE4LjwvcD4KPGhyPgo8YSBuYW1lPSIyNDgiPjxoMz4yNDguJm5ic3A7dGltZV9nZXQgZmFpbHMgdG8gc2V0IGVvZmJpdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmNhdGVnb3J5LnRpbWUiPiBbbGliLmNhdGVnb3J5LnRpbWVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjIgSnVuZSAyMDAwPC9wPgo8cD5UaGVyZSBpcyBubyByZXF1aXJlbWVudCB0aGF0IGFueSBvZiB0aW1lX2dldCBtZW1iZXIgZnVuY3Rpb25zIHNldAppb3M6OmVvZmJpdCB3aGVuIHRoZXkgcmVhY2ggdGhlIGVuZCBpdGVyYXRvciB3aGlsZSBwYXJzaW5nIHRoZWlyIGlucHV0LgpTaW5jZSBtZW1iZXJzIG9mIGJvdGggdGhlIG51bV9nZXQgYW5kIG1vbmV5X2dldCBmYWNldHMgYXJlIHJlcXVpcmVkIHRvCmRvIHNvICgyMi4yLjIuMS4yLCBhbmQgMjIuMi42LjEuMiwgcmVzcGVjdGl2ZWx5KSwgdGltZV9nZXQgbWVtYmVycwpzaG91bGQgZm9sbG93IHRoZSBzYW1lIHJlcXVpcmVtZW50IGZvciBjb25zaXN0ZW5jeS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHBhcmFncmFwaCAyIHRvIHNlY3Rpb24gMjIuMi41LjEgd2l0aCB0aGUgZm9sbG93aW5nIHRleHQ6PC9wPgoKPGJsb2NrcXVvdGU+CklmIHRoZSBlbmQgaXRlcmF0b3IgaXMgcmVhY2hlZCBkdXJpbmcgcGFyc2luZyBieSBhbnkgb2YgdGhlIGdldCgpCm1lbWJlciBmdW5jdGlvbnMsIHRoZSBtZW1iZXIgc2V0cyBpb3NfYmFzZTo6ZW9mYml0IGluIGVyci4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VHdvIGFsdGVybmF0aXZlIHJlc29sdXRpb25zIHdlcmUgcHJvcG9zZWQuICBUaGUgTFdHIGNob3NlIHRoaXMgb25lCmJlY2F1c2UgaXQgd2FzIG1vcmUgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgZW9mIGlzIGRlc2NyaWJlZCBmb3Igb3RoZXIKaW5wdXQgZmFjZXRzLjwvcD4KPGhyPgo8YSBuYW1lPSIyNTAiPjxoMz4yNTAuJm5ic3A7c3BsaWNpbmcgaW52YWxpZGF0ZXMgaXRlcmF0b3JzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm9wcyI+IFtsaWIubGlzdC5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtCcmlhbiBQYXJrZXIgJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEp1bCAyMDAwPC9wPgo8cD4KU2VjdGlvbiAyMy4yLjIuNCBbbGliLmxpc3Qub3BzXSBzdGF0ZXMgdGhhdAo8L3A+CjxwcmU+ICB2b2lkIHNwbGljZShpdGVyYXRvciBwb3NpdGlvbiwgbGlzdCZsdDtULCBBbGxvY2F0b3ImZ3Q7JmFtcDsgeCk7CjwvcHJlPgo8cD4KPGk+aW52YWxpZGF0ZXM8L2k+IGFsbCBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgdG8gbGlzdCA8dHQ+eDwvdHQ+Lgo8L3A+Cgo8cD4KVGhpcyBpcyB1bm5lY2Vzc2FyeSBhbmQgZGVmZWF0cyBhbiBpbXBvcnRhbnQgZmVhdHVyZSBvZiBzcGxpY2UuIEluCmZhY3QsIHRoZSBTR0kgU1RMIGd1YXJhbnRlZXMgdGhhdCBpdGVyYXRvcnMgdG8gPHR0Png8L3R0PiByZW1haW4gdmFsaWQKYWZ0ZXIgPHR0PnNwbGljZTwvdHQ+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPkFkZCBhIGZvb3Rub3RlIHRvIDIzLjIuMi40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubGlzdC5vcHMiPiBbbGliLmxpc3Qub3BzXTwvYT4sIHBhcmFncmFwaCAxOjwvcD4KPGJsb2NrcXVvdGU+Cls8aT5Gb290bm90ZTo8L2k+IEFzIHNwZWNpZmllZCBpbiAyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHNdPC9hPiwgcGFyYWdyYXBocwo0LTUsIHRoZSBzZW1hbnRpY3MgZGVzY3JpYmVkIGluIHRoaXMgY2xhdXNlIGFwcGxpZXMgb25seSB0byB0aGUgY2FzZQp3aGVyZSBhbGxvY2F0b3JzIGNvbXBhcmUgZXF1YWwuICAtLWVuZCBmb290bm90ZV0KPC9ibG9ja3F1b3RlPgoKPHA+SW4gMjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm9wcyI+IFtsaWIubGlzdC5vcHNdPC9hPiwgcmVwbGFjZSBwYXJhZ3JhcGggNCB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CkVmZmVjdHM6IEluc2VydHMgdGhlIGNvbnRlbnRzIG9mIHggYmVmb3JlIHBvc2l0aW9uIGFuZCB4IGJlY29tZXMgCmVtcHR5LiAgUG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdG8gdGhlIG1vdmVkIGVsZW1lbnRzIG9mIHggbm93IHJlZmVyIHRvIAp0aG9zZSBzYW1lIGVsZW1lbnRzIGJ1dCBhcyBtZW1iZXJzIG9mICp0aGlzLiAgSXRlcmF0b3JzIHJlZmVycmluZyB0byB0aGUgCm1vdmVkIGVsZW1lbnRzIHdpbGwgY29udGludWUgdG8gcmVmZXIgdG8gdGhlaXIgZWxlbWVudHMsIGJ1dCB0aGV5IG5vdyAKYmVoYXZlIGFzIGl0ZXJhdG9ycyBpbnRvICp0aGlzLCBub3QgaW50byB4Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3Qub3BzIj4gW2xpYi5saXN0Lm9wc108L2E+LCByZXBsYWNlIHBhcmFncmFwaCA3IHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogSW5zZXJ0cyBhbiBlbGVtZW50IHBvaW50ZWQgdG8gYnkgaSBmcm9tIGxpc3QgeCBiZWZvcmUgCnBvc2l0aW9uIGFuZCByZW1vdmVzIHRoZSBlbGVtZW50IGZyb20geC4gVGhlIHJlc3VsdCBpcyB1bmNoYW5nZWQgaWYgCnBvc2l0aW9uID09IGkgb3IgcG9zaXRpb24gPT0gKytpLiAgUG9pbnRlcnMgYW5kIHJlZmVyZW5jZXMgdG8gKmkgY29udGludWUgCnRvIHJlZmVyIHRvIHRoaXMgc2FtZSBlbGVtZW50IGJ1dCBhcyBhIG1lbWJlciBvZiAqdGhpcy4gIEl0ZXJhdG9ycyB0byAqaSAKKGluY2x1ZGluZyBpIGl0c2VsZikgY29udGludWUgdG8gcmVmZXIgdG8gdGhlIHNhbWUgZWxlbWVudCwgYnV0IG5vdyAKYmVoYXZlIGFzIGl0ZXJhdG9ycyBpbnRvICp0aGlzLCBub3QgaW50byB4Lgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3Qub3BzIj4gW2xpYi5saXN0Lm9wc108L2E+LCByZXBsYWNlIHBhcmFncmFwaCAxMiB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+ClJlcXVpcmVzOiBbZmlyc3QsIGxhc3QpIGlzIGEgdmFsaWQgcmFuZ2UgaW4geC4gVGhlIHJlc3VsdCBpcyAKdW5kZWZpbmVkIGlmIHBvc2l0aW9uIGlzIGFuIGl0ZXJhdG9yIGluIHRoZSByYW5nZSBbZmlyc3QsIGxhc3QpLiAgClBvaW50ZXJzIGFuZCByZWZlcmVuY2VzIHRvIHRoZSBtb3ZlZCBlbGVtZW50cyBvZiB4IG5vdyByZWZlciB0byB0aG9zZSAKc2FtZSBlbGVtZW50cyBidXQgYXMgbWVtYmVycyBvZiAqdGhpcy4gIEl0ZXJhdG9ycyByZWZlcnJpbmcgdG8gdGhlIG1vdmVkIAplbGVtZW50cyB3aWxsIGNvbnRpbnVlIHRvIHJlZmVyIHRvIHRoZWlyIGVsZW1lbnRzLCBidXQgdGhleSBub3cgYmVoYXZlIGFzIAppdGVyYXRvcnMgaW50byAqdGhpcywgbm90IGludG8geC4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3ByZS1Db3BlbmhhZ2VuOiBIb3dhcmQgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHNhaWQgdGhhdCBpdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMKd291bGQgcmVtYWluICJ2YWxpZCIuICBUaGUgbmV3IHByb3Bvc2VkIHJlc29sdXRpb24gY2xhcmlmaWVzIHdoYXQgdGhhdAptZWFucy4gIE5vdGUgdGhhdCB0aGlzIG9ubHkgYXBwbGllcyB0byB0aGUgY2FzZSBvZiBlcXVhbCBhbGxvY2F0b3JzLgpGcm9tIDIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCA0LCB0aGUgYmVoYXZpb3Igb2YgbGlzdCB3aGVuCmFsbG9jYXRvcnMgY29tcGFyZSBub25lcXVhbCBpcyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgc3RhbmRhcmQuPC9wPgo8aHI+CjxhIG5hbWU9IjI1MSI+PC9hPjxoMz48YSBuYW1lPSIyNTEiPjI1MS4mbmJzcDtiYXNpY19zdHJpbmdidWYgbWlzc2luZyBhbGxvY2F0b3JfdHlwZTwvYT48L2gzPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmIj4gW2xpYi5zdHJpbmdidWZdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjggSnVsIDIwMDA8L3A+CjxwPlRoZSBzeW5vcHNpcyBmb3IgdGhlIHRlbXBsYXRlIGNsYXNzIDx0dD5iYXNpY19zdHJpbmdidWY8L3R0Pgpkb2Vzbid0IGxpc3QgYSB0eXBlZGVmIGZvciB0aGUgdGVtcGxhdGUgcGFyYW1ldGVyCjx0dD5BbGxvY2F0b3I8L3R0Pi4gVGhpcyBtYWtlcyBpdCBpbXBvc3NpYmxlIHRvIGRldGVybWluZSB0aGUgdHlwZSBvZgp0aGUgYWxsb2NhdG9yIGF0IGNvbXBpbGUgdGltZS4gSXQncyBhbHNvIGluY29uc2lzdGVudCB3aXRoIGFsbCBvdGhlcgp0ZW1wbGF0ZSBjbGFzc2VzIGluIHRoZSBsaWJyYXJ5IHRoYXQgZG8gcHJvdmlkZSBhIHR5cGVkZWYgZm9yIHRoZQo8dHQ+QWxsb2NhdG9yPC90dD4gcGFyYW1ldGVyLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgdG8gdGhlIHN5bm9wc2VzIG9mIHRoZSBjbGFzcyB0ZW1wbGF0ZXMgYmFzaWNfc3RyaW5nYnVmICgyNy43LjEpLApiYXNpY19pc3RyaW5nc3RyZWFtICgyNy43LjIpLCBiYXNpY19vc3RyaW5nc3RyZWFtICgyNy43LjMpLCBhbmQgCmJhc2ljX3N0cmluZ3N0cmVhbSAoMjcuNy40KSB0aGUgdHlwZWRlZjo8L3A+CjxwcmU+ICB0eXBlZGVmIEFsbG9jYXRvciBhbGxvY2F0b3JfdHlwZTsKPC9wcmU+Cjxocj4KPGEgbmFtZT0iMjUyIj48aDM+MjUyLiZuYnNwO21pc3NpbmcgY2FzdHMvQy1zdHlsZSBjYXN0cyB1c2VkIGluIGlvc3RyZWFtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZy5zdHJlYW1zIj4gW2xpYi5zdHJpbmcuc3RyZWFtc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyOCBKdWwgMjAwMDwvcD4KPHA+MjcuNy4yLjIsIHAxIHVzZXMgYSBDLXN0eWxlIGNhc3QgcmF0aGVyIHRoYW4gdGhlIG1vcmUgYXBwcm9wcmlhdGUKY29uc3RfY2FzdCZsdDsmZ3Q7IGluIHRoZSBSZXR1cm5zIGNsYXVzZSBmb3IgYmFzaWNfaXN0cmluZ3N0cmVhbSZsdDsmZ3Q7OjpyZGJ1ZigpLgpUaGUgc2FtZSBDLXN0eWxlIGNhc3QgaXMgYmVpbmcgdXNlZCBpbiAyNy43LjMuMiwgcDEsIEQuNy4yLjIsIHAxLCBhbmQKRC43LjMuMiwgcDEsIGFuZCBwZXJoYXBzIGVsc2V3aGVyZS4gMjcuNy42LCBwMSBhbmQgRC43LjIuMiwgcDEgYXJlIG1pc3NpbmcKdGhlIGNhc3QgYWx0b2dldGhlci48L3A+Cgo8cD5DLXN0eWxlIGNhc3RzIGhhdmUgbm90IGJlZW4gZGVwcmVjYXRlZCwgc28gdGhlIGZpcnN0IHBhcnQgb2YgdGhpcwppc3N1ZSBpcyBzdHlsaXN0aWMgcmF0aGVyIHRoYW4gYSBtYXR0ZXIgb2YgY29ycmVjdG5lc3MuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIDI3LjcuMi4yLCBwMSByZXBsYWNlIDwvcD4KPHByZT4gIC0xLSBSZXR1cm5zOiAoYmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KikmYW1wO3NiLjwvcHJlPgoKPHA+d2l0aDwvcD4KPHByZT4gIC0xLSBSZXR1cm5zOiBjb25zdF9jYXN0Jmx0O2Jhc2ljX3N0cmluZ2J1ZiZsdDtjaGFyVCx0cmFpdHMsQWxsb2NhdG9yJmd0OyomZ3Q7KCZhbXA7c2IpLjwvcHJlPgoKCjxwPkluIDI3LjcuMy4yLCBwMSByZXBsYWNlPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IChiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqKSZhbXA7c2IuPC9wcmU+Cgo8cD53aXRoPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7YmFzaWNfc3RyaW5nYnVmJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KiZndDsoJmFtcDtzYikuPC9wcmU+Cgo8cD5JbiAyNy43LjYsIHAxLCByZXBsYWNlPC9wPgo8cHJlPiAgLTEtIFJldHVybnM6ICZhbXA7c2I8L3ByZT4KCjxwPndpdGg8L3A+CjxwcmU+ICAtMS0gUmV0dXJuczogY29uc3RfY2FzdCZsdDtiYXNpY19zdHJpbmdidWYmbHQ7Y2hhclQsdHJhaXRzLEFsbG9jYXRvciZndDsqJmd0OygmYW1wO3NiKS48L3ByZT4KCjxwPkluIEQuNy4yLjIsIHAxIHJlcGxhY2U8L3A+CjxwcmU+ICAtMi0gUmV0dXJuczogJmFtcDtzYi4gPC9wcmU+Cgo8cD53aXRoPC9wPgo8cHJlPiAgLTItIFJldHVybnM6IGNvbnN0X2Nhc3QmbHQ7c3Ryc3RyZWFtYnVmKiZndDsoJmFtcDtzYikuPC9wcmU+Cjxocj4KPGEgbmFtZT0iMjUzIj48aDM+MjUzLiZuYnNwO3ZhbGFycmF5IGhlbHBlciBmdW5jdGlvbnMgYXJlIGFsbW9zdCBlbnRpcmVseSB1c2VsZXNzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuMy4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudmFsYXJyYXkuY29ucyI+IFtsaWIudmFsYXJyYXkuY29uc108L2E+LCAyNi4zLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi52YWxhcnJheS5hc3NpZ24iPiBbbGliLnZhbGFycmF5LmFzc2lnbl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1JvYmVydCBLbGFyZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MzEgSnVsIDIwMDA8L3A+CjxwPlRoaXMgZGlzY3Vzc2lvbiBpcyBhZGFwdGVkIGZyb20gbWVzc2FnZSBjKytzdGQtbGliLTcwNTYgcG9zdGVkCk5vdmVtYmVyIDExLCAxOTk5LiAgSSBkb24ndCB0aGluayB0aGF0IGFueW9uZSBjYW4gcmVhc29uYWJseSBjbGFpbQp0aGF0IHRoZSBwcm9ibGVtIGRlc2NyaWJlZCBiZWxvdyBpcyBOQUQuPC9wPgoKPHA+VGhlc2UgdmFsYXJyYXkgY29uc3RydWN0b3JzIGNhbiBuZXZlciBiZSBjYWxsZWQ6PC9wPgoKPHByZT4gICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICAgICAgdmFsYXJyYXkmbHQ7VCZndDs6OnZhbGFycmF5KGNvbnN0IHNsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7CiAgICAgICAgIHZhbGFycmF5Jmx0O1QmZ3Q7Ojp2YWxhcnJheShjb25zdCBnc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICAgICAgdmFsYXJyYXkmbHQ7VCZndDs6OnZhbGFycmF5KGNvbnN0IG1hc2tfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICAgICAgdmFsYXJyYXkmbHQ7VCZndDs6OnZhbGFycmF5KGNvbnN0IGluZGlyZWN0X2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKPC9wcmU+Cgo8cD5TaW1pbGFybHksIHRoZXNlIHZhbGFycmF5IGFzc2lnbm1lbnQgb3BlcmF0b3JzIGNhbm5vdCBiZQpjYWxsZWQ6PC9wPgoKPHByZT4gICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgIHZhbGFycmF5Jmx0O1QmZ3Q7IHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgIHZhbGFycmF5Jmx0O1QmZ3Q7IHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7KTsKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCZndDsKICAgICB2YWxhcnJheSZsdDtUJmd0OyB2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwogICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgIHZhbGFycmF5Jmx0O1QmZ3Q7IHZhbGFycmF5Jmx0O1QmZ3Q7OjpvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXkmbHQ7VCZndDsgJmFtcDspOwo8L3ByZT4KCjxwPlBsZWFzZSBjb25zaWRlciB0aGUgZm9sbG93aW5nIGV4YW1wbGU6PC9wPgoKPHByZT4gICAjaW5jbHVkZSAmbHQ7dmFsYXJyYXkmZ3Q7CiAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CgogICBpbnQgbWFpbigpCiAgIHsKICAgICAgIHZhbGFycmF5Jmx0O2RvdWJsZSZndDsgdmExKDEyKTsKICAgICAgIHZhbGFycmF5Jmx0O2RvdWJsZSZndDsgdmEyKHZhMVtzbGljZSgxLDQsMyldKTsgLy8gbGluZSAxCiAgIH0KPC9wcmU+CgoKPHA+U2luY2UgdGhlIHZhbGFycmF5IHZhMSBpcyBub24tY29uc3QsIHRoZSByZXN1bHQgb2YgdGhlIHN1Yi1leHByZXNzaW9uCnZhMVtzbGljZSgxLDQsMyldIGF0IGxpbmUgMSBpcyBhbiBydmFsdWUgb2YgdHlwZSBjb25zdApzdGQ6OnNsaWNlX2FycmF5Jmx0O2RvdWJsZSZndDsuICBUaGlzIHNsaWNlX2FycmF5IHJ2YWx1ZSBpcyB0aGVuIHVzZWQgdG8KY29uc3RydWN0IHZhMi4gIFRoZSBjb25zdHJ1Y3RvciB0aGF0IGlzIHVzZWQgdG8gY29uc3RydWN0IHZhMiBpcwpkZWNsYXJlZCBsaWtlIHRoaXM6PC9wPgoKPHByZT4gICAgIHRlbXBsYXRlICZsdDtjbGFzcyBUJmd0OwogICAgIHZhbGFycmF5Jmx0O1QmZ3Q7Ojp2YWxhcnJheShjb25zdCBzbGljZV9hcnJheSZsdDtUJmd0OyAmYW1wOyk7CjwvcHJlPgoKPHA+Tm90aWNlIHRoZSBjb25zdHJ1Y3RvcidzIGNvbnN0IHJlZmVyZW5jZSBwYXJhbWV0ZXIuICBXaGVuIHRoZQpjb25zdHJ1Y3RvciBpcyBjYWxsZWQsIGEgc2xpY2VfYXJyYXkgbXVzdCBiZSBib3VuZCB0byB0aGlzIHJlZmVyZW5jZS4KVGhlIHJ1bGVzIGZvciBiaW5kaW5nIGFuIHJ2YWx1ZSB0byBhIGNvbnN0IHJlZmVyZW5jZSBhcmUgaW4gOC41LjMsCnBhcmFncmFwaCA1IChzZWUgYWxzbyAxMy4zLjMuMS40KS4gIFNwZWNpZmljYWxseSwgcGFyYWdyYXBoIDUKaW5kaWNhdGVzIHRoYXQgYSBzZWNvbmQgc2xpY2VfYXJyYXkgcnZhbHVlIGlzIGNvbnN0cnVjdGVkIChpbiB0aGlzCmNhc2UgY29weS1jb25zdHJ1Y3RlZCkgZnJvbSB0aGUgZmlyc3Qgb25lOyBpdCBpcyB0aGlzIHNlY29uZCBydmFsdWUKdGhhdCBpcyBib3VuZCB0byB0aGUgcmVmZXJlbmNlIHBhcmFtZXRlci4gIFBhcmFncmFwaCA1IGFsc28gcmVxdWlyZXMKdGhhdCB0aGUgY29uc3RydWN0b3IgdGhhdCBpcyB1c2VkIGZvciB0aGlzIHB1cnBvc2UgYmUgY2FsbGFibGUsCnJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgc2Vjb25kIHJ2YWx1ZSBpcyBlbGlkZWQuICBUaGUKY29weS1jb25zdHJ1Y3RvciBpbiB0aGlzIGNhc2UgaXMgbm90IGNhbGxhYmxlLCBob3dldmVyLCBiZWNhdXNlIGl0IGlzCnByaXZhdGUuICBUaGVyZWZvcmUsIHRoZSBjb21waWxlciBzaG91bGQgcmVwb3J0IGFuIGVycm9yLjwvcD4KCjxwPlNpbmNlIHNsaWNlX2FycmF5cyBhcmUgYWx3YXlzIHJ2YWx1ZXMsIHRoZSB2YWxhcnJheSBjb25zdHJ1Y3RvciB0aGF0IGhhcyBhCnBhcmFtZXRlciBvZiB0eXBlIGNvbnN0IHNsaWNlX2FycmF5Jmx0O1QmZ3Q7ICZhbXA7IGNhbiBuZXZlciBiZSBjYWxsZWQuICBUaGUKc2FtZSByZWFzb25pbmcgYXBwbGllcyB0byB0aGUgdGhyZWUgb3RoZXIgY29uc3RydWN0b3JzIGFuZCB0aGUgZm91cgphc3NpZ25tZW50IG9wZXJhdG9ycyB0aGF0IGFyZSBsaXN0ZWQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIHBvc3QuCkZ1cnRoZXJtb3JlLCBzaW5jZSB0aGVzZSBmdW5jdGlvbnMgY2Fubm90IGJlIGNhbGxlZCwgdGhlIHZhbGFycmF5IGhlbHBlcgpjbGFzc2VzIGFyZSBhbG1vc3QgZW50aXJlbHkgdXNlbGVzcy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+c2xpY2VfYXJyYXk6PC9wPgo8dWw+CjxsaT4gTWFrZSB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgY29weS1hc3NpZ25tZW50IG9wZXJhdG9yIGRlY2xhcmF0aW9ucwogICAgIHB1YmxpYyBpbiB0aGUgc2xpY2VfYXJyYXkgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBpbiAyNi4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuc2xpY2UuYXJyYXkiPiBbbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5XTwvYT4gPC9saT4KPGxpPiByZW1vdmUgcGFyYWdyYXBoIDMgb2YgMjYuMy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLnNsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5zbGljZS5hcnJheV08L2E+CjwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGRlY2xhcmF0aW9uIGZyb20gMjYuMy41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29ucy5zbGljZS5hcnIiPiBbbGliLmNvbnMuc2xpY2UuYXJyXTwvYT4KPC9saT4KPGxpPiBjaGFuZ2UgcGFyYWdyYXBoIDEgb2YgMjYuMy41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuY29ucy5zbGljZS5hcnIiPiBbbGliLmNvbnMuc2xpY2UuYXJyXTwvYT4gdG8gcmVhZCAiVGhpcyBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZAogICAgdG8gYmUgcHJpdmF0ZS4gIFRoaXMgY29uc3RydWN0b3IgbmVlZCBub3QgYmUgZGVmaW5lZC4iPC9saT4KPGxpPiByZW1vdmUgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mIDI2LjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnNsaWNlLmFyci5hc3NpZ24iPiBbbGliLnNsaWNlLmFyci5hc3NpZ25dPC9hPgo8L2xpPgo8bGk+IENoYW5nZSB0aGUgZmlyc3QgdGhyZWUgd29yZHMgb2YgdGhlIHNlY29uZCBzZW50ZW5jZSBvZiBwYXJhZ3JhcGggMSBvZgogICAgMjYuMy41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuc2xpY2UuYXJyLmFzc2lnbiI+IFtsaWIuc2xpY2UuYXJyLmFzc2lnbl08L2E+IHRvICJUaGVzZSBhc3NpZ25tZW50IG9wZXJhdG9ycyBoYXZlIjwvbGk+CjwvdWw+Cgo8cD5nc2xpY2VfYXJyYXk6PC9wPgo8dWw+CjxsaT4gTWFrZSB0aGUgY29weSBjb25zdHJ1Y3RvciBhbmQgY29weS1hc3NpZ25tZW50IG9wZXJhdG9yIGRlY2xhcmF0aW9ucwogICAgcHVibGljIGluIHRoZSBnc2xpY2VfYXJyYXkgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBpbiAyNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuZ3NsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXldPC9hPiA8L2xpPgo8bGk+IHJlbW92ZSB0aGUgbm90ZSBpbiBwYXJhZ3JhcGggMyBvZiAyNi4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUuZ3NsaWNlLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5nc2xpY2UuYXJyYXldPC9hPgo8L2xpPgo8bGk+IHJlbW92ZSB0aGUgY29weSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBmcm9tIDI2LjMuNy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5jb25zIj4gW2xpYi5nc2xpY2UuYXJyYXkuY29uc108L2E+CjwvbGk+CjxsaT4gY2hhbmdlIHBhcmFncmFwaCAxIG9mIDI2LjMuNy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5jb25zIj4gW2xpYi5nc2xpY2UuYXJyYXkuY29uc108L2E+IHRvIHJlYWQgIlRoaXMgY29uc3RydWN0b3IgaXMgZGVjbGFyZWQKICAgIHRvIGJlIHByaXZhdGUuICBUaGlzIGNvbnN0cnVjdG9yIG5lZWQgbm90IGJlIGRlZmluZWQuIjwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiBwYXJhZ3JhcGggMSBvZiAyNi4zLjcuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5nc2xpY2UuYXJyYXkuYXNzaWduIj4gW2xpYi5nc2xpY2UuYXJyYXkuYXNzaWduXTwvYT4KPC9saT4KPGxpPiBDaGFuZ2UgdGhlIGZpcnN0IHRocmVlIHdvcmRzIG9mIHRoZSBzZWNvbmQgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YKICAgIDI2LjMuNy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmdzbGljZS5hcnJheS5hc3NpZ24iPiBbbGliLmdzbGljZS5hcnJheS5hc3NpZ25dPC9hPiB0byAiVGhlc2UgYXNzaWdubWVudCBvcGVyYXRvcnMgaGF2ZSI8L2xpPgo8L3VsPgoKPHA+bWFza19hcnJheTo8L3A+Cjx1bD4KPGxpPiBNYWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3IgZGVjbGFyYXRpb25zCiAgICBwdWJsaWMgaW4gdGhlIG1hc2tfYXJyYXkgY2xhc3MgdGVtcGxhdGUgZGVmaW5pdGlvbiBpbiAyNi4zLjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUubWFzay5hcnJheSI+IFtsaWIudGVtcGxhdGUubWFzay5hcnJheV08L2E+IDwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAyIG9mIDI2LjMuOCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5tYXNrLmFycmF5XTwvYT4KPC9saT4KPGxpPiByZW1vdmUgdGhlIGNvcHkgY29uc3RydWN0b3IgZGVjbGFyYXRpb24gZnJvbSAyNi4zLjguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5tYXNrLmFycmF5LmNvbnMiPiBbbGliLm1hc2suYXJyYXkuY29uc108L2E+CjwvbGk+CjxsaT4gY2hhbmdlIHBhcmFncmFwaCAxIG9mIDI2LjMuOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm1hc2suYXJyYXkuY29ucyI+IFtsaWIubWFzay5hcnJheS5jb25zXTwvYT4gdG8gcmVhZCAiVGhpcyBjb25zdHJ1Y3RvciBpcyBkZWNsYXJlZAogICAgdG8gYmUgcHJpdmF0ZS4gIFRoaXMgY29uc3RydWN0b3IgbmVlZCBub3QgYmUgZGVmaW5lZC4iPC9saT4KPGxpPiByZW1vdmUgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mIDI2LjMuOC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLm1hc2suYXJyYXkuYXNzaWduIj4gW2xpYi5tYXNrLmFycmF5LmFzc2lnbl08L2E+CjwvbGk+CjxsaT4gQ2hhbmdlIHRoZSBmaXJzdCB0aHJlZSB3b3JkcyBvZiB0aGUgc2Vjb25kIHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mCiAgICAyNi4zLjguMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5tYXNrLmFycmF5LmFzc2lnbiI+IFtsaWIubWFzay5hcnJheS5hc3NpZ25dPC9hPiB0byAiVGhlc2UgYXNzaWdubWVudCBvcGVyYXRvcnMgaGF2ZSI8L2xpPgo8L3VsPgoKPHA+aW5kaXJlY3RfYXJyYXk6PC9wPgo8dWw+CjxsaT5NYWtlIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5LWFzc2lnbm1lbnQgb3BlcmF0b3IgZGVjbGFyYXRpb25zCiAgICBwdWJsaWMgaW4gdGhlIGluZGlyZWN0X2FycmF5IGNsYXNzIGRlZmluaXRpb24gaW4gMjYuMy45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLnRlbXBsYXRlLmluZGlyZWN0LmFycmF5Ij4gW2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheV08L2E+CjwvbGk+CjxsaT4gcmVtb3ZlIHRoZSBub3RlIGluIHBhcmFncmFwaCAyIG9mIDI2LjMuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi50ZW1wbGF0ZS5pbmRpcmVjdC5hcnJheSI+IFtsaWIudGVtcGxhdGUuaW5kaXJlY3QuYXJyYXldPC9hPgo8L2xpPgo8bGk+IHJlbW92ZSB0aGUgY29weSBjb25zdHJ1Y3RvciBkZWNsYXJhdGlvbiBmcm9tIDI2LjMuOS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmluZGlyZWN0LmFycmF5LmNvbnMiPiBbbGliLmluZGlyZWN0LmFycmF5LmNvbnNdPC9hPgo8L2xpPgo8bGk+IGNoYW5nZSB0aGUgZGVzY3JpcHRpdmUgdGV4dCBpbiAyNi4zLjkuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5pbmRpcmVjdC5hcnJheS5jb25zIj4gW2xpYi5pbmRpcmVjdC5hcnJheS5jb25zXTwvYT4gdG8gcmVhZCAiVGhpcyBjb25zdHJ1Y3RvciBpcwogICAgZGVjbGFyZWQgdG8gYmUgcHJpdmF0ZS4gIFRoaXMgY29uc3RydWN0b3IgbmVlZCBub3QgYmUgZGVmaW5lZC4iPC9saT4KPGxpPiByZW1vdmUgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHBhcmFncmFwaCAxIG9mIDI2LjMuOS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmluZGlyZWN0LmFycmF5LmFzc2lnbiI+IFtsaWIuaW5kaXJlY3QuYXJyYXkuYXNzaWduXTwvYT4KPC9saT4KPGxpPiBDaGFuZ2UgdGhlIGZpcnN0IHRocmVlIHdvcmRzIG9mIHRoZSBzZWNvbmQgc2VudGVuY2Ugb2YgcGFyYWdyYXBoIDEgb2YKICAgIDI2LjMuOS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmluZGlyZWN0LmFycmF5LmFzc2lnbiI+IFtsaWIuaW5kaXJlY3QuYXJyYXkuYXNzaWduXTwvYT4gdG8gIlRoZXNlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIGhhdmUiPC9saT4KPC91bD4KPHA+PGk+W1Byb3Bvc2VkIHJlc29sdXRpb24gd2FzIG1vZGlmaWVkIGluIFNhbnRhIENydXo6IGV4cGxpY2l0bHkgbWFrZQpjb3B5IGNvbnN0cnVjdG9yIGFuZCBjb3B5IGFzc2lnbm1lbnQgb3BlcmF0b3JzIHB1YmxpYywgaW5zdGVhZCBvZgpyZW1vdmluZyB0aGVtLl08L2k+PC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+S2VlcGluZyB0aGUgdmFsYXJyYXkgY29uc3RydWN0b3JzIHByaXZhdGUgaXMgdW50ZW5hYmxlLiAgTWVyZWx5Cm1ha2luZyB2YWxhcnJheSBhIGZyaWVuZCBvZiB0aGUgaGVscGVyIGNsYXNzZXMgaXNuJ3QgZ29vZCBlbm91Z2gsCmJlY2F1c2UgYWNjZXNzIHRvIHRoZSBjb3B5IGNvbnN0cnVjdG9yIGlzIGNoZWNrZWQgaW4gdGhlIHVzZXIncwplbnZpcm9ubWVudC48L3A+Cgo8cD5NYWtpbmcgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3IgcHVibGljIGlzIG5vdCBzdHJpY3RseSBuZWNlc3NhcnkgdG8Kc29sdmUgdGhpcyBwcm9ibGVtLiAgQSBtYWpvcml0eSBvZiB0aGUgTFdHIDxpPihzdHJhdyBwb2xsOiAxMy00KTwvaT4KYmVsaWV2ZWQgd2Ugc2hvdWxkIG1ha2UgdGhlIGFzc2lnbm1lbnQgb3BlcmF0b3JzIHB1YmxpYywgaW4gYWRkaXRpb24KdG8gdGhlIGNvcHkgY29uc3RydWN0b3JzLCBmb3IgcmVhc29ucyBvZiBzeW1tZXRyeSBhbmQgdXNlcgpleHBlY3RhdGlvbi48L3A+Cjxocj4KPGEgbmFtZT0iMjU2Ij48aDM+MjU2LiZuYnNwO3R5cG8gaW4gMjcuNC40LjIsIHAxNzogY29weV9ldmVudCBkb2VzIG5vdCBleGlzdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MubWVtYmVycyI+IFtsaWIuYmFzaWMuaW9zLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgQXVnIDIwMDA8L3A+CjxwPgoyNy40LjQuMiwgcDE3IHNheXMKPC9wPgoKPGJsb2NrcXVvdGU+Ci0xNy0gQmVmb3JlIGNvcHlpbmcgYW55IHBhcnRzIG9mIHJocywgY2FsbHMgZWFjaCByZWdpc3RlcmVkIGNhbGxiYWNrCnBhaXIgKGZuLGluZGV4KSBhcyAoKmZuKShlcmFzZV9ldmVudCwqdGhpcyxpbmRleCkuIEFmdGVyIGFsbCBwYXJ0cyBidXQKZXhjZXB0aW9ucygpIGhhdmUgYmVlbiByZXBsYWNlZCwgY2FsbHMgZWFjaCBjYWxsYmFjayBwYWlyIHRoYXQgd2FzCmNvcGllZCBmcm9tIHJocyBhcyAoKmZuKShjb3B5X2V2ZW50LCp0aGlzLGluZGV4KS4gCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgbmFtZSBjb3B5X2V2ZW50IGlzbid0IGRlZmluZWQgYW55d2hlcmUuIFRoZSBpbnRlbmRlZCBuYW1lIHdhcwpjb3B5Zm10X2V2ZW50Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSBjb3B5X2V2ZW50IHdpdGggY29weWZtdF9ldmVudCBpbiB0aGUgbmFtZWQgcGFyYWdyYXBoLjwvcD4KPGhyPgo8YSBuYW1lPSIyNTkiPjxoMz4yNTkuJm5ic3A7PHR0PmJhc2ljX3N0cmluZzo6b3BlcmF0b3JbXTwvdHQ+IGFuZCBjb25zdCBjb3JyZWN0bmVzczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIxLjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5hY2Nlc3MiPiBbbGliLnN0cmluZy5hY2Nlc3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtDaHJpcyBOZXd0b24gJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IEF1ZyAyMDAwPC9wPgo8cD4KPGk+UGFyYXBocmFzZWQgZnJvbSBhIG1lc3NhZ2UgdGhhdCBDaHJpcyBOZXd0b24gcG9zdGVkIHRvIGNvbXAuc3RkLmMrKzo8L2k+CjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQncyBkZXNjcmlwdGlvbiBvZiA8dHQ+YmFzaWNfc3RyaW5nJmx0OyZndDs6Om9wZXJhdG9yW108L3R0PgpzZWVtcyB0byB2aW9sYXRlIGNvbnN0IGNvcnJlY3RuZXNzLgo8L3A+Cgo8cD4KVGhlIHN0YW5kYXJkICgyMS4zLjQvMSkgc2F5cyB0aGF0ICJJZiA8dHQ+cG9zICZsdDsgc2l6ZSgpPC90dD4sCnJldHVybnMgPHR0PmRhdGEoKVtwb3NdPC90dD4uIiBUaGUgdHlwZXMgZG9uJ3Qgd29yay4gIFRoZQpyZXR1cm4gdmFsdWUgb2YgPHR0PmRhdGEoKTwvdHQ+IGlzIDx0dD5jb25zdCBjaGFyVCo8L3R0PiwgYnV0Cjx0dD5vcGVyYXRvcltdPC90dD4gaGFzIGEgbm9uLWNvbnN0IHZlcnNpb24gd2hvc2UgcmV0dXJuIHR5cGUgaXMgPHR0PnJlZmVyZW5jZTwvdHQ+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjEuMy40LCBwYXJhZ3JhcGggMSwgY2hhbmdlCiI8dHQ+ZGF0YSgpWzxpPnBvczwvaT5dPC90dD4iIHRvICI8dHQ+KihiZWdpbigpICsKPGk+cG9zPC9pPik8L3R0PiIuCjwvcD4KPGhyPgo8YSBuYW1lPSIyNjAiPjwvYT48aDM+PGEgbmFtZT0iMjYwIj4yNjAuJm5ic3A7SW5jb25zaXN0ZW50IHJldHVybiB0eXBlIG9mIDx0dD5pc3RyZWFtX2l0ZXJhdG9yOjpvcGVyYXRvcisrKGludCk8L3R0Pgo8L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXN0cmVhbS5pdGVyYXRvci5vcHMiPiBbbGliLmlzdHJlYW0uaXRlcmF0b3Iub3BzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI3IEF1ZyAyMDAwPC9wPgo8cD5UaGUgc3lub3BzaXMgb2YgaXN0cmVhbV9pdGVyYXRvcjo6b3BlcmF0b3IrKyhpbnQpIGluIDI0LjUuMSBzaG93cwppdCBhcyByZXR1cm5pbmcgdGhlIGl0ZXJhdG9yIGJ5IHZhbHVlLiAyNC41LjEuMiwgcDUgc2hvd3MgdGhlIHNhbWUKb3BlcmF0b3IgYXMgcmV0dXJuaW5nIHRoZSBpdGVyYXRvciBieSByZWZlcmVuY2UuIFRoYXQncyBpbmNvcnJlY3QKZ2l2ZW4gdGhlIEVmZmVjdHMgY2xhdXNlIGJlbG93IChzaW5jZSBhIHRlbXBvcmFyeSBpcyByZXR1cm5lZCkuIFRoZQpgJmFtcDsnIGlzIHByb2JhYmx5IGp1c3QgYSB0eXBvLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGRlY2xhcmF0aW9uIGluIDI0LjUuMS4yLCBwNSBmcm9tPC9wPgogPHByZT4gaXN0cmVhbV9pdGVyYXRvciZsdDtULGNoYXJULHRyYWl0cyxEaXN0YW5jZSZndDsmYW1wOyBvcGVyYXRvcisrKGludCk7CiA8L3ByZT4KPHA+dG88L3A+CiA8cHJlPiBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyBvcGVyYXRvcisrKGludCk7CiA8L3ByZT4KPHA+KHRoYXQgaXMsIHJlbW92ZSB0aGUgYCZhbXA7JykuPC9wPgo8aHI+CjxhIG5hbWU9IjI2MSI+PGgzPjI2MS4mbmJzcDtNaXNzaW5nIGRlc2NyaXB0aW9uIG9mIDx0dD5pc3RyZWFtX2l0ZXJhdG9yOjpvcGVyYXRvciE9PC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuNS4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmlzdHJlYW0uaXRlcmF0b3Iub3BzIj4gW2xpYi5pc3RyZWFtLml0ZXJhdG9yLm9wc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBBdWcgMjAwMDwvcD4KPHA+CjI0LjUuMSwgcDMgbGlzdHMgdGhlIHN5bm9wc2lzIGZvcgo8L3A+Cgo8cHJlPiAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBjaGFyVCwgY2xhc3MgdHJhaXRzLCBjbGFzcyBEaXN0YW5jZSZndDsKICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXN0cmVhbV9pdGVyYXRvciZsdDtULGNoYXJULHRyYWl0cyxEaXN0YW5jZSZndDsmYW1wOyB4LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yJmx0O1QsY2hhclQsdHJhaXRzLERpc3RhbmNlJmd0OyZhbXA7IHkpOwo8L3ByZT4KCjxwPgpidXQgdGhlcmUgaXMgbm8gZGVzY3JpcHRpb24gb2Ygd2hhdCB0aGUgb3BlcmF0b3IgZG9lcyAoaS5lLiwgbm8gRWZmZWN0cwpvciBSZXR1cm5zIGNsYXVzZSkgaW4gMjQuNS4xLjIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHBhcmFncmFwaCA3IHRvIHRoZSBlbmQgb2Ygc2VjdGlvbiAyNC41LjEuMiB3aXRoIHRoZSBmb2xsb3dpbmcgdGV4dDoKPC9wPgoKPHByZT4gICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgY2hhclQsIGNsYXNzIHRyYWl0cywgY2xhc3MgRGlzdGFuY2UmZ3Q7CiAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1faXRlcmF0b3ImbHQ7VCxjaGFyVCx0cmFpdHMsRGlzdGFuY2UmZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgaXN0cmVhbV9pdGVyYXRvciZsdDtULGNoYXJULHRyYWl0cyxEaXN0YW5jZSZndDsmYW1wOyB5KTsKPC9wcmU+Cgo8cD4tNy0gUmV0dXJuczogISh4ID09IHkpLjwvcD4KPGhyPgo8YSBuYW1lPSIyNjIiPjxoMz4yNjIuJm5ic3A7Qml0bWFzayBvcGVyYXRvciB+IHNwZWNpZmllZCBpbmNvcnJlY3RseTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE3LjMuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuYml0bWFzay50eXBlcyI+IFtsaWIuYml0bWFzay50eXBlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JlbWFuIERhd2VzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAzIFNlcCAyMDAwPC9wPgo8cD4KVGhlIH4gb3BlcmF0aW9uIHNob3VsZCBiZSBhcHBsaWVkIGFmdGVyIHRoZSBjYXN0IHRvIGludF90eXBlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAxNy4zLjIuMS4yIFtsaWIuYml0bWFzay50eXBlc10gb3BlcmF0b3J+IGZyb206CjwvcD4KCjxwcmU+ICAgYml0bWFzayBvcGVyYXRvcn4gKCBiaXRtYXNrIFggKQogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0Jmx0OyBiaXRtYXNrJmd0OyhzdGF0aWNfY2FzdCZsdDtpbnRfdHlwZSZndDsofiBYKSk7IH0KPC9wcmU+Cgo8cD4KdG86CjwvcD4KCjxwcmU+ICAgYml0bWFzayBvcGVyYXRvcn4gKCBiaXRtYXNrIFggKQogICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0Jmx0OyBiaXRtYXNrJmd0Oyh+c3RhdGljX2Nhc3QmbHQ7aW50X3R5cGUmZ3Q7KFgpKTsgfQo8L3ByZT4KPGhyPgo8YSBuYW1lPSIyNjMiPjxoMz4yNjMuJm5ic3A7U2V2ZXJlIHJlc3RyaWN0aW9uIG9uIDx0dD5iYXNpY19zdHJpbmc8L3R0PiByZWZlcmVuY2UgY291bnRpbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtLZXZsaW4gSGVubmV5Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA0IFNlcCAyMDAwPC9wPgo8cD4KVGhlIG5vdGUgaW4gcGFyYWdyYXBoIDYgc3VnZ2VzdHMgdGhhdCB0aGUgaW52YWxpZGF0aW9uIHJ1bGVzIGZvcgpyZWZlcmVuY2VzLCBwb2ludGVycywgYW5kIGl0ZXJhdG9ycyBpbiBwYXJhZ3JhcGggNSBwZXJtaXQgYSByZWZlcmVuY2UtCmNvdW50ZWQgaW1wbGVtZW50YXRpb24gKGFjdHVhbGx5LCBhY2NvcmRpbmcgdG8gcGFyYWdyYXBoIDYsIHRoZXkgcGVybWl0CmEgInJlZmVyZW5jZSBjb3VudGVkIGltcGxlbWVudGF0aW9uIiwgYnV0IHRoaXMgaXMgYSBtaW5vciBlZGl0b3JpYWwgZml4KS4KPC9wPgoKPHA+Ckhvd2V2ZXIsIHRoZSBsYXN0IHN1Yi1idWxsZXQgaXMgc28gd29yZGVkIGFzIHRvIG1ha2UgYSByZWZlcmVuY2UtY291bnRlZAppbXBsZW1lbnRhdGlvbiB1bnZpYWJsZS4gSW4gdGhlIGZvbGxvd2luZyBleGFtcGxlIG5vbmUgb2YgdGhlCmNvbmRpdGlvbnMgZm9yIGl0ZXJhdG9yIGludmFsaWRhdGlvbiBhcmUgc2F0aXNmaWVkOgo8L3A+Cgo8cHJlPiAgICAvLyBmaXJzdCBleGFtcGxlOiAiKioqKioqKioqKioqKioqKioqKiIgc2hvdWxkIGJlIHByaW50ZWQgdHdpY2UKICAgIHN0cmluZyBvcmlnaW5hbCA9ICJzb21lIGFyYml0cmFyeSB0ZXh0IiwgY29weSA9IG9yaWdpbmFsOwogICAgY29uc3Qgc3RyaW5nICZhbXA7IGFsaWFzID0gb3JpZ2luYWw7CgogICAgc3RyaW5nOjpjb25zdF9pdGVyYXRvciBpID0gYWxpYXMuYmVnaW4oKSwgZSA9IGFsaWFzLmVuZCgpOwogICAgZm9yKHN0cmluZzo6aXRlcmF0b3IgaiA9IG9yaWdpbmFsLmJlZ2luKCk7IGogIT0gb3JpZ2luYWwuZW5kKCk7ICsraikKICAgICAgICAqaiA9ICcqJzsKICAgIHdoaWxlKGkgIT0gZSkKICAgICAgICBjb3V0ICZsdDsmbHQ7ICppKys7CiAgICBjb3V0ICZsdDsmbHQ7IGVuZGw7CiAgICBjb3V0ICZsdDsmbHQ7IG9yaWdpbmFsICZsdDsmbHQ7IGVuZGw7CjwvcHJlPgoKPHA+ClNpbWlsYXJseSwgaW4gdGhlIGZvbGxvd2luZyBleGFtcGxlOgo8L3A+Cgo8cHJlPiAgICAvLyBzZWNvbmQgZXhhbXBsZTogInNvbWUgYXJiaXRyYXJ5IHRleHQiIHNob3VsZCBiZSBwcmludGVkIG91dAogICAgc3RyaW5nIG9yaWdpbmFsID0gInNvbWUgYXJiaXRyYXJ5IHRleHQiLCBjb3B5ID0gb3JpZ2luYWw7CiAgICBjb25zdCBzdHJpbmcgJmFtcDsgYWxpYXMgPSBvcmlnaW5hbDsKCiAgICBzdHJpbmc6OmNvbnN0X2l0ZXJhdG9yIGkgPSBhbGlhcy5iZWdpbigpOwogICAgb3JpZ2luYWwuYmVnaW4oKTsKICAgIHdoaWxlKGkgIT0gYWxpYXMuZW5kKCkpCiAgICAgICAgY291dCAmbHQ7Jmx0OyAqaSsrOwo8L3ByZT4KCjxwPgpJIGhhdmUgdGVzdGVkIHRoaXMgb24gdGhyZWUgc3RyaW5nIGltcGxlbWVudGF0aW9ucywgdHdvIG9mIHdoaWNoIHdlcmUKcmVmZXJlbmNlIGNvdW50ZWQuIFRoZSByZWZlcmVuY2UtY291bnRlZCBpbXBsZW1lbnRhdGlvbnMgZ2F2ZQoic3VycHJpc2luZyBiZWhhdmlvciIgYmVjYXVzZSB0aGV5IGludmFsaWRhdGVkIGl0ZXJhdG9ycyBvbgp0aGUgZmlyc3QgY2FsbCB0byBub24tY29uc3QgYmVnaW4gc2luY2UgY29uc3RydWN0aW9uLiBUaGUgY3VycmVudAp3b3JkaW5nIGRvZXMgbm90IHBlcm1pdCBzdWNoIGludmFsaWRhdGlvbiBiZWNhdXNlIGl0IGRvZXMgbm90IHRha2UKaW50byBhY2NvdW50IHRoZSBmaXJzdCBjYWxsIHNpbmNlIGNvbnN0cnVjdGlvbiwgb25seSB0aGUgZmlyc3QgY2FsbApzaW5jZSB2YXJpb3VzIG1lbWJlciBhbmQgbm9uLW1lbWJlciBmdW5jdGlvbiBjYWxscy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIGZvbGxvd2luZyBzZW50ZW5jZSBpbiAyMS4zIHBhcmFncmFwaCA1IGZyb20KPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBTdWJzZXF1ZW50IHRvIGFueSBvZiB0aGUgYWJvdmUgdXNlcyBleGNlcHQgdGhlIGZvcm1zIG9mIGluc2VydCgpIGFuZAogICAgZXJhc2UoKSB3aGljaCByZXR1cm4gaXRlcmF0b3JzLCB0aGUgZmlyc3QgY2FsbCB0byBub24tY29uc3QgbWVtYmVyCiAgICBmdW5jdGlvbnMgb3BlcmF0b3JbXSgpLCBhdCgpLCBiZWdpbigpLCByYmVnaW4oKSwgZW5kKCksIG9yIHJlbmQoKS4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KICAgIEZvbGxvd2luZyBjb25zdHJ1Y3Rpb24gb3IgYW55IG9mIHRoZSBhYm92ZSB1c2VzLCBleGNlcHQgdGhlIGZvcm1zIG9mCiAgICBpbnNlcnQoKSBhbmQgZXJhc2UoKSB0aGF0IHJldHVybiBpdGVyYXRvcnMsIHRoZSBmaXJzdCBjYWxsIHRvIG5vbi0KICAgIGNvbnN0IG1lbWJlciBmdW5jdGlvbnMgb3BlcmF0b3JbXSgpLCBhdCgpLCBiZWdpbigpLCByYmVnaW4oKSwgZW5kKCksCiAgICBvciByZW5kKCkuCjwvYmxvY2txdW90ZT4KPGhyPgo8YSBuYW1lPSIyNjQiPjxoMz4yNjQuJm5ic3A7QXNzb2NpYXRpdmUgY29udGFpbmVyIDx0dD5pbnNlcnQoaSwgaik8L3R0PiBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBhcmUgbm90IGZlYXNpYmxlLjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmFzc29jaWF0aXZlLnJlcW10cyI+IFtsaWIuYXNzb2NpYXRpdmUucmVxbXRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Sm9obiBQb3R0ZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDcgU2VwIDIwMDA8L3A+CjxwPgpUYWJsZSA2OSByZXF1aXJlcyBsaW5lYXIgdGltZSBpZiBbaSwgaikgaXMgc29ydGVkLiAgU29ydGVkIGlzIG5lY2Vzc2FyeSBidXQgbm90IHN1ZmZpY2llbnQuCkNvbnNpZGVyIGluc2VydGluZyBhIHNvcnRlZCByYW5nZSBvZiBldmVuIGludGVnZXJzIGludG8gYSBzZXQmbHQ7aW50Jmd0OyBjb250YWluaW5nIHRoZSBvZGQKaW50ZWdlcnMgaW4gdGhlIHNhbWUgcmFuZ2UuCjwvcD4KCjxwPjxpPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzEwMiI+MTAyPC9hPjwvaT48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIFRhYmxlIDY5LCBpbiBzZWN0aW9uIDIzLjEuMiwgY2hhbmdlIHRoZSBjb21wbGV4aXR5IGNsYXVzZSBmb3IKaW5zZXJ0aW9uIG9mIGEgcmFuZ2UgZnJvbSAiTiBsb2coc2l6ZSgpICsgTikgKE4gaXMgdGhlIGRpc3RhbmNlCmZyb20gaSB0byBqKSBpbiBnZW5lcmFsOyBsaW5lYXIgaWYgW2ksIGopIGlzIHNvcnRlZCBhY2NvcmRpbmcgdG8KdmFsdWVfY29tcCgpIiB0byAiTiBsb2coc2l6ZSgpICsgTiksIHdoZXJlIE4gaXMgdGhlIGRpc3RhbmNlCmZyb20gaSB0byBqIi4KPC9wPgoKPHA+PGk+W0NvcGVuaGFnZW46IE1pbm9yIGZpeCBpbiBwcm9wb3NlZCByZXNvbHV0aW9uOiBmaXhlZCB1bmJhbGFuY2VkCnBhcmVucyBpbiB0aGUgcmV2aXNlZCB3b3JkaW5nLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUZXN0aW5nIGZvciB2YWxpZCBpbnNlcnRpb25zIGNvdWxkIGJlIGxlc3MgZWZmaWNpZW50IHRoYW4gc2ltcGx5Cmluc2VydGluZyB0aGUgZWxlbWVudHMgd2hlbiB0aGUgcmFuZ2UgaXMgbm90IGJvdGggc29ydGVkIGFuZCBiZXR3ZWVuCnR3byBhZGphY2VudCBleGlzdGluZyBlbGVtZW50czsgdGhpcyBjb3VsZCBiZSBhIFFPSSBpc3N1ZS4KPC9wPgoKPHA+IApUaGUgTFdHIGNvbnNpZGVyZWQgdHdvIG90aGVyIG9wdGlvbnM6IChhKSBzcGVjaWZ5aW5nIHRoYXQgdGhlCmNvbXBsZXhpdHkgd2FzIGxpbmVhciBpZiBbaSwgaikgaXMgc29ydGVkIGFjY29yZGluZyB0byB2YWx1ZV9jb21wKCkKYW5kIGJldHdlZW4gdHdvIGFkamFjZW50IGV4aXN0aW5nIGVsZW1lbnRzOyBvciAoYikgY2hhbmdpbmcgdG8KS2xvZyhzaXplKCkgKyBOKSArIChOIC0gSykgKE4gaXMgdGhlIGRpc3RhbmNlIGZyb20gaSB0byBqIGFuZCBLIGlzIHRoZQpudW1iZXIgb2YgZWxlbWVudHMgd2hpY2ggZG8gbm90IGluc2VydCBpbW1lZGlhdGVseSBhZnRlciB0aGUgcHJldmlvdXMKZWxlbWVudCBmcm9tIFtpLCBqKSBpbmNsdWRpbmcgdGhlIGZpcnN0KS4gIFRoZSBMV0cgZmVsdCB0aGF0LCBzaW5jZQp3ZSBjYW4ndCBndWFyYW50ZWUgbGluZWFyIHRpbWUgY29tcGxleGl0eSB3aGVuZXZlciB0aGUgcmFuZ2UgdG8gYmUKaW5zZXJ0ZWQgaXMgc29ydGVkLCBpdCdzIG1vcmUgdHJvdWJsZSB0aGFuIGl0J3Mgd29ydGggdG8gc2F5IHRoYXQgaXQncwpsaW5lYXIgaW4gc29tZSBzcGVjaWFsIGNhc2VzLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjY1Ij48aDM+MjY1LiZuYnNwO3N0ZDo6cGFpcjo6cGFpcigpIGVmZmVjdHMgb3Zlcmx5IHJlc3RyaWN0aXZlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5wYWlycyI+IFtsaWIucGFpcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTEgU2VwIDIwMDA8L3A+CjxwPgpJIGRvbid0IHNlZSBhbnkgcmVxdWlyZW1lbnRzIG9uIHRoZSB0eXBlcyBvZiB0aGUgZWxlbWVudHMgb2YgdGhlCnN0ZDo6cGFpciBjb250YWluZXIgaW4gMjAuMi4yLiBGcm9tIHRoZSBkZXNjcmlwdGlvbnMgb2YgdGhlIG1lbWJlcgpmdW5jdGlvbnMgaXQgYXBwZWFycyB0aGF0IHRoZXkgbXVzdCBhdCBsZWFzdCBzYXRpc2Z5IHRoZSByZXF1aXJlbWVudHMgb2YKMjAuMS4zIFtsaWIuY29weWNvbnN0cnVjdGlibGVdIGFuZCAyMC4xLjQgW2xpYi5kZWZhdWx0LmNvbi5yZXFdLCBhbmQgaW4KdGhlIGNhc2Ugb2YgdGhlIFtpbl1lcXVhbGl0eSBvcGVyYXRvcnMgYWxzbyB0aGUgcmVxdWlyZW1lbnRzIG9mIDIwLjEuMQpbbGliLmVxdWFsaXR5Y29tcGFyYWJsZV0gYW5kIDIwLjEuMiBbbGliLmxlc3N0aGFuY29tcGFyYWJsZV0uCjwvcD4KCjxwPgpJIGJlbGlldmUgdGhhdCB0aGUgdGhlIENvcHlDb25zdHJ1Y3RpYmxlIHJlcXVpcmVtZW50IGlzIHVubmVjZXNzYXJ5IGluCnRoZSBjYXNlIG9mIDIwLjIuMiwgcDIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIEVmZmVjdHMgY2xhdXNlIGluIDIwLjIuMiwgcDIgZnJvbTwvcD4KCjxibG9ja3F1b3RlPgotMi0gPGI+RWZmZWN0czwvYj46IEluaXRpYWxpemVzIGl0cyBtZW1iZXJzIGFzIGlmIGltcGxlbWVudGVkOiA8dHQ+IHBhaXIoKSA6CmZpcnN0KFQxKCkpLCBzZWNvbmQoVDIoKSkge30gPC90dD4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KLTItIDxiPkVmZmVjdHM8L2I+OiBJbml0aWFsaXplcyBpdHMgbWVtYmVycyBhcyBpZiBpbXBsZW1lbnRlZDogPHR0PiBwYWlyKCkgOgpmaXJzdCgpLCBzZWNvbmQoKSB7fSA8L3R0Pgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZXhpc3Rpbmcgc3BlY2lmaWNhdGlvbiBvZiBwYWlyJ3MgY29uc3RydWN0b3IgYXBwZWFycyB0byBiZSBhCmhpc3RvcmljYWwgYXJ0aWZhY3Q6IHRoZXJlIHdhcyBjb25jZXJuIHRoYXQgcGFpcidzIG1lbWJlcnMgYmUgcHJvcGVybHkKemVyby1pbml0aWFsaXplZCB3aGVuIHRoZXkgYXJlIGJ1aWx0LWluIHR5cGVzLiAgQXQgb25lIHRpbWUgdGhlcmUgd2FzCnVuY2VydGFpbnR5IGFib3V0IHdoZXRoZXIgdGhleSB3b3VsZCBiZSB6ZXJvLWluaXRpYWxpemVkIGlmIHRoZQpkZWZhdWx0IGNvbnN0cnVjdG9yIHdhcyB3cml0dGVuIHRoZSBvYnZpb3VzIHdheS4gIFRoaXMgaGFzIGJlZW4KY2xhcmlmaWVkIGJ5IGNvcmUgaXNzdWUgMTc4LCBhbmQgdGhlcmUgaXMgbm8gbG9uZ2VyIGFueSBkb3VidCB0aGF0CnRoZSBzdHJhaWdodGZvcndhcmQgaW1wbGVtZW50YXRpb24gaXMgY29ycmVjdC48L3A+Cjxocj4KPGEgbmFtZT0iMjY2Ij48aDM+MjY2LiZuYnNwO2JhZF9leGNlcHRpb246On5iYWRfZXhjZXB0aW9uKCkgbWlzc2luZyBFZmZlY3RzIGNsYXVzZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzE4LjYuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuYmFkLmV4Y2VwdGlvbiI+IFtsaWIuYmFkLmV4Y2VwdGlvbl08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBTZXAgMjAwMDwvcD4KPHA+ClRoZSBzeW5vcHNpcyBmb3Igc3RkOjpiYWRfZXhjZXB0aW9uIGxpc3RzIHRoZSBmdW5jdGlvbiB+YmFkX2V4Y2VwdGlvbigpCmJ1dCB0aGVyZSBpcyBubyBkZXNjcmlwdGlvbiBvZiB3aGF0IHRoZSBmdW5jdGlvbiBkb2VzICh0aGUgRWZmZWN0cwpjbGF1c2UgaXMgbWlzc2luZykuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KUmVtb3ZlIHRoZSBkZXN0cnVjdG9yIGZyb20gdGhlIGNsYXNzIHN5bm9wc2VzIG9mIAo8dHQ+YmFkX2FsbG9jPC90dD4gKDE4LjQuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuYmFkLmFsbG9jIj4gW2xpYi5iYWQuYWxsb2NdPC9hPiksCjx0dD5iYWRfY2FzdDwvdHQ+ICgxOC41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5iYWQuY2FzdCI+IFtsaWIuYmFkLmNhc3RdPC9hPiksCjx0dD5iYWRfdHlwZWlkPC90dD4gKDE4LjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmJhZC50eXBlaWQiPiBbbGliLmJhZC50eXBlaWRdPC9hPiksCmFuZCA8dHQ+YmFkX2V4Y2VwdGlvbjwvdHQ+ICgxOC42LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmJhZC5leGNlcHRpb24iPiBbbGliLmJhZC5leGNlcHRpb25dPC9hPikuCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGlzIGEgZ2VuZXJhbCBwcm9ibGVtIHdpdGggdGhlIGV4Y2VwdGlvbiBjbGFzc2VzIGluIGNsYXVzZSAxOC4gClRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGUgZGVzdHJ1Y3RvcnMgZnJvbSB0aGUgY2xhc3MKc3lub3BzZXMsIHJhdGhlciB0aGFuIHRvIGRvY3VtZW50IHRoZSBkZXN0cnVjdG9ycycgYmVoYXZpb3IsIGJlY2F1c2UKcmVtb3ZpbmcgdGhlbSBpcyBtb3JlIGNvbnNpc3RlbnQgd2l0aCBob3cgZXhjZXB0aW9uIGNsYXNzZXMgYXJlCmRlc2NyaWJlZCBpbiBjbGF1c2UgMTkuCjwvcD4KPGhyPgo8YSBuYW1lPSIyNjgiPjxoMz4yNjguJm5ic3A7VHlwbyBpbiBsb2NhbGUgc3lub3BzaXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUiPiBbbGliLmxvY2FsZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs1IE9jdCAyMDAwPC9wPgo8cD5UaGUgc3lub3BzaXMgb2YgdGhlIGNsYXNzIHN0ZDo6bG9jYWxlIGluIDIyLjEuMSBjb250YWlucyB0d28gdHlwb3M6CnRoZSBzZW1pY29sb25zIGFmdGVyIHRoZSBkZWNsYXJhdGlvbnMgb2YgdGhlIGRlZmF1bHQgY3Rvcgpsb2NhbGU6OmxvY2FsZSgpIGFuZCB0aGUgY29weSBjdG9yIGxvY2FsZTo6bG9jYWxlKGNvbnN0IGxvY2FsZSZhbXA7KQphcmUgbWlzc2luZy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBtaXNzaW5nIHNlbWljb2xvbnMsIGkuZS4sIGNoYW5nZTwvcD4KCjxwcmU+ICAgIC8vICBjb25zdHJ1Y3QvY29weS9kZXN0cm95OgogICAgICAgIGxvY2FsZSgpIHRocm93KCkKICAgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJmFtcDsgb3RoZXIpIHRocm93KCkKPC9wcmU+Cgo8cD5pbiB0aGUgc3lub3BzaXMgaW4gMjIuMS4xIHRvPC9wPgoKPHByZT4gICAgLy8gIGNvbnN0cnVjdC9jb3B5L2Rlc3Ryb3k6CiAgICAgICAgbG9jYWxlKCkgdGhyb3coKTsKICAgICAgICBsb2NhbGUoY29uc3QgbG9jYWxlJmFtcDsgb3RoZXIpIHRocm93KCk7CjwvcHJlPgo8aHI+CjxhIG5hbWU9IjI3MCI+PGgzPjI3MC4mbmJzcDtCaW5hcnkgc2VhcmNoIHJlcXVpcmVtZW50cyBvdmVybHkgc3RyaWN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjUuMy4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmJpbmFyeS5zZWFyY2giPiBbbGliLmFsZy5iaW5hcnkuc2VhcmNoXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE4IE9jdCAyMDAwPC9wPgo8cD4KRWFjaCBvZiB0aGUgZm91ciBiaW5hcnkgc2VhcmNoIGFsZ29yaXRobXMgKGxvd2VyX2JvdW5kLCB1cHBlcl9ib3VuZCwKZXF1YWxfcmFuZ2UsIGJpbmFyeV9zZWFyY2gpIGhhcyBhIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gcGFzcyBhCmNvbXBhcmlzb24gZnVuY3Rpb24gb2JqZWN0LiAgQWNjb3JkaW5nIHRvIDI1LjMsIHBhcmFncmFwaCAyLCB0aGF0CmNvbXBhcmlzb24gZnVuY3Rpb24gb2JqZWN0IGhhcyB0byBiZSBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLgo8L3A+Cgo8cD4KVGhpcyByZXF1aXJlbWVudCBpcyBzbGlnaHRseSB0b28gc3RyaWN0LiAgU3VwcG9zZSB3ZSBhcmUgc2VhcmNoaW5nCnRocm91Z2ggYSBzZXF1ZW5jZSBjb250YWluaW5nIG9iamVjdHMgb2YgdHlwZSBYLCB3aGVyZSBYIGlzIHNvbWUKbGFyZ2UgcmVjb3JkIHdpdGggYW4gaW50ZWdlciBrZXkuICBXZSBtaWdodCByZWFzb25hYmx5IHdhbnQgdG8gbG9vawp1cCBhIHJlY29yZCBieSBrZXksIGluIHdoaWNoIGNhc2Ugd2Ugd291bGQgd2FudCB0byB3cml0ZSBzb21ldGhpbmcKbGlrZSB0aGlzOgo8L3A+CjxwcmU+ICAgIHN0cnVjdCBrZXlfY29tcCB7CiAgICAgIGJvb2wgb3BlcmF0b3IoKShjb25zdCBYJmFtcDsgeCwgaW50IG4pIGNvbnN0IHsKICAgICAgICByZXR1cm4geC5rZXkoKSAmbHQ7IG47CiAgICAgIH0KICAgIH0KCiAgICBzdGQ6Omxvd2VyX2JvdW5kKGZpcnN0LCBsYXN0LCA0Nywga2V5X2NvbXAoKSk7CjwvcHJlPgoKPHA+CmtleV9jb21wIGlzIG5vdCBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nLCBidXQgdGhlcmUgaXMgbm8gcmVhc29uIHRvCnByb2hpYml0IGl0cyB1c2UgaW4gbG93ZXJfYm91bmQuCjwvcD4KCjxwPgpUaGVyZSdzIG5vIGRpZmZpY3VsdHkgaW4gaW1wbGVtZW50aW5nIGxvd2VyX2JvdW5kIHNvIHRoYXQgaXQgYWxsb3dzCnRoZSB1c2Ugb2Ygc29tZXRoaW5nIGxpa2Uga2V5X2NvbXAuICAoSXQgd2lsbCBwcm9iYWJseSB3b3JrIHVubGVzcyBhbgppbXBsZW1lbnRvciB0YWtlcyBzcGVjaWFsIHBhaW5zIHRvIGZvcmJpZCBpdC4pICBXaGF0J3MgZGlmZmljdWx0IGlzCmZvcm11bGF0aW5nIGxhbmd1YWdlIGluIHRoZSBzdGFuZGFyZCB0byBzcGVjaWZ5IHdoYXQga2luZCBvZgpjb21wYXJpc29uIGZ1bmN0aW9uIGlzIGFjY2VwdGFibGUuICBXZSBuZWVkIGEgbm90aW9uIHRoYXQncyBzbGlnaHRseQptb3JlIGdlbmVyYWwgdGhhbiB0aGF0IG9mIGEgc3RyaWN0IHdlYWsgb3JkZXJpbmcsIG9uZSB0aGF0IGNhbiBlbmNvbXBhc3MKYSBjb21wYXJpc29uIGZ1bmN0aW9uIHRoYXQgaW52b2x2ZXMgZGlmZmVyZW50IHR5cGVzLiAgRXhwcmVzc2luZyB0aGF0Cm5vdGlvbiBtYXkgYmUgY29tcGxpY2F0ZWQuCjwvcD4KCjxwPjxpPkFkZGl0aW9uYWwgcXVlc3Rpb25zIHJhaXNlZCBhdCB0aGUgVG9yb250byBtZWV0aW5nOjwvaT48L3A+Cjx1bD4KPGxpPiBEbyB3ZSByZWFsbHkgd2FudCB0byBzcGVjaWZ5IHdoYXQgb3JkZXJpbmcgdGhlIGltcGxlbWVudG9yIG11c3QKICAgICB1c2Ugd2hlbiBjYWxsaW5nIHRoZSBmdW5jdGlvbiBvYmplY3Q/ICBUaGUgc3RhbmRhcmQgZ2l2ZXMgCiAgICAgc3BlY2lmaWMgZXhwcmVzc2lvbnMgd2hlbiBkZXNjcmliaW5nIHRoZXNlIGFsZ29yaXRobXMsIGJ1dCBpdCBhbHNvCiAgICAgc2F5cyB0aGF0IG90aGVyIGV4cHJlc3Npb25zICh3aXRoIGRpZmZlcmVudCBhcmd1bWVudCBvcmRlcikgYXJlCiAgICAgZXF1aXZhbGVudC48L2xpPgo8bGk+IElmIHdlIGFyZSBzcGVjaWZ5aW5nIG9yZGVyaW5nLCBub3RlIHRoYXQgdGhlIHN0YW5kYXJkIHVzZXMgYm90aAogICAgIG9yZGVyaW5ncyB3aGVuIGRlc2NyaWJpbmcgPHR0PmVxdWFsX3JhbmdlPC90dD4uPC9saT4KPGxpPiBBcmUgd2UgdGFsa2luZyBhYm91dCByZXF1aXJpbmcgdGhlc2UgYWxnb3JpdGhtcyB0byB3b3JrIHByb3Blcmx5CiAgICAgd2hlbiBwYXNzZWQgYSBiaW5hcnkgZnVuY3Rpb24gb2JqZWN0IHdob3NlIHR3byBhcmd1bWVudCB0eXBlcwogICAgIGFyZSBub3QgdGhlIHNhbWUsIG9yIGFyZSB3ZSB0YWxraW5nIGFib3V0IHJlcXVpcmVtZW50cyB3aGVuCiAgICAgdGhleSBhcmUgcGFzc2VkIGEgYmluYXJ5IGZ1bmN0aW9uIG9iamVjdCB3aXRoIHNldmVyYWwgb3ZlcmxvYWRlZAogICAgIHZlcnNpb25zIG9mIDx0dD5vcGVyYXRvcigpPC90dD4/PC9saT4KPGxpPiBUaGUgZGVmaW5pdGlvbiBvZiBhIHN0cmljdCB3ZWFrIG9yZGVyaW5nIGRvZXMgbm90IGFwcGVhciB0byBnaXZlCiAgICAgYW55IGd1aWRhbmNlIG9uIGlzc3VlcyBvZiBvdmVybG9hZGluZzsgaXQgb25seSBkaXNjdXNzZXMgZXhwcmVzc2lvbnMsCiAgICAgYW5kIGFsbCBvZiB0aGUgdmFsdWVzIGluIHRoZXNlIGV4cHJlc3Npb25zIGFyZSBvZiB0aGUgc2FtZSB0eXBlLgogICAgIFNvbWUgY2xhcmlmaWNhdGlvbiB3b3VsZCBzZWVtIHRvIGJlIGluIG9yZGVyLjwvbGk+CjwvdWw+Cgo8cD48aT5BZGRpdGlvbmFsIGRpc2N1c3Npb24gZnJvbSBDb3BlbmhhZ2VuOjwvaT48L3A+Cjx1bD4KPGxpPkl0IHdhcyBnZW5lcmFsbHkgYWdyZWVkIHRoYXQgdGhlcmUgaXMgYSByZWFsIGRlZmVjdCBoZXJlOiBpZgp0aGUgcHJlZGljYXRlIGlzIG1lcmVseSByZXF1aXJlZCB0byBiZSBhIFN0cmljdCBXZWFrIE9yZGVyaW5nLCB0aGVuCml0J3MgcG9zc2libGUgdG8gcGFzcyBpbiBhIGZ1bmN0aW9uIG9iamVjdCB3aXRoIGFuIG92ZXJsb2FkZWQKb3BlcmF0b3IoKSwgd2hlcmUgdGhlIHZlcnNpb24gdGhhdCdzIGFjdHVhbGx5IGNhbGxlZCBkb2VzIHNvbWV0aGluZwpjb21wbGV0ZWx5IGluYXBwcm9wcmlhdGUuICAoU3VjaCBhcyByZXR1cm5pbmcgYSByYW5kb20gdmFsdWUuKTwvbGk+Cgo8bGk+QW4gYWx0ZXJuYXRpdmUgZm9ybXVsYXRpb24gd2FzIHByZXNlbnRlZCBpbiBhIHBhcGVyIGRpc3RyaWJ1dGVkIGJ5CkRhdmlkIEFicmFoYW1zIGF0IHRoZSBtZWV0aW5nLCAiQmluYXJ5IFNlYXJjaCB3aXRoIEhldGVyb2dlbmVvdXMKQ29tcGFyaXNvbiIsIEoxNi0wMS8wMDI3ID0gV0cyMSBOMTMxMzogSW5zdGVhZCBvZiB2aWV3aW5nIHRoZQpwcmVkaWNhdGUgYXMgYSBTdHJpY3QgV2VhayBPcmRlcmluZyBhY3Rpbmcgb24gYSBzb3J0ZWQgc2VxdWVuY2UsIHZpZXcKdGhlIHByZWRpY2F0ZS92YWx1ZSBwYWlyIGFzIHNvbWV0aGluZyB0aGF0IHBhcnRpdGlvbnMgYSBzZXF1ZW5jZS4KVGhpcyBpcyBhbG1vc3QgZXF1aXZhbGVudCB0byBzYXlpbmcgdGhhdCB3ZSBzaG91bGQgdmlldyBiaW5hcnkgc2VhcmNoCmFzIGlmIHdlIGFyZSBnaXZlbiBhIHVuYXJ5IHByZWRpY2F0ZSBhbmQgYSBzZXF1ZW5jZSwgc3VjaCB0aGF0IGYoKnApCmlzIHRydWUgZm9yIGFsbCBwIGJlbG93IGEgc3BlY2lmaWMgcG9pbnQgYW5kIGZhbHNlIGZvciBhbGwgcCBhYm92ZSBpdC4KVGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgYmFzZWQgb24gdGhhdCBhbHRlcm5hdGl2ZSBmb3JtdWxhdGlvbi48L2xpPgo8L3VsPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5DaGFuZ2UgMjUuMyBbbGliLmFsZy5zb3J0aW5nXSBwYXJhZ3JhcGggMyBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIDMgRm9yIGFsbCBhbGdvcml0aG1zIHRoYXQgdGFrZSBDb21wYXJlLCB0aGVyZSBpcyBhIHZlcnNpb24gdGhhdCB1c2VzCiAgb3BlcmF0b3ImbHQ7IGluc3RlYWQuIFRoYXQgaXMsIGNvbXAoKmksICpqKSAhPSBmYWxzZSBkZWZhdWx0cyB0byAqaSAmbHQ7CiAgKmogIT0gZmFsc2UuIEZvciB0aGUgYWxnb3JpdGhtcyB0byB3b3JrIGNvcnJlY3RseSwgY29tcCBoYXMgdG8KICBpbmR1Y2UgYSBzdHJpY3Qgd2VhayBvcmRlcmluZyBvbiB0aGUgdmFsdWVzLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAzIEZvciBhbGwgYWxnb3JpdGhtcyB0aGF0IHRha2UgQ29tcGFyZSwgdGhlcmUgaXMgYSB2ZXJzaW9uIHRoYXQgdXNlcwogIG9wZXJhdG9yJmx0OyBpbnN0ZWFkLiBUaGF0IGlzLCBjb21wKCppLCAqaikgIT0gZmFsc2UgZGVmYXVsdHMgdG8gKmkKICAmbHQ7ICpqICE9IGZhbHNlLiBGb3IgYWxnb3JpdGhtcyBvdGhlciB0aGFuIHRob3NlIGRlc2NyaWJlZCBpbgogIGxpYi5hbGcuYmluYXJ5LnNlYXJjaCAoMjUuMy4zKSB0byB3b3JrIGNvcnJlY3RseSwgY29tcCBoYXMgdG8gaW5kdWNlCiAgYSBzdHJpY3Qgd2VhayBvcmRlcmluZyBvbiB0aGUgdmFsdWVzLgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggYWZ0ZXIgMjUuMyBbbGliLmFsZy5zb3J0aW5nXSBwYXJhZ3JhcGggNTo8L3A+Cgo8YmxvY2txdW90ZT4KICAtNi0gQSBzZXF1ZW5jZSBbc3RhcnQsIGZpbmlzaCkgaXMgcGFydGl0aW9uZWQgd2l0aCByZXNwZWN0IHRvIGFuCiAgZXhwcmVzc2lvbiBmKGUpIGlmIHRoZXJlIGV4aXN0cyBhbiBpbnRlZ2VyIG4gc3VjaCB0aGF0CiAgZm9yIGFsbCAwICZsdDs9IGkgJmx0OyBkaXN0YW5jZShzdGFydCwgZmluaXNoKSwgZigqKGJlZ2luK2kpKSBpcyB0cnVlIGlmCiAgYW5kIG9ubHkgaWYgaSAmbHQ7IG4uCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4zLjMgW2xpYi5hbGcuYmluYXJ5LnNlYXJjaF0gcGFyYWdyYXBoIDEgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAtMS0gQWxsIG9mIHRoZSBhbGdvcml0aG1zIGluIHRoaXMgc2VjdGlvbiBhcmUgdmVyc2lvbnMgb2YgYmluYXJ5CiAgIHNlYXJjaCBhbmQgYXNzdW1lIHRoYXQgdGhlIHNlcXVlbmNlIGJlaW5nIHNlYXJjaGVkIGlzIGluIG9yZGVyCiAgIGFjY29yZGluZyB0byB0aGUgaW1wbGllZCBvciBleHBsaWNpdCBjb21wYXJpc29uIGZ1bmN0aW9uLiBUaGV5IHdvcmsKICAgb24gbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzIG1pbmltaXppbmcgdGhlIG51bWJlciBvZgogICBjb21wYXJpc29ucywgd2hpY2ggd2lsbCBiZSBsb2dhcml0aG1pYyBmb3IgYWxsIHR5cGVzIG9mCiAgIGl0ZXJhdG9ycy4gVGhleSBhcmUgZXNwZWNpYWxseSBhcHByb3ByaWF0ZSBmb3IgcmFuZG9tIGFjY2VzcwogICBpdGVyYXRvcnMsIGJlY2F1c2UgdGhlc2UgYWxnb3JpdGhtcyBkbyBhIGxvZ2FyaXRobWljIG51bWJlciBvZgogICBzdGVwcyB0aHJvdWdoIHRoZSBkYXRhIHN0cnVjdHVyZS4gRm9yIG5vbi1yYW5kb20gYWNjZXNzIGl0ZXJhdG9ycwogICB0aGV5IGV4ZWN1dGUgYSBsaW5lYXIgbnVtYmVyIG9mIHN0ZXBzLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIEFsbCBvZiB0aGUgYWxnb3JpdGhtcyBpbiB0aGlzIHNlY3Rpb24gYXJlIHZlcnNpb25zIG9mIGJpbmFyeQogICAgc2VhcmNoIGFuZCBhc3N1bWUgdGhhdCB0aGUgc2VxdWVuY2UgYmVpbmcgc2VhcmNoZWQgaXMgcGFydGl0aW9uZWQKICAgIHdpdGggcmVzcGVjdCB0byBhbiBleHByZXNzaW9uIGZvcm1lZCBieSBiaW5kaW5nIHRoZSBzZWFyY2gga2V5IHRvCiAgICBhbiBhcmd1bWVudCBvZiB0aGUgaW1wbGllZCBvciBleHBsaWNpdCBjb21wYXJpc29uIGZ1bmN0aW9uLiBUaGV5CiAgICB3b3JrIG9uIG5vbi1yYW5kb20gYWNjZXNzIGl0ZXJhdG9ycyBtaW5pbWl6aW5nIHRoZSBudW1iZXIgb2YKICAgIGNvbXBhcmlzb25zLCB3aGljaCB3aWxsIGJlIGxvZ2FyaXRobWljIGZvciBhbGwgdHlwZXMgb2YKICAgIGl0ZXJhdG9ycy4gVGhleSBhcmUgZXNwZWNpYWxseSBhcHByb3ByaWF0ZSBmb3IgcmFuZG9tIGFjY2VzcwogICAgaXRlcmF0b3JzLCBiZWNhdXNlIHRoZXNlIGFsZ29yaXRobXMgZG8gYSBsb2dhcml0aG1pYyBudW1iZXIgb2YKICAgIHN0ZXBzIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlLiBGb3Igbm9uLXJhbmRvbSBhY2Nlc3MgaXRlcmF0b3JzCiAgICB0aGV5IGV4ZWN1dGUgYSBsaW5lYXIgbnVtYmVyIG9mIHN0ZXBzLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMy4zLjEgW2xpYi5sb3dlci5ib3VuZF0gcGFyYWdyYXBoIDEgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIFJlcXVpcmVzOiBUeXBlIFQgaXMgTGVzc1RoYW5Db21wYXJhYmxlCiAgICAobGliLmxlc3N0aGFuY29tcGFyYWJsZSkuIAo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIFJlcXVpcmVzOiBUaGUgZWxlbWVudHMgZSBvZiBbZmlyc3QsIGxhc3QpIGFyZSBwYXJ0aXRpb25lZCB3aXRoCiAgIHJlc3BlY3QgdG8gdGhlIGV4cHJlc3Npb24gZSAmbHQ7IHZhbHVlIG9yIGNvbXAoZSwgdmFsdWUpCjwvYmxvY2txdW90ZT4KCgo8cD5SZW1vdmUgMjUuMy4zLjEgW2xpYi5sb3dlci5ib3VuZF0gcGFyYWdyYXBoIDI6PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0yLSBFZmZlY3RzOiBGaW5kcyB0aGUgZmlyc3QgcG9zaXRpb24gaW50byB3aGljaCB2YWx1ZSBjYW4gYmUKICAgIGluc2VydGVkIHdpdGhvdXQgdmlvbGF0aW5nIHRoZSBvcmRlcmluZy4gCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4zLjMuMiBbbGliLnVwcGVyLmJvdW5kXSBwYXJhZ3JhcGggMSBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgogIC0xLSBSZXF1aXJlczogVHlwZSBUIGlzIExlc3NUaGFuQ29tcGFyYWJsZSAobGliLmxlc3N0aGFuY29tcGFyYWJsZSkuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbiAhKHZhbHVlICZsdDsgZSkgb3IgIWNvbXAodmFsdWUsIGUpCjwvYmxvY2txdW90ZT4KCjxwPlJlbW92ZSAyNS4zLjMuMiBbbGliLnVwcGVyLmJvdW5kXSBwYXJhZ3JhcGggMjo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTItIEVmZmVjdHM6IEZpbmRzIHRoZSBmdXJ0aGVybW9zdCBwb3NpdGlvbiBpbnRvIHdoaWNoIHZhbHVlIGNhbiBiZQogICAgaW5zZXJ0ZWQgd2l0aG91dCB2aW9sYXRpbmcgdGhlIG9yZGVyaW5nLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMy4zLjMgW2xpYi5lcXVhbC5yYW5nZV0gcGFyYWdyYXBoIDEgZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIFJlcXVpcmVzOiBUeXBlIFQgaXMgTGVzc1RoYW5Db21wYXJhYmxlCiAgICAobGliLmxlc3N0aGFuY29tcGFyYWJsZSkuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgogICAtMS0gUmVxdWlyZXM6IFRoZSBlbGVtZW50cyBlIG9mIFtmaXJzdCwgbGFzdCkgYXJlIHBhcnRpdGlvbmVkIHdpdGgKICAgcmVzcGVjdCB0byB0aGUgZXhwcmVzc2lvbnMgZSAmbHQ7IHZhbHVlIGFuZCAhKHZhbHVlICZsdDsgZSkgb3IKICAgY29tcChlLCB2YWx1ZSkgYW5kICFjb21wKHZhbHVlLCBlKS4gIEFsc28sIGZvciBhbGwgZWxlbWVudHMgZSBvZgogICBbZmlyc3QsIGxhc3QpLCBlICZsdDsgdmFsdWUgaW1wbGllcyAhKHZhbHVlICZsdDsgZSkgb3IgY29tcChlLAogICB2YWx1ZSkgaW1wbGllcyAhY29tcCh2YWx1ZSwgZSkKPC9ibG9ja3F1b3RlPgoKPHA+Q2hhbmdlIDI1LjMuMy4zIFtsaWIuZXF1YWwucmFuZ2VdIHBhcmFncmFwaCAyIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0yLSBFZmZlY3RzOiBGaW5kcyB0aGUgbGFyZ2VzdCBzdWJyYW5nZSBbaSwgaikgc3VjaCB0aGF0IHRoZSB2YWx1ZQogICAgY2FuIGJlIGluc2VydGVkIGF0IGFueSBpdGVyYXRvciBrIGluIGl0IHdpdGhvdXQgdmlvbGF0aW5nIHRoZQogICAgb3JkZXJpbmcuIGsgc2F0aXNmaWVzIHRoZSBjb3JyZXNwb25kaW5nIGNvbmRpdGlvbnM6ICEoKmsgJmx0OyB2YWx1ZSkKICAgICZhbXA7JmFtcDsgISh2YWx1ZSAmbHQ7ICprKSBvciBjb21wKCprLCB2YWx1ZSkgPT0gZmFsc2UgJmFtcDsmYW1wOyBjb21wKHZhbHVlLCAqaykgPT0KICAgIGZhbHNlLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgIC0yLSBSZXR1cm5zOiAKICAgICAgICAgbWFrZV9wYWlyKGxvd2VyX2JvdW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSksCiAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsdWUpKQogICAgICAgb3IKICAgICAgICAgbWFrZV9wYWlyKGxvd2VyX2JvdW5kKGZpcnN0LCBsYXN0LCB2YWx1ZSwgY29tcCksCiAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChmaXJzdCwgbGFzdCwgdmFsdWUsIGNvbXApKQo8L3ByZT4KCjxwPkNoYW5nZSAyNS4zLjMuMyBbbGliLmJpbmFyeS5zZWFyY2hdIHBhcmFncmFwaCAxIGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CiAgIC0xLSBSZXF1aXJlczogVHlwZSBUIGlzIExlc3NUaGFuQ29tcGFyYWJsZQogICAgKGxpYi5sZXNzdGhhbmNvbXBhcmFibGUpLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KICAgLTEtIFJlcXVpcmVzOiBUaGUgZWxlbWVudHMgZSBvZiBbZmlyc3QsIGxhc3QpIGFyZSBwYXJ0aXRpb25lZCB3aXRoCiAgIHJlc3BlY3QgdG8gdGhlIGV4cHJlc3Npb25zIGUgJmx0OyB2YWx1ZSBhbmQgISh2YWx1ZSAmbHQ7IGUpIG9yIGNvbXAoZSwKICAgdmFsdWUpIGFuZCAhY29tcCh2YWx1ZSwgZSkuIEFsc28sIGZvciBhbGwgZWxlbWVudHMgZSBvZiBbZmlyc3QsCiAgIGxhc3QpLCBlICZsdDsgdmFsdWUgaW1wbGllcyAhKHZhbHVlICZsdDsgZSkgb3IgY29tcChlLCB2YWx1ZSkgaW1wbGllcwogICAhY29tcCh2YWx1ZSwgZSkKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0NvcGVuaGFnZW46IERhdmUgQWJyYWhhbXMgcHJvdmlkZWQgdGhpcyB3b3JkaW5nXTwvaT48L3A+Cgo8cD48aT5bUmVkbW9uZDogTWlub3IgY2hhbmdlcyBpbiB3b3JkaW5nLiAgKFJlbW92ZWQgIm5vbi1uZWdhdGl2ZSIsIGFuZApjaGFuZ2VkIHRoZSAib3RoZXIgdGhhbiB0aG9zZSBkZXNjcmliZWQgaW4iIHdvcmRpbmcuKSBBbHNvLCB0aGUgTFdHCmRlY2lkZWQgdG8gYWNjZXB0IHRoZSAib3B0aW9uYWwiIHBhcnQuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gcmVpbnRlcnByZXRzIGJpbmFyeSBzZWFyY2guIEluc3RlYWQgb2YKdGhpbmtpbmcgYWJvdXQgc2VhcmNoaW5nIGZvciBhIHZhbHVlIGluIGEgc29ydGVkIHJhbmdlLCB3ZSB2aWV3IHRoYXQKYXMgYW4gaW1wb3J0YW50IHNwZWNpYWwgY2FzZSBvZiBhIG1vcmUgZ2VuZXJhbCBhbGdvcml0aG06IHNlYXJjaGluZwpmb3IgdGhlIHBhcnRpdGlvbiBwb2ludCBpbiBhIHBhcnRpdGlvbmVkIHJhbmdlLjwvcD4KCjxwPldlIGFsc28gYWRkIGEgZ3VhcmFudGVlIHRoYXQgdGhlIG9sZCB3b3JkaW5nIGRpZCBub3Q6IHdlIGVuc3VyZQp0aGF0IHRoZSB1cHBlciBib3VuZCBpcyBubyBlYXJsaWVyIHRoYW4gdGhlIGxvd2VyIGJvdW5kLCB0aGF0CnRoZSBwYWlyIHJldHVybmVkIGJ5IGVxdWFsX3JhbmdlIGlzIGEgdmFsaWQgcmFuZ2UsIGFuZCB0aGF0IHRoZSBmaXJzdApwYXJ0IG9mIHRoYXQgcGFpciBpcyB0aGUgbG93ZXIgYm91bmQuPC9wPgo8aHI+CjxhIG5hbWU9IjI3MSI+PGgzPjI3MS4mbmJzcDtiYXNpY19pb3N0cmVhbSBtaXNzaW5nIHR5cGVkZWZzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RyZWFtY2xhc3MiPiBbbGliLmlvc3RyZWFtY2xhc3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDIgTm92IDIwMDA8L3A+CjxwPgpDbGFzcyB0ZW1wbGF0ZSBiYXNpY19pb3N0cmVhbSBoYXMgbm8gdHlwZWRlZnMuICBUaGUgdHlwZWRlZnMgaXQKaW5oZXJpdHMgZnJvbSBpdHMgYmFzZSBjbGFzc2VzIGNhbid0IGJlIHVzZWQsIHNpbmNlIChmb3IgZXhhbXBsZSkKYmFzaWNfaW9zdHJlYW0mbHQ7VCZndDs6OnRyYWl0c190eXBlIGlzIGFtYmlndW91cy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byBiYXNpY19pb3N0cmVhbSdzIGNsYXNzIHN5bm9wc2lzIGluIAoyNy42LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdHJlYW1jbGFzcyI+IFtsaWIuaW9zdHJlYW1jbGFzc108L2E+LCBpbW1lZGlhdGVseSBhZnRlciA8dHQ+cHVibGljPC90dD46PC9wPgoKPHByZT4gIC8vIHR5cGVzOgogIHR5cGVkZWYgY2hhclQgICAgICAgICAgICAgICAgICAgICBjaGFyX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHM6OmludF90eXBlIGludF90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgdHlwZWRlZiB0cmFpdHMgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOwo8L3ByZT4KPGhyPgo8YSBuYW1lPSIyNzIiPjxoMz4yNzIuJm5ic3A7TWlzc2luZyBwYXJlbnRoZXNlcyBhcm91bmQgc3ViZXhwcmVzc2lvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3N0YXRlLmZsYWdzIj4gW2xpYi5pb3N0YXRlLmZsYWdzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIE5vdiAyMDAwPC9wPgo8cD4KMjcuNC40LjMsIHA0IHNheXMgYWJvdXQgdGhlIHBvc3Rjb25kaXRpb24gb2YgdGhlIGZ1bmN0aW9uOiBJZgpyZGJ1ZigpIT0wIHRoZW4gc3RhdGUgPT0gcmRzdGF0ZSgpOyBvdGhlcndpc2UKcmRzdGF0ZSgpPT1zdGF0ZXxpb3NfYmFzZTo6YmFkYml0Lgo8L3A+Cgo8cD4KVGhlIGV4cHJlc3Npb24gb24gdGhlIHJpZ2h0LWhhbmQtc2lkZSBvZiB0aGUgb3BlcmF0b3I9PSgpIG5lZWRzIHRvIGJlCnBhcmVudGhlc2l6ZWQgaW4gb3JkZXIgZm9yIHRoZSB3aG9sZSBleHByZXNzaW9uIHRvIGV2ZXIgZXZhbHVhdGUgdG8KYW55dGhpbmcgYnV0IG5vbi16ZXJvLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkFkZCBwYXJlbnRoZXNlcyBsaWtlIHNvOiByZHN0YXRlKCk9PShzdGF0ZXxpb3NfYmFzZTo6YmFkYml0KS4KPC9wPgo8aHI+CjxhIG5hbWU9IjI3MyI+PGgzPjI3My4mbmJzcDtNaXNzaW5nIGlvc19iYXNlIHF1YWxpZmljYXRpb24gb24gbWVtYmVycyBvZiBhIGRlcGVuZGVudCBjbGFzczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pbnB1dC5vdXRwdXQiPiBbbGliLmlucHV0Lm91dHB1dF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+MjcuNS4yLjQuMiwgcDQsIGFuZCAyNy44LjEuNiwgcDIsIDI3LjguMS43LCBwMywgMjcuOC4xLjksIHAyLAoyNy44LjEuMTAsIHAzIHJlZmVyIHRvIGluIGFuZC9vciBvdXQgdy9vIGlvc19iYXNlOjogcXVhbGlmaWNhdGlvbi4KVGhhdCdzIGluY29ycmVjdCBzaW5jZSB0aGUgbmFtZXMgYXJlIG1lbWJlcnMgb2YgYSBkZXBlbmRlbnQgYmFzZQpjbGFzcyAoMTQuNi4yIFt0ZW1wLmRlcF0pIGFuZCB0aHVzIG5vdCB2aXNpYmxlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5RdWFsaWZ5IHRoZSBuYW1lcyB3aXRoIHRoZSBuYW1lIG9mIHRoZSBjbGFzcyBvZiB3aGljaCB0aGV5IGFyZQptZW1iZXJzLCBpLmUuLCBpb3NfYmFzZS48L3A+Cjxocj4KPGEgbmFtZT0iMjc0Ij48aDM+Mjc0LiZuYnNwO2EgbWlzc2luZy9pbXBvc3NpYmxlIGFsbG9jYXRvciByZXF1aXJlbWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+Ckkgc2VlIHRoYXQgdGFibGUgMzEgaW4gMjAuMS41LCBwMyBhbGxvd3MgVCBpbiBzdGQ6OmFsbG9jYXRvciZsdDtUJmd0OyB0byBiZSBvZgphbnkgdHlwZS4gQnV0IHRoZSBzeW5vcHNpcyBpbiAyMC40LjEgY2FsbHMgZm9yIGFsbG9jYXRvciZsdDsmZ3Q7OjphZGRyZXNzKCkgdG8KYmUgb3ZlcmxvYWRlZCBvbiByZWZlcmVuY2UgYW5kIGNvbnN0X3JlZmVyZW5jZSwgd2hpY2ggaXMgaWxsLWZvcm1lZCBmb3IKYWxsIFQgPSBjb25zdCBVLiBJbiBvdGhlciB3b3JkcywgdGhpcyB3b24ndCB3b3JrOgo8L3A+Cgo8cD4KdGVtcGxhdGUgY2xhc3Mgc3RkOjphbGxvY2F0b3ImbHQ7Y29uc3QgaW50Jmd0OzsKPC9wPgoKPHA+ClRoZSBvYnZpb3VzIHNvbHV0aW9uIGlzIHRvIGRpc2FsbG93IHNwZWNpYWxpemF0aW9ucyBvZiBhbGxvY2F0b3JzIG9uCmNvbnN0IHR5cGVzLiBIb3dldmVyLCB3aGlsZSBjb250YWluZXJzJyBlbGVtZW50cyBhcmUgcmVxdWlyZWQgdG8gYmUKYXNzaWduYWJsZSAod2hpY2ggcnVsZXMgb3V0IHNwZWNpYWxpemF0aW9ucyBvbiBjb25zdCBUJ3MpLCBJIHRoaW5rIHRoYXQKYWxsb2NhdG9ycyBtaWdodCBwZXJoYXBzIGJlIHBvdGVudGlhbGx5IHVzZWZ1bCBmb3IgY29uc3QgdmFsdWVzIGluIG90aGVyCmNvbnRleHRzLiBTbyBpZiBhbGxvY2F0b3JzIGFyZSB0byBhbGxvdyBjb25zdCB0eXBlcyBhIHBhcnRpYWwKc3BlY2lhbGl6YXRpb24gb2Ygc3RkOjphbGxvY2F0b3ImbHQ7Y29uc3QgVCZndDsgd291bGQgcHJvYmFibHkgaGF2ZSB0byBiZQpwcm92aWRlZC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgdGV4dCBpbiByb3cgMSwgY29sdW1uIDIgb2YgdGFibGUgMzIgaW4gMjAuMS41LCBwMyBmcm9tPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgYW55IHR5cGUKICAgIDwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgogICAgPGJsb2NrcXVvdGU+CiAgICBhbnkgbm9uLWNvbnN0LCBub24tcmVmZXJlbmNlIHR5cGUKICAgIDwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBwcmV2aW91cyBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyAiYW55IG5vbi1jb25zdCwKbm9uLXZvbGF0aWxlLCBub24tcmVmZXJlbmNlIHR5cGUiLiAgR290IHJpZCBvZiB0aGUgIm5vbi12b2xhdGlsZSIuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClR3byByZXNvbHV0aW9ucyB3ZXJlIG9yaWdpbmFsbHkgcHJvcG9zZWQ6IG9uZSB0aGF0IHBhcnRpYWxseQpzcGVjaWFsaXplZCBzdGQ6OmFsbG9jYXRvciBmb3IgY29uc3QgdHlwZXMsIGFuZCBvbmUgdGhhdCBzYWlkIGFuCmFsbG9jYXRvcidzIHZhbHVlIHR5cGUgbWF5IG5vdCBiZSBjb25zdC4gIFRoZSBMV0cgY2hvc2UgdGhlIHNlY29uZC4KVGhlIGZpcnN0IHdvdWxkbid0IGJlIGFwcHJvcHJpYXRlLCBiZWNhdXNlIGFsbG9jYXRvcnMgYXJlIGludGVuZGVkIGZvcgp1c2UgYnkgY29udGFpbmVycywgYW5kIGNvbnN0IHZhbHVlIHR5cGVzIGRvbid0IHdvcmsgaW4gY29udGFpbmVycy4KRW5jb3VyYWdpbmcgdGhlIHVzZSBvZiBhbGxvY2F0b3JzIHdpdGggY29uc3QgdmFsdWUgdHlwZXMgd291bGQgb25seQpsZWFkIHRvIHVuc2FmZSBjb2RlLgo8L3A+CjxwPgpUaGUgb3JpZ2luYWwgdGV4dCBmb3IgcHJvcG9zZWQgcmVzb2x1dGlvbiAyIHdhcyBtb2RpZmllZCBzbyB0aGF0IGl0CmFsc28gZm9yYmlkcyB2b2xhdGlsZSB0eXBlcyBhbmQgcmVmZXJlbmNlIHR5cGVzLgo8L3A+Cgo8cD48aT5bQ3VyYedhbzogTFdHIGRvdWJsZSBjaGVja2VkIGFuZCBiZWxpZXZlcyB2b2xhdGlsZSBpcyBjb3JyZWN0bHkKZXhjbHVkZWQgZnJvbSB0aGUgUFIuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjI3NSI+PGgzPjI3NS4mbmJzcDtXcm9uZyB0eXBlIGluIG51bV9nZXQ6OmdldCgpIG92ZXJsb2FkczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5nZXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBOb3YgMjAwMDwvcD4KPHA+CkluIDIyLjIuMi4xLjEsIHdlIGhhdmUgYSBsaXN0IG9mIG92ZXJsb2FkcyBmb3IgbnVtX2dldCZsdDsmZ3Q7OjpnZXQoKS4KVGhlcmUgYXJlIGVpZ2h0IG92ZXJsb2FkcywgYWxsIG9mIHdoaWNoIGFyZSBpZGVudGljYWwgZXhjZXB0IGZvciB0aGUKbGFzdCBwYXJhbWV0ZXIuICBUaGUgb3ZlcmxvYWRzIGFyZTogCjwvcD4KPHVsPgo8bGk+IGxvbmcmYW1wOyA8L2xpPgo8bGk+IHVuc2lnbmVkIHNob3J0JmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBpbnQmYW1wOyA8L2xpPgo8bGk+IHVuc2lnbmVkIGxvbmcmYW1wOyA8L2xpPgo8bGk+IHNob3J0JmFtcDsgPC9saT4KPGxpPiBkb3VibGUmYW1wOyA8L2xpPgo8bGk+IGxvbmcgZG91YmxlJmFtcDsgPC9saT4KPGxpPiB2b2lkKiZhbXA7IDwvbGk+CjwvdWw+Cgo8cD4KVGhlcmUgaXMgYSBzaW1pbGFyIGxpc3QsIGluIDIyLjIuMi4xLjIsIG9mIG92ZXJsb2FkcyBmb3IKbnVtX2dldCZsdDsmZ3Q7Ojpkb19nZXQoKS4gIEluIHRoaXMgbGlzdCwgdGhlIGxhc3QgcGFyYW1ldGVyIGhhcwp0aGUgdHlwZXM6IAo8L3A+Cjx1bD4KPGxpPiBsb25nJmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBzaG9ydCZhbXA7IDwvbGk+CjxsaT4gdW5zaWduZWQgaW50JmFtcDsgPC9saT4KPGxpPiB1bnNpZ25lZCBsb25nJmFtcDsgPC9saT4KPGxpPiBmbG9hdCZhbXA7IDwvbGk+CjxsaT4gZG91YmxlJmFtcDsgPC9saT4KPGxpPiBsb25nIGRvdWJsZSZhbXA7IDwvbGk+CjxsaT4gdm9pZComYW1wOyA8L2xpPgo8L3VsPgoKPHA+ClRoZXNlIHR3byBsaXN0cyBhcmUgbm90IGlkZW50aWNhbC4gIFRoZXkgc2hvdWxkIGJlLCBzaW5jZQo8dHQ+Z2V0PC90dD4gaXMgc3VwcG9zZWQgdG8gY2FsbCA8dHQ+ZG9fZ2V0PC90dD4gd2l0aCBleGFjdGx5CnRoZSBhcmd1bWVudHMgaXQgd2FzIGdpdmVuLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMi4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQubWVtYmVycyI+IFtsaWIuZmFjZXQubnVtLmdldC5tZW1iZXJzXTwvYT4sIGNoYW5nZTwvcD4KPHByZT4gIGl0ZXJfdHlwZSBnZXQoaXRlcl90eXBlIGluLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCBzaG9ydCZhbXA7IHZhbCkgY29uc3Q7CjwvcHJlPgo8cD50bzwvcD4KPHByZT4gIGl0ZXJfdHlwZSBnZXQoaXRlcl90eXBlIGluLCBpdGVyX3R5cGUgZW5kLCBpb3NfYmFzZSZhbXA7IHN0ciwKICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJmFtcDsgZXJyLCBmbG9hdCZhbXA7IHZhbCkgY29uc3Q7CjwvcHJlPgo8aHI+CjxhIG5hbWU9IjI3NiI+PGgzPjI3Ni4mbmJzcDtBc3NpZ25hYmxlIHJlcXVpcmVtZW50IGZvciBjb250YWluZXIgdmFsdWUgdHlwZSBvdmVybHkgc3RyaWN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlciBEaW1vdiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNyBOb3YgMjAwMDwvcD4KPHA+CjIzLjEvMyBzdGF0ZXMgdGhhdCB0aGUgb2JqZWN0cyBzdG9yZWQgaW4gYSBjb250YWluZXIgbXVzdCBiZQpBc3NpZ25hYmxlLiAgMjMuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIubWFwIj4gW2xpYi5tYXBdPC9hPiwgcGFyYWdyYXBoIDIsCnN0YXRlcyB0aGF0IG1hcCBzYXRpc2ZpZXMgYWxsIHJlcXVpcmVtZW50cyBmb3IgYSBjb250YWluZXIsIHdoaWxlIGluCnRoZSBzYW1lIHRpbWUgZGVmaW5pbmcgdmFsdWVfdHlwZSBhcyBwYWlyJmx0O2NvbnN0IEtleSwgVCZndDsgLSBhIHR5cGUKdGhhdCBpcyBub3QgQXNzaWduYWJsZS4KPC9wPgoKPHA+Ckl0IHNob3VsZCBiZSBub3RlZCB0aGF0IHRoZXJlIGV4aXN0cyBhIHZhbGlkIGFuZCBub24tY29udHJhZGljdG9yeQppbnRlcnByZXRhdGlvbiBvZiB0aGUgY3VycmVudCB0ZXh0LiBUaGUgd29yZGluZyBpbiAyMy4xLzMgYXZvaWRzIAptZW50aW9uaW5nIHZhbHVlX3R5cGUsIHJlZmVycmluZyBpbnN0ZWFkIHRvICJvYmplY3RzIHN0b3JlZCBpbiBhCmNvbnRhaW5lci4iIE9uZSBtaWdodCBhcmd1ZSB0aGF0IG1hcCBkb2VzIG5vdCBzdG9yZSBvYmplY3RzIG9mCnR5cGUgbWFwOjp2YWx1ZV90eXBlLCBidXQgb2YgbWFwOjptYXBwZWRfdHlwZSBpbnN0ZWFkLCBhbmQgdGhhdCB0aGUKQXNzaWduYWJsZSByZXF1aXJlbWVudCBhcHBsaWVzIHRvIG1hcDo6bWFwcGVkX3R5cGUsIG5vdAptYXA6OnZhbHVlX3R5cGUuCjwvcD4KCjxwPgpIb3dldmVyLCB0aGlzIG1ha2VzIG1hcCBhIHNwZWNpYWwgY2FzZSAob3RoZXIgY29udGFpbmVycyBzdG9yZSBvYmplY3RzIG9mCnR5cGUgdmFsdWVfdHlwZSkgYW5kIHRoZSBBc3NpZ25hYmxlIHJlcXVpcmVtZW50IGlzIG5lZWRsZXNzbHkgcmVzdHJpY3RpdmUgaW4KZ2VuZXJhbC4KPC9wPgoKPHA+CkZvciBleGFtcGxlLCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZiBhY3RpdmUgbGlicmFyeSBpc3N1ZSAKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzEwMyI+MTAzPC9hPiBpcyB0byBtYWtlIHNldDo6aXRlcmF0b3IgYSBjb25zdGFudCBpdGVyYXRvcjsgdGhpcwptZWFucyB0aGF0IG5vIHNldCBvcGVyYXRpb25zIGNhbiBleHBsb2l0IHRoZSBmYWN0IHRoYXQgdGhlIHN0b3JlZApvYmplY3RzIGFyZSBBc3NpZ25hYmxlLgo8L3A+Cgo8cD4KVGhpcyBpcyByZWxhdGVkIHRvLCBidXQgc2xpZ2h0bHkgYnJvYWRlciB0aGFuLCBjbG9zZWQgaXNzdWUKPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMTQwIj4xNDA8L2E+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+MjMuMS8zOiBTdHJpa2UgdGhlIHRyYWlsaW5nIHBhcnQgb2YgdGhlIHNlbnRlbmNlOjwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgLCBhbmQgdGhlIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIG9mIEFzc2lnbmFibGUgdHlwZXMgZnJvbSAyMy4xLzMKICAgIDwvYmxvY2txdW90ZT4KPHA+c28gdGhhdCBpdCByZWFkczo8L3A+CiAgICA8YmxvY2txdW90ZT4KICAgIC0zLSBUaGUgdHlwZSBvZiBvYmplY3RzIHN0b3JlZCBpbiB0aGVzZSBjb21wb25lbnRzIG11c3QgbWVldCB0aGUgCiAgICByZXF1aXJlbWVudHMgb2YgQ29weUNvbnN0cnVjdGlibGUgdHlwZXMgKGxpYi5jb3B5Y29uc3RydWN0aWJsZSkuCiAgICA8L2Jsb2NrcXVvdGU+Cgo8cD4yMy4xLzQ6IE1vZGlmeSB0byBtYWtlIGNsZWFyIHRoYXQgdGhpcyByZXF1aXJlbWVudCBpcyBub3QgZm9yIGFsbCAKY29udGFpbmVycy4gIENoYW5nZSB0bzo8L3A+Cgo8YmxvY2txdW90ZT4KLTQtIFRhYmxlIDY0IGRlZmluZXMgdGhlIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBTb21lIGNvbnRhaW5lcnMgCnJlcXVpcmUgdGhpcyBwcm9wZXJ0eSBvZiB0aGUgdHlwZXMgdG8gYmUgc3RvcmVkIGluIHRoZSBjb250YWluZXIuICBUIGlzIAp0aGUgdHlwZSB1c2VkIHRvIGluc3RhbnRpYXRlIHRoZSBjb250YWluZXIuIHQgaXMgYSB2YWx1ZSBvZiBULCBhbmQgdSBpcyAKYSB2YWx1ZSBvZiAocG9zc2libHkgY29uc3QpIFQuCjwvYmxvY2txdW90ZT4KCjxwPjIzLjEsIFRhYmxlIDY1OiBpbiB0aGUgZmlyc3Qgcm93LCBjaGFuZ2UgIlQgaXMgQXNzaWduYWJsZSIgdG8gIlQgaXMKQ29weUNvbnN0cnVjdGlibGUiLjwvcD4KCjxwPjIzLjIuMS8yOiBBZGQgc2VudGVuY2UgZm9yIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQuICBDaGFuZ2UgdG86PC9wPgoKPGJsb2NrcXVvdGU+Ci0yLSBBIGRlcXVlIHNhdGlzZmllcyBhbGwgb2YgdGhlIHJlcXVpcmVtZW50cyBvZiBhIGNvbnRhaW5lciBhbmQgb2YgYSAKcmV2ZXJzaWJsZSBjb250YWluZXIgKGdpdmVuIGluIHRhYmxlcyBpbiBsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykgYW5kIApvZiBhIHNlcXVlbmNlLCBpbmNsdWRpbmcgdGhlIG9wdGlvbmFsIHNlcXVlbmNlIHJlcXVpcmVtZW50cyAKKGxpYi5zZXF1ZW5jZS5yZXFtdHMpLiAgSW4gYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVtZW50cyBvbiB0aGUgc3RvcmVkIApvYmplY3QgZGVzY3JpYmVkIGluIDIzLjFbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdLCB0aGUgc3RvcmVkIG9iamVjdCAKbXVzdCBhbHNvIG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZiBBc3NpZ25hYmxlLiAgRGVzY3JpcHRpb25zIGFyZSAKcHJvdmlkZWQgaGVyZSBvbmx5IGZvciBvcGVyYXRpb25zIG9uIGRlcXVlIHRoYXQgYXJlIG5vdCBkZXNjcmliZWQgaW4gb25lIApvZiB0aGVzZSB0YWJsZXMgb3IgZm9yIG9wZXJhdGlvbnMgd2hlcmUgdGhlcmUgaXMgYWRkaXRpb25hbCBzZW1hbnRpYyAKaW5mb3JtYXRpb24uCjwvYmxvY2txdW90ZT4KCjxwPjIzLjIuMi8yOiAgQWRkIEFzc2lnbmFibGUgcmVxdWlyZW1lbnQgdG8gc3BlY2lmaWMgbWV0aG9kcyBvZiBsaXN0LiAgCkNoYW5nZSB0bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+LTItIEEgbGlzdCBzYXRpc2ZpZXMgYWxsIG9mIHRoZSByZXF1aXJlbWVudHMgb2YgYSBjb250YWluZXIgYW5kIG9mIGEgCnJldmVyc2libGUgY29udGFpbmVyIChnaXZlbiBpbiB0d28gdGFibGVzIGluIGxpYi5jb250YWluZXIucmVxdWlyZW1lbnRzKSAKYW5kIG9mIGEgc2VxdWVuY2UsIGluY2x1ZGluZyBtb3N0IG9mIHRoZSB0aGUgb3B0aW9uYWwgc2VxdWVuY2UgCnJlcXVpcmVtZW50cyAobGliLnNlcXVlbmNlLnJlcW10cykuIFRoZSBleGNlcHRpb25zIGFyZSB0aGUgb3BlcmF0b3JbXSAKYW5kIGF0IG1lbWJlciBmdW5jdGlvbnMsIHdoaWNoIGFyZSBub3QgcHJvdmlkZWQuIAoKW0Zvb3Rub3RlOiBUaGVzZSBtZW1iZXIgZnVuY3Rpb25zIGFyZSBvbmx5IHByb3ZpZGVkIGJ5IGNvbnRhaW5lcnMgd2hvc2UgCml0ZXJhdG9ycyBhcmUgcmFuZG9tIGFjY2VzcyBpdGVyYXRvcnMuIC0tLSBlbmQgZm9vbm90ZV0KPC9wPgoKPHA+bGlzdCBkb2VzIG5vdCByZXF1aXJlIHRoZSBzdG9yZWQgdHlwZSBUIHRvIGJlIEFzc2lnbmFibGUgdW5sZXNzIHRoZSAKZm9sbG93aW5nIG1ldGhvZHMgYXJlIGluc3RhbnRpYXRlZDoKCltGb290bm90ZTogSW1wbGVtZW50b3JzIGFyZSBwZXJtaXR0ZWQgYnV0IG5vdCByZXF1aXJlZCB0byB0YWtlIGFkdmFudGFnZSAKb2YgVCdzIEFzc2lnbmFibGUgcHJvcGVydGllcyBmb3IgdGhlc2UgbWV0aG9kcy4gLS0gZW5kIGZvb25vdGVdCjwvcD4KPHByZT4gICAgIGxpc3QmbHQ7VCxBbGxvY2F0b3ImZ3Q7JmFtcDsgb3BlcmF0b3I9KGNvbnN0IGxpc3QmbHQ7VCxBbGxvY2F0b3ImZ3Q7JmFtcDsgIHggKTsKICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgIHZvaWQgYXNzaWduKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCk7CiAgICAgdm9pZCBhc3NpZ24oc2l6ZV90eXBlIG4sIGNvbnN0IFQmYW1wOyB0KTsKPC9wcmU+CgoKPHA+RGVzY3JpcHRpb25zIGFyZSBwcm92aWRlZCBoZXJlIG9ubHkgZm9yIG9wZXJhdGlvbnMgb24gbGlzdCB0aGF0IGFyZSBub3QgCmRlc2NyaWJlZCBpbiBvbmUgb2YgdGhlc2UgdGFibGVzIG9yIGZvciBvcGVyYXRpb25zIHdoZXJlIHRoZXJlIGlzIAphZGRpdGlvbmFsIHNlbWFudGljIGluZm9ybWF0aW9uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+MjMuMi40LzI6ICAgQWRkIHNlbnRlbmNlIGZvciBBc3NpZ25hYmxlIHJlcXVpcmVtZW50LiAgQ2hhbmdlIHRvOjwvcD4KCjxibG9ja3F1b3RlPgotMi0gQSB2ZWN0b3Igc2F0aXNmaWVzIGFsbCBvZiB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgY29udGFpbmVyIGFuZCBvZiBhIApyZXZlcnNpYmxlIGNvbnRhaW5lciAoZ2l2ZW4gaW4gdHdvIHRhYmxlcyBpbiBsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cykgCmFuZCBvZiBhIHNlcXVlbmNlLCBpbmNsdWRpbmcgbW9zdCBvZiB0aGUgb3B0aW9uYWwgc2VxdWVuY2UgcmVxdWlyZW1lbnRzIAoobGliLnNlcXVlbmNlLnJlcW10cykuIFRoZSBleGNlcHRpb25zIGFyZSB0aGUgcHVzaF9mcm9udCBhbmQgcG9wX2Zyb250IAptZW1iZXIgZnVuY3Rpb25zLCB3aGljaCBhcmUgbm90IHByb3ZpZGVkLiAgSW4gYWRkaXRpb24gdG8gdGhlIApyZXF1aXJlbWVudHMgb24gdGhlIHN0b3JlZCBvYmplY3QgZGVzY3JpYmVkIGluIAoyMy4xW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXSwgdGhlIHN0b3JlZCBvYmplY3QgbXVzdCBhbHNvIG1lZXQgdGhlIApyZXF1aXJlbWVudHMgb2YgQXNzaWduYWJsZS4gIERlc2NyaXB0aW9ucyBhcmUgcHJvdmlkZWQgaGVyZSBvbmx5IGZvciAKb3BlcmF0aW9ucyBvbiB2ZWN0b3IgdGhhdCBhcmUgbm90IGRlc2NyaWJlZCBpbiBvbmUgb2YgdGhlc2UgdGFibGVzIG9yIApmb3Igb3BlcmF0aW9ucyB3aGVyZSB0aGVyZSBpcyBhZGRpdGlvbmFsIHNlbWFudGljIGluZm9ybWF0aW9uLgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5saXN0LCBzZXQsIG11bHRpc2V0LCBtYXAsIG11bHRpbWFwIGFyZSBhYmxlIHRvIHN0b3JlIG5vbi1Bc3NpZ25hYmxlcy4KSG93ZXZlciwgdGhlcmUgaXMgc29tZSBjb25jZXJuIGFib3V0IDx0dD5saXN0Jmx0O1QmZ3Q7PC90dD46CmFsdGhvdWdoIGluIGdlbmVyYWwgdGhlcmUncyBubyByZWFzb24gZm9yIFQgdG8gYmUgQXNzaWduYWJsZSwgc29tZQppbXBsZW1lbnRhdGlvbnMgb2YgdGhlIG1lbWJlciBmdW5jdGlvbnMgPHR0Pm9wZXJhdG9yPTwvdHQ+IGFuZAo8dHQ+YXNzaWduPC90dD4gZG8gcmVseSBvbiB0aGF0IHJlcXVpcmVtZW50LiAgVGhlIExXRyBkb2VzIG5vdCB3YW50CnRvIGZvcmJpZCBzdWNoIGltcGxlbWVudGF0aW9ucy48L3A+Cgo8cD5Ob3RlIHRoYXQgdGhlIHR5cGUgc3RvcmVkIGluIGEgc3RhbmRhcmQgY29udGFpbmVyIG11c3Qgc3RpbGwgc2F0aXNmeQp0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBjb250YWluZXIncyBhbGxvY2F0b3I7IHRoaXMgcnVsZXMgb3V0LCBmb3IKZXhhbXBsZSwgc3VjaCB0eXBlcyBhcyAiY29uc3QgaW50Ii4gIFNlZSBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjc0Ij4yNzQ8L2E+CmZvciBtb3JlIGRldGFpbHMuCjwvcD4KCjxwPkluIHByaW5jaXBsZSB3ZSBjb3VsZCBhbHNvIHJlbGF4IHRoZSAiQXNzaWduYWJsZSIgcmVxdWlyZW1lbnQgZm9yCmluZGl2aWR1YWwgPHR0PnZlY3RvcjwvdHQ+IG1lbWJlciBmdW5jdGlvbnMsIHN1Y2ggYXMKPHR0PnB1c2hfYmFjazwvdHQ+LiAgSG93ZXZlciwgdGhlIExXRyBkaWQgbm90IHNlZSBncmVhdCB2YWx1ZSBpbiBzdWNoCnNlbGVjdGl2ZSByZWxheGF0aW9uLiAgRG9pbmcgc28gd291bGQgcmVtb3ZlIGltcGxlbWVudG9ycycgZnJlZWRvbSB0bwppbXBsZW1lbnQgPHR0PnZlY3Rvcjo6cHVzaF9iYWNrPC90dD4gaW4gdGVybXMgb2YKPHR0PnZlY3Rvcjo6aW5zZXJ0PC90dD4uPC9wPgoKPGhyPgo8YSBuYW1lPSIyNzgiPjxoMz4yNzguJm5ic3A7V2hhdCBkb2VzIGl0ZXJhdG9yIHZhbGlkaXR5IG1lYW4/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm9wcyI+IFtsaWIubGlzdC5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQLkouIFBsYXVnZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgTm92IDIwMDA8L3A+CjxwPgpTZWN0aW9uIDIzLjIuMi40IFtsaWIubGlzdC5vcHNdIHN0YXRlcyB0aGF0CjwvcD4KPHByZT4gIHZvaWQgc3BsaWNlKGl0ZXJhdG9yIHBvc2l0aW9uLCBsaXN0Jmx0O1QsIEFsbG9jYXRvciZndDsmYW1wOyB4KTsKPC9wcmU+CjxwPgo8aT5pbnZhbGlkYXRlczwvaT4gYWxsIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyB0byBsaXN0IDx0dD54PC90dD4uCjwvcD4KCjxwPgpCdXQgd2hhdCBkb2VzIHRoZSBDKysgU3RhbmRhcmQgbWVhbiBieSAiaW52YWxpZGF0ZSI/ICBZb3UKY2FuIHN0aWxsIGRlcmVmZXJlbmNlIHRoZSBpdGVyYXRvciB0byBhIHNwbGljZWQgbGlzdCBlbGVtZW50LCBidXQKeW91J2QgYmV0dGVyIG5vdCB1c2UgaXQgdG8gZGVsaW1pdCBhIHJhbmdlIHdpdGhpbiB0aGUgb3JpZ2luYWwKbGlzdC4gRm9yIHRoZSBsYXR0ZXIgb3BlcmF0aW9uLCBpdCBoYXMgZGVmaW5pdGVseSBsb3N0IHNvbWUgb2YgaXRzCnZhbGlkaXR5Lgo8L3A+Cgo8cD4KSWYgd2UgYWNjZXB0IHRoZSBwcm9wb3NlZCByZXNvbHV0aW9uIHRvIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTAiPjI1MDwvYT4sCnRoZW4gd2UnZCBiZXR0ZXIgY2xhcmlmeSB0aGF0IGEgInZhbGlkIiBpdGVyYXRvciBuZWVkIG5vCmxvbmdlciBkZXNpZ25hdGUgYW4gZWxlbWVudCB3aXRoaW4gdGhlIHNhbWUgY29udGFpbmVyIGFzIGl0IG9uY2UgZGlkLgpXZSB0aGVuIGhhdmUgdG8gY2xhcmlmeSB3aGF0IHdlIG1lYW4gYnkgaW52YWxpZGF0aW5nIGEgcGFzdC10aGUtZW5kCml0ZXJhdG9yLCBhcyB3aGVuIGEgdmVjdG9yIG9yIHN0cmluZyBncm93cyBieSByZWFsbG9jYXRpb24uIENsZWFybHksCnN1Y2ggYW4gaXRlcmF0b3IgaGFzIGEgZGlmZmVyZW50IGtpbmQgb2YgdmFsaWRpdHkuIFBlcmhhcHMgd2Ugc2hvdWxkCmludHJvZHVjZSBzZXBhcmF0ZSB0ZXJtcyBmb3IgdGhlIHR3byBraW5kcyBvZiAidmFsaWRpdHkuIgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdGV4dCB0byB0aGUgZW5kIG9mIHNlY3Rpb24gMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPiwKYWZ0ZXIgcGFyYWdyYXBoIDU6PC9wPgo8YmxvY2txdW90ZT4KQW4gPGk+aW52YWxpZDwvaT4gaXRlcmF0b3IgaXMgYW4gaXRlcmF0b3IgdGhhdCBtYXkgYmUKc2luZ3VsYXIuIFtGb290bm90ZTogVGhpcyBkZWZpbml0aW9uIGFwcGxpZXMgdG8gcG9pbnRlcnMsIHNpbmNlCnBvaW50ZXJzIGFyZSBpdGVyYXRvcnMuIFRoZSBlZmZlY3Qgb2YgZGVyZWZlcmVuY2luZyBhbiBpdGVyYXRvciB0aGF0CmhhcyBiZWVuIGludmFsaWRhdGVkIGlzIHVuZGVmaW5lZC5dCjwvYmxvY2txdW90ZT4KCjxwPjxpPltwb3N0LUNvcGVuaGFnZW46IE1hdHQgcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxwPjxpPltSZWRtb25kOiBHZW5lcmFsIGFncmVlbWVudCB3aXRoIHRoZSBpbnRlbnQsIHNvbWUgb2JqZWN0aW9ucyB0bwp0aGUgd29yZGluZy4gIERhdmUgcHJvdmlkZWQgbmV3IHdvcmRpbmcuXTwvaT48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGlzIHJlc29sdXRpb24gc2ltcGx5IGRlZmluZXMgYSB0ZXJtIHRoYXQgdGhlIFN0YW5kYXJkIHVzZXMgYnV0CiAgbmV2ZXIgZGVmaW5lcywgImludmFsaWQiLCBpbiB0ZXJtcyBvZiBhIHRlcm0gdGhhdCBpcyBkZWZpbmVkLAogICJzaW5ndWxhciIuPC9wPgoKPHA+V2h5IGRvIHdlIHNheSAibWF5IGJlIHNpbmd1bGFyIiwgaW5zdGVhZCBvZiAiaXMgc2luZ3VsYXIiPyAgVGhhdCdzCiAgYmVjdWFzZSBhIHZhbGlkIGl0ZXJhdG9yIGlzIG9uZSB0aGF0IGlzIGtub3duIHRvIGJlIG5vbnNpbmd1bGFyLgogIEludmFsaWRhdGluZyBhbiBpdGVyYXRvciBtZWFucyBjaGFuZ2luZyBpdCBpbiBzdWNoIGEgd2F5IHRoYXQgaXQncwogIG5vIGxvbmdlciBrbm93biB0byBiZSBub25zaW5ndWxhci4gIEFuIGV4YW1wbGU6IGluc2VydGluZyBhbgogIGVsZW1lbnQgaW50byB0aGUgbWlkZGxlIG9mIGEgdmVjdG9yIGlzIGNvcnJlY3RseSBzYWlkIHRvIGludmFsaWRhdGUKICBhbGwgaXRlcmF0b3JzIHBvaW50aW5nIGludG8gdGhlIHZlY3Rvci4gIFRoYXQgZG9lc24ndCBuZWNlc3NhcmlseQogIG1lYW4gdGhleSBhbGwgYmVjb21lIHNpbmd1bGFyLjwvcD4KPGhyPgo8YSBuYW1lPSIyODEiPjxoMz4yODEuJm5ic3A7c3RkOjptaW4oKSBhbmQgbWF4KCkgcmVxdWlyZW1lbnRzIG92ZXJseSByZXN0cmljdGl2ZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5taW4ubWF4Ij4gW2xpYi5hbGcubWluLm1heF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswMiBEZWMgMjAwMDwvcD4KPHA+VGhlIHJlcXVpcmVtZW50cyBpbiAyNS4zLjcsIHAxIGFuZCA0IGNhbGwgZm9yIFQgdG8gc2F0aXNmeSB0aGUKcmVxdWlyZW1lbnRzIG9mIDx0dD5MZXNzVGhhbkNvbXBhcmFibGU8L3R0PiAoMjAuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5sZXNzdGhhbmNvbXBhcmFibGUiPiBbbGliLmxlc3N0aGFuY29tcGFyYWJsZV08L2E+KQphbmQgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gKDIwLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuY29weWNvbnN0cnVjdGlibGUiPiBbbGliLmNvcHljb25zdHJ1Y3RpYmxlXTwvYT4pLgpTaW5jZSB0aGUgZnVuY3Rpb25zIHRha2UgYW5kIHJldHVybiB0aGVpciBhcmd1bWVudHMgYW5kIHJlc3VsdCBieQpjb25zdCByZWZlcmVuY2UsIEkgYmVsaWV2ZSB0aGUgPHR0PkNvcHlDb25zdHJ1Y3RpYmxlPC90dD4gcmVxdWlyZW1lbnQKaXMgdW5uZWNlc3NhcnkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIDx0dD5Db3B5Q29uc3RydWN0aWJsZTwvdHQ+IHJlcXVpcmVtZW50LiBTcGVjaWZpY2FsbHksIHJlcGxhY2UKMjUuMy43LCBwMSB3aXRoPC9wPgo8cD48Yj4tMS0gUmVxdWlyZXM6PC9iPiBUeXBlIFQgaXMgPHR0Pkxlc3NUaGFuQ29tcGFyYWJsZTwvdHQ+IAooMjAuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5sZXNzdGhhbmNvbXBhcmFibGUiPiBbbGliLmxlc3N0aGFuY29tcGFyYWJsZV08L2E+KS4KPC9wPgo8cD5hbmQgcmVwbGFjZSAyNS4zLjcsIHA0IHdpdGg8L3A+CjxwPjxiPi00LSBSZXF1aXJlczo8L2I+IFR5cGUgVCBpcyA8dHQ+TGVzc1RoYW5Db21wYXJhYmxlPC90dD4gCigyMC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmxlc3N0aGFuY29tcGFyYWJsZSI+IFtsaWIubGVzc3RoYW5jb21wYXJhYmxlXTwvYT4pLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjgyIj48aDM+MjgyLiZuYnNwO1doYXQgdHlwZXMgZG9lcyBudW1wdW5jdCBncm91cGluZyByZWZlciB0bz88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hvd2FyZCBIaW5uYW50Jm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzUgRGVjIDIwMDA8L3A+CjxwPgpQYXJhZ3JhcGggMTYgbWlzdGFrZW5seSBzaW5nbGVzIG91dCBpbnRlZ3JhbCB0eXBlcyBmb3IgaW5zZXJ0aW5nIAp0aG91c2FuZHNfc2VwKCkgY2hhcmFjdGVycy4gIFRoaXMgY29uZmxpY3RzIHdpdGggdGhlIHN5bnRheCBmb3IgZmxvYXRpbmcgCnBvaW50IG51bWJlcnMgZGVzY3JpYmVkIHVuZGVyIDIyLjIuMy4xLzIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgcGFyYWdyYXBoIDE2IGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CkZvciBpbnRlZ3JhbCB0eXBlcywgcHVuY3QudGhvdXNhbmRzX3NlcCgpIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGludG8gCnRoZSBzZXF1ZW5jZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBwdW5jdC5kb19ncm91cGluZygpIAp1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4uCjwvYmxvY2txdW90ZT4KCjxwPlRvOjwvcD4KCjxibG9ja3F1b3RlPgpGb3IgYXJpdGhtZXRpYyB0eXBlcywgcHVuY3QudGhvdXNhbmRzX3NlcCgpIGNoYXJhY3RlcnMgYXJlIGluc2VydGVkIGludG8gCnRoZSBzZXF1ZW5jZSBhcyBkZXRlcm1pbmVkIGJ5IHRoZSB2YWx1ZSByZXR1cm5lZCBieSBwdW5jdC5kb19ncm91cGluZygpIAp1c2luZyB0aGUgbWV0aG9kIGRlc2NyaWJlZCBpbiAyMi4yLjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtcHVuY3QudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bXB1bmN0LnZpcnR1YWxzXTwvYT4uCjwvYmxvY2txdW90ZT4KCjxwPjxpPlsKQ29wZW5oYWdlbjogT3BpbmlvbnMgd2VyZSBkaXZpZGVkIGFib3V0IHdoZXRoZXIgdGhpcyBpcyBhY3R1YWxseSBhbgppbmNvbnNpc3RlbmN5LCBidXQgYXQgYmVzdCBpdCBzZWVtcyB0byBoYXZlIGJlZW4gdW5pbnRlbnRpb25hbC4gIFRoaXMKaXMgb25seSBhbiBpc3N1ZSBmb3IgZmxvYXRpbmctcG9pbnQgb3V0cHV0OiBUaGUgc3RhbmRhcmQgaXMKdW5hbWJpZ3VvdXMgdGhhdCBpbXBsZW1lbnRhdGlvbnMgbXVzdCBwYXJzZSB0aG91c2FuZHNfc2VwIGNoYXJhY3RlcnMKd2hlbiBwZXJmb3JtaW5nIGZsb2F0aW5nLXBvaW50LiAgVGhlIHN0YW5kYXJkIGlzIGFsc28gdW5hbWJpZ3VvdXMgdGhhdAp0aGlzIHJlcXVpcmVtZW50IGRvZXMgbm90IGFwcGx5IHRvIHRoZSAiQyIgbG9jYWxlLgpdPC9pPjwvcD4KCjxwPjxpPlsKQSBzdXJ2ZXkgb2YgZXhpc3RpbmcgcHJhY3RpY2UgaXMgbmVlZGVkOyBpdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUKaW1wbGVtZW50YXRpb25zIGRvIGluc2VydCB0aG91c2FuZHNfc2VwIGNoYXJhY3RlcnMgZm9yIGZsb2F0aW5nLXBvaW50Cm91dHB1dCBhbmQgb3RoZXJzIGZhaWwgdG8gaW5zZXJ0IHRob3VzYW5kc19zZXAgY2hhcmFjdGVycyBmb3IgCmZsb2F0aW5nLXBvaW50IGlucHV0IGV2ZW4gdGhvdWdoIHRoaXMgaXMgdW5hbWJpZ3VvdXNseSByZXF1aXJlZCBieSB0aGUKc3RhbmRhcmQuCl08L2k+PC9wPgoKPHA+PGk+W1Bvc3QtQ3VyYedhbzogdGhlIGFib3ZlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgdGhlIGNvbnNlbnN1cyBvZgpIb3dhcmQsIEJpbGwsIFBldGUsIEJlbmphbWluLCBOYXRoYW4sIERpZXRtYXIsIEJvcmlzLCBhbmQgTWFydGluLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIyODMiPjxoMz4yODMuJm5ic3A7c3RkOjpyZXBsYWNlKCkgcmVxdWlyZW1lbnQgaW5jb3JyZWN0L2luc3VmZmljaWVudDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXBsYWNlIj4gW2xpYi5hbGcucmVwbGFjZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBEZWMgMjAwMDwvcD4KPHA+CihyZXZpc2lvbiBvZiB0aGUgZnVydGhlciBkaXNjdXNzaW9uKQpUaGVyZSBhcmUgYSBudW1iZXIgb2YgcHJvYmxlbXMgd2l0aCB0aGUgcmVxdWlyZXMgY2xhdXNlcyBmb3IgdGhlCmFsZ29yaXRobXMgaW4gMjUuMSBhbmQgMjUuMi4gVGhlIHJlcXVpcmVzIGNsYXVzZSBvZiBlYWNoIGFsZ29yaXRobQpzaG91bGQgZGVzY3JpYmUgdGhlIG5lY2Vzc2FyeSBhbmQgc3VmZmljaWVudCByZXF1aXJlbWVudHMgb24gdGhlIGlucHV0cwp0byB0aGUgYWxnb3JpdGhtIHN1Y2ggdGhhdCB0aGUgYWxnb3JpdGhtIGNvbXBpbGVzIGFuZCBydW5zIHByb3Blcmx5LgpNYW55IG9mIHRoZSByZXF1aXJlcyBjbGF1c2VzIGZhaWwgdG8gZG8gdGhpcy4gSGVyZSBpcyBhIHN1bW1hcnkgb2YgdGhlIGtpbmRzCm9mIG1pc3Rha2VzOgo8L3A+Cgo8b2w+CjxsaT4KVXNlIG9mIEVxdWFsaXR5Q29tcGFyYWJsZSwgd2hpY2ggb25seSBwdXRzIHJlcXVpcmVtZW50cyBvbiBhIHNpbmdsZQp0eXBlLCB3aGVuIGluIGZhY3QgYW4gZXF1YWxpdHkgb3BlcmF0b3IgaXMgcmVxdWlyZWQgYmV0d2VlbiB0d28KZGlmZmVyZW50IHR5cGVzLCB0eXBpY2FsbHkgZWl0aGVyIFQgYW5kIHRoZSBpdGVyYXRvcidzIHZhbHVlIHR5cGUKb3IgYmV0d2VlbiB0aGUgdmFsdWUgdHlwZXMgb2YgdHdvIGRpZmZlcmVudCBpdGVyYXRvcnMuCjwvbGk+CjxsaT4KVXNlIG9mIEFzc2lnbmFibGUgZm9yIFQgd2hlbiBpbiBmYWN0IHdoYXQgd2FzIG5lZWRlZCBpcyBBc3NpZ25hYmxlCmZvciB0aGUgdmFsdWVfdHlwZSBvZiB0aGUgaXRlcmF0b3IsIGFuZCBjb252ZXJ0YWJpbGl0eSBmcm9tIFQgdG8gdGhlCnZhbHVlX3R5cGUgb2YgdGhlIGl0ZXJhdG9yLiBPciBmb3Igb3V0cHV0IGl0ZXJhdG9ycywgdGhlIHJlcXVpcmVtZW50CnNob3VsZCBiZSB0aGF0IFQgaXMgd3JpdGFibGUgdG8gdGhlIGl0ZXJhdG9yIChvdXRwdXQgaXRlcmF0b3JzIGRvCm5vdCBoYXZlIHZhbHVlIHR5cGVzKS4KPC9saT4KPC9vbD4KCjxwPgpIZXJlIGlzIHRoZSBsaXN0IG9mIGFsZ29yaXRobXMgdGhhdCBjb250YWluIG1pc3Rha2VzOgo8L3A+Cgo8dWw+CjxsaT4yNS4xLjIgc3RkOjpmaW5kPC9saT4KPGxpPjI1LjEuNiBzdGQ6OmNvdW50PC9saT4KPGxpPjI1LjEuOCBzdGQ6OmVxdWFsPC9saT4KPGxpPjI1LjEuOSBzdGQ6OnNlYXJjaCwgc3RkOjpzZWFyY2hfbjwvbGk+CjxsaT4yNS4yLjQgc3RkOjpyZXBsYWNlLCBzdGQ6OnJlcGxhY2VfY29weTwvbGk+CjxsaT4yNS4yLjUgc3RkOjpmaWxsPC9saT4KPGxpPjI1LjIuNyBzdGQ6OnJlbW92ZSwgc3RkOjpyZW1vdmVfY29weTwvbGk+CjwvdWw+Cgo8cD4KQWxzbywgaW4gdGhlIHJlcXVpcmVtZW50cyBmb3IgRXF1YWxpdHlDb21wYXJhYmxlLCB0aGUgcmVxdWlyZW1lbnQgdGhhdAp0aGUgb3BlcmF0b3IgYmUgZGVmaW5lZCBmb3IgY29uc3Qgb2JqZWN0cyBpcyBsYWNraW5nLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD4yMC4xLjEgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD5JbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+VDwvdHQ+Lgo8L3A+Cgo8cD50bzwvcD4KCjxwPgpJbiBUYWJsZSAyOCwgPHR0PlQ8L3R0PiBpcyBhIHR5cGUgdG8gYmUgc3VwcGxpZWQgYnkgYSBDKysgcHJvZ3JhbQppbnN0YW50aWF0aW5nIGEgdGVtcGxhdGUsIDx0dD5hPC90dD4sIDx0dD5iPC90dD4sIGFuZCA8dHQ+YzwvdHQ+IGFyZQp2YWx1ZXMgb2YgdHlwZSA8dHQ+Y29uc3QgVDwvdHQ+Lgo8L3A+Cgo8cD4yNSBCZXR3ZWVuIHA4IGFuZCBwOTwvcD4KCjxwPkFkZCB0aGUgZm9sbG93aW5nIHNlbnRlbmNlOjwvcD4KCjxwPldoZW4gdGhlIGRlc2NyaXB0aW9uIG9mIGFuIGFsZ29yaXRobSBnaXZlcyBhbiBleHByZXNzaW9uIHN1Y2ggYXMKPHR0PipmaXJzdCA9PSB2YWx1ZTwvdHQ+IGZvciBhIGNvbmRpdGlvbiwgaXQgaXMgcmVxdWlyZWQgdGhhdCB0aGUgZXhwcmVzc2lvbgpldmFsdWF0ZSB0byBlaXRoZXIgdHJ1ZSBvciBmYWxzZSBpbiBib29sZWFuIGNvbnRleHRzLjwvcD4KCjxwPjI1LjEuMiBDaGFuZ2UgcDEgYnkgZGVsZXRpbmcgdGhlIHJlcXVpcmVzIGNsYXVzZS48L3A+Cgo8cD4yNS4xLjYgQ2hhbmdlIHAxIGJ5IGRlbGV0aW5nIHRoZSByZXF1aXJlcyBjbGF1c2UuPC9wPgoKPHA+MjUuMS45PC9wPgoKPHA+Q2hhbmdlIHA0IGZyb208L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+RXF1YWxpdHlDb21wYXJhYmxlPC90dD4KKDIwLjEuMSksIHR5cGUgU2l6ZSBpcyBjb252ZXJ0aWJsZSB0byBpbnRlZ3JhbCB0eXBlICg0LjcuMTIuMykuCjwvcD4KCjxwPnRvPC9wPgoKPHA+LTQtIFJlcXVpcmVzOiBUaGUgdHlwZSA8dHQ+U2l6ZTwvdHQ+IGlzIGNvbnZlcnRpYmxlIHRvIGludGVncmFsCnR5cGUgKDQuNy4xMi4zKS48L3A+Cgo8cD4yNS4yLjQgQ2hhbmdlIHAxIGZyb208L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFR5cGUgPHR0PlQ8L3R0PiBpcyA8dHQ+QXNzaWduYWJsZTwvdHQ+ICgyMy4xICkgKGFuZCwgZm9yIDx0dD5yZXBsYWNlKCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+ICgyMC4xLjEgKSkuPC9wPgoKPHA+dG88L3A+Cgo8cD4tMS0gUmVxdWlyZXM6IFRoZSBleHByZXNzaW9uIDx0dD4qZmlyc3QgPSBuZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHZhbGlkLjwvcD4KCjxwPmFuZCBjaGFuZ2UgcDQgZnJvbTwvcD4KCjxwPi00LSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpIChhbmQsCmZvciA8dHQ+cmVwbGFjZV9jb3B5KCk8L3R0PiwgPHR0PkVxdWFsaXR5Q29tcGFyYWJsZTwvdHQ+CigyMC4xLjEpKS4gVGhlIHJhbmdlcyA8dHQ+W2ZpcnN0LCBsYXN0KTwvdHQ+IGFuZCA8dHQ+W3Jlc3VsdCwgcmVzdWx0ICsKKGxhc3QgLSBmaXJzdCkpPC90dD4gc2hhbGwgbm90IG92ZXJsYXAuPC9wPgoKPHA+dG88L3A+Cgo8cD4tNC0gUmVxdWlyZXM6IFRoZSByZXN1bHRzIG9mIHRoZSBleHByZXNzaW9ucyA8dHQ+KmZpcnN0PC90dD4gYW5kCjx0dD5uZXdfdmFsdWU8L3R0PiBtdXN0IGJlIHdyaXRhYmxlIHRvIHRoZSByZXN1bHQgb3V0cHV0IGl0ZXJhdG9yLiBUaGUKcmFuZ2VzIDx0dD5bZmlyc3QsIGxhc3QpPC90dD4gYW5kIDx0dD5bcmVzdWx0LCByZXN1bHQgKyAobGFzdCAtCmZpcnN0KSk8L3R0PiBzaGFsbCBub3Qgb3ZlcmxhcC48L3A+CgoKPHA+MjUuMi41IENoYW5nZSBwMSBmcm9tPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUeXBlIDx0dD5UPC90dD4gaXMgPHR0PkFzc2lnbmFibGU8L3R0PiAoMjMuMSkuIFRoZQp0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4gaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPnRvPC9wPgoKPHA+LTEtIFJlcXVpcmVzOiBUaGUgZXhwcmVzc2lvbiA8dHQ+dmFsdWU8L3R0PiBtdXN0IGJlIGlzIHdyaXRhYmxlIHRvCnRoZSBvdXRwdXQgaXRlcmF0b3IuIFRoZSB0eXBlIDx0dD5TaXplPC90dD4gaXMgY29udmVydGlibGUgdG8gYW4KaW50ZWdyYWwgdHlwZSAoNC43LjEyLjMpLjwvcD4KCjxwPjI1LjIuNyBDaGFuZ2UgcDEgZnJvbTwvcD4KCjxwPi0xLSBSZXF1aXJlczogVHlwZSA8dHQ+VDwvdHQ+IGlzIDx0dD5FcXVhbGl0eUNvbXBhcmFibGU8L3R0PiAoMjAuMS4xKS48L3A+Cgo8cD50bzwvcD4KCjxwPgotMS0gUmVxdWlyZXM6IFRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvciBtdXN0IGJlCjx0dD5Bc3NpZ25hYmxlPC90dD4gKDIzLjEpLgo8L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBnZW5lcmFsIGlkZWEgb2YgdGhlIHByb3Bvc2VkIHNvbHV0aW9uIGlzIHRvIHJlbW92ZSB0aGUgZmF1bHR5CnJlcXVpcmVzIGNsYXVzZXMgYW5kIGxldCB0aGUgcmV0dXJucyBhbmQgZWZmZWN0cyBjbGF1c2VzIHNwZWFrIGZvcgp0aGVtc2VsdmVzLiBUaGF0IGlzLCB0aGUgcmV0dXJucyBjbGF1c2VzIGNvbnRhaW4gZXhwcmVzc2lvbnMgdGhhdCBtdXN0CmJlIHZhbGlkLCBhbmQgdGhlcmVmb3JlIGFscmVhZHkgaW1wbHkgdGhlIGNvcnJlY3QgcmVxdWlyZW1lbnRzLiBJbgphZGRpdGlvbiwgYSBzZW50ZW5jZSBpcyBhZGRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGNoYXB0ZXIgMjUgc2F5aW5nCnRoYXQgZXhwcmVzc2lvbnMgZ2l2ZW4gYXMgY29uZGl0aW9ucyBtdXN0IGV2YWx1YXRlIHRvIHRydWUgb3IgZmFsc2UgaW4KYSBib29sZWFuIGNvbnRleHQuIEFuIGFsdGVybmF0aXZlIHdvdWxkIGJlIHRvIHNheSB0aGF0IHRoZSB0eXBlIG9mCnRoZXNlIGNvbmRpdGlvbiBleHByZXNzaW9ucyBtdXN0IGJlIGxpdGVyYWxseSBib29sLCBidXQgdGhhdCB3b3VsZCBiZQppbXBvc2luZyBhIGdyZWF0ZXIgcmVzdHJpY3Rpb24gdGhhdCB3aGF0IHRoZSBzdGFuZGFyZCBjdXJyZW50bHkgc2F5cwood2hpY2ggaXMgY29udmVydGlibGUgdG8gYm9vbCkuCjwvcD4KPGhyPgo8YSBuYW1lPSIyODQiPjxoMz4yODQuJm5ic3A7dW5wb3J0YWJsZSBleGFtcGxlIGluIDIwLjMuNywgcDY8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMC4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmZ1bmN0aW9uLnBvaW50ZXIuYWRhcHRvcnMiPiBbbGliLmZ1bmN0aW9uLnBvaW50ZXIuYWRhcHRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjYgRGVjIDIwMDA8L3A+CjxwPlRoZSBleGFtcGxlIGluIDIwLjMuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuZnVuY3Rpb24ucG9pbnRlci5hZGFwdG9ycyI+IFtsaWIuZnVuY3Rpb24ucG9pbnRlci5hZGFwdG9yc108L2E+LCBwNiBzaG93cyBob3cgdG8gdXNlIHRoZSBDCmxpYnJhcnkgZnVuY3Rpb24gPHR0PnN0cmNtcCgpPC90dD4gd2l0aCB0aGUgZnVuY3Rpb24gcG9pbnRlciBhZGFwdGVyCjx0dD5wdHJfZnVuKCk8L3R0Pi4gQnV0IHNpbmNlIGl0J3MgdW5zcGVjaWZpZWQgd2hldGhlciB0aGUgQyBsaWJyYXJ5CmZ1bmN0aW9ucyBoYXZlIDx0dD5leHRlcm4gIkMiPC90dD4gb3IgPHR0PmV4dGVybgoiQysrIjwvdHQ+IGxpbmthZ2UgWzE3LjQuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnVzaW5nLmxpbmthZ2UiPiBbbGliLnVzaW5nLmxpbmthZ2VdPC9hPl0sIGFuZCBzaW5jZQpmdW5jdGlvbiBwb2ludGVycyB3aXRoIGRpZmZlcmVudCB0aGUgbGFuZ3VhZ2UgbGlua2FnZSBzcGVjaWZpY2F0aW9ucwooNy41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvZGNsLmh0bWwjZGNsLmxpbmsiPiBbZGNsLmxpbmtdPC9hPikgYXJlIGluY29tcGF0aWJsZSwgd2hldGhlciB0aGlzIGV4YW1wbGUgaXMKd2VsbC1mb3JtZWQgaXMgdW5zcGVjaWZpZWQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjAuMy43IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5mdW5jdGlvbi5wb2ludGVyLmFkYXB0b3JzIj4gW2xpYi5mdW5jdGlvbi5wb2ludGVyLmFkYXB0b3JzXTwvYT4gcGFyYWdyYXBoIDYgZnJvbTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPls8aT5FeGFtcGxlOjwvaT48L3A+CiAgPHByZT4gICAgcmVwbGFjZV9pZih2LmJlZ2luKCksIHYuZW5kKCksIG5vdDEoYmluZDJuZChwdHJfZnVuKHN0cmNtcCksICJDIikpLCAiQysrIik7CiAgPC9wcmU+CiAgPHA+cmVwbGFjZXMgZWFjaCA8dHQ+QzwvdHQ+IHdpdGggPHR0PkMrKzwvdHQ+IGluIHNlcXVlbmNlIDx0dD52PC90dD4uPC9wPgo8L2Jsb2NrcXVvdGU+CgoKPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KICA8cD5bPGk+RXhhbXBsZTo8L2k+PC9wPgogIDxwcmU+ICAgIGludCBjb21wYXJlKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKik7CiAgICByZXBsYWNlX2lmKHYuYmVnaW4oKSwgdi5lbmQoKSwKICAgICAgICAgICAgICAgbm90MShiaW5kMm5kKHB0cl9mdW4oY29tcGFyZSksICJhYmMiKSksICJkZWYiKTsKICA8L3ByZT4KICA8cD5yZXBsYWNlcyBlYWNoIDx0dD5hYmM8L3R0PiB3aXRoIDx0dD5kZWY8L3R0PiBpbiBzZXF1ZW5jZSA8dHQ+djwvdHQ+LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+QWxzbywgcmVtb3ZlIGZvb3Rub3RlIDIxNSBpbiB0aGF0IHNhbWUgcGFyYWdyYXBoLjwvcD4KCjxwPjxpPltDb3BlbmhhZ2VuOiBNaW5vciBjaGFuZ2UgaW4gdGhlIHByb3Bvc2VkIHJlc29sdXRpb24uICBTaW5jZSB0aGlzCmlzc3VlIGRlYWxzIGluIHBhcnQgd2l0aCBDIGFuZCBDKysgbGlua2FnZSwgaXQgd2FzIGJlbGlldmVkIHRvIGJlIHRvbwpjb25mdXNpbmcgZm9yIHRoZSBzdHJpbmdzIGluIHRoZSBleGFtcGxlIHRvIGJlICJDIiBhbmQgIkMrKyIuCl08L2k+PC9wPgoKPHA+PGk+W1JlZG1vbmQ6IE1vcmUgbWlub3IgY2hhbmdlcy4gIEdvdCByaWQgb2YgdGhlIGZvb3Rub3RlICh3aGljaApzZWVtcyB0byBtYWtlIGEgc3dlZXBpbmcgbm9ybWF0aXZlIHJlcXVpcmVtZW50LCBldmVuIHRob3VnaCBmb290bm90ZXMKYXJlbid0IG5vcm1hdGl2ZSksIGFuZCBjaGFuZ2VkIHRoZSBzZW50ZW5jZSBhZnRlciB0aGUgZm9vdG5vdGUgc28gdGhhdAppdCBjb3JyZXNwb25kcyB0byB0aGUgbmV3IGNvZGUgZnJhZ21lbnQuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjI4NSI+PGgzPjI4NS4mbmJzcDttaW5vciBlZGl0b3JpYWwgZXJyb3JzIGluIGZzdHJlYW0gY3RvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy44LjEuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaWZzdHJlYW0uY29ucyI+IFtsaWIuaWZzdHJlYW0uY29uc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMSBEZWMgMjAwMDwvcD4KPHA+MjcuOC4xLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlmc3RyZWFtLmNvbnMiPiBbbGliLmlmc3RyZWFtLmNvbnNdPC9hPiwgcDIsIDI3LjguMS45IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vZnN0cmVhbS5jb25zIj4gW2xpYi5vZnN0cmVhbS5jb25zXTwvYT4sIHAyLCBhbmQKMjcuOC4xLjEyIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtLmNvbnMiPiBbbGliLmZzdHJlYW0uY29uc108L2E+LCBwMiBzYXkgYWJvdXQgdGhlIGVmZmVjdHMgb2YgZWFjaCBjb25zdHJ1Y3RvcjoKPC9wPgoKPHA+Li4uIElmIHRoYXQgZnVuY3Rpb24gcmV0dXJucyBhIG51bGwgcG9pbnRlciwgY2FsbHMKPHR0PnNldHN0YXRlKGZhaWxiaXQpPC90dD4gKHdoaWNoIG1heSB0aHJvdyA8dHQ+aW9zX2Jhc2U6OmZhaWx1cmU8L3R0PikuCjwvcD4KCjxwPlRoZSBwYXJlbnRoZXRpY2FsIG5vdGUgZG9lc24ndCBhcHBseSBzaW5jZSB0aGUgY3RvcnMgY2Fubm90IHRocm93IGFuCmV4Y2VwdGlvbiBkdWUgdG8gdGhlIHJlcXVpcmVtZW50IGluIDI3LjQuNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5iYXNpYy5pb3MuY29ucyI+IFtsaWIuYmFzaWMuaW9zLmNvbnNdPC9hPiwgcDMgCnRoYXQgPHR0PmV4Y2VwdGlvbnMoKTwvdHQ+IGJlIGluaXRpYWxpemVkIHRvIDx0dD5pb3NfYmFzZTo6Z29vZGJpdDwvdHQ+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClN0cmlrZSB0aGUgcGFyZW50aGV0aWNhbCBub3RlIGZyb20gdGhlIEVmZmVjdHMgY2xhdXNlIGluIGVhY2ggb2YgdGhlCnBhcmFncmFwaHMgbWVudGlvbmVkIGFib3ZlLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjg2Ij48aDM+Mjg2LiZuYnNwOyZsdDtjc3RkbGliJmd0OyByZXF1aXJlbWVudHMgbWlzc2luZyBzaXplX3QgdHlwZWRlZjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYy5saWJyYXJ5Ij4gW2xpYi5hbGcuYy5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SnVkeSBXYXJkJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzMwIERlYyAyMDAwPC9wPgo8cD4KVGhlICZsdDtjc3RkbGliJmd0OyBoZWFkZXIgZmlsZSBjb250YWlucyBwcm90b3R5cGVzIGZvciBic2VhcmNoIGFuZApxc29ydCAoQysrIFN0YW5kYXJkIHNlY3Rpb24gMjUuNCBwYXJhZ3JhcGhzIDMgYW5kIDQpIGFuZCBvdGhlcgpwcm90b3R5cGVzIChDKysgU3RhbmRhcmQgc2VjdGlvbiAyMS40IHBhcmFncmFwaCAxIHRhYmxlIDQ5KSB0aGF0CnJlcXVpcmUgdGhlIHR5cGVkZWYgc2l6ZV90LiBZZXQgc2l6ZV90IGlzIG5vdCBsaXN0ZWQgaW4gdGhlCiZsdDtjc3RkbGliJmd0OyBzeW5vcHNpcyB0YWJsZSA3OCBpbiBzZWN0aW9uIDI1LjQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRoZSB0eXBlIHNpemVfdCB0byBUYWJsZSA3OCAoc2VjdGlvbiAyNS40KSBhbmQgYWRkCnRoZSB0eXBlIHNpemVfdCAmbHQ7Y3N0ZGxpYiZndDsgdG8gVGFibGUgOTcgKHNlY3Rpb24gQy4yKS4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+U2luY2Ugc2l6ZV90IGlzIGluICZsdDtzdGRsaWIuaCZndDssIGl0IG11c3QgYWxzbyBiZSBpbiAmbHQ7Y3N0ZGxpYiZndDsuPC9wPgo8aHI+CjxhIG5hbWU9IjI4OCI+PGgzPjI4OC4mbmJzcDsmbHQ7Y2Vycm5vJmd0OyByZXF1aXJlbWVudHMgbWlzc2luZyBtYWNybyBFSUxTRVE8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWRpYWdub3N0aWNzLmh0bWwjbGliLmVycm5vIj4gW2xpYi5lcnJub108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0p1ZHkgV2FyZCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszMCBEZWMgMjAwMDwvcD4KPHA+CklTTy9JRUMgOTg5OToxOTkwL0FtZW5kbWVudDE6MTk5NCBTZWN0aW9uIDQuMyBTdGF0ZXM6ICJUaGUgbGlzdApvZiBtYWNyb3MgZGVmaW5lZCBpbiAmbHQ7ZXJybm8uaCZndDsgaXMgYWRqdXN0ZWQgdG8gaW5jbHVkZSBhIG5ldwptYWNybywgRUlMU0VRIgo8L3A+Cgo8cD4KSVNPL0lFQyAxNDg4MjoxOTk4KEUpIHNlY3Rpb24gMTkuMyBkb2VzIG5vdCByZWZlcgp0byB0aGUgYWJvdmUgYW1lbmRtZW50Lgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpVcGRhdGUgVGFibGUgMjYgKHNlY3Rpb24gMTkuMykgIkhlYWRlciAgJmx0O2NlcnJubyZndDsgc3lub3BzaXMiCmFuZCBUYWJsZSA5NSAoc2VjdGlvbiBDLjIpICJTdGFuZGFyZCBNYWNyb3MiIHRvIGluY2x1ZGUgRUlMU0VRLgo8L3A+Cjxocj4KPGEgbmFtZT0iMjkxIj48aDM+MjkxLiZuYnNwO1VuZGVyc3BlY2lmaWNhdGlvbiBvZiBzZXQgYWxnb3JpdGhtczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zZXQub3BlcmF0aW9ucyI+IFtsaWIuYWxnLnNldC5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAzIEphbiAyMDAxPC9wPgo8cD4KVGhlIHN0YW5kYXJkIGxpYnJhcnkgY29udGFpbnMgZm91ciBhbGdvcml0aG1zIHRoYXQgY29tcHV0ZSBzZXQKb3BlcmF0aW9ucyBvbiBzb3J0ZWQgcmFuZ2VzOiA8dHQ+c2V0X3VuaW9uPC90dD4sIDx0dD5zZXRfaW50ZXJzZWN0aW9uPC90dD4sCjx0dD5zZXRfZGlmZmVyZW5jZTwvdHQ+LCBhbmQgPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+LiAgRWFjaApvZiB0aGVzZSBhbGdvcml0aG1zIHRha2VzIHR3byBzb3J0ZWQgcmFuZ2VzIGFzIGlucHV0cywgYW5kIHdyaXRlcyB0aGUKb3V0cHV0IG9mIHRoZSBhcHByb3ByaWF0ZSBzZXQgb3BlcmF0aW9uIHRvIGFuIG91dHB1dCByYW5nZS4gIFRoZSBlbGVtZW50cwppbiB0aGUgb3V0cHV0IHJhbmdlIGFyZSBzb3J0ZWQuCjwvcD4KCjxwPgpUaGUgb3JkaW5hcnkgbWF0aGVtYXRpY2FsIGRlZmluaXRpb25zIGFyZSBnZW5lcmFsaXplZCBzbyB0aGF0IHRoZXkKYXBwbHkgdG8gcmFuZ2VzIGNvbnRhaW5pbmcgbXVsdGlwbGUgY29waWVzIG9mIGEgZ2l2ZW4gZWxlbWVudC4gIFR3bwplbGVtZW50cyBhcmUgY29uc2lkZXJlZCB0byBiZSAidGhlIHNhbWUiIGlmLCBhY2NvcmRpbmcgdG8gYW4Kb3JkZXJpbmcgcmVsYXRpb24gcHJvdmlkZWQgYnkgdGhlIHVzZXIsIG5laXRoZXIgb25lIGlzIGxlc3MgdGhhbiB0aGUKb3RoZXIuICBTbywgZm9yIGV4YW1wbGUsIGlmIG9uZSBpbnB1dCByYW5nZSBjb250YWlucyBmaXZlIGNvcGllcyBvZiBhbgplbGVtZW50IGFuZCBhbm90aGVyIGNvbnRhaW5zIHRocmVlLCB0aGUgb3V0cHV0IHJhbmdlIG9mIDx0dD5zZXRfdW5pb248L3R0Pgp3aWxsIGNvbnRhaW4gZml2ZSBjb3BpZXMsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9pbnRlcnNlY3Rpb248L3R0PiB3aWxsIGNvbnRhaW4gdGhyZWUsIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9kaWZmZXJlbmNlPC90dD4gd2lsbCBjb250YWluIHR3bywgYW5kIHRoZSBvdXRwdXQgcmFuZ2Ugb2YKPHR0PnNldF9zeW1tZXRyaWNfZGlmZmVyZW5jZTwvdHQ+IHdpbGwgY29udGFpbiB0d28uCjwvcD4KCjxwPgpCZWNhdXNlIHR3byBlbGVtZW50cyBjYW4gYmUgInRoZSBzYW1lIiBmb3IgdGhlIHB1cnBvc2VzCm9mIHRoZXNlIHNldCBhbGdvcml0aG1zLCB3aXRob3V0IGJlaW5nIGlkZW50aWNhbCBpbiBvdGhlciByZXNwZWN0cwooY29uc2lkZXIsIGZvciBleGFtcGxlLCBzdHJpbmdzIHVuZGVyIGNhc2UtaW5zZW5zaXRpdmUgY29tcGFyaXNvbiksCnRoaXMgcmFpc2VzIGEgbnVtYmVyIG9mIHVuYW5zd2VyZWQgcXVlc3Rpb25zOgo8L3A+Cgo8dWw+CjxsaT5JZiB3ZSdyZSBjb3B5aW5nIGFuIGVsZW1lbnQgdGhhdCdzIHByZXNlbnQgaW4gYm90aCBvZiB0aGUKaW5wdXQgcmFuZ2VzLCB3aGljaCBvbmUgZG8gd2UgY29weSBpdCBmcm9tPzwvbGk+CjxsaT5JZiB0aGVyZSBhcmUgPGk+bjwvaT4gY29waWVzIG9mIGFuIGVsZW1lbnQgaW4gdGhlIHJlbGV2YW50CmlucHV0IHJhbmdlLCBhbmQgdGhlIG91dHB1dCByYW5nZSB3aWxsIGNvbnRhaW4gZmV3ZXIgY29waWVzIChzYXkKPGk+bTwvaT4pIHdoaWNoIG9uZXMgZG8gd2UgY2hvb3NlPyAgVGhlIGZpcnN0IDxpPm08L2k+LCBvciB0aGUgbGFzdAo8aT5tPC9pPiwgb3Igc29tZXRoaW5nIGVsc2U/PC9saT4KPGxpPkFyZSB0aGVzZSBvcGVyYXRpb25zIHN0YWJsZT8gIFRoYXQgaXMsIGRvZXMgYSBydW4gb2YgZXF1aXZhbGVudAplbGVtZW50cyBhcHBlYXIgaW4gdGhlIG91dHB1dCByYW5nZSBpbiB0aGUgc2FtZSBvcmRlciBhcyBhcyBpdAphcHBlYXJlZCBpbiB0aGUgaW5wdXQgcmFuZ2Uocyk/PC9saT4KPC91bD4KCjxwPgpUaGUgc3RhbmRhcmQgc2hvdWxkIGVpdGhlciBhbnN3ZXIgdGhlc2UgcXVlc3Rpb25zLCBvciBleHBsaWNpdGx5CnNheSB0aGF0IHRoZSBhbnN3ZXJzIGFyZSB1bnNwZWNpZmllZC4gIEkgcHJlZmVyIHRoZSBmb3JtZXIgb3B0aW9uLApzaW5jZSwgYXMgZmFyIGFzIEkga25vdywgYWxsIGV4aXN0aW5nIGltcGxlbWVudGF0aW9ucyBiZWhhdmUgdGhlCnNhbWUgd2F5Lgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIDI1LjMuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LnVuaW9uIj4gW2xpYi5zZXQudW5pb25dPC9hPiBwYXJhZ3JhcGggNTo8L3A+CjxibG9ja3F1b3RlPgpJZiBbZmlyc3QxLCBsYXN0MSkgY29udGFpbnMgPGk+bTwvaT4gZWxlbWVudHMgdGhhdCBhcmUgZXF1aXZhbGVudCB0bwplYWNoIG90aGVyIGFuZCBbZmlyc3QyLCBsYXN0MikgY29udGFpbnMgPGk+bjwvaT4gZWxlbWVudHMgdGhhdCBhcmUKZXF1aXZhbGVudCB0byB0aGVtLCB0aGVuIG1heCg8aT5tPC9pPiwgPGk+bjwvaT4pIG9mIHRoZXNlIGVsZW1lbnRzCndpbGwgYmUgY29waWVkIHRvIHRoZSBvdXRwdXQgcmFuZ2U6IGFsbCA8aT5tPC9pPiBvZiB0aGVzZSBlbGVtZW50cwpmcm9tIFtmaXJzdDEsIGxhc3QxKSwgYW5kIHRoZSBsYXN0IG1heCg8aT5uLW08L2k+LCAwKSBvZiB0aGVtIGZyb20KW2ZpcnN0MiwgbGFzdDIpLCBpbiB0aGF0IG9yZGVyLgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyB0byB0aGUgZW5kIG9mIDI1LjMuNS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LmludGVyc2VjdGlvbiI+IFtsaWIuc2V0LmludGVyc2VjdGlvbl08L2E+IHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvIGVhY2gKb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZSBmaXJzdCBtaW4oPGk+bTwvaT4sIDxpPm48L2k+KSBvZiB0aG9zZSAKZWxlbWVudHMgZnJvbSBbZmlyc3QxLCBsYXN0MSkgYXJlIGNvcGllZCB0byB0aGUgb3V0cHV0IHJhbmdlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgYSBuZXcgcGFyYWdyYXBoLCA8Yj5Ob3RlczwvYj4sIGFmdGVyIDI1LjMuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuc2V0LmRpZmZlcmVuY2UiPiBbbGliLnNldC5kaWZmZXJlbmNlXTwvYT4KcGFyYWdyYXBoIDQ6PC9wPgo8YmxvY2txdW90ZT4KSWYgW2ZpcnN0MSwgbGFzdDEpIGNvbnRhaW5zIDxpPm08L2k+IGVsZW1lbnRzIHRoYXQgYXJlIGVxdWl2YWxlbnQgdG8gZWFjaApvdGhlciBhbmQgW2ZpcnN0MiwgbGFzdDIpIGNvbnRhaW5zIDxpPm48L2k+IGVsZW1lbnRzIHRoYXQgYXJlCmVxdWl2YWxlbnQgdG8gdGhlbSwgdGhlIGxhc3QgbWF4KDxpPm0tbjwvaT4sIDApIGVsZW1lbnRzIGZyb20gCltmaXJzdDEsIGxhc3QxKSBhcmUgY29waWVkIHRvIHRoZSBvdXRwdXQgcmFuZ2UuCjwvYmxvY2txdW90ZT4KCjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGgsIDxiPk5vdGVzPC9iPiwgYWZ0ZXIgMjUuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5zZXQuc3ltbWV0cmljLmRpZmZlcmVuY2UiPiBbbGliLnNldC5zeW1tZXRyaWMuZGlmZmVyZW5jZV08L2E+CnBhcmFncmFwaCA0OjwvcD4KPGJsb2NrcXVvdGU+CklmIFtmaXJzdDEsIGxhc3QxKSBjb250YWlucyA8aT5tPC9pPiBlbGVtZW50cyB0aGF0IGFyZSBlcXVpdmFsZW50IHRvCmVhY2ggb3RoZXIgYW5kIFtmaXJzdDIsIGxhc3QyKSBjb250YWlucyA8aT5uPC9pPiBlbGVtZW50cyB0aGF0IGFyZQplcXVpdmFsZW50IHRvIHRoZW0sIHRoZW4gfDxpPm0gLSBuPC9pPnwgb2YgdGhvc2UgZWxlbWVudHMgd2lsbCBiZQpjb3BpZWQgdG8gdGhlIG91dHB1dCByYW5nZTogdGhlIGxhc3QgPGk+bSAtIG48L2k+IG9mIHRoZXNlIGVsZW1lbnRzCmZyb20gW2ZpcnN0MSwgbGFzdDEpIGlmIDxpPm08L2k+ICZndDsgPGk+bjwvaT4sIGFuZCB0aGUgbGFzdCA8aT5uIC0KbTwvaT4gb2YgdGhlc2UgZWxlbWVudHMgZnJvbSBbZmlyc3QyLCBsYXN0MikgaWYgPGk+bTwvaT4gJmx0OyA8aT5uPC9pPi4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1NhbnRhIENydXo6IGl0J3MgYmVsaWV2ZWQgdGhhdCB0aGlzIGxhbmd1YWdlIGlzIGNsZWFyZXIgdGhhbgogIHdoYXQncyBpbiB0aGUgU3RhbmRhcmQuICBIb3dldmVyLCBpdCdzIGFsc28gYmVsaWV2ZWQgdGhhdCB0aGUKICBTdGFuZGFyZCBtYXkgYWxyZWFkeSBtYWtlIHRoZXNlIGd1YXJhbnRlZXMgKGFsdGhvdWdoIG5vdCBxdWl0ZSBpbgogIHRoZXNlIHdvcmRzKS4gIEJpbGwgYW5kIEhvd2FyZCB3aWxsIGNoZWNrIGFuZCBzZWUgd2hldGhlciB0aGV5IHRoaW5rCiAgdGhhdCBzb21lIG9yIGFsbCBvZiB0aGVzZSBjaGFuZ2VzIG1heSBiZSByZWR1bmRhbnQuICBJZiBzbywgd2UgbWF5CiAgY2xvc2UgdGhpcyBpc3N1ZSBhcyBOQUQuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rm9yIHNpbXBsZSBjYXNlcywgdGhlc2UgZGVzY3JpcHRpb25zIGFyZSBlcXVpdmFsZW50IHRvIHdoYXQncwogIGFscmVhZHkgaW4gdGhlIFN0YW5kYXJkLiAgRm9yIG1vcmUgY29tcGxpY2F0ZWQgY2FzZXMsIHRoZXkgZGVzY3JpYmUKICB0aGUgYmVoYXZpb3Igb2YgZXhpc3RpbmcgaW1wbGVtZW50YXRpb25zLjwvcD4KPGhyPgo8YSBuYW1lPSIyOTIiPjxoMz4yOTIuJm5ic3A7ZWZmZWN0cyBvZiBhLmNvcHlmbXQgKGEpPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmJhc2ljLmlvcy5tZW1iZXJzIj4gW2xpYi5iYXNpYy5pb3MubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDswNSBKYW4gMjAwMTwvcD4KPHA+VGhlIEVmZmVjdHMgY2xhdXNlIG9mIHRoZSBtZW1iZXIgZnVuY3Rpb24gPHR0PmNvcHlmbXQoKTwvdHQ+IGluCjI3LjQuNC4yLCBwMTUgZG9lc24ndCBjb25zaWRlciB0aGUgY2FzZSB3aGVyZSB0aGUgbGVmdC1oYW5kIHNpZGUKYXJndW1lbnQgaXMgaWRlbnRpY2FsIHRvIHRoZSBhcmd1bWVudCBvbiB0aGUgcmlnaHQtaGFuZCBzaWRlLCB0aGF0IGlzCjx0dD4odGhpcyA9PSAmYW1wO3Jocyk8L3R0Pi4gIElmIHRoZSB0d28gYXJndW1lbnRzIGFyZSBpZGVudGljYWwgdGhlcmUKaXMgbm8gbmVlZCB0byBjb3B5IGFueSBvZiB0aGUgZGF0YSBtZW1iZXJzIG9yIGNhbGwgYW55IGNhbGxiYWNrcwpyZWdpc3RlcmVkIHdpdGggPHR0PnJlZ2lzdGVyX2NhbGxiYWNrKCk8L3R0Pi4gIEFsc28sIGFzIEhvd2FyZCBIaW5uYW50CnBvaW50cyBvdXQgaW4gbWVzc2FnZSBjKytzdGQtbGliLTgxNDkgaXQgYXBwZWFycyB0byBiZSBpbmNvcnJlY3QgdG8KYWxsb3cgdGhlIG9iamVjdCB0byBmaXJlIDx0dD5lcmFzZV9ldmVudDwvdHQ+IGZvbGxvd2VkIGJ5Cjx0dD5jb3B5Zm10X2V2ZW50PC90dD4gc2luY2UgdGhlIGNhbGxiYWNrIGhhbmRsaW5nIHRoZSBsYXR0ZXIgZXZlbnQKbWF5IGluYWR2ZXJ0ZW50bHkgYXR0ZW1wdCB0byBhY2Nlc3MgbWVtb3J5IGZyZWVkIGJ5IHRoZSBmb3JtZXIuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIEVmZmVjdHMgY2xhdXNlIGluIDI3LjQuNC4yLCBwMTUgZnJvbTwvcD4KCjxibG9ja3F1b3RlPgo8Yj4tMTUtIEVmZmVjdHM6PC9iPkFzc2lnbnMgdG8gdGhlIG1lbWJlciBvYmplY3RzIG9mIDx0dD4qdGhpczwvdHQ+CnRoZSBjb3JyZXNwb25kaW5nIG1lbWJlciBvYmplY3RzIG9mIDx0dD5yaHM8L3R0PiwgZXhjZXB0IHRoYXQuLi4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KPGI+LTE1LSBFZmZlY3RzOjwvYj5JZiA8dHQ+KHRoaXMgPT0gJmFtcDtyaHMpPC90dD4gZG9lcyBub3RoaW5nLiBPdGhlcndpc2UKYXNzaWducyB0byB0aGUgbWVtYmVyIG9iamVjdHMgb2YgPHR0Pip0aGlzPC90dD4gdGhlIGNvcnJlc3BvbmRpbmcgbWVtYmVyCm9iamVjdHMgb2YgPHR0PnJoczwvdHQ+LCBleGNlcHQgdGhhdC4uLgo8L2Jsb2NrcXVvdGU+Cjxocj4KPGEgbmFtZT0iMjk1Ij48aDM+Mjk1LiZuYnNwO0lzIGFicyBkZWZpbmVkIGluICZsdDtjbWF0aCZndDs/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jLm1hdGgiPiBbbGliLmMubWF0aF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0plbnMgTWF1cmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIEphbiAyMDAxPC9wPgo8cD4KVGFibGUgODAgbGlzdHMgdGhlIGNvbnRlbnRzIG9mIHRoZSAmbHQ7Y21hdGgmZ3Q7IGhlYWRlci4gIEl0IGRvZXMgbm90Cmxpc3QgPHR0PmFicygpPC90dD4uICBIb3dldmVyLCAyNi41LCBwYXJhZ3JhcGggNiwgd2hpY2ggbGlzdHMgYWRkZWQgCnNpZ25hdHVyZXMgcHJlc2VudCBpbiAmbHQ7Y21hdGgmZ3Q7LCBkb2VzIHNheSB0aGF0IHNldmVyYWwgb3ZlcmxvYWRzCm9mIDx0dD5hYnMoKTwvdHQ+IHNob3VsZCBiZSBkZWZpbmVkIGluICZsdDtjbWF0aCZndDsuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIDx0dD5hYnM8L3R0PiB0byBUYWJsZSA4MC4gIEFsc28sIHJlbW92ZSB0aGUgcGFyZW50aGV0aWNhbCBsaXN0Cm9mIGZ1bmN0aW9ucyAiKGFicygpLCBkaXYoKSwgcmFuZCgpLCBzcmFuZCgpKSIgZnJvbSAyNi41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLW51bWVyaWNzLmh0bWwjbGliLmMubWF0aCI+IFtsaWIuYy5tYXRoXTwvYT4sCnBhcmFncmFwaCAxLgo8L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogTW9kaWZpZWQgcHJvcG9zZWQgcmVzb2x1dGlvbiBzbyB0aGF0IGl0IGFsc28gZ2V0cwpyaWQgb2YgdGhhdCB2ZXN0aWdpYWwgbGlzdCBvZiBmdW5jdGlvbnMgaW4gcGFyYWdyYXBoIDEuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QWxsIHRoaXMgRFIgZG9lcyBpcyBmaXggYSB0eXBvOyBpdCdzIHVuY29udHJvdmVyc2lhbC4gIEEgCnNlcGFyYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UncmUgZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIGluIApwdXR0aW5nIHNvbWUgb3ZlcmxvYWRzIGluICZsdDtjbWF0aCZndDsgdGhhdCB3ZSBhcmVuJ3QgYWxzbyAKcHV0dGluZyBpbiAmbHQ7Y3N0ZGxpYiZndDsuICBUaGF0J3MgaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjMzIzIj4zMjM8L2E+LjwvcD4KPGhyPgo8YSBuYW1lPSIyOTciPjxoMz4yOTcuJm5ic3A7Y29uc3RfbWVtX2Z1bl90Jmx0OyZndDs6OmFyZ3VtZW50X3R5cGUgc2hvdWxkIGJlIGNvbnN0IFQqPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuMy44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5tZW1iZXIucG9pbnRlci5hZGFwdG9ycyI+IFtsaWIubWVtYmVyLnBvaW50ZXIuYWRhcHRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBKYW4gMjAwMTwvcD4KPHA+VGhlIGNsYXNzIHRlbXBsYXRlcyA8dHQ+Y29uc3RfbWVtX2Z1bl90PC90dD4gaW4gMjAuMy44LCBwOCBhbmQKPHR0PmNvbnN0X21lbV9mdW4xX3Q8L3R0PgppbiAyMC4zLjgsIHA5IGRlcml2ZSBmcm9tIDx0dD51bmFyeV9mdW5jdGlvbiZsdDtUKiwgUyZndDs8L3R0PiwgYW5kCjx0dD5iaW5hcnlfZnVuY3Rpb24mbHQ7VCosCkEsIFMmZ3Q7PC90dD4sIHJlc3BlY3RpdmVseS4gQ29uc2VxdWVudGx5LCB0aGVpciA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+LCBhbmQKPHR0PmZpcnN0X2FyZ3VtZW50X3R5cGU8L3R0PgptZW1iZXJzLCByZXNwZWN0aXZlbHksIGFyZSBib3RoIGRlZmluZWQgdG8gYmUgPHR0PlQqPC90dD4gKG5vbi1jb25zdCkuCkhvd2V2ZXIsIHRoZWlyIGZ1bmN0aW9uIGNhbGwgbWVtYmVyIG9wZXJhdG9yIHRha2VzIGEgPHR0PmNvbnN0IFQqPC90dD4KYXJndW1lbnQuIEl0IGlzIG15IG9waW5pb24gdGhhdCA8dHQ+YXJndW1lbnRfdHlwZTwvdHQ+IHNob3VsZCBiZSA8dHQ+Y29uc3QKVCo8L3R0PiBpbnN0ZWFkLCBzbyB0aGF0IG9uZSBjYW4gZWFzaWx5IHJlZmVyIHRvIGl0IGluIGdlbmVyaWMgY29kZS4gVGhlCmV4YW1wbGUgYmVsb3cgZGVyaXZlZCBmcm9tIGV4aXN0aW5nIGNvZGUgZmFpbHMgdG8gY29tcGlsZSBkdWUgdG8gdGhlCmRpc2NyZXBhbmN5Ogo8L3A+Cgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFQmZ3Q7PC90dD4KPGJyPjx0dD52b2lkIGZvbyAodHlwZW5hbWUgVDo6YXJndW1lbnRfdHlwZSBhcmcpJm5ic3A7Jm5ic3A7IC8vICMxPC90dD4KPGJyPjx0dD57PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgdHlwZW5hbWUgVDo6cmVzdWx0X3R5cGUgKFQ6OipwZikgKHR5cGVuYW1lClQ6OmFyZ3VtZW50X3R5cGUpCmNvbnN0ID0mbmJzcDsmbmJzcDsgLy8gIzI8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyAmYW1wO1Q6Om9wZXJhdG9yKCk7PC90dD4KPGJyPjx0dD59PC90dD4KPC9wPgoKPHA+PHR0PnN0cnVjdCBYIHsgLyogLi4uICovIH07PC90dD48L3A+Cgo8cD48dHQ+aW50IG1haW4gKCk8L3R0Pgo8YnI+PHR0Pns8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyBjb25zdCBYIHg7PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsgZm9vJmx0O3N0ZDo6Y29uc3RfbWVtX2Z1bl90Jmx0O3ZvaWQsIFgmZ3Q7CiZndDsoJmFtcDt4KTsmbmJzcDsmbmJzcDsKLy8gIzM8L3R0Pgo8YnI+PHR0Pn08L3R0Pgo8L3A+Cgo8cD4jMSA8dHQ+Zm9vKCk8L3R0PiB0YWtlcyBhIHBsYWluIHVucXVhbGlmaWVkIDx0dD5YKjwvdHQ+IGFzIGFuIGFyZ3VtZW50Cjxicj4jMiB0aGUgdHlwZSBvZiB0aGUgcG9pbnRlciBpcyBpbmNvbXBhdGlibGUgd2l0aCB0aGUgdHlwZSBvZiB0aGUgbWVtYmVyCmZ1bmN0aW9uCjxicj4jMyB0aGUgYWRkcmVzcyBvZiBhIGNvbnN0YW50IGJlaW5nIHBhc3NlZCB0byBhIGZ1bmN0aW9uIHRha2luZyBhIG5vbi1jb25zdAo8dHQ+WCo8L3R0Pgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgdG9wIHBvcnRpb24gb2YgdGhlIGRlZmluaXRpb24gb2YgdGhlIGNsYXNzIHRlbXBsYXRlCmNvbnN0X21lbV9mdW5fdCBpbiAyMC4zLjgsIHA4CjwvcD4KPHA+PHR0PnRlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBUJmd0OyBjbGFzcyBjb25zdF9tZW1fZnVuX3Q8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA6IHB1YmxpYwp1bmFyeV9mdW5jdGlvbiZsdDtUKiwgUyZndDsgezwvdHQ+CjwvcD4KPHA+d2l0aDwvcD4KPHA+PHR0PnRlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBUJmd0OyBjbGFzcyBjb25zdF9tZW1fZnVuX3Q8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA6IHB1YmxpYwp1bmFyeV9mdW5jdGlvbiZsdDs8Yj5jb25zdDwvYj4gVCosIFMmZ3Q7IHs8L3R0Pgo8L3A+CjxwPkFsc28gcmVwbGFjZSB0aGUgdG9wIHBvcnRpb24gb2YgdGhlIGRlZmluaXRpb24gb2YgdGhlIGNsYXNzIHRlbXBsYXRlCmNvbnN0X21lbV9mdW4xX3QgaW4gMjAuMy44LCBwOTwvcD4KPHA+PHR0PnRlbXBsYXRlICZsdDtjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBBJmd0OyBjbGFzcyBjb25zdF9tZW1fZnVuMV90PC90dD4KPGJyPjx0dD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsgOiBwdWJsaWMKYmluYXJ5X2Z1bmN0aW9uJmx0O1QqLCBBLCBTJmd0OyB7PC90dD4KPC9wPgo8cD53aXRoPC9wPgo8cD48dHQ+dGVtcGxhdGUgJmx0O2NsYXNzIFMsIGNsYXNzIFQsIGNsYXNzIEEmZ3Q7IGNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8L3R0Pgo8YnI+PHR0PiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyA6IHB1YmxpYwpiaW5hcnlfZnVuY3Rpb24mbHQ7PGI+Y29uc3Q8L2I+IFQqLCBBLCBTJmd0OyB7PC90dD4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpcyBzaW1wbHkgYSBjb250cmFkaWN0aW9uOiB0aGUgPHR0PmFyZ3VtZW50X3R5cGU8L3R0PiB0eXBlZGVmLAphbmQgdGhlIGFyZ3VtZW50IHR5cGUgaXRzZWxmLCBhcmUgbm90IHRoZSBzYW1lLjwvcD4KPGhyPgo8YSBuYW1lPSIyOTgiPjxoMz4yOTguJm5ic3A7OjpvcGVyYXRvciBkZWxldGVbXSByZXF1aXJlbWVudCBpbmNvcnJlY3QvaW5zdWZmaWNpZW50PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLmFycmF5Ij4gW2xpYi5uZXcuZGVsZXRlLmFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7Sm9obiBBLiBQZWRyZXR0aSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMCBKYW4gMjAwMTwvcD4KPHA+ClRoZSBkZWZhdWx0IGJlaGF2aW9yIG9mIDx0dD5vcGVyYXRvciBkZWxldGVbXTwvdHQ+IGRlc2NyaWJlZCBpbiAxOC40LjEuMiwgcDEyIC0KbmFtZWx5IHRoYXQgZm9yIG5vbi1udWxsIHZhbHVlIG9mIDxpPnB0cjwvaT4sIHRoZSBvcGVyYXRvciByZWNsYWltcyBzdG9yYWdlCmFsbG9jYXRlZCBieSB0aGUgZWFybGllciBjYWxsIHRvIHRoZSBkZWZhdWx0IDx0dD5vcGVyYXRvciBuZXdbXTwvdHQ+IC0gaXMgbm90CmNvcnJlY3QgaW4gYWxsIGNhc2VzLiBTaW5jZSB0aGUgc3BlY2lmaWVkIDx0dD5vcGVyYXRvciBuZXdbXTwvdHQ+IGRlZmF1bHQKYmVoYXZpb3IgaXMgdG8gY2FsbCA8dHQ+b3BlcmF0b3IgbmV3PC90dD4gKDE4LjQuMS4yLCBwNCwgcDgpLCB3aGljaCBjYW4gYmUKcmVwbGFjZWQsIGFsb25nIHdpdGggPHR0Pm9wZXJhdG9yIGRlbGV0ZTwvdHQ+LCBieSB0aGUgdXNlciwgdG8gaW1wbGVtZW50IHRoZWlyCm93biBtZW1vcnkgbWFuYWdlbWVudCwgdGhlIHNwZWNpZmllZCBkZWZhdWx0IGJlaGF2aW9yIG9mPHR0PiBvcGVyYXRvcgpkZWxldGVbXTwvdHQ+IG11c3QgYmUgdG8gY2FsbCA8dHQ+b3BlcmF0b3IgZGVsZXRlPC90dD4uCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMTguNC4xLjIsIHAxMiBmcm9tPC9wPgo8YmxvY2txdW90ZT4KPGI+LTEyLTwvYj4gPGI+RGVmYXVsdCBiZWhhdmlvcjo8L2I+Cjx1bD4KPGxpPgpGb3IgYSBudWxsIHZhbHVlIG9mIDxpPjx0dD5wdHI8L3R0PjwvaT4gLCBkb2VzIG5vdGhpbmcuCjwvbGk+CjxsaT4KQW55IG90aGVyIHZhbHVlIG9mIDxpPjx0dD5wdHI8L3R0PjwvaT4gc2hhbGwgYmUgYSB2YWx1ZSByZXR1cm5lZAplYXJsaWVyIGJ5IGEgY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpPC90dD4uCltGb290bm90ZTogVGhlIHZhbHVlIG11c3Qgbm90IGhhdmUgYmVlbiBpbnZhbGlkYXRlZCBieSBhbiBpbnRlcnZlbmluZwpjYWxsIHRvIDx0dD5vcGVyYXRvciBkZWxldGVbXSh2b2lkKik8L3R0PiAoMTcuNC4zLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVzLm9uLmFyZ3VtZW50cyI+IFtsaWIucmVzLm9uLmFyZ3VtZW50c108L2E+KS4KLS0tIGVuZCBmb290bm90ZV0KRm9yIHN1Y2ggYSBub24tbnVsbCB2YWx1ZSBvZiA8aT48dHQ+cHRyPC90dD48L2k+ICwgcmVjbGFpbXMgc3RvcmFnZQphbGxvY2F0ZWQgYnkgdGhlIGVhcmxpZXIgY2FsbCB0byB0aGUgZGVmYXVsdCA8dHQ+b3BlcmF0b3IgbmV3W108L3R0Pi4KPC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KPGI+LTEyLTwvYj4gPGI+RGVmYXVsdCBiZWhhdmlvcjogPC9iPkNhbGxzIDx0dD5vcGVyYXRvcgpkZWxldGUoPC90dD48aT5wdHI8L2k+KQpvciA8dHQ+b3BlcmF0b3IgZGVsZXRlKDxpPnB0cjwvaT4sIHN0ZDo6bm90aHJvdyk8L3R0PiByZXNwZWN0aXZlbHkuCjwvYmxvY2txdW90ZT4KPHA+YW5kIGV4cHVuZ2UgcGFyYWdyYXBoIDEzLjwvcD4KPGhyPgo8YSBuYW1lPSIzMDAiPjxoMz4zMDAuJm5ic3A7bGlzdDo6bWVyZ2UoKSBzcGVjaWZpY2F0aW9uIGluY29tcGxldGU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3Qub3BzIj4gW2xpYi5saXN0Lm9wc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0pvaG4gUGVkcmV0dGkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSmFuIDIwMDE8L3A+CjxwPgpUaGUgIkVmZmVjdHMiIGNsYXVzZSBmb3IgbGlzdDo6bWVyZ2UoKSAoMjMuMi4yLjQsIHAyMykKYXBwZWFycyB0byBiZSBpbmNvbXBsZXRlOiBpdCBkb2Vzbid0IGNvdmVyIHRoZSBjYXNlIHdoZXJlIHRoZSBhcmd1bWVudApsaXN0IGlzIGlkZW50aWNhbCB0byAqdGhpcyAoaS5lLiwgdGhpcyA9PSAmYW1wO3gpLiBUaGUgcmVxdWlyZW1lbnQgaW4gdGhlCm5vdGUgaW4gcDI0IChiZWxvdykgaXMgdGhhdCB4IGJlIGVtcHR5IGFmdGVyIHRoZSBtZXJnZSB3aGljaCBpcyBzdXJlbHkKdW5pbnRlbmRlZCBpbiB0aGlzIGNhc2UuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3Qub3BzIj4gW2xpYi5saXN0Lm9wc108L2E+LCByZXBsYWNlIHBhcmFncmFwcyAyMy0yNSB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgoyMyBFZmZlY3RzOiBpZiAoJmFtcDt4ID09IHRoaXMpIGRvZXMgbm90aGluZzsgb3RoZXJ3aXNlLCBtZXJnZXMgdGhlIHR3bwpzb3J0ZWQgcmFuZ2VzIFtiZWdpbigpLCBlbmQoKSkgYW5kIFt4LmJlZ2luKCksIHguZW5kKCkpLiAgVGhlIHJlc3VsdAppcyBhIHJhbmdlIGluIHdoaWNoIHRoZSBlbGVtZW50cyB3aWxsIGJlIHNvcnRlZCBpbiBub24tZGVjcmVhc2luZwpvcmRlciBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyaW5nIGRlZmluZWQgYnkgY29tcDsgdGhhdCBpcywgZm9yIGV2ZXJ5Cml0ZXJhdG9yIGkgaW4gdGhlIHJhbmdlIG90aGVyIHRoYW4gdGhlIGZpcnN0LCB0aGUgY29uZGl0aW9uIGNvbXAoKmksCiooaSAtIDEpKSB3aWxsIGJlIGZhbHNlLgo8L3A+Cgo8cD4KMjQgTm90ZXM6IFN0YWJsZTogaWYgKCZhbXA7eCAhPSB0aGlzKSwgdGhlbiBmb3IgZXF1aXZhbGVudCBlbGVtZW50cyBpbiB0aGUKdHdvIG9yaWdpbmFsIHJhbmdlcywgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFtiZWdpbigpLAplbmQoKSkgYWx3YXlzIHByZWNlZGUgdGhlIGVsZW1lbnRzIGZyb20gdGhlIG9yaWdpbmFsIHJhbmdlIFt4LmJlZ2luKCksCnguZW5kKCkpLiAgSWYgKCZhbXA7eCAhPSB0aGlzKSB0aGUgcmFuZ2UgW3guYmVnaW4oKSwgeC5lbmQoKSkgaXMgZW1wdHkKYWZ0ZXIgdGhlIG1lcmdlLgo8L3A+Cgo8cD4KMjUgQ29tcGxleGl0eTogQXQgbW9zdCBzaXplKCkgKyB4LnNpemUoKSAtIDEgYXBwbGljYXRpb25zIG9mIGNvbXAgaWYKKCZhbXA7eCAhICA9IHRoaXMpOyBvdGhlcndpc2UsIG5vIGFwcGxpY2F0aW9ucyBvZiBjb21wIGFyZSBwZXJmb3JtZWQuICBJZgphbiBleGNlcHRpb24gaXMgdGhyb3duIG90aGVyIHRoYW4gYnkgYSBjb21wYXJpc29uIHRoZXJlIGFyZSBubwplZmZlY3RzLgo8L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bQ29wZW5oYWdlbjogVGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gZGlkIG5vdCBmaXggYWxsIG9mCnRoZSBwcm9ibGVtcyBpbiAyMy4yLjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3Qub3BzIj4gW2xpYi5saXN0Lm9wc108L2E+LCBwMjItMjUuICBUaHJlZSBkaWZmZXJlbnQKcGFyYWdyYXBocyAoMjMsIDI0LCAyNSkgZGVzY3JpYmUgdGhlIGVmZmVjdHMgb2YgPHR0Pm1lcmdlPC90dD4uCkNoYW5naW5nIHAyMywgd2l0aG91dCBjaGFuZ2luZyB0aGUgb3RoZXIgdHdvLCBhcHBlYXJzIHRvIGludHJvZHVjZQpjb250cmFkaWN0aW9ucy4gIEFkZGl0aW9uYWxseSwgIm1lcmdlcyB0aGUgYXJndW1lbnQgbGlzdCBpbnRvIHRoZQpsaXN0IiBpcyBleGNlc3NpdmVseSB2YWd1ZS5dPC9pPjwvcD4KCjxwPjxpPltQb3N0LUN1cmHnYW86IFJvYmVydCBLbGFyZXIgcHJvdmlkZWQgbmV3IHdvcmRpbmcuXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjMwMSI+PGgzPjMwMS4mbmJzcDtiYXNpY19zdHJpbmcgdGVtcGxhdGUgY3RvciBlZmZlY3RzIGNsYXVzZSBvbWl0cyBhbGxvY2F0b3IgYXJndW1lbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmcuY29ucyI+IFtsaWIuc3RyaW5nLmNvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgSmFuIDIwMDE8L3A+CjxwPgpUaGUgZWZmZWN0cyBjbGF1c2UgZm9yIHRoZSBiYXNpY19zdHJpbmcgdGVtcGxhdGUgY3RvciBpbiAyMS4zLjEsIHAxNQpsZWF2ZXMgb3V0IHRoZSB0aGlyZCBhcmd1bWVudCBvZiB0eXBlIEFsbG9jYXRvci4gSSBiZWxpZXZlIHRoaXMgdG8gYmUKYSBtaXN0YWtlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZTwvcD4KCjxibG9ja3F1b3RlPgogICAgPHA+PGI+LTE1LSBFZmZlY3RzOjwvYj4gSWYgPGk+PHR0PklucHV0SXRlcmF0b3I8L3R0PjwvaT4gaXMgYW4gaW50ZWdyYWwKICAgIHR5cGUsIGVxdWl2YWxlbnQgdG88L3A+CgogICAgPGJsb2NrcXVvdGU+PHR0PmJhc2ljX3N0cmluZyhzdGF0aWNfY2FzdCZsdDtzaXplX3R5cGUmZ3Q7KGJlZ2luKSwKICAgIHN0YXRpY19jYXN0Jmx0O3ZhbHVlX3R5cGUmZ3Q7KGVuZCkpPC90dD48L2Jsb2NrcXVvdGU+CjwvYmxvY2txdW90ZT4KCjxwPndpdGg8L3A+Cgo8YmxvY2txdW90ZT4KICAgIDxwPjxiPi0xNS0gRWZmZWN0czo8L2I+IElmIDxpPjx0dD5JbnB1dEl0ZXJhdG9yPC90dD48L2k+IGlzIGFuIGludGVncmFsCiAgICB0eXBlLCBlcXVpdmFsZW50IHRvPC9wPgoKICAgIDxibG9ja3F1b3RlPjx0dD5iYXNpY19zdHJpbmcoc3RhdGljX2Nhc3QmbHQ7c2l6ZV90eXBlJmd0OyhiZWdpbiksCiAgICBzdGF0aWNfY2FzdCZsdDt2YWx1ZV90eXBlJmd0OyhlbmQpLCA8Yj5hPC9iPik8L3R0PjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjMwMyI+PGgzPjMwMy4mbmJzcDtCaXRzZXQgaW5wdXQgb3BlcmF0b3IgdW5kZXJzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4zLjUuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmJpdHNldC5vcGVyYXRvcnMiPiBbbGliLmJpdHNldC5vcGVyYXRvcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXR0IEF1c3Rlcm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NSBGZWIgMjAwMTwvcD4KPHA+CkluIDIzLjMuNS4zLCB3ZSBhcmUgdG9sZCB0aGF0IDx0dD5iaXRzZXQ8L3R0PidzIGlucHV0IG9wZXJhdG9yCiJFeHRyYWN0cyB1cCB0byA8aT5OPC9pPiAoc2luZ2xlLWJ5dGUpIGNoYXJhY3RlcnMgZnJvbQo8aT5pczwvaT4uIiwgd2hlcmUgPGk+aXM8L2k+IGlzIGEgc3RyZWFtIG9mIHR5cGUKPHR0PmJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDs8L3R0Pi4KPC9wPgoKPHA+ClRoZSBzdGFuZGFyZCBkb2VzIG5vdCBzYXkgd2hhdCBpdCBtZWFucyB0byBleHRyYWN0IHNpbmdsZSBieXRlCmNoYXJhY3RlcnMgZnJvbSBhIHN0cmVhbSB3aG9zZSBjaGFyYWN0ZXIgdHlwZSwgPHR0PmNoYXJUPC90dD4sIGlzIGluCmdlbmVyYWwgbm90IGEgc2luZ2xlLWJ5dGUgY2hhcmFjdGVyIHR5cGUuICBFeGlzdGluZyBpbXBsZW1lbnRhdGlvbnMKZGlmZmVyLgo8L3A+Cgo8cD4KQSByZWFzb25hYmxlIHNvbHV0aW9uIHdpbGwgcHJvYmFibHkgaW52b2x2ZSA8dHQ+d2lkZW4oKTwvdHQ+IGFuZC9vcgo8dHQ+bmFycm93KCk8L3R0Piwgc2luY2UgdGhleSBhcmUgdGhlIHN1cHBsaWVkIG1lY2hhbmlzbSBmb3IKY29udmVydGluZyBhIHNpbmdsZSBjaGFyYWN0ZXIgYmV0d2VlbiA8dHQ+Y2hhcjwvdHQ+IGFuZCAKYXJiaXRyYXJ5IDx0dD5jaGFyVDwvdHQ+Lgo8L3A+Cgo8cD5OYXJyb3dpbmcgdGhlIGlucHV0IGNoYXJhY3RlcnMgaXMgbm90IHRoZSBzYW1lIGFzIHdpZGVuaW5nIHRoZQpsaXRlcmFscyA8dHQ+JzAnPC90dD4gYW5kIDx0dD4nMSc8L3R0PiwgYmVjYXVzZSB0aGVyZSBtYXkgYmUgc29tZQpsb2NhbGVzIGluIHdoaWNoIG1vcmUgdGhhbiBvbmUgd2lkZSBjaGFyYWN0ZXIgbWFwcyB0byB0aGUgbmFycm93CmNoYXJhY3RlciA8dHQ+JzAnPC90dD4uICBOYXJyb3dpbmcgbWVhbnMgdGhhdCBhbHRlcm5hdGUKcmVwcmVzZW50YXRpb25zIG1heSBiZSB1c2VkIGZvciBiaXRzZXQgaW5wdXQsIHdpZGVuaW5nIG1lYW5zIHRoYXQKdGhleSBtYXkgbm90IGJlLjwvcD4KCjxwPk5vdGUgdGhhdCBmb3IgbnVtZXJpYyBpbnB1dCwgPHR0Pm51bV9nZXQmbHQ7Jmd0OzwvdHQ+CigyMi4yLjIuMS4yLzgpIGNvbXBhcmVzIGlucHV0IGNoYXJhY3RlcnMgdG8gd2lkZW5lZCB2ZXJzaW9uIG9mIG5hcnJvdwpjaGFyYWN0ZXIgbGl0ZXJhbHMuPC9wPgoKPHA+RnJvbSBQZXRlIEJlY2tlciwgaW4gYysrc3RkLWxpYi04MjI0OjwvcD4KPGJsb2NrcXVvdGU+CjxwPgpEaWZmZXJlbnQgd3JpdGluZyBzeXN0ZW1zIGNhbiBoYXZlIGRpZmZlcmVudCByZXByZXNlbnRhdGlvbnMgZm9yIHRoZQpkaWdpdHMgdGhhdCByZXByZXNlbnQgMCBhbmQgMS4gRm9yIGV4YW1wbGUsIGluIHRoZSBVbmljb2RlIHJlcHJlc2VudGF0aW9uCm9mIHRoZSBEZXZhbmFnYXJpIHNjcmlwdCAodXNlZCBpbiBtYW55IG9mIHRoZSBJbmRpYyBsYW5ndWFnZXMpIHRoZSBkaWdpdCAwCmlzIDB4MDk2NiwgYW5kIHRoZSBkaWdpdCAxIGlzIDB4MDk2Ny4gQ2FsbGluZyBuYXJyb3cgd291bGQgdHJhbnNsYXRlIHRob3NlCmludG8gJzAnIGFuZCAnMScuIEJ1dCBVbmljb2RlIGFsc28gcHJvdmlkZXMgdGhlIEFTQ0lJIHZhbHVlcyAweDAwMzAgYW5kCjB4MDAzMSBmb3IgZm9yIHRoZSBMYXRpbiByZXByZXNlbnRhdGlvbnMgb2YgJzAnIGFuZCAnMScsIGFzIHdlbGwgYXMgY29kZQpwb2ludHMgZm9yIHRoZSBzYW1lIG51bWVyaWMgdmFsdWVzIGluIHNldmVyYWwgb3RoZXIgc2NyaXB0cyAoVGFtaWwgaGFzIG5vCmNoYXJhY3RlciBmb3IgMCwgYnV0IGRvZXMgaGF2ZSB0aGUgZGlnaXRzIDEtOSksIGFuZCBhbnkgb2YgdGhlc2UgdmFsdWVzCndvdWxkIGFsc28gYmUgbmFycm93ZWQgdG8gJzAnIGFuZCAnMScuCjwvcD4KCjxwPi4uLjwvcD4KCjxwPgpJdCdzIGZhaXJseSBjb21tb24gdG8gaW50ZXJtaXggYm90aCBuYXRpdmUgYW5kIExhdGluCnJlcHJlc2VudGF0aW9ucyBvZiBudW1iZXJzIGluIGEgZG9jdW1lbnQuIFNvIEkgdGhpbmsgdGhlIHJ1bGUgaGFzIHRvIGJlCnRoYXQgaWYgYSB3aWRlIGNoYXJhY3RlciByZXByZXNlbnRzIGEgZGlnaXQgd2hvc2UgdmFsdWUgaXMgMCB0aGVuIHRoZSBiaXQKc2hvdWxkIGJlIGNsZWFyZWQ7IGlmIGl0IHJlcHJlc2VudHMgYSBkaWdpdCB3aG9zZSB2YWx1ZSBpcyAxIHRoZW4gdGhlIGJpdApzaG91bGQgYmUgc2V0OyBvdGhlcndpc2UgdGhyb3cgYW4gZXhjZXB0aW9uLiBTbyBpbiBhIERldmFuYWdhcmkgbG9jYWxlLApib3RoIDB4MDk2NiBhbmQgMHgwMDMwIHdvdWxkIGNsZWFyIHRoZSBiaXQsIGFuZCBib3RoIDB4MDk2NyBhbmQgMHgwMDMxCndvdWxkIHNldCBpdC4gV2lkZW4gY2FuJ3QgZG8gdGhhdC4gSXQgd291bGQgcGljayBvbmUgb2YgdGhvc2UgdHdvIHZhbHVlcywKYW5kIGV4Y2x1ZGUgdGhlIG90aGVyIG9uZS4KPC9wPgoKPC9ibG9ja3F1b3RlPgoKPHA+RnJvbSBKZW5zIE1hdXJlciwgaW4gYysrc3RkLWxpYi04MjMzOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KV2hhdGV2ZXIgd2UgZGVjaWRlLCBJIHdvdWxkIGZpbmQgaXQgbW9zdCBzdXJwcmlzaW5nIGlmCmJpdHNldCBjb252ZXJzaW9uIHdvcmtlZCBkaWZmZXJlbnRseSBmcm9tIGludCBjb252ZXJzaW9uCndpdGggcmVnYXJkIHRvIGFsdGVybmF0ZSBsb2NhbCByZXByZXNlbnRhdGlvbnMgb2YKbnVtYmVycy4KPC9wPgoKPHA+VGh1cywgSSB0aGluayB0aGUgb3B0aW9ucyBhcmU6PC9wPgo8dWw+CiA8bGk+IEhhdmUgYSBuZXcgZGVmZWN0IGlzc3VlIGZvciAyMi4yLjIuMS4yLzggc28gdGhhdCBpdCB3aWxsCnJlcXVpcmUgdGhlIHVzZSBvZiBuYXJyb3coKS48L2xpPgoKIDxsaT4gSGF2ZSBhIGRlZmVjdCBpc3N1ZSBmb3IgYml0c2V0KCkgd2hpY2ggZGVzY3JpYmVzIGNsZWFybHkKdGhhdCB3aWRlbigpIGlzIHRvIGJlIHVzZWQuPC9saT4KPC91bD4KPC9ibG9ja3F1b3RlPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CgogICAgPHA+UmVwbGFjZSB0aGUgZmlyc3QgdHdvIHNlbnRlbmNlcyBvZiBwYXJhZ3JhcGggNSB3aXRoOjwvcD4KCiAgICA8YmxvY2txdW90ZT4KICAgIEV4dHJhY3RzIHVwIHRvIDxpPk48L2k+IGNoYXJhY3RlcnMgZnJvbSA8aT5pczwvaT4uIFN0b3JlcyB0aGVzZQogICAgY2hhcmFjdGVycyBpbiBhIHRlbXBvcmFyeSBvYmplY3QgPGk+c3RyPC9pPiBvZiB0eXBlCiAgICA8dHQ+YmFzaWNfc3RyaW5nJmx0O2NoYXJULCB0cmFpdHMmZ3Q7PC90dD4sIHRoZW4gZXZhbHVhdGVzIHRoZQogICAgZXhwcmVzc2lvbiA8dHQ+PGk+eDwvaT4gPSBiaXRzZXQmbHQ7TiZndDsoPGk+c3RyPC9pPik8L3R0Pi4KICAgIDwvYmxvY2txdW90ZT4KCiAgICA8cD5SZXBsYWNlIHRoZSB0aGlyZCBidWxsZXQgaXRlbSBpbiBwYXJhZ3JhcGggNSB3aXRoOjwvcD4KICAgIDx1bD48bGk+CiAgICB0aGUgbmV4dCBpbnB1dCBjaGFyYWN0ZXIgaXMgbmVpdGhlciA8dHQ+PGk+aXM8L2k+LndpZGVuKDApPC90dD4KICAgIG5vciA8dHQ+PGk+aXM8L2k+LndpZGVuKDEpPC90dD4gKGluIHdoaWNoIGNhc2UgdGhlIGlucHV0IGNoYXJhY3RlcgogICAgaXMgbm90IGV4dHJhY3RlZCkuCiAgICA8L2xpPjwvdWw+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5wdXQgZm9yIDx0dD5iaXRzZXQ8L3R0PiBzaG91bGQgd29yayB0aGUgc2FtZSB3YXkgYXMgbnVtZXJpYwppbnB1dC4gIFVzaW5nIDx0dD53aWRlbjwvdHQ+IGRvZXMgbWVhbiB0aGF0IGFsdGVybmF0aXZlIGRpZ2l0CnJlcHJlc2VudGF0aW9ucyB3aWxsIG5vdCBiZSByZWNvZ25pemVkLCBidXQgdGhpcyB3YXMgYSBrbm93biAKY29uc2VxdWVuY2Ugb2YgdGhlIGRlc2lnbiBjaG9pY2UuPC9wPgo8aHI+CjxhIG5hbWU9IjMwNSI+PGgzPjMwNS4mbmJzcDtEZWZhdWx0IGJlaGF2aW9yIG9mIGNvZGVjdnQmbHQ7d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90Jmd0Ozo6bGVuZ3RoKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjQgSmFuIDIwMDE8L3A+CjxwPjIyLjIuMS41LzMgaW50cm9kdWNlcyBjb2RlY3Z0IGluIHBhcnQgd2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICBjb2RlY3Z0Jmx0O3djaGFyX3QsY2hhcixtYnN0YXRlX3QmZ3Q7IGNvbnZlcnRzIGJldHdlZW4gdGhlIG5hdGl2ZQogIGNoYXJhY3RlciBzZXRzIGZvciB0aW55IGFuZCB3aWRlIGNoYXJhY3RlcnMuIEluc3RhbnRpYXRpb25zIG9uCiAgbWJzdGF0ZV90IHBlcmZvcm0gY29udmVyc2lvbiBiZXR3ZWVuIGVuY29kaW5ncyBrbm93biB0byB0aGUgbGlicmFyeQogIGltcGxlbWVudG9yLgo8L2Jsb2NrcXVvdGU+Cgo8cD5CdXQgMjIuMi4xLjUuMi8xMCBkZXNjcmliZXMgZG9fbGVuZ3RoIGluIHBhcnQgd2l0aDo8L3A+Cgo8YmxvY2txdW90ZT4KICAuLi4gY29kZWN2dCZsdDt3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3QmZ3Q7IC4uLiByZXR1cm4ocykgdGhlIGxlc3NlciBvZiBtYXggYW5kIAogIChmcm9tX2VuZC1mcm9tKS4KPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBzZW1hbnRpY3Mgb2YgZG9faW4gYW5kIGRvX2xlbmd0aCBhcmUgbGlua2VkLiAgV2hhdCBvbmUgZG9lcyBtdXN0CmJlIGNvbnNpc3RlbnQgd2l0aCB3aGF0IHRoZSBvdGhlciBkb2VzLiAgMjIuMi4xLjUvMyBsZWFkcyBtZSB0bwpiZWxpZXZlIHRoYXQgdGhlIHZlbmRvciBpcyBhbGxvd2VkIHRvIGNob29zZSB0aGUgYWxnb3JpdGhtIHRoYXQKY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0Ozo6ZG9faW4gcGVyZm9ybXMgc28gdGhhdCBpdCBtYWtlcwpoaXMgY3VzdG9tZXJzIGhhcHB5IG9uIGEgZ2l2ZW4gcGxhdGZvcm0uICBCdXQgMjIuMi4xLjUuMi8xMCBleHBsaWNpdGx5CnNheXMgd2hhdCBjb2RlY3Z0Jmx0O3djaGFyX3QsY2hhcixtYnN0YXRlX3QmZ3Q7Ojpkb19sZW5ndGggbXVzdApyZXR1cm4uICBBbmQgdGh1cyBpbmRpcmVjdGx5IHNwZWNpZmllcyB0aGUgYWxnb3JpdGhtIHRoYXQKY29kZWN2dCZsdDt3Y2hhcl90LGNoYXIsbWJzdGF0ZV90Jmd0Ozo6ZG9faW4gbXVzdCBwZXJmb3JtLiAgSSBiZWxpZXZlCnRoYXQgdGhpcyBpcyBub3Qgd2hhdCB3YXMgaW50ZW5kZWQgYW5kIGlzIGEgZGVmZWN0Lgo8L3A+Cgo8cD5EaXNjdXNzaW9uIGZyb20gdGhlIC1saWIgcmVmbGVjdG9yOgoKPGJyPlRoaXMgcHJvcG9zYWwgd291bGQgaGF2ZSB0aGUgZWZmZWN0IG9mIG1ha2luZyB0aGUgc2VtYW50aWNzIG9mCmFsbCBvZiB0aGUgdmlydHVhbCBmdW5jdGlvbnMgaW4gPHR0PmNvZGVjdnQmbHQ7d2NoYXJfdCwgY2hhciwKbWJzdGF0ZV90Jmd0OzwvdHQ+IGltcGxlbWVudGF0aW9uIHNwZWNpZmllZC4gIElzIHRoYXQgd2hhdCB3ZSB3YW50LCBvcgpkbyB3ZSB3YW50IHRvIG1hbmRhdGUgc3BlY2lmaWMgYmVoYXZpb3IgZm9yIHRoZSBiYXNlIGNsYXNzIHZpcnR1YWxzCmFuZCBsZWF2ZSB0aGUgaW1wbGVtZW50YXRpb24gc3BlY2lmaWVkIGJlaGF2aW9yIGZvciB0aGUgY29kZWN2dF9ieW5hbWUKZGVyaXZlZCBjbGFzcz8gIFRoZSB0cmFkZW9mZiBpcyB0aGF0IGZvcm1lciBhbGxvd3MgaW1wbGVtZW50b3JzIHRvCndyaXRlIGEgYmFzZSBjbGFzcyB0aGF0IGFjdHVhbGx5IGRvZXMgc29tZXRoaW5nIHVzZWZ1bCwgd2hpbGUgdGhlCmxhdHRlciBnaXZlcyB1c2VycyBhIHdheSB0byBnZXQga25vd24gYW5kIHNwZWNpZmllZC0tLWFsYmVpdAp1c2VsZXNzLS0tYmVoYXZpb3IsIGFuZCBpcyBjb25zaXN0ZW50IHdpdGggdGhlIHdheSB0aGUgc3RhbmRhcmQKaGFuZGxlcyBvdGhlciBmYWNldHMuICBJdCBpcyBub3QgY2xlYXIgd2hhdCB0aGUgb3JpZ2luYWwgaW50ZW50aW9uCndhcy48L3A+Cgo8cD4KTmF0aGFuIGhhcyBzdWdnZXN0IGEgY29tcHJvbWlzZTogYSBjaGFyYWN0ZXIgdGhhdCBpcyBhIHdpZGVuZWQgdmVyc2lvbgpvZiB0aGUgY2hhcmFjdGVycyBpbiB0aGUgYmFzaWMgZXhlY3V0aW9uIGNoYXJhY3RlciBzZXQgbXVzdCBiZQpjb252ZXJ0ZWQgdG8gYSBvbmUtYnl0ZSBzZXF1ZW5jZSwgYnV0IHRoZXJlIGlzIG5vIHN1Y2ggcmVxdWlyZW1lbnQKZm9yIGNoYXJhY3RlcnMgdGhhdCBhcmUgbm90IHBhcnQgb2YgdGhlIGJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSAyMi4yLjEuNS4yLzUgZnJvbToKPC9wPgo8cD4KVGhlIGluc3RhbnRpYXRpb25zIHJlcXVpcmVkIGluIFRhYmxlIDUxIChsaWIubG9jYWxlLmNhdGVnb3J5KSwgbmFtZWx5CmNvZGVjdnQmbHQ7d2NoYXJfdCxjaGFyLG1ic3RhdGVfdCZndDsgYW5kCmNvZGVjdnQmbHQ7Y2hhcixjaGFyLG1ic3RhdGVfdCZndDssIHN0b3JlIG5vIGNoYXJhY3RlcnMuIFN0b3JlcyBubyBtb3JlCnRoYW4gKHRvX2xpbWl0LXRvKSBkZXN0aW5hdGlvbiBlbGVtZW50cy4gSXQgYWx3YXlzIGxlYXZlcyB0aGUgdG9fbmV4dApwb2ludGVyIHBvaW50aW5nIG9uZSBiZXlvbmQgdGhlIGxhc3QgZWxlbWVudCBzdWNjZXNzZnVsbHkgc3RvcmVkLgo8L3A+CjxwPgp0bzoKPC9wPgo8cD4KU3RvcmVzIG5vIG1vcmUgdGhhbiAodG9fbGltaXQtdG8pIGRlc3RpbmF0aW9uIGVsZW1lbnRzLCBhbmQgbGVhdmVzIHRoZQp0b19uZXh0IHBvaW50ZXIgcG9pbnRpbmcgb25lIGJleW9uZCB0aGUgbGFzdCBlbGVtZW50IHN1Y2Nlc3NmdWxseQpzdG9yZWQuICBjb2RlY3Z0Jmx0O2NoYXIsY2hhcixtYnN0YXRlX3QmZ3Q7IHN0b3JlcyBubyBjaGFyYWN0ZXJzLgo8L3A+Cgo8cD5DaGFuZ2UgMjIuMi4xLjUuMi8xMCBmcm9tOjwvcD4KCjxibG9ja3F1b3RlPgotMTAtIFJldHVybnM6IChmcm9tX25leHQtZnJvbSkgd2hlcmUgZnJvbV9uZXh0IGlzIHRoZSBsYXJnZXN0IHZhbHVlIGluCnRoZSByYW5nZSBbZnJvbSxmcm9tX2VuZF0gc3VjaCB0aGF0IHRoZSBzZXF1ZW5jZSBvZiB2YWx1ZXMgaW4gdGhlCnJhbmdlIFtmcm9tLGZyb21fbmV4dCkgcmVwcmVzZW50cyBtYXggb3IgZmV3ZXIgdmFsaWQgY29tcGxldGUKY2hhcmFjdGVycyBvZiB0eXBlIGludGVyblQuIFRoZSBpbnN0YW50aWF0aW9ucyByZXF1aXJlZCBpbiBUYWJsZSA1MQooMjEuMS4xLjEuMSksIG5hbWVseSBjb2RlY3Z0Jmx0O3djaGFyX3QsIGNoYXIsIG1ic3RhdGVfdCZndDsgYW5kCmNvZGVjdnQmbHQ7Y2hhciwgY2hhciwgbWJzdGF0ZV90Jmd0OywgcmV0dXJuIHRoZSBsZXNzZXIgb2YgbWF4IGFuZAooZnJvbV9lbmQtZnJvbSkuCjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgotMTAtIFJldHVybnM6IChmcm9tX25leHQtZnJvbSkgd2hlcmUgZnJvbV9uZXh0IGlzIHRoZSBsYXJnZXN0IHZhbHVlIGluIAp0aGUgcmFuZ2UgW2Zyb20sZnJvbV9lbmRdIHN1Y2ggdGhhdCB0aGUgc2VxdWVuY2Ugb2YgdmFsdWVzIGluIHRoZSByYW5nZSAKW2Zyb20sZnJvbV9uZXh0KSByZXByZXNlbnRzIG1heCBvciBmZXdlciB2YWxpZCBjb21wbGV0ZSBjaGFyYWN0ZXJzIG9mIAp0eXBlIGludGVyblQuIFRoZSBpbnN0YW50aWF0aW9uIGNvZGVjdnQmbHQ7Y2hhciwgY2hhciwgbWJzdGF0ZV90Jmd0OyByZXR1cm5zIAp0aGUgbGVzc2VyIG9mIG1heCBhbmQgKGZyb21fZW5kLWZyb20pLiAKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IE5hdGhhbiBzdWdnZXN0ZWQgYW4gYWx0ZXJuYXRpdmUgcmVzb2x1dGlvbjogc2FtZSBhcwphYm92ZSwgYnV0IHJlcXVpcmUgdGhhdCwgaW4gdGhlIGRlZmF1bHQgZW5jb2RpbmcsIGEgY2hhcmFjdGVyIGZyb20gdGhlCmJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IHdvdWxkIG1hcCB0byBhIHNpbmdsZSBleHRlcm5hbApjaGFyYWN0ZXIuICBUaGUgc3RyYXcgcG9sbCB3YXMgOC0xIGluIGZhdm9yIG9mIHRoZSBwcm9wb3NlZApyZXNvbHV0aW9uLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBkZWZhdWx0IGVuY29kaW5nIHNob3VsZCBiZSB3aGF0ZXZlciB1c2VycyBvZiBhIGdpdmVuIHBsYXRmb3JtCndvdWxkIGV4cGVjdCB0byBiZSB0aGUgbW9zdCBuYXR1cmFsLiAgVGhpcyB2YXJpZXMgZnJvbSBwbGF0Zm9ybSB0bwpwbGF0Zm9ybS4gIEluIG1hbnkgY2FzZXMgdGhlcmUgaXMgYSBwcmVleGlzdGluZyBDIGxpYnJhcnksIGFuZCB1c2Vycwp3b3VsZCBleHBlY3QgdGhlIGRlZmF1bHQgZW5jb2RpbmcgdG8gYmUgd2hhdGV2ZXIgQyB1c2VzIGluIHRoZSBkZWZhdWx0CiJDIiBsb2NhbGUuICBXZSBjb3VsZCBpbXBvc2UgYSBndWFyYW50ZWUgbGlrZSB0aGUgb25lIE5hdGhhbiBzdWdnZXN0ZWQKKGEgY2hhcmFjdGVyIGZyb20gdGhlIGJhc2ljIGV4ZWN1dGlvbiBjaGFyYWN0ZXIgc2V0IG11c3QgbWFwIHRvIGEKc2luZ2xlIGV4dGVybmFsIGNoYXJhY3RlciksIGJ1dCB0aGlzIHdvdWxkIHJ1bGUgb3V0IGltcG9ydGFudAplbmNvZGluZ3MgdGhhdCBhcmUgaW4gY29tbW9uIHVzZTogaXQgd291bGQgcnVsZSBvdXQgSklTLCBmb3IKZXhhbXBsZSwgYW5kIGl0IHdvdWxkIHJ1bGUgb3V0IGEgZml4ZWQtd2lkdGggZW5jb2Rpbmcgb2YgVUNTLTQuPC9wPgoKPHA+PGk+W0N1cmHnYW86IGZpeGVkIHJhdGlvbmFsZSB0eXBvIGF0IHRoZSByZXF1ZXN0IG9mIEljaGlybyBLb3NoaWRhOwoic2hpZnQtSklTIiBjaGFuZ2VkIHRvICJKSVMiLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzMDYiPjxoMz4zMDYuJm5ic3A7b2Zmc2V0b2YgbWFjcm8gYW5kIG5vbi1QT0QgdHlwZXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIuc3VwcG9ydC50eXBlcyI+IFtsaWIuc3VwcG9ydC50eXBlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgRmViIDIwMDE8L3A+IAo8cD5TcGxpY2VkIHRvZ2V0aGVyIGZyb20gcmVmbGVjdG9yIG1lc3NhZ2VzIGMrK3N0ZC1saWItODI5NCBhbmQgLTgyOTU6PC9wPgoKPHA+MTguMSwgcGFyYWdyYXBoIDUsIHJlYWRzOiAiVGhlIG1hY3JvIDx0dD5vZmZzZXRvZjwvdHQ+CmFjY2VwdHMgYSByZXN0cmljdGVkIHNldCBvZiA8aT50eXBlPC9pPiBhcmd1bWVudHMgaW4gdGhpcwpJbnRlcm5hdGlvbmFsIFN0YW5kYXJkLiA8aT50eXBlPC9pPiBzaGFsbCBiZSBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QKdW5pb24gKGNsYXVzZSA5KS4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgb2Zmc2V0b2YgbWFjcm8gdG8gYSBmaWVsZAp0aGF0IGlzIGEgc3RhdGljIGRhdGEgbWVtYmVyIG9yIGEgZnVuY3Rpb24gbWVtYmVyIGlzCnVuZGVmaW5lZC4iPC9wPgoKPHA+Rm9yIHRoZSBQT0QgcmVxdWlyZW1lbnQsIGl0IGRvZXNuJ3Qgc2F5ICJubyBkaWFnbm9zdGljCnJlcXVpcmVkIiBvciAidW5kZWZpbmVkIGJlaGF2aW9yIi4gSSByZWFkIDEuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2ludHJvLmh0bWwjaW50cm8uY29tcGxpYW5jZSI+IFtpbnRyby5jb21wbGlhbmNlXTwvYT4sIHBhcmFncmFwaCAxLCB0byBtZWFuIHRoYXQgYSBkaWFnbm9zdGljIGlzIHJlcXVpcmVkLgpJdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoaXMgcmVxdWlyZW1lbnQgd2FzIGludGVuZGVkLiAgV2hpbGUgaXQncwpwb3NzaWJsZSB0byBwcm92aWRlIHN1Y2ggYSBkaWFnbm9zdGljLCB0aGUgZXh0cmEgY29tcGxpY2F0aW9uIGRvZXNuJ3QKc2VlbSB0byBhZGQgYW55IHZhbHVlLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDE4LjEsIHBhcmFncmFwaCA1LCB0byAiSWYgPGk+dHlwZTwvaT4gaXMgbm90IGEgUE9ECnN0cnVjdHVyZSBvciBhIFBPRCB1bmlvbiB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLiI8L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogc3RyYXcgcG9sbCB3YXMgNy00IGluIGZhdm9yLiAgSXQgd2FzIGdlbmVyYWxseQphZ3JlZWQgdGhhdCByZXF1aXJpbmcgYSBkaWFnbm9zdGljIHdhcyBpbmFkdmVydGVudCwgYnV0IHNvbWUgTFdHCm1lbWJlcnMgdGhvdWdodCB0aGF0IGRpYWdub3N0aWNzIHNob3VsZCBiZSByZXF1aXJlZCB3aGVuZXZlcgpwb3NzaWJsZS5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzA3Ij48aDM+MzA3LiZuYnNwO0xhY2sgb2YgcmVmZXJlbmNlIHR5cGVkZWZzIGluIGNvbnRhaW5lciBhZGFwdG9yczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5hZGFwdG9ycyI+IFtsaWIuY29udGFpbmVyLmFkYXB0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTMgTWFyIDIwMDE8L3A+Cgo8cD5Gcm9tIHJlZmxlY3RvciBtZXNzYWdlIGMrK3N0ZC1saWItODMzMC4gIFNlZSBhbHNvIGxpYi04MzE3LjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgaXMgY3VycmVudGx5IGluY29uc2lzdGVudCBpbiAyMy4yLjMuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnByaW9yaXR5LnF1ZXVlIj4gW2xpYi5wcmlvcml0eS5xdWV1ZV08L2E+CnBhcmFncmFwaCAxIGFuZCAyMy4yLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+IHBhcmFncmFwaCAxLgoyMy4yLjMuMy8xLCBmb3IgZXhhbXBsZSwgc2F5czoKPC9wPgoKPGJsb2NrcXVvdGU+Ci0xLSBBbnkgc2VxdWVuY2Ugc3VwcG9ydGluZyBvcGVyYXRpb25zIGJhY2soKSwgcHVzaF9iYWNrKCkgYW5kIHBvcF9iYWNrKCkgCmNhbiBiZSB1c2VkIHRvIGluc3RhbnRpYXRlIHN0YWNrLiBJbiBwYXJ0aWN1bGFyLCB2ZWN0b3IgKGxpYi52ZWN0b3IpLCBsaXN0IAoobGliLmxpc3QpIGFuZCBkZXF1ZSAobGliLmRlcXVlKSBjYW4gYmUgdXNlZC4gCjwvYmxvY2txdW90ZT4KCjxwPkJ1dCB0aGlzIGlzIGZhbHNlOiB2ZWN0b3ImbHQ7Ym9vbCZndDsgY2FuIG5vdCBiZSB1c2VkLCBiZWNhdXNlIHRoZQpjb250YWluZXIgYWRhcHRvcnMgcmV0dXJuIGEgVCZhbXA7IHJhdGhlciB0aGFuIHVzaW5nIHRoZSB1bmRlcmx5aW5nCmNvbnRhaW5lcidzIHJlZmVyZW5jZSB0eXBlLjwvcD4KCjxwPlRoaXMgaXMgYSBjb250cmFkaWN0aW9uIHRoYXQgY2FuIGJlIGZpeGVkIGJ5OjwvcD4KCjxvbD4KPGxpPk1vZGlmeWluZyB0aGVzZSBwYXJhZ3JhcGhzIHRvIHNheSB0aGF0IHZlY3RvciZsdDtib29sJmd0OwogICAgaXMgYW4gZXhjZXB0aW9uLjwvbGk+CjxsaT5SZW1vdmluZyB0aGUgdmVjdG9yJmx0O2Jvb2wmZ3Q7IHNwZWNpYWxpemF0aW9uLjwvbGk+CjxsaT5DaGFuZ2luZyB0aGUgcmV0dXJuIHR5cGVzIG9mIHN0YWNrIGFuZCBwcmlvcml0eV9xdWV1ZSB0byB1c2UgCiAgICByZWZlcmVuY2UgdHlwZWRlZidzLjwvbGk+Cjwvb2w+Cgo8cD4KSSBwcm9wb3NlIDMuICBUaGlzIGRvZXMgbm90IHByZWNsdWRlIG9wdGlvbiAyIGlmIHdlIGNob29zZSB0byBkbyBpdApsYXRlciAoc2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sIzk2Ij45NjwvYT4pOyB0aGUgaXNzdWVzIGFyZSBpbmRlcGVuZGVudC4gIE9wdGlvbgozIG9mZmVycyBhIHNtYWxsIHN0ZXAgdG93YXJkcyBzdXBwb3J0IGZvciBwcm94aWVkIGNvbnRhaW5lcnMuICBUaGlzCnNtYWxsIHN0ZXAgZml4ZXMgYSBjdXJyZW50IGNvbnRyYWRpY3Rpb24sIGlzIGVhc3kgZm9yIHZlbmRvcnMgdG8KaW1wbGVtZW50LCBpcyBhbHJlYWR5IGltcGxlbWVudGVkIGluIGF0IGxlYXN0IG9uZSBwb3B1bGFyIGxpYiwgYW5kCmRvZXMgbm90IGJyZWFrIGFueSBjb2RlLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPlN1bW1hcnk6IEFkZCByZWZlcmVuY2UgYW5kIGNvbnN0X3JlZmVyZW5jZSB0eXBlZGVmcyB0byBxdWV1ZSwKcHJpb3JpdHlfcXVldWUgYW5kIHN0YWNrLiAgQ2hhbmdlIHJldHVybiB0eXBlcyBvZiAidmFsdWVfdHlwZSZhbXA7IiB0bwoicmVmZXJlbmNlIi4gIENoYW5nZSByZXR1cm4gdHlwZXMgb2YgImNvbnN0IHZhbHVlX3R5cGUmYW1wOyIgdG8KImNvbnN0X3JlZmVyZW5jZSIuICBEZXRhaWxzOjwvcD4KCjxwPkNoYW5nZSAyMy4yLjMuMS8xIGZyb206PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IGRlcXVlJmx0O1QmZ3Q7ICZndDsKICAgIGNsYXNzIHF1ZXVlIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBxdWV1ZShjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICB2YWx1ZV90eXBlJmFtcDsgICAgICAgZnJvbnQoKSAgICAgICAgICAgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyBmcm9udCgpIGNvbnN0ICAgICB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgdmFsdWVfdHlwZSZhbXA7ICAgICAgIGJhY2soKSAgICAgICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIGNvbnN0IHZhbHVlX3R5cGUmYW1wOyBiYWNrKCkgY29uc3QgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpICAgICAgeyBjLnB1c2hfYmFjayh4KTsgfQogICAgICB2b2lkIHBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGMucG9wX2Zyb250KCk7IH0KICAgIH07CjwvcHJlPgoKPHA+dG86PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IGRlcXVlJmx0O1QmZ3Q7ICZndDsKICAgIGNsYXNzIHF1ZXVlIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjp2YWx1ZV90eXBlICAgICAgICAgICAgdmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgcXVldWUoY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgcmVmZXJlbmNlICAgICAgICAgZnJvbnQoKSAgICAgICAgICAgeyByZXR1cm4gYy5mcm9udCgpOyB9CiAgICAgIGNvbnN0X3JlZmVyZW5jZSAgIGZyb250KCkgY29uc3QgICAgIHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICByZWZlcmVuY2UgICAgICAgICBiYWNrKCkgICAgICAgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICBjb25zdF9yZWZlcmVuY2UgICBiYWNrKCkgY29uc3QgICAgICB7IHJldHVybiBjLmJhY2soKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpICAgICAgeyBjLnB1c2hfYmFjayh4KTsgfQogICAgICB2b2lkIHBvcCgpICAgICAgICAgICAgICAgICAgICAgICAgICB7IGMucG9wX2Zyb250KCk7IH0KICAgIH07CjwvcHJlPgoKPHA+Q2hhbmdlIDIzLjIuMy4yLzEgZnJvbTo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gdmVjdG9yJmx0O1QmZ3Q7LAogICAgICAgICAgICAgIGNsYXNzIENvbXBhcmUgPSBsZXNzJmx0O3R5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSZndDsgJmd0OwogICAgY2xhc3MgcHJpb3JpdHlfcXVldWUgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKICAgICAgQ29tcGFyZSBjb21wOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQgcHJpb3JpdHlfcXVldWUoY29uc3QgQ29tcGFyZSZhbXA7IHggPSBDb21wYXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwogICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgSW5wdXRJdGVyYXRvciZndDsKICAgICAgICBwcmlvcml0eV9xdWV1ZShJbnB1dEl0ZXJhdG9yIGZpcnN0LCBJbnB1dEl0ZXJhdG9yIGxhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29tcGFyZSZhbXA7IHggPSBDb21wYXJlKCksCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CgogICAgICBib29sICAgICAgZW1wdHkoKSBjb25zdCAgICAgICB7IHJldHVybiBjLmVtcHR5KCk7IH0KICAgICAgc2l6ZV90eXBlIHNpemUoKSAgY29uc3QgICAgICAgeyByZXR1cm4gYy5zaXplKCk7IH0KICAgICAgY29uc3QgdmFsdWVfdHlwZSZhbXA7IHRvcCgpIGNvbnN0IHsgcmV0dXJuIGMuZnJvbnQoKTsgfQogICAgICB2b2lkIHB1c2goY29uc3QgdmFsdWVfdHlwZSZhbXA7IHgpOwogICAgICB2b2lkIHBvcCgpOwogICAgfTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICBubyBlcXVhbGl0eSBpcyBwcm92aWRlZAogIH0KPC9wcmU+Cgo8cD50bzo8L3A+Cgo8cHJlPiAgbmFtZXNwYWNlIHN0ZCB7CiAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgVCwgY2xhc3MgQ29udGFpbmVyID0gdmVjdG9yJmx0O1QmZ3Q7LAogICAgICAgICAgICAgIGNsYXNzIENvbXBhcmUgPSBsZXNzJmx0O3R5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSZndDsgJmd0OwogICAgY2xhc3MgcHJpb3JpdHlfcXVldWUgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6dmFsdWVfdHlwZSAgICAgICAgICAgIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpyZWZlcmVuY2UgICAgICAgICAgICAgcmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlICAgICAgIGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnNpemVfdHlwZSAgICAgICAgICAgICBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgICAgICAgICAgQ29udGFpbmVyICAgICAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIENvbnRhaW5lciBjOwogICAgICBDb21wYXJlIGNvbXA7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBwcmlvcml0eV9xdWV1ZShjb25zdCBDb21wYXJlJmFtcDsgeCA9IENvbXBhcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQ29udGFpbmVyJmFtcDsgPSBDb250YWluZXIoKSk7CiAgICAgIHRlbXBsYXRlICZsdDtjbGFzcyBJbnB1dEl0ZXJhdG9yJmd0OwogICAgICAgIHByaW9yaXR5X3F1ZXVlKElucHV0SXRlcmF0b3IgZmlyc3QsIElucHV0SXRlcmF0b3IgbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb21wYXJlJmFtcDsgeCA9IENvbXBhcmUoKSwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICBjb25zdF9yZWZlcmVuY2UgICB0b3AoKSBjb25zdCB7IHJldHVybiBjLmZyb250KCk7IH0KICAgICAgdm9pZCBwdXNoKGNvbnN0IHZhbHVlX3R5cGUmYW1wOyB4KTsKICAgICAgdm9pZCBwb3AoKTsKICAgIH07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgbm8gZXF1YWxpdHkgaXMgcHJvdmlkZWQKICB9CjwvcHJlPgoKPHA+QW5kIGNoYW5nZSAyMy4yLjMuMy8xIGZyb206PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IGRlcXVlJmx0O1QmZ3Q7ICZndDsKICAgIGNsYXNzIHN0YWNrIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6c2l6ZV90eXBlICAgICAgICAgICAgIHNpemVfdHlwZTsKICAgICAgdHlwZWRlZiAgICAgICAgICBDb250YWluZXIgICAgICAgICAgICAgICAgICAgICAgICBjb250YWluZXJfdHlwZTsKICAgIHByb3RlY3RlZDoKICAgICAgQ29udGFpbmVyIGM7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdCBzdGFjayhjb25zdCBDb250YWluZXImYW1wOyA9IENvbnRhaW5lcigpKTsKCiAgICAgIGJvb2wgICAgICBlbXB0eSgpIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuZW1wdHkoKTsgfQogICAgICBzaXplX3R5cGUgc2l6ZSgpICBjb25zdCAgICAgICAgICAgICB7IHJldHVybiBjLnNpemUoKTsgfQogICAgICB2YWx1ZV90eXBlJmFtcDsgICAgICAgdG9wKCkgICAgICAgICAgICAgeyByZXR1cm4gYy5iYWNrKCk7IH0KICAgICAgY29uc3QgdmFsdWVfdHlwZSZhbXA7IHRvcCgpIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCkgICAgICB7IGMucHVzaF9iYWNrKHgpOyB9CiAgICAgIHZvaWQgcG9wKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYy5wb3BfYmFjaygpOyB9CiAgICB9OwoKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImbHQ7IChjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImZ3Q7IChjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImZ3Q7PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImbHQ7PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICB9CjwvcHJlPgoKPHA+dG86PC9wPgoKPHByZT4gIG5hbWVzcGFjZSBzdGQgewogICAgdGVtcGxhdGUgJmx0O2NsYXNzIFQsIGNsYXNzIENvbnRhaW5lciA9IGRlcXVlJmx0O1QmZ3Q7ICZndDsKICAgIGNsYXNzIHN0YWNrIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OnZhbHVlX3R5cGUgICAgICAgICAgICB2YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIENvbnRhaW5lcjo6cmVmZXJlbmNlICAgICAgICAgICAgIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBDb250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSAgICAgICBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgQ29udGFpbmVyOjpzaXplX3R5cGUgICAgICAgICAgICAgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmICAgICAgICAgIENvbnRhaW5lciAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5lcl90eXBlOwogICAgcHJvdGVjdGVkOgogICAgICBDb250YWluZXIgYzsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0IHN0YWNrKGNvbnN0IENvbnRhaW5lciZhbXA7ID0gQ29udGFpbmVyKCkpOwoKICAgICAgYm9vbCAgICAgIGVtcHR5KCkgY29uc3QgICAgICAgICAgICAgeyByZXR1cm4gYy5lbXB0eSgpOyB9CiAgICAgIHNpemVfdHlwZSBzaXplKCkgIGNvbnN0ICAgICAgICAgICAgIHsgcmV0dXJuIGMuc2l6ZSgpOyB9CiAgICAgIHJlZmVyZW5jZSAgICAgICAgIHRvcCgpICAgICAgICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIGNvbnN0X3JlZmVyZW5jZSAgIHRvcCgpIGNvbnN0ICAgICAgIHsgcmV0dXJuIGMuYmFjaygpOyB9CiAgICAgIHZvaWQgcHVzaChjb25zdCB2YWx1ZV90eXBlJmFtcDsgeCkgICAgICB7IGMucHVzaF9iYWNrKHgpOyB9CiAgICAgIHZvaWQgcG9wKCkgICAgICAgICAgICAgICAgICAgICAgICAgIHsgYy5wb3BfYmFjaygpOyB9CiAgICB9OwoKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImbHQ7IChjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImZ3Q7IChjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImZ3Q7PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICAgIHRlbXBsYXRlICZsdDtjbGFzcyBULCBjbGFzcyBDb250YWluZXImZ3Q7CiAgICAgIGJvb2wgb3BlcmF0b3ImbHQ7PShjb25zdCBzdGFjayZsdDtULCBDb250YWluZXImZ3Q7JmFtcDsgeCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0YWNrJmx0O1QsIENvbnRhaW5lciZndDsmYW1wOyB5KTsKICB9CjwvcHJlPgoKPHA+PGk+W0NvcGVuaGFnZW46IFRoaXMgY2hhbmdlIHdhcyBkaXNjdXNzZWQgYmVmb3JlIHRoZSBJUyB3YXMgcmVsZWFzZWQKYW5kIGl0IHdhcyBkZWxpYmVyYXRlbHkgbm90IGFkb3B0ZWQuICBOZXZlcnRoZWxlc3MsIHRoZSBMV0cgYmVsaWV2ZXMKKHN0cmF3IHBvbGw6IDEwLTIpIHRoYXQgaXQgaXMgYSBnZW51aW5lIGRlZmVjdC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzA4Ij48aDM+MzA4LiZuYnNwO1RhYmxlIDgyIG1lbnRpb25zIHVucmVsYXRlZCBoZWFkZXJzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IE1hciAyMDAxPC9wPgo8cD4KVGFibGUgODIgaW4gc2VjdGlvbiAyNyBtZW50aW9ucyB0aGUgaGVhZGVyICZsdDtjc3RkbGliJmd0OyBmb3IgU3RyaW5nCnN0cmVhbXMgKDI3LjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZy5zdHJlYW1zIj4gW2xpYi5zdHJpbmcuc3RyZWFtc108L2E+KSBhbmQgdGhlIGhlYWRlcnMgJmx0O2NzdGRpbyZndDsgYW5kCiZsdDtjd2NoYXImZ3Q7IGZvciBGaWxlIHN0cmVhbXMgKDI3LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGUuc3RyZWFtcyI+IFtsaWIuZmlsZS5zdHJlYW1zXTwvYT4pLiBJdCdzIG5vdCBjbGVhcgp3aHkgdGhlc2UgaGVhZGVycyBhcmUgbWVudGlvbmVkIGluIHRoaXMgY29udGV4dCBzaW5jZSB0aGV5IGRvIG5vdApkZWZpbmUgYW55IG9mIHRoZSBsaWJyYXJ5IGVudGl0aWVzIGRlc2NyaWJlZCBieSB0aGUKc3ViY2xhdXNlcy4gQWNjb3JkaW5nIHRvIDE3LjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmNvbnRlbnRzIj4gW2xpYi5jb250ZW50c108L2E+LCBvbmx5IHN1Y2ggaGVhZGVycwphcmUgdG8gYmUgbGlzdGVkIGluIHRoZSBzdW1tYXJ5Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlICZsdDtjc3RkbGliJmd0OyBhbmQgJmx0O2N3Y2hhciZndDsgZnJvbQpUYWJsZSA4Mi48L3A+Cgo8cD48aT5bQ29wZW5oYWdlbjogY2hhbmdlZCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBzbGlnaHRseS4gIFRoZQpvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIGFsc28gc2FpZCB0byByZW1vdmUgJmx0O2NzdGRpbyZndDsgZnJvbQpUYWJsZSA4Mi4gIEhvd2V2ZXIsICZsdDtjc3RkaW8mZ3Q7IGlzIG1lbnRpb25lZCBzZXZlcmFsIHRpbWVzIHdpdGhpbgpzZWN0aW9uIDI3LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZpbGUuc3RyZWFtcyI+IFtsaWIuZmlsZS5zdHJlYW1zXTwvYT4sIGluY2x1ZGluZyAyNy44LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmMuZmlsZXMiPiBbbGliLmMuZmlsZXNdPC9hPi5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzEwIj48L2E+PGgzPjxhIG5hbWU9IjMxMCI+MzEwLiZuYnNwO0lzIGVycm5vIGEgbWFjcm8/PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTcuNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuaGVhZGVycyI+IFtsaWIuaGVhZGVyc108L2E+LCAxOS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWRpYWdub3N0aWNzLmh0bWwjbGliLmVycm5vIj4gW2xpYi5lcnJub108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1N0ZXZlIENsYW1hZ2UmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjEgTWFyIDIwMDE8L3A+CiAgPHA+CiAgRXhhY3RseSBob3cgc2hvdWxkIGVycm5vIGJlIGRlY2xhcmVkIGluIGEgY29uZm9ybWluZyBDKysgaGVhZGVyPwogIDwvcD4KCiAgPHA+CiAgVGhlIEMgc3RhbmRhcmQgc2F5cyBpbiA3LjEuNCB0aGF0IGl0IGlzIHVuc3BlY2lmaWVkIHdoZXRoZXIgZXJybm8gaXMgYQogIG1hY3JvIG9yIGFuIGlkZW50aWZpZXIgd2l0aCBleHRlcm5hbCBsaW5rYWdlLiAgSW4gc29tZSBpbXBsZW1lbnRhdGlvbnMKICBpdCBjYW4gYmUgZWl0aGVyLCBkZXBlbmRpbmcgb24gY29tcGlsZS10aW1lIG9wdGlvbnMuICAoRS5nLiwgb24KICBTb2xhcmlzIGluIG11bHRpLXRocmVhZGluZyBtb2RlLCBlcnJubyBpcyBhIG1hY3JvIHRoYXQgZXhwYW5kcyB0byBhCiAgZnVuY3Rpb24gY2FsbCwgYnV0IGlzIGFuIGV4dGVybiBpbnQgb3RoZXJ3aXNlLiAgIlVuc3BlY2lmaWVkIiBhbGxvd3MKICBzdWNoIHZhcmlhYmlsaXR5LikKICA8L3A+CgogIDxwPlRoZSBDKysgc3RhbmRhcmQ6PC9wPgogIDx1bD4KICA8bGk+MTcuNC4xLjIgc2F5cyBpbiBhIG5vdGUgdGhhdCBlcnJubyBtdXN0IGJlIG1hY3JvIGluIEMuIChmYWxzZSk8L2xpPgogIDxsaT4xNy40LjMuMS4zIGZvb3Rub3RlIDE2NiBzYXlzIGVycm5vIGlzIHJlc2VydmVkIGFzIGFuIGV4dGVybmFsIAogICAgICBuYW1lICh0cnVlKSwgYW5kIGltcGxpZXMgdGhhdCBpdCBpcyBhbiBpZGVudGlmaWVyLjwvbGk+CiAgPGxpPjE5LjMgc2ltcGx5IGxpc3RzIGVycm5vIGFzIGEgbWFjcm8gKGJ5IHdoYXQgcmVhc29uaW5nPykgYW5kIGdvZXMKICAgICAgb24gdG8gc2F5IHRoYXQgdGhlIGNvbnRlbnRzIG9mIG9mIEMrKyAmbHQ7ZXJybm8uaCZndDsgYXJlIHRoZQogICAgICBzYW1lIGFzIGluIEMsIGJlZ2dpbmcgdGhlIHF1ZXN0aW9uLjwvbGk+CiAgPGxpPkMuMiwgdGFibGUgOTUgbGlzdHMgZXJybm8gYXMgYSBtYWNybywgd2l0aG91dCBjb21tZW50LjwvbGk+CiAgPC91bD4KCiAgPHA+SSBmaW5kIG5vIG90aGVyIHJlZmVyZW5jZXMgdG8gZXJybm8uPC9wPgoKICA8cD5XZSBzaG91bGQgZWl0aGVyIGV4cGxpY2l0bHkgc2F5IHRoYXQgZXJybm8gbXVzdCBiZSBhIG1hY3JvLCBldmVuCiAgdGhvdWdoIGl0IG5lZWQgbm90IGJlIGEgbWFjcm8gaW4gQywgb3IgZWxzZSBleHBsaWNpdGx5IGxlYXZlIGl0CiAgdW5zcGVjaWZpZWQuICBXZSBhbHNvIG5lZWQgdG8gc2F5IHNvbWV0aGluZyBhYm91dCBuYW1lc3BhY2Ugc3RkLiAKICBBIHVzZXIgd2hvIGluY2x1ZGVzICZsdDtjZXJybm8mZ3Q7IG5lZWRzIHRvIGtub3cgd2hldGhlciB0byB3cml0ZQogIDx0dD5lcnJubzwvdHQ+LCBvciA8dHQ+OjplcnJubzwvdHQ+LCBvciA8dHQ+c3RkOjplcnJubzwvdHQ+LCBvcgogIGVsc2UgJmx0O2NlcnJubyZndDsgaXMgdXNlbGVzcy48L3A+CgogIDxwPlR3byBhY2NlcHRhYmxlIGZpeGVzOjwvcD4KICA8dWw+CiAgICA8bGk+PHA+ZXJybm8gbXVzdCBiZSBhIG1hY3JvLiBUaGlzIGlzIHRyaXZpYWxseSBzYXRpc2ZpZWQgYnkgYWRkaW5nPGJyPgogICAgICAgICZuYnNwOyZuYnNwOyNkZWZpbmUgZXJybm8gKDo6c3RkOjplcnJubyk8YnI+CiAgICAgICAgdG8gdGhlIGhlYWRlcnMgaWYgZXJybm8gaXMgbm90IGFscmVhZHkgYSBtYWNyby4gWW91IHRoZW4gYWx3YXlzCiAgICAgICAgd3JpdGUgZXJybm8gd2l0aG91dCBhbnkgc2NvcGUgcXVhbGlmaWNhdGlvbiwgYW5kIGl0IGFsd2F5cyBleHBhbmRzCiAgICAgICAgdG8gYSBjb3JyZWN0IHJlZmVyZW5jZS4gU2luY2UgaXQgaXMgYWx3YXlzIGEgbWFjcm8sIHlvdSBrbm93IHRvCiAgICAgICAgYXZvaWQgdXNpbmcgZXJybm8gYXMgYSBsb2NhbCBpZGVudGlmZXIuPC9wPjwvbGk+CiAgICA8bGk+PHA+ZXJybm8gaXMgaW4gdGhlIGdsb2JhbCBuYW1lc3BhY2UuIFRoaXMgZml4IGlzIGluZmVyaW9yLCBiZWNhdXNlCiAgICAgICAgOjplcnJubyBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSB3ZWxsLWZvcm1lZC48L3A+PC9saT4KICA8L3VsPgoKICA8cD48aT5bCiAgICBUaGlzIGlzc3VlIHdhcyBmaXJzdCByYWlzZWQgaW4gMTk5OSwgYnV0IGl0IHNsaXBwZWQgdGhyb3VnaCAKICAgIHRoZSBjcmFja3MuCiAgXTwvaT48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KICA8cD5DaGFuZ2UgdGhlIE5vdGUgaW4gc2VjdGlvbiAxNy40LjEuMnA1IGZyb208L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBOb3RlOiB0aGUgbmFtZXMgZGVmaW5lZCBhcyBtYWNyb3MgaW4gQyBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CiAgICBhc3NlcnQsIGVycm5vLCBvZmZzZXRvZiwgc2V0am1wLCB2YV9hcmcsIHZhX2VuZCwgYW5kIHZhX3N0YXJ0LgogICAgPC9ibG9ja3F1b3RlPgoKICA8cD50bzwvcD4KCiAgICA8YmxvY2txdW90ZT4KICAgIE5vdGU6IHRoZSBuYW1lcyBkZWZpbmVkIGFzIG1hY3JvcyBpbiBDIGluY2x1ZGUgdGhlIGZvbGxvd2luZzoKICAgIGFzc2VydCwgb2Zmc2V0b2YsIHNldGptcCwgdmFfYXJnLCB2YV9lbmQsIGFuZCB2YV9zdGFydC4KICAgIDwvYmxvY2txdW90ZT4KCiAgPHA+SW4gc2VjdGlvbiAxOS4zLCBjaGFuZ2UgcGFyYWdyYXBoIDIgZnJvbTwvcD4KCiAgICA8YmxvY2txdW90ZT4KICAgIFRoZSBjb250ZW50cyBhcmUgdGhlIHNhbWUgYXMgdGhlIFN0YW5kYXJkIEMgbGlicmFyeSBoZWFkZXIKICAgICZsdDtlcnJuby5oJmd0Oy4KICAgIDwvYmxvY2txdW90ZT4KCiAgPHA+dG88L3A+CgogICAgPGJsb2NrcXVvdGU+CiAgICBUaGUgY29udGVudHMgYXJlIHRoZSBzYW1lIGFzIHRoZSBTdGFuZGFyZCBDIGxpYnJhcnkgaGVhZGVyIAogICAgJmx0O2Vycm5vLmgmZ3Q7LCBleGNlcHQgdGhhdCBlcnJubyBzaGFsbCBiZSBkZWZpbmVkIGFzIGEgbWFjcm8uCiAgICA8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5DKysgbXVzdCBub3QgbGVhdmUgaXQgdXAgdG8gdGhlIGltcGxlbWVudGF0aW9uIHRvIGRlY2lkZSB3aGV0aGVyIG9yCm5vdCBhIG5hbWUgaXMgYSBtYWNybzsgaXQgbXVzdCBleHBsaWNpdGx5IHNwZWNpZnkgZXhhY3RseSB3aGljaCBuYW1lcwphcmUgcmVxdWlyZWQgdG8gYmUgbWFjcm9zLiAgVGhlIG9ubHkgb25lIHRoYXQgcmVhbGx5IHdvcmtzIGlzIGZvciBpdAp0byBiZSBhIG1hY3JvLjwvcD4KCjxwPjxpPltDdXJh52FvOiBhZGRpdGlvbmFsIHJhdGlvbmFsZSBhZGRlZC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzExIj48aDM+MzExLiZuYnNwO0luY29ycmVjdCB3b3JkaW5nIGluIGJhc2ljX29zdHJlYW0gY2xhc3Mgc3lub3BzaXM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbSI+IFtsaWIub3N0cmVhbV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0FuZHkgU2F3eWVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIxIE1hciAyMDAxPC9wPgoKPHA+SW4gMjcuNi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0iPiBbbGliLm9zdHJlYW1dPC9hPiwgdGhlIHN5bm9wc2lzIG9mIGNsYXNzIGJhc2ljX29zdHJlYW0gc2F5czo8L3A+Cgo8cHJlPiAgLy8gcGFydGlhbCBzcGVjaWFsaXphdGlvbnNzCiAgdGVtcGxhdGUmbHQ7Y2xhc3MgdHJhaXRzJmd0OwogICAgYmFzaWNfb3N0cmVhbSZsdDtjaGFyLHRyYWl0cyZndDsmYW1wOyBvcGVyYXRvciZsdDsmbHQ7KCBiYXNpY19vc3RyZWFtJmx0O2NoYXIsdHJhaXRzJmd0OyZhbXA7LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiApOwo8L3ByZT4KCjxwPlByb2JsZW1zOjwvcD4KPHVsPgo8bGk+VG9vIG1hbnkgJ3MncyBhdCB0aGUgZW5kIG9mICJzcGVjaWFsaXphdGlvbnNzIiA8L2xpPgo8bGk+VGhpcyBpcyBhbiBvdmVybG9hZCwgbm90IGEgcGFydGlhbCBzcGVjaWFsaXphdGlvbjwvbGk+CjwvdWw+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSBzeW5vcHNpcyBpbiAyNy42LjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbSI+IFtsaWIub3N0cmVhbV08L2E+LCByZW1vdmUgdGhlIAo8aT4vLyBwYXJ0aWFsIHNwZWNpYWxpemF0aW9uc3M8L2k+IGNvbW1lbnQuICBBbHNvIHJlbW92ZSB0aGUgc2FtZSAKY29tbWVudCAoY29ycmVjdGx5IHNwZWxsZWQsIGJ1dCBzdGlsbCBpbmNvcnJlY3QpIGZyb20gdGhlIHN5bm9wc2lzIGluIAoyNy42LjIuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXIiPiBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl08L2E+Lgo8L3A+Cgo8cD48aT5bClByZS1SZWRtb25kOiBhZGRlZCAyNy42LjIuNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmluc2VydGVycy5jaGFyYWN0ZXIiPiBbbGliLm9zdHJlYW0uaW5zZXJ0ZXJzLmNoYXJhY3Rlcl08L2E+IGJlY2F1c2Ugb2YgTWFydGluJ3MKY29tbWVudCBpbiBjKytzdGQtbGliLTg5MzkuCl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzMTIiPjxoMz4zMTIuJm5ic3A7VGFibGUgMjcgaXMgbWlzc2luZyBoZWFkZXJzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLnV0aWxpdGllcyI+IFtsaWIudXRpbGl0aWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI5IE1hciAyMDAxPC9wPgo8cD5UYWJsZSAyNyBpbiBzZWN0aW9uIDIwIGxpc3RzIHRoZSBoZWFkZXIgJmx0O21lbW9yeSZndDsgKG9ubHkpIGZvcgpNZW1vcnkgKGxpYi5tZW1vcnkpIGJ1dCBuZWdsZWN0cyB0byBtZW50aW9uIHRoZSBoZWFkZXJzCiZsdDtjc3RkbGliJmd0OyBhbmQgJmx0O2NzdHJpbmcmZ3Q7IHRoYXQgYXJlIGRpc2N1c3NlZCBpbiAyMC40LjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmMubWFsbG9jIj4gW2xpYi5jLm1hbGxvY108L2E+LjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5BZGQgJmx0O2NzdGRsaWImZ3Q7IGFuZCAmbHQ7Y3N0cmluZyZndDsgdG8gVGFibGUgMjcsIGluIHRoZSBzYW1lIHJvdwphcyAmbHQ7bWVtb3J5Jmd0Oy48L3A+Cjxocj4KPGEgbmFtZT0iMzE1Ij48aDM+MzE1LiZuYnNwO0JhZCAicmFuZ2UiIGluIGxpc3Q6OnVuaXF1ZSBjb21wbGV4aXR5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm9wcyI+IFtsaWIubGlzdC5vcHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmR5IFNhd3llciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxIE1heSAyMDAxPC9wPgo8cD4KMjMuMi4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5saXN0Lm9wcyI+IFtsaWIubGlzdC5vcHNdPC9hPiwgUGFyYSAyMSBkZXNjcmliZXMgdGhlIGNvbXBsZXhpdHkgb2YKbGlzdDo6dW5pcXVlIGFzOiAiSWYgdGhlIHJhbmdlIChsYXN0IC0gZmlyc3QpIGlzIG5vdCBlbXB0eSwgZXhhY3RseQoobGFzdCAtIGZpcnN0KSAtMSBhcHBsaWNhdGlvbnMgb2YgdGhlIGNvcnJlc3BvbmRpbmcgcHJlZGljYXRlLApvdGhlcndpc2Ugbm8gYXBwbGljYXRpb25zIG9mIHRoZSBwcmVkaWNhdGUpIi4KPC9wPgoKPHA+CiIobGFzdCAtIGZpcnN0KSIgaXMgbm90IGEgcmFuZ2UuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSAicmFuZ2UiIGZyb20gKGxhc3QgLSBmaXJzdCkgdG8gW2ZpcnN0LCBsYXN0KS4KPC9wPgo8aHI+CjxhIG5hbWU9IjMxNiI+PGgzPjMxNi4mbmJzcDtWYWd1ZSB0ZXh0IGluIFRhYmxlIDY5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NCBNYXkgMjAwMTwvcD4KPHA+VGFibGUgNjkgc2F5cyB0aGlzIGFib3V0IGFfdW5pcS5pbnNlcnQodCk6PC9wPgoKPGJsb2NrcXVvdGU+Cmluc2VydHMgdCBpZiBhbmQgb25seSBpZiB0aGVyZSBpcyBubyBlbGVtZW50IGluIHRoZSBjb250YWluZXIgd2l0aCBrZXkKZXF1aXZhbGVudCB0byB0aGUga2V5IG9mIHQuIFRoZSBib29sIGNvbXBvbmVudCBvZiB0aGUgcmV0dXJuZWQgcGFpciAKaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc2VydGlvbiB0YWtlcyBwbGFjZSBhbmQgdGhlIGl0ZXJhdG9yIGNvbXBvbmVudCBvZiB0aGUKcGFpciBwb2ludHMgdG8gdGhlIGVsZW1lbnQgd2l0aCBrZXkgZXF1aXZhbGVudCB0byB0aGUga2V5IG9mIHQuCjwvYmxvY2txdW90ZT4KCjxwPlRoZSBkZXNjcmlwdGlvbiBzaG91bGQgYmUgbW9yZSBzcGVjaWZpYyBhYm91dCBleGFjdGx5IGhvdyB0aGUgYm9vbCBjb21wb25lbnQKaW5kaWNhdGVzIHdoZXRoZXIgdGhlIGluc2VydGlvbiB0YWtlcyBwbGFjZS48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSB0ZXh0IGluIHF1ZXN0aW9uIHRvPC9wPgoKPGJsb2NrcXVvdGU+Ci4uLlRoZSBib29sIGNvbXBvbmVudCBvZiB0aGUgcmV0dXJuZWQgcGFpciBpcyB0cnVlIGlmIGFuZCBvbmx5IGlmIHRoZSBpbnNlcnRpb24KdGFrZXMgcGxhY2UuLi4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjMxNyI+PGgzPjMxNy4mbmJzcDtJbnN0YW50aWF0aW9uIHZzLiBzcGVjaWFsaXphdGlvbiBvZiBmYWNldHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsaXphdGlvbiI+IFtsaWIubG9jYWxpemF0aW9uXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzQgTWF5IDIwMDE8L3A+CjxwPgpUaGUgbG9jYWxpemF0aW9uIHNlY3Rpb24gb2YgdGhlIHN0YW5kYXJkIHJlZmVycyB0byBzcGVjaWFsaXphdGlvbnMgb2YKdGhlIGZhY2V0IHRlbXBsYXRlcyBhcyBpbnN0YW50aWF0aW9ucyBldmVuIHRob3VnaCB0aGUgcmVxdWlyZWQgZmFjZXRzCmFyZSB0eXBpY2FsbHkgc3BlY2lhbGl6ZWQgcmF0aGVyIHRoYW4gZXhwbGljaXRseSAob3IgaW1wbGljaXRseSkKaW5zdGFudGlhdGVkLiBJbiB0aGUgY2FzZSBvZiBjdHlwZSZsdDtjaGFyJmd0OyBhbmQKY3R5cGVfYnluYW1lJmx0O2NoYXImZ3Q7IChhbmQgdGhlIHdjaGFyX3QgdmVyc2lvbnMpLCB0aGVzZSBmYWNldHMgYXJlCmFjdHVhbGx5IHJlcXVpcmVkIHRvIGJlIHNwZWNpYWxpemVkLiBUaGUgdGVybWlub2xvZ3kgc2hvdWxkIGJlCmNvcnJlY3RlZCB0byBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIHN0YW5kYXJkIGRvZXNuJ3QgbWFuZGF0ZSBleHBsaWNpdAppbnN0YW50aWF0aW9uICh0aGUgdGVybSBzcGVjaWFsaXphdGlvbiBlbmNvbXBhc3NlcyBib3RoIGV4cGxpY2l0Cmluc3RhbnRpYXRpb25zIGFuZCBzcGVjaWFsaXphdGlvbnMpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocywgcmVwbGFjZSBhbGwgb2NjdXJyZW5jZXMgb2YgdGhlIHdvcmQKaW5zdGFudGlhdGlvbiBvciBpbnN0YW50aWF0aW9ucyB3aXRoIHNwZWNpYWxpemF0aW9uIG9yIHNwZWNpYWxpemF0aW9ucywKcmVzcGVjdGl2ZWx5Ogo8L3A+Cgo8YmxvY2txdW90ZT4KMjIuMS4xLjEuMSwgcDQsIFRhYmxlIDUyLCAyMi4yLjEuMSwgcDIsIDIyLjIuMS41LCBwMywgMjIuMi4xLjUuMSwgcDUsCjIyLjIuMS41LjIsIHAxMCwgMjIuMi4yLCBwMiwgMjIuMi4zLjEsIHAxLCAyMi4yLjMuMS4yLCBwMSwgcDIgYW5kIHAzLCAKMjIuMi40LjEsIHAxLCAyMi4yLjQuMS4yLCBwMSwgMjIsMiw1LCBwMSwgMjIsMiw2LCBwMiwgMjIuMi42LjMuMiwgcDcsIGFuZApGb290bm90ZSAyNDIuCjwvYmxvY2txdW90ZT4KCjxwPkFuZCBjaGFuZ2UgdGhlIHRleHQgaW4gMjIuMS4xLjEuMSwgcDQgZnJvbTwvcD4KCjxibG9ja3F1b3RlPgogICAgQW4gaW1wbGVtZW50YXRpb24gaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aG9zZSBpbnN0YW50aWF0aW9ucwogICAgZm9yIGZhY2V0IHRlbXBsYXRlcyBpZGVudGlmaWVkIGFzIG1lbWJlcnMgb2YgYSBjYXRlZ29yeSwgYW5kCiAgICBmb3IgdGhvc2Ugc2hvd24gaW4gVGFibGUgNTI6CjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBBbiBpbXBsZW1lbnRhdGlvbiBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRob3NlIHNwZWNpYWxpemF0aW9ucy4uLgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bTmF0aGFuIHdpbGwgcmV2aWV3IHRoZXNlIGNoYW5nZXMsIGFuZCB3aWxsIGxvb2sgZm9yIHBsYWNlcyB3aGVyZQpleHBsaWNpdCBzcGVjaWFsaXphdGlvbiBpcyBuZWNlc3NhcnkuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhpcyBpcyBhIHNpbXBsZSBtYXR0ZXIgb2Ygb3V0ZGF0ZWQgbGFuZ3VhZ2UuICBUaGUgbGFuZ3VhZ2UgdG8KZGVzY3JpYmUgdGVtcGxhdGVzIHdhcyBjbGFyaWZpZWQgZHVyaW5nIHRoZSBzdGFuZGFyZGl6YXRpb24gcHJvY2VzcywKYnV0IHRoZSB3b3JkaW5nIGluIGNsYXVzZSAyMiB3YXMgbmV2ZXIgdXBkYXRlZCB0byByZWZsZWN0IHRoYXQKY2hhbmdlLjwvcD4KPGhyPgo8YSBuYW1lPSIzMTgiPjxoMz4zMTguJm5ic3A7TWlzbGVhZGluZyBjb21tZW50IGluIGRlZmluaXRpb24gb2YgbnVtcHVuY3RfYnluYW1lPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lIj4gW2xpYi5sb2NhbGUubnVtcHVuY3QuYnluYW1lXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIE1heSAyMDAxPC9wPgo8cD5UaGUgZGVmaW5pdGlvbiBvZiB0aGUgbnVtcHVuY3RfYnluYW1lIHRlbXBsYXRlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcKY29tbWVudDo8L3A+Cgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgICB0ZW1wbGF0ZSAmbHQ7Y2xhc3MgY2hhclQmZ3Q7CiAgICAgICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0Jmx0O2NoYXJUJmd0OyB7CiAgICAvLyB0aGlzIGNsYXNzIGlzIHNwZWNpYWxpemVkIGZvciBjaGFyIGFuZCB3Y2hhcl90LgogICAgICAgIC4uLgo8L3ByZT4KCjxwPlRoZXJlIGlzIG5vIGRvY3VtZW50YXRpb24gb2YgdGhlIHNwZWNpYWxpemF0aW9ucyBhbmQgaXQgc2VlbXMKY29uY2VpdmFibGUgdGhhdCBhbiBpbXBsZW1lbnRhdGlvbiB3aWxsIG5vdCBleHBsaWNpdGx5IHNwZWNpYWxpemUgdGhlCnRlbXBsYXRlIGF0IGFsbCwgYnV0IHNpbXBseSBwcm92aWRlIHRoZSBwcmltYXJ5IHRlbXBsYXRlLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIGNvbW1lbnQgZnJvbSB0aGUgdGV4dCBpbiAyMi4yLjMuMiBhbmQgZnJvbSB0aGUgcHJvcG9zZWQKcmVzb2x1dGlvbiBvZiBsaWJyYXJ5IGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyMjgiPjIyODwvYT4uPC9wPgo8aHI+CjxhIG5hbWU9IjMxOSI+PGgzPjMxOS4mbmJzcDtTdG9yYWdlIGFsbG9jYXRpb24gd29yZGluZyBjb25mdXNlcyAiUmVxdWlyZWQgYmVoYXZpb3IiLCAiUmVxdWlyZXMiPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLnNpbmdsZSI+IFtsaWIubmV3LmRlbGV0ZS5zaW5nbGVdPC9hPiwgMTguNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLmFycmF5Ij4gW2xpYi5uZXcuZGVsZXRlLmFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QmVtYW4gRGF3ZXMmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTUgTWF5IDIwMDE8L3A+CjxwPlRoZSBzdGFuZGFyZCBzcGVjaWZpZXMgMTcuMy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuc3RydWN0dXJlLnNwZWNpZmljYXRpb25zIj4gW2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnNdPC9hPiB0aGF0ICJSZXF1aXJlZApiZWhhdmlvciIgZWxlbWVudHMgZGVzY3JpYmUgInRoZSBzZW1hbnRpY3Mgb2YgYSBmdW5jdGlvbiBkZWZpbml0aW9uCnByb3ZpZGVkIGJ5IGVpdGhlciB0aGUgaW1wbGVtZW50YXRpb24gb3IgYSBDKysgcHJvZ3JhbS4iPC9wPgoKPHA+VGhlIHN0YW5kYXJkIHNwZWNpZmllcyAxNy4zLjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5zdHJ1Y3R1cmUuc3BlY2lmaWNhdGlvbnMiPiBbbGliLnN0cnVjdHVyZS5zcGVjaWZpY2F0aW9uc108L2E+IHRoYXQgIlJlcXVpcmVzIgplbGVtZW50cyBkZXNjcmliZSAidGhlIHByZWNvbmRpdGlvbnMgZm9yIGNhbGxpbmcgdGhlIGZ1bmN0aW9uLiI8L3A+Cgo8cD5JbiB0aGUgc2VjdGlvbnMgbm90ZWQgYmVsb3csIHRoZSBjdXJyZW50IHdvcmRpbmcgc3BlY2lmaWVzCiJSZXF1aXJlZCBCZWhhdmlvciIgZm9yIHdoYXQgYXJlIGFjdHVhbGx5IHByZWNvbmRpdGlvbnMsIGFuZCB0aHVzCnNob3VsZCBiZSBzcGVjaWZpZWQgYXMgIlJlcXVpcmVzIi48L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5JbiAxOC40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuc2luZ2xlIj4gW2xpYi5uZXcuZGVsZXRlLnNpbmdsZV08L2E+IFBhcmEgMTIgQ2hhbmdlOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+UmVxdWlyZWQgYmVoYXZpb3I6IGFjY2VwdCBhIHZhbHVlIG9mIHB0ciB0aGF0IGlzIG51bGwgb3IgdGhhdCB3YXMKICByZXR1cm5lZCBieSBhbiBlYXJsaWVyIGNhbGwgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KPGJsb2NrcXVvdGU+CiAgPHA+UmVxdWlyZXM6IHRoZSB2YWx1ZSBvZiBwdHIgaXMgbnVsbCBvciB0aGUgdmFsdWUgcmV0dXJuZWQgYnkgYW4KICBlYXJsaWVyIGNhbGwgLi4uPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAxOC40LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLm5ldy5kZWxldGUuYXJyYXkiPiBbbGliLm5ldy5kZWxldGUuYXJyYXldPC9hPiBQYXJhIDExIENoYW5nZTo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVkIGJlaGF2aW9yOiBhY2NlcHQgYSB2YWx1ZSBvZiBwdHIgdGhhdCBpcyBudWxsIG9yIHRoYXQgd2FzCiAgcmV0dXJuZWQgYnkgYW4gZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgo8cD50bzo8L3A+CjxibG9ja3F1b3RlPgogIDxwPlJlcXVpcmVzOiB0aGUgdmFsdWUgb2YgcHRyIGlzIG51bGwgb3IgdGhlIHZhbHVlIHJldHVybmVkIGJ5IGFuCiAgZWFybGllciBjYWxsIC4uLjwvcD4KPC9ibG9ja3F1b3RlPgoKPGhyPgo8YSBuYW1lPSIzMjAiPjxoMz4zMjAuJm5ic3A7bGlzdDo6YXNzaWduIG92ZXJzcGVjaWZpZWQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjIuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmxpc3QuY29ucyI+IFtsaWIubGlzdC5jb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7SG93YXJkIEhpbm5hbnQmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTWF5IDIwMDE8L3A+CjxwPgpTZWN0aW9uIDIzLjIuMi4xLCBwYXJhZ3JhcGhzIDYtOCBzcGVjaWZ5IHRoYXQgbGlzdCBhc3NpZ24gKGJvdGggZm9ybXMpIGhhdmUKdGhlICJlZmZlY3RzIiBvZiBhIGNhbGwgdG8gZXJhc2UgZm9sbG93ZWQgYnkgYSBjYWxsIHRvIGluc2VydC4KPC9wPgoKPHA+Ckkgd291bGQgbGlrZSB0byBkb2N1bWVudCB0aGF0IGltcGxlbWVudGVycyBoYXZlIHRoZSBmcmVlZG9tIHRvIGltcGxlbWVudCAKYXNzaWduIGJ5IG90aGVyIG1ldGhvZHMsIGFzIGxvbmcgYXMgdGhlIGVuZCByZXN1bHQgaXMgdGhlIHNhbWUgYW5kIHRoZSAKZXhjZXB0aW9uIGd1YXJhbnRlZSBpcyBhcyBnb29kIG9yIGJldHRlciB0aGFuIHRoZSBiYXNpYyBndWFyYW50ZWUuCjwvcD4KCjxwPgpUaGUgbW90aXZhdGlvbiBmb3IgdGhpcyBpcyB0byB1c2UgVCdzIGFzc2lnbm1lbnQgb3BlcmF0b3IgdG8gcmVjeWNsZQpleGlzdGluZyBub2RlcyBpbiB0aGUgbGlzdCBpbnN0ZWFkIG9mIGVyYXNpbmcgdGhlbSBhbmQgcmVhbGxvY2F0aW5nCnRoZW0gd2l0aCBuZXcgdmFsdWVzLiAgSXQgaXMgYWxzbyB3b3J0aCBub3RpbmcgdGhhdCwgd2l0aCBjYXJlZnVsCmNvZGluZywgbW9zdCBjb21tb24gY2FzZXMgb2YgYXNzaWduIChldmVyeXRoaW5nIGJ1dCBhc3NpZ25tZW50IHdpdGgKdHJ1ZSBpbnB1dCBpdGVyYXRvcnMpIGNhbiBlbGV2YXRlIHRoZSBleGNlcHRpb24gc2FmZXR5IHRvIHN0cm9uZyBpZgpUJ3MgYXNzaWdubWVudCBoYXMgYSBub3Rocm93IGd1YXJhbnRlZSAod2l0aCBubyBleHRyYSBtZW1vcnkgY29zdCkuCk1ldHJvd2Vya3MgZG9lcyB0aGlzLiAgSG93ZXZlciBJIGRvIG5vdCBwcm9wb3NlIHRoYXQgdGhpcyBzdWJ0bGV0eSBiZQpzdGFuZGFyZGl6ZWQuICBJdCBpcyBhIFFvSSBpc3N1ZS4gIDwvcD4KCjxwPkV4aXN0aW5nIHByYWN0aXNlOgpNZXRyb3dlcmtzIGFuZCBTR0kgcmVjeWNsZSBub2RlcywgRGlua3Vtd2FyZSBhbmQgUm9ndWUgV2F2ZSBkb24ndC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyMy4yLjIuMS83IGZyb206PC9wPgoKPGJsb2NrcXVvdGU+CjxwPkVmZmVjdHM6PC9wPgoKPHByZT4gICBlcmFzZShiZWdpbigpLCBlbmQoKSk7CiAgIGluc2VydChiZWdpbigpLCBmaXJzdCwgbGFzdCk7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+RWZmZWN0czogUmVwbGFjZXMgdGhlIGNvbnRlbnRzIG9mIHRoZSBsaXN0IHdpdGggdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCkuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5JbiAyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+LCBpbiBUYWJsZSA2NyAoc2VxdWVuY2UgcmVxdWlyZW1lbnRzKSwgCmFkZCB0d28gbmV3IHJvd3M6PC9wPgo8cHJlPiAgICAgIGEuYXNzaWduKGksaikgICAgIHZvaWQgICAgICBwcmU6IGksaiBhcmUgbm90IGl0ZXJhdG9ycyBpbnRvIGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyBlbGVtZW50cyBpbiBhIHdpdGggYSBjb3B5CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBbaSwgaikuCgogICAgICBhLmFzc2lnbihuLHQpICAgICB2b2lkICAgICAgcHJlOiB0IGlzIG5vdCBhIHJlZmVyZW5jZSBpbnRvIGEuCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXBsYWNlcyBlbGVtZW50cyBpbiBhIHdpdGggbiBjb3BpZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9mIHQuCjwvcHJlPgoKPHA+Q2hhbmdlIDIzLjIuMi4xLzggZnJvbTo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+RWZmZWN0czo8L3A+CjxwcmU+ICAgZXJhc2UoYmVnaW4oKSwgZW5kKCkpOwogICBpbnNlcnQoYmVnaW4oKSwgbiwgdCk7CjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD5FZmZlY3RzOiBSZXBsYWNlcyB0aGUgY29udGVudHMgb2YgdGhlIGxpc3Qgd2l0aCBuIGNvcGllcyBvZiB0LjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1JlZG1vbmQ6IFByb3Bvc2VkIHJlc29sdXRpb24gd2FzIGNoYW5nZWQgc2xpZ2h0bHkuICBQcmV2aW91cwp2ZXJzaW9uIG1hZGUgZXhwbGljaXQgc3RhdGVtZW50IGFib3V0IGV4Y2VwdGlvbiBzYWZldHksIHdoaWNoIHdhc24ndApjb25zaXN0ZW50IHdpdGggdGhlIHdheSBleGNlcHRpb24gc2FmZXR5IGlzIGV4cHJlc3NlZCBlbHNld2hlcmUuCkFsc28sIHRoZSBjaGFuZ2UgaW4gdGhlIHNlcXVlbmNlIHJlcXVpcmVtZW50cyBpcyBuZXcuICBXaXRob3V0IHRoYXQKY2hhbmdlLCB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiB3b3VsZCBoYXZlIHJlcXVpcmVkIHRoYXQgYXNzaWdubWVudCBvZgphIHN1YnJhbmdlIHdvdWxkIGhhdmUgdG8gd29yay4gIFRoYXQgdG9vIHdvdWxkIGhhdmUgYmVlbgpvdmVyc3BlY2lmaWNhdGlvbjsgaXQgd291bGQgZWZmZWN0aXZlbHkgbWFuZGF0ZSB0aGF0IGFzc2lnbm1lbnQgdXNlIGEKdGVtcG9yYXJ5LiAgSG93YXJkIHByb3ZpZGVkIHdvcmRpbmcuCl08L2k+PC9wPgoKPHA+PGk+W0N1cmHnYW86IE1hZGUgZWRpdG9yaWFsIGltcHJvdmVtZW50IGluIHdvcmRpbmc7IGNoYW5nZWQKIlJlcGxhY2VzIGVsZW1lbnRzIGluIGEgd2l0aCBjb3BpZXMgb2YgZWxlbWVudHMgaW4gW2ksIGopLiIKd2l0aCAiUmVwbGFjZXMgdGhlIGVsZW1lbnRzIG9mIGEgd2l0aCBhIGNvcHkgb2YgW2ksIGopLiIKQ2hhbmdlcyBub3QgZGVlbWVkIHNlcmlvdXMgZW5vdWdoIHRvIHJlcXVyZSByZXJldmlldy5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzIxIj48aDM+MzIxLiZuYnNwO1R5cG8gaW4gbnVtX2dldDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzIj4gW2xpYi5mYWNldC5udW0uZ2V0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7S2V2aW4gRGphbmcmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTWF5IDIwMDE8L3A+CjxwPgpTZWN0aW9uIDIyLjIuMi4xLjIgYXQgcDcgc3RhdGVzIHRoYXQgIkEgbGVuZ3RoIHNwZWNpZmllciBpcyBhZGRlZCB0bwp0aGUgY29udmVyc2lvbiBmdW5jdGlvbiwgaWYgbmVlZGVkLCBhcyBpbmRpY2F0ZWQgaW4gVGFibGUgNTYuIgpIb3dldmVyLCBUYWJsZSA1NiB1c2VzIHRoZSB0ZXJtICJsZW5ndGggbW9kaWZpZXIiLCBub3QgImxlbmd0aApzcGVjaWZpZXIiLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDIyLjIuMi4xLjIgYXQgcDcsIGNoYW5nZSB0aGUgdGV4dCAiQSBsZW5ndGggc3BlY2lmaWVyIGlzIGFkZGVkIC4uLiIKdG8gYmUgIkEgbGVuZ3RoIG1vZGlmaWVyIGlzIGFkZGVkIC4uLiIKPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+QyB1c2VzIHRoZSB0ZXJtICJsZW5ndGggbW9kaWZpZXIiLiAgV2Ugc2hvdWxkIGJlIGNvbnNpc3RlbnQuPC9wPgo8aHI+CjxhIG5hbWU9IjMyMiI+PGgzPjMyMi4mbmJzcDtpdGVyYXRvciBhbmQgY29uc3RfaXRlcmF0b3Igc2hvdWxkIGhhdmUgdGhlIHNhbWUgdmFsdWUgdHlwZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IE1heSAyMDAxPC9wPgo8cD4KSXQncyB3aWRlbHkgYXNzdW1lZCB0aGF0LCBpZiBYIGlzIGEgY29udGFpbmVyLAppdGVyYXRvcl90cmFpdHMmbHQ7WDo6aXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlIGFuZAppdGVyYXRvcl90cmFpdHMmbHQ7WDo6Y29uc3RfaXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlIHNob3VsZCBib3RoIGJlClg6OnZhbHVlX3R5cGUuICBIb3dldmVyLCB0aGlzIGlzIG5vd2hlcmUgc3RhdGVkLiAgVGhlIGxhbmd1YWdlIGluClRhYmxlIDY1IGlzIG5vdCBwcmVjaXNlIGFib3V0IHRoZSBpdGVyYXRvcnMnIHZhbHVlIHR5cGVzIChpdCBwcmVkYXRlcwppdGVyYXRvcl90cmFpdHMpLCBhbmQgY291bGQgZXZlbiBiZSBpbnRlcnByZXRlZCBhcyBzYXlpbmcgdGhhdAppdGVyYXRvcl90cmFpdHMmbHQ7WDo6Y29uc3RfaXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlIHNob3VsZCBiZSAiY29uc3QKWDo6dmFsdWVfdHlwZSIuCjwvcD4KCjxwPlJlbGF0ZWQgaXNzdWU6IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWNsb3NlZC5odG1sIzI3OSI+Mjc5PC9hPi48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gVGFibGUgNjUgKCJDb250YWluZXIgUmVxdWlyZW1lbnRzIiksIGNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgZm9yClg6Oml0ZXJhdG9yIHRvICJpdGVyYXRvciB0eXBlIHdob3NlIHZhbHVlIHR5cGUgaXMgVCIuICBDaGFuZ2UgdGhlCnJldHVybiB0eXBlIGZvciBYOjpjb25zdF9pdGVyYXRvciB0byAiY29uc3RhbnQgaXRlcmF0b3IgdHlwZSB3aG9zZQp2YWx1ZSB0eXBlIGlzIFQiLjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGJlbG9uZ3MgYXMgYSBjb250YWluZXIgcmVxdWlyZW1lbnQsIHJhdGhlciB0aGFuIGFuIGl0ZXJhdG9yCnJlcXVpcmVtZW50LCBiZWNhdXNlIHRoZSB3aG9sZSBub3Rpb24gb2YgaXRlcmF0b3IvY29uc3RfaXRlcmF0b3IKcGFpcnMgaXMgc3BlY2lmaWMgdG8gY29udGFpbmVycycgaXRlcmF0b3IuCjwvcD4KPHA+Ckl0IGlzIGV4aXN0aW5nIHByYWN0aWNlIHRoYXQgKGZvciBleGFtcGxlKSAKaXRlcmF0b3JfdHJhaXRzJmx0O2xpc3QmbHQ7aW50Jmd0Ozo6Y29uc3RfaXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlCmlzICJpbnQiLCByYXRoZXIgdGhhbiAiY29uc3QgaW50Ii4gIFRoaXMgaXMgY29uc2lzdGVudCB3aXRoCnRoZSB3YXkgdGhhdCBjb25zdCBwb2ludGVycyBhcmUgaGFuZGxlZDogdGhlIHN0YW5kYXJkIGFscmVhZHkgCnJlcXVpcmVzIHRoYXQgaXRlcmF0b3JfdHJhaXRzJmx0O2NvbnN0IGludComZ3Q7Ojp2YWx1ZV90eXBlIGlzIGludC4KPC9wPgo8aHI+CjxhIG5hbWU9IjMyNCI+PGgzPjMyNC4mbmJzcDtEbyBvdXRwdXQgaXRlcmF0b3JzIGhhdmUgdmFsdWUgdHlwZXM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5vdXRwdXQuaXRlcmF0b3JzIj4gW2xpYi5vdXRwdXQuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IEp1bmUgMjAwMTwvcD4KCjxwPlRhYmxlIDczIHN1Z2dlc3RzIHRoYXQgb3V0cHV0IGl0ZXJhdG9ycyBoYXZlIHZhbHVlIHR5cGVzLiAgSXQgCnJlcXVpcmVzIHRoZSBleHByZXNzaW9uICIqYSA9IHQiLiAgQWRkaXRpb25hbGx5LCBhbHRob3VnaCBUYWJsZSA3MwpuZXZlciBsaXN0cyAiYSA9IHQiIG9yICJYKGEpID0gdCIgaW4gdGhlICJleHByZXNzaW9ucyIgY29sdW1uLCBpdApjb250YWlucyBhIG5vdGUgc2F5aW5nIHRoYXQgImEgPSB0IiBhbmQgIlgoYSkgPSB0IiBoYXZlIGVxdWl2YWxlbnQKKGJ1dCBub3doZXJlIHNwZWNpZmllZCEpIHNlbWFudGljcy48L3A+Cgo8cD5BY2NvcmRpbmcgdG8gMjQuMS85LCB0IGlzIHN1cHBvc2VkIHRvIGJlICJhIHZhbHVlIG9mIHZhbHVlIHR5cGUKVCI6PC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgYSBhbmQgYiBkZW5vdGUgdmFsdWVzIG9mIFgsIG4gZGVub3RlcyBhCiAgICB2YWx1ZSBvZiB0aGUgZGlmZmVyZW5jZSB0eXBlIERpc3RhbmNlLCB1LCB0bXAsIGFuZCBtIGRlbm90ZQogICAgaWRlbnRpZmllcnMsIHIgZGVub3RlcyBhIHZhbHVlIG9mIFgmYW1wOywgdCBkZW5vdGVzIGEgdmFsdWUgb2YKICAgIHZhbHVlIHR5cGUgVC4KICAgIDwvYmxvY2txdW90ZT4KCjxwPlR3byBvdGhlciBwYXJ0cyBvZiB0aGUgc3RhbmRhcmQgdGhhdCBhcmUgcmVsZXZhbnQgdG8gd2hldGhlcgpvdXRwdXQgaXRlcmF0b3JzIGhhdmUgdmFsdWUgdHlwZXM6PC9wPgoKPHVsPgogICAgPGxpPjI0LjEvMSBzYXlzICJBbGwgaXRlcmF0b3JzIGkgc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiAqaSwKICAgIHJlc3VsdGluZyBpbiBhIHZhbHVlIG9mIHNvbWUgY2xhc3MsIGVudW1lcmF0aW9uLCBvciBidWlsdC1pbiB0eXBlCiAgICBULCBjYWxsZWQgdGhlIHZhbHVlIHR5cGUgb2YgdGhlIGl0ZXJhdG9yIi48L2xpPgoKICAgIDxsaT4KICAgIDI0LjMuMS8xLCB3aGljaCBzYXlzICJJbiB0aGUgY2FzZSBvZiBhbiBvdXRwdXQgaXRlcmF0b3IsIHRoZSB0eXBlcwogICAgaXRlcmF0b3JfdHJhaXRzJmx0O0l0ZXJhdG9yJmd0Ozo6ZGlmZmVyZW5jZV90eXBlCiAgICBpdGVyYXRvcl90cmFpdHMmbHQ7SXRlcmF0b3ImZ3Q7Ojp2YWx1ZV90eXBlIGFyZSBib3RoIGRlZmluZWQgYXMgdm9pZC4iCiAgICA8L2xpPgo8L3VsPgoKPHA+VGhlIGZpcnN0IG9mIHRoZXNlIHBhc3NhZ2VzIHN1Z2dlc3RzIHRoYXQgIippIiBpcyBzdXBwb3NlZCB0bwpyZXR1cm4gYSB1c2VmdWwgdmFsdWUsIHdoaWNoIGNvbnRyYWRpY3RzIHRoZSBub3RlIGluIDI0LjEuMi8yIHNheWluZwp0aGF0IHRoZSBvbmx5IHZhbGlkIHVzZSBvZiAiKmkiIGZvciBvdXRwdXQgaXRlcmF0b3JzIGlzIGluIGFuCmV4cHJlc3Npb24gb2YgdGhlIGZvcm0gIippID0gdCIuICBUaGUgc2Vjb25kIG9mIHRoZXNlIHBhc3NhZ2VzIGFwcGVhcnMKdG8gY29udHJhZGljdCBUYWJsZSA3MywgYmVjYXVzZSBpdCBzdWdnZXN0cyB0aGF0ICIqaSIncyByZXR1cm4gdmFsdWUKc2hvdWxkIGJlIHZvaWQuICBUaGUgc2Vjb25kIHBhc3NhZ2UgaXMgYWxzbyBicm9rZW4gaW4gdGhlIGNhc2Ugb2YgYSBhbgppdGVyYXRvciB0eXBlLCBsaWtlIG5vbi1jb25zdCBwb2ludGVycywgdGhhdCBzYXRpc2ZpZXMgYm90aCB0aGUgb3V0cHV0Cml0ZXJhdG9yIHJlcXVpcmVtZW50cyBhbmQgdGhlIGZvcndhcmQgaXRlcmF0b3IgcmVxdWlyZW1lbnRzLjwvcD4KCjxwPldoYXQgc2hvdWxkIHRoZSBzdGFuZGFyZCBzYXkgYWJvdXQgPHR0PippPC90dD4ncyByZXR1cm4gdmFsdWUgd2hlbgppIGlzIGFuIG91dHB1dCBpdGVyYXRvciwgYW5kIHdoYXQgc2hvdWxkIGl0IHNheSBhYm91dCB0aGF0IHQgaXMgaW4gdGhlCmV4cHJlc3Npb24gIippID0gdCI/ICBGaW5hbGx5LCBzaG91bGQgdGhlIHN0YW5kYXJkIHNheSBhbnl0aGluZyBhYm91dApvdXRwdXQgaXRlcmF0b3JzJyBwb2ludGVyIGFuZCByZWZlcmVuY2UgdHlwZXM/PC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4yNC4xIHAxLCBjaGFuZ2U8L3A+Cgo8YmxvY2txdW90ZT4KPHA+QWxsIGl0ZXJhdG9ycyA8dHQ+aTwvdHQ+IHN1cHBvcnQgdGhlIGV4cHJlc3Npb24gPHR0PippPC90dD4sIHJlc3VsdGluZwppbiBhIHZhbHVlIG9mIHNvbWUgY2xhc3MsIGVudW1lcmF0aW9uLCBvciBidWlsdC1pbiB0eXBlIDx0dD5UPC90dD4sCmNhbGxlZCB0aGUgdmFsdWUgdHlwZSBvZiB0aGUgaXRlcmF0b3IuPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgo8cD5BbGwgaW5wdXQgaXRlcmF0b3JzIDx0dD5pPC90dD4gc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiA8dHQ+Kmk8L3R0PiwKcmVzdWx0aW5nIGluIGEgdmFsdWUgb2Ygc29tZSBjbGFzcywgZW51bWVyYXRpb24sIG9yIGJ1aWx0LWluIHR5cGUKPHR0PlQ8L3R0PiwgY2FsbGVkIHRoZSB2YWx1ZSB0eXBlIG9mIHRoZSBpdGVyYXRvci4gQWxsIG91dHB1dAppdGVyYXRvcnMgc3VwcG9ydCB0aGUgZXhwcmVzc2lvbiA8dHQ+KmkgPSBvPC90dD4gd2hlcmUgPHR0Pm88L3R0PiBpcyBhCnZhbHVlIG9mIHNvbWUgdHlwZSB0aGF0IGlzIGluIHRoZSBzZXQgb2YgdHlwZXMgdGhhdCBhcmUgPGk+d3JpdGFibGU8L2k+IHRvCnRoZSBwYXJ0aWN1bGFyIGl0ZXJhdG9yIHR5cGUgb2YgPHR0Pmk8L3R0Pi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNC4xIHA5LCBhZGQ8L3A+Cgo8YmxvY2txdW90ZT4KPHA+PHR0Pm88L3R0PiBkZW5vdGVzIGEgdmFsdWUgb2Ygc29tZSB0eXBlIHRoYXQgaXMgd3JpdGFibGUgdG8gdGhlCm91dHB1dCBpdGVyYXRvci4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5UYWJsZSA3MywgY2hhbmdlPC9wPgoKPGJsb2NrcXVvdGU+CjxwcmU+KmEgPSB0CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPipyID0gbwo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+YW5kIGNoYW5nZTwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPipyKysgPSB0CjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgo8cHJlPipyKysgPSBvCjwvcHJlPgo8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bcG9zdC1SZWRtb25kOiBKZXJlbXkgcHJvdmlkZWQgd29yZGluZ108L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3B0aW9uczogY2hhbmdlIGFsbCBvZiB0aGUgbGFuZ3VhZ2UgdGhhdApzZWVtcyB0byBpbXBseSB0aGF0IG91dHB1dCBpdGVyYXRvcnMgaGF2ZSB2YWx1ZSB0eXBlcywgdGh1cyBtYWtpbmcgaXQKY2xlYXIgdGhhdCBvdXRwdXQgaXRlcmF0b3JzIGhhdmUgbm8gdmFsdWUgdHlwZXMsIG9yIGVsc2UgZGVmaW5lIHZhbHVlCnR5cGVzIGZvciBvdXRwdXQgaXRlcmF0b3IgY29uc2lzdGVudGx5LiAgVGhlIExXRyBjaG9zZSB0aGUgZm9ybWVyCm9wdGlvbiwgYmVjYXVzZSBpdCBzZWVtcyBjbGVhciB0aGF0IG91dHB1dCBpdGVyYXRvcnMgd2VyZSBuZXZlcgppbnRlbmRlZCB0byBoYXZlIHZhbHVlIHR5cGVzLiAgVGhpcyB3YXMgYSBkZWxpYmVyYXRlIGRlc2lnbiBkZWNpc2lvbiwKYW5kIGFueSBsYW5ndWFnZSBzdWdnZXN0aW5nIG90aGVyd2lzZSBpcyBzaW1wbHkgYSBtaXN0YWtlLjwvcD4KCjxwPkEgZnV0dXJlIHJldmlzaW9uIG9mIHRoZSBzdGFuZGFyZCBtYXkgd2lzaCB0byByZXZpc2l0IHRoaXMgZGVzaWduCmRlY2lzaW9uLjwvcD4KPGhyPgo8YSBuYW1lPSIzMjUiPjxoMz4zMjUuJm5ic3A7TWlzbGVhZGluZyB0ZXh0IGluIG1vbmV5cHVuY3QmbHQ7Jmd0Ozo6ZG9fZ3JvdXBpbmc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjYuMy4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm1vbmV5cHVuY3QudmlydHVhbHMiPiBbbGliLmxvY2FsZS5tb25leXB1bmN0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIEp1bCAyMDAxPC9wPgo8cD5UaGUgUmV0dXJucyBjbGF1c2UgaW4gMjIuMi42LjMuMiwgcDMgc2F5cyBhYm91dAptb25leXB1bmN0Jmx0O2NoYXJUJmd0Ozo6ZG9fZ3JvdXBpbmcoKQo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIFJldHVybnM6IEEgcGF0dGVybiBkZWZpbmVkIGlkZW50aWNhbGx5IGFzIHRoZSByZXN1bHQgb2YKICAgIG51bXB1bmN0Jmx0O2NoYXJUJmd0Ozo6ZG9fZ3JvdXBpbmcoKS4yNDEpCjwvYmxvY2txdW90ZT4KCjxwPkZvb3Rub3RlIDI0MSB0aGVuIHJlYWRzPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBUaGlzIGlzIG1vc3QgY29tbW9ubHkgdGhlIHZhbHVlICJcMDAzIiAobm90ICIzIikuCjwvYmxvY2txdW90ZT4KCjxwPgpUaGUgcmV0dXJucyBjbGF1c2Ugc2VlbXMgdG8gaW1wbHkgdGhhdCB0aGUgdHdvIG1lbWJlciBmdW5jdGlvbnMgbXVzdApyZXR1cm4gYW4gaWRlbnRpY2FsIHZhbHVlIHdoaWNoIGluIHJlYWxpdHkgbWF5IG9yIG1heSBub3QgYmUgdHJ1ZSwKc2luY2UgdGhlIGZhY2V0cyBhcmUgdXN1YWxseSBpbXBsZW1lbnRlZCBpbiB0ZXJtcyBvZiBzdHJ1Y3Qgc3RkOjpsY29udgphbmQgcmV0dXJuIHRoZSB2YWx1ZSBvZiB0aGUgZ3JvdXBpbmcgYW5kIG1vbl9ncm91cGluZywgcmVzcGVjdGl2ZWx5LgpUaGUgZm9vdG5vdGUgYWxzbyBpbXBsaWVzIHRoYXQgdGhlIG1lbWJlciBmdW5jdGlvbiBvZiB0aGUgbW9uZXlwdW5jdApmYWNldCAocmF0aGVyIHRoYW4gdGhlIG92ZXJyaWRkZW4gdmlydHVhbCBmdW5jdGlvbnMgaW4gbW9uZXlwdW5jdF9ieW5hbWUpCm1vc3QgY29tbW9ubHkgcmV0dXJuICJcMDAzIiwgd2hpY2ggY29udHJhZGljdHMgdGhlIEMgc3RhbmRhcmQgd2hpY2gKc3BlY2lmaWVzIHRoZSB2YWx1ZSBvZiAiIiBmb3IgdGhlIChtb3N0IGNvbW1vbikgQyBsb2NhbGUuCjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgdGV4dCBpbiBSZXR1cm5zIGNsYXVzZSBpbiAyMi4yLjYuMy4yLCBwMyB3aXRoIHRoZSBmb2xsb3dpbmc6PC9wPgoKPGJsb2NrcXVvdGU+CiAgICBSZXR1cm5zOiBBIHBhdHRlcm4gZGVmaW5lZCBpZGVudGljYWxseSBhcywgYnV0IG5vdCBuZWNlc3NhcmlseQogICAgZXF1YWwgdG8sIHRoZSByZXN1bHQgb2YgbnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7Ojpkb19ncm91cGluZygpLjI0MSkKPC9ibG9ja3F1b3RlPgoKPHA+YW5kIHJlcGxhY2UgdGhlIHRleHQgaW4gRm9vdG5vdGUgMjQxIHdpdGggdGhlIGZvbGxvd2luZzo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIFRvIHNwZWNpZnkgZ3JvdXBpbmcgYnkgM3MgdGhlIHZhbHVlIGlzICJcMDAzIiwgbm90ICIzIi4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBmdW5kYW1lbnRhbCBwcm9ibGVtIGlzIHRoYXQgdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBsb2NhbGUgZmFjZXQKdmlydHVhbHMgc2VydmVzIHR3byBwdXJwb3NlczogZGVzY3JpYmluZyB0aGUgYmVoYXZpb3Igb2YgdGhlIGJhc2UKY2xhc3MsIGFuZCBkZXNjcmliaW5nIHRoZSBtZWFuaW5nIG9mIGFuZCBjb25zdHJhaW50cyBvbiB0aGUgYmVoYXZpb3IKaW4gYXJiaXRyYXJ5IGRlcml2ZWQgY2xhc3Nlcy4gIFRoZSBuZXcgd29yZGluZyBtYWtlcyB0aGF0IHNlcGFyYXRpb24gYQpsaXR0bGUgYml0IGNsZWFyZXIuICBUaGUgZm9vdG5vdGUgKHdoaWNoIGlzIG5vbm5vcm1hdGl2ZSkgaXMgbm90CnN1cHBvc2VkIHRvIHNheSB3aGF0IHRoZSBncm91cGluZyBpcyBpbiB0aGUgIkMiIGxvY2FsZSBvciBpbiBhbnkgb3RoZXIKbG9jYWxlLiBJdCBpcyBqdXN0IGEgcmVtaW5kZXIgdGhhdCB0aGUgdmFsdWVzIGFyZSBpbnRlcnByZXRlZCBhcyBzbWFsbAppbnRlZ2Vycywgbm90IEFTQ0lJIGNoYXJhY3RlcnMuCjwvcD4KPGhyPgo8YSBuYW1lPSIzMjciPjxoMz4zMjcuJm5ic3A7VHlwbyBpbiB0aW1lX2dldCBmYWNldCBpbiB0YWJsZSA1MjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1Rpa2kgV2FuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA2IEp1bCAyMDAxPC9wPgo8cD5UaGUgPHR0PndjaGFyX3Q8L3R0PiB2ZXJzaW9ucyBvZiA8dHQ+dGltZV9nZXQ8L3R0PiBhbmQKPHR0PnRpbWVfZ2V0X2J5bmFtZTwvdHQ+IGFyZSBsaXN0ZWQgaW5jb3JyZWN0bHkgaW4gdGFibGUgNTIsCnJlcXVpcmVkIGluc3RhbnRpYXRpb25zLiAgSW4gYm90aCBjYXNlcyB0aGUgc2Vjb25kIHRlbXBsYXRlCnBhcmFtZXRlciBpcyBnaXZlbiBhcyBPdXRwdXRJdGVyYXRvci4gIEl0IHNob3VsZCBpbnN0ZWFkIGJlCklucHV0SXRlcmF0b3IsIHNpbmNlIHRoZXNlIGFyZSBpbnB1dCBmYWNldHMuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiB0YWJsZSA1MiwgcmVxdWlyZWQgaW5zdGFudGlhdGlvbnMsIGluIAoyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiwgY2hhbmdlPC9wPgo8cHJlPiAgICB0aW1lX2dldCZsdDt3Y2hhcl90LCBPdXRwdXRJdGVyYXRvciZndDsKICAgIHRpbWVfZ2V0X2J5bmFtZSZsdDt3Y2hhcl90LCBPdXRwdXRJdGVyYXRvciZndDsKPC9wcmU+CjxwPnRvPC9wPgo8cHJlPiAgICB0aW1lX2dldCZsdDt3Y2hhcl90LCBJbnB1dEl0ZXJhdG9yJmd0OwogICAgdGltZV9nZXRfYnluYW1lJmx0O3djaGFyX3QsIElucHV0SXRlcmF0b3ImZ3Q7CjwvcHJlPgoKPHA+PGk+W1JlZG1vbmQ6IFZlcnkgbWlub3IgY2hhbmdlIGluIHByb3Bvc2VkIHJlc29sdXRpb24uICBPcmlnaW5hbCBoYWQKYSB0eXBvLCB3Y2hhcnQgaW5zdGVhZCBvZiB3Y2hhcl90Ll08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzMjgiPjxoMz4zMjguJm5ic3A7QmFkIHNwcmludGYgZm9ybWF0IG1vZGlmaWVyIGluIG1vbmV5X3B1dCZsdDsmZ3Q7Ojpkb19wdXQoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuNi4yLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubW9uZXkucHV0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUubW9uZXkucHV0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA3IEp1bCAyMDAxPC9wPgo8cD5UaGUgc3ByaW50ZiBmb3JtYXQgc3RyaW5nICwgIiUuMDFmIiAodGhhdCdzIHRoZSBkaWdpdCBvbmUpLCBpbiB0aGUKZGVzY3JpcHRpb24gb2YgdGhlIGRvX3B1dCgpIG1lbWJlciBmdW5jdGlvbnMgb2YgdGhlIG1vbmV5X3B1dCBmYWNldCBpbgoyMi4yLjYuMi4yLCBwMSBpcyBpbmNvcnJlY3QuIEZpcnN0LCB0aGUgZiBmb3JtYXQgc3BlY2lmaWVyIGlzIHdyb25nCmZvciB2YWx1ZXMgb2YgdHlwZSBsb25nIGRvdWJsZSwgYW5kIHNlY29uZCwgdGhlIHByZWNpc2lvbiBvZiAwMQpkb2Vzbid0IHNlZW0gdG8gbWFrZSBzZW5zZS4gV2hhdCB3YXMgbW9zdCBsaWtlbHkgaW50ZW5kZWQgd2FzCiIlLjBMZiIuLCB0aGF0IGlzIGEgcHJlY2lzaW9uIG9mIHplcm8gZm9sbG93ZWQgYnkgdGhlIEwgbGVuZ3RoCm1vZGlmaWVyLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZvcm1hdCBzdHJpbmcgdG8gIiUuMExmIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG88L3A+Cjxocj4KPGEgbmFtZT0iMzI5Ij48aDM+MzI5LiZuYnNwO3ZlY3RvciBjYXBhY2l0eSwgcmVzZXJ2ZSBhbmQgcmVhbGxvY2F0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi52ZWN0b3IuY2FwYWNpdHkiPiBbbGliLnZlY3Rvci5jYXBhY2l0eV08L2E+LCAyMy4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5tb2RpZmllcnMiPiBbbGliLnZlY3Rvci5tb2RpZmllcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbnRob255IFdpbGxpYW1zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEzIEp1bCAyMDAxPC9wPgo8cD4KVGhlcmUgaXMgYW4gYXBwYXJlbnQgY29udHJhZGljdGlvbiBhYm91dCB3aGljaCBjaXJjdW1zdGFuY2VzIGNhbiBjYXVzZQphIHJlYWxsb2NhdGlvbiBvZiBhIHZlY3RvciBpbiBTZWN0aW9uIDIzLjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudmVjdG9yLmNhcGFjaXR5Ij4gW2xpYi52ZWN0b3IuY2FwYWNpdHldPC9hPiBhbmQKc2VjdGlvbiAyMy4yLjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5tb2RpZmllcnMiPiBbbGliLnZlY3Rvci5tb2RpZmllcnNdPC9hPi4KPC9wPgoKPHA+MjMuMi40LjJwNSBzYXlzOjwvcD4KPGJsb2NrcXVvdGU+Ck5vdGVzOiBSZWFsbG9jYXRpb24gaW52YWxpZGF0ZXMgYWxsIHRoZSByZWZlcmVuY2VzLCBwb2ludGVycywgYW5kIGl0ZXJhdG9ycwpyZWZlcnJpbmcgdG8gdGhlIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZS4gSXQgaXMgZ3VhcmFudGVlZCB0aGF0IG5vCnJlYWxsb2NhdGlvbiB0YWtlcyBwbGFjZSBkdXJpbmcgaW5zZXJ0aW9ucyB0aGF0IGhhcHBlbiBhZnRlciBhIGNhbGwgdG8KcmVzZXJ2ZSgpIHVudGlsIHRoZSB0aW1lIHdoZW4gYW4gaW5zZXJ0aW9uIHdvdWxkIG1ha2UgdGhlIHNpemUgb2YgdGhlIHZlY3RvcgpncmVhdGVyIHRoYW4gdGhlIHNpemUgc3BlY2lmaWVkIGluIHRoZSBtb3N0IHJlY2VudCBjYWxsIHRvIHJlc2VydmUoKS4KPC9ibG9ja3F1b3RlPgoKPHA+V2hpY2ggaW1wbGllcyBpZiBJIGRvPC9wPgoKPHByZT4gIHN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdmVjOwogIHZlYy5yZXNlcnZlKDIzKTsKICB2ZWMucmVzZXJ2ZSgwKTsKICB2ZWMuaW5zZXJ0KHZlYy5lbmQoKSwxKTsKPC9wcmU+Cgo8cD50aGVuIHRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgcmVhbGxvY2F0ZSB0aGUgdmVjdG9yIGZvciB0aGUgaW5zZXJ0LAphcyB0aGUgc2l6ZSBzcGVjaWZpZWQgaW4gdGhlIHByZXZpb3VzIGNhbGwgdG8gcmVzZXJ2ZSB3YXMgemVyby48L3A+Cgo8cD5Ib3dldmVyLCB0aGUgcHJldmlvdXMgcGFyYWdyYXBocyAoMjMuMi40LjIsIHAxLTIpIHN0YXRlOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgooY2FwYWNpdHkpIFJldHVybnM6IFRoZSB0b3RhbCBudW1iZXIgb2YgZWxlbWVudHMgdGhlIHZlY3RvcgpjYW4gaG9sZCB3aXRob3V0IHJlcXVpcmluZyByZWFsbG9jYXRpb24KPC9wPgo8cD4KLi4uQWZ0ZXIgcmVzZXJ2ZSgpLCBjYXBhY2l0eSgpIGlzIGdyZWF0ZXIgb3IgZXF1YWwgdG8gdGhlCmFyZ3VtZW50IG9mIHJlc2VydmUgaWYgcmVhbGxvY2F0aW9uIGhhcHBlbnM7IGFuZCBlcXVhbCB0byB0aGUgcHJldmlvdXMgdmFsdWUKb2YgY2FwYWNpdHkoKSBvdGhlcndpc2UuLi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBpbXBsaWVzIHRoYXQgdmVjLmNhcGFjaXR5KCkgaXMgc3RpbGwgMjMsIGFuZCBzbyB0aGUgaW5zZXJ0KCkKc2hvdWxkIG5vdCByZXF1aXJlIGEgcmVhbGxvY2F0aW9uLCBhcyB2ZWMuc2l6ZSgpIGlzIDAuIFRoaXMgaXMgYmFja2VkCnVwIGJ5IDIzLjIuNC4zcDE6CjwvcD4KPGJsb2NrcXVvdGU+CihpbnNlcnQpIE5vdGVzOiBDYXVzZXMgcmVhbGxvY2F0aW9uIGlmIHRoZSBuZXcgc2l6ZSBpcyBncmVhdGVyIHRoYW4gdGhlIG9sZApjYXBhY2l0eS4KPC9ibG9ja3F1b3RlPgoKPHA+ClRob3VnaCB0aGlzIGRvZXNuJ3QgcnVsZSBvdXQgcmVhbGxvY2F0aW9uIGlmIHRoZSBuZXcgc2l6ZSBpcyBsZXNzCnRoYW4gdGhlIG9sZCBjYXBhY2l0eSwgSSB0aGluayB0aGUgaW50ZW50IGlzIGNsZWFyLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgd29yZGluZyBvZiAyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5jYXBhY2l0eSI+IFtsaWIudmVjdG9yLmNhcGFjaXR5XTwvYT4gcGFyYWdyYXBoIDUgdG86PC9wPgoKPGJsb2NrcXVvdGU+Ck5vdGVzOiBSZWFsbG9jYXRpb24gaW52YWxpZGF0ZXMgYWxsIHRoZSByZWZlcmVuY2VzLCBwb2ludGVycywgYW5kCml0ZXJhdG9ycyByZWZlcnJpbmcgdG8gdGhlIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZS4gSXQgaXMgZ3VhcmFudGVlZAp0aGF0IG5vIHJlYWxsb2NhdGlvbiB0YWtlcyBwbGFjZSBkdXJpbmcgaW5zZXJ0aW9ucyB0aGF0IGhhcHBlbiBhZnRlciBhCmNhbGwgdG8gcmVzZXJ2ZSgpIHVudGlsIHRoZSB0aW1lIHdoZW4gYW4gaW5zZXJ0aW9uIHdvdWxkIG1ha2UgdGhlIHNpemUKb2YgdGhlIHZlY3RvciBncmVhdGVyIHRoYW4gdGhlIHZhbHVlIG9mIGNhcGFjaXR5KCkuCjwvYmxvY2txdW90ZT4KCjxwPjxpPltSZWRtb25kOiBvcmlnaW5hbCBwcm9wb3NlZCByZXNvbHV0aW9uIHdhcyBtb2RpZmllZCBzbGlnaHRseS4gIEluCnRoZSBvcmlnaW5hbCwgdGhlIGd1YXJhbnRlZSB3YXMgdGhhdCB0aGVyZSB3b3VsZCBiZSBubyByZWFsbG9jYXRpb24KdW50aWwgdGhlIHNpemUgd291bGQgYmUgZ3JlYXRlciB0aGFuIHRoZSB2YWx1ZSBvZiBjYXBhY2l0eSgpIGFmdGVyIHRoZQptb3N0IHJlY2VudCBjYWxsIHRvIHJlc2VydmUoKS4gIFRoZSBMV0cgZGlkIG5vdCBiZWxpZXZlIHRoYXQgdGhlCiJhZnRlciB0aGUgbW9zdCByZWNlbnQgY2FsbCB0byByZXNlcnZlKCkiIGFkZGVkIGFueSB1c2VmdWwKaW5mb3JtYXRpb24uXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlcmUgd2FzIGdlbmVyYWwgYWdyZWVtZW50IHRoYXQsIHdoZW4gcmVzZXJ2ZSgpIGlzIGNhbGxlZCB0d2ljZSBpbgpzdWNjZXNzaW9uIGFuZCB0aGUgYXJndW1lbnQgdG8gdGhlIHNlY29uZCBpbnZvY2F0aW9uIGlzIHNtYWxsZXIgdGhhbgp0aGUgYXJndW1lbnQgdG8gdGhlIGZpcnN0LCB0aGUgaW50ZW50IHdhcyBmb3IgdGhlIHNlY29uZCBpbnZvY2F0aW9uIHRvCmhhdmUgbm8gZWZmZWN0LiAgV29yZGluZyBpbXBseWluZyB0aGF0IHN1Y2ggY2FzZXMgaGF2ZSBhbiBlZmZlY3Qgb24KcmVhbGxvY2F0aW9uIGd1YXJhbnRlZXMgd2FzIGluYWR2ZXJ0YW50LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzEiPjxoMz4zMzEuJm5ic3A7YmFkIGRlY2xhcmF0aW9uIG9mIGRlc3RydWN0b3IgZm9yIGlvc19iYXNlOjpmYWlsdXJlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4yLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zOjpmYWlsdXJlIj4gW2xpYi5pb3M6OmZhaWx1cmVdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQcmVtQW5hbmQgTS4gUmFvJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEF1ZyAyMDAxPC9wPgo8cD4KV2l0aCB0aGUgY2hhbmdlIGluIDE3LjQuNC44IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmciPiBbbGliLnJlcy5vbi5leGNlcHRpb24uaGFuZGxpbmddPC9hPiB0byBzdGF0ZQogICAiQW4gaW1wbGVtZW50YXRpb24gbWF5IHN0cmVuZ3RoZW4gdGhlIGV4Y2VwdGlvbi1zcGVjaWZpY2F0aW9uIGZvciBhIAogICAgbm9uLXZpcnR1YWwgZnVuY3Rpb24gYnkgcmVtb3ZpbmcgbGlzdGVkIGV4Y2VwdGlvbnMuIgooaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctZGVmZWN0cy5odG1sIzExOSI+MTE5PC9hPikKYW5kIHRoZSBmb2xsb3dpbmcgZGVjbGFyYXRpb24gb2YgfmZhaWx1cmUoKSBpbiBpb3NfYmFzZTo6ZmFpbHVyZQo8L3A+CjxwcmU+ICAgIG5hbWVzcGFjZSBzdGQgewogICAgICAgY2xhc3MgaW9zX2Jhc2U6OmZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uIHsKICAgICAgIHB1YmxpYzoKICAgICAgICAgICAuLi4KICAgICAgICAgICB2aXJ0dWFsIH5mYWlsdXJlKCk7CiAgICAgICAgICAgLi4uCiAgICAgICB9OwogICAgIH0KPC9wcmU+CjxwPnRoZSBjbGFzcyBmYWlsdXJlIGNhbm5vdCBiZSBpbXBsZW1lbnRlZCBzaW5jZSBpbiAxOC42LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5leGNlcHRpb24iPiBbbGliLmV4Y2VwdGlvbl08L2E+IHRoZSBkZXN0cnVjdG9yIG9mIGNsYXNzIGV4Y2VwdGlvbiBoYXMgYW4gZW1wdHkKZXhjZXB0aW9uIHNwZWNpZmljYXRpb246PC9wPgo8cHJlPiAgICBuYW1lc3BhY2Ugc3RkIHsKICAgICAgIGNsYXNzIGV4Y2VwdGlvbiB7CiAgICAgICBwdWJsaWM6CiAgICAgICAgIC4uLgogICAgICAgICB2aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwogICAgICAgICAuLi4KICAgICAgIH07CiAgICAgfQo8L3ByZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5SZW1vdmUgdGhlIGRlY2xhcmF0aW9uIG9mIH5mYWlsdXJlKCkuPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgY29uc2lzdGVudCB3aXRoIHRoZSB3YXkgdGhhdCBkZXN0cnVjdG9ycwpvZiBvdGhlciBjbGFzc2VzIGRlcml2ZWQgZnJvbSA8dHQ+ZXhjZXB0aW9uPC90dD4gYXJlIGhhbmRsZWQuPC9wPgo8aHI+CjxhIG5hbWU9IjMzMyI+PGgzPjMzMy4mbmJzcDtkb2VzIGVuZGwgaW1wbHkgc3luY2hyb25pemF0aW9uIHdpdGggdGhlIGRldmljZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjIuNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIub3N0cmVhbS5tYW5pcCI+IFtsaWIub3N0cmVhbS5tYW5pcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ByZW1BbmFuZCBNLiBSYW8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjcgQXVnIDIwMDE8L3A+CjxwPkEgZm9vdG5vdGUgaW4gMjcuNi4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0ubWFuaXAiPiBbbGliLm9zdHJlYW0ubWFuaXBdPC9hPiBzdGF0ZXM6PC9wPgo8YmxvY2txdW90ZT4KICAgIFtGb290bm90ZTogVGhlIGVmZmVjdCBvZiBleGVjdXRpbmcgY291dCAmbHQ7Jmx0OyBlbmRsIGlzIHRvIGluc2VydCBhIAogICAgIG5ld2xpbmUgY2hhcmFjdGVyIGluIHRoZSBvdXRwdXQgc2VxdWVuY2UgY29udHJvbGxlZCBieSBjb3V0LCB0aGVuIAogICAgIHN5bmNocm9uaXplIGl0IHdpdGggYW55IGV4dGVybmFsIGZpbGUgd2l0aCB3aGljaCBpdCBtaWdodCBiZSAKICAgICBhc3NvY2lhdGVkLiAtLS0gZW5kIGZvb25vdGVdCjwvYmxvY2txdW90ZT4KCjxwPgpEb2VzIHRoZSB0ZXJtICJmaWxlIiBoZXJlIHJlZmVyIHRvIHRoZSBleHRlcm5hbCBkZXZpY2U/ClRoaXMgbGVhZHMgdG8gc29tZSBpbXBsZW1lbnRhdGlvbiBhbWJpZ3VpdHkgb24gc3lzdGVtcyB3aXRoIGZ1bGx5IApidWZmZXJlZCBmaWxlcyB3aGVyZSBhIG5ld2xpbmUgZG9lcyBub3QgY2F1c2UgYSBmbHVzaCB0byB0aGUgZGV2aWNlLgo8L3A+Cgo8cD4KQ2hvb3NpbmcgdG8gc3luYyB3aXRoIHRoZSBkZXZpY2UgbGVhZHMgdG8gc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UKcGVuYWx0aWVzIGZvciBlYWNoIGNhbGwgdG8gZW5kbCwgd2hpbGUgbm90IHN5bmMtaW5nIGxlYWRzIHRvCmVycm9ycyB1bmRlciBzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCjwvcD4KCjxwPgpJIGNvdWxkIG5vdCBmaW5kIGFueSBvdGhlciBzdGF0ZW1lbnQgdGhhdCBleHBsaWNpdGx5IGRlZmluZWQKdGhlIGJlaGF2aW9yIG9uZSB3YXkgb3IgdGhlIG90aGVyLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIGZvb3Rub3RlIDMwMCBmcm9tIHNlY3Rpb24gMjcuNi4yLjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0ubWFuaXAiPiBbbGliLm9zdHJlYW0ubWFuaXBdPC9hPi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBhbHJlYWR5IGhhdmUgbm9ybWF0aXZlIHRleHQgc2F5aW5nIHdoYXQgPHR0PmVuZGw8L3R0PiBkb2VzOiBpdAppbnNlcnRzIGEgbmV3bGluZSBjaGFyYWN0ZXIgYW5kIGNhbGxzIDx0dD5mbHVzaDwvdHQ+LiAgVGhpcyBmb290bm90ZQppcyBhdCBiZXN0IHJlZHVuZGFudCwgYXQgd29yc3QgKGFzIHRoaXMgaXNzdWUgc2F5cykgbWlzbGVhZGluZywKYmVjYXVzZSBpdCBhcHBlYXJzIHRvIG1ha2UgcHJvbWlzZXMgYWJvdXQgd2hhdCA8dHQ+Zmx1c2g8L3R0Pgpkb2VzLjwvcD4KPGhyPgo8YSBuYW1lPSIzMzQiPjxoMz4zMzQuJm5ic3A7bWFwOjpvcGVyYXRvcltdIHNwZWNpZmljYXRpb24gZm9yY2VzIGluZWZmaWNpZW50IGltcGxlbWVudGF0aW9uPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAuYWNjZXNzIj4gW2xpYi5tYXAuYWNjZXNzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5kcmVhIEdyaWZmaW5pJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzAyIFNlcCAyMDAxPC9wPgo8cD4KVGhlIGN1cnJlbnQgc3RhbmRhcmQgZGVzY3JpYmVzIG1hcDo6b3BlcmF0b3JbXSB1c2luZyBhCmNvZGUgZXhhbXBsZS4gVGhhdCBjb2RlIGV4YW1wbGUgaXMgaG93ZXZlciBxdWl0ZQppbmVmZmljaWVudCBiZWNhdXNlIGl0IHJlcXVpcmVzIHNldmVyYWwgdXNlbGVzcyBjb3BpZXMKb2YgYm90aCB0aGUgcGFzc2VkIGtleV90eXBlIHZhbHVlIGFuZCBvZiBkZWZhdWx0CmNvbnN0cnVjdGVkIG1hcHBlZF90eXBlIGluc3RhbmNlcy4KTXkgb3BpbmlvbiBpcyB0aGF0IHdhcyBub3QgbWVhbnQgYnkgdGhlIGNvbWl0ZWUgdG8KcmVxdWlyZSBhbGwgdGhvc2UgdGVtcG9yYXJ5IGNvcGllcy4gCjwvcD4KCjxwPkN1cnJlbnRseSBtYXA6Om9wZXJhdG9yW10gYmVoYXZpb3VyIGlzIHNwZWNpZmllZCBhczogPC9wPgo8cHJlPiAgUmV0dXJuczoKICAgICgqKChpbnNlcnQobWFrZV9wYWlyKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+CiAgCjxwPgpUaGlzIHNwZWNpZmljYXRpb24gaG93ZXZlciB1c2VzIG1ha2VfcGFpciB0aGF0IGlzIGEKdGVtcGxhdGUgZnVuY3Rpb24gb2Ygd2hpY2ggcGFyYW1ldGVycyBpbiB0aGlzIGNhc2UKd2lsbCBiZSBkZWR1Y2VkIGJlaW5nIG9mIHR5cGUgY29uc3Qga2V5X3R5cGUmYW1wOyBhbmQKY29uc3QgVCZhbXA7LiBUaGlzIHdpbGwgY3JlYXRlIGEgcGFpciZsdDtrZXlfdHlwZSxUJmd0OyB0aGF0Cmlzbid0IHRoZSBjb3JyZWN0IHR5cGUgZXhwZWN0ZWQgYnkgbWFwOjppbnNlcnQgc28KYW5vdGhlciBjb3B5IHdpbGwgYmUgcmVxdWlyZWQgdXNpbmcgdGhlIHRlbXBsYXRlCmNvbnZlcnNpb24gY29uc3RydWN0b3IgYXZhaWxhYmxlIGluIHBhaXIgdG8gYnVpbGQKdGhlIHJlcXVpcmVkIHBhaXImbHQ7Y29uc3Qga2V5X3R5cGUsVCZndDsgaW5zdGFuY2UuCjwvcD4KCjxwPklmIHdlIGNvbnNpZGVyIGNhbGxpbmcgb2Yga2V5X3R5cGUgY29weSBjb25zdHJ1Y3RvcgphbmQgbWFwcGVkX3R5cGUgZGVmYXVsdCBjb25zdHJ1Y3RvciBhbmQgY29weQpjb25zdHJ1Y3RvciBhcyBvYnNlcnZhYmxlIGJlaGF2aW91ciAoYXMgSSB0aGluayB3ZQpzaG91bGQpIHRoZW4gdGhlIHN0YW5kYXJkIGlzIGluIHRoaXMgcGxhY2UgcmVxdWlyaW5nCnR3byBjb3BpZXMgb2YgYSBrZXlfdHlwZSBlbGVtZW50IHBsdXMgYSBkZWZhdWx0CmNvbnN0cnVjdGlvbiBhbmQgdHdvIGNvcHkgY29uc3RydWN0aW9uIG9mIGEgbWFwcGVkX3R5cGUKKHN1cHBvc2luZyB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgaXMgYWxyZWFkeSBwcmVzZW50CmluIHRoZSBtYXA7IG90aGVyd2lzZSBhdCBsZWFzdCBhbm90aGVyIGNvcHkKY29uc3RydWN0aW9uIGZvciBlYWNoIHR5cGUpLiAKPC9wPgoKPHA+QSBzaW1wbGUgKGhhbGYpIHNvbHV0aW9uIHdvdWxkIGJlIHJlcGxhY2luZyB0aGUgZGVzY3JpcHRpb24gd2l0aDo8L3A+CjxwcmU+ICBSZXR1cm5zOgogICAgKCooKGluc2VydCh2YWx1ZV90eXBlKHgsIFQoKSkpKS5maXJzdCkpLnNlY29uZC4KPC9wcmU+Cgo8cD5UaGlzIHdpbGwgcmVtb3ZlIHRoZSB3cm9uZyB0eXBlZCBwYWlyIGNvbnN0cnVjdGlvbiB0aGF0CnJlcXVpcmVzIG9uZSBleHRyYSBjb3B5IG9mIGJvdGgga2V5IGFuZCB2YWx1ZS48L3A+Cgo8cD5Ib3dldmVyIHN0aWxsIHRoZSB1c2luZyBvZiBtYXA6Omluc2VydCByZXF1aXJlcyB0ZW1wb3JhcnkKb2JqZWN0cyB3aGlsZSB0aGUgb3BlcmF0aW9uLCBmcm9tIGEgbG9naWNhbCBwb2ludCBvZiB2aWV3LApkb2Vzbid0IHJlcXVpcmUgYW55LiA8L3A+Cgo8cD5JIHRoaW5rIHRoYXQgYSBiZXR0ZXIgc29sdXRpb24gd291bGQgYmUgbGVhdmluZyBmcmVlIGFuCmltcGxlbWVudGVyIHRvIHVzZSBhIGRpZmZlcmVudCBhcHByb2FjaCB0aGFuIG1hcDo6aW5zZXJ0CnRoYXQsIGJlY2F1c2Ugb2YgaXRzIGludGVyZmFjZSwgZm9yY2VzIGRlZmF1bHQgY29uc3RydWN0ZWQKdGVtcG9yYXJpZXMgYW5kIGNvcGllcyBpbiB0aGlzIGNhc2UuClRoZSBiZXN0IHNvbHV0aW9uIGluIG15IG9waW5pb24gd291bGQgYmUganVzdCByZXF1aXJpbmcKbWFwOjpvcGVyYXRvcltdIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUKcGFydCBvZiB0aGUgY29udGFpbmVkIGVsZW1lbnQgY3JlYXRpbmcgYSBkZWZhdWx0IGVsZW1lbnQKd2l0aCB0aGUgc3BlY2lmaWVkIGtleSBpZiBubyBzdWNoIGFuIGVsZW1lbnQgaXMgYWxyZWFkeQpwcmVzZW50IGluIHRoZSBjb250YWluZXIuIEFsc28gYSBsb2dhcml0aG1pYyBjb21wbGV4aXR5CnJlcXVpcmVtZW50IHNob3VsZCBiZSBzcGVjaWZpZWQgZm9yIHRoZSBvcGVyYXRpb24uCjwvcD4KCjxwPgpUaGlzIHdvdWxkIGFsbG93IGxpYnJhcnkgaW1wbGVtZW50ZXJzIHRvIHdyaXRlIGFsdGVybmF0aXZlCmltcGxlbWVudGF0aW9ucyBub3QgdXNpbmcgbWFwOjppbnNlcnQgYW5kIHJlYWNoaW5nIG9wdGltYWwKcGVyZm9ybWFuY2UgaW4gYm90aCBjYXNlcyBvZiB0aGUgYWRkcmVzc2VkIGVsZW1lbnQgYmVpbmcKcHJlc2VudCBvciBhYnNlbnQgZnJvbSB0aGUgbWFwIChubyB0ZW1wb3JhcmllcyBhdCBhbGwgYW5kCmp1c3QgdGhlIGNyZWF0aW9uIG9mIGEgbmV3IHBhaXIgaW5zaWRlIHRoZSBjb250YWluZXIgaWYKdGhlIGVsZW1lbnQgaXNuJ3QgcHJlc2VudCkuClNvbWUgaW1wbGVtZW50ZXIgaGFzIGFscmVhZHkgdGFrZW4gdGhpcyBvcHRpb24gYnV0IEkgdGhpbmsKdGhhdCB0aGUgY3VycmVudCB3b3JkaW5nIG9mIHRoZSBzdGFuZGFyZCBydWxlcyB0aGF0IGFzCm5vbi1jb25mb3JtaW5nLiAKPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+ClJlcGxhY2UgMjMuMy4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5tYXAuYWNjZXNzIj4gW2xpYi5tYXAuYWNjZXNzXTwvYT4gcGFyYWdyYXBoIDEgd2l0aAo8L3A+CjxibG9ja3F1b3RlPgo8cD4KLTEtIEVmZmVjdHM6ICBJZiB0aGVyZSBpcyBubyBrZXkgZXF1aXZhbGVudCB0byB4IGluIHRoZSBtYXAsIGluc2VydHMgCnZhbHVlX3R5cGUoeCwgVCgpKSBpbnRvIHRoZSBtYXAuCjwvcD4KPHA+Ci0yLSBSZXR1cm5zOiBBIHJlZmVyZW5jZSB0byB0aGUgbWFwcGVkX3R5cGUgY29ycmVzcG9uZGluZyB0byB4IGluICp0aGlzLgo8L3A+CjxwPgotMy0gQ29tcGxleGl0eTogbG9nYXJpdGhtaWMuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1RoaXMgaXMgdGhlIHNlY29uZCBvcHRpb24gbWVudGlvbmVkIGFib3ZlLiAgSG93YXJkIHByb3ZpZGVkCndvcmRpbmcuICBXZSBtYXkgYWxzbyB3aXNoIHRvIGhhdmUgYSBibGFua2V0IHN0YXRlbWVudCBzb21ld2hlcmUgaW4KY2xhdXNlIDE3IHNheWluZyB0aGF0IHdlIGRvIG5vdCBpbnRlbmQgdGhlIHNlbWFudGljcyBvZiBzYW1wbGUgY29kZQpmcmFnbWVudHMgdG8gYmUgaW50ZXJwcmV0ZWQgYXMgc3BlY2lmaW5nIGV4YWN0bHkgaG93IG1hbnkgY29waWVzIGFyZQptYWRlLiAgU2VlIGlzc3VlIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCM5OCI+OTg8L2E+IGZvciBhIHNpbWlsYXIgcHJvYmxlbS5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4KVGhpcyBpcyB0aGUgc2Vjb25kIHNvbHV0aW9uIGRlc2NyaWJlZCBhYm92ZTsgYXMgbm90ZWQsIGl0IGlzCmNvbnNpc3RlbnQgd2l0aCBleGlzdGluZyBwcmFjdGljZS4KPC9wPgoKPHA+Tm90ZSB0aGF0IHdlIG5vdyBuZWVkIHRvIHNwZWNpZnkgdGhlIGNvbXBsZXhpdHkgZXhwbGljaXRseSwgYmVjYXVzZQp3ZSBhcmUgbm8gbG9uZ2VyIGRlZmluaW5nIDx0dD5vcGVyYXRvcltdPC90dD4gaW4gdGVybXMgb2YKPHR0Pmluc2VydDwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzUiPjxoMz4zMzUuJm5ic3A7bWlub3IgaXNzdWUgd2l0aCBjaGFyX3RyYWl0cywgdGFibGUgMzc8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlIj4gW2xpYi5jaGFyLnRyYWl0cy5yZXF1aXJlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW5keSBTYXd5ZXImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDYgU2VwIDIwMDE8L3A+CjxwPgpUYWJsZSAzNywgaW4gMjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMucmVxdWlyZSI+IFtsaWIuY2hhci50cmFpdHMucmVxdWlyZV08L2E+LCBkZXNjaWJlcyBjaGFyX3RyYWl0czo6YXNzaWduCmFzOgo8L3A+CjxwcmU+ICBYOjphc3NpZ24oYyxkKSAgIGFzc2lnbnMgYyA9IGQuCjwvcHJlPgoKPHA+QW5kIHBhcmEgMSBzYXlzOjwvcD4KCjxibG9ja3F1b3RlPgogWy4uLl0gYyBhbmQgZCBkZW5vdGUgdmFsdWVzIG9mIHR5cGUgQ2hhclQgWy4uLl0KPC9ibG9ja3F1b3RlPgoKPHA+Ck5hdHVyYWxseSwgaWYgYyBhbmQgZCBhcmUgPGk+dmFsdWVzPC9pPiwgdGhlbiB0aGUgYXNzaWdubWVudCBpcwooZWZmZWN0aXZlbHkpIG1lYW5pbmdsZXNzLiBJdCdzIGNsZWFybHkgaW50ZW5kZWQgdGhhdCAoaW4gdGhlIGNhc2Ugb2YKYXNzaWduLCBhdCBsZWFzdCksICdjJyBpcyBpbnRlbmRlZCB0byBiZSBhIHJlZmVyZW5jZSB0eXBlLgo8L3A+Cgo8cD5JIGRpZCBhIHF1aWNrIHN1cnZleSBvZiB0aGUgZm91ciBpbXBsZW1lbnRhdGlvbnMgSSBoYXBwZW5lZCB0byBoYXZlCmx5aW5nIGFyb3VuZCwgYW5kIHN1cmUgZW5vdWdoIHRoZXkgYWxsIGhhdmUgc2lnbmF0dXJlczo8L3A+CjxwcmU+ICAgIGFzc2lnbiggY2hhclQmYW1wOywgY29uc3QgY2hhclQmYW1wOyApOwo8L3ByZT4KCjxwPihvciB0aGUgZXF1aXZhbGVudCkuIEl0J3MgYWxzbyBkZXNjcmliZWQgdGhpcyB3YXkgaW4gTmljbydzIGJvb2suCihOb3QgdG8gbWVudGlvbiB0aGUgc3lub3BzZXMgb2YgY2hhcl90cmFpdHMmbHQ7Y2hhciZndDsgaW4gMjEuMS4zLjEKYW5kIGNoYXJfdHJhaXRzJmx0O3djaGFyX3QmZ3Q7IGluIDIxLjEuMy4yLi4uKQo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+QWRkIHRoZSBmb2xsb3dpbmcgdG8gMjEuMS4xIHBhcmEgMTo8L3A+CjxibG9ja3F1b3RlPgogciBkZW5vdGVzIGFuIGx2YWx1ZSBvZiBDaGFyVAo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgY2hhbmdlIHRoZSBkZXNjcmlwdGlvbiBvZiBhc3NpZ24gaW4gdGhlIHRhYmxlIHRvOjwvcD4KPHByZT4gIFg6OmFzc2lnbihyLGQpICAgYXNzaWducyByID0gZAo8L3ByZT4KPGhyPgo8YSBuYW1lPSIzMzYiPjxoMz4zMzYuJm5ic3A7Q2xhdXNlIDE3IGxhY2sgb2YgcmVmZXJlbmNlcyB0byBkZXByZWNhdGVkIGhlYWRlcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5saWJyYXJ5Ij4gW2xpYi5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGV0bGVmIFZvbGxtYW5uJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA1IFNlcCAyMDAxPC9wPgo8cD5Gcm9tIGMrK3N0ZC1lZGl0LTg3Mzo8L3A+Cgo8cD4xNy40LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5oZWFkZXJzIj4gW2xpYi5oZWFkZXJzXTwvYT4sIFRhYmxlIDExLiAgSW4gdGhpcyB0YWJsZSwgdGhlIGhlYWRlcgombHQ7c3Ryc3RyZWFtJmd0OyBpcyBtaXNzaW5nLjwvcD4KCjxwPlRoaXMgc2hvd3MgYSBnZW5lcmFsIHByb2JsZW06IFRoZSB3aG9sZSBjbGF1c2UgMTcgcmVmZXJzIHF1aXRlCm9mdGVuIHRvIGNsYXVzZXMgMTggdGhyb3VnaCAyNywgYnV0IEQuNyBpcyBhbHNvIGEgcGFydCBvZiB0aGUgc3RhbmRhcmQKbGlicmFyeSAodGhvdWdoIGEgZGVwcmVjYXRlZCBvbmUpLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KCjxwPlRvIDE3LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmhlYWRlcnMiPiBbbGliLmhlYWRlcnNdPC9hPiBUYWJsZSAxMSwgQysrIExpYnJhcnkgSGVhZGVycywgYWRkCiImbHQ7c3Ryc3RyZWFtJmd0OyIuPC9wPgoKPHA+SW4gdGhlIGZvbGxvd2luZyBwbGFjZXMsIGNoYW5nZSAiY2xhdXNlcyAxNyB0aHJvdWdoIDI3IiB0byAiY2xhdXNlcwoxNyB0aHJvdWdoIDI3IGFuZCBBbm5leCBEIjo8L3A+Cgo8dWw+CjxsaT4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLnJlZnMiPiBbaW50cm8ucmVmc108L2E+IE5vcm1hdGl2ZSByZWZlcmVuY2VzLzEvZm9vdG5vdGUgMTwvbGk+CjxsaT4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9pbnRyby5odG1sI2ludHJvLmRlZnMiPiBbaW50cm8uZGVmc108L2E+IERlZmluaXRpb25zLzE8L2xpPgo8bGk+NyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2RjbC5odG1sI2RjbC5kY2wiPiBbZGNsLmRjbF08L2E+IExpYnJhcnkgaW50cm9kdWN0aW9uLzk8L2xpPgo8bGk+MTcuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5kZXNjcmlwdGlvbiI+IFtsaWIuZGVzY3JpcHRpb25dPC9hPiBNZXRob2Qgb2YgZGVzY3JpcHRpb24gKEluZm9ybWF0aXZlKS8xPC9saT4KPGxpPjE3LjMuMi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuY2hhcmFjdGVyLnNlcSI+IFtsaWIuY2hhcmFjdGVyLnNlcV08L2E+IENoYXJhY3RlciBzZXF1ZW5jZXMvMS9idWxsZXQgMjwvbGk+CjxsaT4xNy4zLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5mdW5jdGlvbnMud2l0aGluLmNsYXNzZXMiPiBbbGliLmZ1bmN0aW9ucy53aXRoaW4uY2xhc3Nlc108L2E+IEZ1bmN0aW9ucyB3aXRoaW4gY2xhc3Nlcy8xPC9saT4KPGxpPjE3LjMuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLm9iamVjdHMud2l0aGluLmNsYXNzZXMiPiBbbGliLm9iamVjdHMud2l0aGluLmNsYXNzZXNdPC9hPiBQcml2YXRlIG1lbWJlcnMvMS8oMiBwbGFjZXMpPC9saT4KPGxpPjE3LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVxdWlyZW1lbnRzIj4gW2xpYi5yZXF1aXJlbWVudHNdPC9hPiBMaWJyYXJ5LXdpZGUgcmVxdWlyZW1lbnRzLzE8L2xpPgo8bGk+MTcuNC4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuaGVhZGVycyI+IFtsaWIuaGVhZGVyc108L2E+IEhlYWRlcnMvNDwvbGk+CjxsaT4xNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+IFJlcGxhY2VtZW50IGZ1bmN0aW9ucy8xPC9saT4KPGxpPjE3LjQuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmdsb2JhbC5mdW5jdGlvbnMiPiBbbGliLmdsb2JhbC5mdW5jdGlvbnNdPC9hPiBHbG9iYWwgb3Igbm9uLW1lbWJlciBmdW5jdGlvbnMvMjwvbGk+CjxsaT4xNy40LjQuNiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5wcm90ZWN0aW9uLndpdGhpbi5jbGFzc2VzIj4gW2xpYi5wcm90ZWN0aW9uLndpdGhpbi5jbGFzc2VzXTwvYT4gUHJvdGVjdGlvbiB3aXRoaW4gY2xhc3Nlcy8xPC9saT4KPC91bD4KCgo8aHI+CjxhIG5hbWU9IjMzNyI+PGgzPjMzNy4mbmJzcDtyZXBsYWNlX2NvcHlfaWYncyB0ZW1wbGF0ZSBwYXJhbWV0ZXIgc2hvdWxkIGJlIElucHV0SXRlcmF0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4yLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcucmVwbGFjZSI+IFtsaWIuYWxnLnJlcGxhY2VdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtEZXRsZWYgVm9sbG1hbm4mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MDcgU2VwIDIwMDE8L3A+CjxwPkZyb20gYysrc3RkLWVkaXQtODc2OjwvcD4KCjxwPgpJbiBzZWN0aW9uIDI1LjIuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yZXBsYWNlIj4gW2xpYi5hbGcucmVwbGFjZV08L2E+IGJlZm9yZSBwNDogVGhlIG5hbWUgb2YgdGhlIGZpcnN0CnBhcmFtZXRlciBvZiB0ZW1wbGF0ZSByZXBsYWNlX2NvcHlfaWYgc2hvdWxkIGJlICJJbnB1dEl0ZXJhdG9yIgppbnN0ZWFkIG9mICJJdGVyYXRvciIuICBBY2NvcmRpbmcgdG8gMTcuMy4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIudHlwZS5kZXNjcmlwdGlvbnMiPiBbbGliLnR5cGUuZGVzY3JpcHRpb25zXTwvYT4gcDEgdGhlCnBhcmFtZXRlciBuYW1lIGNvbnZleXMgcmVhbCBub3JtYXRpdmUgbWVhbmluZy4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSA8dHQ+SXRlcmF0b3I8L3R0PiB0byA8dHQ+SW5wdXRJdGVyYXRvcjwvdHQ+LjwvcD4KPGhyPgo8YSBuYW1lPSIzMzgiPjxoMz4zMzguJm5ic3A7IGlzIHdoaXRlc3BhY2UgYWxsb3dlZCBiZXR3ZWVuIGAtJyBhbmQgYSBkaWdpdD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3JpZXMiPiBbbGliLmxvY2FsZS5jYXRlZ29yaWVzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IFNlcCAyMDAxPC9wPgo8cD4KRnJvbSBTdGFnZSAyIHByb2Nlc3NpbmcgaW4gMjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiwgcDggYW5kIDkgKHRoZQpvcmlnaW5hbCB0ZXh0IG9yIHRoZSB0ZXh0IGNvcnJlY3RlZCBieSB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiBvZgppc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMjIxIj4yMjE8L2E+KSBpdCBzZWVtcyBjbGVhciB0aGF0IG5vIHdoaXRlc3BhY2UgaXMgYWxsb3dlZAp3aXRoaW4gYSBudW1iZXIsIGJ1dCAyMi4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5udW1wdW5jdCI+IFtsaWIubG9jYWxlLm51bXB1bmN0XTwvYT4sIHAyLCB3aGljaCBnaXZlcyB0aGUKZm9ybWF0IGZvciBpbnRlZ2VyIGFuZCBmbG9hdGluZyBwb2ludCB2YWx1ZXMsIHNheXMgdGhhdCB3aGl0ZXNwYWNlIGlzCm9wdGlvbmFsIGJldHdlZW4gYSBwbHVzbWludXMgYW5kIGEgc2lnbi4KPC9wPgoKPHA+ClRoZSB0ZXh0IG5lZWRzIHRvIGJlIGNsYXJpZmllZCB0byBlaXRoZXIgY29uc2lzdGVudGx5IGFsbG93IG9yCmRpc2FsbG93IHdoaXRlc3BhY2UgYmV0d2VlbiBhIHBsdXNtaW51cyBhbmQgYSBzaWduLiBJdCBtaWdodCBiZQp3b3J0aHdoaWxlIHRvIGNvbnNpZGVyIHRoZSBmYWN0IHRoYXQgdGhlIEMgbGlicmFyeSBzdGRpbyBmYWNpbGl0eSBkb2VzCm5vdCBwZXJtaXQgd2hpdGVzcGFjZSBlbWJlZGRlZCBpbiBudW1iZXJzIGFuZCBuZWl0aGVyIGRvZXMgdGhlIEMgb3IKQysrIGNvcmUgbGFuZ3VhZ2UgKHRoZSBzeW50YXggb2YgaW50ZWdlci1saXRlcmFscyBpcyBnaXZlbiBpbiAyLjEzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sZXguaHRtbCNsZXguaWNvbiI+IFtsZXguaWNvbl08L2E+LCB0aGF0IG9mIGZsb2F0aW5nLXBvaW50LWxpdGVyYWxzIGluIDIuMTMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xleC5odG1sI2xleC5mY29uIj4gW2xleC5mY29uXTwvYT4gb2YgdGhlIEMrKyBzdGFuZGFyZCkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIGZpcnN0IHBhcnQgb2YgMjIuMi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUubnVtcHVuY3QiPiBbbGliLmxvY2FsZS5udW1wdW5jdF08L2E+IHBhcmFncmFwaCAyIGZyb206PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCA8dHQ+d2hpdGVzcGFjZTwvdHQ+IGlzIGFzIGRldGVybWluZWQgYnkgdGhlIGZhY2V0Cjx0dD5jdHlwZSZsdDtjaGFyVCZndDs8L3R0PiAoMjIuMi4xLjEpLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQKPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlIHJlc3VsdHMgb2YgY29ycmVzcG9uZGluZwo8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4gIEludGVnZXIgdmFsdWVzIGhhdmUgdGhlCmZvcm1hdDoKPC9wPgo8cHJlPiAgaW50ZWdlciAgIDo6PSBbc2lnbl0gdW5pdHMKICBzaWduICAgICAgOjo9IHBsdXNtaW51cyBbd2hpdGVzcGFjZV0KICBwbHVzbWludXMgOjo9ICcrJyB8ICctJwogIHVuaXRzICAgICA6Oj0gZGlnaXRzIFt0aG91c2FuZHMtc2VwIHVuaXRzXQogIGRpZ2l0cyAgICA6Oj0gZGlnaXQgW2RpZ2l0c10KPC9wcmU+CjwvYmxvY2txdW90ZT4KPHA+dG86PC9wPgo8YmxvY2txdW90ZT4KPHA+ClRoZSBzeW50YXggZm9yIG51bWJlciBmb3JtYXRzIGlzIGFzIGZvbGxvd3MsIHdoZXJlIDx0dD5kaWdpdDwvdHQ+CnJlcHJlc2VudHMgdGhlIHJhZGl4IHNldCBzcGVjaWZpZWQgYnkgdGhlIDx0dD5mbXRmbGFnczwvdHQ+IGFyZ3VtZW50CnZhbHVlLCBhbmQgPHR0PnRob3VzYW5kcy1zZXA8L3R0PiBhbmQgPHR0PmRlY2ltYWwtcG9pbnQ8L3R0PiBhcmUgdGhlCnJlc3VsdHMgb2YgY29ycmVzcG9uZGluZyA8dHQ+bnVtcHVuY3QmbHQ7Y2hhclQmZ3Q7PC90dD4gbWVtYmVycy4KSW50ZWdlciB2YWx1ZXMgaGF2ZSB0aGUgZm9ybWF0Ogo8L3A+CjxwcmU+ICBpbnRlZ2VyICAgOjo9IFtzaWduXSB1bml0cwogIHNpZ24gICAgICA6Oj0gcGx1c21pbnVzCiAgcGx1c21pbnVzIDo6PSAnKycgfCAnLScKICB1bml0cyAgICAgOjo9IGRpZ2l0cyBbdGhvdXNhbmRzLXNlcCB1bml0c10KICBkaWdpdHMgICAgOjo9IGRpZ2l0IFtkaWdpdHNdCjwvcHJlPgo8L2Jsb2NrcXVvdGU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5JdCdzIG5vdCBjbGVhciB3aGV0aGVyIHRoZSBmb3JtYXQgZGVzY3JpYmVkIGluIDIyLjIuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLm51bXB1bmN0Ij4gW2xpYi5sb2NhbGUubnVtcHVuY3RdPC9hPiBwYXJhZ3JhcGggMiBoYXMgYW55IG5vcm1hdGl2ZSB3ZWlnaHQ6IG5vdGhpbmcgaW4gdGhlCnN0YW5kYXJkIHNheXMgaG93LCBvciB3aGV0aGVyLCBpdCdzIHVzZWQuICBIb3dldmVyLCB0aGVyZSdzIG5vIHJlYXNvbgpmb3IgaXQgdG8gZGlmZmVyIGdyYXR1aXRvdXNseSBmcm9tIHRoZSB2ZXJ5IHNwZWNpZmljIGRlc2NyaXB0aW9uIG9mCm51bWVyaWMgcHJvY2Vzc2luZyBpbiAyMi4yLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLmdldC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLmdldC52aXJ0dWFsc108L2E+LiAgVGhlIHByb3Bvc2VkCnJlc29sdXRpb24gcmVtb3ZlcyBhbGwgbWVudGlvbiBvZiAid2hpdGVzcGFjZSIgZnJvbSB0aGF0IGZvcm1hdC48L3A+Cjxocj4KPGEgbmFtZT0iMzM5Ij48L2E+PGgzPjxhIG5hbWU9IjMzOSI+MzM5LiZuYnNwO2RlZmluaXRpb24gb2YgYml0bWFzayB0eXBlIHJlc3RyaWN0ZWQgdG8gY2xhdXNlIDI3PC9hPjwvaDM+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4sIDE3LjMuMi4xLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIuYml0bWFzay50eXBlcyI+IFtsaWIuYml0bWFzay50eXBlc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNyBTZXB0ZW1iZXIgMjAwMTwvcD4KPHA+ClRoZSBjdHlwZV9jYXRlZ29yeTo6bWFzayB0eXBlIGlzIGRlY2xhcmVkIHRvIGJlIGFuIGVudW0gaW4gMjIuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuY2F0ZWdvcnkuY3R5cGUiPiBbbGliLmNhdGVnb3J5LmN0eXBlXTwvYT4gd2l0aCBwMSB0aGVuIHN0YXRpbmcgdGhhdCBpdCBpcyBhIGJpdG1hc2sgdHlwZSwgbW9zdApsaWtlbHkgcmVmZXJyaW5nIHRvIHRoZSBkZWZpbml0aW9uIG9mIGJpdG1hc2sgdHlwZSBpbiAxNy4zLjIuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLmJpdG1hc2sudHlwZXMiPiBbbGliLmJpdG1hc2sudHlwZXNdPC9hPiwgcDEuIEhvd2V2ZXIsIHRoZSBzYWlkIGRlZmluaXRpb24gb25seSBhcHBsaWVzIHRvCmNsYXVzZSAyNywgbWFraW5nIHRoZSByZWZlcmVuY2UgaW4gMjIuMi4xIHNvbWV3aGF0IGR1YmlvdXMuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DbGFyaWZ5IDE3LjMuMi4xLjIsIHAxIGJ5IGNoYW5naW5nIHRoZSBjdXJyZW50IHRleHQgZnJvbTwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgU2V2ZXJhbCB0eXBlcyBkZWZpbmVkIGluIGNsYXVzZSAyNyBhcmUgYml0bWFzayB0eXBlcy4gRWFjaCBiaXRtYXNrIHR5cGUKICAgIGNhbiBiZSBpbXBsZW1lbnRlZCBhcyBhbiBlbnVtZXJhdGVkIHR5cGUgdGhhdCBvdmVybG9hZHMgY2VydGFpbiBvcGVyYXRvcnMsCiAgICBhcyBhbiBpbnRlZ2VyIHR5cGUsIG9yIGFzIGEgYml0c2V0ICgyMy4zLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi50ZW1wbGF0ZS5iaXRzZXQiPiBbbGliLnRlbXBsYXRlLmJpdHNldF08L2E+KS4KICAgIDwvYmxvY2txdW90ZT4KPHA+dG8gcmVhZDwvcD4KICAgIDxibG9ja3F1b3RlPgogICAgU2V2ZXJhbCB0eXBlcyBkZWZpbmVkIGluIGNsYXVzZXMgbGliLmxhbmd1YWdlLnN1cHBvcnQgdGhyb3VnaCAKICAgIGxpYi5pbnB1dC5vdXRwdXQgYW5kIEFubmV4IEQgYXJlIGJpdG1hc2sgdHlwZXMuIEVhY2ggYml0bWFzayB0eXBlIGNhbgogICAgYmUgaW1wbGVtZW50ZWQgYXMgYW4gZW51bWVyYXRlZCB0eXBlIHRoYXQgb3ZlcmxvYWRzIGNlcnRhaW4gb3BlcmF0b3JzLAogICAgYXMgYW4gaW50ZWdlciAgdHlwZSwgb3IgYXMgYSBiaXRzZXQgKGxpYi50ZW1wbGF0ZS5iaXRzZXQpLgogICAgPC9ibG9ja3F1b3RlPgoKPHA+CkFkZGl0aW9uYWxseSwgY2hhbmdlIHRoZSBkZWZpbml0aW9uIGluIDIyLjIuMSB0byBhZG9wdCB0aGUgc2FtZQpjb252ZW50aW9uIGFzIGluIGNsYXVzZSAyNyBieSByZXBsYWNpbmcgdGhlIGV4aXN0aW5nIHRleHQgd2l0aCB0aGUKZm9sbG93aW5nIChub3RlLCBpbiBwYXJ0aWNsdWFyLCB0aGUgY3Jvc3MtcmVmZXJlbmNlIHRvIDE3LjMuMi4xLjIgaW4KMjIuMi4xLCBwMSk6CjwvcD4KCjxibG9ja3F1b3RlPgo8cD4yMi4yLjEgVGhlIGN0eXBlIGNhdGVnb3J5IFtsaWIuY2F0ZWdvcnkuY3R5cGVdPC9wPgo8cHJlPm5hbWVzcGFjZSBzdGQgewogICAgY2xhc3MgY3R5cGVfYmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiA8Yj48aT5UPC9pPjwvYj4gbWFzazsKCiAgICAgICAgLy8gbnVtZXJpYyB2YWx1ZXMgYXJlIGZvciBleHBvc2l0aW9uIG9ubHkuCiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSAxICZsdDsmbHQ7IDA7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHJpbnQgPSAxICZsdDsmbHQ7IDE7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSAxICZsdDsmbHQ7IDI7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgdXBwZXIgPSAxICZsdDsmbHQ7IDM7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSAxICZsdDsmbHQ7IDQ7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgYWxwaGEgPSAxICZsdDsmbHQ7IDU7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgZGlnaXQgPSAxICZsdDsmbHQ7IDY7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgcHVuY3QgPSAxICZsdDsmbHQ7IDc7CiAgICAgICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gMSAmbHQ7Jmx0OyA4OwogICAgICAgIHN0YXRpYyBjb25zdCBtYXNrIGFsbnVtID0gYWxwaGEgfCBkaWdpdDsKICAgICAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IGFsbnVtIHwgcHVuY3Q7CiAgICB9Owp9CjwvcHJlPgoKPHA+VGhlIHR5cGUgPHR0Pm1hc2s8L3R0PiBpcyBhIGJpdG1hc2sgdHlwZSAoMTcuMy4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5iaXRtYXNrLnR5cGVzIj4gW2xpYi5iaXRtYXNrLnR5cGVzXTwvYT4pLjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0N1cmHnYW86IFRoZSBMV0cgbm90ZXMgdGhhdCBUIGFib3ZlIHNob3VsZCBiZSBib2xkLWl0YWxpY3MgdG8gYmUKY29uc2lzdGVudCB3aXRoIHRoZSByZXN0IG9mIHRoZSBzdGFuZGFyZC5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzQwIj48L2E+PGgzPjxhIG5hbWU9IjM0MCI+MzQwLiZuYnNwO2ludGVycHJldGF0aW9uIG9mIDx0dD5oYXNfZmFjZXQmbHQ7RmFjZXQmZ3Q7KGxvYyk8L3R0Pgo8L2E+PC9oMz48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDE8L3A+CjxwPgpJdCdzIHVuY2xlYXIgd2hldGhlciAyMi4xLjEuMS4xLCBwMyBzYXlzIHRoYXQKPHR0Pmhhc19mYWNldCZsdDtGYWNldCZndDsobG9jKTwvdHQ+IHJldHVybnMgdHJ1ZSBmb3IgYW55IDx0dD5GYWNldDwvdHQ+CmZyb20gVGFibGUgNTEgb3Igd2hldGhlciBpdCBpbmNsdWRlcyBUYWJsZSA1MiBhcyB3ZWxsOgo8L3A+Cgo8YmxvY2txdW90ZT4KRm9yIGFueSBsb2NhbGUgPHR0PmxvYzwvdHQ+IGVpdGhlciBjb25zdHJ1Y3RlZCwgb3IgcmV0dXJuZWQgYnkKbG9jYWxlOjpjbGFzc2ljKCksIGFuZCBhbnkgZmFjZXQgPHR0PkZhY2V0PC90dD4gdGhhdCBpcyBhIG1lbWJlciBvZiBhCnN0YW5kYXJkIGNhdGVnb3J5LCA8dHQ+aGFzX2ZhY2V0Jmx0O0ZhY2V0Jmd0Oyhsb2MpPC90dD4gaXMgdHJ1ZS4gRWFjaApsb2NhbGUgbWVtYmVyIGZ1bmN0aW9uIHdoaWNoIHRha2VzIGEgPHR0PmxvY2FsZTo6Y2F0ZWdvcnk8L3R0Pgphcmd1bWVudCBvcGVyYXRlcyBvbiB0aGUgY29ycmVzcG9uZGluZyBzZXQgb2YgZmFjZXRzLgo8L2Jsb2NrcXVvdGU+Cgo8cD4KSXQgc2VlbXMgdGhhdCBpdCBjb21lcyBkb3duIHRvIHdoaWNoIGZhY2V0cyBhcmUgY29uc2lkZXJlZCB0byBiZSBtZW1iZXJzIG9mIGEKc3RhbmRhcmQgY2F0ZWdvcnkuIEludHVpdGl2ZWx5LCBJIHdvdWxkIGNsYXNzaWZ5IGFsbCB0aGUgZmFjZXRzIGluIFRhYmxlIDUyIGFzCm1lbWJlcnMgb2YgdGhlaXIgcmVzcGVjdGl2ZSBzdGFuZGFyZCBjYXRlZ29yaWVzLCBidXQgdGhlcmUgYXJlIGFuIHVuYm91bmRlZCBzZXQKb2YgdGhlbS4uLgo8L3A+Cgo8cD4KVGhlIHBhcmFncmFwaCBpbXBsaWVzIHRoYXQsIGZvciBpbnN0YW5jZSwgPHR0Pmhhc19mYWNldCZsdDtudW1fcHV0Jmx0O0MsCk91dHB1dEl0ZXJhdG9yJmd0OyAmZ3Q7KGxvYyk8L3R0PiBtdXN0IGFsd2F5cyByZXR1cm4gdHJ1ZS4gSSBkb24ndCB0aGluayB0aGF0J3MKcG9zc2libGUuIElmIGl0IHdlcmUsIHRoZW4gPHR0PnVzZV9mYWNldCZsdDtudW1fcHV0Jmx0O0MsIE91dHB1dEl0ZXJhdG9yJmd0OwomZ3Q7KGxvYyk8L3R0PiB3b3VsZCBoYXZlIHRvIHJldHVybiBhIHJlZmVyZW5jZSB0byBhIGRpc3RpbmN0IG9iamVjdCBmb3IgZWFjaAp2YWxpZCBzcGVjaWFsaXphdGlvbiBvZiA8dHQ+bnVtX3B1dCZsdDtDLCBPdXRwdXRJdGVyYXRvcnkmZ3Q7PC90dD4sIHdoaWNoIGlzCmNsZWFybHkgaW1wb3NzaWJsZS4KPC9wPgoKPHA+Ck9uIHRoZSBvdGhlciBoYW5kLCBpZiBub25lIG9mIHRoZSBmYWNldHMgaW4gVGFibGUgNTIgaXMgYSBtZW1iZXIgb2YgYSBzdGFuZGFyZApjYXRlZ29yeSB0aGVuIG5vbmUgb2YgdGhlIGxvY2FsZSBtZW1iZXIgZnVuY3Rpb25zIHRoYXQgb3BlcmF0ZSBvbiBlbnRpcmUKY2F0ZWdvcmllcyBvZiBmYWNldHMgd2lsbCB3b3JrIHByb3Blcmx5Lgo8L3A+Cgo8cD4KSXQgc2VlbXMgdGhhdCB3aGF0IHAzIHNob3VsZCBtZW50aW9uIHRoYXQgaXQncyByZXF1aXJlZCAocGVybWl0dGVkPykKdG8gaG9sZCBvbmx5IGZvciBzcGVjaWFsaXphdGlvbnMgb2YgPHR0PkZhY2V0PC90dD4gZnJvbSBUYWJsZSA1MiBvbgo8dHQ+QzwvdHQ+IGZyb20gdGhlIHNldCB7IDx0dD5jaGFyPC90dD4sIDx0dD53Y2hhcl90PC90dD4gfSwgYW5kCjx0dD5JbnB1dEl0ZXJhdG9yPC90dD4gYW5kIDx0dD5PdXRwdXRJdGVyYXRvcjwvdHQ+IGZyb20gdGhlIHNldCBvZgp7CntpLG99PHR0PnN0cmVhbWJ1Zl9pdGVyYXRvcjwvdHQ+Jmx0O3s8dHQ+Y2hhcjwvdHQ+LDx0dD53Y2hhcl90PC90dD59PHR0PiZndDs8L3R0Pgp9Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4xLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jYXRlZ29yeSI+IFtsaWIubG9jYWxlLmNhdGVnb3J5XTwvYT4sIHBhcmFncmFwaCAzLCBjaGFuZ2UKInRoYXQgaXMgYSBtZW1iZXIgb2YgYSBzdGFuZGFyZCBjYXRlZ29yeSIgdG8gInNob3duIGluIFRhYmxlIDUxIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgZmFjZXRzIGluIFRhYmxlIDUyIGFyZSBhbiB1bmJvdW5kZWQgc2V0LiAgTG9jYWxlcyBzaG91bGQgbm90IGJlCnJlcXVpcmVkIHRvIGNvbnRhaW4gYW4gaW5maW5pdGUgbnVtYmVyIG9mIGZhY2V0cy48L3A+IAoKPHA+SXQncyBub3QgbmVjZXNzYXJ5IHRvIHRhbGsgYWJvdXQgd2hpY2ggdmFsdWVzIG9mIElucHV0SXRlcmF0b3IgYW5kCk91dHB1dEl0ZXJhdG9yIG11c3QgYmUgc3VwcG9ydGVkLiAgVGFibGUgNTEgYWxyZWFkeSBjb250YWlucyBhCmNvbXBsZXRlIGxpc3Qgb2YgdGhlIG9uZXMgd2UgbmVlZC48L3A+Cjxocj4KPGEgbmFtZT0iMzQxIj48aDM+MzQxLiZuYnNwO1ZlY3RvciByZWFsbG9jYXRpb24gYW5kIHN3YXA8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5jYXBhY2l0eSI+IFtsaWIudmVjdG9yLmNhcGFjaXR5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7QW50aG9ueSBXaWxsaWFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBTZXAgMjAwMTwvcD4KPHA+SXQgaXMgYSBjb21tb24gaWRpb20gdG8gcmVkdWNlIHRoZSBjYXBhY2l0eSBvZiBhIHZlY3RvciBieSBzd2FwcGluZyBpdCB3aXRoCmFuIGVtcHR5IG9uZTo8L3A+CjxwcmU+ICBzdGQ6OnZlY3RvciZsdDtTb21lVHlwZSZndDsgdmVjOwogIC8vIGZpbGwgdmVjIHdpdGggZGF0YQogIHN0ZDo6dmVjdG9yJmx0O1NvbWVUeXBlJmd0OygpLnN3YXAodmVjKTsKICAvLyB2ZWMgaXMgbm93IGVtcHR5LCB3aXRoIG1pbmltYWwgY2FwYWNpdHkKPC9wcmU+Cgo8cD5Ib3dldmVyLCB0aGUgd29yZGluZyBvZiAyMy4yLjQuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnZlY3Rvci5jYXBhY2l0eSI+IFtsaWIudmVjdG9yLmNhcGFjaXR5XTwvYT5wYXJhZ3JhcGggNSBwcmV2ZW50cwp0aGUgY2FwYWNpdHkgb2YgYSB2ZWN0b3IgYmVpbmcgcmVkdWNlZCwgZm9sbG93aW5nIGEgY2FsbCB0bwpyZXNlcnZlKCkuIFRoaXMgaW52YWxpZGF0ZXMgdGhlIGlkaW9tLCBhcyBzd2FwKCkgaXMgdGh1cyBwcmV2ZW50ZWQKZnJvbSByZWR1Y2luZyB0aGUgY2FwYWNpdHkuIFRoZSBwcm9wb3NlZCB3b3JkaW5nIGZvciBpc3N1ZSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1kZWZlY3RzLmh0bWwjMzI5Ij4zMjk8L2E+IGRvZXMgbm90IGFmZmVjdCB0aGlzLiAgQ29uc2VxdWVudGx5LCB0aGUgZXhhbXBsZSBhYm92ZQpyZXF1aXJlcyB0aGUgdGVtcG9yYXJ5IHRvIGJlIGV4cGFuZGVkIHRvIGNhdGVyIGZvciB0aGUgY29udGVudHMgb2YKdmVjLCBhbmQgdGhlIGNvbnRlbnRzIGJlIGNvcGllZCBhY3Jvc3MuIFRoaXMgaXMgYSBsaW5lYXItdGltZQpvcGVyYXRpb24uPC9wPgoKPHA+SG93ZXZlciwgdGhlIGNvbnRhaW5lciByZXF1aXJlbWVudHMgc3RhdGUgdGhhdCBzd2FwIG11c3QgaGF2ZSBjb25zdGFudApjb21wbGV4aXR5ICgyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IG5vdGUgdG8gdGFibGUgNjUpLjwvcD4KCjxwPlRoaXMgaXMgYW4gaW1wb3J0YW50IGlzc3VlLCBhcyByZWFsbG9jYXRpb24gYWZmZWN0cyB0aGUgdmFsaWRpdHkgb2YKcmVmZXJlbmNlcyBhbmQgaXRlcmF0b3JzLjwvcD4KCjxwPklmIHRoZSB3b3JkaW5nIG9mIDIzLjIuNC4ycDUgaXMgdGFrZW4gdG8gYmUgdGhlIGRlc2lyZWQgaW50ZW50LCB0aGVuCnJlZmVyZW5jZXMgYW5kIGl0ZXJhdG9ycyByZW1haW4gdmFsaWQgYWZ0ZXIgYSBjYWxsIHRvIHN3YXAsIGlmIHRoZXkgcmVmZXIgdG8KYW4gZWxlbWVudCBiZWZvcmUgdGhlIG5ldyBlbmQoKSBvZiB0aGUgdmVjdG9yIGludG8gd2hpY2ggdGhleSBvcmlnaW5hbGx5CnBvaW50ZWQsIGluIHdoaWNoIGNhc2UgdGhleSByZWZlciB0byB0aGUgZWxlbWVudCBhdCB0aGUgc2FtZSBpbmRleCBwb3NpdGlvbi4KSXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHRoYXQgcmVmZXJyZWQgdG8gYW4gZWxlbWVudCB3aG9zZSBpbmRleCBwb3NpdGlvbgp3YXMgYmV5b25kIHRoZSBuZXcgZW5kIG9mIHRoZSB2ZWN0b3IgYXJlIGludmFsaWRhdGVkLjwvcD4KCjxwPklmIHRoZSBub3RlIHRvIHRhYmxlIDY1IGlzIHRha2VuIGFzIHRoZSBkZXNpcmVkIGludGVudCwgdGhlbiB0aGVyZSBhcmUgdHdvCnBvc3NpYmlsaXRpZXMgd2l0aCByZWdhcmQgdG8gaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzOjwvcD4KCjxvbD4KPGxpPkFsbCBJdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgaW50byBib3RoIHZlY3RvcnMgYXJlIGludmFsaWRhdGVkLjwvbGk+CjxsaT5JdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgaW50byBlaXRoZXIgdmVjdG9yIHJlbWFpbiB2YWxpZCwgYW5kIHJlbWFpbgpwb2ludGluZyB0byB0aGUgc2FtZSBlbGVtZW50LiBDb25zZXF1ZW50bHkgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzIHRoYXQKcmVmZXJyZWQgdG8gb25lIHZlY3RvciBub3cgcmVmZXIgdG8gdGhlIG90aGVyLCBhbmQgdmljZS12ZXJzYS48L2xpPgo8L29sPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkFkZCBhIG5ldyBwYXJhZ3JhcGggYWZ0ZXIgMjMuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi52ZWN0b3IuY2FwYWNpdHkiPiBbbGliLnZlY3Rvci5jYXBhY2l0eV08L2E+IHBhcmFncmFwaCA1OjwvcD4KPGJsb2NrcXVvdGU+CjxwcmU+ICB2b2lkIHN3YXAodmVjdG9yJmx0O1QsQWxsb2NhdG9yJmd0OyZhbXA7IHgpOwo8L3ByZT4KPHA+PGI+RWZmZWN0czo8L2I+IEV4Y2hhbmdlcyB0aGUgY29udGVudHMgYW5kIGNhcGFjaXR5KCkgb2YgPHR0Pip0aGlzPC90dD4Kd2l0aCB0aGF0IG9mIDx0dD54PC90dD4uPC9wPgo8cD48Yj5Db21wbGV4aXR5OjwvYj4gQ29uc3RhbnQgdGltZS48L3A+CjwvYmxvY2txdW90ZT4KCjxwPjxpPltUaGlzIHNvbHZlcyB0aGUgcHJvYmxlbSByZXBvcnRlZCBmb3IgdGhpcyBpc3N1ZS4gIFdlIG1heSBhbHNvCmhhdmUgYSBwcm9ibGVtIHdpdGggYSBjaXJjdWxhciBkZWZpbml0aW9uIG9mIHN3YXAoKSBmb3Igb3RoZXIKY29udGFpbmVycy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD4Kc3dhcCBzaG91bGQgYmUgY29uc3RhbnQgdGltZS4gIFRoZSBjbGVhciBpbnRlbnQgaXMgdGhhdCBpdCBzaG91bGQganVzdApkbyBwb2ludGVyIHR3aWRkbGluZywgYW5kIHRoYXQgaXQgc2hvdWxkIGV4Y2hhbmdlIGFsbCBwcm9wZXJ0aWVzIG9mCnRoZSB0d28gdmVjdG9ycywgaW5jbHVkaW5nIHRoZWlyIHJlYWxsb2NhdGlvbiBndWFyYW50ZWVzLgo8L3A+Cjxocj4KPGEgbmFtZT0iMzQ1Ij48aDM+MzQ1LiZuYnNwO3R5cGUgdG0gaW4gJmx0O2N3Y2hhciZndDs8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYy5zdHJpbmdzIj4gW2xpYi5jLnN0cmluZ3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtDbGFyayBOZWxzb24mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTkgT2N0IDIwMDE8L3A+CjxwPgpDOTksIGFuZCBwcmVzdW1hYmx5IGFtZW5kbWVudCAxIHRvIEM5MCwgc3BlY2lmeSB0aGF0ICZsdDt3Y2hhci5oJmd0OwpkZWNsYXJlcyBzdHJ1Y3QgdG0gYXMgYW4gaW5jb21wbGV0ZSB0eXBlLiBIb3dldmVyLCB0YWJsZSA0OCBpbiAyMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYy5zdHJpbmdzIj4gW2xpYi5jLnN0cmluZ3NdPC9hPiBkb2VzIG5vdCBtZW50aW9uIHRoZSB0eXBlIHRtIGFzIGJlaW5nIGRlY2xhcmVkIGluCiZsdDtjd2NoYXImZ3Q7LiBJcyB0aGlzIG9taXNzaW9uIGludGVudGlvbmFsIG9yIGFjY2lkZW50YWw/CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiBzZWN0aW9uIDIxLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5jLnN0cmluZ3MiPiBbbGliLmMuc3RyaW5nc108L2E+LCBhZGQgInRtIiB0byB0YWJsZSA0OC48L3A+Cjxocj4KPGEgbmFtZT0iMzQ2Ij48aDM+MzQ2LiZuYnNwO1NvbWUgaXRlcmF0b3IgbWVtYmVyIGZ1bmN0aW9ucyBzaG91bGQgYmUgY29uc3Q8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0plcmVteSBTaWVrJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE9jdCAyMDAxPC9wPgo8cD5JdGVyYXRvciBtZW1iZXIgZnVuY3Rpb25zIGFuZCBvcGVyYXRvcnMgdGhhdCBkbyBub3QgY2hhbmdlIHRoZSBzdGF0ZQpvZiB0aGUgaXRlcmF0b3Igc2hvdWxkIGJlIGRlZmluZWQgYXMgY29uc3QgbWVtYmVyIGZ1bmN0aW9ucyBvciBhcwpmdW5jdGlvbnMgdGhhdCB0YWtlIGl0ZXJhdG9ycyBlaXRoZXIgYnkgY29uc3QgcmVmZXJlbmNlIG9yIGJ5CnZhbHVlLiBUaGUgc3RhbmRhcmQgZG9lcyBub3QgZXhwbGljaXRseSBzdGF0ZSB3aGljaCBmdW5jdGlvbnMgc2hvdWxkCmJlIGNvbnN0LiAgU2luY2UgdGhpcyBhIGZhaXJseSBjb21tb24gbWlzdGFrZSwgdGhlIGZvbGxvd2luZyBjaGFuZ2VzCmFyZSBzdWdnZXN0ZWQgdG8gbWFrZSB0aGlzIGV4cGxpY2l0LjwvcD4KCjxwPlRoZSB0YWJsZXMgYWxtb3N0IGluZGljYXRlIGNvbnN0bmVzcyBwcm9wZXJseSB0aHJvdWdoIG5hbWluZzogcgpmb3Igbm9uLWNvbnN0IGFuZCBhLGIgZm9yIGNvbnN0IGl0ZXJhdG9ycy4gVGhlIGZvbGxvd2luZyBjaGFuZ2VzCm1ha2UgdGhpcyBtb3JlIGV4cGxpY2l0IGFuZCBhbHNvIGZpeCBhIGNvdXBsZSBwcm9ibGVtcy48L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjQuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIuaXRlcmF0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHNdPC9hPiBDaGFuZ2UgdGhlIGZpcnN0IHNlY3Rpb24gb2YgcDkgZnJvbQoiSW4gdGhlIGZvbGxvd2luZyBzZWN0aW9ucywgYSBhbmQgYiBkZW5vdGUgdmFsdWVzIG9mIFguLi4iIHRvCiJJbiB0aGUgZm9sbG93aW5nIHNlY3Rpb25zLCBhIGFuZCBiIGRlbm90ZSB2YWx1ZXMgb2YgdHlwZSBjb25zdCBYLi4uIi48L3A+Cgo8cD5JbiBUYWJsZSA3MywgY2hhbmdlPC9wPgo8cHJlPiAgICBhLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+dG88L3A+Cgo8cHJlPiAgICBhLSZndDttICAgY29uc3QgVSZhbXA7ICAgLi4uCiAgICByLSZndDttICAgVSZhbXA7ICAgICAgICAgLi4uCjwvcHJlPgoKPHA+SW4gVGFibGUgNzMgZXhwcmVzc2lvbiBjb2x1bW4sIGNoYW5nZTwvcD4KCjxwcmU+ICAgICphID0gdAo8L3ByZT4KCjxwPnRvPC9wPgoKPHByZT4gICAgKnIgPSB0CjwvcHJlPgoKPHA+PGk+W1JlZG1vbmQ6IFRoZSBjb250YWluZXIgcmVxdWlyZW1lbnRzIHNob3VsZCBiZSByZXZpZXdlZCB0byBzZWUgaWYKdGhlIHNhbWUgcHJvYmxlbSBhcHBlYXJzIHRoZXJlLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSIzNDciPjxoMz4zNDcuJm5ic3A7bG9jYWxlOjpjYXRlZ29yeSBhbmQgYml0bWFzayByZXF1aXJlbWVudHM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4xLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNhdGVnb3J5Ij4gW2xpYi5sb2NhbGUuY2F0ZWdvcnldPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQLkouIFBsYXVnZXIsIE5hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyMyBPY3QgMjAwMTwvcD4KPHA+CkluIDIyLjEuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY2F0ZWdvcnkiPiBbbGliLmxvY2FsZS5jYXRlZ29yeV08L2E+IHBhcmFncmFwaCAxLCB0aGUgY2F0ZWdvcnkgbWVtYmVycwphcmUgZGVzY3JpYmVkIGFzIGJpdG1hc2sgZWxlbWVudHMuICBJbiBmYWN0LCB0aGUgYml0bWFzayByZXF1aXJlbWVudHMKaW4gMTcuMy4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5iaXRtYXNrLnR5cGVzIj4gW2xpYi5iaXRtYXNrLnR5cGVzXTwvYT4gZG9uJ3Qgc2VlbSBxdWl0ZSByaWdodDogPHR0Pm5vbmU8L3R0PgphbmQgPHR0PmFsbDwvdHQ+IGFyZSBiaXRtYXNrIGNvbnN0YW50cywgbm90IGJpdG1hc2sgZWxlbWVudHMuPC9wPgoKPHA+SW4gcGFydGljdWxhciwgdGhlIHJlcXVpcmVtZW50cyBmb3IgPHR0Pm5vbmU8L3R0PiBpbnRlcmFjdCBwb29ybHkKd2l0aCB0aGUgcmVxdWlyZW1lbnQgdGhhdCB0aGUgTENfKiBjb25zdGFudHMgZnJvbSB0aGUgQyBsaWJyYXJ5IG11c3QKYmUgcmVjb2duaXphYmxlIGFzIEMrKyBsb2NhbGUgY2F0ZWdvcnkgY29uc3RhbnRzLiAgTENfKiB2YWx1ZXMgc2hvdWxkCm5vdCBiZSBtaXhlZCB3aXRoIHRoZXNlIHZhbHVlcyB0byBtYWtlIGNhdGVnb3J5IHZhbHVlcy48L3A+Cgo8cD5XZSBoYXZlIHR3byBvcHRpb25zIGZvciB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbi4gIEluZm9ybWFsbHk6Cm9wdGlvbiAxIHJlbW92ZXMgdGhlIHJlcXVpcmVtZW50IHRoYXQgTENfKiB2YWx1ZXMgYmUgcmVjb2duaXplZCBhcwpjYXRlZ29yeSBhcmd1bWVudHMuICBPcHRpb24gMiBjaGFuZ2VzIHRoZSBjYXRlZ29yeSB0eXBlIHNvIHRoYXQgdGhpcwpyZXF1aXJlbWVudCBpcyBpbXBsZW1lbnRhYmxlLCBieSBhbGxvd2luZyA8dHQ+bm9uZTwvdHQ+IHRvIGJlIHNvbWUKdmFsdWUgc3VjaCBhcyAweDEwMDAgaW5zdGVhZCBvZiAwLjwvcD4KCjxwPk5hdGhhbiB3cml0ZXM6ICJJIGJlbGlldmUgbXkgcHJvcG9zZWQgcmVzb2x1dGlvbiBbT3B0aW9uIDJdIG1lcmVseQpyZS1leHByZXNzZXMgdGhlIHN0YXR1cyBxdW8gbW9yZSBjbGVhcmx5LCB3aXRob3V0IGludHJvZHVjaW5nIGFueQpjaGFuZ2VzIGJleW9uZCByZXNvbHZpbmcgdGhlIERSLjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVwbGFjZSB0aGUgZmlyc3QgdHdvIHBhcmFncmFwaHMgb2YgMjIuMS4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUudHlwZXMiPiBbbGliLmxvY2FsZS50eXBlc108L2E+IHdpdGg6PC9wPgo8YmxvY2txdW90ZT4KPHByZT4gICAgdHlwZWRlZiBpbnQgY2F0ZWdvcnk7CjwvcHJlPgoKPHA+VmFsaWQgY2F0ZWdvcnkgdmFsdWVzIGluY2x1ZGUgdGhlIDx0dD5sb2NhbGU8L3R0PiBtZW1iZXIgYml0bWFzawplbGVtZW50cyA8dHQ+Y29sbGF0ZTwvdHQ+LCA8dHQ+Y3R5cGU8L3R0PiwgPHR0Pm1vbmV0YXJ5PC90dD4sCjx0dD5udW1lcmljPC90dD4sIDx0dD50aW1lPC90dD4sIGFuZCA8dHQ+bWVzc2FnZXM8L3R0PiwgZWFjaCBvZiB3aGljaApyZXByZXNlbnRzIGEgc2luZ2xlIGxvY2FsZSBjYXRlZ29yeS4gSW4gYWRkaXRpb24sIDx0dD5sb2NhbGU8L3R0PiBtZW1iZXIKYml0bWFzayBjb25zdGFudCA8dHQ+bm9uZTwvdHQ+IGlzIGRlZmluZWQgYXMgemVybyBhbmQgcmVwcmVzZW50cyBubwpjYXRlZ29yeS4gQW5kIGxvY2FsZSBtZW1iZXIgYml0bWFzayBjb25zdGFudCA8dHQ+YWxsPC90dD4gaXMgZGVmaW5lZCBzdWNoIHRoYXQKdGhlIGV4cHJlc3Npb248L3A+CjxwcmU+ICAgIChjb2xsYXRlIHwgY3R5cGUgfCBtb25ldGFyeSB8IG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMgfCBhbGwpID09IGFsbAo8L3ByZT4KPHA+CmlzIDx0dD50cnVlPC90dD4sIGFuZCByZXByZXNlbnRzIHRoZSB1bmlvbiBvZiBhbGwgY2F0ZWdvcmllcy4gIEZ1cnRoZXIKdGhlIGV4cHJlc3Npb24gPHR0PihYIHwgWSk8L3R0Piwgd2hlcmUgPHR0Plg8L3R0PiBhbmQgPHR0Plk8L3R0PiBlYWNoCnJlcHJlc2VudCBhIHNpbmdsZSBjYXRlZ29yeSwgcmVwcmVzZW50cyB0aGUgdW5pb24gb2YgdGhlIHR3bwpjYXRlZ29yaWVzLgo8L3A+Cgo8cD4KPHR0PmxvY2FsZTwvdHQ+IG1lbWJlciBmdW5jdGlvbnMgZXhwZWN0aW5nIGEgPHR0PmNhdGVnb3J5PC90dD4KYXJndW1lbnQgcmVxdWlyZSBvbmUgb2YgdGhlIDx0dD5jYXRlZ29yeTwvdHQ+IHZhbHVlcyBkZWZpbmVkIGFib3ZlLCBvcgp0aGUgdW5pb24gb2YgdHdvIG9yIG1vcmUgc3VjaCB2YWx1ZXMuIFN1Y2ggYSA8dHQ+Y2F0ZWdvcnk8L3R0Pgphcmd1bWVudCBpZGVudGlmaWVzIGEgc2V0IG9mIGxvY2FsZSBjYXRlZ29yaWVzLiBFYWNoIGxvY2FsZSBjYXRlZ29yeSwKaW4gdHVybiwgaWRlbnRpZmllcyBhIHNldCBvZiBsb2NhbGUgZmFjZXRzLCBpbmNsdWRpbmcgYXQgbGVhc3QgdGhvc2UKc2hvd24gaW4gVGFibGUgNTE6CjwvcD4KPC9ibG9ja3F1b3RlPgo8cD48aT5bQ3VyYedhbzogbmVlZCBpbnB1dCBmcm9tIGxvY2FsZSBleHBlcnRzLl08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+Cgo8cD5UaGUgTFdHIGNvbnNpZGVyZWQsIGFuZCByZWplY3RlZCwgYW4gYWx0ZXJuYXRlIHByb3Bvc2FsIChkZXNjcmliZWQKICBhcyAiT3B0aW9uIDIiIGluIHRoZSBkaXNjdXNzaW9uKS4gIFRoZSBtYWluIHJlYXNvbiBmb3IgcmVqZWN0aW5nIGl0CiAgd2FzIHRoYXQgbGlicmFyeSBpbXBsZW1lbnRvcnMgd2VyZSBjb25jZXJlbmVkIGFib3V0IGltcGxlbWVudGF0aW9uCiAgZGlmZmljdWx0LCBnaXZlbiB0aGF0IGdldHRpbmcgYSBDKysgbGlicmFyeSB0byB3b3JrIHNtb290aGx5IHdpdGggYQogIHNlcGFyYXRlbHkgd3JpdHRlbiBDIGxpYnJhcnkgaXMgYWxyZWFkeSBhIGRlbGljYXRlIGJ1c2luZXNzLiAgU29tZQogIGxpYnJhcnkgaW1wbGVtZW50ZXJzIHdlcmUgYWxzbyBjb25jZXJuZWQgYWJvdXQgdGhlIGlzc3VlIG9mIGFkZGluZwogIGV4dHJhIGxvY2FsZSBjYXRlZ29yaWVzLjwvcD4KCjxibG9ja3F1b3RlPgo8cD48Yj5PcHRpb24gMjo8L2I+IDxicj4KUmVwbGFjZSB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIDIyLjEuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLnR5cGVzIj4gW2xpYi5sb2NhbGUudHlwZXNdPC9hPiB3aXRoOjwvcD4KPGJsb2NrcXVvdGU+CjxwPgpWYWxpZCBjYXRlZ29yeSB2YWx1ZXMgaW5jbHVkZSB0aGUgZW51bWVyYXRlZCB2YWx1ZXMuICBJbiBhZGRpdGlvbiwgdGhlCnJlc3VsdCBvZiBhcHBseWluZyBjb21tdXRhdGl2ZSBvcGVyYXRvcnMgfCBhbmQgJmFtcDsgdG8gYW55IHR3byB2YWxpZCAKdmFsdWVzIGlzIHZhbGlkLCBhbmQgcmVzdWx0cyBpbiB0aGUgc2V0d2lzZSB1bmlvbiBhbmQgaW50ZXJzZWN0aW9uLCAKcmVzcGVjdGl2ZWx5LCBvZiB0aGUgYXJndW1lbnQgY2F0ZWdvcmllcy4gIFRoZSB2YWx1ZXMgPHR0PmFsbDwvdHQ+IGFuZCAKPHR0Pm5vbmU8L3R0PiBhcmUgZGVmaW5lZCBzdWNoIHRoYXQgZm9yIGFueSB2YWxpZCB2YWx1ZSA8dHQ+Y2F0PC90dD4sIHRoZQpleHByZXNzaW9ucyA8dHQ+KGNhdCB8IGFsbCA9PSBhbGwpPC90dD4sIDx0dD4oY2F0ICZhbXA7IGFsbCA9PSBjYXQpPC90dD4sCjx0dD4oY2F0IHwgbm9uZSA9PSBjYXQpPC90dD4gYW5kIDx0dD4oY2F0ICZhbXA7IG5vbmUgPT0gbm9uZSk8L3R0PiBhcmUgCnRydWUuICBGb3Igbm9uLWVxdWFsIHZhbHVlcyA8dHQ+Y2F0MTwvdHQ+IGFuZCA8dHQ+Y2F0MjwvdHQ+IG9mIHRoZQpyZW1haW5pbmcgZW51bWVyYXRlZCB2YWx1ZXMsIDx0dD4oY2F0MSAmYW1wOyBjYXQyID09IG5vbmUpPC90dD4gaXMgdHJ1ZS4KRm9yIGFueSB2YWxpZCBjYXRlZ29yaWVzIDx0dD5jYXQxPC90dD4gYW5kIDx0dD5jYXQyPC90dD4sIHRoZSByZXN1bHQKb2YgPHR0PihjYXQxICZhbXA7IH5jYXQyKTwvdHQ+IGlzIHZhbGlkLCBhbmQgZXF1YWxzIHRoZSBzZXR3aXNlIHVuaW9uIG9mIAp0aG9zZSBjYXRlZ29yaWVzIGZvdW5kIGluIDx0dD5jYXQxPC90dD4gYnV0IG5vdCBmb3VuZCBpbiA8dHQ+Y2F0MjwvdHQ+LgpbRm9vdG5vdGU6IGl0IGlzIG5vdCByZXF1aXJlZCB0aGF0IDx0dD5hbGw8L3R0PiBlcXVhbCB0aGUgc2V0d2lzZSB1bmlvbgpvZiB0aGUgb3RoZXIgZW51bWVyYXRlZCB2YWx1ZXM7IGltcGxlbWVudGF0aW9ucyBtYXkgYWRkIGV4dHJhIGNhdGVnb3JpZXMuXQo8L3A+CjwvYmxvY2txdW90ZT4KPC9ibG9ja3F1b3RlPgo8aHI+CjxhIG5hbWU9IjM0OSI+PGgzPjM0OS4mbmJzcDtNaW5vciB0eXBvZ3JhcGhpY2FsIGVycm9yIGluIG9zdHJlYW1faXRlcmF0b3I8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW0uaXRlcmF0b3IiPiBbbGliLm9zdHJlYW0uaXRlcmF0b3JdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtBbmR5IFNhd3llciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNCBPY3QgMjAwMTwvcD4KPHA+MjQuNS4yIFtsaWIub3N0cmVhbS5pdGVyYXRvcl0gc3RhdGVzOjwvcD4KPHByZT4gICAgWy4uLl0KCiAgICBwcml2YXRlOgogICAgLy8gYmFzaWNfb3N0cmVhbSZsdDtjaGFyVCx0cmFpdHMmZ3Q7KiBvdXRfc3RyZWFtOyBleHBvc2l0aW9uIG9ubHkKICAgIC8vIGNvbnN0IGNoYXIqIGRlbGltOyBleHBvc2l0aW9uIG9ubHkKPC9wcmU+Cgo8cD5XaGlsc3QgaXQncyBjbGVhcmx5IG1hcmtlZCAiZXhwb3NpdGlvbiBvbmx5IiwgSSBzdXNwZWN0ICdkZWxpbScKc2hvdWxkIGJlIG9mIHR5cGUgJ2NvbnN0IGNoYXJUKicuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNC41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLm9zdHJlYW0uaXRlcmF0b3IiPiBbbGliLm9zdHJlYW0uaXRlcmF0b3JdPC9hPiwgcmVwbGFjZSA8dHQ+Y29uc3QgY2hhciogZGVsaW08L3R0PiB3aXRoCjx0dD5jb25zdCBjaGFyVCogZGVsaW08L3R0Pi4KPC9wPgo8aHI+CjxhIG5hbWU9IjM1MiI+PGgzPjM1Mi4mbmJzcDttaXNzaW5nIGZwb3MgcmVxdWlyZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuY2hhci50cmFpdHMudHlwZWRlZnMiPiBbbGliLmNoYXIudHJhaXRzLnR5cGVkZWZzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIgRGVjIDIwMDE8L3A+CjxwPgo8aT4oMSk8L2k+ClRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgb24gdGhlIDx0dD5zdGF0ZVQ8L3R0PiB0ZW1wbGF0ZSBwYXJhbWV0ZXIgb2YKPHR0PmZwb3M8L3R0PiBsaXN0ZWQgaW4gMjcuNC4zLiBUaGUgaW50ZXJmYWNlIGFwcGVhcnMgdG8gcmVxdWlyZSB0aGF0CnRoZSB0eXBlIGJlIGF0IGxlYXN0IEFzc2lnbmFibGUgYW5kIENvcHlDb25zdHJ1Y3RpYmxlICgyNy40LjMuMSwgcDEpLAphbmQgSSB0aGluayBhbHNvIERlZmF1bHRDb25zdHJ1Y3RpYmxlICh0byBpbXBsZW1lbnQgdGhlIG9wZXJhdGlvbnMgaW4KVGFibGUgODgpLgo8L3A+CjxwPgoyMS4xLjIsIHAzLCBob3dldmVyLCBvbmx5IHJlcXVpcmVzIHRoYXQKPHR0PmNoYXJfdHJhaXRzJmx0O2NoYXJUJmd0Ozo6c3RhdGVfdHlwZTwvdHQ+IG1lZXQgdGhlIHJlcXVpcmVtZW50cyBvZgpDb3B5Q29uc3RydWN0aWJsZSB0eXBlcy4KPC9wPgo8cD4KPGk+KDIpPC9pPgpBZGRpdGlvbmFsbHksIHRoZSA8dHQ+c3RhdGVUPC90dD4gdGVtcGxhdGUgYXJndW1lbnQgaGFzIG5vCmNvcnJlc3BvbmRpbmcgdHlwZWRlZiBpbiBmcG9zIHdoaWNoIG1pZ2h0IG1ha2UgaXQgZGlmZmljdWx0IHRvIHVzZSBpbgpnZW5lcmljIGNvZGUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KTW9kaWZ5IDIxLjEuMiwgcDQgZnJvbQo8L3A+CjxwPgogICAgUmVxdWlyZXM6IDx0dD5zdGF0ZV90eXBlPC90dD4gc2hhbGwgbWVldCB0aGUgcmVxdWlyZW1lbnRzIG9mCiAgICAgICAgICAgICAgQ29weUNvbnN0cnVjdGlibGUgdHlwZXMgKDIwLjEuMykuCjwvcD4KPHA+CiAgICBSZXF1aXJlczogc3RhdGVfdHlwZSBzaGFsbCBtZWV0IHRoZSByZXF1aXJlbWVudHMgb2YgQXNzaWduYWJsZQogICAgICAgICAgICAgICgyMy4xLCBwNCksIENvcHlDb25zdHJ1Y3RpYmxlICgyMC4xLjMpLCBhbmQKICAgICAgICAgICAgICBEZWZhdWx0Q29uc3RydWN0aWJsZSAgKDIwLjEuNCkgdHlwZXMuCjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5UaGUgTFdHIGZlZWxzIHRoaXMgaXMgdHdvIGlzc3VlcywgYXMgaW5kaWNhdGVkIGFib3ZlLiBUaGUgZmlyc3QgaXMKYSBkZWZlY3QtLS1zdGQ6OmJhc2ljX2ZzdHJlYW0gaXMgdW5pbXBsZW1lbnRhYmxlIHdpdGhvdXQgdGhlc2UKYWRkaXRpb25hbCByZXF1aXJlbWVudHMtLS1hbmQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gZml4ZXMgaXQuICBUaGUKc2Vjb25kIGlzIHF1ZXN0aW9uYWJsZTsgd2hvIHdvdWxkIHVzZSB0aGF0IHR5cGVkZWY/ICBUaGUgY2xhc3MKdGVtcGxhdGUgZnBvcyBpcyB1c2VkIG9ubHkgaW4gYSB2ZXJ5IGZldyBwbGFjZXMsIGFsbCBvZiB3aGljaCBrbm93IHRoZQpzdGF0ZSB0eXBlIGFscmVhZHkuICBVbmxlc3MgbW90aXZhdGlvbiBpcyBwcm92aWRlZCwgdGhlIHNlY29uZCBzaG91bGQKYmUgY29uc2lkZXJlZCBOQUQuPC9wPgo8aHI+CjxhIG5hbWU9IjM1NCI+PGgzPjM1NC4mbmJzcDtBc3NvY2lhdGl2ZSBjb250YWluZXIgbG93ZXIvdXBwZXIgYm91bmQgcmVxdWlyZW1lbnRzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtIYW5zIEFiZXJnJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IERlYyAyMDAxPC9wPgo8cD4KRGlzY3Vzc2lvbnMgaW4gdGhlIHRocmVhZCAiQXNzb2NpYXRpdmUgY29udGFpbmVyIGxvd2VyL3VwcGVyIGJvdW5kCnJlcXVpcmVtZW50cyIgb24gY29tcC5zdGQuYysrIHN1Z2dlc3RzIHRoYXQgdGhlcmUgaXMgYSBkZWZlY3QgaW4gdGhlCkMrKyBzdGFuZGFyZCwgVGFibGUgNjkgb2Ygc2VjdGlvbiAyMy4xLjIsICJBc3NvY2lhdGl2ZSBjb250YWluZXJzIiwKW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdLiAgSXQgY3VycmVudGx5IHNheXM6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgphLmZpbmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gYW4gZWxlbWVudCB3aXRoIHRoZSBrZXkgZXF1aXZhbGVudCB0bwprLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KCjxwPgphLmxvd2VyX2JvdW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgKa2V5IG5vdCBsZXNzIHRoYW4gay4KPC9wPgoKPHA+CmEudXBwZXJfYm91bmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aAprZXkgZ3JlYXRlciB0aGFuIGsuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+CldlIGhhdmUgIm9yIGEuZW5kKCkgaWYgc3VjaCBhbiBlbGVtZW50IGlzIG5vdCBmb3VuZCIgZm9yCjx0dD5maW5kPC90dD4sIGJ1dCBub3QgZm9yIDx0dD51cHBlcl9ib3VuZDwvdHQ+IG9yCjx0dD5sb3dlcl9ib3VuZDwvdHQ+LiAgQXMgdGhlIHRleHQgc3RhbmRzLCBvbmUgd291bGQgYmUgZm9yY2VkIHRvCmluc2VydCBhIG5ldyBlbGVtZW50IGludG8gdGhlIGNvbnRhaW5lciBhbmQgcmV0dXJuIGFuIGl0ZXJhdG9yIHRvIHRoYXQKaW4gY2FzZSB0aGUgc291Z2h0IGl0ZXJhdG9yIGRvZXMgbm90IGV4aXN0LCB3aGljaCBkb2VzIG5vdCBzZWVtIHRvIGJlCnRoZSBpbnRlbnRpb24gKGFuZCBub3QgcG9zc2libGUgd2l0aCB0aGUgImNvbnN0IiB2ZXJzaW9ucykuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgoKPHA+Q2hhbmdlIFRhYmxlIDY5IG9mIHNlY3Rpb24gMjMuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuYXNzb2NpYXRpdmUucmVxbXRzIj4gW2xpYi5hc3NvY2lhdGl2ZS5yZXFtdHNdPC9hPiBpbmRpY2F0ZWQgZW50cmllcwp0bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CmEubG93ZXJfYm91bmQoayk6IHJldHVybnMgYW4gaXRlcmF0b3IgcG9pbnRpbmcgdG8gdGhlIGZpcnN0IGVsZW1lbnQgd2l0aAprZXkgbm90IGxlc3MgdGhhbiBrLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KCjxwPgphLnVwcGVyX2JvdW5kKGspOiByZXR1cm5zIGFuIGl0ZXJhdG9yIHBvaW50aW5nIHRvIHRoZSBmaXJzdCBlbGVtZW50IHdpdGgKa2V5IGdyZWF0ZXIgdGhhbiBrLCBvciBhLmVuZCgpIGlmIHN1Y2ggYW4gZWxlbWVudCBpcyBub3QgZm91bmQuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W0N1cmHnYW86IExXRyByZXZpZXdlZCBQUi5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iMzU1Ij48aDM+MzU1LiZuYnNwO09wZXJhdGlvbmFsIHNlbWFudGljcyBmb3IgYS5iYWNrKCk8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zZXF1ZW5jZS5yZXFtdHMiPiBbbGliLnNlcXVlbmNlLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1lhcm9zbGF2IE1pcm9ub3YmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MjMgSmFuIDIwMDI8L3A+Cgo8cD5UYWJsZSA2OCAiT3B0aW9uYWwgU2VxdWVuY2UgT3BlcmF0aW9ucyIgaW4gMjMuMS4xLzEyCnNwZWNpZmllcyBvcGVyYXRpb25hbCBzZW1hbnRpY3MgZm9yICJhLmJhY2soKSIgYXMKIiotLWEuZW5kKCkiLCB3aGljaCBtYXkgYmUgaWxsLWZvcm1lZCA8aT5bYmVjYXVzZSBjYWxsaW5nCm9wZXJhdG9yLS0gb24gYSB0ZW1wb3JhcnkgKHRoZSByZXR1cm4pIG9mIGEgYnVpbHQtaW4gdHlwZSBpcwppbGwtZm9ybWVkXTwvaT4sIHByb3ZpZGVkIGEuZW5kKCkgcmV0dXJucyBhIHNpbXBsZSBwb2ludGVyIHJ2YWx1ZQoodGhpcyBpcyBhbG1vc3QgYWx3YXlzIHRoZSBjYXNlIGZvciBzdGQ6OnZlY3Rvcjo6ZW5kKCksIGZvcgpleGFtcGxlKS4gVGh1cywgdGhlIHNwZWNpZmljYXRpb24gaXMgbm90IG9ubHkgaW5jb3JyZWN0LCBpdApkZW1vbnN0cmF0ZXMgYSBkYW5nZXJvdXMgY29uc3RydWN0OiAiLS1hLmVuZCgpIiBtYXkKc3VjY2Vzc2Z1bGx5IGNvbXBpbGUgYW5kIHJ1biBhcyBpbnRlbmRlZCwgYnV0IGFmdGVyIGNoYW5naW5nIHRoZSB0eXBlCm9mIHRoZSBjb250YWluZXIgb3IgdGhlIG1vZGUgb2YgY29tcGlsYXRpb24gaXQgbWF5IHByb2R1Y2UKY29tcGlsZS10aW1lIGVycm9yLiA8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgc3BlY2lmaWNhdGlvbiBpbiB0YWJsZSA2OCAiT3B0aW9uYWwgU2VxdWVuY2UKT3BlcmF0aW9ucyIgaW4gMjMuMS4xLzEyIGZvciAiYS5iYWNrKCkiIGZyb208L3A+CgoKPGJsb2NrcXVvdGU+CiotLWEuZW5kKCkKPC9ibG9ja3F1b3RlPgoKPHA+dG88L3A+Cgo8YmxvY2txdW90ZT4KICB7IGl0ZXJhdG9yIHRtcCA9IGEuZW5kKCk7IC0tdG1wOyByZXR1cm4gKnRtcDsgfQo8L2Jsb2NrcXVvdGU+Cgo8cD5hbmQgdGhlIHNwZWNpZmljYXRpb24gZm9yICJhLnBvcF9iYWNrKCkiIGZyb208L3A+Cgo8YmxvY2txdW90ZT4KYS5lcmFzZSgtLWEuZW5kKCkpCjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgeyBpdGVyYXRvciB0bXAgPSBhLmVuZCgpOyAtLXRtcDsgYS5lcmFzZSh0bXApOyB9CjwvYmxvY2txdW90ZT4KCjxwPjxpPltDdXJh52FvOiBMV0cgY2hhbmdlZCBQUiBmcm9tICJ7IFg6Oml0ZXJhdG9yIHRtcCA9CmEuZW5kKCk7IHJldHVybiAqLS10bXA7IH0iIHRvICIqYS5yYmVnaW4oKSIsIGFuZCBmcm9tCiJ7IFg6Oml0ZXJhdG9yIHRtcCA9IGEuZW5kKCk7IGEuZXJhc2UoLS10bXApOyB9IiB0bwoiYS5lcmFzZShyYmVnaW4oKSkiLl08L2k+PC9wPgoKPHA+PGk+W1RoZXJlIGlzIGEgc2Vjb25kIHBvc3NpYmxlIGRlZmVjdDsgdGFibGUgNjggIk9wdGlvbmFsClNlcXVlbmNlIE9wZXJhdGlvbnMiIGluIHRoZSAiT3BlcmF0aW9uYWwgU2VtYW50aWNzIgpjb2x1bW4gdXNlcyBvcGVyYXRpb25zIHByZXNlbnQgb25seSBpbiB0aGUgIlJldmVyc2libGUKQ29udGFpbmVyIiByZXF1aXJlbWVudHMsIHlldCB0aGVyZSBpcyBubyBzdGF0ZWQgZGVwZW5kZW5jeQpiZXR3ZWVuIHRoZXNlIHNlcGFyYXRlIHJlcXVpcmVtZW50cyB0YWJsZXMuIEFzayBpbiBTYW50YSBDcnV6IGlmIHRoZQpMV0cgd291bGQgbGlrZSBhIG5ldyBpc3N1ZSBvcGVuZWQuXTwvaT48L3A+Cgo8cD48aT5bU2FudGEgQ3J1ejogdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaXMgZXZlbiB3b3JzZSB0aGFuIHdoYXQncyBpbgogIHRoZSBjdXJyZW50IHN0YW5kYXJkOiBlcmFzZSBpcyB1bmRlZmluZWQgZm9yIHJldmVyc2UgaXRlcmF0b3IuICBJZgogIHdlJ3JlIGdvaW5nIHRvIG1ha2UgdGhlIGNoYW5nZSwgd2UgbmVlZCB0byBkZWZpbmUgYSB0ZW1wb3JhcnkgYW5kCiAgdXNlIG9wZXJhdG9yLS0uICBBZGRpdGlvbmFsbHksIHdlIGRvbid0IGtub3cgaG93IHByZXZhbGVudCB0aGlzIGlzOgogIGRvIHdlIG5lZWQgdG8gbWFrZSB0aGlzIGNoYW5nZSBpbiBtb3JlIHRoYW4gb25lIHBsYWNlPyAgTWFydGluIGhhcwogIHZvbHVudGVlcmVkIHRvIHJldmlldyB0aGUgc3RhbmRhcmQgYW5kIHNlZSBpZiB0aGlzIHByb2JsZW0gb2NjdXJzCiAgZWxzZXdoZXJlLl08L2k+PC9wPgoKPHA+PGk+W094Zm9yZDogTWF0dCBwcm92aWRlZCBuZXcgd29yZGluZyB0byBhZGRyZXNzIHRoZSBjb25jZXJucyByYWlzZWQKICBpbiBTYW50YSBDcnV6LiAgSXQgZG9lcyBub3QgYXBwZWFyIHRoYXQgdGhpcyBwcm9ibGVtIGFwcGVhcnMKICBhbnl3aGVyZSBlbHNlIGluIGNsYXVzZXMgMjMgb3IgMjQuXTwvaT48L3A+Cgo8cD48aT5bS29uYTogSW4gZGVmaW5pdGlvbiBvZiBvcGVyYXRpb25hbCBzZW1hbnRpY3Mgb2YgYmFjaygpLCBjaGFuZ2UKIip0bXAiIHRvICJyZXR1cm4gKnRtcDsiXTwvaT48L3A+Cgo8aHI+CjxhIG5hbWU9IjM1OCI+PGgzPjM1OC4mbmJzcDtpbnRlcnByZXRpbmcgPHR0PnRob3VzYW5kc19zZXA8L3R0PiBhZnRlciBhIDx0dD5kZWNpbWFsX3BvaW50PC90dD4KPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4yLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5nZXQudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTIgTWFyIDIwMDI8L3A+CjxwPgpJIGRvbid0IHRoaW5rIDx0dD50aG91c2FuZHNfc2VwPC90dD4gaXMgYmVpbmcgdHJlYXRlZCBjb3JyZWN0bHkgYWZ0ZXIKZGVjaW1hbF9wb2ludCBoYXMgYmVlbiBzZWVuLiBTaW5jZSBncm91cGluZyBhcHBsaWVzIG9ubHkgdG8gdGhlCmludGVncmFsIHBhcnQgb2YgdGhlIG51bWJlciwgdGhlIGZpcnN0IHN1Y2ggb2NjdXJyZW5jZSBzaG91bGQsIElNTywKdGVybWluYXRlIFN0YWdlIDIuIChJZiBpdCBkb2VzIG5vdCB0ZXJtaW5hdGUgaXQsIHRoZW4gMjIuMi4yLjEuMiwgcDEyCmFuZCAyMi4yLjMuMS4yLCBwMyBuZWVkIHRvIGV4cGxhaW4gaG93IDx0dD50aG91c2FuZHNfc2VwPC90dD4gaXMgdG8gYmUKaW50ZXJwcmV0ZWQgaW4gdGhlIGZyYWN0aW9uYWwgcGFydCBvZiBhIG51bWJlci4pCjwvcD4KCjxwPgpUaGUgZWFzaWVzdCBjaGFuZ2UgSSBjYW4gdGhpbmsgb2YgdGhhdCByZXNvbHZlcyB0aGlzIGlzc3VlIHdvdWxkIGJlCnNvbWV0aGluZyBsaWtlIGJlbG93Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgMjIuMi4yLjEuMiwgcDkgZnJvbQo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIElmIGRpc2NhcmQgaXMgdHJ1ZSB0aGVuIHRoZSBwb3NpdGlvbiBvZiB0aGUgY2hhcmFjdGVyIGlzCiAgICByZW1lbWJlcmVkLCBidXQgdGhlIGNoYXJhY3RlciBpcyBvdGhlcndpc2UgaWdub3JlZC4gSWYgaXQgaXMgbm90CiAgICBkaXNjYXJkZWQsIHRoZW4gYSBjaGVjayBpcyBtYWRlIHRvIGRldGVybWluZSBpZiBjIGlzIGFsbG93ZWQgYXMKICAgIHRoZSBuZXh0IGNoYXJhY3RlciBvZiBhbiBpbnB1dCBmaWVsZCBvZiB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIKICAgIHJldHVybmVkIGJ5IHN0YWdlIDEuIElmIHNvIGl0IGlzIGFjY3VtdWxhdGVkLgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzwvcD4KCjxibG9ja3F1b3RlPgogICAgSWYgPHR0PmRpc2NhcmQ8L3R0PiBpcyB0cnVlLCB0aGVuIGlmIDx0dD4nLic8L3R0PiBoYXMgbm90IHlldCBiZWVuCiAgICBhY2N1bXVsYXRlZCwgdGhlbiB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBpcyByZW1lbWJlcmVkLCBidXQKICAgIHRoZSBjaGFyYWN0ZXIgaXMgb3RoZXJ3aXNlIGlnbm9yZWQuIE90aGVyd2lzZSwgaWYgPHR0PicuJzwvdHQ+IGhhcwogICAgYWxyZWFkeSBiZWVuIGFjY3VtdWxhdGVkLCB0aGUgY2hhcmFjdGVyIGlzIGRpc2NhcmRlZCBhbmQgU3RhZ2UgMgogICAgIHRlcm1pbmF0ZXMuIC4uLgo8L2Jsb2NrcXVvdGU+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+V2UgYmVsaWV2ZSB0aGlzIHJlZmxlY3RzIHRoZSBpbnRlbnQgb2YgdGhlIFN0YW5kYXJkLiAgVGhvdXNhbmRzIHNlcAogIGNoYXJhY3RlcnMgYWZ0ZXIgdGhlIGRlY2ltYWwgcG9pbnQgYXJlIG5vdCB1c2VmdWwgaW4gYW55IGxvY2FsZS4KICBTb21lIGZvcm1hdHRpbmcgY29udmVudGlvbnMgZG8gZ3JvdXAgZGlnaXRzIHRoYXQgZm9sbG93IHRoZSBkZWNpbWFsCiAgcG9pbnQsIGJ1dCB0aGV5IHVzdWFsbHkgaW50cm9kdWNlIGEgZGlmZmVyZW50IGdyb3VwaW5nIGNoYXJhY3RlcgogIGluc3RlYWQgb2YgcmV1c2luZyB0aGUgdGhvdXNhbmQgc2VwIGNoYXJhY3Rlci4gIElmIHdlIHdhbnQgdG8gYWRkCiAgc3VwcG9ydCBmb3Igc3VjaCBjb252ZW50aW9ucywgd2UgbmVlZCB0byBkbyBzbyBleHBsaWNpdGx5LjwvcD4KCjxocj4KPGEgbmFtZT0iMzU5Ij48aDM+MzU5LiZuYnNwO251bV9wdXQmbHQ7Jmd0Ozo6ZG9fcHV0ICguLi4sIGJvb2wpIHVuZG9jdW1lbnRlZDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjIuMi4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5mYWNldC5udW0ucHV0Lm1lbWJlcnMiPiBbbGliLmZhY2V0Lm51bS5wdXQubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMiBNYXIgMjAwMjwvcD4KPHA+MjIuMi4yLjIuMSwgcDE6PC9wPgoKICAgIDxwcmU+ICAgIGl0ZXJfdHlwZSBwdXQgKGl0ZXJfdHlwZSBvdXQsIGlvc19iYXNlJmFtcDsgc3RyLCBjaGFyX3R5cGUgZmlsbCwKICAgICAgICAgICAgICAgICAgIGJvb2wgdmFsKSBjb25zdDsKICAgIC4uLgoKICAgIDEgICBSZXR1cm5zOiBkb19wdXQgKG91dCwgc3RyLCBmaWxsLCB2YWwpLgogICAgPC9wcmU+Cgo8cD5BRkFJQ1MsIHRoZSBiZWhhdmlvciBvZiBkb19wdXQgKC4uLiwgYm9vbCkgaXMgbm90IGRvY3VtZW50ZWQgYW55d2hlcmUsCmhvd2V2ZXIsIDIyLjIuMi4yLjIsIHAyMzo8L3A+Cgo8YmxvY2txdW90ZT4KPHByZT5pdGVyX3R5cGUgcHV0IChpdGVyX3R5cGUgb3V0LCBpb3NfYmFzZSZhbXA7IHN0ciwgY2hhcl90eXBlIGZpbGwsCiAgICAgICAgICAgICAgIGJvb2wgdmFsKSBjb25zdDsKPC9wcmU+CgoKICAgICAgICBFZmZlY3RzOiBJZiAoc3RyLmZsYWdzKCkgJmFtcDsgaW9zX2Jhc2U6OmJvb2xhbHBoYSkgPT0gMCB0aGVuIGRvCiAgICAgICAgICAgICBvdXQgPSBkb19wdXQob3V0LCBzdHIsIGZpbGwsIChpbnQpdmFsKQogICAgICAgICAgIE90aGVyd2lzZSBkbwo8cHJlPiAgICAgICAgICAgICBzdHJpbmdfdHlwZSBzID0KICAgICAgICAgICAgICAgICB2YWwgPyB1c2VfZmFjZXQmbHQ7Y3R5cGUmbHQ7Y2hhclQmZ3Q7ICZndDsobG9jKS50cnVlbmFtZSgpCiAgICAgICAgICAgICAgICAgICAgIDogdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykuZmFsc2VuYW1lKCk7CjwvcHJlPgogICAgICAgICAgIGFuZCB0aGVuIGluc2VydCB0aGUgY2hhcmFjdGVycyBvZiBzIGludG8gb3V0LiA8aT5vdXQ8L2k+Lgo8L2Jsb2NrcXVvdGU+Cgo8cD4KVGhpcyBtZWFucyB0aGF0IHRoZSBib29sIG92ZXJsb2FkIG9mIDx0dD5kb19wdXQoKTwvdHQ+IHdpbGwgbmV2ZXIgYmUgY2FsbGVkLAp3aGljaCBjb250cmFkaWN0cyB0aGUgZmlyc3QgcGFyYWdyYXBoLiBQZXJoYXBzIHRoZSBkZWNsYXJhdGlvbgpzaG91bGQgcmVhZCA8dHQ+ZG9fcHV0KCk8L3R0PiwgYW5kIG5vdCA8dHQ+cHV0KCk8L3R0Pj8KPC9wPgoKPHA+Ck5vdGUgYWxzbyB0aGF0IHRoZXJlIGlzIG5vIDxiPlJldHVybnM8L2I+IGNsYXVzZSBmb3IgdGhpcyBmdW5jdGlvbiwgd2hpY2gKc2hvdWxkIHByb2JhYmx5IGJlIGNvcnJlY3RlZCwganVzdCBhcyBzaG91bGQgdGhlIHNlY29uZCBvY2N1cnJlbmNlCm9mIDxpPiJvdXQuIjwvaT4gaW4gdGhlIHRleHQuCjwvcD4KCjxwPgpJIHRoaW5rIHRoZSBsZWFzdCBpbnZhc2l2ZSBjaGFuZ2UgdG8gZml4IGl0IHdvdWxkIGJlIHNvbWV0aGluZyBsaWtlCnRoZSBmb2xsb3dpbmc6CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5JbiAyMi4yLjIuMi4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFscyI+IFtsaWIuZmFjZXQubnVtLnB1dC52aXJ0dWFsc108L2E+LCBqdXN0IGFib3ZlIHBhcmFncmFwaCAxLCByZW1vdmUKICB0aGUgPHR0PmJvb2w8L3R0PiBvdmVybG9hZC48L3A+Cgo8cD4KSW4gMjIuMi4yLjIuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMiPiBbbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHNdPC9hPiwgcDIzLCBtYWtlIHRoZSBmb2xsb3dpbmcgY2hhbmdlcwo8L3A+Cgo8YmxvY2txdW90ZT4KICAgICBSZXBsYWNlIDx0dD5wdXQoKTwvdHQ+IHdpdGggPHR0PmRvX3B1dCgpPC90dD4gaW4gdGhlIGRlY2xhcmF0aW9uCiAgICAgb2YgdGhlIG1lbWJlciBmdW5jdGlvbi4KPC9ibG9ja3F1b3RlPgoKPGJsb2NrcXVvdGU+CiAgICBDaGFuZ2UgdGhlIDxiPkVmZmVjdHM8L2I+IGNsYXVzZSB0byBhIDxiPlJldHVybnM8L2I+IGNsYXVzZSAodG8KICAgIGF2b2lkIHRoZSByZXF1aXJlbWVudCB0byBjYWxsIDx0dD5kb19wdXQoLi4uLCBpbnQpPC90dD4gZnJvbSA8dHQ+CiAgICBkb19wdXQgKC4uLiwgYm9vbCkpPC90dD4KICAgIGxpa2Ugc286CjwvYmxvY2txdW90ZT4KCjxibG9ja3F1b3RlPgogICAgMjMgICA8Yj5SZXR1cm5zPC9iPjogSWYgPHR0PihzdHIuZmxhZ3MoKSAmYW1wOwogICAgICAgICBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwPC90dD4gdGhlbgogICAgICAgICA8dHQ+ZG9fcHV0IChvdXQsIHN0ciwgZmlsbCwgKGxvbmcpdmFsKTwvdHQ+CiAgICAgICAgIE90aGVyd2lzZSB0aGUgZnVuY3Rpb24gb2J0YWlucyBhIHN0cmluZyA8dHQ+czwvdHQ+IGFzIGlmIGJ5CjxwcmU+ICAgICAgICAgICAgIHN0cmluZ190eXBlIHMgPQogICAgICAgICAgICAgICAgdmFsID8gdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykudHJ1ZW5hbWUoKQogICAgICAgICAgICAgICAgICAgIDogdXNlX2ZhY2V0Jmx0O2N0eXBlJmx0O2NoYXJUJmd0OyAmZ3Q7KGxvYykuZmFsc2VuYW1lKCk7CjwvcHJlPgogICAgICAgICBhbmQgdGhlbiBpbnNlcnRzIGVhY2ggY2hhcmFjdGVyIDx0dD5jPC90dD4gb2YgcyBpbnRvIG91dCB2aWEKICAgICAgICAgICA8dHQ+Km91dCsrID0gYzwvdHQ+CiAgICAgICAgIGFuZCByZXR1cm5zIDx0dD5vdXQ8L3R0Pi4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPgpUaGlzIGZpeGVzIGEgY291cGxlIG9mIG9idmlvdXMgdHlwb3MsIGFuZCBhbHNvIGZpeGVzIHdoYXQgYXBwZWFycyB0bwpiZSBhIHJlcXVpcmVtZW50IG9mIGdyYXR1aXRvdXMgaW5lZmZpY2llbmN5Lgo8L3A+Cjxocj4KPGEgbmFtZT0iMzYwIj48aDM+MzYwLiZuYnNwO2xvY2FsZSBtYW5kYXRlcyBpbmVmZmljaWVudCBpbXBsZW1lbnRhdGlvbjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIyLjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZSI+IFtsaWIubG9jYWxlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzEyIE1hciAyMDAyPC9wPgo8cD4KMjIuMS4xLCBwNyAoY29waWVkIGJlbG93KSBhbGxvd3MgaW9zdHJlYW0gZm9ybWF0dGVycyBhbmQgZXh0cmFjdG9ycwp0byBtYWtlIGFzc3VtcHRpb25zIGFib3V0IHRoZSB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBmYWNldCBtZW1iZXJzLgpIb3dldmVyLCBzdWNoIGFzc3VtcHRpb25zIGFyZSBhcHBhcmVudGx5IG5vdCBndWFyYW50ZWVkIHRvIGhvbGQKaW4gb3RoZXIgY2FzZXMgKGUuZy4sIHdoZW4gdGhlIGZhY2V0IG1lbWJlcnMgYXJlIGJlaW5nIGNhbGxlZCBkaXJlY3RseQpyYXRoZXIgdGhhbiBhcyBhIHJlc3VsdCBvZiBpb3N0cmVhbSBjYWxscywgb3IgYmV0d2VlbiBzdWNjZXNzaXZlCmNhbGxzIHRvIHRoZSBzYW1lIGlvc3RyZWFtIGZ1bmN0aW9ucyB3aXRoIG5vIGludGVyZXZlbmluZyBjYWxscyB0bwo8dHQ+aW1idWUoKTwvdHQ+LCBvciBldmVuIHdoZW4gdGhlIGZhY2V0IG1lbWJlciBmdW5jdGlvbnMgYXJlIGNhbGxlZApmcm9tIG90aGVyIG1lbWJlciBmdW5jdGlvbnMgb2Ygb3RoZXIgZmFjZXRzKS4gVGhpcyByZXN0cmljdGlvbgpwcmV2ZW50cyBsb2NhbGUgZnJvbSBiZWluZyBpbXBsZW1lbnRlZCBlZmZpY2llbnRseS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZmlyc3Qgc2VudGVuY2UgaW4gMjIuMS4xLCBwNyBmcm9tPC9wPgo8YmxvY2txdW90ZT4KICAgIEluIHN1Y2Nlc3NpdmUgY2FsbHMgdG8gYSBsb2NhbGUgZmFjZXQgbWVtYmVyIGZ1bmN0aW9uIGR1cmluZwogICAgYSBjYWxsIHRvIGFuIGlvc3RyZWFtIGluc2VydGVyIG9yIGV4dHJhY3RvciBvciBhIHN0cmVhbWJ1ZiBtZW1iZXIKICAgIGZ1bmN0aW9uLCB0aGUgcmV0dXJuZWQgcmVzdWx0IHNoYWxsIGJlIGlkZW50aWNhbC4gW05vdGU6IFRoaXMKICAgIGltcGxpZXMgdGhhdCBzdWNoIHJlc3VsdHMgbWF5IHNhZmVseSBiZSByZXVzZWQgd2l0aG91dCBjYWxsaW5nCiAgICB0aGUgbG9jYWxlIGZhY2V0IG1lbWJlciBmdW5jdGlvbiBhZ2FpbiwgYW5kIHRoYXQgbWVtYmVyIGZ1bmN0aW9ucwogICAgb2YgaW9zdHJlYW0gY2xhc3NlcyBjYW5ub3Qgc2FmZWx5IGNhbGwgPHR0PmltYnVlKCk8L3R0PgogICAgdGhlbXNlbHZlcywgZXhjZXB0IGFzIHNwZWNpZmllZCBlbHNld2hlcmUuIC0tZW5kIG5vdGVdCjwvYmxvY2txdW90ZT4KCjxwPnRvPC9wPgoKPGJsb2NrcXVvdGU+CiAgICBJbiBzdWNjZXNzaXZlIGNhbGxzIHRvIGEgbG9jYWxlIGZhY2V0IG1lbWJlciBmdW5jdGlvbiBvbiBhIGZhY2V0CiAgICBvYmplY3QgaW5zdGFsbGVkIGluIHRoZSBzYW1lIGxvY2FsZSwgdGhlIHJldHVybmVkIHJlc3VsdCBzaGFsbCBiZQogICAgaWRlbnRpY2FsLiAuLi4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoaXMgY2hhbmdlIGlzIHJlYXNvbmFibGUgYmVjdWFzZSBpdCBjbGFyaWZpZXMgdGhlIGludGVudCBvZiB0aGlzCiAgcGFydCBvZiB0aGUgc3RhbmRhcmQuPC9wPgo8aHI+CjxhIG5hbWU9IjM2MyI+PGgzPjM2My4mbmJzcDtNaXNzaW5nIGV4Y2VwdGlvbiBzcGVjaWZpY2F0aW9uIGluIDI3LjQuMi4xLjE8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy40LjIuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pb3M6OmZhaWx1cmUiPiBbbGliLmlvczo6ZmFpbHVyZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1dhbHRlciBCcm93biBhbmQgTWFyYyBQYXRlcm5vJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE1heSAyMDAyPC9wPgo8cD4KVGhlIGRlc3RydWN0b3Igb2YgaW9zX2Jhc2U6OmZhaWx1cmUgc2hvdWxkIGhhdmUgYW4gZW1wdHkgdGhyb3cKc3BlY2lmaWNhdGlvbiwgYmVjYXVzZSB0aGUgZGVzdHJ1Y3RvciBvZiBpdHMgYmFzZSBjbGFzcywgZXhjZXB0aW9uLCBpcwpkZWNsYXJlZCBpbiB0aGlzIHdheS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSB0aGUgZGVzdHJ1Y3RvciB0bzwvcD4KPHByZT4gIHZpcnR1YWwgfmZhaWx1cmUoKSB0aHJvdygpOwo8L3ByZT4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkZpeGVzIGFuIG9idmlvdXMgZ2xpdGNoLiAgVGhpcyBpcyBhbG1vc3QgZWRpdG9yaWFsLjwvcD4KPGhyPgo8YSBuYW1lPSIzNjQiPjxoMz4zNjQuJm5ic3A7SW5jb25zaXN0ZW50IHdvcmRpbmcgaW4gMjcuNS4yLjQuMjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjUuMi40LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlciI+IFtsaWIuc3RyZWFtYnVmLnZpcnQuYnVmZmVyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duLCBNYXJjIFBhdGVybm8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgTWF5IDIwMDI8L3A+CjxwPgoyNy41LjIuNC4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJlYW1idWYudmlydC5idWZmZXIiPiBbbGliLnN0cmVhbWJ1Zi52aXJ0LmJ1ZmZlcl08L2E+IHBhcmFncmFwaCAxIGlzIGluY29uc2lzdGVudCB3aXRoIHRoZSBFZmZlY3RzCmNsYXVzZSBmb3Igc2Vla29mZi4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpNYWtlIHRoaXMgcGFyYWdyYXBoLCB0aGUgRWZmZWN0cyBjbGF1c2UgZm9yIHNldGJ1ZiwgY29uc2lzdGVudCBpbiB3b3JkaW5nCndpdGggdGhlIEVmZmVjdHMgY2xhdXNlIGZvciBzZWVrb2ZmIGluIHBhcmFncmFwaCAzIGJ5IGFtZW5kaW5nIHBhcmFncmFwaCAxCnRvIGluZGljYXRlIHRoZSBwdXJwb3NlIG9mIHNldGJ1ZjoKPC9wPgoKPHA+T3JpZ2luYWwgdGV4dDo8L3A+Cgo8YmxvY2txdW90ZT4KMSBFZmZlY3RzOiBQZXJmb3JtcyBhbiBvcGVyYXRpb24gdGhhdCBpcyBkZWZpbmVkIHNlcGFyYXRlbHkgZm9yIGVhY2gKY2xhc3MgZGVyaXZlZCBmcm9tIGJhc2ljX3N0cmVhbWJ1ZiBpbiB0aGlzIGNsYXVzZSAoMjcuNy4xLjMsIDI3LjguMS40KS4KPC9ibG9ja3F1b3RlPgoKPHA+UHJvcG9zZWQgdGV4dDo8L3A+Cgo8YmxvY2txdW90ZT4KMSBFZmZlY3RzOiBJbmZsdWVuY2VzIHN0cmVhbSBidWZmZXJpbmcgaW4gYSB3YXkgdGhhdCBpcyBkZWZpbmVkIHNlcGFyYXRlbHkKZm9yIGVhY2ggY2xhc3MgZGVyaXZlZCBmcm9tIGJhc2ljX3N0cmVhbWJ1ZiBpbiB0aGlzIGNsYXVzZQooMjcuNy4xLjMsIDI3LjguMS40KS4KPC9ibG9ja3F1b3RlPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgZG9lc24ndCBiZWxpZXZlIHRoZXJlIGlzIGFueSBub3JtYXRpdmUgZGlmZmVyZW5jZSBiZXR3ZWVuCiAgdGhlIGV4aXN0aW5nIHdvcmRpbmcgYW5kIHdoYXQncyBpbiB0aGUgcHJvcG9zZWQgcmVzb2x1dGlvbiwgYnV0IHRoZQogIGNoYW5nZSBtYXkgbWFrZSB0aGUgaW50ZW50IGNsZWFyZXIuPC9wPgo8aHI+CjxhIG5hbWU9IjM2NSI+PGgzPjM2NS4mbmJzcDtMYWNrIG9mIGNvbnN0LXF1YWxpZmljYXRpb24gaW4gY2xhdXNlIDI3PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlucHV0Lm91dHB1dCI+IFtsaWIuaW5wdXQub3V0cHV0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7V2FsdGVyIEJyb3duLCBNYXJjIFBhdGVybm8mbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgTWF5IDIwMDI8L3A+CjxwPgpTb21lIHN0cmVhbSBhbmQgc3RyZWFtYnVmIG1lbWJlciBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIG5vbi1jb25zdCwKZXZlbiB0aG91Z2h0IHRoZXkgYXBwZWFyIG9ubHkgdG8gcmVwb3J0IGluZm9ybWF0aW9uIHJhdGhlciB0aGFuIHRvCmNoYW5nZSBhbiBvYmplY3QncyBsb2dpY2FsIHN0YXRlLiAgVGhleSBzaG91bGQgYmUgZGVjbGFyZWQgY29uc3QuICBTZWUKZG9jdW1lbnQgTjEzNjAgZm9yIGRldGFpbHMgYW5kIHJhdGlvbmFsZS4KPC9wPgoKPHA+VGhlIGxpc3Qgb2YgbWVtYmVyIGZ1bmN0aW9ucyB1bmRlciBkaXNjdXNzaW9uOiA8dHQ+aW5fYXZhaWw8L3R0PiwKPHR0PnNob3dtYW55YzwvdHQ+LCA8dHQ+dGVsbGc8L3R0PiwgPHR0PnRlbGxwPC90dD4sIDx0dD5pc19vcGVuPC90dD4uPC9wPgoKPHA+UmVsYXRlZCBpc3N1ZTogPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMiPjczPC9hPjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjcuOC4xLjUsIDI3LjguMS43LCAyNy44LjEuOCwgMjcuOC4xLjEwLCAyNy44LjEuMTEsIGFuZCAyNy44LjEuMTM8L3A+CjxwPlJlcGxhY2U8L3A+CjxwcmU+ICBib29sIGlzX29wZW4oKTsKPC9wcmU+CjxwPndpdGg8L3A+CjxwcmU+ICBib29sIGlzX29wZW4oKSBjb25zdDsKPC9wcmU+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5PZiB0aGUgY2hhbmdlcyBwcm9wb3NlZCBpbiBOMTM2MCwgdGhlIG9ubHkgb25lIHRoYXQgaXMgc2FmZSBpcwpjaGFuZ2luZyB0aGUgZmlsZXN0cmVhbXMnIGlzX29wZW4gdG8gY29uc3QuICBUaGUgTFdHIGJlbGlldmVkIHRoYXQKdGhpcyB3YXMgTkFEIHRoZSBmaXJzdCB0aW1lIGl0IGNvbnNpZGVyZWQgdGhpcyBpc3N1ZSAoaXNzdWUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctY2xvc2VkLmh0bWwjNzMiPjczPC9hPiksIGJ1dCBub3cgdGhpbmtzIG90aGVyd2lzZS4gIFRoZSBjb3JyZXNwb25kaW5nIHN0cmVhbWJ1ZgptZW1iZXIgZnVuY3Rpb24sIGFmdGVyIGFsbCxpcyBhbHJlYWR5IGNvbnN0LjwvcD4KCjxwPlRoZSBvdGhlciBwcm9wb3NlZCBjaGFuZ2VzIGFyZSBsZXNzIHNhZmUsIGJlY2F1c2Ugc29tZSBzdHJlYW1idWYKZnVuY3Rpb25zIHRoYXQgYXBwZWFyIG1lcmVseSB0byByZXBvcnQgYSB2YWx1ZSBkbyBhY3R1YWxseSBwZXJmb3JtCm11dGF0aW5nIG9wZXJhdGlvbnMuICBJdCdzIG5vdCBldmVuIGNsZWFyIHRoYXQgdGhleSBzaG91bGQgYmUKY29uc2lkZXJlZCAibG9naWNhbGx5IGNvbnN0IiwgYmVjYXVzZSBzdHJlYW1idWYgaGFzIHR3byBpbnRlcmZhY2VzLCBhCnB1YmxpYyBvbmUgYW5kIGEgcHJvdGVjdGVkIG9uZS4gIFRoZXNlIGZ1bmN0aW9ucyBtYXksIGFuZCBvZnRlbiBkbywKY2hhbmdlIHRoZSBzdGF0ZSBhcyBleHBvc2VkIGJ5IHRoZSBwcm90ZWN0ZWQgaW50ZXJmYWNlLCBldmVuIGlmIHRoZQpzdGF0ZSBleHBvc2VkIGJ5IHRoZSBwdWJsaWMgaW50ZXJmYWNlIGlzIHVuY2hhbmdlZC48L3A+Cgo8cD5Ob3RlIHRoYXQgaW1wbGVtZW50ZXJzIGNhbiBtYWtlIHRoaXMgY2hhbmdlIGluIGEgYmluYXJ5IGNvbXBhdGlibGUKd2F5IGJ5IHByb3ZpZGluZyBib3RoIG92ZXJsb2FkczsgdGhpcyB3b3VsZCBiZSBhIGNvbmZvcm1pbmcgZXh0ZW5zaW9uLjwvcD4KCjxocj4KPGEgbmFtZT0iMzcwIj48aDM+MzcwLiZuYnNwO01pbm9yIGVycm9yIGluIGJhc2ljX2lzdHJlYW06OmdldDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjYuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkIj4gW2xpYi5pc3RyZWFtLnVuZm9ybWF0dGVkXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmF5IExpc2NobmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IEp1bCAyMDAyPC9wPgo8cD5EZWZlY3QgcmVwb3J0IGZvciBkZXNjcmlwdGlvbiBvZiBiYXNpY19pc3RyZWFtOjpnZXQgKHNlY3Rpb24gMjcuNi4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0udW5mb3JtYXR0ZWQiPiBbbGliLmlzdHJlYW0udW5mb3JtYXR0ZWRdPC9hPiksIHBhcmFncmFwaCAxNS4gVGhlIGRlc2NyaXB0aW9uIGZvciB0aGUgZ2V0IGZ1bmN0aW9uCndpdGggdGhlIGZvbGxvd2luZyBzaWduYXR1cmU6PC9wPgoKPHByZT4gIGJhc2ljX2lzdHJlYW0mbHQ7Y2hhclQsdHJhaXRzJmd0OyZhbXA7IGdldChiYXNpY19zdHJlYW1idWYmbHQ7Y2hhcl90eXBlLHRyYWl0cyZndDsmYW1wOwogIHNiKTsKPC9wcmU+Cgo8cD5pcyBpbmNvcnJlY3QuIEl0IHJlYWRzPC9wPgoKPGJsb2NrcXVvdGU+CiAgRWZmZWN0czogQ2FsbHMgZ2V0KHMsbix3aWRlbignXG4nKSkKPC9ibG9ja3F1b3RlPgoKPHA+d2hpY2ggSSBiZWxpZXZlIHNob3VsZCBiZTo8L3A+Cgo8YmxvY2txdW90ZT4KICBFZmZlY3RzOiBDYWxscyBnZXQoc2Isd2lkZW4oJ1xuJykpCjwvYmxvY2txdW90ZT4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhlIDxiPkVmZmVjdHM8L2I+IHBhcmFncmFwaCB0bzo8L3A+CjxibG9ja3F1b3RlPgogIEVmZmVjdHM6IENhbGxzIGdldChzYix0aGlzLSZndDt3aWRlbignXG4nKSkKPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1ByZS1PeGZvcmQ6IE1pbm9yIGNvcnJlY3Rpb24gZnJvbSBIb3dhcmQ6IHJlcGxhY2VkICd3aWRlbicgCiAgICAgIHdpdGggJ3RoaXMtJmd0O3dpZGVuJy5dPC9pPjwvcD4KCjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG8uPC9wPgo8aHI+CjxhIG5hbWU9IjM3MyI+PGgzPjM3My4mbmJzcDtBcmUgYmFzaWNfaXN0cmVhbSBhbmQgYmFzaWNfb3N0cmVhbSB0byB1c2UgKGV4Y2VwdGlvbnMoKSZhbXA7YmFkYml0KSAhPSAwID88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNy42LjEuMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+LCAyNy42LjIuNS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtLmZvcm1hdHRlZC5yZXFtdHMiPiBbbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0tlaXRoIEJha2VyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIzIEp1bCAyMDAyPC9wPgoKPHA+CkluIDI3LjYuMS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4gYW5kIDI3LjYuMi41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4KKGV4Y2VwdGlvbigpJmFtcDtiYWRiaXQpICE9IDAgaXMgdXNlZCBpbiB0ZXN0aW5nIGZvciByZXRocm93LCB5ZXQKZXhjZXB0aW9uKCkgaXMgdGhlIGNvbnN0cnVjdG9yIHRvIGNsYXNzIHN0ZDo6ZXhjZXB0aW9uIGluIDE4LjYuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLmV4Y2VwdGlvbiI+IFtsaWIuZXhjZXB0aW9uXTwvYT4gdGhhdCBoYXMgbm8gcmV0dXJuIHR5cGUuIFNob3VsZCBtZW1iZXIgZnVuY3Rpb24KZXhjZXB0aW9ucygpIGZvdW5kIGluIDI3LjQuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zIj4gW2xpYi5pb3NdPC9hPiBiZSB1c2VkIGluc3RlYWQ/CjwvcD4KCjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIDI3LjYuMS4yLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIuaXN0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4gYW5kIDI3LjYuMi41LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW0uZm9ybWF0dGVkLnJlcW10cyI+IFtsaWIub3N0cmVhbS5mb3JtYXR0ZWQucmVxbXRzXTwvYT4sIGNoYW5nZQoiKGV4Y2VwdGlvbigpJmFtcDtiYWRiaXQpICE9IDAiIHRvICIoZXhjZXB0aW9ucygpJmFtcDtiYWRiaXQpICE9IDAiLgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG8uPC9wPgo8aHI+CjxhIG5hbWU9IjM3NSI+PGgzPjM3NS4mbmJzcDtiYXNpY19pb3Mgc2hvdWxkIGJlIGlvc19iYXNlIGluIDI3LjcuMS4zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNy4xLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLnN0cmluZ2J1Zi52aXJ0dWFscyI+IFtsaWIuc3RyaW5nYnVmLnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmF5IExpc2NobmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE0IEF1ZyAyMDAyPC9wPgo8cD4KSW4gU2VjdGlvbiAyNy43LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLnZpcnR1YWxzIj4gW2xpYi5zdHJpbmdidWYudmlydHVhbHNdPC9hPjogVGFibGUgOTAsIFRhYmxlIDkxLCBhbmQgcGFyYWdyYXBoCjE0IGFsbCBjb250YWluIHJlZmVyZW5jZXMgdG8gImJhc2ljX2lvczo6IiB3aGljaCBzaG91bGQgYmUKImlvc19iYXNlOjoiLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSBhbGwgcmVmZXJlbmNlcyB0byAiYmFzaWNfaW9zIiBpbiBUYWJsZSA5MCwgVGFibGUgOTEsIGFuZApwYXJhZ3JhcGggMTQgdG8gImlvc19iYXNlIi4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvLjwvcD4KPGhyPgo8YSBuYW1lPSIzNzkiPjxoMz4zNzkuJm5ic3A7bm9uc2Vuc2ljYWwgY3R5cGU6OmRvX3dpZGVuKCkgcmVxdWlyZW1lbnQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY3R5cGUudmlydHVhbHNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7NiBTZXAgMjAwMjwvcD4KPHA+ClRoZSBsYXN0IHNlbnRlbmNlIGluIDIyLjIuMS4xLjIsIHAxMSBiZWxvdyBkb2Vzbid0IHNlZW0gdG8gbWFrZSBzZW5zZS4KPC9wPgo8cHJlPiAgY2hhclQgZG9fd2lkZW4gKGNoYXIgYykgY29uc3Q7CgogIC0xMS0gRWZmZWN0czogQXBwbGllcyB0aGUgc2ltcGxlc3QgcmVhc29uYWJsZSB0cmFuc2Zvcm1hdGlvbiBmcm9tCiAgICAgICBhIGNoYXIgdmFsdWUgb3Igc2VxdWVuY2Ugb2YgY2hhciB2YWx1ZXMgdG8gdGhlIGNvcnJlc3BvbmRpbmcKICAgICAgIGNoYXJUIHZhbHVlIG9yIHZhbHVlcy4gVGhlIG9ubHkgY2hhcmFjdGVycyBmb3Igd2hpY2ggdW5pcXVlCiAgICAgICB0cmFuc2Zvcm1hdGlvbnMgYXJlIHJlcXVpcmVkIGFyZSB0aG9zZSBpbiB0aGUgYmFzaWMgc291cmNlCiAgICAgICBjaGFyYWN0ZXIgc2V0ICgyLjIpLiBGb3IgYW55IG5hbWVkIGN0eXBlIGNhdGVnb3J5IHdpdGggYQogICAgICAgY3R5cGUmbHQ7Y2hhclQmZ3Q7IGZhY2V0IGN0dyBhbmQgdmFsaWQgY3R5cGVfYmFzZTo6bWFzayB2YWx1ZQogICAgICAgTSAoaXMoTSwgYykgfHwgIWN0dy5pcyhNLCBkb193aWRlbihjKSkpIGlzIHRydWUuCjwvcHJlPgo8cD4KU2hvdWxkbid0IHRoZSBsYXN0IHNlbnRlbmNlIGluc3RlYWQgcmVhZAo8L3A+CjxwcmU+ICAgICAgIEZvciBhbnkgbmFtZWQgY3R5cGUgY2F0ZWdvcnkgd2l0aCBhIGN0eXBlJmx0O2NoYXImZ3Q7IGZhY2V0IGN0YwogICAgICAgYW5kIHZhbGlkIGN0eXBlX2Jhc2U6Om1hc2sgdmFsdWUgTQogICAgICAgKGN0Yy5pcyhNLCBjKSB8fCAhaXMoTSwgZG9fd2lkZW4oYykpKSBpcyB0cnVlLgo8L3ByZT4KPHA+CkkuZS4sIGlmIHRoZSBuYXJyb3cgY2hhcmFjdGVyIGMgaXMgbm90IGEgbWVtYmVyIG9mIGEgY2xhc3Mgb2YKY2hhcmFjdGVycyB0aGVuIG5laXRoZXIgaXMgdGhlIHdpZGVuZWQgZm9ybSBvZiBjLiAoVG8gcGFyYXBocmFzZQpmb290bm90ZSAyMjQuKQo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgdGhlIGxhc3Qgc2VudGVuY2Ugb2YgMjIuMi4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jdHlwZS52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmN0eXBlLnZpcnR1YWxzXTwvYT4sIHAxMSB3aXRoIHRoZQpmb2xsb3dpbmcgdGV4dDoKPC9wPgo8cHJlPiAgICAgICBGb3IgYW55IG5hbWVkIGN0eXBlIGNhdGVnb3J5IHdpdGggYSBjdHlwZSZsdDtjaGFyJmd0OyBmYWNldCBjdGMKICAgICAgIGFuZCB2YWxpZCBjdHlwZV9iYXNlOjptYXNrIHZhbHVlIE0sCiAgICAgICAoY3RjLmlzKE0sIGMpIHx8ICFpcyhNLCBkb193aWRlbihjKSkpIGlzIHRydWUuCjwvcHJlPgoKPHA+PGk+W0tvbmE6IE1pbm9yIGVkaXQuIEFkZGVkIGEgY29tbWEgYWZ0ZXIgdGhlIDxpPk08L2k+IGZvciBjbGFyaXR5Ll08L2k+PC9wPgoKPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgYmVsaWV2ZXMgdGhpcyBpcyBqdXN0IGEgdHlwbywgYW5kIHRoYXQgdGhpcyBpcyB0aGUgY29ycmVjdCBmaXguPC9wPgo8aHI+CjxhIG5hbWU9IjM4MCI+PGgzPjM4MC4mbmJzcDt0eXBvcyBpbiBjb2RlY3Z0IHRhYmxlcyA1MyBhbmQgNTQ8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMi4yLjEuNS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHMiPiBbbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzYgU2VwIDIwMDI8L3A+CjxwPgpUYWJsZXMgNTMgYW5kIDU0IGluIDIyLjIuMS41LjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFscyI+IFtsaWIubG9jYWxlLmNvZGVjdnQudmlydHVhbHNdPC9hPiBhcmUgYm90aCB0aXRsZWQgImNvbnZlcnQKcmVzdWx0IHZhbHVlcywiIHdoZW4gc3VyZWx5ICJkb19pbi9kb19vdXQgcmVzdWx0IHZhbHVlcyIgbXVzdCBoYXZlCmJlZW4gaW50ZW5kZWQgZm9yIFRhYmxlIDUzIGFuZCAiZG9fdW5zaGlmdCByZXN1bHQgdmFsdWVzIiBmb3IgVGFibGUKNTQuCjwvcD4KPHA+ClRhYmxlIDU0LCByb3cgMyBzYXlzIHRoYXQgdGhlIG1lYW5pbmcgb2YgcGFydGlhbCBpcyAibW9yZSBjaGFyYWN0ZXJzCm5lZWRlZCB0byBiZSBzdXBwbGllZCB0byBjb21wbGV0ZSB0ZXJtaW5hdGlvbi4iIFRoZSBmdW5jdGlvbiBpcyBub3QKc3VwcGxpZWQgYW55IGNoYXJhY3RlcnMsIGl0IGlzIGdpdmVuIGEgYnVmZmVyIHdoaWNoIGl0IGZpbGxzIHdpdGgKY2hhcmFjdGVycyBvciwgbW9yZSBwcmVjaXNlbHksIGRlc3RpbmF0aW9uIGVsZW1lbnRzIChpLmUuLCBhbiBlc2NhcGUKc2VxdWVuY2UpLiBTbyBwYXJ0aWFsIG1lYW5zIHRoYXQgc3BhY2UgZm9yIG1vcmUgdGhhbiAodG9fbGltaXQgLSB0bykKZGVzdGluYXRpb24gZWxlbWVudHMgd2FzIG5lZWRlZCB0byB0ZXJtaW5hdGUgYSBzZXF1ZW5jZSBnaXZlbiB0aGUKdmFsdWUgb2Ygc3RhdGUuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSB0aXRsZSBvZiBUYWJsZSA1MyB0byAiZG9faW4vZG9fb3V0IHJlc3VsdCB2YWx1ZXMiIGFuZAp0aGUgdGl0bGUgb2YgVGFibGUgNTQgdG8gImRvX3Vuc2hpZnQgcmVzdWx0IHZhbHVlcy4iCjwvcD4KPHA+CkNoYW5nZSB0aGUgdGV4dCBpbiBUYWJsZSA1NCwgcm93IDMgKHRoZSA8Yj5wYXJ0aWFsPC9iPiByb3cpLCB1bmRlciB0aGUKaGVhZGluZyBNZWFuaW5nLCB0byAic3BhY2UgZm9yIG1vcmUgdGhhbiAodG9fbGltaXQgLSB0bykgZGVzdGluYXRpb24KZWxlbWVudHMgd2FzIG5lZWRlZCB0byB0ZXJtaW5hdGUgYSBzZXF1ZW5jZSBnaXZlbiB0aGUgdmFsdWUgb2Ygc3RhdGUuIgo8L3A+Cjxocj4KPGEgbmFtZT0iMzgxIj48aDM+MzgxLiZuYnNwO2RldGVjdGlvbiBvZiBpbnZhbGlkIG1ic3RhdGVfdCBpbiBjb2RlY3Z0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMi4xLjUuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5jb2RlY3Z0LnZpcnR1YWxzIj4gW2xpYi5sb2NhbGUuY29kZWN2dC52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs2IFNlcCAyMDAyPC9wPgo8cD4KQWxsIGJ1dCBvbmUgY29kZWN2dCBtZW1iZXIgZnVuY3Rpb25zIHRoYXQgdGFrZSBhIHN0YXRlX3R5cGUgYXJndW1lbnQKbGlzdCBhcyBvbmUgb2YgdGhlaXIgcHJlY29uZGl0aW9ucyB0aGF0IHRoZSBzdGF0ZV90eXBlIGFyZ3VtZW50IGhhdmUKYSB2YWxpZCB2YWx1ZS4gSG93ZXZlciwgYWNjb3JkaW5nIHRvIDIyLjIuMS41LjIsIHA2LApjb2RlY3Z0Ojpkb191bnNoaWZ0KCkgaXMgdGhlIG9ubHkgY29kZWN2dCBtZW1iZXIgdGhhdCBpcyBzdXBwb3NlZCB0bwpyZXR1cm4gZXJyb3IgaWYgdGhlIHN0YXRlX3R5cGUgb2JqZWN0IGlzIGludmFsaWQuCjwvcD4KCjxwPgpJdCBzZWVtcyB0byBtZSB0aGF0IHRoZSB0cmVhdG1lbnQgb2Ygc3RhdGVfdHlwZSBieSBhbGwgY29kZWN2dCBtZW1iZXIKZnVuY3Rpb25zIHNob3VsZCBiZSB0aGUgc2FtZSBhbmQgdGhlIGN1cnJlbnQgcmVxdWlyZW1lbnRzIHNob3VsZCBiZQpjaGFuZ2VkLiBTaW5jZSB0aGUgZGV0ZWN0aW9uIG9mIGludmFsaWQgc3RhdGVfdHlwZSB2YWx1ZXMgbWF5IGJlCmRpZmZpY3VsdCBpbiBnZW5lcmFsIG9yIGNvbXB1dGF0aW9uYWxseSBleHBlbnNpdmUgaW4gc29tZSBzcGVjaWZpYwpjYXNlcywgSSBwcm9wb3NlIHRoZSBmb2xsb3dpbmc6CjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbmV3IHBhcmFncmFwaCBiZWZvcmUgMjIuMi4xLjUuMiwgcDUsIGFuZCBhZnRlciB0aGUgZnVuY3Rpb24KZGVjbGFyYXRpb24gYmVsb3cKPC9wPgo8cHJlPiAgICByZXN1bHQgZG9fdW5zaGlmdChzdGF0ZVQmYW1wOyBzdGF0ZSwKICAgIGV4dGVyblQqIHRvLCBleHRlcm5UKiB0b19saW1pdCwgZXh0ZXJuVComYW1wOyB0b19uZXh0KSBjb25zdDsKPC9wcmU+CjxwPgphcyBmb2xsb3dzOgo8L3A+CjxwcmU+ICAgIFJlcXVpcmVzOiAodG8gJmx0Oz0gdG9fZW5kKSB3ZWxsIGRlZmluZWQgYW5kIHRydWU7IHN0YXRlIGluaXRpYWxpemVkLAogICAgaWYgYXQgdGhlIGJlZ2lubmluZyBvZiBhIHNlcXVlbmNlLCBvciBlbHNlIGVxdWFsIHRvIHRoZSByZXN1bHQgb2YKICAgIGNvbnZlcnRpbmcgdGhlIHByZWNlZGluZyBjaGFyYWN0ZXJzIGluIHRoZSBzZXF1ZW5jZS4KPC9wcmU+CjxwPgphbmQgY2hhbmdlIHRoZSB0ZXh0IGluIFRhYmxlIDU0LCByb3cgNCwgdGhlIDxiPmVycm9yPC9iPiByb3csIHVuZGVyCnRoZSBoZWFkaW5nIE1lYW5pbmcsIGZyb20KPC9wPgo8cHJlPiAgICBzdGF0ZSBoYXMgaW52YWxpZCB2YWx1ZQo8L3ByZT4KPHA+CnRvCjwvcD4KPHByZT4gICAgYW4gdW5zcGVjaWZpZWQgZXJyb3IgaGFzIG9jY3VycmVkCjwvcHJlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGludGVudCBpcyB0aGF0IGltcGxlbWVudGF0aW9ucyBzaG91bGQgbm90IGJlIHJlcXVpcmVkIHRvIGRldGVjdAppbnZhbGlkIHN0YXRlIHZhbHVlczsgc3VjaCBhIHJlcXVpcmVtZW50IGFwcGVhcnMgbm93aGVyZSBlbHNlLiAgQW4KaW52YWxpZCBzdGF0ZSB2YWx1ZSBpcyBhIHByZWNvbmRpdGlvbiB2aW9sYXRpb24sIDxpPmkuZS48L2k+IHVuZGVmaW5lZApiZWhhdmlvci4gIEltcGxlbWVudGF0aW9ucyB0aGF0IGRvIGNob29zZSB0byBkZXRlY3QgaW52YWxpZCBzdGF0ZQp2YWx1ZXMsIG9yIHRoYXQgY2hvb3NlIHRvIGRldGVjdCBhbnkgb3RoZXIga2luZCBvZiBlcnJvciwgbWF5IHJldHVybgo8Yj5lcnJvcjwvYj4gYXMgYW4gaW5kaWNhdGlvbi48L3A+Cjxocj4KPGEgbmFtZT0iMzgzIj48aDM+MzgzLiZuYnNwO0JpZGlyZWN0aW9uYWwgaXRlcmF0b3IgYXNzZXJ0aW9uIHR5cG88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaXRlcmF0b3JzLmh0bWwjbGliLmJpZGlyZWN0aW9uYWwuaXRlcmF0b3JzIj4gW2xpYi5iaWRpcmVjdGlvbmFsLml0ZXJhdG9yc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO3lzYXBpciAoc3VibWl0dGVkIHZpYSBjb21wLnN0ZC5jKyspJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE3IE9jdCAyMDAyPC9wPgo8cD4KRm9sbG93aW5nIGEgZGlzY3Vzc2lvbiBvbiB0aGUgYm9vc3QgbGlzdCByZWdhcmRpbmcgZW5kIGl0ZXJhdG9ycyBhbmQKdGhlIHBvc3NpYmlsaXR5IG9mIHBlcmZvcm1pbmcgb3BlcmF0b3ItLSgpIG9uIHRoZW0sIGl0IHNlZW1zIHRvIG1lCnRoYXQgdGhlcmUgaXMgYSB0eXBvIGluIHRoZSBzdGFuZGFyZC4gIFRoaXMgdHlwbyBoYXMgbm90aGluZyB0byBkbwp3aXRoIHRoYXQgZGlzY3Vzc2lvbi4KPC9wPgoKPHA+CkkgaGF2ZSBjaGVja2VkIHRoaXMgbmV3c2dyb3VwLCBhcyB3ZWxsIGFzIGF0dGVtcHRlZCBhIHNlYXJjaCBvZiB0aGUKQWN0aXZlL0RlZmVjdC9DbG9zZWQgSXNzdWVzIExpc3Qgb24gdGhlIHNpdGUgZm9yIHRoZSB3b3JkcyAicyBpcwpkZXJlZmVyIiBzbyBJIGJlbGlldmUgdGhpcyBoYXMgbm90IGJlZW4gcHJvcG9zZWQgYmVmb3JlLiAgRnVydGhlcm1vcmUsCnRoZSAiTGlzdHMgYnkgSW5kZXgiIG1lbnRpb25zIG9ubHkgRFIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+IG9uIHNlY3Rpb24KMjQuMS40LCBhbmQgRFIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjMjk5Ij4yOTk8L2E+IGlzIG5vdCByZWxhdGVkIHRvIHRoaXMgaXNzdWUuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgbWFrZXMgdGhlIGZvbGxvd2luZyBhc3NlcnRpb24gb24gYmlkaXJlY3Rpb25hbCBpdGVyYXRvcnMsCmluIHNlY3Rpb24gMjQuMS40IFtsaWIuYmlkaXJlY3Rpb25hbC5pdGVyYXRvcnNdLCBUYWJsZSA3NToKPC9wPgoKPHByZT4gICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uYWwgIGFzc2VydGlvbi9ub3RlCmV4cHJlc3Npb24gIHJldHVybiB0eXBlICAgc2VtYW50aWNzICAgIHByZS9wb3N0LWNvbmRpdGlvbgoKLS1yICAgICAgICAgIFgmYW1wOyAgICAgICAgICAgICAgICAgICAgICAgIHByZTogdGhlcmUgZXhpc3RzIHMgc3VjaAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0IHIgPT0gKytzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3N0OiBzIGlzIGRlcmVmZXJlbmNlYWJsZS4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0oKytyKSA9PSByLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLXIgPT0gLS1zIGltcGxpZXMgciA9PSBzLgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmYW1wO3IgPT0gJmFtcDstLXIuCjwvcHJlPgoKPHA+CihTZWUgPGEgaHJlZj0iaHR0cDovL2FzcG4uYWN0aXZlc3RhdGUuY29tL0FTUE4vTWFpbC9NZXNzYWdlL2Jvb3N0LzEzOTU3NjMiPmh0dHA6Ly9hc3BuLmFjdGl2ZXN0YXRlLmNvbS9BU1BOL01haWwvTWVzc2FnZS9ib29zdC8xMzk1NzYzPC9hPi4pCjwvcD4KCjxwPgpJbiBwYXJ0aWN1bGFyLCAicyBpcyBkZXJlZmVyZW5jZWFibGUiIHNlZW1zIHRvIGJlIGluIGVycm9yLiAgSXQgc2VlbXMKdGhhdCB0aGUgaW50ZW50aW9uIHdhcyB0byBzYXkgInIgaXMgZGVyZWZlcmVuY2VhYmxlIi4KPC9wPgoKPHA+CklmIGl0IHdlcmUgdG8gc2F5ICJyIGlzIGRlcmVmZXJlbmNlYWJsZSIgaXQgd291bGQKbWFrZSBwZXJmZWN0IHNlbnNlLiAgU2luY2UgcyBtdXN0IGJlIGRlcmVmZXJlbmNlYWJsZSBwcmlvciB0bwpvcGVyYXRvcisrLCB0aGVuIHRoZSBuYXR1cmFsIHJlc3VsdCBvZiBvcGVyYXRvci0tICh0byB1bmRvIG9wZXJhdG9yKyspCndvdWxkIGJlIHRvIG1ha2UgciBkZXJlZmVyZW5jZWFibGUuICBGdXJ0aGVybW9yZSwgd2l0aG91dCBvdGhlcgphc3NlcnRpb25zLCBhbmQgYmFzaW5nIG9ubHkgb24gcHJlY29uZGl0aW9uIGFuZCBwb3N0Y29uZGl0aW9ucywgd2UKY291bGQgbm90IG90aGVyd2lzZSBrbm93IHRoaXMuICBTbyBpdCBpcyBhbHNvIGludGVyZXN0aW5nIGluZm9ybWF0aW9uLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpDaGFuZ2UgdGhlIGd1YXJhbnRlZSB0byAicG9zdGNvbmRpdGlvbjogciBpcyBkZXJlZmVyZW5jZWFibGUuIgo8L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5GaXhlcyBhbiBvYnZpb3VzIHR5cG88L3A+Cjxocj4KPGEgbmFtZT0iMzg5Ij48aDM+Mzg5LiZuYnNwO0NvbnN0IG92ZXJsb2FkIG9mIHZhbGFycmF5OjpvcGVyYXRvcltdIHJldHVybnMgYnkgdmFsdWU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUudmFsYXJyYXkiPiBbbGliLnRlbXBsYXRlLnZhbGFycmF5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7R2FicmllbCBEb3MgUmVpcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs4IE5vdiAyMDAyPC9wPgo8cD5Db25zaWRlciB0aGUgZm9sbG93aW5nIHByb2dyYW06PC9wPgo8cHJlPiAgICAjaW5jbHVkZSAmbHQ7aW9zdHJlYW0mZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7b3N0cmVhbSZndDsKICAgICNpbmNsdWRlICZsdDt2ZWN0b3ImZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7dmFsYXJyYXkmZ3Q7CiAgICAjaW5jbHVkZSAmbHQ7YWxnb3JpdGhtJmd0OwogICAgI2luY2x1ZGUgJmx0O2l0ZXJhdG9yJmd0OwogICAgdGVtcGxhdGUmbHQ7dHlwZW5hbWUgQXJyYXkmZ3Q7CiAgICB2b2lkIHByaW50KGNvbnN0IEFycmF5JmFtcDsgYSkKICAgIHsKICAgIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEFycmF5Ojp2YWx1ZV90eXBlIFQ7CiAgICBjb3B5KCZhbXA7YVswXSwgJmFtcDthWzBdICsgYS5zaXplKCksCiAgICBvc3RyZWFtX2l0ZXJhdG9yJmx0O1QmZ3Q7KHN0ZDo6Y291dCwgIiAiKSk7CiAgICB9CiAgICB0ZW1wbGF0ZSZsdDt0eXBlbmFtZSBULCB1bnNpZ25lZCBOJmd0OwogICAgdW5zaWduZWQgc2l6ZShUKCZhbXA7KVtOXSkgeyByZXR1cm4gTjsgfQogICAgaW50IG1haW4oKQogICAgewogICAgZG91YmxlIGFycmF5W10gPSB7IDAuODksIDkuMywgNywgNi4yMyB9OwogICAgc3RkOjp2ZWN0b3ImbHQ7ZG91YmxlJmd0OyB2KGFycmF5LCBhcnJheSArIHNpemUoYXJyYXkpKTsKICAgIHN0ZDo6dmFsYXJyYXkmbHQ7ZG91YmxlJmd0OyB3KGFycmF5LCBzaXplKGFycmF5KSk7CiAgICBwcmludCh2KTsgLy8gIzEKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyBzdGQ6OmVuZGw7CiAgICBwcmludCh3KTsgLy8gIzIKICAgIHN0ZDo6Y291dCAmbHQ7Jmx0OyBzdGQ6OmVuZGw7CiAgICB9CjwvcHJlPgoKPHA+V2hpbGUgdGhlIGNhbGwgbnVtYmVyZWQgIzEgc3VjY2VlZHMsIHRoZSBjYWxsIG51bWJlcmVkICMyIGZhaWxzCmJlY2F1c2UgdGhlIGNvbnN0IHZlcnNpb24gb2YgdGhlIG1lbWJlciBmdW5jdGlvbgp2YWxhcnJheSZsdDtUJmd0Ozo6b3BlcmF0b3JbXShzaXplX3QpIHJldHVybnMgYSB2YWx1ZSBpbnN0ZWFkIG9mIGEKY29uc3QtcmVmZXJlbmNlLiBUaGF0IHNlZW1zIHRvIGJlIHNvIGZvciBubyBhcHBhcmVudCByZWFzb24sIG5vCmJlbmVmaXQuIE5vdCBvbmx5IGRvZXMgdGhhdCBkZWZlYXRzIHVzZXJzJyBleHBlY3RhdGlvbiBidXQgaXQgYWxzbwpkb2VzIGhpbmRlciBleGlzdGluZyBzb2Z0d2FyZSAod3JpdHRlbiBlaXRoZXIgaW4gQyBvciBGb3J0cmFuKQppbnRlZ3JhdGlvbiB3aXRoaW4gcHJvZ3JhbXMgd3JpdHRlbiBpbiBDKysuICBUaGVyZSBpcyBubyByZWFzb24gd2h5CnN1YnNjcmlwdGluZyBhbiBleHByZXNzaW9uIG9mIHR5cGUgdmFsYXJyYXkmbHQ7VCZndDsgdGhhdCBpcyBjb25zdC1xdWFsaWZpZWQKc2hvdWxkIG5vdCByZXR1cm4gYSBjb25zdCBUJmFtcDsuPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSBjbGFzcyBzeW5vcHNpcyBpbiAyNi4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIudGVtcGxhdGUudmFsYXJyYXkiPiBbbGliLnRlbXBsYXRlLnZhbGFycmF5XTwvYT4sIGFuZCBpbgoyNi4zLjIuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi52YWxhcnJheS5hY2Nlc3MiPiBbbGliLnZhbGFycmF5LmFjY2Vzc108L2E+IGp1c3QgYWJvdmUgcGFyYWdyYXBoIDEsIGNoYW5nZTwvcD4KPHByZT4gIFQgb3BlcmF0b3JbXShzaXplX3QgY29uc3QpOwo8L3ByZT4KPHA+dG88L3A+CjxwcmU+ICBjb25zdCBUJmFtcDsgb3BlcmF0b3JbXShzaXplX3QgY29uc3QpOwo8L3ByZT4KCjxwPjxpPltLb25hOiBmaXhlZCBhIG1pbm9yIHR5cG86IHB1dCBzZW1pY29sb24gYXQgdGhlIGVuZCBvZiB0aGUgbGluZQogIHdlaHJlIGl0IGJlbG9uZ3MuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+UmV0dXJuIGJ5IHZhbHVlIHNlZW1zIHRvIHNlcnZlIG5vIHB1cnBvc2UuICBWYWxhcmF5IHdhcyBleHBsaWNpdGx5CmRlc2lnbmVkIHRvIGhhdmUgYSBzcGVjaWZpZWQgbGF5b3V0IHNvIHRoYXQgaXQgY291bGQgZWFzaWx5IGJlCmludGVncmF0ZWQgd2l0aCBsaWJyYXJpZXMgaW4gb3RoZXIgbGFuZ3VhZ2VzLCBhbmQgcmV0dXJuIGJ5IHZhbHVlCmRlZmVhdHMgdGhhdCBwdXJwb3NlLiAgSXQgaXMgYmVsaWV2ZWQgdGhhdCB0aGlzIGNoYW5nZSB3aWxsIGhhdmUgbm8KaW1wYWN0IG9uIGFsbG93YWJsZSBvcHRpbWl6YXRpb25zLjwvcD4KPGhyPgo8YSBuYW1lPSIzOTEiPjxoMz4zOTEuJm5ic3A7bm9uLW1lbWJlciBmdW5jdGlvbnMgc3BlY2lmaWVkIGFzIGNvbnN0PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5jb252ZXJzaW9ucyI+IFtsaWIuY29udmVyc2lvbnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKYW1lcyBLYW56ZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxMCBEZWMgMjAwMjwvcD4KPHA+ClRoZSBzcGVjaWZpY2F0aW9ucyBvZiB0b3VwcGVyIGFuZCB0b2xvd2VyIGJvdGggc3BlY2lmeSB0aGUgZnVuY3Rpb25zIGFzCmNvbnN0LCBhbHRob3VnaHQgdGhleSBhcmUgbm90IG1lbWJlciBmdW5jdGlvbnMsIGFuZCBhcmUgbm90IHNwZWNpZmllZCBhcwpjb25zdCBpbiB0aGUgaGVhZGVyIGZpbGUgc3lub3BzaXMgaW4gc2VjdGlvbiAyMi4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWxvY2FsZXMuaHRtbCNsaWIubG9jYWxlcyI+IFtsaWIubG9jYWxlc108L2E+Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+SW4gMjIuMS4zLjIgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbG9jYWxlcy5odG1sI2xpYi5jb252ZXJzaW9ucyI+IFtsaWIuY29udmVyc2lvbnNdPC9hPiwgcmVtb3ZlIDx0dD5jb25zdDwvdHQ+IGZyb20gdGhlIGZ1bmN0aW9uCiAgZGVjbGFyYXRpb25zIG9mIHN0ZDo6dG91cHBlciBhbmQgc3RkOjp0b2xvd2VyPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+Rml4ZXMgYW4gb2J2aW91cyB0eXBvPC9wPgo8aHI+CjxhIG5hbWU9IjM5NSI+PGgzPjM5NS4mbmJzcDtpbmNvbnNpc3RlbmNpZXMgaW4gdGhlIGRlZmluaXRpb25zIG9mIHJhbmQoKSBhbmQgcmFuZG9tX3NodWZmbGUoKTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI2LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItbnVtZXJpY3MuaHRtbCNsaWIuYy5tYXRoIj4gW2xpYi5jLm1hdGhdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtKYW1lcyBLYW56ZSZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEphbiAyMDAzPC9wPgo8cD4KSW4gMjYuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1udW1lcmljcy5odG1sI2xpYi5jLm1hdGgiPiBbbGliLmMubWF0aF08L2E+LCB0aGUgQysrIHN0YW5kYXJkIHJlZmVycyB0byB0aGUgQyBzdGFuZGFyZCBmb3IgdGhlCmRlZmluaXRpb24gb2YgcmFuZCgpOyBpbiB0aGUgQyBzdGFuZGFyZCwgaXQgaXMgd3JpdHRlbiB0aGF0ICJUaGUKaW1wbGVtZW50YXRpb24gc2hhbGwgYmVoYXZlIGFzIGlmIG5vIGxpYnJhcnkgZnVuY3Rpb24gY2FsbHMgdGhlIHJhbmQKZnVuY3Rpb24uIgo8L3A+Cgo8cD4KSW4gMjUuMi4xMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5yYW5kb20uc2h1ZmZsZSI+IFtsaWIuYWxnLnJhbmRvbS5zaHVmZmxlXTwvYT4sIHRoZXJlIGlzIG5vIHNwZWNpZmljYXRpb24gYXMgdG8KaG93IHRoZSB0d28gcGFyYW1ldGVyIHZlcnNpb24gb2YgdGhlIGZ1bmN0aW9uIGdlbmVyYXRlcyBpdHMgcmFuZG9tCnZhbHVlLiAgSSBiZWxpZXZlIHRoYXQgYWxsIGN1cnJlbnQgaW1wbGVtZW50YXRpb25zIGluIGZhY3QgY2FsbCByYW5kKCkKKGluIGNvbnRyYWRpY3Rpb24gd2l0aCB0aGUgcmVxdWlyZW1lbnQgYXZvdmUpOyBpZiBhbiBpbXBsZW1lbnRhdGlvbiBkb2VzCm5vdCBjYWxsIHJhbmQoKSwgdGhlcmUgaXMgdGhlIHF1ZXN0aW9uIG9mIGhvdyB3aGF0ZXZlciByYW5kb20gZ2VuZXJhdG9yCml0IGRvZXMgdXNlIGlzIHNlZWRlZC4gIFNvbWV0aGluZyBpcyBtaXNzaW5nLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiBbbGliLmMubWF0aF0sIGFkZCBhIHBhcmFncmFwaCBzcGVjaWZ5aW5nIHRoYXQgdGhlIEMgZGVmaW5pdGlvbiBvZgpyYW5kIHNoYWwgYmUgbW9kaWZpZWQgdG8gc2F5IHRoYXQgIlVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCB0aGUKaW1wbGVtZW50YXRpb24gc2hhbGwgYmVoYXZlIGFzIGlmIG5vIGxpYnJhcnkgZnVuY3Rpb24gY2FsbHMgdGhlIHJhbmQKZnVuY3Rpb24uIgo8L3A+Cgo8cD4KSW4gW2xpYi5hbGcucmFuZG9tLnNodWZmbGVdLCBhZGQgYSBzZW50ZW5jZSB0byB0aGUgZWZmZWN0IHRoYXQgIkluCnRoZSB0d28gYXJndW1lbnQgZm9ybSBvZiB0aGUgZnVuY3Rpb24sIHRoZSB1bmRlcmx5aW5nIHNvdXJjZSBvZgpyYW5kb20gbnVtYmVycyBpcyBpbXBsZW1lbnRhdGlvbiBkZWZpbmVkLiBbTm90ZTogaW4gcGFydGljdWxhciwgYW4KaW1wbGVtZW50YXRpb24gaXMgcGVybWl0dGVkIHRvIHVzZSA8dHQ+cmFuZDwvdHQ+Ll0KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIG9yaWdpbmFsIHByb3Bvc2VkIHJlc29sdXRpb24gcHJvcG9zZWQgcmVxdWlyaW5nIHRoZQogIHR3by1hcmd1bWVudCBmcm9tIG9mIDx0dD5yYW5kb21fc2h1ZmZsZTwvdHQ+IHRvCiAgdXNlIDx0dD5yYW5kPC90dD4uIFdlIGRvbid0IHdhbnQgdG8gZG8gdGhhdCwgYmVjYXVzZSBzb21lIGV4aXN0aW5nCiAgaW1wbGVtZW50YXRpb25zIGFscmVhZHkgdXNlIHNvbWV0aGluZyBlbHNlOiBnY2MKICB1c2VzIDx0dD5scmFuZDQ4PC90dD4sIGZvciBleGFtcGxlLiAgVXNpbmcgPHR0PnJhbmQ8L3R0PiBwcmVzZW50cyBhCiAgcHJvYmxlbSBpZiB0aGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBzZXF1ZW5jZSBpcyBncmVhdGVyIHRoYW4KICBSQU5EX01BWC48L3A+IAo8aHI+CjxhIG5hbWU9IjQwMCI+PGgzPjQwMC4mbmJzcDtyZWR1bmRhbnQgdHlwZSBjYXN0IGluIGxpYi5hbGxvY2F0b3IubWVtYmVyczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hbGxvY2F0b3IubWVtYmVycyI+IFtsaWIuYWxsb2NhdG9yLm1lbWJlcnNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJrdXMgTWF1aGFydCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBGZWIgMjAwMzwvcD4KPHA+CjIwLjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hbGxvY2F0b3IubWVtYmVycyI+IFtsaWIuYWxsb2NhdG9yLm1lbWJlcnNdPC9hPiBhbGxvY2F0b3IgbWVtYmVycywgY29udGFpbnMKdGhlIGZvbGxvd2luZyAzIGxpbmVzOgo8L3A+Cgo8cHJlPiAgMTIgUmV0dXJuczogbmV3KCh2b2lkICopIHApIFQoIHZhbCkKICAgICB2b2lkIGRlc3Ryb3kocG9pbnRlciBwKTsKICAxMyBSZXR1cm5zOiAoKFQqKSBwKS0mZ3Q7flQoKQo8L3ByZT4KCjxwPgpUaGUgdHlwZSBjYXN0ICIoVCopIHAiIGluIHRoZSBsYXN0IGxpbmUgaXMgcmVkdW5kYW50IGNhdXNlCndlIGtub3cgdGhhdCBzdGQ6OmFsbG9jYXRvciZsdDtUJmd0Ozo6cG9pbnRlciBpcyBhIHR5cGVkZWYgZm9yIFQqLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+ClJlcGxhY2UgIigoVCopIHApIiB3aXRoICJwIi4KPC9wPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SnVzdCBhIHR5cG8sIHRoaXMgaXMgcmVhbGx5IGVkaXRvcmlhbC48L3A+Cjxocj4KPGEgbmFtZT0iNDAyIj48aDM+NDAyLiZuYnNwO3dyb25nIG5ldyBleHByZXNzaW9uIGluIFtzb21lX11hbGxvY2F0b3I6OmNvbnN0cnVjdDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIwLjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50cyI+IFtsaWIuYWxsb2NhdG9yLnJlcXVpcmVtZW50c108L2E+LCAyMC40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4sICZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJrdXMgTWF1aGFydCZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsyNyBGZWIgMjAwMzwvcD4KPHA+ClRoaXMgYXBwbGllcyB0byB0aGUgbmV3IGV4cHJlc3Npb24gdGhhdCBpcyBjb250YWluZWQgaW4gYm90aCBwYXIxMiBvZgoyMC40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4gYW5kIGluIHBhcjIgKHRhYmxlIDMyKSBvZiAyMC4xLjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItdXRpbGl0aWVzLmh0bWwjbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLmFsbG9jYXRvci5yZXF1aXJlbWVudHNdPC9hPi4KSSB0aGluayB0aGlzIG5ldyBleHByZXNzaW9uIGlzIHdyb25nLCBpbnZvbHZpbmcgdW5pbnRlbmRlZCBzaWRlCmVmZmVjdHMuCjwvcD4KCgo8cD4yMC40LjEuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi11dGlsaXRpZXMuaHRtbCNsaWIuYWxsb2NhdG9yLm1lbWJlcnMiPiBbbGliLmFsbG9jYXRvci5tZW1iZXJzXTwvYT4gIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgMyBsaW5lczo8L3A+Cgo8cHJlPiAgMTEgUmV0dXJuczogdGhlIGxhcmdlc3QgdmFsdWUgTiBmb3Igd2hpY2ggdGhlIGNhbGwgYWxsb2NhdGUoTiwwKSBtaWdodCBzdWNjZWVkLgogICAgIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgcCwgY29uc3RfcmVmZXJlbmNlIHZhbCk7CiAgMTIgUmV0dXJuczogbmV3KCh2b2lkICopIHApIFQoIHZhbCkKPC9wcmU+CgoKPHA+MjAuMS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzIj4gW2xpYi5hbGxvY2F0b3IucmVxdWlyZW1lbnRzXTwvYT4gaW4gdGFibGUgMzIgaGFzIHRoZSBmb2xsb3dpbmcgbGluZTo8L3A+CjxwcmU+ICBhLmNvbnN0cnVjdChwLHQpICAgRWZmZWN0OiBuZXcoKHZvaWQqKXApIFQodCkKPC9wcmU+Cgo8cD4KLi4uLiB3aXRoIHRoZSBwcmVyZXF1aXNpdHMgY29taW5nIGZyb20gdGhlIHByZWNlZGluZyB0d28gcGFyYWdyYXBocywKZXNwZWNpYWxseSBmcm9tIHRhYmxlIDMxOgo8L3A+Cgo8cHJlPiAgYWxsb2MmbHQ7VCZndDsgICAgICAgICAgICAgYSAgICAgOy8vIGFuIGFsbG9jYXRvciBmb3IgVAogIGFsbG9jJmx0O1QmZ3Q7Ojpwb2ludGVyICAgIHAgICAgIDsvLyByYW5kb20gYWNjZXNzIGl0ZXJhdG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIChtYXkgYmUgZGlmZmVyZW50IGZyb20gVCopCiAgYWxsb2MmbHQ7VCZndDs6OnJlZmVyZW5jZSAgciA9ICpwOy8vIFQmYW1wOwogIFQgY29uc3QmYW1wOyAgICAgICAgICAgICB0ICAgICA7CjwvcHJlPgoKPHA+CkNhdXNlIG9mIHVzaW5nICJuZXciIGJ1dCBub3QgIjo6bmV3IiwgYW55IGV4aXN0aW5nICJUOjpvcGVyYXRvciBuZXciCmZ1bmN0aW9uIHdpbGwgaGlkZSB0aGUgZ2xvYmFsIHBsYWNlbWVudCBuZXcgZnVuY3Rpb24uIFdoZW4gdGhlcmUgaXMgbm8KIlQ6Om9wZXJhdG9yIG5ldyIgd2l0aCBhZGVxdWF0ZSBzaWduYXR1cmUsCmV2ZXJ5X2FsbG9jJmx0O1QmZ3Q7Ojpjb25zdHJ1Y3QoLi4pIGlzIGlsbC1mb3JtZWQsIGFuZCBtb3N0CnN0ZDo6Y29udGFpbmVyJmx0O1QsZXZlcnlfYWxsb2MmbHQ7VCZndDsmZ3Q7IHVzZSBpdDsgYSB3b3JrYXJvdW5kCndvdWxkIGJlIGFkZGluZyBwbGFjZW1lbnQgbmV3IGFuZCBkZWxldGUgZnVuY3Rpb25zIHdpdGggYWRlcXVhdGUKc2lnbmF0dXJlIGFuZCBzZW1hbnRpYyB0byBjbGFzcyBULCBidXQgY2xhc3MgVCBtaWdodCBjb21lIGZyb20gYW5vdGhlcgpwYXJ0eS4gTWF5YmUgZXZlbiB3b3JzZSBpcyB0aGUgY2FzZSB3aGVuIFQgaGFzIHBsYWNlbWVudCBuZXcgYW5kCmRlbGV0ZSBmdW5jdGlvbnMgd2l0aCBhZGVxdWF0ZSBzaWduYXR1cmUgYnV0IHdpdGggInVua25vd24iIHNlbWFudGljOgpJIGRvbnQgbGlrZSB0byBzcGVjdWxhdGUgYWJvdXQgaXQsIGJ1dCB3aG9ldmVyIGltcGxlbWVudHMKYW55X2NvbnRhaW5lciZsdDtULGFueV9hbGxvYyZndDsgYW5kIHdhbnRzIHRvIHVzZSBjb25zdHJ1Y3QoLi4pCnByb2JhYmx5IG11c3QgdGhpbmsgYWJvdXQgaXQuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KUmVwbGFjZSAibmV3IiB3aXRoICI6Om5ldyIgaW4gYm90aCBjYXNlcy4KPC9wPgo8aHI+CjxhIG5hbWU9IjQwMyI+PGgzPjQwMy4mbmJzcDtiYXNpY19zdHJpbmc6OnN3YXAgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb25zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy41LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OnN3YXAiPiBbbGliLnN0cmluZzo6c3dhcF08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0JlbWFuIERhd2VzJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI1IE1hciAyMDAzPC9wPgoKPHA+CnN0ZDo6YmFzaWNfc3RyaW5nLCAyMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuYmFzaWMuc3RyaW5nIj4gW2xpYi5iYXNpYy5zdHJpbmddPC9hPiBwYXJhZ3JhcGggMiBzYXlzIHRoYXQKYmFzaWNfc3RyaW5nICJjb25mb3JtcyB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIGEgU2VxdWVuY2UsIGFzIHNwZWNpZmllZAppbiAoMjMuMS4xKS4iIFRoZSBzZXF1ZW5jZSByZXF1aXJlbWVudHMgc3BlY2lmaWVkIGluICgyMy4xLjEpIHRvIG5vdAppbmNsdWRlIGFueSBwcm9oaWJpdGlvbiBvbiBzd2FwIG1lbWJlcnMgdGhyb3dpbmcgZXhjZXB0aW9ucy4KPC9wPgoKPHA+ClNlY3Rpb24gMjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHMiPiBbbGliLmNvbnRhaW5lci5yZXF1aXJlbWVudHNdPC9hPiBwYXJhZ3JhcGggMTAgZG9lcyBsaW1pdCBjb25kaXRpb25zIHVuZGVyCndoaWNoIGV4Y2VwdGlvbnMgbWF5IGJlIHRocm93biwgYnV0IGFwcGxpZXMgb25seSB0byAiYWxsIGNvbnRhaW5lcgp0eXBlcyBkZWZpbmVkIGluIHRoaXMgY2xhdXNlIiBhbmQgc28gZXhjbHVkZXMgYmFzaWNfc3RyaW5nOjpzd2FwCmJlY2F1c2UgaXQgaXMgZGVmaW5lZCBlbHNld2hlcmUuCjwvcD4KCjxwPgpFcmljIE5pZWJsZXIgcG9pbnRzIG91dCB0aGF0IDIxLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5iYXNpYy5zdHJpbmciPiBbbGliLmJhc2ljLnN0cmluZ108L2E+IHBhcmFncmFwaCA1IGV4cGxpY2l0bHkKcGVybWl0cyBiYXNpY19zdHJpbmc6OnN3YXAgdG8gaW52YWxpZGF0ZXMgaXRlcmF0b3JzLCB3aGljaCBpcwpkaXNhbGxvd2VkIGJ5IDIzLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzIj4gW2xpYi5jb250YWluZXIucmVxdWlyZW1lbnRzXTwvYT4gcGFyYWdyYXBoIDEwLiBUaHVzIHRoZSBzdGFuZGFyZCB3b3VsZApiZSBjb250cmFkaWN0b3J5IGlmIGl0IHdlcmUgcmVhZCBvciBleHRlbmRlZCB0byByZWFkIGFzIGhhdmluZwpiYXNpY19zdHJpbmcgbWVldCAyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCAxMCByZXF1aXJlbWVudHMuCjwvcD4KCjxwPgpZZXQgc2V2ZXJhbCBMV0cgbWVtYmVycyBoYXZlIGV4cHJlc3NlZCB0aGUgYmVsaWVmIHRoYXQgdGhlIG9yaWdpbmFsCmludGVudCB3YXMgdGhhdCBiYXNpY19zdHJpbmc6OnN3YXAgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb25zIGFzCnNwZWNpZmllZCBieSAyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCAxMCwgYW5kIHRoYXQgdGhlIHN0YW5kYXJkIGlzCnVuY2xlYXIgb24gdGhpcyBpc3N1ZS4gVGhlIGNvbXBsZXhpdHkgb2YgYmFzaWNfc3RyaW5nOjpzd2FwIGlzCnNwZWNpZmllZCBhcyAiY29uc3RhbnQgdGltZSIsIGluZGljYXRpbmcgdGhlIGludGVudCB3YXMgdG8gYXZvaWQKY29weWluZyAod2hpY2ggY291bGQgY2F1c2UgYSBiYWRfYWxsb2Mgb3Igb3RoZXIgZXhjZXB0aW9uKS4gQW4KaW1wb3J0YW50IHVzZSBvZiBzd2FwIGlzIHRvIGVuc3VyZSB0aGF0IGV4Y2VwdGlvbnMgYXJlIG5vdCB0aHJvd24gaW4KZXhjZXB0aW9uLXNhZmUgY29kZS4KPC9wPgoKPHA+Ck5vdGU6IFRoZXJlIHJlbWFpbnMgbG9uZyBzdGFuZGluZyBjb25jZXJuIG92ZXIgd2hldGhlciBvciBub3QgaXQgaXMKcG9zc2libGUgdG8gcmVhc29uYWJseSBtZWV0IHRoZSAyMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50cyI+IFtsaWIuY29udGFpbmVyLnJlcXVpcmVtZW50c108L2E+IHBhcmFncmFwaCAxMCBzd2FwCnJlcXVpcmVtZW50cyB3aGVuIGFsbG9jYXRvcnMgYXJlIHVuZXF1YWwuIFRoZSBzcGVjaWZpY2F0aW9uIG9mCmJhc2ljX3N0cmluZzo6c3dhcCBleGNlcHRpb24gcmVxdWlyZW1lbnRzIGlzIGluIG5vIHdheSBpbnRlbmRlZCB0bwphZGRyZXNzLCBwcmVqdWRpY2UsIG9yIG90aGVyd2lzZSBpbXBhY3QgdGhhdCBjb25jZXJuLgo8L3A+CgoKCgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjEuMy41LjggPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OnN3YXAiPiBbbGliLnN0cmluZzo6c3dhcF08L2E+LCBhZGQgYSB0aHJvd3MgY2xhdXNlOgo8L3A+Cgo8cD4KVGhyb3dzOiBTaGFsbCBub3QgdGhyb3cgZXhjZXB0aW9ucy4KPC9wPgo8aHI+CjxhIG5hbWU9IjQwNCI+PGgzPjQwNC4mbmJzcDtNYXkgYSByZXBsYWNlbWVudCBhbGxvY2F0aW9uIGZ1bmN0aW9uIGJlIGRlY2xhcmVkIGlubGluZT88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsxNy40LjMuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pbnRyby5odG1sI2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnMiPiBbbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9uc108L2E+LCAxOC40LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlIj4gW2xpYi5uZXcuZGVsZXRlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWF0dCBBdXN0ZXJuJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IEFwciAyMDAzPC9wPgo8cD4KVGhlIGVpZ2h0IGJhc2ljIGR5bmFtaWMgbWVtb3J5IGFsbG9jYXRpb24gZnVuY3Rpb25zIChzaW5nbGUtb2JqZWN0CmFuZCBhcnJheSB2ZXJzaW9ucyBvZiA6Om9wZXJhdG9yIG5ldyBhbmQgOjpvcGVyYXRvciBkZWxldGUsIGluIHRoZQpvcmRpbmFyeSBhbmQgbm90aHJvdyBmb3JtcykgYXJlIHJlcGxhY2VhYmxlLiAgQSBDKysgcHJvZ3JhbSBtYXkKcHJvdmlkZSBhbiBhbHRlcm5hdGl2ZSBkZWZpbml0aW9uIGZvciBhbnkgb2YgdGhlbSwgd2hpY2ggd2lsbCBiZSB1c2VkCmluIHByZWZlcmVuY2UgdG8gdGhlIGltcGxlbWVudGF0aW9uJ3MgZGVmaW5pdGlvbi4gIAo8L3A+Cgo8cD4KVGhyZWUgZGlmZmVyZW50IHBhcnRzIG9mIHRoZSBzdGFuZGFyZCBtZW50aW9uIHJlcXVpcmVtZW50cyBvbgpyZXBsYWNlbWVudCBmdW5jdGlvbnM6IDE3LjQuMy40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWludHJvLmh0bWwjbGliLnJlcGxhY2VtZW50LmZ1bmN0aW9ucyI+IFtsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zXTwvYT4sIDE4LjQuMS4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5zaW5nbGUiPiBbbGliLm5ldy5kZWxldGUuc2luZ2xlXTwvYT4KYW5kIDE4LjQuMS4yIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN1cHBvcnQuaHRtbCNsaWIubmV3LmRlbGV0ZS5hcnJheSI+IFtsaWIubmV3LmRlbGV0ZS5hcnJheV08L2E+LCBhbmQgMy43LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9iYXNpYy5odG1sI2Jhc2ljLnN0Yy5keW5hbWljIj4gW2Jhc2ljLnN0Yy5keW5hbWljXTwvYT4uCjwvcD4KCjxwPk5vbmUgb2YgdGhlc2UgdGhyZWUgcGxhY2VzIHNheSB3aGV0aGVyIGEgcmVwbGFjZW1lbnQgZnVuY3Rpb24gbWF5CiAgYmUgZGVjbGFyZWQgaW5saW5lLiAgMTguNC4xLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3VwcG9ydC5odG1sI2xpYi5uZXcuZGVsZXRlLnNpbmdsZSI+IFtsaWIubmV3LmRlbGV0ZS5zaW5nbGVdPC9hPiBwYXJhZ3JhcGggMiBzcGVjaWZpZXMgYQogIHNpZ25hdHVyZSBmb3IgdGhlIHJlcGxhY2VtZW50IGZ1bmN0aW9uLCBidXQgdGhhdCdzIG5vdCBlbm91Z2g6CiAgdGhlIDx0dD5pbmxpbmU8L3R0PiBzcGVjaWZpZXIgaXMgbm90IHBhcnQgb2YgYSBmdW5jdGlvbidzIHNpZ25hdHVyZS4KICBPbmUgbWlnaHQgYWxzbyByZWFzb24gZnJvbSA3LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2RjbC5odG1sI2RjbC5mY3Quc3BlYyI+IFtkY2wuZmN0LnNwZWNdPC9hPiBwYXJhZ3JhcGggMiwgd2hpY2gKICByZXF1aXJlcyB0aGF0ICJhbiBpbmxpbmUgZnVuY3Rpb24gc2hhbGwgYmUgZGVmaW5lZCBpbiBldmVyeQogIHRyYW5zbGF0aW9uIHVuaXQgaW4gd2hpY2ggaXQgaXMgdXNlZCwiIGJ1dCB0aGlzIG1heSBub3QgYmUgcXVpdGUKICBzcGVjaWZpYyBlbm91Z2ggZWl0aGVyLiAgV2Ugc2hvdWxkIGVpdGhlciBleHBsaWNpdGx5IGFsbG93IG9yCiAgZXhwbGljaXRseSBmb3JiaWQgaW5saW5lIHJlcGxhY2VtZW50IG1lbW9yeSBhbGxvY2F0aW9uCiAgZnVuY3Rpb25zLjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIGEgbmV3IHNlbnRlbmNlIHRvIHRoZSBlbmQgb2YgMTcuNC4zLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW50cm8uaHRtbCNsaWIucmVwbGFjZW1lbnQuZnVuY3Rpb25zIj4gW2xpYi5yZXBsYWNlbWVudC5mdW5jdGlvbnNdPC9hPiBwYXJhZ3JhcGggMzoKIlRoZSBwcm9ncmFtJ3MgZGVmaW5pdGlvbnMgc2hhbGwgbm90IGJlIHNwZWNpZmllZCBhcyA8dHQ+aW5saW5lPC90dD4uCk5vIGRpYWdub3N0aWMgaXMgcmVxdWlyZWQuIgo8L3A+Cgo8cD48aT5bS29uYTogYWRkZWQgIm5vIGRpYWdub3N0aWMgaXMgcmVxdWlyZWQiXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+ClRoZSBmYWN0IHRoYXQgPHR0PmlubGluZTwvdHQ+IGlzbid0IG1lbnRpb25lZCBhcHBlYXJzIHRvIGhhdmUgYmVlbgpub3RoaW5nIG1vcmUgdGhhbiBhbiBvdmVyc2lnaHQuICBFeGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgZG8gbm90CnBlcm1pdCBpbmxpbmUgZnVuY3Rpb25zIGFzIHJlcGxhY2VtZW50IG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucy4KUHJvdmlkaW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB3b3VsZCBiZSBkaWZmaWN1bHQgaW4gc29tZSBjYXNlcywgYW5kIGlzCmJlbGlldmVkIHRvIGJlIG9mIGxpbWl0ZWQgdmFsdWUuCjwvcD4KPGhyPgo8YSBuYW1lPSI0MDUiPjxoMz40MDUuJm5ic3A7cXNvcnQgYW5kIFBPRDwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuYy5saWJyYXJ5Ij4gW2xpYi5hbGcuYy5saWJyYXJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7UmF5IExpc2NobmVyJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzA4IEFwciAyMDAzPC9wPgo8cD4KU2VjdGlvbiAyNS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWFsZ29yaXRobXMuaHRtbCNsaWIuYWxnLmMubGlicmFyeSI+IFtsaWIuYWxnLmMubGlicmFyeV08L2E+IGRlc2NyaWJlcyBic2VhcmNoIGFuZCBxc29ydCwgZnJvbSB0aGUgQwpzdGFuZGFyZCBsaWJyYXJ5LiBQYXJhZ3JhcGggNCBkb2VzIG5vdCBsaXN0IGFueSByZXN0cmljdGlvbnMgb24gcXNvcnQsCmJ1dCBpdCBzaG91bGQgbGltaXQgdGhlIGJhc2UgcGFyYW1ldGVyIHRvIHBvaW50IHRvIFBPRC4gIFByZXN1bWFibHksCnFzb3J0IHNvcnRzIHRoZSBhcnJheSBieSBjb3B5aW5nIGJ5dGVzLCB3aGljaCByZXF1aXJlcyBQT0QuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjUuNCA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5jLmxpYnJhcnkiPiBbbGliLmFsZy5jLmxpYnJhcnldPC9hPiBwYXJhZ3JhcGggNCwganVzdCBhZnRlciB0aGUgZGVjbGFyYXRpb25zIGFuZApiZWZvcmUgdGhlIG5vbm5vcm1hdGl2ZSBub3RlLCBhZGQgdGhlc2Ugd29yZHM6ICJib3RoIG9mIHdoaWNoIGhhdmUgdGhlCnNhbWUgYmVoYXZpb3IgYXMgdGhlIG9yaWdpbmFsIGRlY2xhcmF0aW9uLiAgVGhlIGJlaGF2aW9yIGlzIHVuZGVmaW5lZAp1bmxlc3MgdGhlIG9iamVjdHMgaW4gdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgPGk+YmFzZTwvaT4gYXJlIG9mIFBPRAp0eXBlLiIKPC9wPgoKPHA+PGk+W1NvbWV0aGluZyBhbG9uZyB0aGVzZSBsaW5lcyBpcyBjbGVhcmx5IG5lY2Vzc2FyeS4gIE1hdHQKICBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjQwNyI+PGgzPjQwNy4mbmJzcDtDYW4gc2luZ3VsYXIgaXRlcmF0b3JzIGJlIGRlc3Ryb3llZD88L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO05hdGhhbiBNeWVycyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDszIEp1bmUgMjAwMzwvcD4KPHA+CkNsYXVzZSAyNC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWl0ZXJhdG9ycy5odG1sI2xpYi5pdGVyYXRvci5yZXF1aXJlbWVudHMiPiBbbGliLml0ZXJhdG9yLnJlcXVpcmVtZW50c108L2E+LCBwYXJhZ3JhcGggNSwgc2F5cyB0aGF0IHRoZSBvbmx5IGV4cHJlc3Npb24KdGhhdCBpcyBkZWZpbmVkIGZvciBhIHNpbmd1bGFyIGl0ZXJhdG9yIGlzICJhbiBhc3NpZ25tZW50IG9mIGEKbm9uLXNpbmd1bGFyIHZhbHVlIHRvIGFuIGl0ZXJhdG9yIHRoYXQgaG9sZHMgYSBzaW5ndWxhciB2YWx1ZSIuICBUaGlzIAptZWFucyB0aGF0IGRlc3Ryb3lpbmcgYSBzaW5ndWxhciBpdGVyYXRvciAoZS5nLiBsZXR0aW5nIGFuIGF1dG9tYXRpYwp2YXJpYWJsZSBnbyBvdXQgb2Ygc2NvcGUpIGlzIHRlY2huaWNhbGx5IHVuZGVmaW5lZCBiZWhhdmlvci4gIFRoaXMKc2VlbXMgb3Zlcmx5IHN0cmljdCwgYW5kIHByb2JhYmx5IHVuaW50ZW50aW9uYWwuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQ2hhbmdlIHRoZSBzZW50ZW5jZSBpbiBxdWVzdGlvbiB0byAiLi4uIHRoZSBvbmx5IGV4Y2VwdGlvbnMgYXJlCmRlc3Ryb3lpbmcgYW4gaXRlcmF0b3IgdGhhdCBob2xkcyBhIHNpbmd1bGFyIHZhbHVlLCBvciB0aGUgYXNzaWdubWVudApvZiBhIG5vbi1zaW5ndWxhciB2YWx1ZSB0byBhbiBpdGVyYXRvciB0aGF0IGhvbGRzIGEgc2luZ3VsYXIgdmFsdWUuIgo8L3A+Cjxocj4KPGEgbmFtZT0iNDEwIj48aDM+NDEwLiZuYnNwO01pc3Npbmcgc2VtYW50aWNzIGZvciBzdGFjayBhbmQgcXVldWUgY29tcGFyaXNvbiBvcGVyYXRvcnM8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMy4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnF1ZXVlIj4gW2xpYi5xdWV1ZV08L2E+LCAyMy4yLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0hhbnMgQm9zJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzcgSnVuIDIwMDM8L3A+CjxwPgpTZWN0aW9ucyAyMy4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnF1ZXVlIj4gW2xpYi5xdWV1ZV08L2E+IGFuZCAyMy4yLjMuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnN0YWNrIj4gW2xpYi5zdGFja108L2E+IGxpc3QKY29tcGFyaXNvbiBvcGVyYXRvcnMgKD09LCAhPSwgJmx0OywgJmx0Oz0sICZndDssID0mZ3Q7KSBmb3IgcXVldWUgYW5kCnN0YWNrLiAgT25seSB0aGUgc2VtYW50aWNzIGZvciBxdWV1ZTo6b3BlcmF0b3I9PSAoMjMuMi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5xdWV1ZSI+IFtsaWIucXVldWVdPC9hPiBwYXIyKSBhbmQgcXVldWU6Om9wZXJhdG9yJmx0OyAoMjMuMi4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5xdWV1ZSI+IFtsaWIucXVldWVdPC9hPgpwYXIzKSBhcmUgZGVmaW5lZC4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyBuZXcgcGFyYWdyYXBocyBhZnRlciAyMy4yLjMuMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1jb250YWluZXJzLmh0bWwjbGliLnF1ZXVlIj4gW2xpYi5xdWV1ZV08L2E+CiAgcGFyYWdyYXBoIDM6PC9wPgoKPGJsb2NrcXVvdGU+Cgo8cHJlPiAgb3BlcmF0b3IhPQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAhPSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZndDsKPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmd0OyB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZsdDs9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZsdDs9IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmd0Oz0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgJmd0Oz0geS5jPC90dD48L3A+Cgo8L2Jsb2NrcXVvdGU+Cgo8cD5BZGQgdGhlIGZvbGxvd2luZyBwYXJhZ3JhcGhzIGF0IHRoZSBlbmQgb2YgMjMuMi4zLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi5zdGFjayI+IFtsaWIuc3RhY2tdPC9hPjo8L3A+Cgo8YmxvY2txdW90ZT4KCjxwcmU+ICBvcGVyYXRvcj09CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jID09IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yJmx0Owo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmbHQ7IHkuYzwvdHQ+PC9wPgoKPHByZT4gIG9wZXJhdG9yIT0KPC9wcmU+CjxwPlJldHVybnM6IDx0dD54LmMgIT0geS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImZ3Q7CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDsgeS5jPC90dD48L3A+Cgo8cHJlPiAgb3BlcmF0b3ImbHQ7PQo8L3ByZT4KPHA+UmV0dXJuczogPHR0PnguYyAmbHQ7PSB5LmM8L3R0PjwvcD4KCjxwcmU+ICBvcGVyYXRvciZndDs9CjwvcHJlPgo8cD5SZXR1cm5zOiA8dHQ+eC5jICZndDs9IHkuYzwvdHQ+PC9wPgoKPC9ibG9ja3F1b3RlPgoKCjxwPjxpPltLb25hOiBNYXR0IHByb3ZpZGVkIHdvcmRpbmcuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KVGhlcmUgaXNuJ3QgYW55IHJlYWwgZG91YnQgYWJvdXQgd2hhdCB0aGVzZSBvcGVyYXRvcnMgYXJlCnN1cHBvc2VkIHRvIGRvLCBidXQgd2Ugb3VnaHQgdG8gc3BlbGwgaXQgb3V0Lgo8aHI+CjxhIG5hbWU9IjQxMSI+PGgzPjQxMS4mbmJzcDtXcm9uZyBuYW1lcyBvZiBzZXQgbWVtYmVyIGZ1bmN0aW9uczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI1LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zZXQub3BlcmF0aW9ucyI+IFtsaWIuYWxnLnNldC5vcGVyYXRpb25zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGFuaWVsIEZyZXkmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7OSBKdWwgMjAwMzwvcD4KPHA+CjI1LjMuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5zZXQub3BlcmF0aW9ucyI+IFtsaWIuYWxnLnNldC5vcGVyYXRpb25zXTwvYT4gcGFyYWdyYXBoIDEgcmVhZHM6CiJUaGUgc2VtYW50aWNzIG9mIHRoZSBzZXQgb3BlcmF0aW9ucyBhcmUgZ2VuZXJhbGl6ZWQgdG8gbXVsdGlzZXRzIGluIGEgCnN0YW5kYXJkIHdheSBieSBkZWZpbmluZyB1bmlvbigpIHRvIGNvbnRhaW4gdGhlIG1heGltdW0gbnVtYmVyIG9mIApvY2N1cnJlbmNlcyBvZiBldmVyeSBlbGVtZW50LCBpbnRlcnNlY3Rpb24oKSB0byBjb250YWluIHRoZSBtaW5pbXVtLCBhbmQgCnNvIG9uLiIKPC9wPgoKPHA+ClRoaXMgaXMgd3JvbmcuICBUaGUgbmFtZSBvZiB0aGUgZnVuY3Rpb25zIGFyZSBzZXRfdW5pb24oKSBhbmQKc2V0X2ludGVyc2VjdGlvbigpLCBub3QgdW5pb24oKSBhbmQgaW50ZXJzZWN0aW9uKCkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgdGhhdCBzZW50ZW5jZSB0byB1c2UgdGhlIGNvcnJlY3QgbmFtZXMuPC9wPgo8aHI+CjxhIG5hbWU9IjQxMiI+PGgzPjQxMi4mbmJzcDtUeXBvIGluIDI3LjQuNC4zPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RhdGUuZmxhZ3MiPiBbbGliLmlvc3RhdGUuZmxhZ3NdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTAgSnVsIDIwMDM8L3A+CjxwPgpUaGUgRWZmZWN0cyBjbGF1c2UgaW4gMjcuNC40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlvc3RhdGUuZmxhZ3MiPiBbbGliLmlvc3RhdGUuZmxhZ3NdPC9hPiBwYXJhZ3JhcGggNSBzYXlzIHRoYXQgdGhlCmZ1bmN0aW9uIG9ubHkgdGhyb3dzIGlmIHRoZSByZXNwZWN0aXZlIGJpdHMgYXJlIGFscmVhZHkgc2V0IHByaW9yIHRvCnRoZSBmdW5jdGlvbiBjYWxsLiBUaGF0J3Mgb2J2aW91c2x5IG5vdCB0aGUgaW50ZW50LiBUaGUgdHlwbyBvdWdodCB0bwpiZSBjb3JyZWN0ZWQgYW5kIHRoZSB0ZXh0IHJld29yZGVkIGFzOiAiSWYgKDxpPnN0YXRlPC9pPiAmYW1wOwpleGNlcHRpb25zKCkpID09IDAsIHJldHVybnMuIC4uLiIKPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPgpJbiAyNy40LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuaW9zdGF0ZS5mbGFncyI+IFtsaWIuaW9zdGF0ZS5mbGFnc108L2E+IHBhcmFncmFwaCA1LCByZXBsYWNlICJJZiAocmRzdGF0ZSgpICZhbXA7CmV4Y2VwdGlvbnMoKSkgPT0gMCIgd2l0aCAiSWYgKChzdGF0ZSB8IChyZGJ1ZigpID8gZ29vZGJpdCA6IGJhZGJpdCkpCiZhbXA7IGV4Y2VwdGlvbnMoKSkgPT0gMCIuCjwvcD4KCjxwPjxpPltLb25hOiB0aGUgb3JpZ2luYWwgcHJvcG9zZWQgcmVzb2x1dGlvbiB3YXNuJ3QgcXVpdGUgcmlnaHQuICBXZQogIHJlYWxseSBkbyBtZWFuIHJkc3RhdGUoKTsgdGhlIGFtYmlndWl0eSBpcyB0aGF0IHRoZSB3b3JkaW5nIGluIHRoZQogIHN0YW5kYXJkIGRvZXNuJ3QgbWFrZSBpdCBjbGVhciB3aGV0aGVyIHdlIG1lYW4gcmRzdGF0ZSgpIGJlZm9yZQogIHNldHRpbmcgdGhlIG5ldyBzdGF0ZSwgb3IgcmRzYXRlKCkgYWZ0ZXIgc2V0dGluZyBpdC4gIFdlIGludGVuZCB0aGUKICBsYXR0ZXIsIG9mIGNvdXJzZS4gUG9zdC1Lb25hOiBNYXJ0aW4gcHJvdmlkZWQgd29yZGluZy5dPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDE0Ij48aDM+NDE0LiZuYnNwO1doaWNoIGl0ZXJhdG9ycyBhcmUgaW52YWxpZGF0ZWQgYnkgdi5lcmFzZSgpPzwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzIzLjIuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWNvbnRhaW5lcnMuaHRtbCNsaWIudmVjdG9yLm1vZGlmaWVycyI+IFtsaWIudmVjdG9yLm1vZGlmaWVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjV1AiPldQPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hdHQgQXVzdGVybiZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOSBBdWcgMjAwMzwvcD4KPHA+CkNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgY29kZSBmcmFnbWVudDoKPC9wPgo8YmxvY2txdW90ZT4KPHByZT5pbnQgQVs4XSA9IHsgMSwzLDUsNyw5LDgsNCwyIH07CnN0ZDo6dmVjdG9yJmx0O2ludCZndDsgdihBLCBBKzgpOwoKc3RkOjp2ZWN0b3ImbHQ7aW50Jmd0Ozo6aXRlcmF0b3IgaTEgPSB2LmJlZ2luKCkgKyAzOwpzdGQ6OnZlY3RvciZsdDtpbnQmZ3Q7OjppdGVyYXRvciBpMiA9IHYuYmVnaW4oKSArIDQ7CnYuZXJhc2UoaTEpOwo8L3ByZT4KPC9ibG9ja3F1b3RlPgoKPHA+CldoaWNoIGl0ZXJhdG9ycyBhcmUgaW52YWxpZGF0ZWQgYnkgPHR0PnYuZXJhc2UoaTEpPC90dD46IGkxLCBpMiwKYm90aCwgb3IgbmVpdGhlcj8KPC9wPgoKPHA+Ck9uIGFsbCBleGlzdGluZyBpbXBsZW1lbnRhdGlvbnMgdGhhdCBJIGtub3cgb2YsIHRoZSBzdGF0dXMgb2YgaTEgYW5kCmkyIGlzIHRoZSBzYW1lOiBib3RoIG9mIHRoZW0gd2lsbCBiZSBpdGVyYXRvcnMgdGhhdCBwb2ludCB0byBzb21lCmVsZW1lbnRzIG9mIHRoZSB2ZWN0b3IgKGFsYmVpdCBub3QgdGhlIHNhbWUgZWxlbWVudHMgdGhleSBkaWQKYmVmb3JlKS4gIFlvdSB3b24ndCBnZXQgYSBjcmFzaCBpZiB5b3UgdXNlIHRoZW0uICBEZXBlbmRpbmcgb24gCmV4YWN0bHkgd2hhdCB5b3UgbWVhbiBieSAiaW52YWxpZGF0ZSIsIHlvdSBtaWdodCBzYXkgdGhhdCBuZWl0aGVyIG9uZQpoYXMgYmVlbiBpbnZhbGlkYXRlZCBiZWNhdXNlIHRoZXkgc3RpbGwgcG9pbnQgdG8gPGk+c29tZXRoaW5nPC9pPiwKb3IgeW91IG1pZ2h0IHNheSB0aGF0IGJvdGggaGF2ZSBiZWVuIGludmFsaWRhdGVkIGJlY2F1c2UgaW4gYm90aApjYXNlcyB0aGUgZWxlbWVudHMgdGhleSBwb2ludCB0byBoYXZlIGJlZW4gY2hhbmdlZCBvdXQgZnJvbSB1bmRlciB0aGUKaXRlcmF0b3IuCjwvcD4KCjxwPgpUaGUgc3RhbmRhcmQgZG9lc24ndCBzYXkgZWl0aGVyIG9mIHRob3NlIHRoaW5ncy4gIEl0IHNheXMgdGhhdCBlcmFzZQppbnZhbGlkYXRlcyBhbGwgaXRlcmF0b3JzIGFuZCByZWZlcmVuY2VzICJhZnRlciB0aGUgcG9pbnQgb2YgdGhlCmVyYXNlIi4gIFRoaXMgZG9lc24ndCBpbmNsdWRlIGkxLCBzaW5jZSBpdCdzIGF0IHRoZSBwb2ludCBvZiB0aGUKZXJhc2UgaW5zdGVhZCBvZiBhZnRlciBpdC4gIEkgY2FuJ3QgdGhpbmsgb2YgYW55IHNlbnNpYmxlIGRlZmluaXRpb24Kb2YgaW52YWxpZGF0aW9uIGJ5IHdoaWNoIG9uZSBjYW4gc2F5IHRoYXQgaTIgaXMgaW52YWxpZGF0ZWQgYnV0IGkxCmlzbid0Lgo8L3A+Cgo8cD4KKFRoaXMgaXNzdWUgaXMgaW1wb3J0YW50IGlmIHlvdSB0cnkgdG8gcmVhc29uIGFib3V0IGl0ZXJhdG9yIHZhbGlkaXR5CmJhc2VkIG9ubHkgb24gdGhlIGd1YXJhbnRlZXMgaW4gdGhlIHN0YW5kYXJkLCByYXRoZXIgdGhhbiByZWFzb25pbmcKZnJvbSB0eXBpY2FsIGltcGxlbWVudGF0aW9uIHRlY2huaXF1ZXMuICBTdHJpY3QgZGVidWdnaW5nIG1vZGVzLAp3aGljaCBzb21lIHByb2dyYW1tZXJzIGZpbmQgdXNlZnVsLCBkbyBub3QgdXNlIHR5cGljYWwgaW1wbGVtZW50YXRpb24KdGVjaG5pcXVlcy4pCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KSW4gMjMuMi40LjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItY29udGFpbmVycy5odG1sI2xpYi52ZWN0b3IubW9kaWZpZXJzIj4gW2xpYi52ZWN0b3IubW9kaWZpZXJzXTwvYT4gcGFyYWdyYXBoIDMsIGNoYW5nZSAiSW52YWxpZGF0ZXMgYWxsIHRoZQppdGVyYXRvcnMgYW5kIHJlZmVyZW5jZXMgYWZ0ZXIgdGhlIHBvaW50IG9mIHRoZSBlcmFzZSIgdG8KIkludmFsaWRhdGVzIGl0ZXJhdG9ycyBhbmQgcmVmZXJlbmNlcyBhdCBvciBhZnRlciB0aGUgcG9pbnQgb2YgdGhlCmVyYXNlIi4gCjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPkkgYmVsaWV2ZSB0aGlzIHdhcyBlc3NlbnRpYWxseSBhIHR5cG9ncmFwaGljYWwgZXJyb3IsIGFuZCB0aGF0IGl0CiAgd2FzIHRha2VuIGZvciBncmFudGVkIHRoYXQgZXJhc2luZyBhbiBlbGVtZW50IGludmFsaWRhdGVzIGl0ZXJhdG9ycwogIHRoYXQgcG9pbnQgdG8gaXQuICBUaGUgZWZmZWN0cyBjbGF1c2UgaW4gcXVlc3Rpb24gdHJlYXRzIGl0ZXJhdG9ycwogIGFuZCByZWZlcmVuY2VzIGluIHBhcmFsbGVsLCBhbmQgaXQgd291bGQgc2VlbSBjb3VudGVyaW50dWl0aXZlIHRvCiAgc2F5IHRoYXQgYSByZWZlcmVuY2UgdG8gYW4gZXJhc2VkIHZhbHVlIHJlbWFpbnMgdmFsaWQuPC9wPgo8aHI+CjxhIG5hbWU9IjQxNSI+PGgzPjQxNS4mbmJzcDtiZWhhdmlvciBvZiBzdGQ6OndzPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4xLjQgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmlzdHJlYW0ubWFuaXAiPiBbbGliLmlzdHJlYW0ubWFuaXBdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CjxwPgpBY2NvcmRpbmcgdG8gMjcuNi4xLjQsIHRoZSB3cygpIG1hbmlwdWxhdG9yIGlzIG5vdCByZXF1aXJlZCB0byBjb25zdHJ1Y3QKdGhlIHNlbnRyeSBvYmplY3QuIFRoZSBtYW5pcHVsYXRvciBpcyBhbHNvIG5vdCBhIG1lbWJlciBmdW5jdGlvbiBzbyB0aGUKdGV4dCBpbiAyNy42LjEsIHAxIHRocm91Z2ggNCB0aGF0IGRlc2NyaWJlcyB0aGUgZXhjZXB0aW9uIHBvbGljeSBmb3IKaXN0cmVhbSBtZW1iZXIgZnVuY3Rpb25zIGRvZXMgbm90IGFwcGx5LiBUaGF0IHNlZW1zIGluY29uc2lzdGVudCB3aXRoCnRoZSByZXN0IG9mIGV4dHJhY3RvcnMgYW5kIGFsbCB0aGUgb3RoZXIgaW5wdXQgZnVuY3Rpb25zIChpLmUuLCB3cyB3aWxsCm5vdCBjYXVzZSBhIHRpZWQgc3RyZWFtIHRvIGJlIGZsdXNoZWQgYmVmb3JlIGV4dHJhY3Rpb24sIGl0IGRvZXNuJ3QgY2hlY2sKdGhlIHN0cmVhbSdzIGV4Y2VwdGlvbnMgb3IgY2F0Y2ggZXhjZXB0aW9ucyB0aHJvd24gZHVyaW5nIGlucHV0LCBhbmQgaXQKZG9lc24ndCBhZmZlY3QgdGhlIHN0cmVhbSdzIGdjb3VudCkuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4KQWRkIHRvIDI3LjYuMS40IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5pc3RyZWFtLm1hbmlwIj4gW2xpYi5pc3RyZWFtLm1hbmlwXTwvYT4sIGltbWVkaWF0ZWx5IGJlZm9yZSB0aGUgZmlyc3Qgc2VudGVuY2UKb2YgcGFyYWdyYXBoIDEsIHRoZSBmb2xsb3dpbmcgdGV4dDoKPC9wPgoKICAgIDxibG9ja3F1b3RlPgogICAgQmVoYXZlcyBhcyBhbiB1bmZvcm1hdHRlZCBpbnB1dCBmdW5jdGlvbiAoYXMgZGVzY3JpYmVkIGluCiAgICAyNy42LjEuMywgcGFyYWdyYXBoIDEpLCBleGNlcHQgdGhhdCBpdCBkb2VzIG5vdCBjb3VudCB0aGUgbnVtYmVyCiAgICBvZiBjaGFyYWN0ZXJzIGV4dHJhY3RlZCBhbmQgZG9lcyBub3QgYWZmZWN0IHRoZSB2YWx1ZSByZXR1cm5lZCBieQogICAgc3Vic2VxdWVudCBjYWxscyB0byBpcy5nY291bnQoKS4gQWZ0ZXIgY29uc3RydWN0aW5nIGEgc2VudHJ5CiAgICBvYmplY3QuLi4gIAogICAgPC9ibG9ja3F1b3RlPgoKPHA+PGk+W1Bvc3QtS29uYTogTWFydGluIHByb3ZpZGVkIHdvcmRpbmddPC9pPjwvcD4KCjxocj4KPGEgbmFtZT0iNDIwIj48aDM+NDIwLiZuYnNwO2lzIHN0ZDo6RklMRSBhIGNvbXBsZXRlIHR5cGU/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuOC4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mc3RyZWFtcyI+IFtsaWIuZnN0cmVhbXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI1dQIj5XUDwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtNYXJ0aW4gU2Vib3ImbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggU2VwIDIwMDM8L3A+CjxwPgo3LjE5LjEsIHAyLCBvZiBDOTkgcmVxdWlyZXMgdGhhdCB0aGUgRklMRSB0eXBlIG9ubHkgYmUgZGVjbGFyZWQgaW4KJmx0O3N0ZGlvLmgmZ3Q7LiAgTm9uZSBvZiB0aGUgKGltcGxlbWVudGF0aW9uLWRlZmluZWQpIG1lbWJlcnMgb2YgdGhlCnN0cnVjdCBpcyBtZW50aW9uZWQgYW55d2hlcmUgZm9yIG9idmlvdXMgcmVhc29ucy4KPC9wPgoKPHA+CkMrKyBzYXlzIGluIDI3LjguMSwgcDIgdGhhdCBGSUxFIGlzIGEgdHlwZSB0aGF0J3MgZGVmaW5lZCBpbiAmbHQ7Y3N0ZGlvJmd0Oy4gSXMKaXQgcmVhbGx5IHRoZSBpbnRlbnQgdGhhdCBGSUxFIGJlIGEgY29tcGxldGUgdHlwZSBvciBpcyBhbiBpbXBsZW1lbnRhdGlvbgphbGxvd2VkIHRvIGp1c3QgZGVjbGFyZSBpdCB3aXRob3V0IHByb3ZpZGluZyBhIGZ1bGwgZGVmaW5pdGlvbj8KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkluIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAyNy44LjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZzdHJlYW1zIj4gW2xpYi5mc3RyZWFtc108L2E+IHBhcmFncmFwaCAyLCBjaGFuZ2UKICAiZGVmaW5lZCIgdG8gImRlY2xhcmVkIi48L3A+CjxwPjxiPlJhdGlvbmFsZTo8L2I+PC9wPgo8cD5XZSBkb24ndCB3YW50IHRvIGltcG9zZSBhbnkgcmVzdHJpY3Rpb25zIGJleW9uZCB3aGF0IHRoZSBDIHN0YW5kYXJkCiAgYWxyZWFkeSBzYXlzLiBXZSBkb24ndCB3YW50IHRvIG1ha2UgYW55dGhpbmcgaW1wbGVtZW50YXRpb24gZGVmaW5lZCwKICBiZWNhdXNlIHRoYXQgaW1wb3NlcyBuZXcgcmVxdWlyZW1lbnRzIGluIGltcGxlbWVudGF0aW9ucy48L3A+Cjxocj4KPGEgbmFtZT0iNDI1Ij48aDM+NDI1LiZuYnNwO3JldHVybiB2YWx1ZSBvZiBzdGQ6OmdldF90ZW1wb3JhcnlfYnVmZmVyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjAuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi50ZW1wb3JhcnkuYnVmZmVyIj4gW2xpYi50ZW1wb3JhcnkuYnVmZmVyXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE4IFNlcCAyMDAzPC9wPgo8cD4KVGhlIHN0YW5kYXJkIGlzIG5vdCBjbGVhciBhYm91dCB0aGUgcmVxdWlyZW1lbnRzIG9uIHRoZSB2YWx1ZSByZXR1cm5lZCBmcm9tCmEgY2FsbCB0byBnZXRfdGVtcG9yYXJ5X2J1ZmZlcigwKS4gSW4gcGFydGljdWxhciwgaXQgZmFpbHMgdG8gc3BlY2lmeSB3aGV0aGVyCnRoZSBjYWxsIHNob3VsZCByZXR1cm4gYSBkaXN0aW5jdCBwb2ludGVyIGVhY2ggdGltZSBpdCBpcyBjYWxsZWQgKGxpa2UKb3BlcmF0b3IgbmV3KSwgb3Igd2hldGhlciB0aGUgdmFsdWUgaXMgdW5zcGVjaWZpZWQgKGFzIGlmIHJldHVybmVkIGJ5Cm1hbGxvYykuIFRoZSBzdGFuZGFyZCBhbHNvIGZhaWxzIHRvIG1lbnRpb24gd2hhdCB0aGUgcmVxdWlyZWQgYmVoYXZpb3IKaXMgd2hlbiB0aGUgYXJndW1lbnQgaXMgbGVzcyB0aGFuIDAuCjwvcD4KPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD5DaGFuZ2UgMjAuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXV0aWxpdGllcy5odG1sI2xpYi50ZW1wb3JhcnkuYnVmZmVyIj4gW2xpYi50ZW1wb3JhcnkuYnVmZmVyXTwvYT4gcGFyYWdyYXBoIDIgZnJvbSAiLi4ub3IgYSBwYWlyIG9mIDAKdmFsdWVzIGlmIG5vIHN0b3JhZ2UgY2FuIGJlIG9idGFpbmVkIiB0byAiLi4ub3IgYSBwYWlyIG9mIDAgdmFsdWVzIGlmCm5vIHN0b3JhZ2UgY2FuIGJlIG9idGFpbmVkIG9yIGlmIDxpPm48L2k+ICZsdDs9IDAuIjwvcD4KPHA+PGk+W0tvbmE6IE1hdHQgcHJvdmlkZWQgd29yZGluZ108L2k+PC9wPgo8aHI+CjxhIG5hbWU9IjQyNiI+PGgzPjQyNi4mbmJzcDtzZWFyY2hfbigpLCBmaWxsX24oKSwgYW5kIGdlbmVyYXRlX24oKSB3aXRoIG5lZ2F0aXZlIG48L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyNS4xLjkgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuc2VhcmNoIj4gW2xpYi5hbGcuc2VhcmNoXTwvYT4sIDI1LjIuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1hbGdvcml0aG1zLmh0bWwjbGliLmFsZy5maWxsIj4gW2xpYi5hbGcuZmlsbF08L2E+LCAyNS4yLjYgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItYWxnb3JpdGhtcy5odG1sI2xpYi5hbGcuZ2VuZXJhdGUiPiBbbGliLmFsZy5nZW5lcmF0ZV08L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO01hcnRpbiBTZWJvciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxOCBTZXAgMjAwMzwvcD4KPHA+ClRoZSBjb21wbGV4aXR5IHJlcXVpcmVtZW50cyBmb3IgdGhlc2UgZnVuY3Rpb24gdGVtcGxhdGVzIGFyZSBpbmNvcnJlY3QKKG9yIGRvbid0IGV2ZW4gbWFrZSBzZW5zZSkgZm9yIG5lZ2F0aXZlIG46PC9wPgoKPHA+MjUuMS45LCBwNyAoc2VhcmNoX24pOgo8YnI+CkNvbXBsZXhpdHk6IEF0IG1vc3QgKGxhc3QxIC0gZmlyc3QxKSAqIGNvdW50IGFwcGxpY2F0aW9ucwpvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUuPC9wPgoKPHA+MjUuMi41LCBwMyAoZmlsbF9uKToKPGJyPgpDb21wbGV4aXR5OiBFeGFjdGx5IGxhc3QgLSBmaXJzdCAob3IgbikgYXNzaWdubWVudHMuPC9wPgo8YnI+Cgo8cD4yNS4yLjYsIHAzIChnZW5lcmF0ZV9uKToKPGJyPgpDb21wbGV4aXR5OiBFeGFjdGx5IGxhc3QgLSBmaXJzdCAob3IgbikgYXNzaWdubWVudHMuPC9wPgoKPHA+CkluIGFkZGl0aW9uLCB0aGUgUmVxdWlyZW1lbnRzIG9yIHRoZSBFZmZlY3RzIGNsYXVzZXMgZm9yIHRoZSBsYXR0ZXIgdHdvCnRlbXBsYXRlcyBkb24ndCBzYXkgYW55dGhpbmcgYWJvdXQgdGhlIGJlaGF2aW9yIHdoZW4gbiBpcyBuZWdhdGl2ZS4KPC9wPgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAyNS4xLjksIHA3IHRvPC9wPgoKPGJsb2NrcXVvdGU+CkNvbXBsZXhpdHk6IEF0IG1vc3QgKGxhc3QxIC0gZmlyc3QxKSAqIGNvdW50IGFwcGxpY2F0aW9ucwpvZiB0aGUgY29ycmVzcG9uZGluZyBwcmVkaWNhdGUgaWYgY291bnQgaXMgcG9zaXRpdmUsCm9yIDAgb3RoZXJ3aXNlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMi41LCBwMiB0bzwvcD4KPGJsb2NrcXVvdGU+CkVmZmVjdHM6IEFzc2lnbnMgdmFsdWUgdGhyb3VnaCBhbGwgdGhlIGl0ZXJhdG9ycyBpbiB0aGUgcmFuZ2UgW2ZpcnN0LApsYXN0KSwgb3IgW2ZpcnN0LCBmaXJzdCArIG4pIGlmIG4gaXMgcG9zaXRpdmUsIG5vbmUgb3RoZXJ3aXNlLgo8L2Jsb2NrcXVvdGU+Cgo8cD5DaGFuZ2UgMjUuMi41LCBwMyB0bzo8L3A+CjxibG9ja3F1b3RlPgpDb21wbGV4aXR5OiBFeGFjdGx5IGxhc3QgLSBmaXJzdCAob3IgbiBpZiBuIGlzIHBvc2l0aXZlLApvciAwIG90aGVyd2lzZSkgYXNzaWdubWVudHMuCjwvYmxvY2txdW90ZT4KCjxwPgpDaGFuZ2UgMjUuMi42LCBwMSAKdG8gKG5vdGljZSB0aGUgY29ycmVjdGlvbiBmb3IgdGhlIG1pc3NwZWxsZWQgInRocm91Z2giKToKPC9wPgo8YmxvY2txdW90ZT4KRWZmZWN0czogSW52b2tlcyB0aGUgZnVuY3Rpb24gb2JqZWN0IGdlbmFuZCBhc3NpZ25zIHRoZSByZXR1cm4KdmFsdWUgb2YgZ2VuIHRocm91Z2ggYWxsIHRoZSBpdGVyYXRvcnMgaW4gdGhlIHJhbmdlIFtmaXJzdCwgbGFzdCksCm9yIFtmaXJzdCwgZmlyc3QgKyBuKSBpZiBuIGlzIHBvc2l0aXZlLCBvciBbZmlyc3QsIGZpcnN0KQpvdGhlcndpc2UuCjwvYmxvY2txdW90ZT4KCjxwPkNoYW5nZSAyNS4yLjYsIHAzIHRvOjwvcD4KPGJsb2NrcXVvdGU+CkNvbXBsZXhpdHk6IEV4YWN0bHkgbGFzdCAtIGZpcnN0IChvciBuIGlmIG4gaXMgcG9zaXRpdmUsCm9yIDAgb3RoZXJ3aXNlKSBhc3NpZ25tZW50cy4KPC9ibG9ja3F1b3RlPgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+SW5mb3JtYWxseSwgd2Ugd2FudCB0byBzYXkgdGhhdCB3aGVuZXZlciB3ZSBzZWUgYSBuZWdhdGl2ZSBudW1iZXIKICB3ZSB0cmVhdCBpdCB0aGUgc2FtZSBhcyBpZiBpdCB3ZXJlIHplcm8uICBXZSBiZWxpZXZlIHRoZSBhYm92ZQogIGNoYW5nZXMgZG8gdGhhdCAoYWx0aG91Z2ggdGhleSBtYXkgbm90IGJlIHRoZSBtaW5pbWFsIHdheSBvZiBzYXlpbmcKICBzbykuICBUaGUgTFdHIGNvbnNpZGVyZWQgYW5kIHJlamVjdGVkIHRoZSBhbHRlcm5hdGl2ZSBvZiBzYXlpbmcgdGhhdAogIG5lZ2F0aXZlIG51bWJlcnMgYXJlIHVuZGVmaW5lZCBiZWhhdmlvci48L3A+Cjxocj4KPGEgbmFtZT0iNDI4Ij48aDM+NDI4LiZuYnNwO3N0cmluZzo6ZXJhc2UoaXRlcmF0b3IpIHZhbGlkaXR5PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjEuMy41LjUgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItc3RyaW5ncy5odG1sI2xpYi5zdHJpbmc6OmVyYXNlIj4gW2xpYi5zdHJpbmc6OmVyYXNlXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE4IFNlcCAyMDAzPC9wPgo8cD4KMjMuMS4xLCBwMyBhbG9uZyB3aXRoIFRhYmxlIDY3IHNwZWNpZnkgYXMgYSBwcmVyZXF1aXNpdGUgZm9yIGEuZXJhc2UocSkKdGhhdCBxIG11c3QgYmUgYSB2YWxpZCBkZXJlZmVyZW5jZWFibGUgaXRlcmF0b3IgaW50byB0aGUgc2VxdWVuY2UgYS4KPC9wPgoKPHA+Ckhvd2V2ZXIsIDIxLjMuNS41LCBwNSBkZXNjcmliaW5nIHN0cmluZzo6ZXJhc2UocCkgb25seSByZXF1aXJlcyB0aGF0CnAgYmUgYSB2YWxpZCBpdGVyYXRvci4KPC9wPgoKPHA+ClRoaXMgbWF5IGJlIGludGVyZXByZXRlZCBhcyBhIHJlbGF4YXRpb24gb2YgdGhlIGdlbmVyYWwgcmVxdWlyZW1lbnQsCndoaWNoIGlzIG1vc3QgbGlrZWx5IG5vdCB0aGUgaW50ZW50Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+UmVtb3ZlIDIxLjMuNS41IDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLXN0cmluZ3MuaHRtbCNsaWIuc3RyaW5nOjplcmFzZSI+IFtsaWIuc3RyaW5nOjplcmFzZV08L2E+IHBhcmFncmFwaCA1LjwvcD4KPHA+PGI+UmF0aW9uYWxlOjwvYj48L3A+CjxwPlRoZSBMV0cgY29uc2lkZXJlZCB0d28gb3B0aW9uczogY2hhbmdpbmcgdGhlIHN0cmluZyByZXF1aXJlbWVudHMgdG8KICBtYXRjaCB0aGUgZ2VuZXJhbCBjb250YWluZXIgcmVxdWlyZW1lbnRzLCBvciBqdXN0IHJlbW92aW5nIHRoZQogIGVycm9uZW91cyBzdHJpbmcgcmVxdWlyZW1lbnRzIGFsdG9nZXRoZXIuICBUaGUgTFdHIGNob3NlIHRoZSBsYXR0ZXIKICBvcHRpb24sIG9uIHRoZSBncm91bmRzIHRoYXQgZHVwbGljYXRpbmcgdGV4dCBhbHdheXMgcmlza3MgdGhlCiAgcG9zc2liaWxpdHkgdGhhdCBpdCBtaWdodCBiZSBkdXBsaWNhdGVkIGluY29ycmVjdGx5LjwvcD4KPGhyPgo8YSBuYW1lPSI0MzIiPjxoMz40MzIuJm5ic3A7c3RyaW5nYnVmOjpvdmVyZmxvdygpIG1ha2VzIG9ubHkgb25lIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZTwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjcuMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5zdHJpbmdidWYudmlydHVhbHMiPiBbbGliLnN0cmluZ2J1Zi52aXJ0dWFsc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO0NocmlzdGlhbiBXIEJyb2NrJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzI0IFNlcCAyMDAzPC9wPgo8cD4yNy43LjEuMyBwYXIgOCBzYXlzOjwvcD4KPGJsb2NrcXVvdGU+Ck5vdGVzOiBUaGUgZnVuY3Rpb24gY2FuIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUgb25seSBpZgogICAgKCBtb2RlICZhbXA7IGlvc19iYXNlOjpvdXQpICE9IDAuIFRvIG1ha2UgYSB3cml0ZSBwb3NpdGlvbgogICAgYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24gcmVhbGxvY2F0ZXMgKG9yIGluaXRpYWxseSBhbGxvY2F0ZXMpIGFuCiAgICBhcnJheSBvYmplY3Qgd2l0aCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGhvbGQgdGhlCiAgICBjdXJyZW50IGFycmF5IG9iamVjdCAoaWYgYW55KSwgcGx1cyBvbmUgYWRkaXRpb25hbCB3cml0ZSBwb3NpdGlvbi4KICAgIElmICggbW9kZSAmYW1wOyBpb3NfYmFzZTo6aW4pICE9IDAsIHRoZSBmdW5jdGlvbiBhbHRlcnMgdGhlIHJlYWQgZW5kCiAgICBwb2ludGVyIGVncHRyKCkgdG8gcG9pbnQganVzdCBwYXN0IHRoZSBuZXcgd3JpdGUgcG9zaXRpb24gKGFzCiAgICBkb2VzIHRoZSB3cml0ZSBlbmQgcG9pbnRlciBlcHB0cigpKS4KPC9ibG9ja3F1b3RlPgoKPHA+ClRoZSBzZW50ZW5jZXMgInBsdXMgb25lIGFkZGl0aW9uYWwgd3JpdGUgcG9zaXRpb24uIiBhbmQgZXNwZWNpYWxseQogICAgIihhcyBkb2VzIHRoZSB3cml0ZSBlbmQgcG9pbnRlciBlcHB0cigpKSIgQ09VTEQgYnkgaW50ZXJwcmV0ZWQKICAgIChhbmQgaXMgaW50ZXJwcmV0ZWQgYnkgYXQgbGVhc3QgbXkgbGlicmFyeSB2ZW5kb3IpIGFzOgo8L3A+Cgo8YmxvY2txdW90ZT4KICAgIHBvc3QtY29uZGl0aW9uOiBlcHB0cigpID09IHBwdHIoKSsxCjwvYmxvY2txdW90ZT4KCjxwPgpUaGlzIFdPVUxEIGZvcmNlIHNwdXRjKCkgdG8gY2FsbCB0aGUgdmlydHVhbCBvdmVyZmxvdygpIGVhY2ggdGltZS4KPC9wPgoKPHA+VGhlIHByb3Bvc2VkIGNoYW5nZSBhbHNvIGFmZmVjdHMgRGVmZWN0IFJlcG9ydCAxNjkuPC9wPgoKPHA+PGI+UHJvcG9zZWQgcmVzb2x1dGlvbjo8L2I+PC9wPgo8cD4yNy43LjEuMS8yIENoYW5nZTo8L3A+Cgo8YmxvY2txdW90ZT4KMi0gTm90ZXM6IFRoZSBmdW5jdGlvbiBhbGxvY2F0ZXMgbm8gYXJyYXkgb2JqZWN0Lgo8L2Jsb2NrcXVvdGU+Cgo8cD4KdG86CjwvcD4KCjxibG9ja3F1b3RlPgoyLSBQb3N0Y29uZGl0aW9uOiBzdHIoKSA9PSAiIi4KPC9ibG9ja3F1b3RlPgoKPHA+CjI3LjcuMS4xLzMgQ2hhbmdlOgo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0zLSBFZmZlY3RzOiBDb25zdHJ1Y3RzIGFuIG9iamVjdCBvZiBjbGFzcyBiYXNpY19zdHJpbmdidWYsCmluaXRpYWxpemluZyB0aGUgYmFzZSBjbGFzcyB3aXRoIGJhc2ljX3N0cmVhbWJ1ZigpCihsaWIuc3RyZWFtYnVmLmNvbnMpLCBhbmQgaW5pdGlhbGl6aW5nIG1vZGUgd2l0aCB3aGljaCAuIFRoZW4gY29waWVzCnRoZSBjb250ZW50IG9mIHN0ciBpbnRvIHRoZSBiYXNpY19zdHJpbmdidWYgdW5kZXJseWluZyBjaGFyYWN0ZXIKc2VxdWVuY2UgYW5kIGluaXRpYWxpemVzIHRoZSBpbnB1dCBhbmQgb3V0cHV0IHNlcXVlbmNlcyBhY2NvcmRpbmcgdG8Kd2hpY2guIElmIHdoaWNoICZhbXA7IGlvc19iYXNlOjpvdXQgaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIG91dHB1dApzZXF1ZW5jZSB3aXRoIHRoZSB1bmRlcmx5aW5nIHNlcXVlbmNlLiBJZiB3aGljaCAmYW1wOyBpb3NfYmFzZTo6aW4gaXMKdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIGlucHV0IHNlcXVlbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc2VxdWVuY2UuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMy0gRWZmZWN0czogQ29uc3RydWN0cyBhbiBvYmplY3Qgb2YgY2xhc3MgYmFzaWNfc3RyaW5nYnVmLAppbml0aWFsaXppbmcgdGhlIGJhc2UgY2xhc3Mgd2l0aCBiYXNpY19zdHJlYW1idWYoKQoobGliLnN0cmVhbWJ1Zi5jb25zKSwgYW5kIGluaXRpYWxpemluZyBtb2RlIHdpdGggd2hpY2guIFRoZW4gY29waWVzCnRoZSBjb250ZW50IG9mIHN0ciBpbnRvIHRoZSBiYXNpY19zdHJpbmdidWYgdW5kZXJseWluZyBjaGFyYWN0ZXIKc2VxdWVuY2UuIElmIHdoaWNoICZhbXA7IGlvc19iYXNlOjpvdXQgaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIG91dHB1dApzZXF1ZW5jZSBzdWNoIHRoYXQgcGJhc2UoKSBwb2ludHMgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLAplcHB0cigpIHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCB1bmRlcmx5aW5nIGNoYXJhY3RlciwgYW5kIGlmICh3aGljaCAmYW1wOwppb3NfYmFzZTo6YXRlKSBpcyB0cnVlLCBwcHRyKCkgaXMgc2V0IGVxdWFsIHRvCmVwcHRyKCkgZWxzZSBwcHRyKCkgaXMgc2V0IGVxdWFsIHRvIHBiYXNlKCkuIElmIHdoaWNoICZhbXA7IGlvc19iYXNlOjppbgppcyB0cnVlLCBpbml0aWFsaXplcyB0aGUgaW5wdXQgc2VxdWVuY2Ugc3VjaCB0aGF0IGViYWNrKCkgYW5kIGdwdHIoKQpwb2ludCB0byB0aGUgZmlyc3QgdW5kZXJseWluZyBjaGFyYWN0ZXIgYW5kIGVncHRyKCkgcG9pbnRzIG9uZSBwYXN0CnRoZSBsYXN0IHVuZGVybHlpbmcgY2hhcmFjdGVyLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjI3LjcuMS4yLzEgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTEtIFJldHVybnM6IEEgYmFzaWNfc3RyaW5nIG9iamVjdCB3aG9zZSBjb250ZW50IGlzIGVxdWFsIHRvIHRoZQpiYXNpY19zdHJpbmdidWYgdW5kZXJseWluZyBjaGFyYWN0ZXIgc2VxdWVuY2UuIElmIHRoZSBidWZmZXIgaXMgb25seQpjcmVhdGVkIGluIGlucHV0IG1vZGUsIHRoZSB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSBpcyBlcXVhbCB0bwp0aGUgaW5wdXQgc2VxdWVuY2U7IG90aGVyd2lzZSwgaXQgaXMgZXF1YWwgdG8gdGhlIG91dHB1dCBzZXF1ZW5jZS4gSW4KY2FzZSBvZiBhbiBlbXB0eSB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZSwgdGhlIGZ1bmN0aW9uIHJldHVybnMKYmFzaWNfc3RyaW5nJmx0O2NoYXJULHRyYWl0cyxBbGxvY2F0b3ImZ3Q7KCkuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMS0gUmV0dXJuczogQSBiYXNpY19zdHJpbmcgb2JqZWN0IHdob3NlIGNvbnRlbnQgaXMgZXF1YWwgdG8gdGhlCmJhc2ljX3N0cmluZ2J1ZiB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZS4gSWYgdGhlIGJhc2ljX3N0cmluZ2J1Zgp3YXMgY3JlYXRlZCBvbmx5IGluIGlucHV0IG1vZGUsIHRoZSByZXN1bHRhbnQgYmFzaWNfc3RyaW5nIGNvbnRhaW5zCnRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaW4gdGhlIHJhbmdlIFtlYmFjaygpLCBlZ3B0cigpKS4gIElmIHRoZQpiYXNpY19zdHJpbmdidWYgd2FzIGNyZWF0ZWQgd2l0aCAod2hpY2ggJmFtcDsgaW9zX2Jhc2U6Om91dCkgYmVpbmcgdHJ1ZQp0aGVuIHRoZSByZXN1bHRhbnQgYmFzaWNfc3RyaW5nIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaW4gdGhlCnJhbmdlIFtwYmFzZSgpLCBoaWdoX21hcmspIHdoZXJlIGhpZ2hfbWFyayByZXByZXNlbnRzIHRoZSBwb3NpdGlvbiBvbmUKcGFzdCB0aGUgaGlnaGVzdCBpbml0aWFsaXplZCBjaGFyYWN0ZXIgaW4gdGhlIGJ1ZmZlci4gIENoYXJhY3RlcnMgY2FuCmJlIGluaXRpYWxpemVkIGVpdGhlciB0aHJvdWdoIHdyaXRpbmcgdG8gdGhlIHN0cmVhbSwgb3IgYnkKY29uc3RydWN0aW5nIHRoZSBiYXNpY19zdHJpbmdidWYgd2l0aCBhIGJhc2ljX3N0cmluZywgb3IgYnkgY2FsbGluZwp0aGUgc3RyKGJhc2ljX3N0cmluZykgbWVtYmVyIGZ1bmN0aW9uLiAgSW4gdGhlIGNhc2Ugb2YgY2FsbGluZyB0aGUKc3RyKGJhc2ljX3N0cmluZykgbWVtYmVyIGZ1bmN0aW9uLCBhbGwgY2hhcmFjdGVycyBpbml0aWFsaXplZCBwcmlvciB0bwp0aGUgY2FsbCBhcmUgbm93IGNvbnNpZGVyZWQgdW5pbml0aWFsaXplZCAoZXhjZXB0IGZvciB0aG9zZQpjaGFyYWN0ZXJzIHJlLWluaXRpYWxpemVkIGJ5IHRoZSBuZXcgYmFzaWNfc3RyaW5nKS4gIE90aGVyd2lzZSB0aGUKYmFzaWNfc3RyaW5nYnVmIGhhcyBiZWVuIGNyZWF0ZWQgaW4gbmVpdGhlciBpbnB1dCBub3Igb3V0cHV0IG1vZGUgYW5kCmEgemVybyBsZW5ndGggYmFzaWNfc3RyaW5nIGlzIHJldHVybmVkLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPgoyNy43LjEuMi8yIENoYW5nZToKPC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMi0gRWZmZWN0czogSWYgdGhlIGJhc2ljX3N0cmluZ2J1ZidzIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlIGlzCm5vdCBlbXB0eSwgZGVhbGxvY2F0ZXMgaXQuIFRoZW4gY29waWVzIHRoZSBjb250ZW50IG9mIHMgaW50byB0aGUKYmFzaWNfc3RyaW5nYnVmIHVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlIGFuZCBpbml0aWFsaXplcyB0aGUKaW5wdXQgYW5kIG91dHB1dCBzZXF1ZW5jZXMgYWNjb3JkaW5nIHRvIHRoZSBtb2RlIHN0b3JlZCB3aGVuIGNyZWF0aW5nCnRoZSBiYXNpY19zdHJpbmdidWYgb2JqZWN0LiBJZiAobW9kZSZhbXA7aW9zX2Jhc2U6Om91dCkgaXMgdHJ1ZSwgdGhlbgppbml0aWFsaXplcyB0aGUgb3V0cHV0IHNlcXVlbmNlIHdpdGggdGhlIHVuZGVybHlpbmcgc2VxdWVuY2UuIElmCihtb2RlJmFtcDtpb3NfYmFzZTo6aW4pIGlzIHRydWUsIHRoZW4gaW5pdGlhbGl6ZXMgdGhlIGlucHV0IHNlcXVlbmNlIHdpdGgKdGhlIHVuZGVybHlpbmcgc2VxdWVuY2UuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+dG86PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMi0gRWZmZWN0czogQ29waWVzIHRoZSBjb250ZW50IG9mIHMgaW50byB0aGUgYmFzaWNfc3RyaW5nYnVmCnVuZGVybHlpbmcgY2hhcmFjdGVyIHNlcXVlbmNlLiBJZiBtb2RlICZhbXA7IGlvc19iYXNlOjpvdXQgaXMgdHJ1ZSwKaW5pdGlhbGl6ZXMgdGhlIG91dHB1dCBzZXF1ZW5jZSBzdWNoIHRoYXQgcGJhc2UoKSBwb2ludHMgdG8gdGhlIGZpcnN0CnVuZGVybHlpbmcgY2hhcmFjdGVyLCBlcHB0cigpIHBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCB1bmRlcmx5aW5nCmNoYXJhY3RlciwgYW5kIGlmIChtb2RlICZhbXA7IGlvc19iYXNlOjphdGUpIGlzIHRydWUsCnBwdHIoKSBpcyBzZXQgZXF1YWwgdG8gZXBwdHIoKSBlbHNlIHBwdHIoKSBpcyBzZXQgZXF1YWwgdG8gcGJhc2UoKS4gSWYKbW9kZSAmYW1wOyBpb3NfYmFzZTo6aW4gaXMgdHJ1ZSwgaW5pdGlhbGl6ZXMgdGhlIGlucHV0IHNlcXVlbmNlIHN1Y2ggdGhhdAplYmFjaygpIGFuZCBncHRyKCkgcG9pbnQgdG8gdGhlIGZpcnN0IHVuZGVybHlpbmcgY2hhcmFjdGVyIGFuZCBlZ3B0cigpCnBvaW50cyBvbmUgcGFzdCB0aGUgbGFzdCB1bmRlcmx5aW5nIGNoYXJhY3Rlci4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD5SZW1vdmUgMjcuMi4xLjIvMy4gIChTYW1lIHJhdGlvbmFsZSBhcyBpc3N1ZSAyMzg6IGluY29ycmVjdCBhbmQgdW5uZWNlc3NhcnkuKTwvcD4KCjxwPjI3LjcuMS4zLzEgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KMS0gUmV0dXJuczogSWYgdGhlIGlucHV0IHNlcXVlbmNlIGhhcyBhIHJlYWQgcG9zaXRpb24gYXZhaWxhYmxlLApyZXR1cm5zIHRyYWl0czo6dG9faW50X3R5cGUoKmdwdHIoKSkuICBPdGhlcndpc2UsIHJldHVybnMKdHJhaXRzOjplb2YoKS4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+CjEtIFJldHVybnM6IElmIHRoZSBpbnB1dCBzZXF1ZW5jZSBoYXMgYSByZWFkIHBvc2l0aW9uIGF2YWlsYWJsZSwKcmV0dXJucyB0cmFpdHM6OnRvX2ludF90eXBlKCpncHRyKCkpLiAgT3RoZXJ3aXNlLCByZXR1cm5zCnRyYWl0czo6ZW9mKCkuICBBbnkgY2hhcmFjdGVyIGluIHRoZSB1bmRlcmx5aW5nIGJ1ZmZlciB3aGljaCBoYXMgYmVlbgppbml0aWFsaXplZCBpcyBjb25zaWRlcmVkIHRvIGJlIHBhcnQgb2YgdGhlIGlucHV0IHNlcXVlbmNlLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPjI3LjcuMS4zLzkgQ2hhbmdlOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTktIE5vdGVzOiBUaGUgZnVuY3Rpb24gY2FuIG1ha2UgYSB3cml0ZSBwb3NpdGlvbiBhdmFpbGFibGUgb25seSBpZiAoCm1vZGUgJmFtcDsgaW9zX2Jhc2U6Om91dCkgIT0gMC4gVG8gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSwgdGhlCmZ1bmN0aW9uIHJlYWxsb2NhdGVzIChvciBpbml0aWFsbHkgYWxsb2NhdGVzKSBhbiBhcnJheSBvYmplY3Qgd2l0aCBhCnN1ZmZpY2llbnQgbnVtYmVyIG9mIGVsZW1lbnRzIHRvIGhvbGQgdGhlIGN1cnJlbnQgYXJyYXkgb2JqZWN0IChpZgphbnkpLCBwbHVzIG9uZSBhZGRpdGlvbmFsIHdyaXRlIHBvc2l0aW9uLiBJZiAoIG1vZGUgJmFtcDsgaW9zX2Jhc2U6OmluKSAhPQowLCB0aGUgZnVuY3Rpb24gYWx0ZXJzIHRoZSByZWFkIGVuZCBwb2ludGVyIGVncHRyKCkgdG8gcG9pbnQganVzdCBwYXN0CnRoZSBuZXcgd3JpdGUgcG9zaXRpb24gKGFzIGRvZXMgdGhlIHdyaXRlIGVuZCBwb2ludGVyIGVwcHRyKCkpLgo8L3A+CjwvYmxvY2txdW90ZT4KCjxwPnRvOjwvcD4KCjxibG9ja3F1b3RlPgo8cD4KLTktIFRoZSBmdW5jdGlvbiBjYW4gbWFrZSBhIHdyaXRlIHBvc2l0aW9uIGF2YWlsYWJsZSBvbmx5IGlmICggbW9kZSAmYW1wOwppb3NfYmFzZTo6b3V0KSAhPSAwLiBUbyBtYWtlIGEgd3JpdGUgcG9zaXRpb24gYXZhaWxhYmxlLCB0aGUgZnVuY3Rpb24KcmVhbGxvY2F0ZXMgKG9yIGluaXRpYWxseSBhbGxvY2F0ZXMpIGFuIGFycmF5IG9iamVjdCB3aXRoIGEgc3VmZmljaWVudApudW1iZXIgb2YgZWxlbWVudHMgdG8gaG9sZCB0aGUgY3VycmVudCBhcnJheSBvYmplY3QgKGlmIGFueSksIHBsdXMgb25lCmFkZGl0aW9uYWwgd3JpdGUgcG9zaXRpb24uIElmICggbW9kZSAmYW1wOyBpb3NfYmFzZTo6aW4pICE9IDAsIHRoZQpmdW5jdGlvbiBhbHRlcnMgdGhlIHJlYWQgZW5kIHBvaW50ZXIgZWdwdHIoKSB0byBwb2ludCBqdXN0IHBhc3QgdGhlCm5ldyB3cml0ZSBwb3NpdGlvbi4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD4yNy43LjEuMy8xMiBDaGFuZ2U6PC9wPgoKPGJsb2NrcXVvdGU+CjxwPgotMTItIF8gSWYgKG5ld29mZiArIG9mZikgJmx0OyAwLCBvciAoeGVuZCAtIHhiZWcpICZsdDsgKG5ld29mZiArIG9mZiksIHRoZQpwb3NpdGlvbmluZyBvcGVyYXRpb24gZmFpbHMuIE90aGVyd2lzZSwgdGhlIGZ1bmN0aW9uIGFzc2lnbnMgeGJlZyArCm5ld29mZiArIG9mZiB0byB0aGUgbmV4dCBwb2ludGVyIHhuZXh0IC4KPC9wPgo8L2Jsb2NrcXVvdGU+Cgo8cD50bzo8L3A+Cgo8YmxvY2txdW90ZT4KPHA+Ci0xMi0gXyBJZiAobmV3b2ZmICsgb2ZmKSAmbHQ7IDAsIG9yIGlmIChuZXdvZmYgKyBvZmYpIHJlZmVycyB0byBhbgp1bmluaXRpYWxpemVkIGNoYXJhY3RlciAoYXMgZGVmaW5lZCBpbiAyNy43LjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuc3RyaW5nYnVmLm1lbWJlcnMiPiBbbGliLnN0cmluZ2J1Zi5tZW1iZXJzXTwvYT4KcGFyYWdyYXBoIDEpLCB0aGUgcG9zaXRpb25pbmcgb3BlcmF0aW9uIGZhaWxzLiBPdGhlcndpc2UsIHRoZSBmdW5jdGlvbgphc3NpZ25zIHhiZWcgKyBuZXdvZmYgKyBvZmYgdG8gdGhlIG5leHQgcG9pbnRlciB4bmV4dCAuCjwvcD4KPC9ibG9ja3F1b3RlPgoKPHA+PGk+W3Bvc3QtS29uYTogSG93YXJkIHByb3ZpZGVkIHdvcmRpbmcuICBBdCBLb25hIHRoZSBMV0cgYWdyZWVkIHRoYXQKICBzb21ldGhpbmcgYWxvbmcgdGhlc2UgbGluZXMgd2FzIGEgZ29vZCBpZGVhLCBidXQgdGhlIG9yaWdpbmFsCiAgcHJvcG9zZWQgcmVzb2x1dGlvbiBkaWRuJ3Qgc2F5IGVub3VnaCBhYm91dCB0aGUgZWZmZWN0IG9mIHZhcmlvdXMKICBtZW1iZXIgZnVuY3Rpb25zIG9uIHRoZSB1bmRlcmx5aW5nIGNoYXJhY3RlciBzZXF1ZW5jZXMuXTwvaT48L3A+Cgo8cD48Yj5SYXRpb25hbGU6PC9iPjwvcD4KPHA+VGhlIGN1cnJlbnQgYmFzaWNfc3RyaW5nYnVmIGRlc2NyaXB0aW9uIGlzIG92ZXItY29uc3RyYWluZWQgaW4gc3VjaAphIHdheSBhcyB0byBwcm9oaWJpdCB2ZW5kb3JzIGZyb20gbWFraW5nIHRoaXMgdGhlIGhpZ2gtcGVyZm9ybWFuY2UKaW4tbWVtb3J5IHN0cmVhbSBpdCB3YXMgbWVhbnQgdG8gYmUuICBUaGUgZnVuZGFtZW50YWwgcHJvYmxlbSBpcyB0aGF0CnRoZSBwb2ludGVyczogZWJhY2soKSwgZ3B0cigpLCBlZ3B0cigpLCBwYmFzZSgpLCBwcHRyKCksIGVwcHRyKCkgYXJlCm9ic2VydmFibGUgZnJvbSBhIGRlcml2ZWQgY2xpZW50LCBhbmQgdGhlIGN1cnJlbnQgZGVzY3JpcHRpb24KcmVzdHJpY3RzIHRoZSByYW5nZSBbcGJhc2UoKSwgZXBwdHIoKSkgZnJvbSBiZWluZyBncm93biBnZW9tZXRyaWNhbGx5LgpUaGlzIGNoYW5nZSBhbGxvd3MsIGJ1dCBkb2VzIG5vdCByZXF1aXJlLCBnZW9tZXRyaWMgZ3Jvd3RoIG9mIHRoaXMKcmFuZ2UuPC9wPgoKPHA+QmFja3dhcmRzIGNvbXBhdGliaWxpdHkgaXNzdWVzOiBUaGVzZSBjaGFuZ2VzIHdpbGwgYnJlYWsgY29kZSB0aGF0CmRlcml2ZXMgZnJvbSBiYXNpY19zdHJpbmdidWYsIG9ic2VydmVzIGVwcHRyKCksIGFuZCBkZXBlbmRzIHVwb24KW3BiYXNlKCksIGVwcHRyKCkpIGdyb3dpbmcgYnkgb25lIGNoYXJhY3RlciBvbiBlYWNoIGNhbGwgdG8gb3ZlcmZsb3coKQooaS5lLiB0ZXN0IHN1aXRlcykuICBPdGhlcndpc2UgdGhlcmUgYXJlIG5vIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5Cmlzc3Vlcy48L3A+Cgo8cD4yNy43LjEuMS8yOiBUaGUgbm9uLW5vcm1hdGl2ZSBub3RlIGlzIG5vbi1iaW5kaW5nLCBhbmQgaWYgaXQgd2VyZQpiaW5kaW5nLCB3b3VsZCBiZSBvdmVyIHNwZWNpZmljYXRpb24uICBUaGUgcmVjb21tZW5kZWQgY2hhbmdlIGZvY3VzZXMKb24gdGhlIGltcG9ydGFudCBvYnNlcnZhYmxlIGZhY3QuPC9wPgoKPHA+MjcuNy4xLjEvMzogVGhpcyBjaGFuZ2UgZG9lcyB0d28gdGhpbmdzOiAxLiAgSXQgZGVzY3JpYmVzIGV4YWN0bHkKd2hhdCBtdXN0IGhhcHBlbiBpbiB0ZXJtcyBvZiB0aGUgc2VxdWVuY2VzLiAgVGhlIHRlcm1zICJpbnB1dApzZXF1ZW5jZSIgYW5kICJvdXRwdXQgc2VxdWVuY2UiIGFyZSBub3Qgd2VsbCBkZWZpbmVkLiAgMi4gIEl0CmludHJvZHVjZXMgYSBjb21tb24gZXh0ZW5zaW9uOiBvcGVuIHdpdGggYXBwIG9yIGF0ZSBtb2RlLiAgSSBjb25jdXIKd2l0aCBpc3N1ZSAyMzggdGhhdCBwYXJhZ3JhcGggNCBpcyBib3RoIHdyb25nIGFuZCB1bm5lY2Vzc2FyeS48L3A+Cgo8cD4yNy43LjEuMi8xOiBUaGlzIGNoYW5nZSBpcyB0aGUgY3J1eCBvZiB0aGUgZWZmaWNpZW5jeSBpc3N1ZS4gIFRoZQpyZXN1bHRhbnQgYmFzaWNfc3RyaW5nIGlzIG5vdCBkZXBlbmRlbnQgdXBvbiBlcHB0cigpLCBhbmQgdGh1cwppbXBsZW1lbnRvcnMgYXJlIGZyZWUgdG8gZ3JvdyB0aGUgdW5kZXJseWluZyBidWZmZXIgZ2VvbWV0cmljYWxseQpkdXJpbmcgb3ZlcmZsb3coKSAqYW5kKiBwbGFjZSBlcHB0cigpIGF0IHRoZSBlbmQgb2YgdGhhdCBidWZmZXIuPC9wPgoKPHA+MjcuNy4xLjIvMjogIE1hZGUgY29uc2lzdGVudCB3aXRoIHRoZSBwcm9wb3NlZCAyNy43LjEuMS8zLjwvcD4KCjxwPjI3LjcuMS4zLzE6IENsYXJpZmllcyB0aGF0IGNoYXJhY3RlcnMgd3JpdHRlbiB0byB0aGUgc3RyZWFtIGJleW9uZAp0aGUgaW5pdGlhbGx5IHNwZWNpZmllZCBzdHJpbmcgYXJlIGF2YWlsYWJsZSBmb3IgcmVhZGluZyBpbiBhbiBpL28KYmFzaWNfc3RyZWFtYnVmLjwvcD4KCjxwPjI3LjcuMS4zLzk6IE1hZGUgbm9ybWF0aXZlIGJ5IHJlbW92aW5nICJOb3RlczoiLCBhbmQgcmVtb3ZlZCB0aGUKdHJhaWxpbmcgcGFyZW50aGV0aWNhbCBjb21tZW50IGNvbmNlcm5pbmcgZXBwdHIoKS48L3A+Cgo8cD4yNy43LjEuMy8xMjogUmVzdHJpY3RpbmcgdGhlIHBvc2l0aW9uaW5nIHRvIFt4YmVnLCB4ZW5kKSBpcyBubwpsb25nZXIgYWxsb3dhYmxlIHNpbmNlIFtwYmFzZSgpLCBlcHB0cigpKSBtYXkgbm93IGNvbnRhaW4KdW5pbml0aWFsaXplZCBjaGFyYWN0ZXJzLiAgUG9zaXRpb25pbmcgaXMgb25seSBhbGxvd2FibGUgb3ZlciB0aGUKaW5pdGlhbGl6ZWQgcmFuZ2UuPC9wPgo8aHI+CjxhIG5hbWU9IjQzNSI+PGgzPjQzNS4mbmJzcDtidWcgaW4gRFIgMjU8L2gzPjwvYT48cD48Yj5TZWN0aW9uOjwvYj4mbmJzcDsyMS4zLjcuOSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdHJpbmdzLmh0bWwjbGliLnN0cmluZy5pbyI+IFtsaWIuc3RyaW5nLmlvXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IE9jdCAyMDAzPC9wPgoKPHA+Ckl0IGhhcyBiZWVuIHBvaW50ZWQgb3V0IHRoYXQgdGhlIHByb3Bvc2VkIHJlc29sdXRpb24gaW4gRFIgMjUgbWF5IG5vdCBiZQpxdWl0ZSB1cCB0byBzbnVmZjogPGJyPgpodHRwOi8vZ2NjLmdudS5vcmcvbWwvbGlic3RkYysrLzIwMDMtMDkvbXNnMDAxNDcuaHRtbApodHRwOi8vYW51YmlzLmRrdXVnLmRrL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWRlZmVjdHMuaHRtbCMyNTxicj4KPC9wPgoKPHA+Ckl0IGxvb2tzIGxpa2UgUGV0dXIgaXMgcmlnaHQuIFRoZSBjb21wbGV0ZSBjb3JyZWN0ZWQgdGV4dCBpcyBjb3BpZWQgYmVsb3cuCkkgdGhpbmsgd2UgbWF5IGhhdmUgaGF2ZSBiZWVuIGNvbmZ1c2VkIGJ5IHRoZSByZWZlcmVuY2UgdG8gMjIuMi4yLjIuMiBhbmQKdGhlIHN1YnNlcXVlbnQgZGVzY3JpcHRpb24gb2YgYG4nIHdoaWNoIGFjdHVhbGx5IHRhbGtzIGFib3V0IHRoZSBzZWNvbmQKYXJndW1lbnQgdG8gc3B1dG4oKSwgbm90IGFib3V0IHRoZSBudW1iZXIgb2YgZmlsbCBjaGFyYWN0ZXJzIHRvIHBhZCB3aXRoLgo8L3A+Cgo8cD4KU28gdGhlIHF1ZXN0aW9uIGlzOiB3YXMgdGhlIG9yaWdpbmFsIHRleHQgY29ycmVjdD8gSWYgdGhlIGludGVudCB3YXMgdG8KZm9sbG93IGNsYXNzaWMgaW9zdHJlYW1zIHRoZW4gaXQgbW9zdCBsaWtlbHkgd2Fzbid0LCBzaW5jZSBzZXR0aW5nIHdpZHRoKCkKdG8gbGVzcyB0aGFuIHRoZSBsZW5ndGggb2YgdGhlIHN0cmluZyBkb2Vzbid0IHRydW5jYXRlIGl0IG9uIG91dHB1dC4gVGhpcwppcyBhbHNvIHRoZSBiZWhhdmlvciBvZiBtb3N0IGltcGxlbWVudGF0aW9ucyAoZXhjZXB0IGZvciBTR0kncyBzdGFuZGFyZAppb3N0cmVhbXMgd2hlcmUgdGhlIG9wZXJhdG9yIGRvZXMgdHJ1bmNhdGUpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIHRoZSB0ZXh0IGluIDIxLjMuNy45LCBwNCBmcm9tPC9wPgogICAgPGJsb2NrcXVvdGU+CiAgICBJZiBib29sKGspIGlzIHRydWUsIGluc2VydHMgY2hhcmFjdGVycyBhcyBpZiBieSBjYWxsaW5nCiAgICBvcy5yZGJ1ZigpLSZndDtzcHV0bihzdHIuZGF0YSgpLCBuKSwgcGFkZGluZyBhcyBkZXNjcmliZWQgaW4gc3RhZ2UgMwogICAgb2YgbGliLmZhY2V0Lm51bS5wdXQudmlydHVhbHMsIHdoZXJlIG4gaXMgdGhlIGxhcmdlciBvZiBvcy53aWR0aCgpCiAgICBhbmQgc3RyLnNpemUoKTsgCiAgICA8L2Jsb2NrcXVvdGU+CjxwPnRvPC9wPgogICAgPGJsb2NrcXVvdGU+CiAgICBJZiBib29sKGspIGlzIHRydWUsIGRldGVybWluZXMgcGFkZGluZyBhcyBkZXNjcmliZWQgaW4KICAgIGxpYi5mYWNldC5udW0ucHV0LnZpcnR1YWxzLCBhbmQgdGhlbiBpbnNlcnRzIHRoZSByZXN1bHRpbmcKICAgIHNlcXVlbmNlIG9mIGNoYXJhY3RlcnMgPHR0PnNlcTwvdHQ+IGFzIGlmIGJ5IGNhbGxpbmcKICAgIDx0dD5vcy5yZGJ1ZigpLSZndDtzcHV0bihzZXEsIG4pPC90dD4sIHdoZXJlIDx0dD5uPC90dD4gaXMgdGhlIGxhcmdlciBvZgogICAgPHR0Pm9zLndpZHRoKCk8L3R0PiBhbmQgPHR0PnN0ci5zaXplKCk8L3R0PjsKICAgICA8L2Jsb2NrcXVvdGU+Cgo8cD48aT5bS29uYTogaXQgYXBwZWFycyB0aGF0IG5laXRoZXIgdGhlIG9yaWdpbmFsIHdvcmRpbmcsIERSMjUsIG5vciB0aGUKICBwcm9wb3NlZCByZXNvbHV0aW9uLCBpcyBxdWl0ZSB3aGF0IHdlIHdhbnQuICBXZSB3YW50IHRvIHNheSB0aGF0CiAgdGhlIHN0cmluZyB3aWxsIGJlIG91dHB1dCwgcGFkZGVkIHRvIG9zLndpZHRoKCkgaWYgbmVjZXNzYXJ5LiAgV2UKICBkb24ndCB3YW50IHRvIGR1cGxpY2F0ZSB0aGUgcGFkZGluZyBydWxlcyBpbiBjbGF1c2UgMjIsIGJlY2F1c2UKICB0aGV5J3JlIGNvbXBsaWNhdGVkLCBidXQgd2UgbmVlZCB0byBiZSBjYXJlZnVsIGJlY2F1c2UgdGhleSB3ZXJlbid0CiAgcXVpdGUgd3JpdHRlbiB3aXRoIHF1aXRlIHRoaXMgY2FzZSBpbiBtaW5kLiAgV2UgbmVlZCB0byBzYXkgd2hhdAogIHRoZSBjaGFyYWN0ZXIgc2VxdWVuY2UgaXMsIGFuZCB0aGVuIGRlZmVyIHRvIGNsYXVzZSAyMi4gIFBvc3QtS29uYToKICBCZW5qYW1pbiBwcm92aWRlZCB3b3JkaW5nLl08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI0MzYiPjxoMz40MzYuJm5ic3A7YXJlIGN2LXF1YWxpZmllZCBmYWNldCB0eXBlcyB2YWxpZCBmYWNldHM/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjIuMS4xLjEuMiA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1sb2NhbGVzLmh0bWwjbGliLmxvY2FsZS5mYWNldCI+IFtsaWIubG9jYWxlLmZhY2V0XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNXUCI+V1A8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7TWFydGluIFNlYm9yJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzE1IE9jdCAyMDAzPC9wPgo8cD4KSXMgImNvbnN0IHN0ZDo6Y3R5cGUmbHQ7Y2hhciZndDsiIGEgdmFsaWQgdGVtcGxhdGUgYXJndW1lbnQgdG8gaGFzX2ZhY2V0LCB1c2VfZmFjZXQsCmFuZCB0aGUgbG9jYWxlIHRlbXBsYXRlIGN0b3I/IEFuZCBpZiBzbywgZG9lcyBpdCBkZXNpZ25hdGUgdGhlIHNhbWUgRmFjZXQgYXMKdGhlIG5vbi1jb25zdCAic3RkOjpjdHlwZSZsdDtjaGFyJmd0Oz8iIFdoYXQgYWJvdXQgInZvbGF0aWxlIHN0ZDo6Y3R5cGUmbHQ7Y2hhciZndDs/IgpEaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zIGJlaGF2ZSBkaWZmZXJlbnRseTogc29tZSBmYWlsIHRvIGNvbXBpbGUsIG90aGVycwphY2NlcHQgc3VjaCB0eXBlcyBidXQgYmVoYXZlIGluY29uc2lzdGVudGx5Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+Q2hhbmdlIDIyLjEuMS4xLjIsIHAxIHRvIHJlYWQ6PC9wPgoKPHA+VGVtcGxhdGUgcGFyYW1ldGVycyBpbiB0aGlzIGNsYXVzZSB3aGljaCBhcmUgcmVxdWlyZWQgdG8gYmUgZmFjZXRzCmFyZSB0aG9zZSBuYW1lZCBGYWNldCBpbiBkZWNsYXJhdGlvbnMuIEEgcHJvZ3JhbSB0aGF0IHBhc3NlcyBhIHR5cGUKdGhhdCBpcyBub3QgYSBmYWNldCwgb3IgYSB0eXBlIHRoYXQgcmVmZXJzIHRvIHZvbGF0aWxlLXF1YWxpZmllZApmYWNldCwgYXMgYW4gKGV4cGxpY2l0IG9yIGRlZHVjZWQpIHRlbXBsYXRlIHBhcmFtZXRlciB0byBhIGxvY2FsZQpmdW5jdGlvbiBleHBlY3RpbmcgYSBmYWNldCwgaXMgaWxsLWZvcm1lZC4gIEEgY29uc3QtcXVhbGlmaWVkIGZhY2V0IGlzCmEgdmFsaWQgdGVtcGxhdGUgYXJndW1lbnQgdG8gYW55IGxvY2FsZSBmdW5jdGlvbiB0aGF0IGV4cGVjdHMgYSBGYWNldAp0ZW1wbGF0ZSBwYXJhbWV0ZXIuPC9wPgoKPHA+PGk+W0tvbmE6IGNoYW5nZWQgdGhlIGxhc3Qgc2VudGVuY2UgZnJvbSBhIGZvb3Rub3RlIHRvIG5vcm1hdGl2ZQp0ZXh0Ll08L2k+PC9wPgoKPGhyPgo8YSBuYW1lPSI0NDEiPjxoMz40NDEuJm5ic3A7SXMgZnBvczo6c3RhdGUgY29uc3Q/PC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNC4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mcG9zIj4gW2xpYi5mcG9zXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VmluY2VudCBMZWxvdXAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTcgTm92IDIwMDM8L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjQuMy4xIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5mcG9zLm1lbWJlcnMiPiBbbGliLmZwb3MubWVtYmVyc108L2E+IGZwb3MmbHQ7c3RhdGVUJmd0Ozo6c3RhdGUoKSBpcyBkZWNsYXJlZApub24gY29uc3QsIGJ1dCBpbiBzZWN0aW9uIDI3LjQuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZnBvcyI+IFtsaWIuZnBvc108L2E+IGl0IGlzIGRlY2xhcmVkIGNvbnN0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjcuNC4zLjEgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLmZwb3MubWVtYmVycyI+IFtsaWIuZnBvcy5tZW1iZXJzXTwvYT4sIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24gb2YgCjx0dD5mcG9zJmx0O3N0YXRlVCZndDs6OnN0YXRlKCk8L3R0PiB0byBjb25zdC4KPC9wPgo8aHI+CjxhIG5hbWU9IjQ0MiI+PGgzPjQ0Mi4mbmJzcDtzZW50cnk6Om9wZXJhdG9yIGJvb2woKSBpbmNvbnNpc3RlbnQgc2lnbmF0dXJlPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MjcuNi4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW06OnNlbnRyeSI+IFtsaWIub3N0cmVhbTo6c2VudHJ5XTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7VmluY2VudCBMZWxvdXAmbmJzcDsgPGI+RGF0ZTo8L2I+Jm5ic3A7MTggTm92IDIwMDM8L3A+CjxwPgpJbiBzZWN0aW9uIDI3LjYuMi4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5vc3RyZWFtOjpzZW50cnkiPiBbbGliLm9zdHJlYW06OnNlbnRyeV08L2E+IHBhcmFncmFwaCA0LCBpbiBkZXNjcmlwdGlvbiBwYXJ0CmJhc2ljX29zdHJlYW0mbHQ7Y2hhclQsIHRyYWl0cyZndDs6OnNlbnRyeTo6b3BlcmF0b3IgYm9vbCgpIGlzIGRlY2xhcmVkCmFzIG5vbiBjb25zdCwgYnV0IGluIHNlY3Rpb24gMjcuNi4yLjMsIGluIHN5bm9wc2lzIGl0IGlzIGRlY2xhcmVkCmNvbnN0Lgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkluIHNlY3Rpb24gMjcuNi4yLjMgPGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9saWItaW9zdHJlYW1zLmh0bWwjbGliLm9zdHJlYW06OnNlbnRyeSI+IFtsaWIub3N0cmVhbTo6c2VudHJ5XTwvYT4gcGFyYWdyYXBoIDQsIGNoYW5nZSB0aGUgZGVjbGFyYXRpb24Kb2YgPHR0PnNlbnRyeTo6b3BlcmF0b3IgYm9vbCgpPC90dD4gdG8gY29uc3QuCjwvcD4KPGhyPgo8YSBuYW1lPSI0NDMiPjxoMz40NDMuJm5ic3A7ZmlsZWJ1Zjo6Y2xvc2UoKSBpbmNvbnNpc3RlbnQgdXNlIG9mIEVPRjwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI3LjguMS4zIDxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbGliLWlvc3RyZWFtcy5odG1sI2xpYi5maWxlYnVmLm1lbWJlcnMiPiBbbGliLmZpbGVidWYubWVtYmVyc108L2E+Jm5ic3A7IDxiPlN0YXR1czo8L2I+Jm5ic3A7PGEgaHJlZj0iaHR0cDovL3d3dy5vcGVuLXN0ZC5vcmcvanRjMS9zYzIyL3dnMjEvZG9jcy9sd2ctYWN0aXZlLmh0bWwjRFIiPkRSPC9hPiZuYnNwOyA8Yj5TdWJtaXR0ZXI6PC9iPiZuYnNwO1ZpbmNlbnQgTGVsb3VwJm5ic3A7IDxiPkRhdGU6PC9iPiZuYnNwOzIwIE5vdiAyMDAzPC9wPgo8cD4KSW4gc2VjdGlvbiAyNy44LjEuMyA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pb3N0cmVhbXMuaHRtbCNsaWIuZmlsZWJ1Zi5tZW1iZXJzIj4gW2xpYi5maWxlYnVmLm1lbWJlcnNdPC9hPiBwYXI2LCBpbiBlZmZlY3RzIGRlc2NyaXB0aW9uIG9mCmJhc2ljX2ZpbGVidWYmbHQ7Y2hhclQsIHRyYWl0cyZndDs6OmNsb3NlKCksIG92ZXJmbG93KEVPRikgaXMgdXNlZCB0d2ljZTsKc2hvdWxkIGJlIG92ZXJmbG93KHRyYWl0czo6ZW9mKCkpLgo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSBvdmVyZmxvdyhFT0YpIHRvIG92ZXJmbG93KHRyYWl0czo6ZW9mKCkpLgo8L3A+Cjxocj4KPGEgbmFtZT0iNDQ4Ij48aDM+NDQ4LiZuYnNwO1JhbmRvbSBBY2Nlc3MgSXRlcmF0b3JzIG92ZXIgYWJzdHJhY3QgY2xhc3NlczwvaDM+PC9hPjxwPjxiPlNlY3Rpb246PC9iPiZuYnNwOzI0LjEuNSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1pdGVyYXRvcnMuaHRtbCNsaWIucmFuZG9tLmFjY2Vzcy5pdGVyYXRvcnMiPiBbbGliLnJhbmRvbS5hY2Nlc3MuaXRlcmF0b3JzXTwvYT4mbmJzcDsgPGI+U3RhdHVzOjwvYj4mbmJzcDs8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2x3Zy1hY3RpdmUuaHRtbCNEUiI+RFI8L2E+Jm5ic3A7IDxiPlN1Ym1pdHRlcjo8L2I+Jm5ic3A7RGF2ZSBBYnJhaGFtcyZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDs3IEphbiAyMDA0PC9wPgo8cD4KVGFibGUgNzYsIHRoZSByYW5kb20gYWNjZXNzIGl0ZXJhdG9yIHJlcXVpcmVtZW50IHRhYmxlLCBzYXlzIHRoYXQgdGhlCnJldHVybiB0eXBlIG9mIGFbbl0gbXVzdCBiZSAiY29udmVydGlibGUgdG8gVCIuICBXaGVuIGFuIGl0ZXJhdG9yJ3MKdmFsdWVfdHlwZSBUIGlzIGFuIGFic3RyYWN0IGNsYXNzLCBub3RoaW5nIGlzIGNvbnZlcnRpYmxlIHRvIFQuClN1cmVseSB0aGlzIGlzbid0IGFuIGludGVuZGVkIHJlc3RyaWN0aW9uPwo8L3A+CjxwPjxiPlByb3Bvc2VkIHJlc29sdXRpb246PC9iPjwvcD4KPHA+CkNoYW5nZSB0aGUgcmV0dXJuIHR5cGUgdG8gImNvbnZlcnRpYmxlIHRvIFQgY29uc3QmYW1wOyIuCjwvcD4KPGhyPgo8YSBuYW1lPSI0NDkiPjxoMz40NDkuJm5ic3A7TGlicmFyeSBJc3N1ZSAzMDYgR29lcyBUb28gRmFyPC9oMz48L2E+PHA+PGI+U2VjdGlvbjo8L2I+Jm5ic3A7MTguMSA8YSBocmVmPSJodHRwOi8vd3d3Lm9wZW4tc3RkLm9yZy9qdGMxL3NjMjIvd2cyMS9kb2NzL2xpYi1zdXBwb3J0Lmh0bWwjbGliLnN1cHBvcnQudHlwZXMiPiBbbGliLnN1cHBvcnQudHlwZXNdPC9hPiZuYnNwOyA8Yj5TdGF0dXM6PC9iPiZuYnNwOzxhIGhyZWY9Imh0dHA6Ly93d3cub3Blbi1zdGQub3JnL2p0YzEvc2MyMi93ZzIxL2RvY3MvbHdnLWFjdGl2ZS5odG1sI0RSIj5EUjwvYT4mbmJzcDsgPGI+U3VibWl0dGVyOjwvYj4mbmJzcDtQZXRlIEJlY2tlciZuYnNwOyA8Yj5EYXRlOjwvYj4mbmJzcDsxNSBKYW4gMjAwNDwvcD4KPHA+T3JpZ2luYWwgdGV4dDo8L3A+CjxibG9ja3F1b3RlPgpUaGUgbWFjcm8gb2Zmc2V0b2YgYWNjZXB0cyBhIHJlc3RyaWN0ZWQgc2V0IG9mIHR5cGUgYXJndW1lbnRzIGluIHRoaXMKSW50ZXJuYXRpb25hbCBTdGFuZGFyZC4gdHlwZSBzaGFsbCBiZSBhIFBPRCBzdHJ1Y3R1cmUgb3IgYSBQT0QgdW5pb24KKGNsYXVzZSA5KS4gVGhlIHJlc3VsdCBvZiBhcHBseWluZyB0aGUgb2Zmc2V0b2YgbWFjcm8gdG8gYSBmaWVsZCB0aGF0CmlzIGEgc3RhdGljIGRhdGEgbWVtYmVyIG9yIGEgZnVuY3Rpb24gbWVtYmVyIGlzIHVuZGVmaW5lZC4iCjwvYmxvY2txdW90ZT4KCjxwPlJldmlzZWQgdGV4dDo8L3A+CjxibG9ja3F1b3RlPgoiSWYgdHlwZSBpcyBub3QgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuIgo8L2Jsb2NrcXVvdGU+Cgo8cD4KTG9va3MgdG8gbWUgbGlrZSB0aGUgcmV2aXNlZCB0ZXh0IHNob3VsZCBoYXZlIHJlcGxhY2VkIG9ubHkgdGhlIHNlY29uZApzZW50ZW5jZS4gSXQgZG9lc24ndCBtYWtlIHNlbnNlIHN0YW5kaW5nIGFsb25lLgo8L3A+Cgo8cD48Yj5Qcm9wb3NlZCByZXNvbHV0aW9uOjwvYj48L3A+CjxwPkNoYW5nZSAxOC4xLCBwYXJhZ3JhcGggNSwgdG86PC9wPgoKPGJsb2NrcXVvdGU+ClRoZSBtYWNybyBvZmZzZXRvZiBhY2NlcHRzIGEgcmVzdHJpY3RlZCBzZXQgb2YgdHlwZSBhcmd1bWVudHMgaW4gdGhpcwpJbnRlcm5hdGlvbmFsIFN0YW5kYXJkLiAgSWYgdHlwZSBpcyBub3QgYSBQT0Qgc3RydWN0dXJlIG9yIGEgUE9EIHVuaW9uCnRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuICBUaGUgcmVzdWx0IG9mIGFwcGx5aW5nIHRoZSBvZmZzZXRvZiBtYWNybwp0byBhIGZpZWxkIHRoYXQgaXMgYSBzdGF0aWMgZGF0YSBtZW1iZXIgb3IgYSBmdW5jdGlvbiBtZW1iZXIgaXMKdW5kZWZpbmVkLiIKPC9ibG9ja3F1b3RlPgo8cD4tLS0tLSBFbmQgb2YgZG9jdW1lbnQgLS0tLS08L3A+CjwvYm9keT48L2h0bWw+